author | llornkcor <llornkcor> | 2004-12-27 23:41:09 (UTC) |
---|---|---|
committer | llornkcor <llornkcor> | 2004-12-27 23:41:09 (UTC) |
commit | 02395040e422485ceb2fa435a3fb30879d5f3df2 (patch) (unidiff) | |
tree | 0052da61e1a209bddf2da6f130210d569610de9f /noncore/apps/opie-bartender/bartender.cpp | |
parent | b2b6055b9180214150cdbbff72b79b35db379fb2 (diff) | |
download | opie-02395040e422485ceb2fa435a3fb30879d5f3df2.zip opie-02395040e422485ceb2fa435a3fb30879d5f3df2.tar.gz opie-02395040e422485ceb2fa435a3fb30879d5f3df2.tar.bz2 |
new code from Paul Eggleton
Diffstat (limited to 'noncore/apps/opie-bartender/bartender.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/apps/opie-bartender/bartender.cpp | 201 |
1 files changed, 83 insertions, 118 deletions
diff --git a/noncore/apps/opie-bartender/bartender.cpp b/noncore/apps/opie-bartender/bartender.cpp index b4958b3..bee164c 100644 --- a/noncore/apps/opie-bartender/bartender.cpp +++ b/noncore/apps/opie-bartender/bartender.cpp | |||
@@ -17,2 +17,3 @@ | |||
17 | #include "bac.h" | 17 | #include "bac.h" |
18 | #include "drinkdata.h" | ||
18 | 19 | ||
@@ -57,2 +58,4 @@ Bartender::Bartender( QWidget* parent, const char* name, WFlags fl ) | |||
57 | 58 | ||
59 | setToolBarsMovable( FALSE ); | ||
60 | |||
58 | ToolBar1 = new QToolBar( this, "ToolBar1" ); | 61 | ToolBar1 = new QToolBar( this, "ToolBar1" ); |
@@ -69,3 +72,3 @@ Bartender::Bartender( QWidget* parent, const char* name, WFlags fl ) | |||
69 | fileMenu->insertItem(tr("Find by Drink Name")); | 72 | fileMenu->insertItem(tr("Find by Drink Name")); |
70 | fileMenu->insertItem(tr("Find by Alcohol")); | 73 | fileMenu->insertItem(tr("Find by Ingredient")); |
71 | 74 | ||
@@ -74,3 +77,3 @@ Bartender::Bartender( QWidget* parent, const char* name, WFlags fl ) | |||
74 | menuBar->insertItem( tr("Edit"), editMenu ); | 77 | menuBar->insertItem( tr("Edit"), editMenu ); |
75 | editMenu->insertItem(tr("edit")); | 78 | editMenu->insertItem(tr("Edit Drink")); |
76 | 79 | ||
@@ -112,7 +115,10 @@ Bartender::Bartender( QWidget* parent, const char* name, WFlags fl ) | |||
112 | layout->addMultiCellWidget( DrinkView, 1, 2, 0, 4 ); | 115 | layout->addMultiCellWidget( DrinkView, 1, 2, 0, 4 ); |
113 | if(QDir("db").exists()) { | 116 | if(QDir("db").exists()) |
114 | dbFile.setName( "db/drinkdb.txt"); | 117 | drinkDB.setFile("db/drinkdb.txt"); |
115 | } else | 118 | else |
116 | dbFile.setName( QPEApplication::qpeDir()+"etc/bartender/drinkdb.txt"); | 119 | drinkDB.setFile(QPEApplication::qpeDir()+"etc/bartender/drinkdb.txt"); |
120 | |||
117 | initDrinkDb(); | 121 | initDrinkDb(); |
122 | |||
123 | DrinkView->setFocus(); | ||
118 | } | 124 | } |
@@ -125,3 +131,2 @@ this happens right before exit */ | |||
125 | void Bartender::cleanUp() { | 131 | void Bartender::cleanUp() { |
126 | dbFile.close(); | ||
127 | 132 | ||
@@ -130,9 +135,6 @@ void Bartender::cleanUp() { | |||
130 | void Bartender::initDrinkDb() { | 135 | void Bartender::initDrinkDb() { |
131 | 136 | if(drinkDB.read()) | |
132 | if(!dbFile.isOpen()) | ||
133 | if ( !dbFile.open( IO_ReadOnly)) { | ||
134 | QMessageBox::message( (tr("Note")), (tr("Drink database not opened sucessfully.\n")) ); | ||
135 | return; | ||
136 | } | ||
137 | fillList(); | 137 | fillList(); |
138 | else | ||
139 | QMessageBox::message( (tr("Note")), (tr("Drink database not opened sucessfully.\n")) ); | ||
138 | } | 140 | } |
@@ -140,3 +142,8 @@ void Bartender::initDrinkDb() { | |||
140 | void Bartender::fillList() { | 142 | void Bartender::fillList() { |
141 | dbFile.at(1); | 143 | QString lastName; |
144 | if( DrinkView->currentItem() != NULL ) | ||
145 | lastName = DrinkView->currentItem()->text(0); | ||
146 | else | ||
147 | lastName = ""; | ||
148 | |||
142 | DrinkView->clear(); | 149 | DrinkView->clear(); |
@@ -144,13 +151,24 @@ void Bartender::fillList() { | |||
144 | QListViewItem * item ; | 151 | QListViewItem * item ; |
145 | QTextStream t( &dbFile); | ||
146 | QString s; | 152 | QString s; |
147 | while ( !t.eof()) { | 153 | |
148 | s = t.readLine(); | 154 | DrinkList::Iterator it = drinkDB.getBegin(); |
149 | if(s.find("#",0,TRUE) != -1) { | 155 | while ( it != drinkDB.getEnd() ) { |
150 | // odebug << s.right(s.length()-2) << oendl; | ||
151 | item= new QListViewItem( DrinkView, 0 ); | 156 | item= new QListViewItem( DrinkView, 0 ); |
152 | item->setText( 0, s.right(s.length()-2)); | 157 | item->setText( 0, (*it).getName()); |
153 | i++; | 158 | i++; |
159 | ++it; | ||
160 | } | ||
161 | |||
162 | if( lastName != "" ) { | ||
163 | QListViewItemIterator it( DrinkView ); | ||
164 | for ( ; it.current(); ++it ) { | ||
165 | if ( it.current()->text(0) == lastName ) { | ||
166 | DrinkView->setCurrentItem(it.current()); | ||
167 | break; | ||
154 | } | 168 | } |
155 | } | 169 | } |
170 | } | ||
171 | else if( DrinkView->childCount() > 0) | ||
172 | DrinkView->setCurrentItem(DrinkView->firstChild()); | ||
173 | |||
156 | odebug << "there are currently " << i << " of drinks" << oendl; | 174 | odebug << "there are currently " << i << " of drinks" << oendl; |
@@ -161,3 +179,3 @@ void Bartender::fileNew() { | |||
161 | New_Drink *newDrinks; | 179 | New_Drink *newDrinks; |
162 | newDrinks = new New_Drink(this,"New Drink....", TRUE); | 180 | newDrinks = new New_Drink(this,"New Drink", TRUE); |
163 | QString newName, newIng; | 181 | QString newName, newIng; |
@@ -167,17 +185,8 @@ void Bartender::fileNew() { | |||
167 | 185 | ||
168 | if(dbFile.isOpen()) | ||
169 | dbFile.close(); | ||
170 | if ( !dbFile.open( IO_WriteOnly| IO_Append)) { | ||
171 | QMessageBox::message( (tr("Note")), (tr("Drink database not opened sucessfully.\n")) ); | ||
172 | return; | ||
173 | } | ||
174 | if(newDrinks ->result() == 1 ) { | 186 | if(newDrinks ->result() == 1 ) { |
175 | QString newDrink="\n# "+newName+"\n"; | 187 | drinkDB.addDrink(newName, newIng); |
176 | newDrink.append(newIng+"\n"); | 188 | if(!drinkDB.writeChanges()) { |
177 | odebug << "writing "+newDrink << oendl; | 189 | QMessageBox::message( (tr("Note")), (tr("Failed to write to drink database!\n")) ); |
178 | dbFile.writeBlock( newDrink.latin1(), newDrink.length()); | 190 | } |
179 | clearList(); | 191 | fillList(); |
180 | dbFile.close(); | ||
181 | |||
182 | initDrinkDb(); | ||
183 | } | 192 | } |
@@ -199,3 +208,2 @@ void Bartender::showDrink( QListViewItem *item) { | |||
199 | if(item==NULL) return; | 208 | if(item==NULL) return; |
200 | dbFile.at(0); | ||
201 | Show_Drink *showDrinks; | 209 | Show_Drink *showDrinks; |
@@ -203,23 +211,11 @@ void Bartender::showDrink( QListViewItem *item) { | |||
203 | showDrinks = new Show_Drink(this, myDrink, TRUE); | 211 | showDrinks = new Show_Drink(this, myDrink, TRUE); |
204 | QTextStream t( &dbFile); | ||
205 | 212 | ||
206 | QString s, s2; | 213 | DrinkList::Iterator it = drinkDB.findDrink(myDrink); |
207 | while ( !t.eof()) { | 214 | if(it != drinkDB.getEnd()) { |
208 | s = t.readLine(); | 215 | showDrinks->MultiLineEdit1->setText((*it).getIngredients()); |
209 | if(s.find( myDrink, 0, TRUE) != -1) { | ||
210 | for(int i=0;s2.find( "#", 0, TRUE) == -1;i++) { | ||
211 | s2 = t.readLine(); | ||
212 | if(s2.find("#",0,TRUE) == -1 || dbFile.atEnd() ) { | ||
213 | // odebug << s2 << oendl; | ||
214 | showDrinks->MultiLineEdit1->append(s2); | ||
215 | } | ||
216 | if( dbFile.atEnd() ) break; | ||
217 | } | ||
218 | } | ||
219 | } | ||
220 | QPEApplication::execDialog( showDrinks ); | ||
221 | 216 | ||
222 | if(showDrinks ->result() ==0) { | 217 | connect(showDrinks->editDrinkButton, SIGNAL(clicked()), this, SLOT(doEdit())); |
223 | doEdit(); | 218 | QPEApplication::execDialog( showDrinks ); |
224 | } | 219 | } |
220 | |||
225 | delete showDrinks; | 221 | delete showDrinks; |
@@ -229,4 +225,4 @@ void Bartender::askSearch() { | |||
229 | switch ( QMessageBox::warning(this,tr("Find"),tr("Search by drink name\n")+ | 225 | switch ( QMessageBox::warning(this,tr("Find"),tr("Search by drink name\n")+ |
230 | "\nor alcohol ?" | 226 | "\nor ingredient ?" |
231 | ,tr("Drink Name"),tr("Alcohol"),0,0,1) ) { | 227 | ,tr("Drink Name"),tr("Ingredient"),0,0,1) ) { |
232 | case 0: | 228 | case 0: |
@@ -235,3 +231,3 @@ void Bartender::askSearch() { | |||
235 | case 1: | 231 | case 1: |
236 | doSearchByDrink(); | 232 | doSearchByIngredient(); |
237 | break; | 233 | break; |
@@ -252,3 +248,3 @@ void Bartender::doSearchByName() { | |||
252 | for ( ; it.current(); ++it ) { | 248 | for ( ; it.current(); ++it ) { |
253 | if ( it.current()->text(0).find( searchForDrinkName, 0, TRUE) != -1 ) { | 249 | if ( it.current()->text(0).find( searchForDrinkName, 0, FALSE) != -1 ) { |
254 | // odebug << it.current()->text(0) << oendl; | 250 | // odebug << it.current()->text(0) << oendl; |
@@ -265,31 +261,24 @@ void Bartender::doSearchByName() { | |||
265 | 261 | ||
266 | void Bartender::doSearchByDrink() { | 262 | void Bartender::doSearchByIngredient() { |
267 | // if( DrinkView->currentItem() == NULL) return; | 263 | // if( DrinkView->currentItem() == NULL) return; |
268 | QStringList searchList; | 264 | QStringList searchList; |
269 | QString searchForDrinkName, lastDrinkName, tempName; | 265 | QString searchForIngredient, lastDrinkName, lastDrinkIngredients; |
270 | 266 | ||
271 | InputDialog *fileDlg; | 267 | InputDialog *fileDlg; |
272 | fileDlg = new InputDialog(this,tr("Find by Alcohol"),TRUE, 0); | 268 | fileDlg = new InputDialog(this,tr("Find by Ingredient"),TRUE, 0); |
273 | fileDlg->exec(); | 269 | fileDlg->exec(); |
274 | if( fileDlg->result() == 1 ) { | 270 | if( fileDlg->result() == 1 ) { |
275 | searchForDrinkName = fileDlg->LineEdit1->text(); | 271 | searchForIngredient = fileDlg->LineEdit1->text(); |
276 | 272 | ||
277 | dbFile.at(0); | 273 | DrinkList::Iterator it = drinkDB.getBegin(); |
278 | QTextStream t( &dbFile); | 274 | while ( it != drinkDB.getEnd() ) { |
275 | lastDrinkName = (*it).getName(); | ||
276 | lastDrinkIngredients = (*it).getIngredients(); | ||
279 | 277 | ||
280 | QString s, s2; | 278 | if( lastDrinkIngredients.find( searchForIngredient ,0, FALSE) != -1 ) |
281 | while ( !t.eof()) { | ||
282 | s = t.readLine(); | ||
283 | if(s.find("#",0,TRUE) != -1) { | ||
284 | lastDrinkName=s.right(s.length()-2); | ||
285 | // odebug << "last drink name "+lastDrinkName << oendl; | ||
286 | } | ||
287 | else if( s.find( searchForDrinkName ,0, FALSE) != -1 && lastDrinkName != tempName ) { | ||
288 | // odebug << "appending "+lastDrinkName << oendl; | ||
289 | searchList.append( lastDrinkName); | 279 | searchList.append( lastDrinkName); |
290 | tempName=lastDrinkName; | 280 | |
281 | ++it; | ||
291 | } | 282 | } |
292 | // if( dbFile.atEnd() ) break; | ||
293 | 283 | ||
294 | } //oef | ||
295 | if(searchList.count() >0) | 284 | if(searchList.count() >0) |
@@ -297,3 +286,3 @@ void Bartender::doSearchByDrink() { | |||
297 | else | 286 | else |
298 | QMessageBox::message(tr("Search"),tr("Sorry no results for\n")+ searchForDrinkName); | 287 | QMessageBox::message(tr("Search"),tr("Sorry no results for\n")+ searchForIngredient); |
299 | } | 288 | } |
@@ -328,2 +317,3 @@ void Bartender::doEdit() { | |||
328 | fileNew(); | 317 | fileNew(); |
318 | return; | ||
329 | } | 319 | } |
@@ -332,26 +322,13 @@ void Bartender::doEdit() { | |||
332 | myDrink= DrinkView->currentItem()->text(0); | 322 | myDrink= DrinkView->currentItem()->text(0); |
333 | dbFile.at(0); | 323 | |
334 | int foundAt=0; | ||
335 | New_Drink *newDrinks; | 324 | New_Drink *newDrinks; |
336 | newDrinks = new New_Drink(this,"Edit Drink....", TRUE); | 325 | newDrinks = new New_Drink(this,"Edit Drink", TRUE); |
337 | QString newName, newIng; | 326 | QString newName, newIng; |
338 | QPEApplication::showDialog( newDrinks ); | 327 | QPEApplication::showDialog( newDrinks ); |
339 | QTextStream t( &dbFile); | ||
340 | 328 | ||
341 | QString s, s2; | 329 | DrinkList::Iterator drinkItem = drinkDB.findDrink(myDrink); |
342 | while ( !t.eof()) { | 330 | if(drinkItem != drinkDB.getEnd()) { |
343 | s = t.readLine(); | 331 | newDrinks->LineEdit1->setText((*drinkItem).getName()); |
344 | if(s.find( myDrink, 0, TRUE) != -1) { | 332 | newDrinks->MultiLineEdit1->setText((*drinkItem).getIngredients()); |
345 | foundAt = dbFile.at() - (s.length()+1); | 333 | |
346 | for(int i=0;s2.find( "#", 0, TRUE) == -1;i++) { | ||
347 | s2 = t.readLine(); | ||
348 | if(s2.find("#",0,TRUE) == -1 || dbFile.atEnd() ) { | ||
349 | // odebug << s2 << oendl; | ||
350 | newDrinks->MultiLineEdit1->append(s2); | ||
351 | newDrinks->LineEdit1->setText(myDrink); | ||
352 | } | ||
353 | if( dbFile.atEnd() ) break; | ||
354 | } | ||
355 | } | ||
356 | } | ||
357 | newDrinks->exec(); | 334 | newDrinks->exec(); |
@@ -361,23 +338,8 @@ void Bartender::doEdit() { | |||
361 | if( newDrinks ->result() == 1 ) { | 338 | if( newDrinks ->result() == 1 ) { |
362 | if(dbFile.isOpen()) | 339 | (*drinkItem).setName(newName); |
363 | dbFile.close(); | 340 | (*drinkItem).setIngredients(newIng); |
364 | if ( !dbFile.open( IO_ReadWrite )) { | 341 | if(!drinkDB.writeChanges()) { |
365 | QMessageBox::message( (tr("Note")), (tr("Drink database not opened sucessfully.\n")) ); | 342 | QMessageBox::message( (tr("Note")), (tr("Failed to write to drink database!\n")) ); |
366 | return; | ||
367 | } | 343 | } |
368 | int fd = dbFile.handle(); | 344 | fillList(); |
369 | lseek( fd, foundAt, SEEK_SET); | ||
370 | |||
371 | // dbFile.at( foundAt); | ||
372 | #warning FIXME problems with editing drinks db | ||
373 | ////////// FIXME write to user file | ||
374 | QString newDrink="# "+newName+"\n"; | ||
375 | newDrink.append(newIng+"\n"); | ||
376 | odebug << "writing "+newDrink << oendl; | ||
377 | dbFile.writeBlock( newDrink.latin1(), newDrink.length()); | ||
378 | clearList(); | ||
379 | |||
380 | dbFile.flush(); | ||
381 | |||
382 | initDrinkDb(); | ||
383 | } | 345 | } |
@@ -385,2 +347,5 @@ void Bartender::doEdit() { | |||
385 | 347 | ||
348 | delete newDrinks; | ||
349 | } | ||
350 | |||
386 | void Bartender::clearList() { | 351 | void Bartender::clearList() { |
@@ -415,3 +380,3 @@ void Bartender::fileMenuActivated( int item) { | |||
415 | case -6:// alcohol -6 | 380 | case -6:// alcohol -6 |
416 | doSearchByDrink(); | 381 | doSearchByIngredient(); |
417 | 382 | ||