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 }
1.4.2