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

drinkdata.cpp

Go to the documentation of this file.
00001 /****************************************************************************
00002 ** Created: Sun Dec 26 22:00:00 2004
00003 **      by:  Paul Eggleton <bluelightning@bluelightning.org>
00004 **     copyright            : (C) 2004 by Paul Eggleton
00005     email                : bluelightning@bluelightning.org
00006     *   This program is free software; you can redistribute it and/or modify  *
00007     *   it under the terms of the GNU General Public License as published by  *
00008     *   the Free Software Foundation; either version 2 of the License, or     *
00009     *   (at your option) any later version.                                   *
00010     ***************************************************************************/
00011 
00012 /* QT */
00013 #include <qfile.h>
00014 #include <qtextstream.h>
00015 #include <qvaluelist.h>
00016 
00017 /* STD */
00018 #include <fcntl.h>
00019 #include <unistd.h>
00020 #include <stdlib.h>
00021 #include <errno.h>
00022 
00023 #include "drinkdata.h"
00024 
00025 // ----- DrinkData -----
00026 
00027 DrinkData::DrinkData() {
00028 }
00029 
00030 void DrinkData::setFile(const QString &filename) {
00031     this->filename = filename;
00032 }
00033 
00034 bool DrinkData::read(void) {
00035     QFile dbFile;
00036     
00037     dbFile.setName(filename);
00038     if ( !dbFile.open( IO_ReadOnly)) {
00039         return false;
00040     }
00041     
00042     items.clear();
00043     
00044     QTextStream t( &dbFile);
00045     QString s, name = "", ingredients = "";
00046     
00047     while ( !t.eof()) {
00048         s = t.readLine();
00049         if(s.find( "#", 0, TRUE) != -1 || dbFile.atEnd()) {
00050             if(name != "")
00051                 addDrink(name, ingredients);
00052             // Start new entry
00053             name = s.right(s.length()-2);
00054             ingredients = "";
00055         }
00056         else {
00057             if(ingredients != "")
00058                 ingredients += '\n';
00059             ingredients += s;
00060         }
00061     }
00062     
00063     dbFile.close(); 
00064 
00065     return true;
00066 }
00067 
00068 void DrinkData::addDrink(const QString &name, const QString &ingredients) {
00069     DrinkItem item(name, ingredients);
00070     items.append(item);
00071 }
00072 
00073 DrinkList::Iterator DrinkData::findDrink(const QString &name) {
00074     DrinkList::Iterator it = items.begin();
00075     while ( it != items.end() ) {
00076         if((*it).getName() == name)
00077             return it;
00078         ++it;
00079     }
00080     return items.end();
00081 }
00082 
00083 DrinkList::Iterator DrinkData::getBegin(void) {
00084     return items.begin();
00085 }
00086 
00087 DrinkList::Iterator DrinkData::getEnd(void) {
00088     return items.end();
00089 }
00090 
00091 bool DrinkData::writeChanges(void) {
00092     QFile dbFile;
00093     
00094     dbFile.setName(filename);
00095     if ( !dbFile.open( IO_WriteOnly | IO_Truncate )) {
00096         return false;
00097     }
00098     
00099     QTextStream t( &dbFile);
00100     
00101     DrinkList::Iterator it = items.begin();
00102     while ( it != items.end() ) {
00103         t << "# " << (*it).getName() << '\n';
00104         t << (*it).getIngredients() << '\n';
00105         ++it;
00106     }
00107     
00108     dbFile.close();
00109     
00110     return true;
00111 }
00112     
00113 
00114 // ----- DrinkItem -----
00115 
00116 DrinkItem::DrinkItem(void) {
00117 }
00118 
00119 DrinkItem::DrinkItem(const QString &name, const QString &ingredients) {
00120     this->name = name;
00121     this->ingredients = ingredients;
00122 }
00123 
00124 const QString &DrinkItem::getName(void) {
00125     return name;
00126 }
00127 
00128 const QString &DrinkItem::getIngredients(void) {
00129     return ingredients;
00130 }
00131 
00132 void DrinkItem::setName(const QString &name) {
00133     this->name = name;
00134 }
00135 
00136 void DrinkItem::setIngredients(const QString &ingredients) {
00137     this->ingredients = ingredients;
00138 }

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