From ebe9ef4a62b8264b4260d52a5aff78d8e3cac41e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Soutad=C3=A9?= Date: Sun, 3 Jul 2011 07:56:48 +0200 Subject: [PATCH] Some modification where not commited previously ??? --- src/controller/KissCount.cpp | 91 +++++++++++-- src/controller/KissCount.h | 23 +++- src/model/Database.cpp | 3 +- src/model/Database.h | 9 +- src/model/export/XMLExportEngine.cpp | 6 + src/view/AccountPanel.cpp | 3 +- src/view/SearchPanel.cpp | 192 ++------------------------- src/view/SearchPanel.h | 16 +-- src/view/grid/GridAccount.cpp | 46 ++++--- src/view/view.h | 1 + src/view/wxUI.cpp | 1 + src/view/wxUI.h | 1 + 12 files changed, 165 insertions(+), 227 deletions(-) diff --git a/src/controller/KissCount.cpp b/src/controller/KissCount.cpp index 28a7967..f75c109 100644 --- a/src/controller/KissCount.cpp +++ b/src/controller/KissCount.cpp @@ -19,7 +19,8 @@ #include "KissCount.h" -std::vector KissCount::_importEngines; +std::vector * KissCount::_importEngines; +std::vector * KissCount::_exportEngines; KissCount::KissCount(const char* bdd_filename) : _user(NULL) { @@ -51,6 +52,9 @@ KissCount::~KissCount() { delete _db; delete _wxUI; + delete _importEngines; + delete _exportEngines; + if (_user) delete _user; } @@ -568,18 +572,21 @@ wxString KissCount::CompactFont(const wxFont& font) void KissCount::UnRegisterImportEngine(ImportEngine* engine) { std::vector::iterator it; + std::vector* importEngines = KissCount::GetImportEngines(); - for(it=_importEngines.begin(); it!=_importEngines.end(); it++) + for(it=importEngines->begin(); it!=importEngines->end(); it++) if (*it == engine) { - _importEngines.erase(it); + importEngines->erase(it); break; } } void KissCount::RegisterImportEngine(ImportEngine* engine) { - _importEngines.push_back(engine); + std::vector* importEngines = KissCount::GetImportEngines(); + + importEngines->push_back(engine); } wxString KissCount::GetImportEngineExtensions() @@ -587,12 +594,13 @@ wxString KissCount::GetImportEngineExtensions() wxString 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("|") ; + for(i=0; i<(int)importEngines->size()-1; i++) + res = res + (*importEngines)[i]->GetFileExt() + wxT("|") ; - if (_importEngines.size()) - res = res + _importEngines[i]->GetFileExt(); + if (importEngines->size()) + res = res + (*importEngines)[i]->GetFileExt(); return res; } @@ -600,8 +608,9 @@ wxString KissCount::GetImportEngineExtensions() ImportEngine* KissCount::GetImportEngine(wxString path) { std::vector::iterator it; + std::vector* importEngines = KissCount::GetImportEngines(); - for(it=_importEngines.begin(); it!=_importEngines.end(); it++) + for(it=importEngines->begin(); it!=importEngines->end(); it++) if ((*it)->HandleFile(path, _user, _db, this)) return *it; @@ -612,3 +621,67 @@ void KissCount::UpdateImportPattern() { _db->UpdateImportPattern(_user); } + +void KissCount::UnRegisterExportEngine(ExportEngine* engine) +{ + std::vector::iterator it; + std::vector* exportEngines = KissCount::GetExportEngines(); + + for(it=exportEngines->begin(); it!=exportEngines->end(); it++) + if (*it == engine) + { + exportEngines->erase(it); + break; + } +} + +void KissCount::RegisterExportEngine(ExportEngine* engine) +{ + std::vector* exportEngines = KissCount::GetExportEngines(); + + exportEngines->push_back(engine); +} + +wxString KissCount::GetExportEngineExtensions() +{ + wxString res; + std::vector::iterator it; + int i; + std::vector* exportEngines = KissCount::GetExportEngines(); + + for(i=0; i<(int)exportEngines->size()-1; i++) + res = res + (*exportEngines)[i]->GetFileExt() + wxT("|") ; + + if (exportEngines->size()) + res = res + (*exportEngines)[i]->GetFileExt(); + + return res; +} + +ExportEngine* KissCount::GetExportEngine(wxString path) +{ + std::vector::iterator it; + std::vector* exportEngines = KissCount::GetExportEngines(); + + for(it=exportEngines->begin(); it!=exportEngines->end(); it++) + if ((*it)->HandleFile(path, _user, _db, this)) + return *it; + + return NULL; +} + +std::vector* KissCount::GetImportEngines() +{ + if (!_importEngines) + _importEngines = new std::vector; + + return _importEngines; +} + +std::vector* KissCount::GetExportEngines() +{ + if (!_exportEngines) + _exportEngines = new std::vector; + + return _exportEngines; +} diff --git a/src/controller/KissCount.h b/src/controller/KissCount.h index e741390..6b03553 100644 --- a/src/controller/KissCount.h +++ b/src/controller/KissCount.h @@ -25,6 +25,7 @@ #include #include +#include #include #include @@ -32,9 +33,17 @@ #define APP_VERSION "0.2" +#define ESCAPE_CHARS(s) { \ + if (s.Find(wxT("\\\"")) == wxNOT_FOUND) \ + s.Replace(wxT("\""), wxT("\\\""), true); \ + if (s.Find(wxT("\\\'")) == wxNOT_FOUND) \ + s.Replace(wxT("\'"), wxT("\\\'"), true); \ + } + class wxUI; class Database; class ImportEngine; +class ExportEngine; class KissCount { @@ -111,12 +120,24 @@ public: wxString GetImportEngineExtensions(); ImportEngine* GetImportEngine(wxString path); + static void RegisterExportEngine(ExportEngine* engine); + static void UnRegisterExportEngine(ExportEngine* engine); + + wxString GetExportEngineExtensions(); + ExportEngine* GetExportEngine(wxString path); + void UpdateImportPattern(); + private: wxUI* _wxUI; Database* _db; User* _user; - static std::vector _importEngines; + + static std::vector *GetImportEngines(); + static std::vector *GetExportEngines(); + + static std::vector *_importEngines; + static std::vector *_exportEngines; }; #endif diff --git a/src/model/Database.cpp b/src/model/Database.cpp index 3535a47..6e0d8e1 100644 --- a/src/model/Database.cpp +++ b/src/model/Database.cpp @@ -1496,8 +1496,9 @@ std::vector* Database::Search(User* user, wxString* description, wxDa op.fix_cost = set.GetBool(wxT("fix_cost")); op.checked = set.GetBool(wxT("checked")); op.transfert = set.GetAsString(wxT("transfert")); - op.formula = set.GetAsString(wxT("formula")); + op.formula = set.GetAsString(wxT("formula")); op.meta = set.GetBool(wxT("meta")); + op._virtual = set.GetBool(wxT("virtual")); res->push_back(op); } diff --git a/src/model/Database.h b/src/model/Database.h index e0732c8..7e7b15c 100644 --- a/src/model/Database.h +++ b/src/model/Database.h @@ -30,7 +30,7 @@ #include #include -#include "../controller/KissCount.h" +#include #include "model.h" #define DATABASE_VERSION 2 @@ -90,13 +90,6 @@ #define EXECUTE_SQL_UPDATE(req, return_value) EXECUTE_SQL_UPDATE_WITH_CODE(req, return_value, {}, {}) -#define ESCAPE_CHARS(s) { \ - if (s.Find(wxT("\\\"")) == wxNOT_FOUND) \ - s.Replace(wxT("\""), wxT("\\\""), true); \ - if (s.Find(wxT("\\\'")) == wxNOT_FOUND) \ - s.Replace(wxT("\'"), wxT("\\\'"), true); \ - } - class KissCount; class User; diff --git a/src/model/export/XMLExportEngine.cpp b/src/model/export/XMLExportEngine.cpp index 760a462..1cdf6e2 100644 --- a/src/model/export/XMLExportEngine.cpp +++ b/src/model/export/XMLExportEngine.cpp @@ -47,6 +47,8 @@ bool XMLExportEngine::SaveAccounts() { account = _user->GetAccount(it->first); + ESCAPE_CHARS(account.name); + 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()); @@ -89,6 +91,8 @@ bool XMLExportEngine::SaveCategories() { category = _user->GetCategory(it->first); + 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()); @@ -114,6 +118,8 @@ bool XMLExportEngine::SaveOperations(std::vector* operations) for(it=operations->begin(); it!=operations->end(); it++) { + 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()); diff --git a/src/view/AccountPanel.cpp b/src/view/AccountPanel.cpp index d999cb8..e86beda 100644 --- a/src/view/AccountPanel.cpp +++ b/src/view/AccountPanel.cpp @@ -141,7 +141,8 @@ AccountPanel::AccountPanel(KissCount* kiss, wxUI *parent) : KissPanel(kiss, pare vbox3->Add(buttonUnGroup, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 10); vbox3->Add(_radioMode, 0, wxALIGN_CENTER_HORIZONTAL|wxUP, 50); - hbox->Add(vbox3, 0, wxGROW|wxALL, 2); + hbox->Add(vbox3, 0, wxALL, 2); + // hbox->Add(vbox3, 0, wxGROW|wxALL, 2); hbox2->Add(_accountsGrid, 0, wxGROW|wxALL, 2); hbox2->Add(_calendar, 0, wxALL, 2); vbox2->Add(hbox2, 0); diff --git a/src/view/SearchPanel.cpp b/src/view/SearchPanel.cpp index 5753b2f..dca32ee 100644 --- a/src/view/SearchPanel.cpp +++ b/src/view/SearchPanel.cpp @@ -19,30 +19,21 @@ #include "AccountPanel.h" -enum {DESCRIPTION_ID=1, SEARCH_ID, GRID_ID, CALENDAR_FROM_ID, CALENDAR_TO_ID, +enum {SEARCH_ID=1, GRID_ID, CHANGE_ACCOUNT_ID, CHANGE_CATEGORY_ID, RENAME_ID}; BEGIN_EVENT_TABLE(SearchPanel, wxPanel) EVT_BUTTON(SEARCH_ID, SearchPanel::OnButtonSearch) -EVT_CALENDAR_SEL_CHANGED(CALENDAR_FROM_ID, SearchPanel::OnCalendarFromChange) -EVT_CALENDAR_SEL_CHANGED(CALENDAR_TO_ID, SearchPanel::OnCalendarToChange) EVT_GRID_CMD_CELL_CHANGE(GRID_ID, SearchPanel::OnOperationModified) EVT_BUTTON(CHANGE_ACCOUNT_ID, SearchPanel::OnButtonChangeAccount) EVT_BUTTON(CHANGE_CATEGORY_ID, SearchPanel::OnButtonChangeCategory) EVT_BUTTON(RENAME_ID, SearchPanel::OnButtonRename) EVT_SHOW(SearchPanel::OnShow) -EVT_TEXT_ENTER(DESCRIPTION_ID, SearchPanel::OnEnter) END_EVENT_TABLE() -#define UNESCAPE_CHARS(s) { \ - s.Replace(wxT("\\\""), wxT("\""), true); \ - s.Replace(wxT("\\\'"), wxT("\'"), true); \ - } - SearchPanel::SearchPanel(KissCount* kiss, wxUI *parent) : KissPanel(kiss, parent), _operations(NULL) { DEFAULT_FONT(font); - User* user = _kiss->GetUser(); std::vector::iterator accountIt; std::vector::iterator categoryIt; wxDateTime firstOfMonth; @@ -53,72 +44,13 @@ SearchPanel::SearchPanel(KissCount* kiss, wxUI *parent) : KissPanel(kiss, parent wxBoxSizer *hbox = new wxBoxSizer(wxHORIZONTAL); SetSizer(vbox); - - _checkDateFrom = new wxCheckBox(this, wxID_ANY, _("Date from")); - _checkDateTo = new wxCheckBox(this, wxID_ANY, _("Date to")); - - _checkDateFrom->SetValue(wxT("1")); - _checkDateTo->SetValue(wxT("1")); - - wxGridBagSizer *gridBagSizer = new wxGridBagSizer(3, 10); - - firstOfMonth.SetToCurrent(); - firstOfMonth.SetDay(1); - _calendarFrom = new wxCalendarCtrl(this, CALENDAR_FROM_ID, firstOfMonth, wxDefaultPosition, wxDefaultSize, - wxCAL_MONDAY_FIRST); - _calendarTo = new wxCalendarCtrl(this, CALENDAR_TO_ID, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, - wxCAL_MONDAY_FIRST); - - _description = new wxTextCtrl(this, DESCRIPTION_ID); - _description->SetWindowStyle(_description->GetWindowStyle() | wxTE_PROCESS_ENTER); - wxSize size = _description->GetSize(); - size.SetWidth(size.GetWidth()*2); - _description->SetMinSize(size); - _amountFrom = new wxTextCtrl(this, wxID_ANY); - _amountTo = new wxTextCtrl(this, wxID_ANY); - - _category = new wxCheckListBox(this, wxID_ANY); - _category->Append(_("Unknown")); - for(categoryIt = user->_categories.begin(); categoryIt != user->_categories.end(); categoryIt++) - _category->Append(wxGetTranslation(categoryIt->name)); - - wxString stypes[] = {_("Fix"), _("Non fix"), _("Checked"), _("Not checked")}; - _optype = new wxCheckListBox(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 4, stypes); - - _account = new wxCheckListBox(this, wxID_ANY); - _account->Append(_("Unknown")); - for(accountIt = user->_accounts.begin(); accountIt != user->_accounts.end(); accountIt++) - _account->Append(accountIt->name); - _searchButton = new wxButton(this, SEARCH_ID, _("Search")); - wxStaticText* labelDescription = new wxStaticText(this, wxID_ANY, _("Description")); - wxStaticText* labelAmountFrom = new wxStaticText(this, wxID_ANY, _("Amount from")); - wxStaticText* labelAmountTo = new wxStaticText(this, wxID_ANY, _("Amount to")); - wxStaticText* labelCategory = new wxStaticText(this, wxID_ANY, _("Category")); - wxStaticText* labelOperations = new wxStaticText(this, wxID_ANY, _("Operations")); - wxStaticText* labelAccount = new wxStaticText(this, wxID_ANY, _("Account")); + _banner = new SearchBanner(kiss, this, this, OnEnter); - gridBagSizer->Add(labelDescription, wxGBPosition(0, 0)); - gridBagSizer->Add(_description, wxGBPosition(1, 0)); - gridBagSizer->Add(_checkDateFrom, wxGBPosition(0, 1)); - gridBagSizer->Add(_calendarFrom, wxGBPosition(1, 1)); - gridBagSizer->Add(_checkDateTo, wxGBPosition(0, 2)); - gridBagSizer->Add(_calendarTo, wxGBPosition(1, 2)); - gridBagSizer->Add(labelAmountFrom, wxGBPosition(0, 3)); - gridBagSizer->Add(_amountFrom, wxGBPosition(1, 3)); - gridBagSizer->Add(labelAmountTo, wxGBPosition(0, 4)); - gridBagSizer->Add(_amountTo, wxGBPosition(1, 4)); - gridBagSizer->Add(labelCategory, wxGBPosition(0, 5)); - gridBagSizer->Add(_category, wxGBPosition(1, 5)); - gridBagSizer->Add(labelOperations, wxGBPosition(0, 6)); - gridBagSizer->Add(_optype, wxGBPosition(1, 6)); - gridBagSizer->Add(labelAccount, wxGBPosition(0, 7)); - gridBagSizer->Add(_account, wxGBPosition(1, 7)); - gridBagSizer->Add(_searchButton, wxGBPosition(2, 0)); - - vbox->Add(gridBagSizer, 0, wxGROW|wxALL, 5); + vbox->Add(_banner, 0, wxGROW|wxALL, 5); + vbox->Add(_searchButton, 0, wxALL, 5); _grid = new GridAccount(_kiss, this, GRID_ID, false, false, true); @@ -145,7 +77,6 @@ SearchPanel::SearchPanel(KissCount* kiss, wxUI *parent) : KissPanel(kiss, parent SearchPanel::~SearchPanel() { - if (_operations) delete _operations; } KissPanel* SearchPanel::CreatePanel() @@ -166,111 +97,18 @@ wxString SearchPanel::GetToolTip() return _("Search"); } -void SearchPanel::Search() +void SearchPanel::OnEnter(void* caller, wxCommandEvent& event) { - wxString *description=NULL, *amountFrom=NULL, *amountTo=NULL; - std::vector categories, accounts; - wxDateTime *dateFrom=NULL, *dateTo=NULL; - User* user= _kiss->GetUser(); - int i, types=0; - std::vector::iterator it; - double af, at; + SearchPanel* _this = (SearchPanel*) caller; - if (_calendarFrom->GetDate() > _calendarTo->GetDate()) - { - wxMessageBox(_("Invalid date range"), _("Error"), wxICON_ERROR | wxOK); - return; - } - - if (_amountFrom->GetLineText(0).Length()) - { - amountFrom = new wxString; - *amountFrom = _amountFrom->GetLineText(0); - if (!amountFrom->ToDouble(&af)) - { - wxMessageBox(_("Invalid amount from"), _("Error"), wxICON_ERROR | wxOK); - delete amountFrom; - return; - } - - if (af < 0) af *= -1; - } - - if (_amountTo->GetLineText(0).Length()) - { - amountTo = new wxString; - *amountTo = _amountTo->GetLineText(0); - if (!amountTo->ToDouble(&at)) - { - wxMessageBox(_("Invalid amount to"), _("Error"), wxICON_ERROR | wxOK); - delete amountFrom; - delete amountTo; - return; - } - - if (at < 0) at *= -1; - } - - if (amountFrom && amountTo && af > at) - { - wxMessageBox(_("Invalid amount range"), _("Error"), wxICON_ERROR | wxOK); - delete amountFrom; - delete amountTo; - return; - } - - _grid->DeleteRows(1, _grid->GetNumberRows()-1); - - if (_description->GetLineText(0).Length()) - { - description = new wxString; - *description = _description->GetLineText(0); - } - - if (_checkDateFrom->IsChecked()) - { - dateFrom = new wxDateTime; - *dateFrom = _calendarFrom->GetDate(); - } - - if (_checkDateTo->IsChecked()) - { - dateTo = new wxDateTime; - *dateTo = _calendarTo->GetDate(); - } - - if (dateFrom && dateTo && *dateFrom > *dateTo) - { - ; - } - - for(i=0; iGetCategoriesNumber(); i++) - if (_category->IsChecked(i)) - categories.push_back((i) ? user->_categories[i-1].id : wxT("0")); - - types |= (_optype->IsChecked(0)) ? FIX_OP : 0; - types |= (_optype->IsChecked(1)) ? NON_FIX_OP : 0; - types |= (_optype->IsChecked(2)) ? CHECKED_OP : 0; - types |= (_optype->IsChecked(3)) ? NOT_CHECKED_OP : 0; - - for(i=0; iGetAccountsNumber(); i++) - if (_account->IsChecked(i)) - accounts.push_back((i) ? user->_accounts[i-1].id : wxT("0")); - - if (_operations) - delete _operations; - - _operations = _kiss->Search(description, dateFrom, dateTo, amountFrom, amountTo, categories,types, accounts); -} - -void SearchPanel::OnEnter(wxCommandEvent& event) -{ - OnButtonSearch(event); + _this->OnButtonSearch(event); } void SearchPanel::OnButtonSearch(wxCommandEvent& event) { - Search(); + _operations = _banner->Search(); + + if (!_operations) return; if (_operations->size() > 1) wxMessageBox(wxString::Format(wxT("%d"), _operations->size()) + _(" entries found"), wxT("KissCount"), wxICON_INFORMATION | wxOK); @@ -416,16 +254,6 @@ void SearchPanel::OnShow(wxShowEvent& event) _wxUI->SetTitle(_kiss->GetUser()->_name + wxT(" - ") + _("Search")); } -void SearchPanel::OnCalendarFromChange(wxCalendarEvent& event) -{ - _checkDateFrom->SetValue(true); -} - -void SearchPanel::OnCalendarToChange(wxCalendarEvent& event) -{ - _checkDateTo->SetValue(true); -} - void SearchPanel::OnOperationModified(wxGridEvent& event) { _wxUI->NeedReload(); diff --git a/src/view/SearchPanel.h b/src/view/SearchPanel.h index ce80751..b60ee0b 100644 --- a/src/view/SearchPanel.h +++ b/src/view/SearchPanel.h @@ -29,10 +29,12 @@ #include "grid/wxGridCellBitmapRenderer.h" #include "grid/GridAccount.h" #include "AccountPanel.h" +#include "SearchBanner.h" #include class GridAccount; +class SearchBanner; class SearchPanel: public KissPanel { @@ -45,26 +47,22 @@ public: wxString GetToolTip(); void OnShow(wxShowEvent& event); - void OnEnter(wxCommandEvent& event); + /* void OnEnter(wxCommandEvent& event); */ void OnButtonSearch(wxCommandEvent& event); void OnOperationModified(wxGridEvent& event); - void OnCalendarFromChange(wxCalendarEvent& event); - void OnCalendarToChange(wxCalendarEvent& event); void OnButtonChangeAccount(wxCommandEvent& event); void OnButtonChangeCategory(wxCommandEvent& event); void OnButtonRename(wxCommandEvent& event); private: - void Search(); - std::vector *_operations; - wxCalendarCtrl* _calendarFrom, *_calendarTo; + SearchBanner* _banner; GridAccount *_grid; - wxCheckBox *_checkDateFrom, *_checkDateTo; - wxTextCtrl* _description, *_amountFrom, *_amountTo; - wxCheckListBox* _category, *_account, *_optype; wxButton* _searchButton, *_renameButton, *_changeAccountButton, *_changeCategoryButton; + + static void OnEnter(void* caller, wxCommandEvent& event); + DECLARE_EVENT_TABLE(); }; diff --git a/src/view/grid/GridAccount.cpp b/src/view/grid/GridAccount.cpp index 7cff7d9..1f52762 100644 --- a/src/view/grid/GridAccount.cpp +++ b/src/view/grid/GridAccount.cpp @@ -588,7 +588,8 @@ int GridAccount::RemoveMeta(Operation op, int line, bool removeRoot, bool delete if (deleteOp) { DeleteOperation(op2); - _kiss->DeleteOperation(op2); + if (_databaseSynchronization) + _kiss->DeleteOperation(op2); } } } @@ -603,7 +604,8 @@ int GridAccount::RemoveMeta(Operation op, int line, bool removeRoot, bool delete if (deleteOp) { DeleteOperation(op); - _kiss->DeleteOperation(op); + if (_databaseSynchronization) + _kiss->DeleteOperation(op); } deletedOperations++; } @@ -728,19 +730,27 @@ void GridAccount::OnOperationModified(wxGridEvent& event) op_complete--; } - if (col == DESCRIPTION && GetCellValue(row, OP_DATE).Length() && + if (col == DESCRIPTION && (!GetCellValue(row, CATEGORY).Length() || - !GetCellValue(row, ACCOUNT).Length() || - !_canAddOperation)) + !GetCellValue(row, ACCOUNT).Length())) { new_op.fix_cost = (row <= _fixCosts); - if (_kiss->SearchPreviousOperation(&op_tmp, new_op, new_op.month, new_op.year, _canAddOperation)) + if (_kiss->SearchPreviousOperation(&op_tmp, new_op, _curMonth, _curYear, _canAddOperation)) { - new_op.category = op_tmp.category; - new_op.account = op_tmp.account; - SetCellValue(row, CATEGORY, wxGetTranslation(user->GetCategoryName(new_op.category))); - SetCellValue(row, ACCOUNT, user->GetAccountName(new_op.account)); - op_complete -= 2; + if (!GetCellValue(row, CATEGORY).Length()) + { + new_op.category = op_tmp.category; + SetCellValue(row, CATEGORY, wxGetTranslation(user->GetCategoryName(new_op.category))); + op_complete--; + } + + if (!GetCellValue(row, ACCOUNT).Length()) + { + new_op.account = op_tmp.account; + SetCellValue(row, ACCOUNT, user->GetAccountName(new_op.account)); + op_complete--; + } + col = CATEGORY; new_op.fix_cost = (new_op.category == user->GetCategoryId(wxT("Fix"))); } @@ -861,7 +871,7 @@ void GridAccount::OnOperationModified(wxGridEvent& event) } // Modify a fix operation - if (row < _fixCosts) + if (row < _fixCosts || !_canAddOperation) { if (col == OP_DELETE) { @@ -885,7 +895,8 @@ void GridAccount::OnOperationModified(wxGridEvent& event) DeleteRows(row, 1); DeleteOperation(cur_op); - _kiss->DeleteOperation(cur_op); + if (_databaseSynchronization) + _kiss->DeleteOperation(cur_op); _displayedOperations.erase(_displayedOperations.begin()+row); if (cur_op.parent.Length() && op_tmp.childs.size() < 2) @@ -901,7 +912,8 @@ void GridAccount::OnOperationModified(wxGridEvent& event) row = GetDisplayedRow(cur_op.parent); DeleteRows(row, 1); DeleteOperation(op_tmp); - _kiss->DeleteOperation(op_tmp); + if (_databaseSynchronization) + _kiss->DeleteOperation(op_tmp); _displayedOperations.erase(_displayedOperations.begin()+row); _fixCosts--; } @@ -997,7 +1009,8 @@ void GridAccount::OnOperationModified(wxGridEvent& event) DeleteRows(row, 1); DeleteOperation(cur_op); _displayedOperations.erase(_displayedOperations.begin()+row); - _kiss->DeleteOperation(cur_op); + if (_databaseSynchronization) + _kiss->DeleteOperation(cur_op); if (cur_op.parent.Length() && op_tmp.childs.size() <= 1) { @@ -1012,7 +1025,8 @@ void GridAccount::OnOperationModified(wxGridEvent& event) row = GetDisplayedRow(cur_op.parent); DeleteRows(row, 1); DeleteOperation(op_tmp); - _kiss->DeleteOperation(op_tmp); + if (_databaseSynchronization) + _kiss->DeleteOperation(op_tmp); _displayedOperations.erase(_displayedOperations.begin()+row); } diff --git a/src/view/view.h b/src/view/view.h index de0c0d4..5360adb 100644 --- a/src/view/view.h +++ b/src/view/view.h @@ -35,6 +35,7 @@ #define SEARCH_ICON RESSOURCES_ROOT "icons/Search-icon.png" #define PREFS_ICON RESSOURCES_ROOT "icons/options-icon.png" #define IMPORT_ICON RESSOURCES_ROOT "icons/import-icon.png" +#define EXPORT_ICON RESSOURCES_ROOT "icons/export-icon.png" #define CHANGE_USER_ICON RESSOURCES_ROOT "icons/Clients-icon.png" #define ABOUT_ICON RESSOURCES_ROOT "icons/windows-users-icon.png" #define QUIT_ICON RESSOURCES_ROOT "icons/system-log-out.png" diff --git a/src/view/wxUI.cpp b/src/view/wxUI.cpp index 25e9fb7..99798d2 100644 --- a/src/view/wxUI.cpp +++ b/src/view/wxUI.cpp @@ -155,6 +155,7 @@ void wxUI::InitPanels() ADD_PANEL(SearchPanel, 2); ADD_PANEL(PreferencesPanel, 3); ADD_PANEL(ImportPanel, 4); + ADD_PANEL(ExportPanel, 5); } void wxUI::LoadPanels() diff --git a/src/view/wxUI.h b/src/view/wxUI.h index 1cc0bbe..921ee6b 100644 --- a/src/view/wxUI.h +++ b/src/view/wxUI.h @@ -30,6 +30,7 @@ class ImportEngine; #include "SearchPanel.h" #include "StatsPanel.h" #include "ImportPanel.h" +#include "ExportPanel.h" #include #include "grid/wxMyGrid.h" #include "grid/wxGridCellFastBoolEditor.h"