From f6c64d54489af8dbd6b94fbc21ae0329b24160f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Soutad=C3=A9?= Date: Tue, 6 Jul 2010 20:59:02 +0200 Subject: [PATCH] Localization in progress ... --- src/controller/KissCount.cpp | 2 +- src/model/User.cpp | 13 +++++++++++ src/model/User.h | 1 + src/view/PreferencesPanel.cpp | 42 +++++++++++++++++++++++++++++++++-- src/view/PreferencesPanel.h | 5 +++++ src/view/wxUI.cpp | 4 ++-- src/view/wxUI.h | 2 +- 7 files changed, 63 insertions(+), 6 deletions(-) diff --git a/src/controller/KissCount.cpp b/src/controller/KissCount.cpp index 440b559..2ca86f2 100644 --- a/src/controller/KissCount.cpp +++ b/src/controller/KissCount.cpp @@ -4,7 +4,7 @@ KissCount::KissCount() : _user(NULL) { _wxUI = new wxUI(this, wxT("KissCount"), wxPoint(50, 50), wxSize(1024, 768)); - _wxUI->InitLanguage(wxLocale::GetSystemLanguage()); + _wxUI->SetLanguage(wxLocale::GetSystemLanguage()); _wxUI->Show(true); _wxUI->Centre(); diff --git a/src/model/User.cpp b/src/model/User.cpp index 4b3f7a8..117f8bf 100644 --- a/src/model/User.cpp +++ b/src/model/User.cpp @@ -85,3 +85,16 @@ int User::GetOperationsNumber(int month, int year) { return (*_operations[year])[month].size(); } + +wxLanguage User::GetLanguage() +{ + wxString res = _preferences[wxT("language")]; + long val; + + if (res == wxT("")) + return wxLANGUAGE_ENGLISH_UK ; + + res.ToLong(&val); + + return (wxLanguage)val; +} diff --git a/src/model/User.h b/src/model/User.h index b3e3b05..3f6dad3 100644 --- a/src/model/User.h +++ b/src/model/User.h @@ -31,6 +31,7 @@ class User int GetCategoriesNumber(); int GetAccountsNumber(); int GetOperationsNumber(int month, int year); + wxLanguage GetLanguage(); }; #endif diff --git a/src/view/PreferencesPanel.cpp b/src/view/PreferencesPanel.cpp index 6017580..e50be75 100644 --- a/src/view/PreferencesPanel.cpp +++ b/src/view/PreferencesPanel.cpp @@ -3,7 +3,7 @@ enum {ACCOUNT_NAME, ACCOUNT_NUMBER, ACCOUNT_SHARED, ACCOUNT_DEFAULT, ACCOUNT_DELETE, NUMBER_COLS_ACCOUNT}; enum {CATEGORY_NAME, CATEGORY_COLOR, CATEGORY_FONT, CATEGORY_DELETE, NUMBER_COLS_CATEGORY}; -enum {CATEGORIES_GRID_ID=1, ACCOUNTS_GRID_ID, NAME_ID, CHANGE_NAME_ID, CHANGE_PASSWORD_ID, KILL_ME_ID}; +enum {CATEGORIES_GRID_ID=1, ACCOUNTS_GRID_ID, NAME_ID, CHANGE_NAME_ID, CHANGE_PASSWORD_ID, KILL_ME_ID, LANGUAGE_ID}; BEGIN_EVENT_TABLE(PreferencesPanel, wxPanel) EVT_BUTTON(CHANGE_NAME_ID, PreferencesPanel::OnChangeName) @@ -11,6 +11,7 @@ EVT_BUTTON(CHANGE_PASSWORD_ID, PreferencesPanel::OnChangePassword) EVT_BUTTON(KILL_ME_ID, PreferencesPanel::OnKillMe) EVT_GRID_CMD_CELL_CHANGE(CATEGORIES_GRID_ID, PreferencesPanel::OnCategoryModified) EVT_GRID_CMD_CELL_CHANGE(ACCOUNTS_GRID_ID, PreferencesPanel::OnAccountModified) +EVT_COMBOBOX(LANGUAGE_ID, PreferencesPanel::OnLanguageChange) EVT_SHOW(PreferencesPanel::OnShow) END_EVENT_TABLE() @@ -18,7 +19,7 @@ PreferencesPanel::PreferencesPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*p { wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); //wxBoxSizer *hbox = new wxBoxSizer(wxHORIZONTAL); - wxStaticBox* staticUser, *staticAccount, *staticCategories; + wxStaticBox* staticUser, *staticAccount, *staticCategories, *staticLanguage; User* user = _kiss->GetUser(); wxGridBagSizer *gridBagSizer; wxStaticText* label; @@ -30,6 +31,7 @@ PreferencesPanel::PreferencesPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*p staticUser = new wxStaticBox(this, -1, _("User")); staticAccount = new wxStaticBox(this, -1, _("Accounts")); staticCategories = new wxStaticBox(this, -1, _("Categories")); + staticLanguage = new wxStaticBox(this, -1, _("Language")); // User staticBoxSizer = new wxStaticBoxSizer (staticUser, wxVERTICAL); @@ -76,6 +78,21 @@ PreferencesPanel::PreferencesPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*p InitCategories(user); vbox->Add(staticBoxSizer); + vbox->Add(-1, 20); + + // Language + staticBoxSizer = new wxStaticBoxSizer (staticLanguage, wxVERTICAL); + + _language = new wxBitmapComboBox(this, LANGUAGE_ID); + _language->SetWindowStyle(wxCB_READONLY); + + staticBoxSizer->Add(_language); + + vbox->Add(staticBoxSizer); + + InitLanguage(user); + + _language->Fit(); Fit(); SetMinSize(GetSize()); @@ -176,6 +193,21 @@ void PreferencesPanel::InitCategories(User* user) SET_ROW_COLOR(curLine, OWN_GREEN); } +void PreferencesPanel::InitLanguage(User* user) +{ + int i, select=0; + wxLanguage pref = user->GetLanguage(); + + for (i=0; iAppend(languages[i].name, wxBitmap(languages[i].icon)); + if (languages[i].language == pref) + select = i; + } + + _language->Select(select); +} + void PreferencesPanel::OnAccountModified(wxGridEvent& event) { int op_complete = 2; @@ -443,6 +475,12 @@ void PreferencesPanel::OnChangePassword(wxCommandEvent& event) p.ShowModal(); } +void PreferencesPanel::OnLanguageChange(wxCommandEvent& event) +{ + wxLanguage language = languages[_language->GetSelection()].language; + _wxUI->SetLanguage(language); +} + void PreferencesPanel::OnShow(wxShowEvent& event) { _wxUI->SetTitle(_kiss->GetUser()->_name + _(" - ") +_("Preferences")); diff --git a/src/view/PreferencesPanel.h b/src/view/PreferencesPanel.h index 567450e..d131591 100644 --- a/src/view/PreferencesPanel.h +++ b/src/view/PreferencesPanel.h @@ -8,11 +8,13 @@ #include #include #include +#include #include #include "wxUI.h" #include #include "PasswordDialog.h" +#include "SupportedLanguages.h" class wxUI; class KissCount; @@ -27,6 +29,7 @@ class PreferencesPanel: public wxPanel void OnCategoryModified(wxGridEvent& event); void OnChangeName(wxCommandEvent& event); void OnChangePassword(wxCommandEvent& event); + void OnLanguageChange(wxCommandEvent& event); void OnShow(wxShowEvent& event); void OnKillMe(wxCommandEvent& event); @@ -36,9 +39,11 @@ class PreferencesPanel: public wxPanel wxGrid* _accountsGrid; wxGrid* _categoriesGrid; wxTextCtrl* _name; + wxBitmapComboBox* _language; void InitAccounts(User* user); void InitCategories(User* user); + void InitLanguage(User* user); DECLARE_EVENT_TABLE(); }; diff --git a/src/view/wxUI.cpp b/src/view/wxUI.cpp index fab25ab..f28965d 100644 --- a/src/view/wxUI.cpp +++ b/src/view/wxUI.cpp @@ -47,9 +47,10 @@ wxUI::~wxUI() if (_locale) delete _locale; } -bool wxUI::InitLanguage(long language) +bool wxUI::SetLanguage(long language) { if (_locale) delete _locale; + _locale = NULL; // load language if possible, fall back to english otherwise if(wxLocale::IsAvailable(language)) @@ -68,7 +69,6 @@ bool wxUI::InitLanguage(long language) { if (_locale) delete _locale; _locale = new wxLocale( wxLANGUAGE_ENGLISH ); - language = wxLANGUAGE_ENGLISH; return false; } diff --git a/src/view/wxUI.h b/src/view/wxUI.h index af9e2c1..6a89e8f 100644 --- a/src/view/wxUI.h +++ b/src/view/wxUI.h @@ -22,7 +22,7 @@ class wxUI: public wxFrame wxUI(KissCount* kiss, const wxString& title, const wxPoint& pos, const wxSize& size); ~wxUI(); - bool InitLanguage(long language); + bool SetLanguage(long language); void ChangeUser(); void LoadUser();