Merge branch 'dev' of git@soutade.fr:kisscount into dev

This commit is contained in:
Grégory Soutadé 2011-01-25 11:57:51 +01:00
commit 90994542c3
17 changed files with 379 additions and 442 deletions

17
ChangeLog Normal file
View File

@ -0,0 +1,17 @@
v0.2_dev (23/01/2011)
** User **
Better use of sizers (so better interface!)
No further problems with scrollbar in AccountPanel when there is a lot of operations
** Dev **
Use a factory to create panels (prepare for plug-in)
** Bugs **
Bug on GenerateMonth with different years
In StatsPanel :
Bad selection of year with multiple years
Bad year range check
Unordered accounts (makes account selection points to bad indexes on account graph)
Bug in account creation (readonly fields)

1
TODO
View File

@ -3,7 +3,6 @@ Version 0.2
Statistics (need to add months/years label on graph) Statistics (need to add months/years label on graph)
Auto completion (already up into wxwidgets 2.9) Auto completion (already up into wxwidgets 2.9)
Using tabulation to navigate throw interface (Search Panel) Using tabulation to navigate throw interface (Search Panel)
Improve Scrolled Windows and widgets placement
Can type a letter with a comboboxes Can type a letter with a comboboxes
Windows version Windows version
Need packaging (.deb) Need packaging (.deb)

View File

@ -29,7 +29,7 @@
#include <wx/display.h> #include <wx/display.h>
#define APP_VERSION "v0.1" #define APP_VERSION "v0.2 dev"
class wxUI; class wxUI;
class Database; class Database;

View File

