summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/apps/opie-bartender/bartender.cpp201
-rw-r--r--noncore/apps/opie-bartender/bartender.h5
-rw-r--r--noncore/apps/opie-bartender/bartender.pro10
-rw-r--r--noncore/apps/opie-bartender/drinkdata.cpp147
-rw-r--r--noncore/apps/opie-bartender/drinkdata.h48
-rw-r--r--noncore/apps/opie-bartender/newDrinks.ui4
-rw-r--r--noncore/apps/opie-bartender/newdrinks.cpp1
-rw-r--r--noncore/apps/opie-bartender/showdrinks.cpp1
-rw-r--r--noncore/apps/opie-bartender/showdrinks.h2
9 files changed, 292 insertions, 127 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
@@ -16,4 +16,5 @@
#include "searchresults.h"
#include "bac.h"
+#include "drinkdata.h"
/* OPIE */
@@ -56,4 +57,6 @@ Bartender::Bartender( QWidget* parent, const char* name, WFlags fl )
setCaption( tr( "Bartender" ) );
+ setToolBarsMovable( FALSE );
+
ToolBar1 = new QToolBar( this, "ToolBar1" );
ToolBar1->setFixedHeight(22);
@@ -68,10 +71,10 @@ Bartender::Bartender( QWidget* parent, const char* name, WFlags fl )
fileMenu->insertItem(tr("Open Drink"));
fileMenu->insertItem(tr("Find by Drink Name"));
- fileMenu->insertItem(tr("Find by Alcohol"));
+ fileMenu->insertItem(tr("Find by Ingredient"));
QPopupMenu *editMenu;
editMenu = new QPopupMenu( this);
menuBar->insertItem( tr("Edit"), editMenu );
- editMenu->insertItem(tr("edit"));
+ editMenu->insertItem(tr("Edit Drink"));
connect( fileMenu, SIGNAL( activated(int) ), this, SLOT( fileMenuActivated(int) ));
@@ -111,9 +114,12 @@ Bartender::Bartender( QWidget* parent, const char* name, WFlags fl )
layout->addMultiCellWidget( DrinkView, 1, 2, 0, 4 );
- if(QDir("db").exists()) {
- dbFile.setName( "db/drinkdb.txt");
- } else
- dbFile.setName( QPEApplication::qpeDir()+"etc/bartender/drinkdb.txt");
+ if(QDir("db").exists())
+ drinkDB.setFile("db/drinkdb.txt");
+ else
+ drinkDB.setFile(QPEApplication::qpeDir()+"etc/bartender/drinkdb.txt");
+
initDrinkDb();
+
+ DrinkView->setFocus();
}
@@ -124,34 +130,46 @@ Bartender::~Bartender() {
this happens right before exit */
void Bartender::cleanUp() {
- dbFile.close();
}
void Bartender::initDrinkDb() {
-
- if(!dbFile.isOpen())
- if ( !dbFile.open( IO_ReadOnly)) {
- QMessageBox::message( (tr("Note")), (tr("Drink database not opened sucessfully.\n")) );
- return;
- }
+ if(drinkDB.read())
fillList();
+ else
+ QMessageBox::message( (tr("Note")), (tr("Drink database not opened sucessfully.\n")) );
}
void Bartender::fillList() {
- dbFile.at(1);
+ QString lastName;
+ if( DrinkView->currentItem() != NULL )
+ lastName = DrinkView->currentItem()->text(0);
+ else
+ lastName = "";
+
DrinkView->clear();
int i=0;
QListViewItem * item ;
- QTextStream t( &dbFile);
QString s;
- while ( !t.eof()) {
- s = t.readLine();
- if(s.find("#",0,TRUE) != -1) {
-// odebug << s.right(s.length()-2) << oendl;
+
+ DrinkList::Iterator it = drinkDB.getBegin();
+ while ( it != drinkDB.getEnd() ) {
item= new QListViewItem( DrinkView, 0 );
- item->setText( 0, s.right(s.length()-2));
+ item->setText( 0, (*it).getName());
i++;
+ ++it;
+ }
+
+ if( lastName != "" ) {
+ QListViewItemIterator it( DrinkView );
+ for ( ; it.current(); ++it ) {
+ if ( it.current()->text(0) == lastName ) {
+ DrinkView->setCurrentItem(it.current());
+ break;
}
}
+ }
+ else if( DrinkView->childCount() > 0)
+ DrinkView->setCurrentItem(DrinkView->firstChild());
+
odebug << "there are currently " << i << " of drinks" << oendl;
}
@@ -160,5 +178,5 @@ void Bartender::fileNew() {
New_Drink *newDrinks;
- newDrinks = new New_Drink(this,"New Drink....", TRUE);
+ newDrinks = new New_Drink(this,"New Drink", TRUE);
QString newName, newIng;
QPEApplication::execDialog( newDrinks );
@@ -166,19 +184,10 @@ void Bartender::fileNew() {
newIng= newDrinks->MultiLineEdit1->text();
- if(dbFile.isOpen())
- dbFile.close();
- if ( !dbFile.open( IO_WriteOnly| IO_Append)) {
- QMessageBox::message( (tr("Note")), (tr("Drink database not opened sucessfully.\n")) );
- return;
- }
if(newDrinks ->result() == 1 ) {
- QString newDrink="\n# "+newName+"\n";
- newDrink.append(newIng+"\n");
- odebug << "writing "+newDrink << oendl;
- dbFile.writeBlock( newDrink.latin1(), newDrink.length());
- clearList();
- dbFile.close();
-
- initDrinkDb();
+ drinkDB.addDrink(newName, newIng);
+ if(!drinkDB.writeChanges()) {
+ QMessageBox::message( (tr("Note")), (tr("Failed to write to drink database!\n")) );
+ }
+ fillList();
}
delete newDrinks;
@@ -198,29 +207,16 @@ void Bartender::showDrink(int mouse, QListViewItem * item, const QPoint&, int) {
void Bartender::showDrink( QListViewItem *item) {
if(item==NULL) return;
- dbFile.at(0);
Show_Drink *showDrinks;
QString myDrink=item->text(0);
showDrinks = new Show_Drink(this, myDrink, TRUE);
- QTextStream t( &dbFile);
- QString s, s2;
- while ( !t.eof()) {
- s = t.readLine();
- if(s.find( myDrink, 0, TRUE) != -1) {
- for(int i=0;s2.find( "#", 0, TRUE) == -1;i++) {
- s2 = t.readLine();
- if(s2.find("#",0,TRUE) == -1 || dbFile.atEnd() ) {
-// odebug << s2 << oendl;
- showDrinks->MultiLineEdit1->append(s2);
- }
- if( dbFile.atEnd() ) break;
- }
- }
- }
- QPEApplication::execDialog( showDrinks );
+ DrinkList::Iterator it = drinkDB.findDrink(myDrink);
+ if(it != drinkDB.getEnd()) {
+ showDrinks->MultiLineEdit1->setText((*it).getIngredients());
- if(showDrinks ->result() ==0) {
- doEdit();
+ connect(showDrinks->editDrinkButton, SIGNAL(clicked()), this, SLOT(doEdit()));
+ QPEApplication::execDialog( showDrinks );
}
+
delete showDrinks;
}
@@ -228,11 +224,11 @@ void Bartender::showDrink( QListViewItem *item) {
void Bartender::askSearch() {
switch ( QMessageBox::warning(this,tr("Find"),tr("Search by drink name\n")+
- "\nor alcohol ?"
- ,tr("Drink Name"),tr("Alcohol"),0,0,1) ) {
+ "\nor ingredient ?"
+ ,tr("Drink Name"),tr("Ingredient"),0,0,1) ) {
case 0:
doSearchByName();
break;
case 1:
- doSearchByDrink();
+ doSearchByIngredient();
break;
};
@@ -251,5 +247,5 @@ void Bartender::doSearchByName() {
QListViewItemIterator it( DrinkView );
for ( ; it.current(); ++it ) {
- if ( it.current()->text(0).find( searchForDrinkName, 0, TRUE) != -1 ) {
+ if ( it.current()->text(0).find( searchForDrinkName, 0, FALSE) != -1 ) {
// odebug << it.current()->text(0) << oendl;
searchList.append(it.current()->text(0));
@@ -264,37 +260,30 @@ void Bartender::doSearchByName() {
}
-void Bartender::doSearchByDrink() {
+void Bartender::doSearchByIngredient() {
// if( DrinkView->currentItem() == NULL) return;
QStringList searchList;
- QString searchForDrinkName, lastDrinkName, tempName;
+ QString searchForIngredient, lastDrinkName, lastDrinkIngredients;
InputDialog *fileDlg;
- fileDlg = new InputDialog(this,tr("Find by Alcohol"),TRUE, 0);
+ fileDlg = new InputDialog(this,tr("Find by Ingredient"),TRUE, 0);
fileDlg->exec();
if( fileDlg->result() == 1 ) {
- searchForDrinkName = fileDlg->LineEdit1->text();
+ searchForIngredient = fileDlg->LineEdit1->text();
- dbFile.at(0);
- QTextStream t( &dbFile);
+ DrinkList::Iterator it = drinkDB.getBegin();
+ while ( it != drinkDB.getEnd() ) {
+ lastDrinkName = (*it).getName();
+ lastDrinkIngredients = (*it).getIngredients();
- QString s, s2;
- while ( !t.eof()) {
- s = t.readLine();
- if(s.find("#",0,TRUE) != -1) {
- lastDrinkName=s.right(s.length()-2);
-// odebug << "last drink name "+lastDrinkName << oendl;
- }
- else if( s.find( searchForDrinkName ,0, FALSE) != -1 && lastDrinkName != tempName ) {
-// odebug << "appending "+lastDrinkName << oendl;
+ if( lastDrinkIngredients.find( searchForIngredient ,0, FALSE) != -1 )
searchList.append( lastDrinkName);
- tempName=lastDrinkName;
+
+ ++it;
}
-// if( dbFile.atEnd() ) break;
- } //oef
if(searchList.count() >0)
showSearchResult(searchList);
else
- QMessageBox::message(tr("Search"),tr("Sorry no results for\n")+ searchForDrinkName);
+ QMessageBox::message(tr("Search"),tr("Sorry no results for\n")+ searchForIngredient);
}
delete fileDlg;
@@ -327,32 +316,20 @@ void Bartender::doEdit() {
if(DrinkView->currentItem() == NULL) {
fileNew();
+ return;
}
QString myDrink;
myDrink= DrinkView->currentItem()->text(0);
- dbFile.at(0);
- int foundAt=0;
+
New_Drink *newDrinks;
- newDrinks = new New_Drink(this,"Edit Drink....", TRUE);
+ newDrinks = new New_Drink(this,"Edit Drink", TRUE);
QString newName, newIng;
QPEApplication::showDialog( newDrinks );
- QTextStream t( &dbFile);
- QString s, s2;
- while ( !t.eof()) {
- s = t.readLine();
- if(s.find( myDrink, 0, TRUE) != -1) {
- foundAt = dbFile.at() - (s.length()+1);
- for(int i=0;s2.find( "#", 0, TRUE) == -1;i++) {
- s2 = t.readLine();
- if(s2.find("#",0,TRUE) == -1 || dbFile.atEnd() ) {
-// odebug << s2 << oendl;
- newDrinks->MultiLineEdit1->append(s2);
- newDrinks->LineEdit1->setText(myDrink);
- }
- if( dbFile.atEnd() ) break;
- }
- }
- }
+ DrinkList::Iterator drinkItem = drinkDB.findDrink(myDrink);
+ if(drinkItem != drinkDB.getEnd()) {
+ newDrinks->LineEdit1->setText((*drinkItem).getName());
+ newDrinks->MultiLineEdit1->setText((*drinkItem).getIngredients());
+
newDrinks->exec();
newName = newDrinks->LineEdit1->text();
@@ -360,28 +337,16 @@ void Bartender::doEdit() {
if( newDrinks ->result() == 1 ) {
- if(dbFile.isOpen())
- dbFile.close();
- if ( !dbFile.open( IO_ReadWrite )) {
- QMessageBox::message( (tr("Note")), (tr("Drink database not opened sucessfully.\n")) );
- return;
+ (*drinkItem).setName(newName);
+ (*drinkItem).setIngredients(newIng);
+ if(!drinkDB.writeChanges()) {
+ QMessageBox::message( (tr("Note")), (tr("Failed to write to drink database!\n")) );
}
- int fd = dbFile.handle();
- lseek( fd, foundAt, SEEK_SET);
-
-// dbFile.at( foundAt);
-#warning FIXME problems with editing drinks db
- ////////// FIXME write to user file
- QString newDrink="# "+newName+"\n";
- newDrink.append(newIng+"\n");
- odebug << "writing "+newDrink << oendl;
- dbFile.writeBlock( newDrink.latin1(), newDrink.length());
- clearList();
-
- dbFile.flush();
-
- initDrinkDb();
+ fillList();
}
}
+ delete newDrinks;
+}
+
void Bartender::clearList() {
DrinkView->clear();
@@ -414,5 +379,5 @@ void Bartender::fileMenuActivated( int item) {
break;
case -6:// alcohol -6
- doSearchByDrink();
+ doSearchByIngredient();
break;
diff --git a/noncore/apps/opie-bartender/bartender.h b/noncore/apps/opie-bartender/bartender.h
index 27362df..9970ef1 100644
--- a/noncore/apps/opie-bartender/bartender.h
+++ b/noncore/apps/opie-bartender/bartender.h
@@ -12,4 +12,5 @@
#define BARTENDER_H
#include "newdrinks.h"
+#include "drinkdata.h"
#include <qvariant.h>
@@ -37,5 +38,5 @@ public:
QToolBar* ToolBar1;
QListView* DrinkView;
- QFile dbFile;
+ DrinkData drinkDB;
public slots:
void doEdit();
@@ -52,5 +53,5 @@ protected slots:
void initDrinkDb();
void doSearchByName();
- void doSearchByDrink();
+ void doSearchByIngredient();
void showSearchResult(QStringList &);
void doBac();
diff --git a/noncore/apps/opie-bartender/bartender.pro b/noncore/apps/opie-bartender/bartender.pro
index cdec93c..b304ae9 100644
--- a/noncore/apps/opie-bartender/bartender.pro
+++ b/noncore/apps/opie-bartender/bartender.pro
@@ -1,8 +1,10 @@
-CONFIG = qt quick-app
-HEADERS = bartender.h newdrinks.h showdrinks.h inputDialog.h searchresults.h bac.h
-SOURCES = main.cpp bartender.cpp newdrinks.cpp showdrinks.cpp inputDialog.cpp searchresults.cpp bac.cpp
+TEMPLATE = app
+CONFIG = qt warn_on
+HEADERS = bartender.h newdrinks.h showdrinks.h inputDialog.h searchresults.h bac.h drinkdata.h
+SOURCES = main.cpp bartender.cpp newdrinks.cpp showdrinks.cpp inputDialog.cpp searchresults.cpp bac.cpp drinkdata.cpp
INCLUDEPATH += $(OPIEDIR)/include
DEPENDPATH += $(OPIEDIR)/include
-LIBS += -lqpe -lopiecore2
+LIBS += -lqpe -lopiecore2 -lopieui2
+DESTDIR = $(OPIEDIR)/bin
TARGET = bartender
diff --git a/noncore/apps/opie-bartender/drinkdata.cpp b/noncore/apps/opie-bartender/drinkdata.cpp
new file mode 100644
index 0000000..8856e46
--- a/dev/null
+++ b/noncore/apps/opie-bartender/drinkdata.cpp
@@ -0,0 +1,147 @@
+/****************************************************************************
+** Created: Sun Dec 26 22:00:00 2004
+** by: Paul Eggleton <bluelightning@bluelightning.org>
+** copyright : (C) 2004 by Paul Eggleton
+ email : bluelightning@bluelightning.org
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ ***************************************************************************/
+
+/* QT */
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qvaluelist.h>
+
+/* STD */
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <iostream>
+#include <errno.h>
+
+#include "drinkdata.h"
+
+// ----- DrinkData -----
+
+DrinkData::DrinkData() {
+}
+
+void DrinkData::setFile(const QString &filename) {
+ this->filename = filename;
+}
+
+bool DrinkData::read(void) {
+ QFile dbFile;
+
+ dbFile.setName(filename);
+ if ( !dbFile.open( IO_ReadOnly)) {
+ return false;
+ }
+
+ items.clear();
+
+ QTextStream t( &dbFile);
+ QString s, name = "", ingredients = "";
+
+ while ( !t.eof()) {
+ s = t.readLine();
+ if(s.find( "#", 0, TRUE) != -1 || dbFile.atEnd()) {
+ if(name != "")
+ addDrink(name, ingredients);
+ // Start new entry
+ name = s.right(s.length()-2);
+ ingredients = "";
+ }
+ else {
+ if(ingredients != "")
+ ingredients += '\n';
+ ingredients += s;
+ }
+ }
+
+ dbFile.close();
+
+ return true;
+}
+
+void DrinkData::print(void) {
+ DrinkList::Iterator it = items.begin();
+ while ( it != items.end() ) {
+ std::cout << (*it).getName() << '\n';
+ ++it;
+ }
+}
+
+void DrinkData::addDrink(const QString &name, const QString &ingredients) {
+ DrinkItem item(name, ingredients);
+ items.append(item);
+}
+
+DrinkList::Iterator DrinkData::findDrink(const QString &name) {
+ DrinkList::Iterator it = items.begin();
+ while ( it != items.end() ) {
+ if((*it).getName() == name)
+ return it;
+ ++it;
+ }
+ return items.end();
+}
+
+DrinkList::Iterator DrinkData::getBegin(void) {
+ return items.begin();
+}
+
+DrinkList::Iterator DrinkData::getEnd(void) {
+ return items.end();
+}
+
+bool DrinkData::writeChanges(void) {
+ QFile dbFile;
+
+ dbFile.setName(filename);
+ if ( !dbFile.open( IO_WriteOnly | IO_Truncate )) {
+ return false;
+ }
+
+ QTextStream t( &dbFile);
+
+ DrinkList::Iterator it = items.begin();
+ while ( it != items.end() ) {
+ t << "# " << (*it).getName() << '\n';
+ t << (*it).getIngredients() << '\n';
+ ++it;
+ }
+
+ dbFile.close();
+
+ return true;
+}
+
+
+// ----- DrinkItem -----
+
+DrinkItem::DrinkItem(void) {
+}
+
+DrinkItem::DrinkItem(const QString &name, const QString &ingredients) {
+ this->name = name;
+ this->ingredients = ingredients;
+}
+
+const QString &DrinkItem::getName(void) {
+ return name;
+}
+
+const QString &DrinkItem::getIngredients(void) {
+ return ingredients;
+}
+
+void DrinkItem::setName(const QString &name) {
+ this->name = name;
+}
+
+void DrinkItem::setIngredients(const QString &ingredients) {
+ this->ingredients = ingredients;
+}
diff --git a/noncore/apps/opie-bartender/drinkdata.h b/noncore/apps/opie-bartender/drinkdata.h
new file mode 100644
index 0000000..bcc3022
--- a/dev/null
+++ b/noncore/apps/opie-bartender/drinkdata.h
@@ -0,0 +1,48 @@
+/****************************************************************************
+** Created: Sun Dec 26 22:00:00 2004
+** by: Paul Eggleton <bluelightning@bluelightning.org>
+** copyright : (C) 2004 by Paul Eggleton
+ email : bluelightning@bluelightning.org
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ ***************************************************************************/
+
+#ifndef DRINKDATA_H
+#define DRINKDATA_H
+
+class DrinkItem;
+
+typedef QValueList<DrinkItem> DrinkList;
+
+class DrinkData {
+private:
+ DrinkList items;
+ QString filename;
+public:
+ DrinkData(void);
+ void setFile(const QString &filename);
+ bool writeChanges(void);
+ bool read(void);
+ void print(void);
+ void addDrink(const QString &name, const QString &ingredients);
+ DrinkList::Iterator getBegin(void);
+ DrinkList::Iterator getEnd(void);
+ DrinkList::Iterator findDrink(const QString &name);
+};
+
+class DrinkItem {
+private:
+ QString name;
+ QString ingredients;
+public:
+ DrinkItem(void);
+ DrinkItem(const QString &name, const QString &ingredients);
+ const QString &getName(void);
+ const QString &getIngredients(void);
+ void setName(const QString &name);
+ void setIngredients(const QString &ingredients);
+};
+
+#endif // DRINKDATA_H
diff --git a/noncore/apps/opie-bartender/newDrinks.ui b/noncore/apps/opie-bartender/newDrinks.ui
index eccb312..bcf21d2 100644
--- a/noncore/apps/opie-bartender/newDrinks.ui
+++ b/noncore/apps/opie-bartender/newDrinks.ui
@@ -12,5 +12,5 @@
<x>0</x>
<y>0</y>
- <width>245</width>
+ <width>241</width>
<height>320</height>
</rect>
@@ -87,5 +87,5 @@
<property stdset="1">
<name>text</name>
- <string>Ingrediants</string>
+ <string>Ingredients</string>
</property>
</widget>
diff --git a/noncore/apps/opie-bartender/newdrinks.cpp b/noncore/apps/opie-bartender/newdrinks.cpp
index a7ada3a..2540fb1 100644
--- a/noncore/apps/opie-bartender/newdrinks.cpp
+++ b/noncore/apps/opie-bartender/newdrinks.cpp
@@ -47,4 +47,5 @@ New_Drink::New_Drink( QWidget* parent, const char* name, bool modal, WFlags fl
MultiLineEdit1 = new QMultiLineEdit( this, "MultiLineEdit1" );
+ MultiLineEdit1->setWordWrap(QMultiLineEdit::WidgetWidth);
Layout5->addMultiCellWidget( MultiLineEdit1, 2, 2, 0, 2);
diff --git a/noncore/apps/opie-bartender/showdrinks.cpp b/noncore/apps/opie-bartender/showdrinks.cpp
index dcfce16..9f679f0 100644
--- a/noncore/apps/opie-bartender/showdrinks.cpp
+++ b/noncore/apps/opie-bartender/showdrinks.cpp
@@ -37,4 +37,5 @@ Show_Drink::Show_Drink( QWidget* parent, const char* name, bool modal, WFlags f
MultiLineEdit1 = new QMultiLineEdit( this, "MultiLineEdit1" );
MultiLineEdit1->setWordWrap(QMultiLineEdit::WidgetWidth);
+ MultiLineEdit1->setReadOnly(true);
Layout5->addMultiCellWidget( MultiLineEdit1, 1, 3, 0, 3 );
}
diff --git a/noncore/apps/opie-bartender/showdrinks.h b/noncore/apps/opie-bartender/showdrinks.h
index 11a0cc1..f892c18 100644
--- a/noncore/apps/opie-bartender/showdrinks.h
+++ b/noncore/apps/opie-bartender/showdrinks.h
@@ -34,4 +34,5 @@ public:
QMultiLineEdit* MultiLineEdit1;
+ QPushButton *editDrinkButton;
public slots:
void slotEditDrink();
@@ -39,5 +40,4 @@ protected:
QGridLayout* Layout5;
QString drinkName;
- QPushButton *editDrinkButton;
};