diff --git a/src/view/ButtonPanel.cpp b/src/view/ButtonPanel.cpp
deleted file mode 100644
index e145ea5..0000000
--- a/src/view/ButtonPanel.cpp
+++ /dev/null
@@ -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 .
-*/
-
-#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);
-}
diff --git a/src/view/ButtonPanel.h b/src/view/ButtonPanel.h
deleted file mode 100644
index 6b93c2b..0000000
--- a/src/view/ButtonPanel.h
+++ /dev/null
@@ -1,64 +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 .
-*/
-
-#ifndef BUTTONPANEL_H
-#define BUTTONPANEL_H
-
-#include
-
-#include
-#include "wxUI.h"
-
-#include "view.h"
-
-class KissCount;
-class wxUI;
-
-class ButtonPanel: public wxPanel
-{
-public:
-
- ButtonPanel(KissCount* kiss, wxUI *parent);
- ~ButtonPanel();
-
- void SetToolTips();
-
- 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;
- wxUI* _wxUI;
- wxBitmapButton* _account;
- wxBitmapButton* _stats;
- wxBitmapButton* _search;
- wxBitmapButton* _prefs;
- wxBitmapButton* _changeUser;
- wxBitmapButton* _about;
- wxBitmapButton* _quit;
-
- DECLARE_EVENT_TABLE();
-};
-
-#endif
diff --git a/src/view/wxUI.cpp b/src/view/wxUI.cpp
index d5e17a4..c2a5f76 100644
--- a/src/view/wxUI.cpp
+++ b/src/view/wxUI.cpp
@@ -19,38 +19,64 @@
#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] ;
wxColour categoryColors[12] = {wxColour(0x00, 0x45, 0x86),
- wxColour(0xFF, 0x3E, 0x0E),
- wxColour(0xFF, 0xD3, 0x20),
- wxColour(0x58, 0x9D, 0x1B),
- wxColour(0x7E, 0x00, 0x21),
- wxColour(0x83, 0xCC, 0xFF),
- wxColour(0x31, 0x40, 0x04),
- wxColour(0xB0, 0xCF, 0x00),
- wxColour(0x4B, 0x1F, 0x6F),
- wxColour(0xFF, 0x93, 0x0E),
- wxColour(0xC5, 0x00, 0x0D),
- wxColour(0x00, 0x84, 0xD1)};
+ wxColour(0xFF, 0x3E, 0x0E),
+ wxColour(0xFF, 0xD3, 0x20),
+ wxColour(0x58, 0x9D, 0x1B),
+ wxColour(0x7E, 0x00, 0x21),
+ wxColour(0x83, 0xCC, 0xFF),
+ wxColour(0x31, 0x40, 0x04),
+ wxColour(0xB0, 0xCF, 0x00),
+ wxColour(0x4B, 0x1F, 0x6F),
+ wxColour(0xFF, 0x93, 0x0E),
+ wxColour(0xC5, 0x00, 0x0D),
+ wxColour(0x00, 0x84, 0xD1)};
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),
- _searchPanel(NULL), _preferencesPanel(NULL), _curPanel(NULL), _locale(NULL), _needReload(false)
+ : wxFrame(NULL, -1, title, pos, size), _kiss(kiss),
+ _curPanel(NULL), _locale(NULL), _needReload(false)
{
- _hbox = new wxBoxSizer(wxVERTICAL);
- _buttonPanel = new ButtonPanel(_kiss, this);
+ _vbox = new wxBoxSizer(wxVERTICAL);
+ _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()
{
- if (_accountPanel) delete _accountPanel;
- if (_preferencesPanel) delete _preferencesPanel;
- if (_searchPanel) delete _searchPanel;
- if (_statsPanel) delete _statsPanel;
+ int i;
+
+ for (i=0; i<(int)_panels.size(); i++)
+ Disconnect(i, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(wxUI::OnButtonClicked), _panels[i], this);
+
if (_locale) delete _locale;
}
@@ -64,31 +90,31 @@ bool wxUI::SetLanguage(long language)
// load language if possible, fall back to english otherwise
if(wxLocale::IsAvailable(language))
{
- _locale = new wxLocale( language, wxLOCALE_CONV_ENCODING );
+ _locale = new wxLocale( language, wxLOCALE_CONV_ENCODING );
#ifdef __WXGTK__
- _locale->AddCatalogLookupPathPrefix(wxT("./ressources/po"));
+ _locale->AddCatalogLookupPathPrefix(wxT("./ressources/po"));
#endif
- _locale->AddCatalog(wxT("french"));
- _locale->AddCatalog(wxT("kisscount"));
+ _locale->AddCatalog(wxT("french"));
+ _locale->AddCatalog(wxT("kisscount"));
- _language = (wxLanguage) language;
+ _language = (wxLanguage) language;
}
if (_locale == NULL || !_locale->IsOk())
{
- if (_locale) delete _locale;
- _locale = new wxLocale();
+ if (_locale) delete _locale;
+ _locale = new wxLocale();
#ifdef __WXGTK__
- _locale->AddCatalogLookupPathPrefix(wxT("./ressources/po"));
+ _locale->AddCatalogLookupPathPrefix(wxT("./ressources/po"));
#endif
- _locale->AddCatalog(wxT("kisscount"));
+ _locale->AddCatalog(wxT("kisscount"));
- _language = wxLANGUAGE_ENGLISH;
- res = false;
+ _language = wxLANGUAGE_ENGLISH;
+ res = false;
}
months[0] = _("january");
@@ -104,30 +130,108 @@ bool wxUI::SetLanguage(long language)
months[10] = _("november");
months[11] = _("december") ;
- if (_buttonPanel)
- _buttonPanel->SetToolTips();
-
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::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);
+ std::cout << temp->GetToolTip().mb_str() << "\n";
+ _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()
@@ -135,151 +239,47 @@ void wxUI::ChangeUser()
UsersDialog u(_kiss, this);
}
-void wxUI::LoadUser()
+void wxUI::OnButtonAbout(wxCommandEvent& event)
{
- User* user = _kiss->GetUser();
- wxShowEvent event;
-
- 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);
+ 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, this );
}
-void wxUI::ShowPanel(wxPanel* panel)
+void wxUI::OnButtonQuit(wxCommandEvent& event)
{
- int month, year=-1, account=0, preferences=0, search=0, stats=0;
- wxShowEvent event;
-
- if (!panel || (panel == _curPanel && !_needReload)) return;
-
- if (_curPanel)
+ wxMessageDialog dialog(this, _("Quit KissCount ?"), wxT("KissCount"), wxYES_NO);
+ if (dialog.ShowModal() == wxID_NO)
{
- _hbox->Detach(_curPanel);
- _curPanel->Hide();
+ return;
}
- if (_needReload)
- {
- 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, 1, wxGROW|wxALL, 0);
- _curPanel->Show();
- Layout();
+ Close(true);
}
void wxUI::GenerateMonth(int month, int year)
{
- _accountPanel->GenerateMonth(month, year);
+ ((AccountPanel*)_panels[0])->GenerateMonth(month, year);
}
void wxUI::KillMe()
{
+ std::vector::iterator it;
+
if (_curPanel)
{
- _hbox->Detach(_curPanel);
- _curPanel = NULL;
+ _vbox->Detach(_curPanel);
+ _curPanel = NULL;
}
- if (_accountPanel)
- delete _accountPanel;
+ for (it=_panels.begin(); it!= _panels.end(); it++)
+ {
+ if (*it) delete *it;
+ _buttonsBox->Remove(0);
+ _buttons.erase(_buttons.begin());
+ }
- if (_preferencesPanel)
- delete _preferencesPanel;
-
- if (_searchPanel)
- delete _searchPanel;
-
- _accountPanel = NULL;
- _preferencesPanel = NULL;
- _searchPanel = NULL;
+ _panels.clear();
}
void wxUI::NeedReload()
diff --git a/src/view/wxUI.h b/src/view/wxUI.h
index b42684f..9522c70 100644
--- a/src/view/wxUI.h
+++ b/src/view/wxUI.h
@@ -22,7 +22,6 @@
#include
#include "AccountPanel.h"
-#include "ButtonPanel.h"
#include "PreferencesPanel.h"
#include "UsersDialog.h"
#include "GenerateDialog.h"
@@ -35,10 +34,8 @@
#include "grid/wxGridCellButtonEditor.h"
class KissCount;
-class ButtonPanel;
class AccountPanel;
class PreferencesPanel;
-class StatsPanel;
extern wxString months[12];
extern wxColour categoryColors[12];
@@ -56,29 +53,35 @@ public:
void LoadUser();
void ShowAccount();
- void ShowStats();
void ShowSearch();
void ShowPreferences();
void GenerateMonth(int month, int year);
void KillMe();
- void ShowPanel(wxPanel* panel);
+ void ShowPanel(KissPanel* panel);
void NeedReload();
wxLanguage _language;
+ void OnButtonClicked(wxCommandEvent& event);
+ void OnButtonChangeUser(wxCommandEvent& event);
+ void OnButtonAbout(wxCommandEvent& event);
+ void OnButtonQuit(wxCommandEvent& event);
+
private:
KissCount *_kiss;
- wxBoxSizer *_hbox;
- ButtonPanel *_buttonPanel;
- AccountPanel *_accountPanel;
- StatsPanel *_statsPanel;
- SearchPanel *_searchPanel;
- PreferencesPanel *_preferencesPanel;
- wxPanel *_curPanel;
+ wxBoxSizer *_vbox, *_buttonsBox;
+ KissPanel *_curPanel;
+ std::vector _panels;
+ std::vector _buttons;
wxLocale *_locale;
bool _needReload;
+
+ void InitPanels();
+ void LoadPanels();
+
+ DECLARE_EVENT_TABLE();
};
#endif