2010-07-10 16:34:30 +02:00
|
|
|
/*
|
2010-08-26 21:28:15 +02:00
|
|
|
Copyright 2010 Grégory Soutadé
|
2010-07-10 16:34:30 +02:00
|
|
|
|
2010-08-26 21:28:15 +02:00
|
|
|
This file is part of KissCount.
|
2010-07-10 16:34:30 +02:00
|
|
|
|
2010-08-26 21:28:15 +02:00
|
|
|
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.
|
2010-07-10 16:34:30 +02:00
|
|
|
|
2010-08-26 21:28:15 +02:00
|
|
|
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.
|
2010-07-10 16:34:30 +02:00
|
|
|
|
2010-08-26 21:28:15 +02:00
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with KissCount. If not, see <http://www.gnu.org/licenses/>.
|
2010-07-10 16:34:30 +02:00
|
|
|
*/
|
|
|
|
|
2010-05-14 15:04:01 +02:00
|
|
|
#include "wxUI.h"
|
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
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()
|
|
|
|
|
2010-07-04 19:39:39 +02:00
|
|
|
wxString months[12] ;
|
2010-08-17 18:59:19 +02:00
|
|
|
wxColour categoryColors[12] = {wxColour(0x00, 0x45, 0x86),
|
2010-12-20 19:28:24 +01:00
|
|
|
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)};
|
2010-05-16 10:35:34 +02:00
|
|
|
|
2010-05-14 15:04:01 +02:00
|
|
|
wxUI::wxUI(KissCount* kiss, const wxString& title, const wxPoint& pos, const wxSize& size)
|
2010-12-20 19:28:24 +01:00
|
|
|
: wxFrame(NULL, -1, title, pos, size), _kiss(kiss),
|
|
|
|
_curPanel(NULL), _locale(NULL), _needReload(false)
|
2010-05-14 15:04:01 +02:00
|
|
|
{
|
2010-12-20 19:28:24 +01:00
|
|
|
_vbox = new wxBoxSizer(wxVERTICAL);
|
|
|
|
_buttonsBox = new wxBoxSizer(wxHORIZONTAL);
|
|
|
|
// ButtonPanel* buttons = new ButtonPanel(_kiss, this);
|
|
|
|
// wxMenu *menuFile = new wxMenu;
|
|
|
|
|
|
|
|
// menuFile->Append( ID_About, wxT("&About...") );
|
|
|
|
// menuFile->AppendSeparator();
|
|
|
|
// menuFile->Append( ID_Quit, wxT("E&xit") );
|
|
|
|
|
|
|
|
// wxMenuBar *menuBar = new wxMenuBar;
|
|
|
|
// menuBar->Append( menuFile, wxT("&File") );
|
2010-05-14 15:04:01 +02:00
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
// SetMenuBar( menuBar );
|
2010-05-14 15:04:01 +02:00
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
// 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);
|
2010-05-14 15:04:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
wxUI::~wxUI()
|
|
|
|
{
|
2010-12-20 19:28:24 +01:00
|
|
|
int i;
|
|
|
|
|
|
|
|
for (i=0; i<(int)_panels.size(); i++)
|
|
|
|
Disconnect(i, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(wxUI::OnButtonClicked), _panels[i], this);
|
|
|
|
|
2010-08-26 21:28:15 +02:00
|
|
|
if (_locale) delete _locale;
|
2010-07-04 19:39:39 +02:00
|
|
|
}
|
|
|
|
|
2010-07-06 20:59:02 +02:00
|
|
|
bool wxUI::SetLanguage(long language)
|
2010-07-04 19:39:39 +02:00
|
|
|
{
|
2010-08-26 21:28:15 +02:00
|
|
|
bool res = true;
|
2010-07-07 21:04:38 +02:00
|
|
|
|
2010-08-26 21:28:15 +02:00
|
|
|
if (_locale) delete _locale;
|
|
|
|
_locale = NULL;
|
2010-07-04 19:39:39 +02:00
|
|
|
|
2010-08-26 21:28:15 +02:00
|
|
|
// load language if possible, fall back to english otherwise
|
|
|
|
if(wxLocale::IsAvailable(language))
|
2010-07-04 19:39:39 +02:00
|
|
|
{
|
2010-12-20 19:28:24 +01:00
|
|
|
_locale = new wxLocale( language, wxLOCALE_CONV_ENCODING );
|
2010-07-04 19:39:39 +02:00
|
|
|
|
|
|
|
#ifdef __WXGTK__
|
2010-12-20 19:28:24 +01:00
|
|
|
_locale->AddCatalogLookupPathPrefix(wxT("./ressources/po"));
|
2010-07-04 19:39:39 +02:00
|
|
|
#endif
|
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
_locale->AddCatalog(wxT("french"));
|
|
|
|
_locale->AddCatalog(wxT("kisscount"));
|
2010-07-07 21:04:38 +02:00
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
_language = (wxLanguage) language;
|
2010-07-04 19:39:39 +02:00
|
|
|
}
|
|
|
|
|
2010-08-26 21:28:15 +02:00
|
|
|
if (_locale == NULL || !_locale->IsOk())
|
2010-07-04 19:39:39 +02:00
|
|
|
{
|
2010-12-20 19:28:24 +01:00
|
|
|
if (_locale) delete _locale;
|
|
|
|
_locale = new wxLocale();
|
2010-07-07 21:04:38 +02:00
|
|
|
|
|
|
|
#ifdef __WXGTK__
|
2010-12-20 19:28:24 +01:00
|
|
|
_locale->AddCatalogLookupPathPrefix(wxT("./ressources/po"));
|
2010-07-07 21:04:38 +02:00
|
|
|
#endif
|
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
_locale->AddCatalog(wxT("kisscount"));
|
2010-07-07 21:04:38 +02:00
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
_language = wxLANGUAGE_ENGLISH;
|
|
|
|
res = false;
|
2010-07-04 19:39:39 +02:00
|
|
|
}
|
|
|
|
|
2010-08-26 21:28:15 +02:00
|
|
|
months[0] = _("january");
|
|
|
|
months[1] = _("february");
|
|
|
|
months[2] = _("march");
|
|
|
|
months[3] = _("april");
|
|
|
|
months[4] = _("may");
|
|
|
|
months[5] = _("june");
|
|
|
|
months[6] = _("july");
|
|
|
|
months[7] = _("august");
|
|
|
|
months[8] = _("september");
|
|
|
|
months[9] = _("october");
|
|
|
|
months[10] = _("november");
|
|
|
|
months[11] = _("december") ;
|
|
|
|
|
|
|
|
return res;
|
2010-05-14 15:04:01 +02:00
|
|
|
}
|
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
#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);
|
2010-05-17 18:03:21 +02:00
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
void wxUI::InitPanels()
|
2010-07-14 11:15:48 +02:00
|
|
|
{
|
2010-12-20 19:28:24 +01:00
|
|
|
KissPanel* panel;
|
|
|
|
wxBitmapButton* button;
|
|
|
|
_panels.clear();
|
|
|
|
|
|
|
|
ADD_PANEL(AccountPanel, 0);
|
|
|
|
ADD_PANEL(StatsPanel, 1);
|
|
|
|
ADD_PANEL(SearchPanel, 2);
|
|
|
|
ADD_PANEL(PreferencesPanel, 3);
|
2010-07-14 11:15:48 +02:00
|
|
|
}
|
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
void wxUI::LoadPanels()
|
2010-08-17 18:59:19 +02:00
|
|
|
{
|
2010-12-20 19:28:24 +01:00
|
|
|
std::vector<KissPanel*>::iterator it;
|
|
|
|
KissPanel* temp;
|
|
|
|
int i;
|
2010-08-17 18:59:19 +02:00
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
if (_curPanel)
|
|
|
|
{
|
|
|
|
_vbox->Detach(_curPanel);
|
|
|
|
_curPanel = NULL;
|
|
|
|
}
|
2010-05-17 18:03:21 +02:00
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
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();
|
2010-05-14 15:04:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void wxUI::LoadUser()
|
|
|
|
{
|
2010-08-26 21:28:15 +02:00
|
|
|
User* user = _kiss->GetUser();
|
2010-12-20 19:28:24 +01:00
|
|
|
LoadPanels();
|
2010-05-17 18:03:21 +02:00
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
if (user->_preferences[wxT("language")] != wxT(""))
|
|
|
|
SetLanguage(user->GetLanguage());
|
2010-07-14 11:15:48 +02:00
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
if (_panels.size())
|
|
|
|
ShowPanel(_panels[0]);
|
2010-05-17 18:03:21 +02:00
|
|
|
}
|
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
void wxUI::ShowPanel(KissPanel* panel)
|
2010-05-17 18:03:21 +02:00
|
|
|
{
|
2010-08-26 21:28:15 +02:00
|
|
|
wxShowEvent event;
|
2010-12-20 19:28:24 +01:00
|
|
|
int i;
|
2010-06-27 21:39:49 +02:00
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
if (!panel) return;
|
2010-05-17 18:03:21 +02:00
|
|
|
|
2010-08-26 21:28:15 +02:00
|
|
|
if (_curPanel)
|
2010-05-17 18:03:21 +02:00
|
|
|
{
|
2010-12-20 19:28:24 +01:00
|
|
|
_vbox->Detach(_curPanel);
|
|
|
|
_curPanel->Hide();
|
2010-05-17 18:03:21 +02:00
|
|
|
}
|
2010-07-07 21:04:38 +02:00
|
|
|
|
2010-08-26 21:28:15 +02:00
|
|
|
if (_needReload)
|
2010-07-04 16:33:25 +02:00
|
|
|
{
|
2010-12-20 19:28:24 +01:00
|
|
|
for(i=0; i<(int)_panels.size(); i++)
|
|
|
|
if (_panels[i] == panel) break;
|
|
|
|
LoadPanels();
|
|
|
|
_needReload = false;
|
|
|
|
_curPanel = _panels[i];
|
2010-07-04 16:33:25 +02:00
|
|
|
}
|
2010-12-20 19:28:24 +01:00
|
|
|
else
|
|
|
|
_curPanel = panel;
|
2010-06-27 21:39:49 +02:00
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
_curPanel->OnShow(event);
|
|
|
|
_vbox->Add(_curPanel);
|
2010-08-26 21:28:15 +02:00
|
|
|
_curPanel->Show();
|
|
|
|
Layout();
|
2010-05-14 15:04:01 +02:00
|
|
|
}
|
2010-06-23 19:32:42 +02:00
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
void wxUI::OnButtonClicked(wxCommandEvent& event)
|
|
|
|
{
|
|
|
|
ShowPanel(_panels[event.GetId()]);
|
|
|
|
}
|
|
|
|
|
|
|
|
void wxUI::OnButtonChangeUser(wxCommandEvent& event)
|
|
|
|
{
|
|
|
|
ChangeUser();
|
|
|
|
}
|
|
|
|
|
|
|
|
void wxUI::ChangeUser()
|
|
|
|
{
|
|
|
|
UsersDialog u(_kiss, this);
|
|
|
|
}
|
|
|
|
|
|
|
|
void wxUI::OnButtonAbout(wxCommandEvent& event)
|
|
|
|
{
|
2011-01-29 13:04:15 +01:00
|
|
|
wxMessageBox( _("Personal accounting software\n\nhttp://indefero.soutade.fr/p/kisscount/\n\nLicenced under GNU GPL v3\n\nCopyright (C) 2010-2011 Grégory Soutadé"),
|
2010-12-20 19:28:24 +01:00
|
|
|
wxT("KissCount " APP_VERSION "\n\n"),
|
|
|
|
wxOK | wxICON_INFORMATION, this );
|
|
|
|
}
|
|
|
|
|
|
|
|
void wxUI::OnButtonQuit(wxCommandEvent& event)
|
|
|
|
{
|
|
|
|
wxMessageDialog dialog(this, _("Quit KissCount ?"), wxT("KissCount"), wxYES_NO);
|
|
|
|
if (dialog.ShowModal() == wxID_NO)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
Close(true);
|
|
|
|
}
|
|
|
|
|
2010-06-23 19:32:42 +02:00
|
|
|
void wxUI::GenerateMonth(int month, int year)
|
|
|
|
{
|
2010-12-20 19:28:24 +01:00
|
|
|
((AccountPanel*)_panels[0])->GenerateMonth(month, year);
|
2010-06-23 19:32:42 +02:00
|
|
|
}
|
2010-06-27 21:39:49 +02:00
|
|
|
|
|
|
|
void wxUI::KillMe()
|
|
|
|
{
|
2010-12-20 19:28:24 +01:00
|
|
|
std::vector<KissPanel*>::iterator it;
|
|
|
|
|
2010-08-26 21:28:15 +02:00
|
|
|
if (_curPanel)
|
2010-06-27 21:39:49 +02:00
|
|
|
{
|
2010-12-20 19:28:24 +01:00
|
|
|
_vbox->Detach(_curPanel);
|
|
|
|
_curPanel = NULL;
|
2010-06-27 21:39:49 +02:00
|
|
|
}
|
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
for (it=_panels.begin(); it!= _panels.end(); it++)
|
|
|
|
{
|
|
|
|
if (*it) delete *it;
|
|
|
|
_buttonsBox->Remove(0);
|
|
|
|
_buttons.erase(_buttons.begin());
|
|
|
|
}
|
2010-07-14 11:15:48 +02:00
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
_panels.clear();
|
2010-06-27 21:39:49 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void wxUI::NeedReload()
|
|
|
|
{
|
2010-08-26 21:28:15 +02:00
|
|
|
_needReload = true;
|
2010-06-27 21:39:49 +02:00
|
|
|
}
|