Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

bartender.cpp

Go to the documentation of this file.
00001 /****************************************************************************
00002 **
00003 ** Created: Sat Jul 20 08:10:53 2002
00004 **      by:  L.J. Potter <ljp@llornkcor.com>
00005 **     copyright            : (C) 2002 by ljp
00006     email                : ljp@llornkcor.com
00007     *   This program is free software; you can redistribute it and/or modify  *
00008     *   it under the terms of the GNU General Public License as published by  *
00009     *   the Free Software Foundation; either version 2 of the License, or     *
00010     *   (at your option) any later version.                                   *
00011     ***************************************************************************/
00012 
00013 #include "bartender.h"
00014 #include "showdrinks.h"
00015 #include "inputDialog.h"
00016 #include "searchresults.h"
00017 #include "bac.h"
00018 #include "drinkdata.h"
00019 
00020 /* OPIE */
00021 #include <opie2/odebug.h>
00022 #include <opie2/oresource.h>
00023 #include <qpe/qpeapplication.h>
00024 using namespace Opie::Core;
00025 
00026 /* QT */
00027 #include <qlineedit.h>
00028 #include <qdir.h>
00029 #include <qpushbutton.h>
00030 #include <qlistbox.h>
00031 #include <qmultilineedit.h>
00032 #include <qmessagebox.h>
00033 #include <qtextstream.h>
00034 #include <qaction.h>
00035 #include <qheader.h>
00036 #include <qlistview.h>
00037 #include <qlayout.h>
00038 #include <qtoolbar.h>
00039 #include <qmenubar.h>
00040 
00041 /* STD */
00042 #include <fcntl.h>
00043 #include <unistd.h>
00044 #include <stdlib.h>
00045 #include <stdio.h>
00046 #include <errno.h>
00047 
00048 Bartender::Bartender( QWidget* parent,  const char* name, WFlags fl )
00049     : QMainWindow( parent, name, fl ) {
00050     if ( !name )
00051         setName( "Bartender" );
00052 
00053     connect( qApp,SIGNAL( aboutToQuit()),SLOT( cleanUp()) );
00054 
00055     setCaption( tr( "Bartender" ) );
00056 
00057     setToolBarsMovable( false );
00058     QToolBar *dock = new QToolBar( this );
00059     dock->setHorizontalStretchable( true );
00060 
00061     QMenuBar *menuBar = new QMenuBar( dock );
00062     menuBar->setMargin( 0 );
00063     QPopupMenu *fileMenu;
00064     fileMenu = new QPopupMenu( this);
00065     menuBar->insertItem( tr("File"), fileMenu );
00066 
00067     fileMenu->insertItem(tr("New Drink"));
00068     fileMenu->insertItem(tr("Open Drink"));
00069     fileMenu->insertItem(tr("Find by Drink Name"));
00070     fileMenu->insertItem(tr("Find by Ingredient"));
00071 
00072     QPopupMenu *editMenu;
00073     editMenu = new QPopupMenu( this);
00074     menuBar->insertItem( tr("Edit"), editMenu );
00075     editMenu->insertItem(tr("Edit Drink"));
00076 
00077     connect( fileMenu, SIGNAL( activated(int) ), this, SLOT( fileMenuActivated(int) ));
00078     connect( editMenu, SIGNAL( activated(int) ), this, SLOT( editMenuActivated(int) ));
00079 
00080     ToolBar1 = new QToolBar( this );
00081 
00082     QAction *a = new QAction( tr( "New" ), Opie::Core::OResource::loadPixmap( "new", Opie::Core::OResource::SmallIcon ),
00083                               "New", 0, this, 0 );
00084     connect( a, SIGNAL( activated() ), this, SLOT( fileNew() ) );
00085     a->addTo( ToolBar1 );
00086 
00087     a = new QAction( tr( "Open" ), Opie::Core::OResource::loadPixmap( "bartender/bartender_sm", Opie::Core::OResource::SmallIcon ),
00088                      "open", 0, this, 0 );
00089     connect( a, SIGNAL( activated() ), this, SLOT( openCurrentDrink() ) );
00090     a->addTo( ToolBar1 );
00091 
00092     a = new QAction( tr( "Find" ), Opie::Core::OResource::loadPixmap( "find", Opie::Core::OResource::SmallIcon ),
00093                      "Find", 0, this, 0 );
00094     connect( a, SIGNAL( activated() ), this, SLOT( askSearch() ) );
00095     a->addTo( ToolBar1 );
00096 
00097     a = new QAction( tr( "Edit" ), Opie::Core::OResource::loadPixmap( "edit", Opie::Core::OResource::SmallIcon ),
00098                      "Edit", 0, this, 0 );
00099     connect( a, SIGNAL( activated() ), this, SLOT( doEdit() ) );
00100     a->addTo( ToolBar1 );
00101 
00102     QPushButton *t;
00103     t= new QPushButton( "BAC", ToolBar1, "bacButtin");
00104     connect( t, SIGNAL( clicked() ), this, SLOT( doBac() ) );
00105 
00106     DrinkView = new QListView( this, "DrinkView" );
00107     DrinkView->addColumn( tr( "Name of Drink" ) );
00108     DrinkView->header()->hide();
00109 
00110     QPEApplication::setStylusOperation( DrinkView->viewport(),QPEApplication::RightOnHold);
00111 
00112     connect(DrinkView, SIGNAL( doubleClicked(QListViewItem*)),this,SLOT(showDrink(QListViewItem*)));
00113     connect(DrinkView, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int)),
00114             this,SLOT( showDrink(int,QListViewItem*,const QPoint&,int)));
00115 
00116     if(QDir("db").exists())
00117         drinkDB.setFile("db/drinkdb.txt");
00118     else
00119         drinkDB.setFile(QPEApplication::qpeDir()+"etc/bartender/drinkdb.txt");
00120     
00121     initDrinkDb();
00122 
00123     DrinkView->setFocus();
00124 
00125     setCentralWidget( DrinkView );
00126 }
00127 
00128 Bartender::~Bartender() {
00129 }
00130 
00131 /*
00132 this happens right before exit  */
00133 void Bartender::cleanUp() {
00134 
00135 }
00136 
00137 void Bartender::initDrinkDb() {
00138     if(drinkDB.read())
00139         fillList();
00140     else
00141         QMessageBox::message( (tr("Note")), (tr("Drink database not opened sucessfully.\n")) );
00142 }
00143 
00144 void Bartender::fillList() {
00145     QString lastName;
00146     if( DrinkView->currentItem() != NULL )
00147         lastName = DrinkView->currentItem()->text(0);
00148     else
00149         lastName = "";
00150 
00151     DrinkView->clear();
00152     int i=0;
00153     QListViewItem * item ;
00154     QString s;
00155     
00156     DrinkList::Iterator it = drinkDB.getBegin();
00157     while ( it != drinkDB.getEnd() ) {
00158         item= new QListViewItem( DrinkView, 0 );
00159         item->setText( 0, (*it).getName());
00160         i++;
00161         ++it;
00162     }
00163     
00164     if( lastName != "" ) {
00165         QListViewItemIterator it( DrinkView );
00166         for ( ; it.current(); ++it ) {
00167             if ( it.current()->text(0) == lastName ) {
00168                 DrinkView->setCurrentItem(it.current());
00169                 break;
00170             }
00171         }
00172     }
00173     else if( DrinkView->childCount() > 0)
00174         DrinkView->setCurrentItem(DrinkView->firstChild());
00175     
00176     odebug << "there are currently " << i << " of drinks" << oendl; 
00177 }
00178 
00179 void Bartender::fileNew() {
00180 
00181     New_Drink *newDrinks;
00182     newDrinks = new New_Drink(this,"New Drink", TRUE);
00183     QString newName, newIng;
00184     QPEApplication::execDialog( newDrinks );
00185     newName = newDrinks->LineEdit1->text();
00186     newIng= newDrinks->MultiLineEdit1->text();
00187 
00188     if(newDrinks ->result() == 1 ) {
00189         drinkDB.addDrink(newName, newIng);
00190         if(!drinkDB.writeChanges()) {
00191             QMessageBox::message( (tr("Note")), (tr("Failed to write to drink database!\n")) );
00192         }
00193         fillList();
00194     }
00195     delete newDrinks;
00196 }
00197 
00198 void Bartender::showDrink(int mouse, QListViewItem * item, const QPoint&, int) {
00199     switch (mouse) {
00200       case 1:
00201 //          showDrink(item);
00202           break;
00203       case 2:
00204           showDrink(item);
00205           break;
00206     }
00207 }
00208 
00209 void Bartender::showDrink( QListViewItem *item) {
00210     if(item==NULL) return;
00211     Show_Drink *showDrinks;
00212     QString myDrink=item->text(0);
00213     showDrinks = new Show_Drink(this, myDrink, TRUE);
00214 
00215     DrinkList::Iterator it = drinkDB.findDrink(myDrink);
00216     if(it != drinkDB.getEnd()) {
00217         showDrinks->MultiLineEdit1->setText((*it).getIngredients());
00218     
00219         connect(showDrinks->editDrinkButton, SIGNAL(clicked()), this, SLOT(doEdit()));
00220         QPEApplication::execDialog( showDrinks );
00221     }
00222 
00223     delete showDrinks;
00224 }
00225 
00226 void Bartender::askSearch() {
00227     switch ( QMessageBox::warning(this,tr("Find"),tr("Search by drink name\n")+
00228                                   "\nor ingredient ?"
00229                                   ,tr("Drink Name"),tr("Ingredient"),0,0,1) ) {
00230       case 0:
00231           doSearchByName();
00232           break;
00233       case 1:
00234           doSearchByIngredient();
00235           break;
00236     };
00237 }
00238 
00239 /* search by name */
00240 void Bartender::doSearchByName() {
00241 //    if( DrinkView->currentItem() == NULL) return;
00242     QStringList searchList;
00243     QString searchForDrinkName;
00244     InputDialog *fileDlg;
00245     fileDlg = new InputDialog(this,tr("Find by Drink Name"),TRUE, 0);
00246     fileDlg->exec();
00247     if( fileDlg->result() == 1 ) {
00248         searchForDrinkName = fileDlg->LineEdit1->text();
00249         QListViewItemIterator it( DrinkView );
00250         for ( ; it.current(); ++it ) {
00251             if ( it.current()->text(0).find( searchForDrinkName, 0, FALSE) != -1 ) {
00252 //                 odebug << it.current()->text(0) << oendl; 
00253                 searchList.append(it.current()->text(0));
00254             }
00255         }
00256         if(searchList.count() >0)
00257             showSearchResult(searchList);
00258         else
00259             QMessageBox::message(tr("Search"),tr("Sorry no results for\n")+searchForDrinkName);
00260     }//end Inputdialog
00261     delete fileDlg;
00262 }
00263 
00264 void Bartender::doSearchByIngredient() {
00265 //    if( DrinkView->currentItem() == NULL) return;
00266     QStringList searchList;
00267     QString searchForIngredient, lastDrinkName, lastDrinkIngredients;
00268 
00269     InputDialog *fileDlg;
00270     fileDlg = new InputDialog(this,tr("Find by Ingredient"),TRUE, 0);
00271     fileDlg->exec();
00272     if( fileDlg->result() == 1 ) {
00273         searchForIngredient = fileDlg->LineEdit1->text();
00274 
00275         DrinkList::Iterator it = drinkDB.getBegin();
00276         while ( it != drinkDB.getEnd() ) {
00277             lastDrinkName = (*it).getName();
00278             lastDrinkIngredients = (*it).getIngredients();
00279             
00280             if( lastDrinkIngredients.find( searchForIngredient ,0, FALSE) != -1 )
00281                 searchList.append( lastDrinkName );
00282             
00283             ++it;
00284         }
00285         
00286         if(searchList.count() >0)
00287             showSearchResult(searchList);
00288         else
00289             QMessageBox::message(tr("Search"),tr("Sorry no results for\n")+ searchForIngredient);
00290     }
00291     delete fileDlg;
00292 }
00293 
00294 void Bartender::showSearchResult(QStringList &searchList) {
00295     QString result;
00296     Search_Results *searchDlg;
00297 
00298     searchList.sort();
00299 
00300     searchDlg = new Search_Results(this, "Search Results", TRUE);
00301     searchDlg->ListBox1->insertStringList( searchList,-1);
00302     QPEApplication::execDialog( searchDlg );
00303 
00304     if( searchDlg->result() == 1 ) {
00305         result= searchDlg->ListBox1->currentText();
00306     }
00307     QListViewItemIterator it2( DrinkView );
00308     for ( ; it2.current(); ++it2 ) {
00309         if ( it2.current()->text(0)== result ) {
00310 //                odebug << it2.current()->text(0) << oendl; 
00311             showDrink(it2.current());
00312         }
00313     }
00314 delete  searchDlg;
00315 }
00316 
00317 void Bartender::doEdit() {
00318     if(DrinkView->currentItem() == NULL) {
00319       fileNew();
00320       return;
00321     }
00322 
00323     QString myDrink;
00324     myDrink= DrinkView->currentItem()->text(0);
00325     
00326     New_Drink *newDrinks;
00327     newDrinks = new New_Drink(this,"Edit Drink", TRUE);
00328     QString newName, newIng;
00329     QPEApplication::showDialog( newDrinks );
00330 
00331     DrinkList::Iterator drinkItem = drinkDB.findDrink(myDrink);
00332     if(drinkItem != drinkDB.getEnd()) {
00333         newDrinks->LineEdit1->setText((*drinkItem).getName());
00334         newDrinks->MultiLineEdit1->setText((*drinkItem).getIngredients());
00335         
00336         newDrinks->exec();
00337         newName = newDrinks->LineEdit1->text();
00338         newIng= newDrinks->MultiLineEdit1->text();
00339     
00340         if( newDrinks ->result() == 1 ) {
00341             (*drinkItem).setName(newName);
00342             (*drinkItem).setIngredients(newIng);
00343             if(!drinkDB.writeChanges()) {
00344                 QMessageBox::message( (tr("Note")), (tr("Failed to write to drink database!\n")) );
00345             }
00346             fillList();
00347         }
00348     }
00349     
00350     delete newDrinks;
00351 }
00352 
00353 void Bartender::clearList() {
00354     DrinkView->clear();
00355 }
00356 
00357 void Bartender::doBac() {
00358     BacDialog *bacDlg;
00359     bacDlg = new BacDialog(this,"BAC",TRUE);
00360     QPEApplication::execDialog( bacDlg );
00361     delete bacDlg;
00362 }
00363 
00364 void Bartender::openCurrentDrink() {
00365     if(DrinkView->currentItem() == NULL) return;
00366     showDrink(DrinkView->currentItem());
00367 }
00368 
00369 void Bartender::fileMenuActivated( int item) {
00370     odebug << "Item " << item << "" << oendl; 
00371     switch(item) {
00372       case -3: //        new -3
00373           fileNew();
00374           break;
00375       case -4://        open -4
00376           openCurrentDrink();
00377           break;
00378       case -5://        drink -5
00379           doSearchByName();
00380 
00381           break;
00382       case -6://        alcohol -6
00383           doSearchByIngredient();
00384 
00385           break;
00386 
00387     }
00388 }
00389 
00390 void Bartender::editMenuActivated(int item) {
00391     odebug << "Item " << item << "" << oendl; 
00392       /*
00393         edit -8
00394       */
00395     switch(item) {
00396       case -8:
00397           doEdit() ;
00398           break;
00399 
00400     }
00401 }
00402 

Generated on Sat Nov 5 16:16:48 2005 for OPIE by  doxygen 1.4.2