From 658ec606edacf9bdd923b31e4bda2fdd1010b0ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Soutad=C3=A9?= Date: Sat, 27 Aug 2011 18:35:36 +0200 Subject: [PATCH] First runnable version --- Makefile | 2 + src/controller/KissCount.cpp | 153 +++------ src/controller/KissCount.hpp | 46 +-- src/main.cpp | 10 +- src/model/Account.hpp | 4 +- src/model/Category.hpp | 4 +- src/model/Database.cpp | 433 +++++++++++++----------- src/model/Database.hpp | 32 +- src/model/Database_Update.cpp | 70 ++-- src/model/Operation.hpp | 5 +- src/model/User.cpp | 31 +- src/model/User.hpp | 19 +- src/model/export/ExportEngine.cpp | 16 +- src/model/export/ExportEngine.hpp | 10 +- src/model/export/XMLExportEngine.cpp | 52 +-- src/model/export/XMLExportEngine.hpp | 2 +- src/model/import/GrisbiImportEngine.cpp | 67 ++-- src/model/import/GrisbiImportEngine.hpp | 2 +- src/model/import/ImportEngine.cpp | 147 ++++---- src/model/import/ImportEngine.hpp | 22 +- src/model/import/OFXImportEngine.cpp | 40 ++- src/model/import/OFXImportEngine.hpp | 4 +- src/model/import/XMLImportEngine.cpp | 106 +++--- src/model/import/XMLImportEngine.hpp | 2 +- src/view/SupportedLanguages.hpp | 10 +- src/view/view.hpp | 4 +- src/view/wxUI.cpp | 4 +- src/view/wxUI.hpp | 6 +- 28 files changed, 657 insertions(+), 646 deletions(-) diff --git a/Makefile b/Makefile index 4a3fea3..1c0407b 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,7 @@ DOC_DIR=$(DESTDIR)$(ROOT_DIR)"/share/doc/kisscount/" BIN_DIR=$(DESTDIR)$(ROOT_DIR)"/bin/" CXXFLAGS=`pkg-config --cflags QtCore QtGui QtSql` -Wall -Isrc -ggdb +CXXFLAGS+=-I/usr/include/libxml2 CXXFLAGS+=-Wl,--rpath,"$(LIB_DIR)" CXXFLAGS+=-DRESSOURCES_ROOT="\"$(SHARE_DIR)\"" # For developpers @@ -12,6 +13,7 @@ CXXFLAGS+=-DRESSOURCES_ROOT="\"$(SHARE_DIR)\"" LDFLAGS=`pkg-config --libs QtCore QtGui QtSql` LDFLAGS+=-lofx +LDFLAGS+=-lxml2 CXX=$(HOST)g++ diff --git a/src/controller/KissCount.cpp b/src/controller/KissCount.cpp index 4b2e561..2aea1fd 100644 --- a/src/controller/KissCount.cpp +++ b/src/controller/KissCount.cpp @@ -28,13 +28,13 @@ std::vector * KissCount::_importEngines; std::vector * KissCount::_exportEngines; -KissCount::KissCount(const char* bdd_filename) : _user(0) +KissCount::KissCount(const char* bdd_filename) : QApplication(0, 0), _user(0) { - wxRect rect = wxDisplay().GetGeometry(); + //wxRect rect = wxDisplay().GetGeometry(); - _wxUI = new wxUI(this, wxT("KissCount"), wxPoint(50, 50), wxSize(rect.width-rect.x, rect.height-rect.y)); + _wxUI = new wxUI(this, "KissCount"); - _wxUI->SetLanguage(wxLocale::GetSystemLanguage()); + //_wxUI->SetLanguage(wxLocale::GetSystemLanguage()); _wxUI->show(); // _wxUI->Centre(); @@ -46,12 +46,12 @@ KissCount::KissCount(const char* bdd_filename) : _user(0) } catch (std::string s) { - _wxUI->Close(true); + _wxUI->close(); throw ; } _wxUI->ChangeUser(); - _wxUI->Enable(); + //_wxUI->enable(); } KissCount::~KissCount() @@ -64,17 +64,17 @@ KissCount::~KissCount() if (_user) delete _user; } -std::list KissCount::GetUsers() +std::list KissCount::GetUsers() { return _db->GetUsers(); } -bool KissCount::IsValidUser(const std::string& user, const std::string& password) +bool KissCount::IsValidUser(const QString& user, const QString& password) { return _db->IsValidUser(user, password) ; } -void KissCount::LoadUser(const std::string& user) +void KissCount::LoadUser(const QString& user) { if (_user) delete _user; _user = _db->LoadUser(user) ; @@ -130,7 +130,7 @@ int KissCount::AddOperation(Operation& op, bool checkTransfert) { int ret = _db->AddOperation(_user, op, checkTransfert); - if (checkTransfert && op.transfert.Length()) + if (checkTransfert && op.transfert) _user->LinkOrUnlinkOperation(op); return ret; @@ -138,7 +138,7 @@ int KissCount::AddOperation(Operation& op, bool checkTransfert) void KissCount::DeleteOperation(Operation& op) { - if (op.transfert.Length()) + if (op.transfert) { op.transfert = 0; _user->LinkOrUnlinkOperation(op); @@ -176,13 +176,12 @@ void KissCount::SetAccountAmount(int accountId, int month, int year, double amou int KissCount::AddAccount(Account& ac) { - wxDateTime curDate; + QDate curDate = QDate::currentDate(); ac.id = _db->AddAccount(_user, ac); _user->AddAccount(ac); - curDate.SetToCurrent(); - SetAccountAmount(ac.id, (int)curDate.GetMonth(), curDate.GetYear(), 0.0); + SetAccountAmount(ac.id, curDate.month(), curDate.year(), 0.0); return ac.id; } @@ -209,22 +208,22 @@ void KissCount::DeleteAccount(Account& ac, int replacement) LoadYear(it2->first, true); } -void KissCount::AddSharedAccount(Account& ac, const std::string& granted) +void KissCount::AddSharedAccount(Account& ac, const QString& granted) { _db->AddSharedAccount(ac, granted); } -void KissCount::RemoveSharedAccount(Account& ac, const std::string& granted) +void KissCount::RemoveSharedAccount(Account& ac, int granted) { _db->RemoveSharedAccount(ac, granted); } -std::map KissCount::getSharedAccountOwners(int account) +std::map KissCount::getSharedAccountOwners(int account) { return _db->getSharedAccountOwners(account); } -int KissCount::getSharedAccountOwner(int account) +QString KissCount::getSharedAccountOwner(int account) { return _db->getSharedAccountOwner(account); } @@ -298,7 +297,7 @@ void KissCount::GenerateMonth(int monthFrom, int yearFrom, int monthTo, int year it != (*_user->_operations[yearTo])[monthTo].end(); it++) { - if (it->parent.Length()) + if (it->parent) { it->parent = meta[it->parent]; UpdateOperation(*it); @@ -317,31 +316,31 @@ void KissCount::GenerateMonth(int monthFrom, int yearFrom, int monthTo, int year _wxUI->GenerateMonth(monthTo, yearTo); } -void KissCount::ChangePassword(const std::string& password) +void KissCount::ChangePassword(const QString& password) { _db->ChangePassword(_user, password); } -bool KissCount::UserExists(const std::string& name) +bool KissCount::UserExists(const QString& name) { return _db->UserExists(name); } -void KissCount::ChangeName(const std::string& name) +void KissCount::ChangeName(const QString& name) { _db->ChangeName(_user, name); _user->_name = name; } // To enable translation during xgettext -wxString default_cats[] = { +QString default_cats[] = { _("Fix"), _("Groceries"), _("Hobbies"), _("Car"), _("Unexpected"), _("Other") }; -void KissCount::NewUser(const std::string& name) +void KissCount::NewUser(const QString& name) { - wxDateTime curDate; + QDate curDate = QDate::currentDate(); Account ac = { /*.id = */0, /*.name = */_("Account 1"), @@ -356,8 +355,6 @@ void KissCount::NewUser(const std::string& name) if (_user) delete _user; _user = _db->LoadUser(name) ; - curDate.SetToCurrent(); - AddAccount(ac); cat.parent = 0 ; cat.name = "Fix" ; cat.backcolor = view::OWN_YELLOW ; cat.forecolor = Qt::black; cat.fix_cost = true; @@ -375,7 +372,7 @@ void KissCount::NewUser(const std::string& name) SetOperationOrder("ASC"); - _db->GenerateMonth(_user, -1, -1, (int)curDate.GetMonth(), curDate.GetYear()); + _db->GenerateMonth(_user, -1, -1, (int)curDate.month(), curDate.year()); } void KissCount::KillMe() @@ -387,27 +384,27 @@ void KissCount::KillMe() _wxUI->ChangeUser(); } -void KissCount::SetLanguage(wxLanguage language) +void KissCount::SetLanguage(QString language) { - _user->_preferences["language"] = wxString::Format(wxT("%d"), language) ; + _user->_preferences["language"] = language; _db->UpdatePreference(_user, "language"); } /* ASC (default) or DESC */ -void KissCount::SetOperationOrder(const std::string& order) +void KissCount::SetOperationOrder(const QString& order) { _user->_preferences["operation_order"] = order; _db->UpdatePreference(_user, "operation_order"); } -const std::string& KissCount::GetOperationOrder() +const QString& KissCount::GetOperationOrder() { return _user->_preferences["operation_order"] ; } -std::vector* KissCount::Search(std::string* description, wxDateTime* dateFrom, wxDateTime* dateTo, +std::vector* KissCount::Search(QString* description, QDate* dateFrom, QDate* dateTo, int* amountFrom, int* amountTo, std::vector categories, int types, std::vector accounts) { @@ -418,9 +415,9 @@ std::vector* KissCount::Search(std::string* description, wxDateTime* bool KissCount::SearchPreviousOperation(Operation* res, Operation& op, int month, int year, bool limitToType) { std::vector* operations; - wxDateTime* date ; + QDate* date ; //wxDateSpan threeMonths(0, 3); Not working :( - std::vector v; + std::vector v; int i; month -= 3; @@ -430,7 +427,7 @@ bool KissCount::SearchPreviousOperation(Operation* res, Operation& op, int month month += 12; } - date = new wxDateTime(0, (wxDateTime::Month)month, year); + date = new QDate(year, month, 0); if (limitToType) operations = _db->Search(_user, &op.description, date, 0, 0, 0, v, op.fix_cost ? +Database::FIX_OP : +Database::NON_FIX_OP, v, false); @@ -463,22 +460,14 @@ void KissCount::GetStats(int monthFrom, int yearFrom, int monthTo, int yearTo, std::map > >* accountAmounts, std::map* categories) { - wxString monthF = wxString::Format(wxT("%d"), monthFrom); - wxString monthT = wxString::Format(wxT("%d"), monthTo); - wxString yearF = wxString::Format(wxT("%d"), yearFrom); - wxString yearT = wxString::Format(wxT("%d"), yearTo); - - _db->GetStats(_user, monthF, yearF, monthT, yearT, accountAmounts, categories); + _db->GetStats(_user, monthFrom, yearFrom, monthTo, yearTo, accountAmounts, categories); } void KissCount::GetMonthStats(int month, int year, int nbDays, std::map >* operations, std::map* categories) { - wxString monthS = wxString::Format(wxT("%d"), month); - wxString yearS = wxString::Format(wxT("%d"), year); - - _db->GetMonthStats(_user, monthS, yearS, nbDays, operations, categories); + _db->GetMonthStats(_user, month, year, nbDays, operations, categories); } @@ -492,66 +481,34 @@ std::map* KissCount::GetVirtualAmount(int month, int year) return _db->GetVirtualAmount(_user, month, year); } -QFont KissCount::ExtractFont(std::string strFont) +QFont KissCount::ExtractFont(QString strFont) { - long int pointSize, family, style, weight; - size_t pos; - std::string tmp; - wxString faceName; + long int pointSize, weight, family, style; + QString faceName; if (!strFont.size()) { DEFAULT_FONT(f); return f; } + QStringList list = strFont.split(";"); - pos = strFont.find(";"); - - if (pos != -1) - { - tmp = substring(strFont, 0, pos); - pointSize = QString(tmp).toInt(); - strFont = strFont.substring(pos+1, strFont.size()); - } - - pos = strFont.find(";"); - - if (pos != -1) - { - tmp = substring(strFont, 0, pos); - family = QString(tmp).toInt(); - strFont = strFont.substring(pos+1, strFont.size()); - } - - pos = strFont.find(";"); - - if (pos != -1) - { - tmp = substring(strFont, 0, pos); - style = QString(tmp).toInt(); - strFont = strFont.substring(pos+1, strFont.size()); - } - - pos = strFont.Find(wxT(";")); - - if (pos != -1) - { - tmp = substring(strFont, 0, pos); - weight = QString(tmp).toInt(); - strFont = strFont.substring(pos+1, strFont.size()); - } - - faceName = strFont; + pointSize = list[0].toInt(); + family = list[1].toInt(); + style = list[2].toInt(); + weight = list[3].toInt(); + faceName = list[4]; return QFont(faceName, pointSize, weight); } -std::string KissCount::CompactFont(const QFont& font) +QString KissCount::CompactFont(const QFont& font) { - QString res = QString::sprintf("%d;%d;%d;%d;", font.pointSize(), 0, 0, font.weight()); + QString res ; + res = res.sprintf("%d;%d;%d;%d;", font.pointSize(), 0, 0, font.weight()); res += font.family(); - return res.toStdString(); + return res; } void KissCount::UnRegisterImportEngine(ImportEngine* engine) @@ -570,15 +527,15 @@ void KissCount::RegisterImportEngine(ImportEngine* engine) importEngines->push_back(engine); } -wxString KissCount::GetImportEngineExtensions() +QString KissCount::GetImportEngineExtensions() { - wxString res; + QString res; std::vector::iterator it; int i; std::vector* importEngines = KissCount::GetImportEngines(); for(i=0; i<(int)importEngines->size()-1; i++) - res = res + (*importEngines)[i]->GetFileExt() + wxT("|") ; + res = res + (*importEngines)[i]->GetFileExt() + "|" ; if (importEngines->size()) res = res + (*importEngines)[i]->GetFileExt(); @@ -586,7 +543,7 @@ wxString KissCount::GetImportEngineExtensions() return res; } -ImportEngine* KissCount::GetImportEngine(std::string path) +ImportEngine* KissCount::GetImportEngine(QString path) { std::vector::iterator it; std::vector* importEngines = KissCount::GetImportEngines(); @@ -619,9 +576,9 @@ void KissCount::RegisterExportEngine(ExportEngine* engine) exportEngines->push_back(engine); } -wxString KissCount::GetExportEngineExtensions() +QString KissCount::GetExportEngineExtensions() { - std::string res; + QString res; std::vector::iterator it; int i; std::vector* exportEngines = KissCount::GetExportEngines(); @@ -635,7 +592,7 @@ wxString KissCount::GetExportEngineExtensions() return res; } -ExportEngine* KissCount::GetExportEngine(std::string path) +ExportEngine* KissCount::GetExportEngine(QString path) { std::vector::iterator it; std::vector* exportEngines = KissCount::GetExportEngines(); diff --git a/src/controller/KissCount.hpp b/src/controller/KissCount.hpp index 2b9b117..018ac22 100644 --- a/src/controller/KissCount.hpp +++ b/src/controller/KissCount.hpp @@ -32,7 +32,7 @@ #define APP_VERSION "0.3" -#define ESCAPE_CHARS(s) s +#define ESCAPE_CHARS(s) s.replace("\"", "\\\""); /*{ \ if (s.Find(wxT("\\\"")) == wxNOT_FOUND) \ s.Replace(wxT("\""), wxT("\\\""), true); \ @@ -40,7 +40,7 @@ s.Replace(wxT("\'"), wxT("\\\'"), true); \ } */ -#define UNESCAPE_CHARS(s) s +#define UNESCAPE_CHARS(s) s.replace("\\\"", "\""); /*{ \ s.Replace(wxT("\\\""), wxT("\""), true); \ s.Replace(wxT("\\\'"), wxT("\'"), true); \ @@ -57,14 +57,14 @@ public: KissCount(const char* bdd_filename); ~KissCount(); - std::list GetUsers(); - bool IsValidUser(const std::string& user, const std::string& password); - void LoadUser(const std::string& user); + std::list GetUsers(); + bool IsValidUser(const QString& user, const QString& password); + void LoadUser(const QString& user); User* GetUser(); - void ChangePassword(const std::string& password); - bool UserExists(const std::string& name); - void ChangeName(const std::string& name); - void NewUser(const std::string& name); + void ChangePassword(const QString& password); + bool UserExists(const QString& name); + void ChangeName(const QString& name); + void NewUser(const QString& name); void LoadYear(int year, bool force=false); @@ -82,10 +82,10 @@ public: int AddAccount(Account& ac); void UpdateAccount(Account& ac); void DeleteAccount(Account& ac, int replacement); - void AddSharedAccount(Account& ac, const std::string& granted); - void RemoveSharedAccount(Account& ac, const std::string& granted); - std::map getSharedAccountOwners(int account); - int getSharedAccountOwner(int account); + void AddSharedAccount(Account& ac, const QString& granted); + void RemoveSharedAccount(Account& ac, int granted); + std::map getSharedAccountOwners(int account); + QString getSharedAccountOwner(int account); int AddCategory(Category& category); void UpdateCategory(Category& category); @@ -96,11 +96,11 @@ public: void GenerateMonth(int monthFrom, int yearFrom, int monthTo, int yearTo); void KillMe(); - void SetLanguage(std::string language); - void SetOperationOrder(const std::string& order); - const std::string& GetOperationOrder(); + void SetLanguage(QString language); + void SetOperationOrder(const QString& order); + const QString& GetOperationOrder(); - std::vector* Search(std::string* description, QDate* dateFrom, QDate* dateTo, + std::vector* Search(QString* description, QDate* dateFrom, QDate* dateTo, int* amountFrom, int* amountTo, std::vector categories, int types, std::vector accounts); @@ -117,20 +117,20 @@ public: std::map* GetNotChecked(int month, int year); std::map* GetVirtualAmount(int month, int year); - static QFont ExtractFont(std::string); - static std::string CompactFont(const QFont& font); + static QFont ExtractFont(QString); + static QString CompactFont(const QFont& font); static void RegisterImportEngine(ImportEngine* engine); static void UnRegisterImportEngine(ImportEngine* engine); - std::string GetImportEngineExtensions(); - ImportEngine* GetImportEngine(std::string path); + QString GetImportEngineExtensions(); + ImportEngine* GetImportEngine(QString path); static void RegisterExportEngine(ExportEngine* engine); static void UnRegisterExportEngine(ExportEngine* engine); - std::string GetExportEngineExtensions(); - ExportEngine* GetExportEngine(std::string path); + QString GetExportEngineExtensions(); + ExportEngine* GetExportEngine(QString path); void UpdateImportPattern(); diff --git a/src/main.cpp b/src/main.cpp index edffb0a..5479728 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -17,18 +17,18 @@ along with KissCount. If not, see . */ +#include + #include -int main(int argc, char *argv[]) +int main(int argc, const char *argv[]) { try { if (argc == 2) - KissCount(wxString(argv[1]).mb_str()); + return KissCount(argv[1]).exec(); else - KissCount(0); - - return KissCount.exec(); + return KissCount(0).exec(); } catch (std::string s) { diff --git a/src/model/Account.hpp b/src/model/Account.hpp index f0b4243..6fa5cf1 100644 --- a/src/model/Account.hpp +++ b/src/model/Account.hpp @@ -22,8 +22,8 @@ struct Account { int id; - std::string name; - std::string number; + QString name; + QString number; bool shared; bool blocked; bool _default; diff --git a/src/model/Category.hpp b/src/model/Category.hpp index 20bc8b3..94b5def 100644 --- a/src/model/Category.hpp +++ b/src/model/Category.hpp @@ -27,10 +27,10 @@ struct Category { int id; int parent; - std::string name; + QString name; QColor backcolor; QColor forecolor; - std::string font; + QString font; bool fix_cost; bool operator == (int catId) diff --git a/src/model/Database.cpp b/src/model/Database.cpp index 44985a0..71e37e1 100644 --- a/src/model/Database.cpp +++ b/src/model/Database.cpp @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -177,22 +178,22 @@ QString Database::HashPassword(const QString& password) return res; } -std::list Database::GetUsers() +std::list Database::GetUsers() { - std::list res; - QSqlQuery query; + std::list res; + QSqlQuery query(_db); EXECUTE_SQL_QUERY(QString("SELECT name FROM user ORDER BY name"), res); while (query.next()) - res.push_back(query.value(0).toString().toStdString()); + res.push_back(query.value(0).toString()); return res; } bool Database::IsValidUser(const QString& user, const QString& password) { - QSqlQuery query; + QSqlQuery query(_db); EXECUTE_SQL_QUERY(QString("SELECT name FROM user WHERE name='%1' AND password='%2'").arg(user, HashPassword(password)), false); @@ -208,12 +209,12 @@ static inline void fillOperation(Operation* op, const QSqlRecord& set) op->month = set.value("month").toInt(); op->year = set.value("year").toInt(); op->amount = set.value("amount").toDouble(); - op->description = set.value("description").toString().toStdString(); + op->description = set.value("description").toString(); op->category = set.value("category").toInt(); op->fix_cost = set.value("fix_cost").toBool(); op->checked = set.value("checked").toBool(); op->transfert = set.value("transfert").toInt(); - op->formula = set.value("formula").toString().toStdString(); + op->formula = set.value("formula").toString(); op->meta = set.value("meta").toBool(); op->_virtual = set.value("virtual").toBool(); } @@ -221,8 +222,8 @@ static inline void fillOperation(Operation* op, const QSqlRecord& set) static inline void fillAccount(Account* account, const QSqlRecord& set) { account->id = set.value("id").toInt(); - account->name = set.value("name").toString().toStdString(); - account->number = set.value("number").toString().toStdString(); + account->name = set.value("name").toString(); + account->number = set.value("number").toString(); account->shared = set.value("shared").toBool(); account->blocked = set.value("blocked").toBool(); account->_default = set.value("default_account").toBool(); @@ -234,14 +235,14 @@ static inline void fillCategory(Category* category, const QSqlRecord& set) { category->id = set.value("id").toInt(); category->parent = set.value("parent").toInt(); - category->name = set.value("name").toString().toStdString(); + category->name = set.value("name").toString(); category->backcolor = QColor(set.value("backcolor").toString()); category->forecolor = QColor(set.value("forecolor").toString()); - category->font = set.value("font").toString().toStdString(); + category->font = set.value("font").toString(); category->fix_cost = set.value("fix_cost").toBool(); } -User* Database::LoadUser(const std::string& name) +User* Database::LoadUser(const QString& name) { User* user; Account account; @@ -249,7 +250,7 @@ User* Database::LoadUser(const std::string& name) ImportPattern importPattern; QString req; QSqlRecord set; - QSqlQuery query; + QSqlQuery query(_db); std::vector::iterator it; @@ -263,8 +264,8 @@ User* Database::LoadUser(const std::string& name) set = query.record(); user->_id = set.value("id").toInt(); - user->_name = set.value("name").toString().toStdString(); - user->_password = "" ; // Security reasons set.value("password").toString().toStdString(); + user->_name = set.value("name").toString(); + user->_password = "" ; // Security reasons set.value("password").toString(); user->_preferences["operation_order"] = "ASC" ; @@ -304,7 +305,7 @@ User* Database::LoadUser(const std::string& name) it++; for (;it != user->_accounts.end(); it++) { - req += wxT("', '") + QString::number(it->id) ; + req += "', '" + QString::number(it->id) ; } req += "')"; req += " OR user='" + QString::number(user->_id) + "'"; @@ -339,7 +340,7 @@ User* Database::LoadUser(const std::string& name) while (query.next()) { set = query.record(); - user->_preferences[set.value("name").toString().toStdString()] = set.value("value").toString().toStdString(); + user->_preferences[set.value("name").toString()] = set.value("value").toString(); } query.clear(); @@ -350,11 +351,11 @@ User* Database::LoadUser(const std::string& name) while (query.next()) { set = query.record(); - importPattern.pattern = set.value("pattern").toString().toStdString(); + importPattern.pattern = set.value("pattern").toString(); importPattern.account = set.value("account").toInt(); importPattern.category = set.value("category").toInt(); - user->_importPatterns[set.value("description").toString().toStdString()] = importPattern; + user->_importPatterns[set.value("description").toString()] = importPattern; } query.clear(); @@ -367,7 +368,7 @@ void Database::LoadYear(User* user, int year) QSqlRecord set; QString req; std::vector::iterator it; - QSqlQuery query; + QSqlQuery query(_db); if (user->_operations[year] == 0) user->_operations[year] = new std::map >(); @@ -406,7 +407,7 @@ double Database::GetAccountAmount(int id, int month, int year) QSqlRecord set; QString req; double res = 0.0; - QSqlQuery query; + QSqlQuery query(_db); req = QString("SELECT amount FROM account_amount WHERE account='%1' AND month='%2' AND year='%3'").arg(id, month, year) ; @@ -430,7 +431,7 @@ double Database::CalcAccountAmount(int id, int month, int year, bool* had_values QSqlRecord set; QString req; double res = 0.0; - QSqlQuery query; + QSqlQuery query(_db); req = QString("SELECT SUM(id) AS id, SUM(amount) AS amount FROM operation WHERE account='%1' AND month='%2' AND year='%3' AND meta='0'").arg(id, month ,year) ; @@ -458,7 +459,7 @@ bool Database::GetOperation(int id, Operation* op) { QSqlRecord set; QString req; - QSqlQuery query; + QSqlQuery query(_db); req = QString("SELECT * FROM operation WHERE id='%1").arg(id); @@ -480,7 +481,7 @@ void Database::LinkOrUnlinkOperation(User* user, Operation& op) QSqlRecord set; Account account, account2; bool _virtual; - QSqlQuery query; + QSqlQuery query(_db); if (op.transfert) { @@ -504,14 +505,15 @@ void Database::LinkOrUnlinkOperation(User* user, Operation& op) if (query.next()) { set = query.record(); - req = QString("UPDATE operation SET transfert='', virtual='0' WHERE id='%1'").arg(set.value("id").toString().toStdString()); + req = QString("UPDATE operation SET transfert='', virtual='0' WHERE id='%1'").arg(set.value("id").toString()); query.clear(); EXECUTE_SQL_UPDATE(req, ); } else query.clear(); - req = QString("SELECT id, account FROM operation WHERE description=\"%1\" AND month='%2' AND year='%3' AND amount='%4' AND meta='0' AND account !='%5' AND transfert=''").arg(op.description, op.month, op.year, DoubleToString(-op.amount), op.account), + req = QString("SELECT id, account FROM operation WHERE description=\"%1\" AND month='%2' AND year='%3' AND amount='%4' AND meta='0' AND account !='%5' AND transfert=''") + .arg(op.description, QString::number(op.month), QString::number(op.year), DoubleToString(-op.amount), QString::number(op.account)); EXECUTE_SQL_QUERY(req, ); @@ -534,13 +536,15 @@ void Database::LinkOrUnlinkOperation(User* user, Operation& op) query.clear(); - req = QString("UPDATE operation SET transfert='%1', virtual='%2' WHERE id='%3'").arg((linked.id) ?: "", _virtual, op.id); + req = QString("UPDATE operation SET transfert='%1', virtual='%2' WHERE id='%3'") + .arg((linked.id) ? QString::number(linked.id) : "", QString::number(_virtual), QString::number(op.id)); EXECUTE_SQL_UPDATE(req, ); query.clear(); - req = QString("UPDATE operation SET transfert='%1', virtual='%2' WHERE id='%3'").arg((op.id) ?: "", _virtual, linked.id); + req = QString("UPDATE operation SET transfert='%1', virtual='%2' WHERE id='%3'") + .arg((op.id) ? QString::number(op.id) : "", QString::number(_virtual), QString::number(linked.id)); EXECUTE_SQL_UPDATE(req, ); op._virtual = _virtual; @@ -552,7 +556,7 @@ void Database::LinkOrUnlinkOperation(User* user, Operation& op) void Database::UpdateOperation(User* user, Operation& op, bool checkTransfert) { QString req; - QSqlQuery query; + QSqlQuery query(_db); if (checkTransfert) LinkOrUnlinkOperation(user, op); @@ -560,9 +564,11 @@ void Database::UpdateOperation(User* user, Operation& op, bool checkTransfert) ESCAPE_CHARS(op.description); req = "UPDATE operation SET parent='%1', account='%2', year='%3'n month='%4', day='%5', amount='%6', description=\"%7\", category='%8'" ; - req = req.arg((op.parent) ?: "", op.account, op.year, op.month, op.day, DoubleToString(op.amount), op.description, op.category); + req = req.arg((op.parent) ? QString::number(op.parent) : "", QString::number(op.account), QString::number(op.year), QString::number(op.month), + QString::number(op.day), DoubleToString(op.amount), op.description, QString::number(op.category)); req += "fix_cost='%1', checked='%2', transfert='%3', meta='%4', virtual='%5', formula='%6' WHERE id='%7'"; - req = req.arg(op.fix_cost, op.checked, (op.transfert) ?: "", op.meta, op._virtual, op.formula, op.id); + req = req.arg(QString::number(op.fix_cost), QString::number(op.checked), (op.transfert) ? QString::number(op.transfert): "", + QString::number(op.meta), QString::number(op._virtual), op.formula, QString::number(op.id)); EXECUTE_SQL_UPDATE(req, ); @@ -570,18 +576,20 @@ void Database::UpdateOperation(User* user, Operation& op, bool checkTransfert) LinkOrUnlinkOperation(user, op); } -wxString Database::AddOperation(User* user, Operation& op, bool checkTransfert) +int Database::AddOperation(User* user, Operation& op, bool checkTransfert) { QString req; QSqlRecord set; - QSqlQuery query; + QSqlQuery query(_db); ESCAPE_CHARS(op.description); req = "INSERT INTO operation ('user', 'parent', 'account', 'year', 'month', 'day', 'amount', 'description', 'category', 'fix_cost', 'formula', 'transfert', 'meta', 'virtual') VALUES ('%1', '%2', '%3', '%4', '%5', '%6', '%7', '%8'" ; - req = req.arg(user->_id, (op.parent) ?: "", op.account, op.year, op.month, op.day, DoubleToString(op.amount), op.description); + req = req.arg(QString::number(user->_id), (op.parent) ? QString::number(op.parent): "", QString::number(op.account), QString::number(op.year), + QString::number(op.month), QString::number(op.day), DoubleToString(op.amount), op.description); req += ", '%1', '%2', '%3', '%4', '%5', '%6')"; - req = req.arg(op.category, op.fix_cost, op.formula, (op.transfert) ?: "", op.meta, op._virtual); + req = req.arg(QString::number(op.category), QString::number(op.fix_cost), op.formula, (op.transfert) ? QString::number(op.transfert): "", + QString::number(op.meta), QString::number(op._virtual)); EXECUTE_SQL_UPDATE(req, 0); @@ -595,7 +603,7 @@ wxString Database::AddOperation(User* user, Operation& op, bool checkTransfert) void Database::DeleteOperation(User* user, Operation& op) { - QSqlQuery query; + QSqlQuery query(_db); QString req = QString("DELETE FROM operation WHERE id='%1'").arg(op.id); EXECUTE_SQL_UPDATE(req, ); @@ -609,31 +617,31 @@ void Database::DeleteOperations(User* user, int month, int year) std::vector::iterator it; it = user->_accounts.begin(); - req = "DELETE FROM account_amount WHERE account IN('" + QString::Number(it->id); + req = "DELETE FROM account_amount WHERE account IN('" + QString::number(it->id); it++; for (;it != user->_accounts.end(); it++) { - req += "', '" + QString::Number(it->id) ; + req += "', '" + QString::number(it->id) ; } req += "')"; - req += " AND year='" + QString::Number(year) + "'"; + req += " AND year='" + QString::number(year) + "'"; if (month != -1) - req += " AND month='" + QString::Number(month) + "'"; + req += " AND month='" + QString::number(month) + "'"; EXECUTE_SQL_UPDATE(req, ); it = user->_accounts.begin(); - req = wxT("DELETE FROM operation WHERE (account IN('") + it->id; + req = "DELETE FROM operation WHERE (account IN('" + it->id; it++; for (;it != user->_accounts.end(); it++) { - req += "', '" + QString::Number(it->id) ; + req += "', '" + QString::number(it->id) ; } req += "')"; - req += " OR user='" + QString::Number(user->_id) + "')"; - req += " AND year='" + QString::Number(year) + "'"; + req += " OR user='" + QString::number(user->_id) + "')"; + req += " AND year='" + QString::number(year) + "'"; if (month != -1) - req += " AND month='" + QString::Number(month) + "'"; + req += " AND month='" + QString::number(month) + "'"; EXECUTE_SQL_UPDATE(req, ); } @@ -644,7 +652,7 @@ bool Database::LoadOperation(User* user, int id) QString req; bool ret = false; std::vector::iterator it; - QSqlQuery query; + QSqlQuery query(_db); req = QString("SELECT * FROM operation WHERE id='%1'").arg(id); @@ -696,7 +704,7 @@ double Database::MetaAmount(int id) QSqlRecord set; QString req; double res = 0.0; - QSqlQuery query; + QSqlQuery query(_db); req = QString("SELECT SUM(amount) as amount FROM operation WHERE parent='%1'").arg(id); @@ -719,7 +727,7 @@ double Database::MetaPositiveAmount(int id) QSqlRecord set; QString req; double res = 0.0; - QSqlQuery query; + QSqlQuery query(_db); req = QString("SELECT SUM(amount) as amount FROM operation WHERE amount > 0 AND parent='%1'").arg(id); @@ -739,28 +747,37 @@ double Database::MetaPositiveAmount(int id) void Database::SetAccountAmount(int accountId, int month, int year, double amount) { QString req; - QSqlQuery query; + QSqlQuery query(_db); req = QString("UPDATE account_amount SET amount='%1' WHERE account='%2' AND month='%3' AND year='%4'"). - arg(DoubleToString(amount), accountId, month, year); + arg(DoubleToString(amount), QString::number(accountId), QString::number(month), QString::number(year)); - if (!query.exec(req, _db)) + if (!query.exec(req)) { req = "INSERT INTO account_amount ('account', 'year', 'month', 'amount') VALUES ('%1', '%2', '%3', '%4')" ; - req = req.arg(accountId, year, month, DoubleToString(amount)); + req = req.arg(QString::number(accountId), QString::number(year), QString::number(month), DoubleToString(amount)); EXECUTE_SQL_UPDATE(req, ); } } -wxString Database::AddAccount(User* user, Account& ac) +int Database::AddAccount(User* user, Account& ac) { QString req; + QSqlQuery query(_db); req = "INSERT INTO account ('user', 'name', 'number', 'shared', 'blocked', 'default_account', 'virtual') VALUES " ; req += "('%1', '%2', '%3', '%4', '%5', '%6', '%7')"; - req = req.arg(user->_id, ac.name, ac.number, ac.shared, ac.blocked, ac._default, ac._virtual); - - EXECUTE_SQL_UPDATE(req, wxT("0")); + req = req.arg(QString::number(user->_id), ac.name, ac.number, QString::number(ac.shared), QString::number(ac.blocked), + QString::number(ac._default), QString::number(ac._virtual)); + + if (!query.exec(req)) + { + QMessageBox::critical(0, _("Error"), _("Update failed !\n") + req); + std::cerr << __FUNCTION__ << "\n" ; + std::cerr << req.toStdString() << "\n" ; + std::cerr << query.lastError().text().toStdString() << "\n" ; + return 0; + } return query.lastInsertId().toInt(); } @@ -770,12 +787,11 @@ void Database::UpdateAccount(Account& ac) QString req; req = "UPDATE account SET name='%1', number='%2', shared='%3', blocked='%4', default_account='%5', virtual='%6' WHERE id='%7'" ; - req = req.arg(ac.name, ac.number, ac.shared, ac.blocked, ac._default, ac._virtual, ac.id); + req = req.arg(ac.name, ac.number, QString::number(ac.shared), QString::number(ac.blocked), QString::number(ac._default), + QString::number(ac._virtual), QString::number(ac.id)); EXECUTE_SQL_UPDATE(req, ); - query.clear(); - if (!ac.shared && ac.is_owner) { req = QString("DELETE FROM shared_account WHERE account='%1'").arg(ac.id); @@ -795,8 +811,6 @@ void Database::DeleteAccount(User* user, Account& ac, int replacement) req = QString("DELETE FROM shared_account WHERE account='%1'").arg(ac.id); EXECUTE_SQL_UPDATE(req, ); - - query.clear(); } req = QString("DELETE FROM account WHERE id='%1'").arg(ac.id); @@ -807,7 +821,7 @@ void Database::DeleteAccount(User* user, Account& ac, int replacement) EXECUTE_SQL_UPDATE(req, ); - req = QString("UPDATE operation SET account='%1' WHERE account='%2'").arg(replacement, ac.id); + req = QString("UPDATE operation SET account='%1' WHERE account='%2'").arg(QString::number(replacement), QString::number(ac.id)); // req += wxT(", transfert='0'"); EXECUTE_SQL_UPDATE(req, ); @@ -816,11 +830,11 @@ void Database::DeleteAccount(User* user, Account& ac, int replacement) RemoveSharedAccount(ac, user->_id); } -void Database::AddSharedAccount(Account& ac, const std::string& granted) +void Database::AddSharedAccount(Account& ac, const QString& granted) { QString req; QSqlRecord set; - QSqlQuery query; + QSqlQuery query(_db); req = QString("SELECT id FROM user WHERE name='%1'").arg(granted); @@ -830,7 +844,7 @@ void Database::AddSharedAccount(Account& ac, const std::string& granted) set = query.record(); - req = QString("INSERT INTO shared_account ('account', 'user') VALUES ('%1', '%2')").arg(ac.id, set.value("id").toString().toStdString()); + req = QString("INSERT INTO shared_account ('account', 'user') VALUES ('%1', '%2')").arg(QString::number(ac.id), set.value("id").toString()); EXECUTE_SQL_UPDATE(req, ); @@ -841,13 +855,13 @@ void Database::AddSharedAccount(Account& ac, const std::string& granted) } } -void Database::RemoveSharedAccount(Account& ac, const std::string& granted) +void Database::RemoveSharedAccount(Account& ac, int granted) { QString req; QSqlRecord set; - QSqlQuery query; + QSqlQuery query(_db); - req = QString("DELETE FROM shared_account WHERE user='%1' AND account='%2'").arg(granted, ac.id); + req = QString("DELETE FROM shared_account WHERE user='%1' AND account='%2'").arg(QString::number(granted), QString::number(ac.id)); EXECUTE_SQL_UPDATE(req, ); @@ -857,7 +871,7 @@ void Database::RemoveSharedAccount(Account& ac, const std::string& granted) query.next(); - set =query.record(); + set = query.record(); if (!set.value("cnt").toInt()) { @@ -867,24 +881,25 @@ void Database::RemoveSharedAccount(Account& ac, const std::string& granted) } -wxString Database::AddCategory(User* user, Category& category) +int Database::AddCategory(User* user, Category& category) { QString req; - wxString backcolor, forecolor; + QString backcolor, forecolor; + QSqlQuery query(_db); - backcolor = wxT("#") ; - backcolor += wxString::Format(wxT("%02X"), category.backcolor.Red()); - backcolor += wxString::Format(wxT("%02X"), category.backcolor.Green()); - backcolor += wxString::Format(wxT("%02X"), category.backcolor.Blue()); + backcolor = "#" ; + backcolor += QString::number(category.backcolor.red(), 16); + backcolor += QString::number(category.backcolor.green(), 16); + backcolor += QString::number(category.backcolor.blue(), 16); - forecolor = wxT("#") ; - forecolor += wxString::Format(wxT("%02X"), category.forecolor.Red()); - forecolor += wxString::Format(wxT("%02X"), category.forecolor.Green()); - forecolor += wxString::Format(wxT("%02X"), category.forecolor.Blue()); + forecolor = "#" ; + forecolor += QString::number(category.forecolor.red(), 16); + forecolor += QString::number(category.forecolor.green(), 16); + forecolor += QString::number(category.forecolor.blue(), 16); - req = wxT("INSERT INTO category ('user', 'parent', 'name', 'backcolor', 'forecolor', 'font', 'fix_cost') VALUES ('") ; - req += user->_id + "'"; - req += ", '" + category.parent + "'"; + req = "INSERT INTO category ('user', 'parent', 'name', 'backcolor', 'forecolor', 'font', 'fix_cost') VALUES ('" ; + req += QString::number(user->_id) + "'"; + req += ", '" + QString::number(category.parent) + "'"; req += ", '" + category.name + "'"; req += ", '" + backcolor + "'"; req += ", '" + forecolor + "'"; @@ -895,37 +910,44 @@ wxString Database::AddCategory(User* user, Category& category) req += ", '0'"; req += ")"; - EXECUTE_SQL_UPDATE(req, wxT("0")); + if (!query.exec(req)) + { + QMessageBox::critical(0, _("Error"), _("Update failed !\n") + req); + std::cerr << __FUNCTION__ << "\n" ; + std::cerr << req.toStdString() << "\n" ; + std::cerr << query.lastError().text().toStdString() << "\n" ; + return 0; + } - return _db.GetLastRowId().ToString(); + return query.lastInsertId().toInt(); } void Database::UpdateCategory(Category& category) { QString req; - wxString backcolor, forecolor; + QString backcolor, forecolor; - backcolor = wxT("#") ; - backcolor += wxString::Format(wxT("%02X"), category.backcolor.Red()); - backcolor += wxString::Format(wxT("%02X"), category.backcolor.Green()); - backcolor += wxString::Format(wxT("%02X"), category.backcolor.Blue()); + backcolor = "#" ; + backcolor += QString::number(category.backcolor.red(), 16); + backcolor += QString::number(category.backcolor.green(), 16); + backcolor += QString::number(category.backcolor.blue(), 16); - forecolor = wxT("#") ; - forecolor += wxString::Format(wxT("%02X"), category.forecolor.Red()); - forecolor += wxString::Format(wxT("%02X"), category.forecolor.Green()); - forecolor += wxString::Format(wxT("%02X"), category.forecolor.Blue()); + forecolor = "#" ; + forecolor += QString::number(category.forecolor.red(), 16); + forecolor += QString::number(category.forecolor.green(), 16); + forecolor += QString::number(category.forecolor.blue(), 16); - req = wxT("UPDATE category SET") ; - req += wxT(" parent='") + category.parent + "'"; - req += wxT(", name='") + category.name + "'"; - req += wxT(", backcolor='") + backcolor + "'"; - req += wxT(", forecolor='") + forecolor + "'"; - req += wxT(", font='") + category.font + "'"; + req = "UPDATE category SET" ; + req += " parent='" + QString::number(category.parent) + "'"; + req += ", name='" + category.name + "'"; + req += ", backcolor='" + backcolor + "'"; + req += ", forecolor='" + forecolor + "'"; + req += ", font='" + category.font + "'"; if (category.fix_cost) - req += wxT(", fix_cost='1'"); + req += ", fix_cost='1'"; else - req += wxT(", fix_cost='0'"); - req += wxT(" WHERE id='") + category.id + "'"; + req += ", fix_cost='0'"; + req += " WHERE id='" + QString::number(category.id) + "'"; EXECUTE_SQL_UPDATE(req, ); } @@ -942,7 +964,8 @@ void Database::DeleteCategory(User* user, Category& category, int replacement) EXECUTE_SQL_UPDATE(req, ); - req = QString("UPDATE operation SET category='%1' WHERE category='%2' AND user='%3'").arg(replacement, category.id, user->_id); + req = QString("UPDATE operation SET category='%1' WHERE category='%2' AND user='%3'") + .arg(QString::number(replacement), QString::number(category.id), QString::number(user->_id)); EXECUTE_SQL_UPDATE(req, ); @@ -954,11 +977,11 @@ void Database::DeleteCategory(User* user, Category& category, int replacement) } } -bool Database::LoadCategory(int id, const std::string& name, Category& category) +bool Database::LoadCategory(int id, const QString& name, Category& category) { QSqlRecord set; QString req; - QSqlQuery query; + QSqlQuery query(_db); bool ret = false ; if (id) @@ -984,7 +1007,7 @@ std::map > Database::GetAllOperations(User* user) { QString req, req2, reqUnion; QSqlRecord set; - QSqlQuery query; + QSqlQuery query(_db); std::vector::iterator it; std::map > res; int year; @@ -992,23 +1015,23 @@ std::map > Database::GetAllOperations(User* user) if (!user->_accounts.empty()) { it = user->_accounts.begin(); - req = "SELECT DISTINCT year FROM account_amount WHERE account IN('" + QString::Number(it->id); + req = "SELECT DISTINCT year FROM account_amount WHERE account IN('" + QString::number(it->id); it++; for (;it != user->_accounts.end(); it++) { - req += "', '" + QString::Number(it->id) ; + req += "', '" + QString::number(it->id) ; } req += "')"; it = user->_accounts.begin(); - req2 = "SELECT DISTINCT year FROM operation WHERE account IN('" + QString::Number(it->id); + req2 = "SELECT DISTINCT year FROM operation WHERE account IN('" + QString::number(it->id); it++; for (;it != user->_accounts.end(); it++) { - req2 += "', '" + QString::Number(it->id) ; + req2 += "', '" + QString::number(it->id) ; } req2 += "')"; - req2 += " OR user='" + QString::Number(user->_id) + "'"; + req2 += " OR user='" + QString::number(user->_id) + "'"; req2 += " ORDER BY year ASC"; reqUnion = req + " UNION " + req2; @@ -1021,25 +1044,25 @@ std::map > Database::GetAllOperations(User* user) year = set.value("year").toInt(); it = user->_accounts.begin(); - req = "SELECT DISTINCT month FROM account_amount WHERE account IN('" + QString::Number(it->id); + req = "SELECT DISTINCT month FROM account_amount WHERE account IN('" + QString::number(it->id); it++; for (;it != user->_accounts.end(); it++) { - req += "', '" + QString::Number(it->id) ; + req += "', '" + QString::number(it->id) ; } req += "')"; - req += " AND year='" + QString::Number(year) + "'"; + req += " AND year='" + QString::number(year) + "'"; it = user->_accounts.begin(); - req2 = "SELECT DISTINCT month FROM operation WHERE (account IN('" + QString::Number(it->id); + req2 = "SELECT DISTINCT month FROM operation WHERE (account IN('" + QString::number(it->id); it++; for (;it != user->_accounts.end(); it++) { - req2 += "', '" + QString::Number(it->id) ; + req2 += "', '" + QString::number(it->id) ; } req2 += "')"; - req2 += " OR user='" + QString::Number(user->_id) + "')"; - req2 += " AND year='" + QString::Number(year) + "'"; + req2 += " OR user='" + QString::number(user->_id) + "')"; + req2 += " AND year='" + QString::number(year) + "'"; req2 += " ORDER BY month ASC"; reqUnion = req + " UNION " + req2; @@ -1066,7 +1089,7 @@ void Database::GenerateMonth(User* user, int monthFrom, int yearFrom, int monthT QString req; QSqlRecord set; double amount; - QSqlQuery query; + QSqlQuery query(_db); if (monthFrom == -1 || yearFrom == -1) { @@ -1074,7 +1097,8 @@ void Database::GenerateMonth(User* user, int monthFrom, int yearFrom, int monthT { req = "INSERT INTO account_amount ('account', 'year', 'month', 'amount') VALUES " ; req += "('%1', '%2', '%3', '%4')"; - req = req.arg(it->id, yearTo, monthTo, 0.0); + req = req.arg(QString::number(it->id), QString::number(yearTo), + QString::number(monthTo), "0.0"); EXECUTE_SQL_UPDATE(req, ); } @@ -1085,7 +1109,7 @@ void Database::GenerateMonth(User* user, int monthFrom, int yearFrom, int monthT { amount = 0.0; req = "SELECT SUM(amount) AS total FROM operation WHERE account='%1' AND year='%2' AND month='%3' AND meta='0'" ; - req = req.arg(it->id, yearFrom, monthFrom); + req = req.arg(QString::number(it->id), QString::number(yearFrom), QString::number(monthFrom)); EXECUTE_SQL_QUERY(req, ); @@ -1098,7 +1122,7 @@ void Database::GenerateMonth(User* user, int monthFrom, int yearFrom, int monthT query.clear(); req = "SELECT amount FROM account_amount WHERE account='%1' AND year='%2' AND month='%3'" ; - req = req.arg(it->id, yearFrom, monthFrom); + req = req.arg(QString::number(it->id), QString::number(yearFrom), QString::number(monthFrom)); EXECUTE_SQL_QUERY(req, ); @@ -1112,13 +1136,13 @@ void Database::GenerateMonth(User* user, int monthFrom, int yearFrom, int monthT req = "INSERT INTO account_amount ('account', 'year', 'month', 'amount') VALUES " ; req += "('%1', '%2', '%3', '%4')"; - req = req.arg(it->id, yearTo, monthTo, DoubleToString(amount)); + req = req.arg(QString::number(it->id), QString::number(yearTo), QString::number(monthTo), DoubleToString(amount)); EXECUTE_SQL_UPDATE(req, ); } } -void Database::ChangePassword(User* user, const std::string& password) +void Database::ChangePassword(User* user, const QString& password) { QString req; @@ -1127,9 +1151,10 @@ void Database::ChangePassword(User* user, const std::string& password) EXECUTE_SQL_UPDATE(req, ); } -bool Database::UserExists(const std::string& name) +bool Database::UserExists(const QString& name) { QSqlRecord set; + QSqlQuery query(_db); QString req; bool res=false; @@ -1147,7 +1172,7 @@ bool Database::UserExists(const std::string& name) return res; } -void Database::ChangeName(User* user, const std::string& name) +void Database::ChangeName(User* user, const QString& name) { QString req; @@ -1156,7 +1181,7 @@ void Database::ChangeName(User* user, const std::string& name) EXECUTE_SQL_UPDATE(req, ); } -void Database::NewUser(const std::string& name) +void Database::NewUser(const QString& name) { QString req; @@ -1183,17 +1208,17 @@ void Database::KillMe(User* user) it = user->_accounts.begin(); if (it->is_owner) - req = wxT("DELETE FROM operation WHERE account IN('") + QString::Number(it->id); + req = "DELETE FROM operation WHERE account IN('" + QString::number(it->id); else - req = wxT("DELETE FROM operation WHERE account IN('-1"); + req = "DELETE FROM operation WHERE account IN('-1"; it++; for (;it != user->_accounts.end(); it++) { if (it->is_owner) - req += "', '" + QString::Number(it->id) ; + req += "', '" + QString::number(it->id) ; } req += "')"; - req += " OR (user='" + QString::Number(user->_id) + "' AND account='')"; + req += " OR (user='" + QString::number(user->_id) + "' AND account='')"; EXECUTE_SQL_UPDATE(req, ); } @@ -1205,31 +1230,31 @@ void Database::KillMe(User* user) EXECUTE_SQL_UPDATE(req, ); } -void Database::UpdatePreference(User* user, const std::string& preference) +void Database::UpdatePreference(User* user, const QString& preference) { QString req; - wxString value = user->_preferences[preference]; - QSqlQuery query; + QString value = user->_preferences[preference]; + QSqlQuery query(_db); - req = QString("UPDATE preference SET name='%1', value='%2' WHERE user='%3'").arg(preference, value, user->_id) ; + req = QString("UPDATE preference SET name='%1', value='%2' WHERE user='%3'").arg(preference, value, QString::number(user->_id)) ; - if (!query.exec(req, _db)) + if (!query.exec(req)) { req = "INSERT INTO preference ('user', 'name', 'value') VALUES ('%1', '%2', '%3')" ; - req = req.arg(user->_id, preference, value); + req = req.arg(QString::number(user->_id), preference, value); EXECUTE_SQL_UPDATE(req, ); } } -std::vector* Search(User* user, std::string* description, QDate* dateFrom, QDate* dateTo, +std::vector* Database::Search(User* user, QString* description, QDate* dateFrom, QDate* dateTo, int* amountFrom, int* amountTo, std::vector categories, int types, std::vector accounts, bool wildcards) { QSqlRecord set; - QSqlQuery query; + QSqlQuery query(_db); QString req; bool firstCond = false; - std::vector::iterator it; + std::vector::iterator it; std::vector::iterator accountIt; std::vector* res = new std::vector; int i; @@ -1240,16 +1265,16 @@ std::vector* Search(User* user, std::string* description, QDate* date if (dateFrom) { - dayFrom = QString::Number(dateFrom->day()-1); - monthFrom = QString::Number(dateFrom->month()); - yearFrom = QString::Number(dateFrom->year()); + dayFrom = QString::number(dateFrom->day()-1); + monthFrom = QString::number(dateFrom->month()); + yearFrom = QString::number(dateFrom->year()); } if (dateTo) { - dayTo = QString::Number(dateTo->day()-1); - monthTo = QString::Number(dateTo->month()); - yearTo = QString::Number(dateTo->year()); + dayTo = QString::number(dateTo->day()-1); + monthTo = QString::number(dateTo->month()); + yearTo = QString::number(dateTo->year()); } req = "SELECT * from operation WHERE "; @@ -1290,13 +1315,13 @@ std::vector* Search(User* user, std::string* description, QDate* date if (amountFrom) { if (firstCond) req += " AND " ; else firstCond = true; - req += "ABS(amount) >= " + QString::Number(*amountFrom); + req += "ABS(amount) >= " + QString::number(*amountFrom); } if (amountTo) { if (firstCond) req += " AND " ; else firstCond = true; - req += "ABS(amount) <= " + QString::Number(*amountTo); + req += "ABS(amount) <= " + QString::number(*amountTo); } if (categories.size()) @@ -1304,34 +1329,34 @@ std::vector* Search(User* user, std::string* description, QDate* date if (firstCond) req += " AND " ; else firstCond = true; req += "category IN ('"; it = categories.begin(); - req += QString::Number(*it); + req += QString::number(*it); it++; for (; it != categories.end(); it++) - req += "', '" + QString::Number(*it) ; + req += "', '" + QString::number(*it) ; req += "')"; } if (types) { - if (((types & FIX_OP) && !(types & NON_FIX_OP)) || - (!(types & FIX_OP) && (types & NON_FIX_OP))) + if (((types & Database::FIX_OP) && !(types & Database::NON_FIX_OP)) || + (!(types & Database::FIX_OP) && (types & Database::NON_FIX_OP))) { if (firstCond) req += " AND " ; else firstCond = true; - if (types & FIX_OP) + if (types & Database::FIX_OP) req += " fix_cost='1'"; else req += " fix_cost='0'"; } - if (((types & CHECKED_OP) && !(types & NOT_CHECKED_OP)) || - (!(types & CHECKED_OP) && (types & NOT_CHECKED_OP))) + if (((types & Database::CHECKED_OP) && !(types & Database::NOT_CHECKED_OP)) || + (!(types & Database::CHECKED_OP) && (types & Database::NOT_CHECKED_OP))) { if (firstCond) req += " AND " ; else firstCond = true; - if (types & CHECKED_OP) + if (types & Database::CHECKED_OP) req += " checked='1'"; else req += " checked='0'"; @@ -1344,11 +1369,11 @@ std::vector* Search(User* user, std::string* description, QDate* date { req += "(account IN ('"; it = accounts.begin(); - req += QString::Number(*it); + req += QString::number(*it); it++; for (; it != accounts.end(); it++) - req += "', '" + QString::Number(*it) ; + req += "', '" + QString::number(*it) ; req += "'))"; // req += wxT(" OR user ='") + user->_id + "')"; @@ -1357,20 +1382,20 @@ std::vector* Search(User* user, std::string* description, QDate* date { req += "(account IN ('"; accountIt = user->_accounts.begin(); - req += accountQString::Number(it->id); + req += QString::number(accountIt->id); accountIt++; for (;accountIt != user->_accounts.end(); accountIt++) { - req += "', '" + accountQString::Number(it->id) ; + req += "', '" + QString::number(accountIt->id) ; } req += "')"; - req += " OR user ='" + QString::Number(user->_id) + "')"; + req += " OR user ='" + QString::number(user->_id) + "')"; } req += " ORDER BY year " ; - req += user->_preferences[wxT("operation_order")] ; - req += ", month " + user->_preferences[wxT("operation_order")] ; - req += ", day " + user->_preferences[wxT("operation_order")] ; + req += user->_preferences["operation_order"] ; + req += ", month " + user->_preferences["operation_order"] ; + req += ", day " + user->_preferences["operation_order"] ; // std::cout << req.mb_str() << "\n"; @@ -1391,12 +1416,12 @@ std::vector* Search(User* user, std::string* description, QDate* date return res; } -void GetStats(User* user, int monthFrom, int yearFrom, int monthTo, +void Database::GetStats(User* user, int monthFrom, int yearFrom, int monthTo, int yearTo, std::map > >* accountAmounts, std::map* categories) { QSqlRecord set; - QSqlQuery query; + QSqlQuery query(_db); QString req, req2; std::vector::iterator accountIt; std::vector::iterator categoryIt; @@ -1407,9 +1432,9 @@ void GetStats(User* user, int monthFrom, int yearFrom, int monthTo, { for (accountIt = user->_accounts.begin(); accountIt != user->_accounts.end(); accountIt++) { - req = "SELECT month, year, amount FROM account_amount WHERE account ='" + QString::Number(accountIt->id) + "'"; - req += " AND (year > '" + QString::Number(yearFrom) + "' OR (year == '" + QString::Number(yearFrom) + "' AND month >= '" + QString::Number(monthFrom) + "'))"; - req += " AND (year < '" + QString::Number(yearTo) + "' OR (year == '" + QString::Number(yearTo) + "' AND month <= '" + QString::Number(monthTo) + "'))"; + req = "SELECT month, year, amount FROM account_amount WHERE account ='" + QString::number(accountIt->id) + "'"; + req += " AND (year > '" + QString::number(yearFrom) + "' OR (year == '" + QString::number(yearFrom) + "' AND month >= '" + QString::number(monthFrom) + "'))"; + req += " AND (year < '" + QString::number(yearTo) + "' OR (year == '" + QString::number(yearTo) + "' AND month <= '" + QString::number(monthTo) + "'))"; EXECUTE_SQL_QUERY(req, ); @@ -1426,19 +1451,19 @@ void GetStats(User* user, int monthFrom, int yearFrom, int monthTo, { for (categoryIt = user->_categories.begin(); categoryIt != user->_categories.end(); categoryIt++) { - req = "SELECT SUM(amount) as amount FROM operation AS o1 WHERE category='" + QString::Number(categoryIt->id) + "'"; + req = "SELECT SUM(amount) as amount FROM operation AS o1 WHERE category='" + QString::number(categoryIt->id) + "'"; accountIt = user->_accounts.begin(); - req += " AND (account IN('" + QString::Number(accountIt->id); + req += " AND (account IN('" + QString::number(accountIt->id); accountIt++; for (;accountIt != user->_accounts.end(); accountIt++) { - req += "', '" + QString::Number(accountIt->id) ; + req += "', '" + QString::number(accountIt->id) ; } req += "')"; - req += " OR user='" + QString::Number(user->_id) + "')"; + req += " OR user='" + QString::number(user->_id) + "')"; - req += " AND (year > '" + QString::Number(yearFrom) + "' OR (year == '" + QString::Number(yearFrom) + "' AND month >= '" + QString::Number(monthFrom) + "'))"; - req += " AND (year < '" + QString::Number(yearTo) + "' OR (year == '" + QString::Number(yearTo) + "' AND month <= '" + QString::Number(monthTo) + "'))"; + req += " AND (year > '" + QString::number(yearFrom) + "' OR (year == '" + QString::number(yearFrom) + "' AND month >= '" + QString::number(monthFrom) + "'))"; + req += " AND (year < '" + QString::number(yearTo) + "' OR (year == '" + QString::number(yearTo) + "' AND month <= '" + QString::number(monthTo) + "'))"; req += " AND meta='0'"; req2 = req + " AND (transfert='' OR transfert IS 0)"; @@ -1471,12 +1496,12 @@ void GetStats(User* user, int monthFrom, int yearFrom, int monthTo, } } -void GetMonthStats(User* user, int month, int year, int nbDays, +void Database::GetMonthStats(User* user, int month, int year, int nbDays, std::map >* operations, std::map* categories) { QSqlRecord set; - QSqlQuery query; + QSqlQuery query(_db); QString req; std::vector::iterator accountIt; int previous_amount, previous_day, cur_day; @@ -1486,7 +1511,7 @@ void GetMonthStats(User* user, int month, int year, int nbDays, for (accountIt = user->_accounts.begin(); accountIt != user->_accounts.end(); accountIt++) { req = "SELECT amount FROM account_amount WHERE account ='%1' AND year='%2' AND month='%3'"; - req = req.arg(accountIt->id, year, month); + req = req.arg(QString::number(accountIt->id), QString::number(year), QString::number(month)); EXECUTE_SQL_QUERY(req, ); @@ -1500,7 +1525,7 @@ void GetMonthStats(User* user, int month, int year, int nbDays, query.clear(); req = "SELECT day, amount FROM operation WHERE account='%1' AND year='%2' AND month='%3' AND meta='0' ORDER BY day ASC"; - req = req.arg(accountIt->id, year, month); + req = req.arg(QString::number(accountIt->id), QString::number(year), QString::number(month)); EXECUTE_SQL_QUERY(req, ); @@ -1538,17 +1563,17 @@ std::map* Database::GetNotChecked(User* user, int month, int year) std::vector::iterator accountIt; std::map* res = new std::map; QSqlRecord set; - QSqlQuery query; + QSqlQuery query(_db); QString req; for (accountIt = user->_accounts.begin() ;accountIt != user->_accounts.end(); accountIt++) { - req = "SELECT SUM(amount) AS amount FROM operation WHERE account='" + QString::Number(accountIt->id) + "'"; + req = "SELECT SUM(amount) AS amount FROM operation WHERE account='" + QString::number(accountIt->id) + "'"; req += " AND checked='0'"; req += " AND meta='0'"; - req += " AND (year < '" + QString::Number(year) + "'" ; - req += " OR (year == '" + QString::Number(year) + "'" ; - req += " AND month < '" + QString::Number(month) + "'" ; + req += " AND (year < '" + QString::number(year) + "'" ; + req += " OR (year == '" + QString::number(year) + "'" ; + req += " AND month < '" + QString::number(month) + "'" ; req += "))"; EXECUTE_SQL_QUERY_WITH_CODE(req, 0, delete res, delete res); @@ -1568,19 +1593,19 @@ std::map* Database::GetNotChecked(User* user, int month, int year) std::map* Database::GetVirtualAmount(User* user, int month, int year) { std::vector::iterator accountIt; - std::map* res = new std::map; + std::map* res = new std::map; QSqlRecord set; - QSqlQuery query; + QSqlQuery query(_db); QString req; for (accountIt = user->_accounts.begin() ;accountIt != user->_accounts.end(); accountIt++) { - req = "SELECT SUM(amount) AS amount FROM operation WHERE account='" + QString::Number(accountIt->id) + "'"; + req = "SELECT SUM(amount) AS amount FROM operation WHERE account='" + QString::number(accountIt->id) + "'"; req += " AND virtual='1'"; req += " AND meta='0'"; - req += " AND (year < '" + QString::Number(year) + "'" ; - req += " OR (year == '" + QString::Number(year) + "'" ; - req += " AND month < '" + QString::Number(month) + "'" ; + req += " AND (year < '" + QString::number(year) + "'" ; + req += " OR (year == '" + QString::number(year) + "'" ; + req += " AND month < '" + QString::number(month) + "'" ; req += "))"; EXECUTE_SQL_QUERY_WITH_CODE(req, 0, delete res, delete res); @@ -1597,11 +1622,11 @@ std::map* Database::GetVirtualAmount(User* user, int month, int yea return res; } -std::map Database::getSharedAccountOwners(int account) +std::map Database::getSharedAccountOwners(int account) { - std::map res; + std::map res; QSqlRecord set, set2; - QSqlQuery query; + QSqlQuery query(_db); QString req; req = QString("SELECT user FROM shared_account WHERE account='%1'").arg(account); @@ -1612,7 +1637,7 @@ std::map Database::getSharedAccountOwners(int account) { set = query.record(); - req = QString("SELECT name FROM user WHERE id='%1'").arg(set.value("user")); + req = QString("SELECT name FROM user WHERE id='%1'").arg(set.value("user").toString()); query.clear(); @@ -1620,16 +1645,16 @@ std::map Database::getSharedAccountOwners(int account) set2 = query.record(); - res[set2.value("name").toString().toStdString()] = set.value("user").toString().toStdString(); + res[set2.value("name").toString()] = set.value("user").toString(); } return res; } -std::string Database::getSharedAccountOwner(int account) +QString Database::getSharedAccountOwner(int account) { QSqlRecord set ; - QSqlQuery query; + QSqlQuery query(_db); QString req; req = QString("SELECT user FROM account WHERE id='%1'").arg(account); @@ -1640,7 +1665,7 @@ std::string Database::getSharedAccountOwner(int account) { set = query.record(); - req = QString("SELECT name FROM user WHERE id='%1'").arg(set.value("user").toInt()); + req = QString("SELECT name FROM user WHERE id='%1'").arg(set.value("user").toString()); query.clear(); @@ -1648,7 +1673,7 @@ std::string Database::getSharedAccountOwner(int account) set = query.record(); - return set.value("name").toString().toStdString(); + return set.value("name").toString(); } return ""; @@ -1656,9 +1681,9 @@ std::string Database::getSharedAccountOwner(int account) void Database::UpdateImportPattern(User* user) { - std::map::iterator it; + std::map::iterator it; QString req, key; - QSqlQuery query; + QSqlQuery query(_db); for (it = user->_importPatterns.begin(); it != user->_importPatterns.end(); @@ -1669,13 +1694,13 @@ void Database::UpdateImportPattern(User* user) key = ImportEngine::RemoveUnused(it->first); req = "UPDATE import_pattern SET pattern='%1', account='%2', category='%3' WHERE description='%4'" ; - req = req.arg(it->second.pattern, it->second.account, it->second.category, key); + req = req.arg(it->second.pattern, QString::number(it->second.account), QString::number(it->second.category), key); - if (!query.exec(req, _db)) + if (!query.exec(req)) { req = "INSERT INTO import_pattern ('user', 'description', 'pattern', 'account', 'category') VALUES " ; req += "('%1', '%2', '%3', '%4', '%5')"; - req = req.arg(user->_id, key, it->second.pattern, it->second.account, it->second.category); + req = req.arg(QString::number(user->_id), key, it->second.pattern, QString::number(it->second.account), QString::number(it->second.category)); EXECUTE_SQL_UPDATE(req, ); } } diff --git a/src/model/Database.hpp b/src/model/Database.hpp index 79b114b..3c8a7a2 100644 --- a/src/model/Database.hpp +++ b/src/model/Database.hpp @@ -85,10 +85,10 @@ public: Database(const char* filename, KissCount* kiss); - std::list GetUsers(); + std::list GetUsers(); bool IsValidUser(const QString& user, const QString& password); - User* LoadUser(const std::string& name); + User* LoadUser(const QString& name); void LoadYear(User* user, int year); void UpdateOperation(User* user, Operation& op, bool checkTransfert=true); @@ -106,25 +106,25 @@ public: int AddAccount(User* user, Account& ac); void UpdateAccount(Account& ac); void DeleteAccount(User* user, Account& ac, int replacement); - void AddSharedAccount(Account& ac, const std::string& granted); - void RemoveSharedAccount(Account& ac, const std::string& granted); + void AddSharedAccount(Account& ac, const QString& granted); + void RemoveSharedAccount(Account& ac, int granted); int AddCategory(User* user, Category& category); void UpdateCategory(Category& category); void DeleteCategory(User* user, Category& category, int replacement); - bool LoadCategory(int id, const std::string& name, Category& category); + bool LoadCategory(int id, const QString& name, Category& category); std::map > GetAllOperations(User* user); void GenerateMonth(User* user, int monthFrom, int yearFrom, int monthTo, int yearTo); - void ChangePassword(User* user, const std::string& password); - bool UserExists(const std::string& name); - void ChangeName(User* user, const std::string& name); - void NewUser(const std::string& name); + void ChangePassword(User* user, const QString& password); + bool UserExists(const QString& name); + void ChangeName(User* user, const QString& name); + void NewUser(const QString& name); - void UpdatePreference(User* user, const std::string& preference); + void UpdatePreference(User* user, const QString& preference); - std::vector* Search(User* user, std::string* description, QDate* dateFrom, QDate* dateTo, + std::vector* Search(User* user, QString* description, QDate* dateFrom, QDate* dateTo, int* amountFrom, int* amountTo, std::vector categories, int types, std::vector accounts, bool wildcards); @@ -138,11 +138,11 @@ public: void KillMe(User* user); bool GetOperation(int id, Operation* op); - std::map getSharedAccountOwners(int account); - int getSharedAccountOwner(int account); + std::map getSharedAccountOwners(int account); + QString getSharedAccountOwner(int account); - std::map* GetNotChecked(User* user, int month, int year); - std::map* GetVirtualAmount(User* user, int month, int year); + std::map* GetNotChecked(User* user, int month, int year); + std::map* GetVirtualAmount(User* user, int month, int year); void UpdateImportPattern(User* user); @@ -150,12 +150,12 @@ public: void CheckDatabaseVersion(); + static QString HashPassword(const QString& password); private: KissCount* _kiss; QSqlDatabase _db; void CreateDatabase(); - QString HashPassword(const QString& password); void LinkOrUnlinkOperation(User* user, Operation& op); }; diff --git a/src/model/Database_Update.cpp b/src/model/Database_Update.cpp index d13ea44..2a1c375 100644 --- a/src/model/Database_Update.cpp +++ b/src/model/Database_Update.cpp @@ -17,56 +17,63 @@ along with KissCount. If not, see . */ +#include +#include +#include +#include +#include +#include +#include + #include "Database.hpp" -#define ON_ERROR(m) \ - wxMessageBox(wxT(m), _("Error"), wxICON_ERROR | wxOK); \ - throw std::string(m); +#define ON_ERROR(m) \ + QMessageBox::critical(0, _("Error"), m); \ + throw m; -typedef void (*update_func)(wxSQLite3Database& _db) ; +typedef void (*update_func)(QSqlDatabase& _db) ; #define UPDATE_TABLE(from, to, step) EXECUTE_SQL_UPDATE_WITH_CODE(req, , throw std::string("Error while upgrading from version " from " to version " to ", step " step);, }); -static void Version_1_to_2(wxSQLite3Database& _db) +static void Version_1_to_2(QSqlDatabase& _db) { - wxString req ; - wxSQLite3ResultSet set; + QString req ; /* Category */ - req = wxT("ALTER TABLE category ADD fix_cost CHAR(1)"); + req = "ALTER TABLE category ADD fix_cost CHAR(1)"; UPDATE_TABLE("1", "2", "1"); - req = wxT("UPDATE category SET fix_cost='0'"); + req = "UPDATE category SET fix_cost='0'"; UPDATE_TABLE("1", "2", "2"); - req = wxT("UPDATE category SET fix_cost='1' WHERE id IN ("); - req += wxT("SELECT MIN(category.id) FROM category, user WHERE category.user = user.id"); - req += wxT(")"); + req = "UPDATE category SET fix_cost='1' WHERE id IN ("; + req += "SELECT MIN(category.id) FROM category, user WHERE category.user = user.id"; + req += ")"; UPDATE_TABLE("1", "2", "3"); /* Account */ - req = wxT("ALTER TABLE account ADD virtual CHAR(1)"); + req = "ALTER TABLE account ADD virtual CHAR(1)"; UPDATE_TABLE("1", "2", "4"); - req = wxT("UPDATE account SET virtual='0'"); + req = "UPDATE account SET virtual='0'"; UPDATE_TABLE("1", "2", "5"); /* Operation */ - req = wxT("ALTER TABLE operation ADD virtual CHAR(1)"); + req = "ALTER TABLE operation ADD virtual CHAR(1)"; UPDATE_TABLE("1", "2", "6"); - req = wxT("UPDATE operation SET virtual='0'"); + req = "UPDATE operation SET virtual='0'"; UPDATE_TABLE("1", "2", "7"); /* Import Pattern */ - req = wxT("CREATE TABLE import_pattern(id INTEGER PRIMARY KEY, user REFERENCES user(id), description VARCHAR(255), pattern VARCHAR(255), account REFERENCES account(id), category REFERENCES category(id))"); + req = "CREATE TABLE import_pattern(id INTEGER PRIMARY KEY, user REFERENCES user(id), description VARCHAR(255), pattern VARCHAR(255), account REFERENCES account(id), category REFERENCES category(id))"; UPDATE_TABLE("1", "2", "8"); } @@ -77,16 +84,21 @@ static update_func updates[] = { void Database::CheckDatabaseVersion() { - wxString req ; - wxSQLite3ResultSet set; + QString req ; + QSqlRecord set ; + QSqlQuery query(_db); long int version; int i; - req = wxT("SELECT db_version FROM kisscount"); + req = "SELECT db_version FROM kisscount"; - EXECUTE_SQL_QUERY_WITH_CODE(req, set, , ON_ERROR("Unable to get database version"), {}); + EXECUTE_SQL_QUERY_WITH_CODE(req, , ON_ERROR("Unable to get database version"), {}); - if (!set.GetAsString(wxT("db_version")).ToLong(&version)) + query.next(); + + set = query.record(); + + if (!(version = set.value("db_version").toInt())) { ON_ERROR("Invalid database version"); } @@ -109,11 +121,11 @@ void Database::CheckDatabaseVersion() } } - wxMessageDialog dialog(0, wxT("You use an old database model. KissCount will try to upgrade it to the lastest version"), wxT("KissCount"), wxICON_INFORMATION | wxOK | wxCANCEL); - if (dialog.ShowModal() == wxID_CANCEL) + if (QMessageBox::question(0, "KissCount", "You use an old database model. KissCount will try to upgrade it to the lastest version") + == QMessageBox::No) throw std::string("can't load this database"); - _db.Begin(); + _db.transaction(); try { @@ -122,7 +134,7 @@ void Database::CheckDatabaseVersion() updates[i](_db); } - req = wxT("UPDATE kisscount SET db_version='") + wxString::Format(wxT("%d"), Database::VERSION) + wxT("'"); + req = "UPDATE kisscount SET db_version='" + QString::number(Database::VERSION) + "'"; EXECUTE_SQL_UPDATE_WITH_CODE(req, , throw std::string("Unable to set new database version"), {}); } @@ -130,14 +142,14 @@ void Database::CheckDatabaseVersion() { std::cout << e << std::endl; - _db.Rollback(); + _db.rollback(); throw e; } - _db.Commit(); + _db.commit(); - wxMessageBox(wxT("Database upgrade successful !"), _("KissCount"), wxICON_INFORMATION | wxOK); + QMessageBox::information(0, "KissCount", "Database upgrade successful !"); } diff --git a/src/model/Operation.hpp b/src/model/Operation.hpp index 4a7fb64..ed9188a 100644 --- a/src/model/Operation.hpp +++ b/src/model/Operation.hpp @@ -21,6 +21,7 @@ #define OPERATION_H #include +#include struct Operation { int id; @@ -29,13 +30,13 @@ struct Operation { unsigned int month; unsigned int year; double amount; - std::string description; + QString description; int category; bool fix_cost; int account; bool checked; int transfert; - std::string formula; + QString formula; bool meta; bool _virtual; std::vector childs; diff --git a/src/model/User.cpp b/src/model/User.cpp index f226323..ae95dec 100644 --- a/src/model/User.cpp +++ b/src/model/User.cpp @@ -18,6 +18,9 @@ */ #include + +#include + #include #include "User.hpp" @@ -59,12 +62,12 @@ Category User::GetCategory(int catId) cat.name = _("Unknown"); cat.font = ""; cat.backcolor = view::OWN_GREEN; - cat.forecolor = wxColour(0x00, 0x00, 0x00); + cat.forecolor = Qt::black; return cat; } -std::string User::GetCategoryName(int catId) +QString User::GetCategoryName(int catId) { Category cat; std::vector::iterator it = std::find(_categories.begin(), _categories.end(), catId); @@ -77,16 +80,16 @@ std::string User::GetCategoryName(int catId) return _("Unknown") ; } -int User::GetCategoryId(const std::string& catName) +int User::GetCategoryId(const QString& catName) { std::vector::iterator it; Category cat; for (it=_categories.begin(); it !=_categories.end(); it++) - if (_(it->name) == catName) + if (_(it->name.toStdString().c_str()) == catName) return it->id; - if ( _db->LoadCategory("", catName, cat)) + if ( _db->LoadCategory(0, catName, cat)) return cat.id; return 0 ; @@ -146,7 +149,7 @@ Account User::GetAccount(int accountId) throw (AccountNotFound) throw AccountNotFound(); } -std::string User::GetAccountName(int accountId) +QString User::GetAccountName(int accountId) { std::vector::iterator it = std::find(_accounts.begin(), _accounts.end(), accountId); @@ -155,7 +158,7 @@ std::string User::GetAccountName(int accountId) return _("Unknown") ; } -int User::GetAccountId(const std::string& accountName) +int User::GetAccountId(const QString& accountName) { std::vector::iterator it; for (it=_accounts.begin(); it !=_accounts.end(); it++) @@ -165,6 +168,16 @@ int User::GetAccountId(const std::string& accountName) return 0 ; } +int User::GetAccountIdFromAccountNumber(const QString& accountNumber) +{ + std::vector::iterator it; + for (it=_accounts.begin(); it !=_accounts.end(); it++) + if (it->number == accountNumber) + return it->id; + + return 0 ; +} + void User::AddAccount(Account& ac) { _accounts.push_back(ac); @@ -201,7 +214,7 @@ int User::GetOperationsNumber(int month, int year) return (*_operations[year])[month].size(); } -std::string User::GetLanguage() +QString User::GetLanguage() { return _preferences["language"]; // long val; @@ -314,7 +327,7 @@ void User::ResolveGroups(int year) for (it = _operations[year]->begin(); it != _operations[year]->end(); it++) { for (i=0; isecond.size(); i++) - if (it->second[i].parent.Length()) + if (it->second[i].parent) Group(((*_operations[year])[it->first])[i]); } } diff --git a/src/model/User.hpp b/src/model/User.hpp index 683cffa..856d5c0 100644 --- a/src/model/User.hpp +++ b/src/model/User.hpp @@ -42,20 +42,20 @@ public: void InvalidateOperations(); int _id; - std::string _name; - std::string _password; + QString _name; + QString _password; std::vector _accounts; std::map >* > _operations; std::vector _categories; std::vector _categoriesFonts; - std::map _preferences; - std::map _importPatterns; + std::map _preferences; + std::map _importPatterns; class AccountNotFound {}; Category GetCategory(int catId); - std::string GetCategoryName(int catId); - int GetCategoryId(const std::string& catName); + QString GetCategoryName(int catId); + int GetCategoryId(const QString& catName); const QFont GetCategoryFont(int catId); void AddCategory(const Category& cat); void UpdateCategory(const Category& cat); @@ -63,8 +63,9 @@ public: Account GetAccount(int accountId) throw (AccountNotFound); - std::string GetAccountName(int accountId); - int GetAccountId(const std::string& accountName); + QString GetAccountName(int accountId); + int GetAccountId(const QString& accountName); + int GetAccountIdFromAccountNumber(const QString& accountNumber); void AddAccount(Account& ac); void UpdateAccount(Account& ac); void DeleteAccount(Account& ac); @@ -74,7 +75,7 @@ public: int GetAccountsNumber(); int GetOperationsNumber(int month, int year); - std::string GetLanguage(); + QString GetLanguage(); void LinkOrUnlinkOperation(Operation& op); diff --git a/src/model/export/ExportEngine.cpp b/src/model/export/ExportEngine.cpp index 2040b04..bd1edd9 100644 --- a/src/model/export/ExportEngine.cpp +++ b/src/model/export/ExportEngine.cpp @@ -27,25 +27,25 @@ ExportEngine::~ExportEngine() { } -bool ExportEngine::HandleFile(const wxString& path, User* user, Database* db, KissCount* kiss) +bool ExportEngine::HandleFile(const QString& path, User* user, Database* db, KissCount* kiss) { _path = path; _user = user; _db = db; _kiss = kiss; - return path.EndsWith(_shortExt) || path.EndsWith(_shortExt.Upper()); + return path.endsWith(_shortExt) || path.endsWith(_shortExt.toUpper()); } bool ExportEngine::SaveFile(std::vector* operations) { int i; - wxString account, category; + int account, category; AccountAmount accountAmount; int minMonth = -1, minYear = -1; unsigned int maxMonth = -1, maxYear = -1; unsigned int month, year; - std::map::iterator it; + std::map::iterator it; if (!operations) return 0; @@ -73,10 +73,10 @@ bool ExportEngine::SaveFile(std::vector* operations) if ((*operations)[i].month > maxMonth && (*operations)[i].year == maxYear) maxMonth = (*operations)[i].month; - if (account.Length() && !_accounts.count(account)) + if (account && !_accounts.count(account)) _accounts[account]++; - if (category.Length() && !_categories.count(category)) + if (category && !_categories.count(category)) _categories[category]++; } @@ -100,8 +100,8 @@ bool ExportEngine::SaveFile(std::vector* operations) return true; } -wxString ExportEngine::GetFileExt() +QString ExportEngine::GetFileExt() { - return wxGetTranslation(_longExt); + return _(_longExt.toStdString().c_str()); } diff --git a/src/model/export/ExportEngine.hpp b/src/model/export/ExportEngine.hpp index 775da0d..7d94e22 100644 --- a/src/model/export/ExportEngine.hpp +++ b/src/model/export/ExportEngine.hpp @@ -33,22 +33,22 @@ public: // Get supported file extension. Example : // "OFX files (*.ofx)|*.ofx" - virtual std::string GetFileExt(); + virtual QString GetFileExt(); // Handle the file - virtual bool HandleFile(const std::string& path, User* user, Database* db, KissCount* kiss)=0; + virtual bool HandleFile(const QString& path, User* user, Database* db, KissCount* kiss)=0; // Save operations (ExportEngin pre fill _accounts, _categories and _accountAmounts) virtual bool SaveFile(std::vector* operations)=0; protected: - std::string _path; + QString _path; Database* _db; User* _user; KissCount* _kiss; - std::string _shortExt; - std::string _longExt; + QString _shortExt; + QString _longExt; std::map _accounts; std::map _categories; diff --git a/src/model/export/XMLExportEngine.cpp b/src/model/export/XMLExportEngine.cpp index 490de6b..9dbb50c 100644 --- a/src/model/export/XMLExportEngine.cpp +++ b/src/model/export/XMLExportEngine.cpp @@ -20,6 +20,8 @@ #include #include +#include + #include "XMLExportEngine.hpp" static XMLExportEngine xmlExportEngine; @@ -28,7 +30,7 @@ XMLExportEngine::XMLExportEngine() { KissCount::RegisterExportEngine(this); - _shortExt = wxT("xml"); + _shortExt = "xml"; _longExt = _("XML files (*.xml)|*.xml"); } @@ -36,7 +38,7 @@ XMLExportEngine::~XMLExportEngine() { } -bool XMLExportEngine::HandleFile(const wxString& path, User* user, Database* db, KissCount* kiss) +bool XMLExportEngine::HandleFile(const QString& path, User* user, Database* db, KissCount* kiss) { return ExportEngine::HandleFile(path, user, db, kiss); } @@ -44,7 +46,7 @@ bool XMLExportEngine::HandleFile(const wxString& path, User* user, Database* db, bool XMLExportEngine::SaveAccounts() { Account account; - std::map::iterator it; + std::map::iterator it; for(it=_accounts.begin(); it!=_accounts.end(); it++) { @@ -54,9 +56,9 @@ bool XMLExportEngine::SaveAccounts() ESCAPE_CHARS(account.number); xmlTextWriterStartElement(_writer, (const xmlChar*) "account"); - xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "id", (const xmlChar*) account.id.utf8_str().data()); - xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "name", (const xmlChar*) account.name.utf8_str().data()); - xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "number", (const xmlChar*) account.number.utf8_str().data()); + xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "id", (const xmlChar*) QString::number(account.id).toStdString().c_str()); + xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "name", (const xmlChar*) account.name.toStdString().c_str()); + xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "number", (const xmlChar*) account.number.toStdString().c_str()); // xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "shared", (const xmlChar*) (account.shared ? "1" : "0")); xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "blocked", (const xmlChar*) (account.blocked ? "1" : "0")); // xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "default", (const xmlChar*) (account._default ? "1" : "0")); @@ -75,7 +77,7 @@ bool XMLExportEngine::SaveAccountAmounts() for(it=_accountAmounts.begin(); it!=_accountAmounts.end(); it++) { xmlTextWriterStartElement(_writer, (const xmlChar*) "account_amount"); - xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "account", (const xmlChar*) it->first.account.utf8_str().data()); + xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "account", (const xmlChar*) QString::number(it->first.account).toStdString().c_str()); xmlTextWriterWriteFormatAttribute(_writer, (const xmlChar*) "month", "%d", it->first.month); xmlTextWriterWriteFormatAttribute(_writer, (const xmlChar*) "year", "%d", it->first.year); xmlTextWriterWriteFormatAttribute(_writer, (const xmlChar*) "amount", "%.2lf", it->second); @@ -88,7 +90,7 @@ bool XMLExportEngine::SaveAccountAmounts() bool XMLExportEngine::SaveCategories() { Category category; - std::map::iterator it; + std::map::iterator it; int rgb; for(it=_categories.begin(); it!=_categories.end(); it++) @@ -98,16 +100,16 @@ bool XMLExportEngine::SaveCategories() ESCAPE_CHARS(category.name); xmlTextWriterStartElement(_writer, (const xmlChar*) "category"); - xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "id", (const xmlChar*) category.id.utf8_str().data()); - xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "name", (const xmlChar*) category.name.utf8_str().data()); - xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "font", (const xmlChar*) category.font.utf8_str().data()); - rgb = category.backcolor.Blue(); - rgb |= category.backcolor.Green() << 8; - rgb |= category.backcolor.Red() << 16; + xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "id", (const xmlChar*) QString::number(category.id).toStdString().c_str()); + xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "name", (const xmlChar*) category.name.toStdString().c_str()); + xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "font", (const xmlChar*) category.font.toStdString().c_str()); + rgb = category.backcolor.blue(); + rgb |= category.backcolor.green() << 8; + rgb |= category.backcolor.red() << 16; xmlTextWriterWriteFormatAttribute(_writer, (const xmlChar*) "backcolor", "0x%08X", rgb); - rgb = category.forecolor.Blue(); - rgb |= category.forecolor.Green() << 8; - rgb |= category.forecolor.Red() << 16; + rgb = category.forecolor.blue(); + rgb |= category.forecolor.green() << 8; + rgb |= category.forecolor.red() << 16; xmlTextWriterWriteFormatAttribute(_writer, (const xmlChar*) "forecolor", "0x%08X", rgb); xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "fix_cost", (const xmlChar*) (category.fix_cost ? "1" : "0")); xmlTextWriterEndElement(_writer); @@ -125,19 +127,19 @@ bool XMLExportEngine::SaveOperations(std::vector* operations) ESCAPE_CHARS(it->description); xmlTextWriterStartElement(_writer, (const xmlChar*) "operation"); - xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "id", (const xmlChar*) it->id.utf8_str().data()); - xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "parent", (const xmlChar*) it->parent.utf8_str().data()); + xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "id", (const xmlChar*) QString::number(it->id).toStdString().c_str()); + xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "parent", (const xmlChar*) QString::number(it->parent).toStdString().c_str()); xmlTextWriterWriteFormatAttribute(_writer, (const xmlChar*) "day", "%d", it->day); xmlTextWriterWriteFormatAttribute(_writer, (const xmlChar*) "month", "%d", it->month); xmlTextWriterWriteFormatAttribute(_writer, (const xmlChar*) "year", "%d", it->year); xmlTextWriterWriteFormatAttribute(_writer, (const xmlChar*) "amount", "%.2lf", it->amount); - xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "description", (const xmlChar*) it->description.utf8_str().data()); - xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "category", (const xmlChar*) it->category.utf8_str().data()); + xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "description", (const xmlChar*) it->description.toStdString().c_str()); + xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "category", (const xmlChar*) QString::number(it->category).toStdString().c_str()); xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "fix_cost", (const xmlChar*) (it->fix_cost ? "1" : "0")); - xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "account", (const xmlChar*) it->account.utf8_str().data()); + xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "account", (const xmlChar*) QString::number(it->account).toStdString().c_str()); xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "checked", (const xmlChar*) (it->checked ? "1" : "0")); - xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "transfert", (const xmlChar*) it->transfert.utf8_str().data()); - xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "formula", (const xmlChar*) it->formula.utf8_str().data()); + xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "transfert", (const xmlChar*) QString::number(it->transfert).toStdString().c_str()); + xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "formula", (const xmlChar*) it->formula.toStdString().c_str()); xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "meta", (const xmlChar*) (it->meta ? "1" : "0")); xmlTextWriterWriteAttribute(_writer, (const xmlChar*) "virtual", (const xmlChar*) (it->_virtual ? "1" : "0")); xmlTextWriterEndElement(_writer); @@ -154,7 +156,7 @@ bool XMLExportEngine::SaveFile(std::vector* operations) if (!rc) return false; - _writer = xmlNewTextWriterFilename(_path.mb_str(), 0); + _writer = xmlNewTextWriterFilename(_path.toStdString().c_str(), 0); if (!_writer) { diff --git a/src/model/export/XMLExportEngine.hpp b/src/model/export/XMLExportEngine.hpp index 50d3313..b767286 100644 --- a/src/model/export/XMLExportEngine.hpp +++ b/src/model/export/XMLExportEngine.hpp @@ -29,7 +29,7 @@ public: XMLExportEngine(); ~XMLExportEngine(); - bool HandleFile(const wxString& path, User* user, Database* db, KissCount* kiss); + bool HandleFile(const QString& path, User* user, Database* db, KissCount* kiss); bool SaveFile(std::vector* operations); private: diff --git a/src/model/import/GrisbiImportEngine.cpp b/src/model/import/GrisbiImportEngine.cpp index 4c03e3c..faf2878 100644 --- a/src/model/import/GrisbiImportEngine.cpp +++ b/src/model/import/GrisbiImportEngine.cpp @@ -16,6 +16,7 @@ You should have received a copy of the GNU General Public License along with KissCount. If not, see . */ +#include #include "GrisbiImportEngine.hpp" @@ -25,23 +26,23 @@ static GrisbiImportEngine grisbiImportEngine; void GrisbiImportEngine::LoadAccount(GrisbiImportEngine* _this, const char** attrs) { - int i; - wxString account_number, name, id, key; + int i, id; + QString account_number, name, key; Account ac; for (i=0; attrs[i]; i+=2) { if (!strcmp(attrs[i], "Name")) - name = wxString(attrs[i+1], wxConvUTF8); + name = attrs[i+1]; else if (!strcmp(attrs[i], "Number")) - id = wxString(attrs[i+1], wxConvUTF8); + id = QString(attrs[i+1]).toInt(); else if (!strcmp(attrs[i], "Bank_account_number")) - account_number = wxString(attrs[i+1], wxConvUTF8); + account_number = attrs[i+1]; else if (!strcmp(attrs[i], "Key")) - key = wxString(attrs[i+1], wxConvUTF8); + key = attrs[i+1]; } account_number += key; @@ -58,7 +59,7 @@ void GrisbiImportEngine::LoadAccount(GrisbiImportEngine* _this, const char** att } } - _this->_accounts[id] = wxT("unknown-") + account_number; + _this->_accounts[id] = 0; ac.number = account_number; ac.name = name; ac.shared = false; @@ -71,17 +72,17 @@ void GrisbiImportEngine::LoadAccount(GrisbiImportEngine* _this, const char** att void GrisbiImportEngine::LoadCategory(GrisbiImportEngine* _this, const char** attrs) { - wxString name, id; - int i; + QString name; + int i, id; Category cat; for (i=0; attrs[i]; i+=2) { if (!strcmp(attrs[i], "Na")) - name = wxString(attrs[i+1], wxConvUTF8); + name = attrs[i+1]; else if (!strcmp(attrs[i], "Nb")) - id = wxString(attrs[i+1], wxConvUTF8); + id = QString(attrs[i+1]).toInt(); } UNESCAPE_CHARS(name); @@ -95,12 +96,12 @@ void GrisbiImportEngine::LoadCategory(GrisbiImportEngine* _this, const char** at } } - _this->_categories[id] = wxT("unknown-") + name; + _this->_categories[id] = 0; cat.id = id; cat.name = name; - cat.parent = wxT("0"); + cat.parent = 0; cat.backcolor = view::OWN_GREEN ; - cat.forecolor = *wxBLACK; + cat.forecolor = Qt::black; cat.fix_cost = false; _this->_unresolvedCategories.push_back(cat); } @@ -110,44 +111,42 @@ void GrisbiImportEngine::LoadOperation(GrisbiImportEngine* _this, const char** a int i; static int id=0; Operation op; - wxString amount; - wxDateTime date; + QDate date; - op.id = wxString::Format(wxT("%d"), ++id); - op.parent = wxT(""); - op.account = wxT("unknwon-0"); - op.category = wxT("unknwon-0"); + op.id = ++id; + op.parent = 0; + op.account = 0; + op.category = 0; op.fix_cost = false; op.checked = false; - op.transfert = wxT(""); - op.formula = wxT(""); + op.transfert = 0; + op.formula = ""; op.meta = false; op._virtual = false; for (i=0; attrs[i]; i+=2) { if (!strcmp(attrs[i], "Ac")) - op.account = _this->_accounts[wxString(attrs[i+1], wxConvUTF8)]; + op.account = _this->_accounts[QString(attrs[i+1]).toInt()]; else if (!strcmp(attrs[i], "Dt")) { - date.ParseFormat(wxString(attrs[i+1], wxConvUTF8), wxT("%m/%d/%Y")); - op.day = date.GetDay(); - op.month = date.GetMonth(); - op.year = date.GetYear(); + date.fromString(attrs[i+1], "MM/%dd/%yyyy"); + op.day = date.day(); + op.month = date.month(); + op.year = date.year(); } else if (!strcmp(attrs[i], "Am")) { - amount = wxString(attrs[i+1], wxConvUTF8); - amount.ToDouble(&op.amount); + op.amount = QString(attrs[i+1]).toDouble(); } else if (!strcmp(attrs[i], "Ca")) - op.category = _this->_categories[wxString(attrs[i+1], wxConvUTF8)]; + op.category = _this->_categories[QString(attrs[i+1]).toInt()]; else if (!strcmp(attrs[i], "No")) - op.description = wxString(attrs[i+1], wxConvUTF8); + op.description = attrs[i+1]; } UNESCAPE_CHARS(op.description); @@ -199,7 +198,7 @@ GrisbiImportEngine::GrisbiImportEngine() { KissCount::RegisterImportEngine(this); - _shortExt = wxT("gsb"); + _shortExt = "gsb"; _longExt = _("Grisbi files (*.gsb)|*.gsb"); _sax.startElement = GrisbiStartElement ; @@ -209,7 +208,7 @@ GrisbiImportEngine::~GrisbiImportEngine() { } -bool GrisbiImportEngine::HandleFile(const wxString& path, User* user, Database* db, KissCount* kiss) +bool GrisbiImportEngine::HandleFile(const QString& path, User* user, Database* db, KissCount* kiss) { int res = -1; @@ -217,7 +216,7 @@ bool GrisbiImportEngine::HandleFile(const wxString& path, User* user, Database* try { - res = xmlSAXUserParseFile(&_sax, this, path.mb_str()); + res = xmlSAXUserParseFile(&_sax, this, path.toStdString().c_str()); } catch (const char* s) { diff --git a/src/model/import/GrisbiImportEngine.hpp b/src/model/import/GrisbiImportEngine.hpp index ea8d6ed..9b61eae 100644 --- a/src/model/import/GrisbiImportEngine.hpp +++ b/src/model/import/GrisbiImportEngine.hpp @@ -29,7 +29,7 @@ public: GrisbiImportEngine(); ~GrisbiImportEngine(); - virtual bool HandleFile(const wxString& path, User* user, Database* db, KissCount* kiss); + virtual bool HandleFile(const QString& path, User* user, Database* db, KissCount* kiss); private: xmlSAXHandler _sax; diff --git a/src/model/import/ImportEngine.cpp b/src/model/import/ImportEngine.cpp index 41638fc..dc2db01 100644 --- a/src/model/import/ImportEngine.cpp +++ b/src/model/import/ImportEngine.cpp @@ -21,7 +21,7 @@ #include "ImportEngine.hpp" -wxString ImportEngine::NULL_IMPORT_PATTERN = wxT("(nil)"); +QString ImportEngine::NULL_IMPORT_PATTERN = "(nil)"; ImportEngine::ImportEngine() { @@ -31,7 +31,7 @@ ImportEngine::~ImportEngine() { } -bool ImportEngine::HandleFile(const wxString& path, User* user, Database* db, KissCount* kiss) +bool ImportEngine::HandleFile(const QString& path, User* user, Database* db, KissCount* kiss) { _path = path; _user = user; @@ -44,39 +44,39 @@ bool ImportEngine::HandleFile(const wxString& path, User* user, Database* db, Ki _descriptions.clear(); _accountAmounts.clear(); - return path.EndsWith(_shortExt) || path.EndsWith(_shortExt.Upper()); + return path.endsWith(_shortExt) || path.endsWith(_shortExt.toUpper()); } -wxString ImportEngine::GetFileExt() +QString ImportEngine::GetFileExt() { - return wxGetTranslation(_longExt); + return _(_longExt.toStdString().c_str()); } -std::vector ExplodeString(wxString& s) +std::vector ExplodeString(QString& s) { - wxString tmp = s, cur = wxT(""); - std::vector res; + QString tmp = s, cur = ""; + std::vector res; - while (tmp.Len()) + while (tmp.size()) { - if (tmp.StartsWith(wxT(" ")) || - tmp.StartsWith(wxT("\t")) || - tmp.StartsWith(wxT("\n")) || - tmp.StartsWith(wxT("\r"))) + if (tmp.startsWith(" " ) || + tmp.startsWith("\t") || + tmp.startsWith("\n") || + tmp.startsWith("\r")) { - if (cur.Len()) + if (cur.size()) { res.push_back(cur); - cur = wxT(""); + cur = ""; } - tmp = tmp.Mid(1); + tmp = tmp.right(tmp.size()-1); continue; } - cur += tmp.SubString(0, 0); - tmp = tmp.Mid(1); + cur += tmp.left(1); + tmp = tmp.right(tmp.size()-1); } - if (cur.Len()) + if (cur.size()) res.push_back(cur); return res; @@ -88,30 +88,31 @@ std::vector ExplodeString(wxString& s) - tail spaces - every word starting by a number */ -wxString ImportEngine::RemoveUnused(const wxString& s) +QString ImportEngine::RemoveUnused(const QString& s) { - wxString tmp = s, tmp2; - wxString res; + QString tmp = s, tmp2; + QString res; + bool number; - tmp = tmp.Trim(true); - tmp = tmp.Trim(false); + tmp = tmp.trimmed(); - while (tmp.Len()) + while (tmp.size()) { - tmp2 = tmp.SubString(0, 0); - if (tmp2.IsNumber()) + tmp2 = tmp.left(1); + tmp2.toInt(&number); + if (number) { do { - tmp = tmp.Mid(1); - tmp2 = tmp.SubString(0, 0); - } while (tmp.Len() && tmp2 != wxT(" ") && - tmp2 != wxT("\t") && - tmp2 != wxT("\r") && - tmp2 != wxT("\n")); + tmp = tmp.right(tmp.size()-1); + tmp2 = tmp.left(1); + } while (tmp.size() && tmp2 != " " && + tmp2 != "\t" && + tmp2 != "\r" && + tmp2 != "\n"); } res += tmp2; - tmp = tmp.Mid(1); + tmp = tmp.right(tmp.size()-1); } return res; @@ -125,12 +126,12 @@ wxString ImportEngine::RemoveUnused(const wxString& s) %wX : word orig[X] other : constants */ -wxString ImportEngine::FindPattern(wxString& orig, wxString& dest) +QString ImportEngine::FindPattern(QString& orig, QString& dest) { - wxString pattern, cur_pat; + QString pattern, cur_pat; int i, a; - std::vector tok1; - std::vector tok2; + std::vector tok1; + std::vector tok2; int size1, size2; if (orig == dest) return NULL_IMPORT_PATTERN; @@ -142,49 +143,49 @@ wxString ImportEngine::FindPattern(wxString& orig, wxString& dest) for(i=0; i tok1; - std::vector tok2; + std::vector tok1; + std::vector tok2; int size1, i; long pos; @@ -197,38 +198,38 @@ void ImportEngine::ApplyPattern(ImportPattern& pattern, Operation& op) tok2 = ExplodeString(op.description); size1 = tok1.size(); - op.description = wxT(""); + op.description = ""; for(i=0; i& accounts, std::vector* ImportEngine::GetOperations(std::map& accounts, std::map& categories) +std::vector* ImportEngine::GetOperations(std::map& accounts, std::map& categories) { int i; for(i=0; i<(int)_operations.size(); i++) { - if (_operations[i].account.StartsWith(wxT("unknown-"))) - _operations[i].account = accounts[_operations[i].account.Mid(8)]; - if (_operations[i].category.StartsWith(wxT("unknown-"))) - _operations[i].category = categories[_operations[i].category.Mid(8)]; + if (_operations[i].account < 0) + _operations[i].account = accounts[_operations[i].account]; + if (_operations[i].category < 0) + _operations[i].category = categories[_operations[i].category]; } - if (_kiss->GetOperationOrder() == wxT("ASC")) + if (_kiss->GetOperationOrder() == "ASC") std::sort(_operations.begin(), _operations.end(), sortOperations); else std::sort(_operations.begin(), _operations.end(), reverseSortOperations); diff --git a/src/model/import/ImportEngine.hpp b/src/model/import/ImportEngine.hpp index cc4ef6d..2b09a24 100644 --- a/src/model/import/ImportEngine.hpp +++ b/src/model/import/ImportEngine.hpp @@ -28,24 +28,24 @@ class KissCount; class ImportPattern { public: - std::string pattern; + QString pattern; int account; int category; } ; class ImportEngine { public: - static std::string NULL_IMPORT_PATTERN; + static QString NULL_IMPORT_PATTERN; ImportEngine(); ~ImportEngine(); // Get supported file extension. Example : // "OFX files (*.ofx)|*.ofx" - virtual std::string GetFileExt(); + virtual QString GetFileExt(); // Handle the file - virtual bool HandleFile(const std::string& path, User* user, Database* db, KissCount* kiss)=0; + virtual bool HandleFile(const QString& path, User* user, Database* db, KissCount* kiss)=0; // Parse the file and return accounts that doesn't match virtual void ParseFile(std::vector& accounts, std::vector& categories); @@ -55,30 +55,30 @@ public: const std::map& GetAccountAmounts(); - void MatchPattern(std::string& key, Operation& op); + void MatchPattern(QString& key, Operation& op); int UpdatePattern(int pos); - static std::string RemoveUnused(const std::string& s); + static QString RemoveUnused(const QString& s); protected: Database* _db; User* _user; - std::string _path; + QString _path; KissCount* _kiss; - std::string _shortExt; - std::string _longExt; + QString _shortExt; + QString _longExt; std::map _accounts; std::map _categories; std::vector _unresolvedAccounts; std::vector _unresolvedCategories; std::vector _operations; - std::map _descriptions; + std::map _descriptions; std::map _accountAmounts; void ApplyPattern(ImportPattern& pattern, Operation& op); - std::string FindPattern(std::string& s1, std::string& s2); + QString FindPattern(QString& s1, QString& s2); }; #endif diff --git a/src/model/import/OFXImportEngine.cpp b/src/model/import/OFXImportEngine.cpp index 185654c..0122ee5 100644 --- a/src/model/import/OFXImportEngine.cpp +++ b/src/model/import/OFXImportEngine.cpp @@ -16,6 +16,7 @@ You should have received a copy of the GNU General Public License along with KissCount. If not, see . */ +#include "../Database.hpp" #include "OFXImportEngine.hpp" @@ -23,20 +24,23 @@ static OFXImportEngine ofxImportEngine; int OFXImportEngine::account_cb(const struct OfxAccountData data, void * account_data) { - int i; + int i, id; OFXImportEngine* _this = (OFXImportEngine*) account_data; - wxString account_number = wxString(data.account_number, wxConvUTF8); + QString account_number = QString(data.account_number); Account ac; + static int unknownAccount = 0; - _this->_curAccount = wxT(""); + _this->_curAccount = 0; UNESCAPE_CHARS(account_number); + id = Database::HashPassword(data.account_id).toInt(0, 16); + for (i=0; i<(int)_this->_user->_accounts.size(); i++) { if (_this->_user->_accounts[i].number == account_number) { - _this->_accounts[account_number] = _this->_user->_accounts[i].id; + _this->_accounts[id] = _this->_user->_accounts[i].id; _this->_curAccount = _this->_user->_accounts[i].id; // std::cout << "Account " << data.account_number << " is " << i << std::endl; //_this->_unresolvedAccounts.push_back(account_number); @@ -44,9 +48,9 @@ int OFXImportEngine::account_cb(const struct OfxAccountData data, void * account } } - if (!_this->_curAccount.Len()) + if (!_this->_curAccount) { - _this->_curAccount = _this->_accounts[account_number] = wxT("unknown-") + account_number; + _this->_curAccount = _this->_accounts[id] = --unknownAccount; ac.number = account_number; ac.shared = false; ac.blocked = false; @@ -69,14 +73,14 @@ int OFXImportEngine::transaction_cb(const struct OfxTransactionData data, void * if (!data.amount_valid || (!data.date_posted_valid && !data.date_initiated_valid)) return 1; - op.id = wxString::Format(wxT("%d"), ++id); - op.parent = wxT(""); - op.category = wxT("0"); + op.id = ++id; + op.parent = 0; + op.category = 0; op.fix_cost = false; op.account = _this->_curAccount; op.checked = false; - op.transfert = wxT(""); - op.formula = wxT(""); + op.transfert = 0; + op.formula = ""; op.meta = false; op._virtual = false; @@ -92,13 +96,13 @@ int OFXImportEngine::transaction_cb(const struct OfxTransactionData data, void * op.year = t.tm_year+1900; if (data.name_valid) - op.description = wxString(data.name, wxConvUTF8); + op.description = data.name; if (data.memo_valid) { - if (op.description.Len()) - op.description += wxT(" "); - op.description += wxString(data.memo, wxConvUTF8); + if (op.description.size()) + op.description += " "; + op.description += data.memo; } UNESCAPE_CHARS(op.description); @@ -131,7 +135,7 @@ OFXImportEngine::OFXImportEngine() ofx_set_transaction_cb(_ctx, transaction_cb, this); ofx_set_statement_cb(_ctx, account_balance_cb, this); - _shortExt = wxT("ofx"); + _shortExt = "ofx"; _longExt = _("OFX files (*.ofx)|*.ofx"); } @@ -141,9 +145,9 @@ OFXImportEngine::~OFXImportEngine() libofx_free_context(_ctx); } -bool OFXImportEngine::HandleFile(const wxString& path, User* user, Database* db, KissCount* kiss) +bool OFXImportEngine::HandleFile(const QString& path, User* user, Database* db, KissCount* kiss) { if (!ImportEngine::HandleFile(path, user, db, kiss)) return false; - return !libofx_proc_file(_ctx, path.mb_str(), AUTODETECT); + return !libofx_proc_file(_ctx, path.toStdString().c_str(), AUTODETECT); } diff --git a/src/model/import/OFXImportEngine.hpp b/src/model/import/OFXImportEngine.hpp index 18dc170..61029eb 100644 --- a/src/model/import/OFXImportEngine.hpp +++ b/src/model/import/OFXImportEngine.hpp @@ -28,13 +28,13 @@ public: OFXImportEngine(); ~OFXImportEngine(); - virtual bool HandleFile(const wxString& path, User* user, Database* db, KissCount* kiss); + virtual bool HandleFile(const QString& path, User* user, Database* db, KissCount* kiss); /* virtual std::vector ParseFile(); */ /* virtual std::vector* GetOperations(std::map& accounts); */ private: LibofxContextPtr _ctx; - wxString _curAccount; + int _curAccount; static int account_cb(const struct OfxAccountData data, void * account_data); static int transaction_cb(const struct OfxTransactionData data, void * transaction_data); diff --git a/src/model/import/XMLImportEngine.cpp b/src/model/import/XMLImportEngine.cpp index 412fa87..776ebcd 100644 --- a/src/model/import/XMLImportEngine.cpp +++ b/src/model/import/XMLImportEngine.cpp @@ -17,32 +17,36 @@ along with KissCount. If not, see . */ +#include + #include "XMLImportEngine.hpp" static XMLImportEngine xmlImportEngine; void XMLImportEngine::LoadAccount(XMLImportEngine* _this, const char** attrs) { - int i; - wxString account_number, name, id; + int i, id; + QString account_number, name; Account ac; + static int unknownAccount = 0; + ac.id = 0; for (i=0; attrs[i]; i+=2) { if (!strcmp(attrs[i], "name")) - ac.name = wxString(attrs[i+1], wxConvUTF8); + ac.name = attrs[i+1]; else if (!strcmp(attrs[i], "id")) - ac.id = id = wxString(attrs[i+1], wxConvUTF8); + ac.id = id = QString(attrs[i+1]).toInt(); else if (!strcmp(attrs[i], "number")) - ac.number = account_number = wxString(attrs[i+1], wxConvUTF8); + ac.number = account_number = attrs[i+1]; else if (!strcmp(attrs[i], "blocked")) - ac.blocked = (wxString(attrs[i+1], wxConvUTF8) == wxT("1")); + ac.blocked = (QString(attrs[i+1]) == "1"); else if (!strcmp(attrs[i], "virtual")) - ac._virtual = (wxString(attrs[i+1], wxConvUTF8) == wxT("1")); + ac._virtual = (QString(attrs[i+1]) == "1"); } UNESCAPE_CHARS(ac.name); @@ -52,11 +56,10 @@ void XMLImportEngine::LoadAccount(XMLImportEngine* _this, const char** attrs) ac.shared = false; ac.is_owner = true; - if (account_number.Length()) + if (account_number.size()) { try { - Account ac = _this->_user->GetAccount(account_number); - _this->_accounts[id] = ac.id; + _this->_accounts[ac.id] = _this->_user->GetAccountIdFromAccountNumber(account_number); return; } catch (User::AccountNotFound) @@ -64,7 +67,7 @@ void XMLImportEngine::LoadAccount(XMLImportEngine* _this, const char** attrs) } } - _this->_accounts[id] = wxT("unknown-") + account_number; + _this->_accounts[id] = --unknownAccount; _this->_unresolvedAccounts.push_back(ac); } @@ -72,28 +75,25 @@ void XMLImportEngine::LoadAccountAmount(XMLImportEngine* _this, const char** att { AccountAmount accountAmount; int i; - long v; double amount; for (i=0; attrs[i]; i+=2) { if (!strcmp(attrs[i], "account")) - accountAmount.account = wxString(attrs[i+1], wxConvUTF8); + accountAmount.account = QString(attrs[i+1]).toInt(); else if (!strcmp(attrs[i], "month")) { - wxString(attrs[i+1], wxConvUTF8).ToLong(&v); - accountAmount.month = v; + accountAmount.month = QString(attrs[i+1]).toInt(); } else if (!strcmp(attrs[i], "year")) { - wxString(attrs[i+1], wxConvUTF8).ToLong(&v); - accountAmount.year = v; + accountAmount.year = QString(attrs[i+1]).toInt(); } else if (!strcmp(attrs[i], "amount")) - wxString(attrs[i+1], wxConvUTF8).ToDouble(&amount); + amount = QString(attrs[i+1]).toDouble(); } _this->_accountAmounts[accountAmount] = amount; @@ -101,49 +101,50 @@ void XMLImportEngine::LoadAccountAmount(XMLImportEngine* _this, const char** att void XMLImportEngine::LoadCategory(XMLImportEngine* _this, const char** attrs) { - wxString name, id; - int i; + QString name; + int i, id; long rgb; Category cat; + static int unknownCategory = 0; for (i=0; attrs[i]; i+=2) { if (!strcmp(attrs[i], "name")) - cat.name = name = wxString(attrs[i+1], wxConvUTF8); + cat.name = name = QString(attrs[i+1]); else if (!strcmp(attrs[i], "id")) - cat.id = id = wxString(attrs[i+1], wxConvUTF8); + cat.id = id = QString(attrs[i+1]).toInt(); else if (!strcmp(attrs[i], "font")) - cat.font = wxString(attrs[i+1], wxConvUTF8); + cat.font = QString(attrs[i+1]); else if (!strcmp(attrs[i], "backcolor")) { - wxString(attrs[i+1], wxConvUTF8).ToLong(&rgb, 16); - cat.backcolor = wxColour((rgb >> 16) & 0xFF, (rgb >> 8) & 0xFF, rgb & 0xFF); + rgb = QString(attrs[i+1]).toInt(0, 16); + cat.backcolor = QColor((rgb >> 16) & 0xFF, (rgb >> 8) & 0xFF, rgb & 0xFF); } else if (!strcmp(attrs[i], "forecolor")) { - wxString(attrs[i+1], wxConvUTF8).ToLong(&rgb, 16); - cat.forecolor = wxColour((rgb >> 16) & 0xFF, (rgb >> 8) & 0xFF, rgb & 0xFF); + rgb = QString(attrs[i+1]).toInt(0, 16); + cat.forecolor = QColor((rgb >> 16) & 0xFF, (rgb >> 8) & 0xFF, rgb & 0xFF); } else if (!strcmp(attrs[i], "fix_cost")) - cat.fix_cost = (wxString(attrs[i+1], wxConvUTF8) == wxT("1")); + cat.fix_cost = (QString(attrs[i+1]) == "1"); } UNESCAPE_CHARS(cat.name); - wxString catId = _this->_user->GetCategoryId(name); + int catId = _this->_user->GetCategoryId(name); - if (catId != wxT("0")) + if (catId) { _this->_categories[id] = catId; return; } - _this->_categories[id] = wxT("unknown-") + name; + _this->_categories[id] = --unknownCategory; _this->_unresolvedCategories.push_back(cat); } @@ -151,68 +152,61 @@ void XMLImportEngine::LoadOperation(XMLImportEngine* _this, const char** attrs) { int i; Operation op; - long v; - double amount; - wxString id; for (i=0; attrs[i]; i+=2) { if (!strcmp(attrs[i], "id")) - op.id = wxString(attrs[i+1], wxConvUTF8); + op.id = QString(attrs[i+1]).toInt(); else if (!strcmp(attrs[i], "parent")) - op.parent = wxString(attrs[i+1], wxConvUTF8); + op.parent = QString(attrs[i+1]).toInt(); else if (!strcmp(attrs[i], "day")) { - wxString(attrs[i+1], wxConvUTF8).ToLong(&v); - op.day = v; + op.day = QString(attrs[i+1]).toInt(); } else if (!strcmp(attrs[i], "month")) { - wxString(attrs[i+1], wxConvUTF8).ToLong(&v); - op.month = v; + op.month = QString(attrs[i+1]).toInt(); } else if (!strcmp(attrs[i], "year")) { - wxString(attrs[i+1], wxConvUTF8).ToLong(&v); - op.year = v; + op.year = QString(attrs[i+1]).toInt(); } else if (!strcmp(attrs[i], "amount")) { - wxString(attrs[i+1], wxConvUTF8).ToDouble(&amount); - op.amount = amount; + op.amount = QString(attrs[i+1]).toDouble(); } else if (!strcmp(attrs[i], "description")) - op.description = wxString(attrs[i+1], wxConvUTF8); + op.description = QString(attrs[i+1]); else if (!strcmp(attrs[i], "category")) - op.category = _this->_categories[wxString(attrs[i+1], wxConvUTF8)]; + op.category = _this->_categories[QString(attrs[i+1]).toInt()]; else if (!strcmp(attrs[i], "fix_cost")) - op.fix_cost = (wxString(attrs[i+1], wxConvUTF8) == wxT("1")); + op.fix_cost = (QString(attrs[i+1]) == "1"); else if (!strcmp(attrs[i], "account")) - op.account = _this->_accounts[wxString(attrs[i+1], wxConvUTF8)]; + op.account = _this->_accounts[QString(attrs[i+1]).toInt()]; else if (!strcmp(attrs[i], "checked")) - op.checked = (wxString(attrs[i+1], wxConvUTF8) == wxT("1")); + op.checked = (QString(attrs[i+1]) == "1"); else if (!strcmp(attrs[i], "transfert")) - op.transfert = wxString(attrs[i+1], wxConvUTF8); + op.transfert = QString(attrs[i+1]).toInt(); else if (!strcmp(attrs[i], "formula")) - op.formula = wxString(attrs[i+1], wxConvUTF8); + op.formula = QString(attrs[i+1]); else if (!strcmp(attrs[i], "meta")) - op.meta = (wxString(attrs[i+1], wxConvUTF8) == wxT("1")); + op.meta = (QString(attrs[i+1]) == "1"); else if (!strcmp(attrs[i], "virtual")) - op._virtual = (wxString(attrs[i+1], wxConvUTF8) == wxT("1")); + op._virtual = (QString(attrs[i+1]) == "1"); } UNESCAPE_CHARS(op.description); @@ -263,7 +257,7 @@ XMLImportEngine::XMLImportEngine() { KissCount::RegisterImportEngine(this); - _shortExt = wxT("xml"); + _shortExt = "xml"; _longExt = _("KissCount xml files (*.xml)|*.xml"); _sax.startElement = XmlStartElement ; @@ -273,7 +267,7 @@ XMLImportEngine::~XMLImportEngine() { } -bool XMLImportEngine::HandleFile(const wxString& path, User* user, Database* db, KissCount* kiss) +bool XMLImportEngine::HandleFile(const QString& path, User* user, Database* db, KissCount* kiss) { int res = -1 ; @@ -281,7 +275,7 @@ bool XMLImportEngine::HandleFile(const wxString& path, User* user, Database* db, try { - res = xmlSAXUserParseFile(&_sax, this, path.mb_str()) >= 0; + res = xmlSAXUserParseFile(&_sax, this, path.toStdString().c_str()) >= 0; } catch (const char* s) { diff --git a/src/model/import/XMLImportEngine.hpp b/src/model/import/XMLImportEngine.hpp index fac0f90..2688f44 100644 --- a/src/model/import/XMLImportEngine.hpp +++ b/src/model/import/XMLImportEngine.hpp @@ -29,7 +29,7 @@ public: XMLImportEngine(); ~XMLImportEngine(); - virtual bool HandleFile(const wxString& path, User* user, Database* db, KissCount* kiss); + virtual bool HandleFile(const QString& path, User* user, Database* db, KissCount* kiss); private: xmlSAXHandler _sax; diff --git a/src/view/SupportedLanguages.hpp b/src/view/SupportedLanguages.hpp index f8ff305..d50cbd7 100644 --- a/src/view/SupportedLanguages.hpp +++ b/src/view/SupportedLanguages.hpp @@ -20,22 +20,20 @@ #ifndef SUPPORTEDLANGUAGES_H #define SUPPORTEDLANGUAGES_H -#include - namespace SupportedLanguages { #define ICONS_PATH RESSOURCES_ROOT "icons/" typedef struct { - wxString name; - wxString icon; + QString name; + QString icon; wxLanguage language; } language ; const int NB_SUPPORTED_LANGUAGES = 2; static const language languages[NB_SUPPORTED_LANGUAGES] = { - { wxT("Englishpp"), wxT(ICONS_PATH "/United Kingdom.png"), wxLANGUAGE_ENGLISH}, - { wxT("Français"), wxT(ICONS_PATH "/France.png"), wxLANGUAGE_FRENCH} + { "English", ICONS_PATH "/United Kingdom.png", wxLANGUAGE_ENGLISH}, + { "Français",ICONS_PATH "/France.png", wxLANGUAGE_FRENCH} }; } diff --git a/src/view/view.hpp b/src/view/view.hpp index a9756d7..205cb64 100644 --- a/src/view/view.hpp +++ b/src/view/view.hpp @@ -20,11 +20,13 @@ #ifndef VIEW_H #define VIEW_H +#include + namespace view { const QColor OWN_CYAN(0x99, 0xCC, 0xFF); const QColor OWN_YELLOW(0xFF, 0xFF, 0x99); const QColor OWN_GREEN(0x3D, 0xEB, 0x3D); - const std::string DEFAULT_FONT_NAME("Liberation Sans"); + const QString DEFAULT_FONT_NAME("Liberation Sans"); const int DEFAULT_FONT_SIZE = 12; #define DEFAULT_FONT(font_name) QFont font_name(view::DEFAULT_FONT_NAME, view::DEFAULT_FONT_SIZE); diff --git a/src/view/wxUI.cpp b/src/view/wxUI.cpp index 1957bff..83497e1 100644 --- a/src/view/wxUI.cpp +++ b/src/view/wxUI.cpp @@ -35,7 +35,7 @@ enum {BUTTON_CHANGE_USER_ID=-4, BUTTON_ABOUT_ID=-5, BUTTON_QUIT_ID=-6}; -std::string wxUI::months[12] ; +QString wxUI::months[12] ; QColor wxUI::categoryColors[MAX_CATEGORY] = {QColor(0x00, 0x45, 0x86), QColor(0xFF, 0x3E, 0x0E), QColor(0xFF, 0xD3, 0x20), @@ -90,7 +90,7 @@ wxUI::~wxUI() if (_locale) delete _locale; } -bool wxUI::SetLanguage(std::string language) +bool wxUI::SetLanguage(QString language) { bool res = true; diff --git a/src/view/wxUI.hpp b/src/view/wxUI.hpp index 5ed9a9d..13b8559 100644 --- a/src/view/wxUI.hpp +++ b/src/view/wxUI.hpp @@ -44,13 +44,13 @@ class wxUI: public QFrame { public: static const int MAX_CATEGORY = 12; - static std::string months[MAX_CATEGORY]; + static QString months[MAX_CATEGORY]; static QColor categoryColors[MAX_CATEGORY]; wxUI(KissCount* kiss, const QString& title); ~wxUI(); - bool SetLanguage(std::string language); + bool SetLanguage(QString language); void ChangeUser(); void LoadUser(); @@ -98,7 +98,7 @@ public: virtual void OnShow(QShowEvent * event)=0; virtual KissPanel* CreatePanel()=0; virtual QPushButton* GetButton(int id) {return 0;} - virtual std::string GetToolTip() {return "";} + virtual QString GetToolTip() {return "";} protected: KissCount* _kiss;