@ -38,7 +38,7 @@ EVT_BUTTON(GROUP_ID, AccountPanel::OnGroup)
EVT_BUTTON(UNGROUP_ID, AccountPanel::OnUnGroup) EVT_BUTTON(UNGROUP_ID, AccountPanel::OnUnGroup)
END_EVENT_TABLE() END_EVENT_TABLE()
AccountPanel::AccountPanel(KissCount* kiss, wxUI *parent) : wxScrolledWindow(&(*parent)), _curMonth(-1), _curYear(-1), _kiss(kiss), _wxUI(parent), _tree(this, CALENDAR_TREE_ID, wxDefaultPosition, wxDefaultSize, wxTR_HIDE_ROOT) AccountPanel::AccountPanel(KissCount* kiss, wxUI *parent) : KissPanel(kiss, parent), _curMonth(-1), _curYear(-1), _tree(this, CALENDAR_TREE_ID, wxDefaultPosition, wxDefaultSize, wxTR_HIDE_ROOT)
{ {
wxBoxSizer *hbox = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *hbox = new wxBoxSizer(wxHORIZONTAL);
wxBoxSizer *hbox2 = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *hbox2 = new wxBoxSizer(wxHORIZONTAL);
@ -126,32 +126,27 @@ AccountPanel::AccountPanel(KissCount* kiss, wxUI *parent) : wxScrolledWindow(&(*
wxButton* buttonGroup = new wxButton(this, GROUP_ID, _("Group")); wxButton* buttonGroup = new wxButton(this, GROUP_ID, _("Group"));
wxButton* buttonUnGroup = new wxButton(this, UNGROUP_ID, _("UnGroup")); wxButton* buttonUnGroup = new wxButton(this, UNGROUP_ID, _("UnGroup"));
vbox3->Add(&_tree, 0); vbox3->Add(&_tree, 0, wxGROW|wxALL, 2);
vbox3->Add(-1, 30); vbox3->Add(buttonGroup, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 10);
vbox3->Add(buttonGroup, 0); vbox3->Add(buttonUnGroup, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 10);
vbox3->Add(-1, 10);
vbox3->Add(buttonUnGroup, 0);
hbox->Add(vbox3, 0); hbox->Add(vbox3, 0, wxGROW|wxALL, 2);
hbox2->Add(_accountsGrid, 0); hbox2->Add(_accountsGrid, 0, wxGROW|wxALL, 2);
hbox2->Add(_calendar, 0); hbox2->Add(_calendar, 0, wxALL, 2);
vbox2->Add(hbox2, 0); vbox2->Add(hbox2, 0);
vbox2->Add(-1, 10); vbox2->Add(_grid, 0, wxGROW|wxALL, 2);
vbox2->Add(_grid, 0); hbox->Add(vbox2, 0, wxGROW|wxALL, 2);
hbox->Add(vbox2, 0); vbox->Add(_statsGrid, 0, wxGROW);
vbox->Add(_statsGrid, 0); vbox->Add(chart, 0, wxALIGN_CENTER_HORIZONTAL|wxUP, 10);
vbox->Add(-1, 10); vbox->Add(_checkCheckMode, 0, wxALIGN_CENTER_HORIZONTAL|wxUP, 10);
vbox->Add(chart, 0); hbox->Add(vbox, 0, wxGROW|wxALL, 2);
hbox->Add(-1, 10);
vbox->Add(_checkCheckMode, 0);
hbox->Add(-1, 10);
hbox->Add(vbox, 0);
ChangeUser(); ChangeUser();
Fit(); Fit();
SetMinSize(wxSize(rect.width-rect.x, rect.height-rect.y-128)); SetMinSize(wxSize(rect.width-rect.x-15, rect.height-rect.y-128-25));
SetMaxSize(wxSize(rect.width-rect.x-15, rect.height-rect.y-128-25));
SetScrollbars(10, 10, 100/10, 100/10); SetScrollbars(10, 10, 100/10, 100/10);
} }
@ -162,6 +157,24 @@ AccountPanel::~AccountPanel()
delete[] _accounts; delete[] _accounts;
} }
KissPanel* AccountPanel::CreatePanel()
{
return new AccountPanel(_kiss, _wxUI);
}
wxBitmapButton* AccountPanel::GetButton(int id)
{
if (!_KissButton)
_KissButton = new wxBitmapButton(_wxUI, id, wxBitmap(wxT(ACCOUNT_ICON)), wxDefaultPosition, wxSize(128, 128));
return _KissButton;
}
wxString AccountPanel::GetToolTip()
{
return _("Operations");
}
void AccountPanel::InitStatsGrid(User* user) void AccountPanel::InitStatsGrid(User* user)
{ {
int i; int i;
@ -561,6 +574,8 @@ void AccountPanel::UpdateStats()
void AccountPanel::OnOperationModified(wxGridEvent& event) void AccountPanel::OnOperationModified(wxGridEvent& event)
{ {
UpdateStats(); UpdateStats();
Fit();
} }
void AccountPanel::OnAccountModified(wxGridEvent& event) void AccountPanel::OnAccountModified(wxGridEvent& event)

View File

@ -25,26 +25,27 @@
#include <wx/treectrl.h> #include <wx/treectrl.h>
#include <wx/pie/pieplot.h> #include <wx/pie/pieplot.h>
#include <wx/chartpanel.h> #include <wx/chartpanel.h>
#include <wx/scrolwin.h>
#include "grid/CalendarEditor.h" #include "grid/CalendarEditor.h"
#include "grid/wxGridCellBitmapRenderer.h" #include "grid/wxGridCellBitmapRenderer.h"
#include "view.h" #include "view.h"
#include <controller/KissCount.h> #include <controller/KissCount.h>
#include "wxUI.h"
#include <model/model.h> #include <model/model.h>
#include "grid/GridAccount.h" #include "grid/GridAccount.h"
#include <wx/category/categorysimpledataset.h> #include <wx/category/categorysimpledataset.h>
class wxUI; class AccountPanel: public KissPanel
class KissCount;
class AccountPanel: public wxScrolledWindow
{ {
public: public:
AccountPanel(KissCount* kiss, wxUI *parent); AccountPanel(KissCount* kiss, wxUI *parent);
~AccountPanel(); ~AccountPanel();
KissPanel* CreatePanel();
wxBitmapButton* GetButton(int id);
wxString GetToolTip();
void OnShow(wxShowEvent& event);
void ChangeUser(); void ChangeUser();
void LoadYear(int year, bool showMonth=true); void LoadYear(int year, bool showMonth=true);
void ShowMonth(int month, int year); void ShowMonth(int month, int year);
@ -56,7 +57,6 @@ public:
void OnTreeChange(wxTreeEvent& event); void OnTreeChange(wxTreeEvent& event);
void OnMenuGenerate(wxCommandEvent& event); void OnMenuGenerate(wxCommandEvent& event);
void OnMenuDelete(wxCommandEvent& event); void OnMenuDelete(wxCommandEvent& event);
void OnShow(wxShowEvent& event);
void OnCalendarChange(wxCalendarEvent& event); void OnCalendarChange(wxCalendarEvent& event);
void OnCheckMode(wxCommandEvent& event); void OnCheckMode(wxCommandEvent& event);
void OnGroup(wxCommandEvent& event); void OnGroup(wxCommandEvent& event);
@ -65,8 +65,6 @@ public:
int _curMonth, _curYear; int _curMonth, _curYear;
private: private:
KissCount* _kiss;
wxUI* _wxUI;
wxTreeCtrl _tree; wxTreeCtrl _tree;
wxCalendarCtrl* _calendar; wxCalendarCtrl* _calendar;
GridAccount* _grid; GridAccount* _grid;

View File

@ -1,118 +0,0 @@
/*
Copyright 2010 Grégory Soutadé
This file is part of KissCount.
KissCount is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
KissCount is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with KissCount. If not, see <http://www.gnu.org/licenses/>.
*/
#include "ButtonPanel.h"
enum {BUTTON_ACCOUNT_ID=1, BUTTON_STATS_ID, BUTTON_SEARCH_ID, BUTTON_PREFS_ID, BUTTON_CHANGE_USER_ID, BUTTON_ABOUT_ID, BUTTON_QUIT_ID};
BEGIN_EVENT_TABLE(ButtonPanel, wxPanel)
EVT_BUTTON(BUTTON_ACCOUNT_ID, ButtonPanel::OnButtonAccount)
EVT_BUTTON(BUTTON_STATS_ID, ButtonPanel::OnButtonStats)
EVT_BUTTON(BUTTON_SEARCH_ID, ButtonPanel::OnButtonSearch)
EVT_BUTTON(BUTTON_PREFS_ID, ButtonPanel::OnButtonPreferences)
EVT_BUTTON(BUTTON_CHANGE_USER_ID, ButtonPanel::OnButtonChangeUser)
EVT_BUTTON(BUTTON_ABOUT_ID, ButtonPanel::OnButtonAbout)
EVT_BUTTON(BUTTON_QUIT_ID, ButtonPanel::OnButtonQuit)
END_EVENT_TABLE()
ButtonPanel::ButtonPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*parent)), _kiss(kiss), _wxUI(parent)
{
wxBoxSizer *hbox = new wxBoxSizer(wxHORIZONTAL);
_account = new wxBitmapButton(this, BUTTON_ACCOUNT_ID, wxBitmap(wxT(ACCOUNT_ICON)), wxDefaultPosition, wxSize(128, 128));
_stats = new wxBitmapButton(this, BUTTON_STATS_ID, wxBitmap(wxT(STATS_ICON)), wxDefaultPosition, wxSize(128, 128));
_search = new wxBitmapButton(this, BUTTON_SEARCH_ID, wxBitmap(wxT(SEARCH_ICON)), wxDefaultPosition, wxSize(128, 128));
_prefs = new wxBitmapButton(this, BUTTON_PREFS_ID, wxBitmap(wxT(PREFS_ICON)), wxDefaultPosition, wxSize(128, 128));
_changeUser = new wxBitmapButton(this, BUTTON_CHANGE_USER_ID, wxBitmap(wxT(CHANGE_USER_ICON)), wxDefaultPosition, wxSize(128, 128));
_about = new wxBitmapButton(this, BUTTON_ABOUT_ID, wxBitmap(wxT(ABOUT_ICON)), wxDefaultPosition, wxSize(128, 128));
_quit = new wxBitmapButton(this, BUTTON_QUIT_ID, wxBitmap(wxT(QUIT_ICON)), wxDefaultPosition, wxSize(128, 128));
SetSizer(hbox);
hbox->Add(_account);
hbox->Add(_stats);
hbox->Add(_search);
hbox->Add(_prefs);
hbox->Add(_changeUser);
hbox->Add(_about);
hbox->Add(_quit);
Fit();
SetMinSize(GetSize());
}
ButtonPanel::~ButtonPanel()
{
delete _account;
delete _stats;
delete _prefs;
delete _changeUser;
}
void ButtonPanel::SetToolTips()
{
_account->SetToolTip(_("Operations"));
_stats->SetToolTip(_("Statistics"));
_search->SetToolTip(_("Search"));
_prefs->SetToolTip(_("Preferences"));
_changeUser->SetToolTip(_("Change user"));
_about->SetToolTip(_("About"));
_quit->SetToolTip(_("Quit"));
}
void ButtonPanel::OnButtonAccount(wxCommandEvent& event)
{
_wxUI->ShowAccount();
}
void ButtonPanel::OnButtonStats(wxCommandEvent& event)
{
_wxUI->ShowStats();
}
void ButtonPanel::OnButtonSearch(wxCommandEvent& event)
{
_wxUI->ShowSearch();
}
void ButtonPanel::OnButtonPreferences(wxCommandEvent& event)
{
_wxUI->ShowPreferences();
}
void ButtonPanel::OnButtonChangeUser(wxCommandEvent& event)
{
_wxUI->ChangeUser();
}
void ButtonPanel::OnButtonAbout(wxCommandEvent& event)
{
wxMessageBox( _("Personal accounting software\n\nhttp://indefero.soutade.fr/p/kisscount/\n\nLicenced under GNU GPL v3\n\nCopyright (C) 2010 Grégory Soutadé"),
wxT("KissCount " APP_VERSION "\n\n"),
wxOK | wxICON_INFORMATION, _wxUI );
}
void ButtonPanel::OnButtonQuit(wxCommandEvent& event)
{
wxMessageDialog dialog(_wxUI, _("Quit KissCount ?"), wxT("KissCount"), wxYES_NO);
if (dialog.ShowModal() == wxID_NO)
{
return;
}
_wxUI->Close(true);
}

View File

@ -17,49 +17,35 @@
along with KissCount. If not, see <http://www.gnu.org/licenses/>. along with KissCount. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef BUTTONPANEL_H #ifndef KISSPANEL_H
#define BUTTONPANEL_H #define KISSPANEL_H
#include <wx/wx.h> #include <wx/wx.h>
#include <wx/scrolwin.h>
#include <wx/bmpbuttn.h> #include <wx/bmpbuttn.h>
#include <controller/KissCount.h>
#include "wxUI.h"
#include "view.h"
class KissCount;
class wxUI; class wxUI;
class KissCount;
class ButtonPanel: public wxPanel class KissPanel: public wxScrolledWindow
{ {
public: public:
KissPanel(KissCount* kiss, wxUI* parent) :
wxScrolledWindow((wxFrame*)parent),
_kiss(kiss),
_wxUI(parent),
_KissButton(NULL)
{Hide();}
ButtonPanel(KissCount* kiss, wxUI *parent); virtual void OnShow(wxShowEvent& event)=0;
~ButtonPanel(); virtual KissPanel* CreatePanel()=0;
virtual wxBitmapButton* GetButton(int id) {return NULL;}
virtual wxString GetToolTip() {return wxT("");}
void SetToolTips(); protected:
void OnButtonAccount(wxCommandEvent& event);
void OnButtonStats(wxCommandEvent& event);
void OnButtonSearch(wxCommandEvent& event);
void OnButtonPreferences(wxCommandEvent& event);
void OnButtonChangeUser(wxCommandEvent& event);
void OnButtonAbout(wxCommandEvent& event);
void OnButtonQuit(wxCommandEvent& event);
private:
KissCount* _kiss; KissCount* _kiss;
wxUI* _wxUI; wxUI* _wxUI;
wxBitmapButton* _account; wxBitmapButton* _KissButton;
wxBitmapButton* _stats;
wxBitmapButton* _search;
wxBitmapButton* _prefs;
wxBitmapButton* _changeUser;
wxBitmapButton* _about;
wxBitmapButton* _quit;
DECLARE_EVENT_TABLE();
}; };
#endif #endif

View File

@ -38,7 +38,7 @@ EVT_CHECKLISTBOX(SHARED_WITH_ID, PreferencesPanel::OnSharedChange)
EVT_SHOW(PreferencesPanel::OnShow) EVT_SHOW(PreferencesPanel::OnShow)
END_EVENT_TABLE() END_EVENT_TABLE()
PreferencesPanel::PreferencesPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*parent)), _kiss(kiss), _wxUI(parent), _sharedWith(NULL), _curAccountRow(-1) PreferencesPanel::PreferencesPanel(KissCount* kiss, wxUI *parent) : KissPanel(kiss, parent), _sharedWith(NULL), _curAccountRow(-1)
{ {
wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL);
wxBoxSizer *hbox1 = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *hbox1 = new wxBoxSizer(wxHORIZONTAL);
@ -65,8 +65,8 @@ PreferencesPanel::PreferencesPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*p
// User // User
staticBoxSizer = new wxStaticBoxSizer (staticUser, wxVERTICAL); staticBoxSizer = new wxStaticBoxSizer (staticUser, wxVERTICAL);
gridBagSizer = new wxGridBagSizer(10, 10); gridBagSizer = new wxGridBagSizer(2, 3);
staticBoxSizer->Add(gridBagSizer); staticBoxSizer->Add(gridBagSizer, 0, wxGROW|wxALL, 2);
label = new wxStaticText(this, wxID_ANY, _("Name")); label = new wxStaticText(this, wxID_ANY, _("Name"));
gridBagSizer->Add(label, wxGBPosition(0, 0)); gridBagSizer->Add(label, wxGBPosition(0, 0));
@ -82,8 +82,7 @@ PreferencesPanel::PreferencesPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*p
gridBagSizer->Add(buttonChangePassword, wxGBPosition(1, 1)); gridBagSizer->Add(buttonChangePassword, wxGBPosition(1, 1));
gridBagSizer->Add(killMe, wxGBPosition(1, 2)); gridBagSizer->Add(killMe, wxGBPosition(1, 2));
vbox->Add(staticBoxSizer); vbox->Add(staticBoxSizer, 0, wxALL, 10);
vbox->Add(-1, 20);
// Account // Account
staticBoxSizer = new wxStaticBoxSizer (staticAccount, wxVERTICAL); staticBoxSizer = new wxStaticBoxSizer (staticAccount, wxVERTICAL);
@ -96,15 +95,14 @@ PreferencesPanel::PreferencesPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*p
InitAccounts(user); InitAccounts(user);
staticBoxSizer->Add(_accountsGrid); staticBoxSizer->Add(_accountsGrid, 0, wxGROW|wxALL, 2);
hbox1->Add(staticBoxSizer); hbox1->Add(staticBoxSizer, 0, wxALL);
hbox1->Add(-1, 20);
staticBoxSizer = new wxStaticBoxSizer (staticSharedWith, wxVERTICAL); staticBoxSizer = new wxStaticBoxSizer (staticSharedWith, wxVERTICAL);
_sharedWith = new wxCheckListBox(this, SHARED_WITH_ID); _sharedWith = new wxCheckListBox(this, SHARED_WITH_ID);
staticBoxSizer->Add(_sharedWith); staticBoxSizer->Add(_sharedWith, 0, wxGROW);
users = _kiss->GetUsers(); users = _kiss->GetUsers();
@ -114,8 +112,8 @@ PreferencesPanel::PreferencesPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*p
_sharedWith->Enable(false); _sharedWith->Enable(false);
hbox1->Add(staticBoxSizer); hbox1->Add(staticBoxSizer, 0, wxLEFT, 5);
hbox1->Add(-1, 20); vbox->Add(hbox1, 0, wxGROW|wxALL, 10);
// Categories // Categories
staticBoxSizer = new wxStaticBoxSizer (staticCategories, wxVERTICAL); staticBoxSizer = new wxStaticBoxSizer (staticCategories, wxVERTICAL);
@ -126,15 +124,11 @@ PreferencesPanel::PreferencesPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*p
_categoriesGrid = new wxMyGrid(this, CATEGORIES_GRID_ID, clicks, 4); _categoriesGrid = new wxMyGrid(this, CATEGORIES_GRID_ID, clicks, 4);
} }
staticBoxSizer->Add(_categoriesGrid); staticBoxSizer->Add(_categoriesGrid, 0, wxGROW|wxALL, 2);
InitCategories(user); InitCategories(user);
vbox->Add(hbox1); vbox->Add(staticBoxSizer, 0, wxALL, 10);
vbox->Add(-1, 20);
vbox->Add(staticBoxSizer);
vbox->Add(-1, 20);
// Operation Order // Operation Order
staticBoxSizer = new wxStaticBoxSizer (staticOperationOrder, wxVERTICAL); staticBoxSizer = new wxStaticBoxSizer (staticOperationOrder, wxVERTICAL);
@ -142,10 +136,9 @@ PreferencesPanel::PreferencesPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*p
_operationOrder = new wxComboBox(this, OPERATION_ORDER_ID); _operationOrder = new wxComboBox(this, OPERATION_ORDER_ID);
_operationOrder->SetWindowStyle(wxCB_READONLY); _operationOrder->SetWindowStyle(wxCB_READONLY);
staticBoxSizer->Add(_operationOrder); staticBoxSizer->Add(_operationOrder, 0, wxGROW|wxALL, 2);
hbox2->Add(staticBoxSizer); hbox2->Add(staticBoxSizer, 0);
hbox2->Add(-1, 20);
InitOperationOrder(user); InitOperationOrder(user);
@ -155,21 +148,36 @@ PreferencesPanel::PreferencesPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*p
_language = new wxBitmapComboBox(this, LANGUAGE_ID); _language = new wxBitmapComboBox(this, LANGUAGE_ID);
_language->SetWindowStyle(wxCB_READONLY); _language->SetWindowStyle(wxCB_READONLY);
staticBoxSizer->Add(_language); staticBoxSizer->Add(_language, 0, wxGROW|wxALL, 2);
hbox2->Add(staticBoxSizer); hbox2->Add(staticBoxSizer, 0, wxLEFT, 10);
hbox2->Add(-1, 20);
InitLanguage(user); InitLanguage(user);
_language->Fit(); _language->Fit();
vbox->Add(hbox2); vbox->Add(hbox2, 0, wxALL, 10);
Fit(); Fit();
SetMinSize(GetSize()); SetMinSize(GetSize());
}
Hide(); KissPanel* PreferencesPanel::CreatePanel()
{
return new PreferencesPanel(_kiss, _wxUI);
}
wxBitmapButton* PreferencesPanel::GetButton(int id)
{
if (!_KissButton)
_KissButton = new wxBitmapButton(_wxUI, id, wxBitmap(wxT(PREFS_ICON)), wxDefaultPosition, wxSize(128, 128));
return _KissButton;
}
wxString PreferencesPanel::GetToolTip()
{
return _("Preferences");
} }
void PreferencesPanel::InitAccounts(User* user) void PreferencesPanel::InitAccounts(User* user)
@ -230,6 +238,12 @@ void PreferencesPanel::AddAccount(int line, Account ac)
_accountsGrid->SetReadOnly(line, ACCOUNT_DEFAULT, true); _accountsGrid->SetReadOnly(line, ACCOUNT_DEFAULT, true);
_accountsGrid->SetReadOnly(line, ACCOUNT_BLOCKED, true); _accountsGrid->SetReadOnly(line, ACCOUNT_BLOCKED, true);
} }
else
{
_accountsGrid->SetReadOnly(line, ACCOUNT_DEFAULT, false);
_accountsGrid->SetReadOnly(line, ACCOUNT_BLOCKED, false);
_accountsGrid->SetReadOnly(line, ACCOUNT_DELETE, false);
}
} }
else else
{ {
@ -480,6 +494,7 @@ void PreferencesPanel::OnAccountModified(wxGridEvent& event)
new_account.shared = false; new_account.shared = false;
new_account.blocked = false; new_account.blocked = false;
new_account.is_owner = true;
AddAccount(row, new_account); AddAccount(row, new_account);
_kiss->AddAccount(new_account); _kiss->AddAccount(new_account);
@ -487,7 +502,7 @@ void PreferencesPanel::OnAccountModified(wxGridEvent& event)
_accountsGrid->AppendRows(); _accountsGrid->AppendRows();
new_account.id = wxT("0"); new_account.id = wxT("0");
AddAccount(row, new_account); AddAccount(row+1, new_account);
} }
_wxUI->Layout(); _wxUI->Layout();

