/* 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 "wxUI.h" 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)}; 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) { _hbox = new wxBoxSizer(wxVERTICAL); _buttonPanel = new ButtonPanel(_kiss, this); SetSizer(_hbox); _hbox->Add(_buttonPanel); } wxUI::~wxUI() { if (_accountPanel) delete _accountPanel; if (_preferencesPanel) delete _preferencesPanel; if (_searchPanel) delete _searchPanel; if (_statsPanel) delete _statsPanel; 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("./ressources/po")); #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("./ressources/po")); #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") ; if (_buttonPanel) _buttonPanel->SetToolTips(); return res; } void wxUI::ShowAccount() { ShowPanel(_accountPanel); } void wxUI::ShowSearch() { ShowPanel(_searchPanel); } void wxUI::ShowStats() { ShowPanel(_statsPanel); } void wxUI::ShowPreferences() { ShowPanel(_preferencesPanel); } void wxUI::ChangeUser() { UsersDialog u(_kiss, this); } void wxUI::LoadUser() { 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); } void wxUI::ShowPanel(wxPanel* panel) { int month, year=-1, account=0, preferences=0, search=0, stats=0; wxShowEvent event; if (!panel || (panel == _curPanel && !_needReload)) return; if (_curPanel) { _hbox->Detach(_curPanel); _curPanel->Hide(); } 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(); } void wxUI::GenerateMonth(int month, int year) { _accountPanel->GenerateMonth(month, year); } void wxUI::KillMe() { if (_curPanel) { _hbox->Detach(_curPanel); _curPanel = NULL; } if (_accountPanel) delete _accountPanel; if (_preferencesPanel) delete _preferencesPanel; if (_searchPanel) delete _searchPanel; _accountPanel = NULL; _preferencesPanel = NULL; _searchPanel = NULL; } void wxUI::NeedReload() { _needReload = true; }