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)
Auto completion (already up into wxwidgets 2.9)
Using tabulation to navigate throw interface (Search Panel)
Improve Scrolled Windows and widgets placement
Can type a letter with a comboboxes
Windows version
Need packaging (.deb)

View File

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

View File

@ -38,7 +38,7 @@ EVT_BUTTON(GROUP_ID, AccountPanel::OnGroup)
EVT_BUTTON(UNGROUP_ID, AccountPanel::OnUnGroup)
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 *hbox2 = new wxBoxSizer(wxHORIZONTAL);
@ -126,32 +126,27 @@ AccountPanel::AccountPanel(KissCount* kiss, wxUI *parent) : wxScrolledWindow(&(*
wxButton* buttonGroup = new wxButton(this, GROUP_ID, _("Group"));
wxButton* buttonUnGroup = new wxButton(this, UNGROUP_ID, _("UnGroup"));
vbox3->Add(&_tree, 0);
vbox3->Add(-1, 30);
vbox3->Add(buttonGroup, 0);
vbox3->Add(-1, 10);
vbox3->Add(buttonUnGroup, 0);
vbox3->Add(&_tree, 0, wxGROW|wxALL, 2);
vbox3->Add(buttonGroup, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 10);
vbox3->Add(buttonUnGroup, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 10);
hbox->Add(vbox3, 0);
hbox2->Add(_accountsGrid, 0);
hbox2->Add(_calendar, 0);
hbox->Add(vbox3, 0, wxGROW|wxALL, 2);
hbox2->Add(_accountsGrid, 0, wxGROW|wxALL, 2);
hbox2->Add(_calendar, 0, wxALL, 2);
vbox2->Add(hbox2, 0);
vbox2->Add(-1, 10);
vbox2->Add(_grid, 0);
hbox->Add(vbox2, 0);
vbox->Add(_statsGrid, 0);
vbox->Add(-1, 10);
vbox->Add(chart, 0);
hbox->Add(-1, 10);
vbox->Add(_checkCheckMode, 0);
hbox->Add(-1, 10);
hbox->Add(vbox, 0);
vbox2->Add(_grid, 0, wxGROW|wxALL, 2);
hbox->Add(vbox2, 0, wxGROW|wxALL, 2);
vbox->Add(_statsGrid, 0, wxGROW);
vbox->Add(chart, 0, wxALIGN_CENTER_HORIZONTAL|wxUP, 10);
vbox->Add(_checkCheckMode, 0, wxALIGN_CENTER_HORIZONTAL|wxUP, 10);
hbox->Add(vbox, 0, wxGROW|wxALL, 2);
ChangeUser();
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);
}
@ -162,6 +157,24 @@ AccountPanel::~AccountPanel()
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)
{
int i;
@ -561,6 +574,8 @@ void AccountPanel::UpdateStats()
void AccountPanel::OnOperationModified(wxGridEvent& event)
{
UpdateStats();
Fit();
}
void AccountPanel::OnAccountModified(wxGridEvent& event)

View File

@ -25,26 +25,27 @@
#include <wx/treectrl.h>
#include <wx/pie/pieplot.h>
#include <wx/chartpanel.h>
#include <wx/scrolwin.h>
#include "grid/CalendarEditor.h"
#include "grid/wxGridCellBitmapRenderer.h"
#include "view.h"
#include <controller/KissCount.h>
#include "wxUI.h"
#include <model/model.h>
#include "grid/GridAccount.h"
#include <wx/category/categorysimpledataset.h>
class wxUI;
class KissCount;
class AccountPanel: public wxScrolledWindow
class AccountPanel: public KissPanel
{
public:
AccountPanel(KissCount* kiss, wxUI *parent);
~AccountPanel();
KissPanel* CreatePanel();
wxBitmapButton* GetButton(int id);
wxString GetToolTip();
void OnShow(wxShowEvent& event);
void ChangeUser();
void LoadYear(int year, bool showMonth=true);
void ShowMonth(int month, int year);
@ -56,7 +57,6 @@ public:
void OnTreeChange(wxTreeEvent& event);
void OnMenuGenerate(wxCommandEvent& event);
void OnMenuDelete(wxCommandEvent& event);
void OnShow(wxShowEvent& event);
void OnCalendarChange(wxCalendarEvent& event);
void OnCheckMode(wxCommandEvent& event);
void OnGroup(wxCommandEvent& event);
@ -65,8 +65,6 @@ public:
int _curMonth, _curYear;
private:
KissCount* _kiss;
wxUI* _wxUI;
wxTreeCtrl _tree;
wxCalendarCtrl* _calendar;
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/>.
*/
#ifndef BUTTONPANEL_H
#define BUTTONPANEL_H
#ifndef KISSPANEL_H
#define KISSPANEL_H
#include <wx/wx.h>
#include <wx/scrolwin.h>
#include <wx/bmpbuttn.h>
#include <controller/KissCount.h>
#include "wxUI.h"
#include "view.h"
class KissCount;
class wxUI;
class KissCount;
class ButtonPanel: public wxPanel
class KissPanel: public wxScrolledWindow
{
public:
KissPanel(KissCount* kiss, wxUI* parent) :
wxScrolledWindow((wxFrame*)parent),
_kiss(kiss),
_wxUI(parent),
_KissButton(NULL)
{Hide();}
ButtonPanel(KissCount* kiss, wxUI *parent);
~ButtonPanel();
virtual void OnShow(wxShowEvent& event)=0;
virtual KissPanel* CreatePanel()=0;
virtual wxBitmapButton* GetButton(int id) {return NULL;}
virtual wxString GetToolTip() {return wxT("");}
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:
protected:
KissCount* _kiss;
wxUI* _wxUI;
wxBitmapButton* _account;
wxBitmapButton* _stats;
wxBitmapButton* _search;
wxBitmapButton* _prefs;
wxBitmapButton* _changeUser;
wxBitmapButton* _about;
wxBitmapButton* _quit;
DECLARE_EVENT_TABLE();
wxBitmapButton* _KissButton;
};
#endif

View File

@ -38,7 +38,7 @@ EVT_CHECKLISTBOX(SHARED_WITH_ID, PreferencesPanel::OnSharedChange)
EVT_SHOW(PreferencesPanel::OnShow)
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 *hbox1 = new wxBoxSizer(wxHORIZONTAL);
@ -65,8 +65,8 @@ PreferencesPanel::PreferencesPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*p
// User
staticBoxSizer = new wxStaticBoxSizer (staticUser, wxVERTICAL);
gridBagSizer = new wxGridBagSizer(10, 10);
staticBoxSizer->Add(gridBagSizer);
gridBagSizer = new wxGridBagSizer(2, 3);
staticBoxSizer->Add(gridBagSizer, 0, wxGROW|wxALL, 2);
label = new wxStaticText(this, wxID_ANY, _("Name"));
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(killMe, wxGBPosition(1, 2));
vbox->Add(staticBoxSizer);
vbox->Add(-1, 20);
vbox->Add(staticBoxSizer, 0, wxALL, 10);
// Account
staticBoxSizer = new wxStaticBoxSizer (staticAccount, wxVERTICAL);
@ -96,15 +95,14 @@ PreferencesPanel::PreferencesPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*p
InitAccounts(user);
staticBoxSizer->Add(_accountsGrid);
staticBoxSizer->Add(_accountsGrid, 0, wxGROW|wxALL, 2);
hbox1->Add(staticBoxSizer);
hbox1->Add(-1, 20);
hbox1->Add(staticBoxSizer, 0, wxALL);
staticBoxSizer = new wxStaticBoxSizer (staticSharedWith, wxVERTICAL);
_sharedWith = new wxCheckListBox(this, SHARED_WITH_ID);
staticBoxSizer->Add(_sharedWith);
staticBoxSizer->Add(_sharedWith, 0, wxGROW);
users = _kiss->GetUsers();
@ -114,8 +112,8 @@ PreferencesPanel::PreferencesPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*p
_sharedWith->Enable(false);
hbox1->Add(staticBoxSizer);
hbox1->Add(-1, 20);
hbox1->Add(staticBoxSizer, 0, wxLEFT, 5);
vbox->Add(hbox1, 0, wxGROW|wxALL, 10);
// Categories
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);
}
staticBoxSizer->Add(_categoriesGrid);
staticBoxSizer->Add(_categoriesGrid, 0, wxGROW|wxALL, 2);
InitCategories(user);
vbox->Add(hbox1);
vbox->Add(-1, 20);
vbox->Add(staticBoxSizer);
vbox->Add(-1, 20);
vbox->Add(staticBoxSizer, 0, wxALL, 10);
// Operation Order
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->SetWindowStyle(wxCB_READONLY);
staticBoxSizer->Add(_operationOrder);
staticBoxSizer->Add(_operationOrder, 0, wxGROW|wxALL, 2);
hbox2->Add(staticBoxSizer);
hbox2->Add(-1, 20);
hbox2->Add(staticBoxSizer, 0);
InitOperationOrder(user);
@ -155,21 +148,36 @@ PreferencesPanel::PreferencesPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*p
_language = new wxBitmapComboBox(this, LANGUAGE_ID);
_language->SetWindowStyle(wxCB_READONLY);
staticBoxSizer->Add(_language);
staticBoxSizer->Add(_language, 0, wxGROW|wxALL, 2);
hbox2->Add(staticBoxSizer);
hbox2->Add(-1, 20);
hbox2->Add(staticBoxSizer, 0, wxLEFT, 10);
InitLanguage(user);
_language->Fit();
vbox->Add(hbox2);
vbox->Add(hbox2, 0, wxALL, 10);
Fit();
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)
@ -230,6 +238,12 @@ void PreferencesPanel::AddAccount(int line, Account ac)
_accountsGrid->SetReadOnly(line, ACCOUNT_DEFAULT, 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
{
@ -480,6 +494,7 @@ void PreferencesPanel::OnAccountModified(wxGridEvent& event)
new_account.shared = false;
new_account.blocked = false;
new_account.is_owner = true;
AddAccount(row, new_account);
_kiss->AddAccount(new_account);
@ -487,7 +502,7 @@ void PreferencesPanel::OnAccountModified(wxGridEvent& event)
_accountsGrid->AppendRows();
new_account.id = wxT("0");
AddAccount(row, new_account);
AddAccount(row+1, new_account);
}
_wxUI->Layout();

View File

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

View File

@ -34,7 +34,7 @@ END_EVENT_TABLE()
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);
User* user = _kiss->GetUser();
@ -107,19 +107,16 @@ SearchPanel::SearchPanel(KissCount* kiss, wxUI *parent) : wxScrolledWindow(&(*pa
gridBagSizer->Add(_account, wxGBPosition(1, 7));
gridBagSizer->Add(_searchButton, wxGBPosition(2, 0));
vbox->Add(gridBagSizer);
vbox->Add(-1, 20);
vbox->Add(gridBagSizer, 0, wxGROW|wxALL, 5);
_grid = new GridAccount(_kiss, this, GRID_ID);
vbox->Add(_grid);
vbox->Add(_grid, 0, wxGROW|wxALL, 5);
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);
Hide();
}
SearchPanel::~SearchPanel()
@ -127,6 +124,24 @@ SearchPanel::~SearchPanel()
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)
{
wxString *description=NULL, *amountFrom=NULL, *amountTo=NULL;

View File

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

View File

@ -26,7 +26,7 @@ EVT_CHOICE(RANGE_ID, StatsPanel::OnRangeChange)
EVT_CHECKLISTBOX(ACCOUNTS_ID, StatsPanel::OnAccountsChange)
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);
_hbox2 = new wxBoxSizer(wxHORIZONTAL);
@ -62,16 +62,13 @@ StatsPanel::StatsPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*parent)), _ki
_monthTo->Select(11);
wxStaticText* label = new wxStaticText(this, wxID_ANY, _("From"));
hbox->Add(label);
hbox->Add(-1, 10);
hbox->Add(_monthFrom);
hbox->Add(_yearFrom);
hbox->Add(label, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5);
hbox->Add(_monthFrom, 0, wxRIGHT, 5);
hbox->Add(_yearFrom, 0, wxRIGHT, 20);
hbox->Add(-1, 30);
label = new wxStaticText(this, wxID_ANY, _("To"));
hbox->Add(label);
hbox->Add(-1, 10);
hbox->Add(_monthTo);
hbox->Add(label, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5);
hbox->Add(_monthTo, 0, wxRIGHT, 5);
hbox->Add(_yearTo);
_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);
}
_vbox2->Add(_account);
_vbox2->Add(-1, 10);
_vbox2->Add(_statsGrid);
_vbox2->Add(_account, 0, wxGROW|wxALL, 5);
_vbox2->Add(_statsGrid, 0, wxALIGN_CENTER_HORIZONTAL|wxGROW|wxALL, 5);
_pie = new PiePlot();
@ -135,18 +131,33 @@ StatsPanel::StatsPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*parent)), _ki
chart->SetMinSize(// chart->GetSize()
wxSize(200,250));
_vbox2->Add(-1, 10);
_vbox2->Add(chart);
_vbox2->Add(chart, 0, wxALIGN_CENTER_HORIZONTAL|wxGROW|wxALL, 10);
vbox->Add(hbox);
vbox->Add(_hbox2);
vbox->Add(hbox, 0, wxALIGN_CENTER_VERTICAL|wxGROW|wxALL, 5);
vbox->Add(_hbox2, 0, wxGROW|wxALL, 5);
wxCommandEvent event ;
OnRangeChange(event);
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)
@ -296,7 +307,7 @@ void StatsPanel::UpdateStats(int monthFrom, int yearFrom, int monthTo, int yearT
_chart->SetMinSize(// chart->GetSize()
wxSize(750,550));
_hbox2->Add(_chart);
_hbox2->Add(_chart, 0, wxGROW|wxALL, 5);
total = 0.0;
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);
_hbox2->Add(_vbox2);
_hbox2->Add(_vbox2, 0, wxGROW|wxALL, 5);
Layout();
}

View File

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

View File

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

View File

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

View File

@ -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,107 @@ 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<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()
@ -135,151 +238,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);
_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<KissPanel*>::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()

View File

@ -22,7 +22,6 @@
#include <wx/wx.h>
#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<KissPanel*> _panels;
std::vector<wxBitmapButton*> _buttons;
wxLocale *_locale;
bool _needReload;
void InitPanels();
void LoadPanels();
DECLARE_EVENT_TABLE();
};
#endif