View File

@ -31,20 +31,22 @@
#include <wx/colordlg.h> #include <wx/colordlg.h>
#include <wx/fontdlg.h> #include <wx/fontdlg.h>
#include <controller/KissCount.h> #include "view.h"
#include "wxUI.h"
#include <model/model.h> #include <model/model.h>
#include "PasswordDialog.h" #include "PasswordDialog.h"
#include "SupportedLanguages.h" #include "SupportedLanguages.h"
#include "wxGridCellStarEditor.h" #include "wxGridCellStarEditor.h"
class wxUI; class PreferencesPanel: public KissPanel
class KissCount;
class PreferencesPanel: public wxPanel
{ {
public: public:
PreferencesPanel(KissCount* kiss, wxUI *parent); PreferencesPanel(KissCount* kiss, wxUI *parent);
KissPanel* CreatePanel();
wxBitmapButton* GetButton(int id);
wxString GetToolTip();
void OnShow(wxShowEvent& event);
void ChangeUser(); void ChangeUser();
void OnAccountModified(wxGridEvent& event); void OnAccountModified(wxGridEvent& event);
@ -55,12 +57,9 @@ public:
void OnChangePassword(wxCommandEvent& event); void OnChangePassword(wxCommandEvent& event);
void OnOperationOrderChange(wxCommandEvent& event); void OnOperationOrderChange(wxCommandEvent& event);
void OnLanguageChange(wxCommandEvent& event); void OnLanguageChange(wxCommandEvent& event);
void OnShow(wxShowEvent& event);
void OnKillMe(wxCommandEvent& event); void OnKillMe(wxCommandEvent& event);
private: private:
KissCount* _kiss;
wxUI* _wxUI;
wxGrid* _accountsGrid; wxGrid* _accountsGrid;
wxGrid* _categoriesGrid; wxGrid* _categoriesGrid;
wxTextCtrl* _name; wxTextCtrl* _name;

View File

@ -34,7 +34,7 @@ END_EVENT_TABLE()
s.Replace(wxT("\\\'"), wxT("\'"), true); \ s.Replace(wxT("\\\'"), wxT("\'"), true); \
} }
SearchPanel::SearchPanel(KissCount* kiss, wxUI *parent) : wxScrolledWindow(&(*parent)), _kiss(kiss), _wxUI(parent), _operations(NULL) SearchPanel::SearchPanel(KissCount* kiss, wxUI *parent) : KissPanel(kiss, parent), _operations(NULL)
{ {
DEFAULT_FONT(font); DEFAULT_FONT(font);
User* user = _kiss->GetUser(); User* user = _kiss->GetUser();
@ -107,19 +107,16 @@ SearchPanel::SearchPanel(KissCount* kiss, wxUI *parent) : wxScrolledWindow(&(*pa
gridBagSizer->Add(_account, wxGBPosition(1, 7)); gridBagSizer->Add(_account, wxGBPosition(1, 7));
gridBagSizer->Add(_searchButton, wxGBPosition(2, 0)); gridBagSizer->Add(_searchButton, wxGBPosition(2, 0));
vbox->Add(gridBagSizer); vbox->Add(gridBagSizer, 0, wxGROW|wxALL, 5);
vbox->Add(-1, 20);
_grid = new GridAccount(_kiss, this, GRID_ID); _grid = new GridAccount(_kiss, this, GRID_ID);
vbox->Add(_grid); vbox->Add(_grid, 0, wxGROW|wxALL, 5);
Fit(); Fit();
SetMinSize(wxSize(rect.width-rect.x, rect.height-rect.y-128)); SetMinSize(wxSize(rect.width-rect.x-15, rect.height-rect.y-128-25));
SetScrollbars(10, 10, 100/10, 100/10); SetScrollbars(10, 10, 100/10, 100/10);
Hide();
} }
SearchPanel::~SearchPanel() SearchPanel::~SearchPanel()
@ -127,6 +124,24 @@ SearchPanel::~SearchPanel()
if (_operations) delete _operations; if (_operations) delete _operations;
} }
KissPanel* SearchPanel::CreatePanel()
{
return new SearchPanel(_kiss, _wxUI);
}
wxBitmapButton* SearchPanel::GetButton(int id)
{
if (!_KissButton)
_KissButton = new wxBitmapButton(_wxUI, id, wxBitmap(wxT(SEARCH_ICON)), wxDefaultPosition, wxSize(128, 128));
return _KissButton;
}
wxString SearchPanel::GetToolTip()
{
return _("Search");
}
void SearchPanel::OnButtonSearch(wxCommandEvent& event) void SearchPanel::OnButtonSearch(wxCommandEvent& event)
{ {
wxString *description=NULL, *amountFrom=NULL, *amountTo=NULL; wxString *description=NULL, *amountFrom=NULL, *amountTo=NULL;

View File

@ -24,35 +24,33 @@
#include <wx/grid.h> #include <wx/grid.h>
#include <wx/treectrl.h> #include <wx/treectrl.h>
#include <wx/scrolwin.h> #include <wx/scrolwin.h>
#include "view.h"
#include "grid/CalendarEditor.h" #include "grid/CalendarEditor.h"
#include "grid/wxGridCellBitmapRenderer.h" #include "grid/wxGridCellBitmapRenderer.h"
#include "AccountPanel.h"
#include "grid/GridAccount.h" #include "grid/GridAccount.h"
#include "view.h" #include "AccountPanel.h"
#include <controller/KissCount.h>
#include "wxUI.h"
#include <model/model.h> #include <model/model.h>
class wxUI;
class KissCount;
class GridAccount; class GridAccount;
class SearchPanel: public wxScrolledWindow class SearchPanel: public KissPanel
{ {
public: public:
SearchPanel(KissCount* kiss, wxUI *parent); SearchPanel(KissCount* kiss, wxUI *parent);
~SearchPanel(); ~SearchPanel();
KissPanel* CreatePanel();
wxBitmapButton* GetButton(int id);
wxString GetToolTip();
void OnShow(wxShowEvent& event);
void OnButtonSearch(wxCommandEvent& event); void OnButtonSearch(wxCommandEvent& event);
void OnOperationModified(wxGridEvent& event); void OnOperationModified(wxGridEvent& event);
void OnShow(wxShowEvent& event);
void OnCalendarFromChange(wxCalendarEvent& event); void OnCalendarFromChange(wxCalendarEvent& event);
void OnCalendarToChange(wxCalendarEvent& event); void OnCalendarToChange(wxCalendarEvent& event);
private: private:
KissCount* _kiss;
wxUI* _wxUI;
std::vector<Operation> *_operations; std::vector<Operation> *_operations;
wxCalendarCtrl* _calendarFrom, *_calendarTo; wxCalendarCtrl* _calendarFrom, *_calendarTo;
GridAccount *_grid; GridAccount *_grid;

View File

@ -26,7 +26,7 @@ EVT_CHOICE(RANGE_ID, StatsPanel::OnRangeChange)
EVT_CHECKLISTBOX(ACCOUNTS_ID, StatsPanel::OnAccountsChange) EVT_CHECKLISTBOX(ACCOUNTS_ID, StatsPanel::OnAccountsChange)
END_EVENT_TABLE() END_EVENT_TABLE()
StatsPanel::StatsPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*parent)), _kiss(kiss), _wxUI(parent), _plot(NULL), _chart(NULL) StatsPanel::StatsPanel(KissCount* kiss, wxUI *parent) : KissPanel(kiss, parent), _plot(NULL), _chart(NULL)
{ {
wxBoxSizer *hbox = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *hbox = new wxBoxSizer(wxHORIZONTAL);
_hbox2 = new wxBoxSizer(wxHORIZONTAL); _hbox2 = new wxBoxSizer(wxHORIZONTAL);
@ -62,16 +62,13 @@ StatsPanel::StatsPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*parent)), _ki
_monthTo->Select(11); _monthTo->Select(11);
wxStaticText* label = new wxStaticText(this, wxID_ANY, _("From")); wxStaticText* label = new wxStaticText(this, wxID_ANY, _("From"));
hbox->Add(label); hbox->Add(label, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5);
hbox->Add(-1, 10); hbox->Add(_monthFrom, 0, wxRIGHT, 5);
hbox->Add(_monthFrom); hbox->Add(_yearFrom, 0, wxRIGHT, 20);
hbox->Add(_yearFrom);
hbox->Add(-1, 30);
label = new wxStaticText(this, wxID_ANY, _("To")); label = new wxStaticText(this, wxID_ANY, _("To"));
hbox->Add(label); hbox->Add(label, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5);
hbox->Add(-1, 10); hbox->Add(_monthTo, 0, wxRIGHT, 5);
hbox->Add(_monthTo);
hbox->Add(_yearTo); hbox->Add(_yearTo);
_account = new wxCheckListBox(this, ACCOUNTS_ID); _account = new wxCheckListBox(this, ACCOUNTS_ID);
@ -108,9 +105,8 @@ StatsPanel::StatsPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*parent)), _ki
_statsGrid->SetCellAlignment(i, 1, wxALIGN_RIGHT, wxALIGN_CENTRE); _statsGrid->SetCellAlignment(i, 1, wxALIGN_RIGHT, wxALIGN_CENTRE);
} }
_vbox2->Add(_account); _vbox2->Add(_account, 0, wxGROW|wxALL, 5);
_vbox2->Add(-1, 10); _vbox2->Add(_statsGrid, 0, wxALIGN_CENTER_HORIZONTAL|wxGROW|wxALL, 5);
_vbox2->Add(_statsGrid);
_pie = new PiePlot(); _pie = new PiePlot();
@ -135,18 +131,33 @@ StatsPanel::StatsPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*parent)), _ki
chart->SetMinSize(// chart->GetSize() chart->SetMinSize(// chart->GetSize()
wxSize(200,250)); wxSize(200,250));
_vbox2->Add(-1, 10); _vbox2->Add(chart, 0, wxALIGN_CENTER_HORIZONTAL|wxGROW|wxALL, 10);
_vbox2->Add(chart);
vbox->Add(hbox); vbox->Add(hbox, 0, wxALIGN_CENTER_VERTICAL|wxGROW|wxALL, 5);
vbox->Add(_hbox2); vbox->Add(_hbox2, 0, wxGROW|wxALL, 5);
wxCommandEvent event ; wxCommandEvent event ;
OnRangeChange(event); OnRangeChange(event);
Fit(); Fit();
}
Hide(); KissPanel* StatsPanel::CreatePanel()
{
return new StatsPanel(_kiss, _wxUI);
}
wxBitmapButton* StatsPanel::GetButton(int id)
{
if (!_KissButton)
_KissButton = new wxBitmapButton(_wxUI, id, wxBitmap(wxT(STATS_ICON)), wxDefaultPosition, wxSize(128, 128));
return _KissButton;
}
wxString StatsPanel::GetToolTip()
{
return _("Statistics");
} }
void StatsPanel::UpdateStats(int monthFrom, int yearFrom, int monthTo, int yearTo) void StatsPanel::UpdateStats(int monthFrom, int yearFrom, int monthTo, int yearTo)
@ -296,7 +307,7 @@ void StatsPanel::UpdateStats(int monthFrom, int yearFrom, int monthTo, int yearT
_chart->SetMinSize(// chart->GetSize() _chart->SetMinSize(// chart->GetSize()
wxSize(750,550)); wxSize(750,550));
_hbox2->Add(_chart); _hbox2->Add(_chart, 0, wxGROW|wxALL, 5);
total = 0.0; total = 0.0;
for(categoriesIt = categories.begin(); categoriesIt != categories.end(); categoriesIt++) for(categoriesIt = categories.begin(); categoriesIt != categories.end(); categoriesIt++)
@ -318,7 +329,7 @@ void StatsPanel::UpdateStats(int monthFrom, int yearFrom, int monthTo, int yearT
_pie->DatasetChanged(_dataset); _pie->DatasetChanged(_dataset);
_hbox2->Add(_vbox2); _hbox2->Add(_vbox2, 0, wxGROW|wxALL, 5);
Layout(); Layout();
} }

