/* Copyright 2010-2011 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 "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[MAX_CATEGORY] = {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)}; wxUI::wxUI(KissCount* kiss, const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame(NULL, -1, title, pos, size), _kiss(kiss), _curPanel(NULL), _locale(NULL), _needReload(false) { wxInitAllImageHandlers(); _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") ); // SetMenuBar( menuBar ); // CreateStatusBar(); // SetStatusText( wxT("Welcome to wxWidgets!") ); _buttonsBox->Add(new wxBitmapButton(this, BUTTON_CHANGE_USER_ID, wxBitmap(wxT(CHANGE_USER_ICON), wxBITMAP_TYPE_PNG), wxDefaultPosition, wxSize(128, 128))); _buttonsBox->Add(new wxBitmapButton(this, BUTTON_ABOUT_ID, wxBitmap(wxT(ABOUT_ICON), wxBITMAP_TYPE_PNG), wxDefaultPosition, wxSize(128, 128))); _buttonsBox->Add(new wxBitmapButton(this, BUTTON_QUIT_ID, wxBitmap(wxT(QUIT_ICON), wxBITMAP_TYPE_PNG), wxDefaultPosition, wxSize(128, 128))); SetSizer(_vbox); _vbox->Add(_buttonsBox, 0, wxGROW); } wxUI::~wxUI() { 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; } bool wxUI::SetLanguage(long language) { bool res = true; if (_locale) delete _locale; _locale = NULL; // load language if possible, fall back to english otherwise if(wxLocale::IsAvailable(language)) { _locale = new wxLocale( language, wxLOCALE_CONV_ENCODING ); #ifdef __WXGTK__ _locale->AddCatalogLookupPathPrefix(wxT(LANG_ROOT)); #endif _locale->AddCatalog(wxT("french")); _locale->AddCatalog(wxT("kisscount")); _language = (wxLanguage) language; } if (_locale == NULL || !_locale->IsOk()) { if (_locale) delete _locale; _locale = new wxLocale(); #ifdef __WXGTK__ _locale->AddCatalogLookupPathPrefix(wxT(LANG_ROOT)); #endif _locale->AddCatalog(wxT("kisscount")); _language = wxLANGUAGE_ENGLISH; res = false; } 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; } #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() { KissPanel* panel; wxBitmapButton* button; _panels.clear(); ADD_PANEL(AccountPanel, 0); ADD_PANEL(StatsPanel, 1); ADD_PANEL(SearchPanel, 2); ADD_PANEL(PreferencesPanel, 3); ADD_PANEL(ImportPanel, 4); } void wxUI::LoadPanels() { 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); _buttons[i]->SetToolTip(temp->GetToolTip()); } } else InitPanels(); } void wxUI::LoadUser() { User* user = _kiss->GetUser(); LoadPanels(); if (user->_preferences[wxT("language")] != wxT("")) SetLanguage(user->GetLanguage()); if (_panels.size()) ShowPanel(_panels[0]); } void wxUI::ShowPanel(KissPanel* panel) { wxShowEvent event; int i; User* user = _kiss->GetUser(); if (!panel) return; if (_curPanel) { _vbox->Detach(_curPanel); _curPanel->Hide(); } if (_needReload) { user->InvalidateOperations(); 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() { UsersDialog u(_kiss, this); } void wxUI::OnButtonAbout(wxCommandEvent& event) { 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é"), 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); } void wxUI::GenerateMonth(int month, int year) { ((AccountPanel*)_panels[0])->GenerateMonth(month, year); } void wxUI::KillMe() { std::vector::iterator it; if (_curPanel) { _vbox->Detach(_curPanel); _curPanel = NULL; } for (it=_panels.begin(); it!= _panels.end(); it++) { if (*it) delete *it; _buttonsBox->Remove(0); _buttons.erase(_buttons.begin()); } _panels.clear(); } void wxUI::NeedReload() { _needReload = true; }