View File

@ -34,24 +34,20 @@
#include <wx/category/categorysimpledataset.h> #include <wx/category/categorysimpledataset.h>
#include <controller/KissCount.h> #include <controller/KissCount.h>
#include "wxUI.h"
#include <model/model.h>
#include "view.h" #include "view.h"
#include <model/model.h>
class wxUI; class StatsPanel: public KissPanel
class KissCount;
class StatsPanel: public wxPanel //public wxScrolledWindow
{ {
public: public:
StatsPanel(KissCount* kiss, wxUI *parent); StatsPanel(KissCount* kiss, wxUI *parent);
//~StatsPanel();
KissPanel* CreatePanel();
wxBitmapButton* GetButton(int id);
wxString GetToolTip();
void OnShow(wxShowEvent& event); void OnShow(wxShowEvent& event);
private: private:
KissCount* _kiss;
wxUI* _wxUI;
wxCalendarCtrl* _calendarFrom, *_calendarTo; wxCalendarCtrl* _calendarFrom, *_calendarTo;
wxChoice* _monthFrom, *_yearFrom, *_monthTo, *_yearTo; wxChoice* _monthFrom, *_yearFrom, *_monthTo, *_yearTo;
wxGrid *_statsGrid; wxGrid *_statsGrid;

View File

@ -33,6 +33,7 @@ UsersDialog::UsersDialog(KissCount* kiss, wxUI *parent) : wxDialog(&(*parent), -
wxStaticText* label; wxStaticText* label;
wxCommandEvent event; wxCommandEvent event;
wxBoxSizer *hbox = new wxBoxSizer(wxHORIZONTAL);
gridBagSizer = new wxGridBagSizer(4, 4); gridBagSizer = new wxGridBagSizer(4, 4);
label = new wxStaticText(this, -1, _("User ")); label = new wxStaticText(this, -1, _("User "));
@ -63,10 +64,11 @@ UsersDialog::UsersDialog(KissCount* kiss, wxUI *parent) : wxDialog(&(*parent), -
_users->Select(0); _users->Select(0);
SetSizer(gridBagSizer); hbox->Add(gridBagSizer, 0, wxGROW|wxALL, 10);
SetSizer(hbox);
_users->SetFocus(); _users->SetFocus();
Layout(); Fit();
Center(); Center();
if (users_list.size() == 0) if (users_list.size() == 0)

View File

@ -38,4 +38,6 @@
#define ABOUT_ICON "ressources/icons/windows-users-icon.png" #define ABOUT_ICON "ressources/icons/windows-users-icon.png"
#define QUIT_ICON "ressources/icons/system-log-out.png" #define QUIT_ICON "ressources/icons/system-log-out.png"
#include "KissPanel.h"
#endif #endif

View File

@ -19,38 +19,64 @@
#include "wxUI.h" #include "wxUI.h"
enum {BUTTON_CHANGE_USER_ID=-4, BUTTON_ABOUT_ID=-5, BUTTON_QUIT_ID=-6};
BEGIN_EVENT_TABLE(wxUI, wxFrame)
EVT_BUTTON(BUTTON_CHANGE_USER_ID, wxUI::OnButtonChangeUser)
EVT_BUTTON(BUTTON_ABOUT_ID, wxUI::OnButtonAbout)
EVT_BUTTON(BUTTON_QUIT_ID, wxUI::OnButtonQuit)
END_EVENT_TABLE()
wxString months[12] ; wxString months[12] ;
wxColour categoryColors[12] = {wxColour(0x00, 0x45, 0x86), wxColour categoryColors[12] = {wxColour(0x00, 0x45, 0x86),
wxColour(0xFF, 0x3E, 0x0E), wxColour(0xFF, 0x3E, 0x0E),
wxColour(0xFF, 0xD3, 0x20), wxColour(0xFF, 0xD3, 0x20),
wxColour(0x58, 0x9D, 0x1B), wxColour(0x58, 0x9D, 0x1B),
wxColour(0x7E, 0x00, 0x21), wxColour(0x7E, 0x00, 0x21),
wxColour(0x83, 0xCC, 0xFF), wxColour(0x83, 0xCC, 0xFF),
wxColour(0x31, 0x40, 0x04), wxColour(0x31, 0x40, 0x04),
wxColour(0xB0, 0xCF, 0x00), wxColour(0xB0, 0xCF, 0x00),
wxColour(0x4B, 0x1F, 0x6F), wxColour(0x4B, 0x1F, 0x6F),
wxColour(0xFF, 0x93, 0x0E), wxColour(0xFF, 0x93, 0x0E),
wxColour(0xC5, 0x00, 0x0D), wxColour(0xC5, 0x00, 0x0D),
wxColour(0x00, 0x84, 0xD1)}; wxColour(0x00, 0x84, 0xD1)};
wxUI::wxUI(KissCount* kiss, const wxString& title, const wxPoint& pos, const wxSize& size) wxUI::wxUI(KissCount* kiss, const wxString& title, const wxPoint& pos, const wxSize& size)
: wxFrame(NULL, wxID_ANY, title, pos, size), _kiss(kiss), _buttonPanel(NULL), _accountPanel(NULL), _statsPanel(NULL), : wxFrame(NULL, -1, title, pos, size), _kiss(kiss),
_searchPanel(NULL), _preferencesPanel(NULL), _curPanel(NULL), _locale(NULL), _needReload(false) _curPanel(NULL), _locale(NULL), _needReload(false)
{ {
_hbox = new wxBoxSizer(wxVERTICAL); _vbox = new wxBoxSizer(wxVERTICAL);
_buttonPanel = new ButtonPanel(_kiss, this); _buttonsBox = new wxBoxSizer(wxHORIZONTAL);
// ButtonPanel* buttons = new ButtonPanel(_kiss, this);
// wxMenu *menuFile = new wxMenu;
SetSizer(_hbox); // menuFile->Append( ID_About, wxT("&About...") );
// menuFile->AppendSeparator();
// menuFile->Append( ID_Quit, wxT("E&xit") );
_hbox->Add(_buttonPanel); // wxMenuBar *menuBar = new wxMenuBar;
// menuBar->Append( menuFile, wxT("&File") );
// SetMenuBar( menuBar );
// CreateStatusBar();
// SetStatusText( wxT("Welcome to wxWidgets!") );
_buttonsBox->Add(new wxBitmapButton(this, BUTTON_CHANGE_USER_ID, wxBitmap(wxT(CHANGE_USER_ICON)), wxDefaultPosition, wxSize(128, 128)));
_buttonsBox->Add(new wxBitmapButton(this, BUTTON_ABOUT_ID, wxBitmap(wxT(ABOUT_ICON)), wxDefaultPosition, wxSize(128, 128)));
_buttonsBox->Add(new wxBitmapButton(this, BUTTON_QUIT_ID, wxBitmap(wxT(QUIT_ICON)), wxDefaultPosition, wxSize(128, 128)));
SetSizer(_vbox);
_vbox->Add(_buttonsBox, 0, wxGROW);
} }
wxUI::~wxUI() wxUI::~wxUI()
{ {
if (_accountPanel) delete _accountPanel; int i;
if (_preferencesPanel) delete _preferencesPanel;
if (_searchPanel) delete _searchPanel; for (i=0; i<(int)_panels.size(); i++)
if (_statsPanel) delete _statsPanel; Disconnect(i, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(wxUI::OnButtonClicked), _panels[i], this);
if (_locale) delete _locale; if (_locale) delete _locale;
} }
@ -64,31 +90,31 @@ bool wxUI::SetLanguage(long language)
// load language if possible, fall back to english otherwise // load language if possible, fall back to english otherwise
if(wxLocale::IsAvailable(language)) if(wxLocale::IsAvailable(language))
{ {
_locale = new wxLocale( language, wxLOCALE_CONV_ENCODING ); _locale = new wxLocale( language, wxLOCALE_CONV_ENCODING );
#ifdef __WXGTK__ #ifdef __WXGTK__
_locale->AddCatalogLookupPathPrefix(wxT("./ressources/po")); _locale->AddCatalogLookupPathPrefix(wxT("./ressources/po"));
#endif #endif
_locale->AddCatalog(wxT("french")); _locale->AddCatalog(wxT("french"));
_locale->AddCatalog(wxT("kisscount")); _locale->AddCatalog(wxT("kisscount"));
_language = (wxLanguage) language; _language = (wxLanguage) language;
} }
if (_locale == NULL || !_locale->IsOk()) if (_locale == NULL || !_locale->IsOk())
{ {
if (_locale) delete _locale; if (_locale) delete _locale;
_locale = new wxLocale(); _locale = new wxLocale();
#ifdef __WXGTK__ #ifdef __WXGTK__
_locale->AddCatalogLookupPathPrefix(wxT("./ressources/po")); _locale->AddCatalogLookupPathPrefix(wxT("./ressources/po"));
#endif #endif
_locale->AddCatalog(wxT("kisscount")); _locale->AddCatalog(wxT("kisscount"));
_language = wxLANGUAGE_ENGLISH; _language = wxLANGUAGE_ENGLISH;
res = false; res = false;
} }
months[0] = _("january"); months[0] = _("january");
@ -104,30 +130,107 @@ bool wxUI::SetLanguage(long language)
months[10] = _("november"); months[10] = _("november");
months[11] = _("december") ; months[11] = _("december") ;
if (_buttonPanel)
_buttonPanel->SetToolTips();
return res; return res;
} }
void wxUI::ShowAccount() #define ADD_PANEL(panelName, id) \
panel = new panelName(_kiss, this); \
button = panel->GetButton(id); \
button->SetToolTip(panel->GetToolTip()); \
_buttonsBox->Insert(id, button); \
_buttons.insert(_buttons.begin()+id, button); \
_panels.push_back(panel); \
Connect(id, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(wxUI::OnButtonClicked), panel, this);
void wxUI::InitPanels()
{ {
ShowPanel(_accountPanel); KissPanel* panel;
wxBitmapButton* button;
_panels.clear();
ADD_PANEL(AccountPanel, 0);
ADD_PANEL(StatsPanel, 1);
ADD_PANEL(SearchPanel, 2);
ADD_PANEL(PreferencesPanel, 3);
} }
void wxUI::ShowSearch() void wxUI::LoadPanels()
{ {
ShowPanel(_searchPanel); std::vector<KissPanel*>::iterator it;
KissPanel* temp;
int i;
if (_curPanel)
{
_vbox->Detach(_curPanel);
_curPanel = NULL;
}
if (_panels.size())
{
for (i=0; i<(int)_panels.size(); i++)
{
temp = _panels[i]->CreatePanel();
Disconnect(i, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(wxUI::OnButtonClicked), _panels[i], this);
_panels[i] = temp;
Connect(i, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(wxUI::OnButtonClicked), temp, this);
_buttons[i]->SetToolTip(temp->GetToolTip());
}
}
else
InitPanels();
} }
void wxUI::ShowStats() void wxUI::LoadUser()
{ {
ShowPanel(_statsPanel); User* user = _kiss->GetUser();
LoadPanels();
if (user->_preferences[wxT("language")] != wxT(""))
SetLanguage(user->GetLanguage());
if (_panels.size())
ShowPanel(_panels[0]);
} }
void wxUI::ShowPreferences() void wxUI::ShowPanel(KissPanel* panel)
{ {
ShowPanel(_preferencesPanel); wxShowEvent event;
int i;
if (!panel) return;
if (_curPanel)
{
_vbox->Detach(_curPanel);
_curPanel->Hide();
}
if (_needReload)
{
for(i=0; i<(int)_panels.size(); i++)
if (_panels[i] == panel) break;
LoadPanels();
_needReload = false;
_curPanel = _panels[i];
}
else
_curPanel = panel;
_curPanel->OnShow(event);
_vbox->Add(_curPanel);
_curPanel->Show();
Layout();
}
void wxUI::OnButtonClicked(wxCommandEvent& event)
{
ShowPanel(_panels[event.GetId()]);
}
void wxUI::OnButtonChangeUser(wxCommandEvent& event)
{
ChangeUser();
} }
void wxUI::ChangeUser() void wxUI::ChangeUser()
@ -135,151 +238,47 @@ void wxUI::ChangeUser()
UsersDialog u(_kiss, this); UsersDialog u(_kiss, this);
} }
void wxUI::LoadUser() void wxUI::OnButtonAbout(wxCommandEvent& event)
{ {
User* user = _kiss->GetUser(); wxMessageBox( _("Personal accounting software\n\nhttp://indefero.soutade.fr/p/kisscount/\n\nLicenced under GNU GPL v3\n\nCopyright (C) 2010 Grégory Soutadé"),
wxShowEvent event; wxT("KissCount " APP_VERSION "\n\n"),
wxOK | wxICON_INFORMATION, this );
if (_curPanel)
{
_hbox->Detach(_curPanel);
_curPanel = NULL;
}
if (_accountPanel)
delete _accountPanel;
if (_preferencesPanel)
delete _preferencesPanel;
if (_searchPanel)
delete _searchPanel;
if (_statsPanel)
delete _statsPanel;
if (user->_preferences[wxT("language")].Length())
SetLanguage(user->GetLanguage());
_accountPanel = new AccountPanel(_kiss, this);
_statsPanel = new StatsPanel(_kiss, this);
_searchPanel = new SearchPanel(_kiss, this);
_preferencesPanel = new PreferencesPanel(_kiss, this);
ShowPanel(_accountPanel);
_accountPanel->OnShow(event);
} }
void wxUI::ShowPanel(wxPanel* panel) void wxUI::OnButtonQuit(wxCommandEvent& event)
{ {
int month, year=-1, account=0, preferences=0, search=0, stats=0; wxMessageDialog dialog(this, _("Quit KissCount ?"), wxT("KissCount"), wxYES_NO);
wxShowEvent event; if (dialog.ShowModal() == wxID_NO)
if (!panel || (panel == _curPanel && !_needReload)) return;
if (_curPanel)
{ {
_hbox->Detach(_curPanel); return;
_curPanel->Hide();
} }
if (_needReload) Close(true);
{
if (panel == _accountPanel)
{
account = 1;
month = _accountPanel->_curMonth;
year = _accountPanel->_curYear;
}
if (panel == _preferencesPanel)
{
preferences = 1;
}
if (panel == _searchPanel)
{
search = 1;
}
if (panel == _statsPanel)
{
stats = 1;
}
delete _accountPanel;
delete _preferencesPanel;
delete _searchPanel;
delete _statsPanel;
_accountPanel = new AccountPanel(_kiss, this);
if (year != -1)
{
_kiss->LoadYear(year, true);
_accountPanel->ShowMonth(month, year);
}
_preferencesPanel = new PreferencesPanel(_kiss, this);
_searchPanel = new SearchPanel(_kiss, this);
_statsPanel = new StatsPanel(_kiss, this);
if (account)
{
_accountPanel->OnShow(event);
panel = _accountPanel;
}
else if (preferences)
{
_preferencesPanel->OnShow(event);
panel = _preferencesPanel;
}
else if (search)
{
_searchPanel->OnShow(event);
panel = _searchPanel;
}
else if (stats)
{
_statsPanel->OnShow(event);
panel = _statsPanel;
}
_hbox->Detach(_accountPanel);
_accountPanel->Hide();
_needReload = false;
}
_curPanel = panel;
_hbox->Add(panel);
_curPanel->Show();
Layout();
} }
void wxUI::GenerateMonth(int month, int year) void wxUI::GenerateMonth(int month, int year)
{ {
_accountPanel->GenerateMonth(month, year); ((AccountPanel*)_panels[0])->GenerateMonth(month, year);
} }
void wxUI::KillMe() void wxUI::KillMe()
{ {
std::vector<KissPanel*>::iterator it;
if (_curPanel) if (_curPanel)
{ {
_hbox->Detach(_curPanel); _vbox->Detach(_curPanel);
_curPanel = NULL; _curPanel = NULL;
} }
if (_accountPanel) for (it=_panels.begin(); it!= _panels.end(); it++)
delete _accountPanel; {
if (*it) delete *it;
_buttonsBox->Remove(0);
_buttons.erase(_buttons.begin());
}
if (_preferencesPanel) _panels.clear();
delete _preferencesPanel;
if (_searchPanel)
delete _searchPanel;
_accountPanel = NULL;
_preferencesPanel = NULL;
_searchPanel = NULL;
} }
void wxUI::NeedReload() void wxUI::NeedReload()

View File

@ -22,7 +22,6 @@
#include <wx/wx.h> #include <wx/wx.h>
#include "AccountPanel.h" #include "AccountPanel.h"
#include "ButtonPanel.h"
#include "PreferencesPanel.h" #include "PreferencesPanel.h"
#include "UsersDialog.h" #include "UsersDialog.h"
#include "GenerateDialog.h" #include "GenerateDialog.h"
@ -35,10 +34,8 @@
#include "grid/wxGridCellButtonEditor.h" #include "grid/wxGridCellButtonEditor.h"
class KissCount; class KissCount;
class ButtonPanel;
class AccountPanel; class AccountPanel;
class PreferencesPanel; class PreferencesPanel;
class StatsPanel;
extern wxString months[12]; extern wxString months[12];
extern wxColour categoryColors[12]; extern wxColour categoryColors[12];
@ -56,29 +53,35 @@ public:
void LoadUser(); void LoadUser();
void ShowAccount(); void ShowAccount();
void ShowStats();
void ShowSearch(); void ShowSearch();
void ShowPreferences(); void ShowPreferences();
void GenerateMonth(int month, int year); void GenerateMonth(int month, int year);
void KillMe(); void KillMe();
void ShowPanel(wxPanel* panel); void ShowPanel(KissPanel* panel);
void NeedReload(); void NeedReload();
wxLanguage _language; wxLanguage _language;
void OnButtonClicked(wxCommandEvent& event);
void OnButtonChangeUser(wxCommandEvent& event);
void OnButtonAbout(wxCommandEvent& event);
void OnButtonQuit(wxCommandEvent& event);
private: private:
KissCount *_kiss; KissCount *_kiss;
wxBoxSizer *_hbox; wxBoxSizer *_vbox, *_buttonsBox;
ButtonPanel *_buttonPanel; KissPanel *_curPanel;
AccountPanel *_accountPanel; std::vector<KissPanel*> _panels;
StatsPanel *_statsPanel; std::vector<wxBitmapButton*> _buttons;
SearchPanel *_searchPanel;
PreferencesPanel *_preferencesPanel;
wxPanel *_curPanel;
wxLocale *_locale; wxLocale *_locale;
bool _needReload; bool _needReload;
void InitPanels();
void LoadPanels();
DECLARE_EVENT_TABLE();
}; };
#endif #endif