Text language for decomposition GUI support added

(closes #1)
This commit is contained in:
Simon Rozman 2016-04-13 11:02:58 +02:00
parent ab3ef08a5f
commit 4fba54bdb2
9 changed files with 393 additions and 23 deletions

View File

@ -270,6 +270,12 @@
<event name="OnMenuSelection"></event> <event name="OnMenuSelection"></event>
<event name="OnUpdateUI"></event> <event name="OnUpdateUI"></event>
</object> </object>
<object class="submenu" expanded="1">
<property name="bitmap"></property>
<property name="label">&amp;Language</property>
<property name="name">m_menuDecompLanguage</property>
<property name="permission">protected</property>
</object>
</object> </object>
<object class="wxMenu" expanded="1"> <object class="wxMenu" expanded="1">
<property name="label">&amp;Help</property> <property name="label">&amp;Help</property>
@ -479,6 +485,167 @@
<event name="OnToolRClicked"></event> <event name="OnToolRClicked"></event>
<event name="OnUpdateUI"></event> <event name="OnUpdateUI"></event>
</object> </object>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Language:</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_toolDecompLanguageLbl</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxALIGN_RIGHT</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
<object class="wxChoice" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="choices"></property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_toolDecompLanguage</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnChoice">OnDecompLanguageChoice</event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object> </object>
<object class="wxBoxSizer" expanded="0"> <object class="wxBoxSizer" expanded="0">
<property name="minimum_size"></property> <property name="minimum_size"></property>

View File

@ -1,8 +1,8 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: ZRCola\n" "Project-Id-Version: ZRCola\n"
"POT-Creation-Date: 2016-04-08 13:13+0200\n" "POT-Creation-Date: 2016-04-13 10:50+0200\n"
"PO-Revision-Date: 2016-04-08 13:13+0200\n" "PO-Revision-Date: 2016-04-13 10:50+0200\n"
"Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n" "Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n"
"Language-Team: Amebis, d. o. o., Kamnik <info@amebis.si>\n" "Language-Team: Amebis, d. o. o., Kamnik <info@amebis.si>\n"
"Language: sl_SI\n" "Language: sl_SI\n"
@ -17,7 +17,12 @@ msgstr ""
"X-Poedit-KeywordsList: _\n" "X-Poedit-KeywordsList: _\n"
"X-Poedit-SearchPath-0: .\n" "X-Poedit-SearchPath-0: .\n"
#: zrcolafrm.cpp:61 #: zrcolafrm.cpp:69
#, c-format
msgid "Select %s language for decomposition"
msgstr "Izberi jezik %s za razstavljanje"
#: zrcolafrm.cpp:81
msgid "" msgid ""
"ZRCola keyboard shortcut Win+F5 could not be registered. Some functionality " "ZRCola keyboard shortcut Win+F5 could not be registered. Some functionality "
"will not be available." "will not be available."
@ -25,11 +30,11 @@ msgstr ""
"ZRColine bližnjice na tipkovnici Win+F5 ni mogoče registrirati. Nekaj " "ZRColine bližnjice na tipkovnici Win+F5 ni mogoče registrirati. Nekaj "
"funkcionalnosti ne bo na voljo." "funkcionalnosti ne bo na voljo."
#: zrcolafrm.cpp:61 zrcolafrm.cpp:63 #: zrcolafrm.cpp:81 zrcolafrm.cpp:83
msgid "Warning" msgid "Warning"
msgstr "Opozorilo" msgstr "Opozorilo"
#: zrcolafrm.cpp:63 #: zrcolafrm.cpp:83
msgid "" msgid ""
"ZRCola keyboard shortcut Win+F6 could not be registered. Some functionality " "ZRCola keyboard shortcut Win+F6 could not be registered. Some functionality "
"will not be available." "will not be available."
@ -37,7 +42,7 @@ msgstr ""
"ZRColine bližnjice na tipkovnici Win+F6 ni mogoče registrirati. Nekaj " "ZRColine bližnjice na tipkovnici Win+F6 ni mogoče registrirati. Nekaj "
"funkcionalnosti ne bo na voljo." "funkcionalnosti ne bo na voljo."
#: zrcolafrm.cpp:144 #: zrcolafrm.cpp:205
#, c-format #, c-format
msgid "" msgid ""
"ZRCola v%s\n" "ZRCola v%s\n"
@ -46,7 +51,7 @@ msgstr ""
"ZRCola v%s\n" "ZRCola v%s\n"
"Vse pravice pridržane 2015-%s Amebis" "Vse pravice pridržane 2015-%s Amebis"
#: zrcolafrm.cpp:144 #: zrcolafrm.cpp:205
msgid "About ZRCola" msgid "About ZRCola"
msgstr "O ZRColi" msgstr "O ZRColi"
@ -74,7 +79,7 @@ msgstr "Izberi celotno besedilo"
msgid "&Send Composed" msgid "&Send Composed"
msgstr "Pošlji &sestavljeno" msgstr "Pošlji &sestavljeno"
#: zrcolagui.cpp:74 zrcolagui.cpp:121 #: zrcolagui.cpp:74 zrcolagui.cpp:125
msgid "Send composed text to source window" msgid "Send composed text to source window"
msgstr "Pošlji sestavljeno besedilo izvornemu oknu" msgstr "Pošlji sestavljeno besedilo izvornemu oknu"
@ -82,7 +87,7 @@ msgstr "Pošlji sestavljeno besedilo izvornemu oknu"
msgid "Send &Decomposed" msgid "Send &Decomposed"
msgstr "Pošlji &razstavljeno" msgstr "Pošlji &razstavljeno"
#: zrcolagui.cpp:83 zrcolagui.cpp:123 #: zrcolagui.cpp:83 zrcolagui.cpp:127
msgid "Send decomposed text to source window" msgid "Send decomposed text to source window"
msgstr "Pošlji razstavljeno besedilo izvornemu oknu" msgstr "Pošlji razstavljeno besedilo izvornemu oknu"
@ -94,47 +99,55 @@ msgstr "Prekini raz/sestavljanje"
msgid "Abort composition and return focus to source window" msgid "Abort composition and return focus to source window"
msgstr "Prekini sestavljanje in vrni fokus nazaj izvornemu oknu" msgstr "Prekini sestavljanje in vrni fokus nazaj izvornemu oknu"
#: zrcolagui.cpp:100 #: zrcolagui.cpp:101
msgid "&Language"
msgstr "&Jezik"
#: zrcolagui.cpp:104
msgid "&Edit" msgid "&Edit"
msgstr "Ur&edi" msgstr "Ur&edi"
#: zrcolagui.cpp:107 #: zrcolagui.cpp:111
msgid "&Help" msgid "&Help"
msgstr "&Pomoč" msgstr "&Pomoč"
#: zrcolagui.cpp:113 #: zrcolagui.cpp:117
msgid "Cut" msgid "Cut"
msgstr "Izreži" msgstr "Izreži"
#: zrcolagui.cpp:113 #: zrcolagui.cpp:117
msgid "Cut selection" msgid "Cut selection"
msgstr "Izreži izbor" msgstr "Izreži izbor"
#: zrcolagui.cpp:115 #: zrcolagui.cpp:119
msgid "Copy" msgid "Copy"
msgstr "Kopiraj" msgstr "Kopiraj"
#: zrcolagui.cpp:115 #: zrcolagui.cpp:119
msgid "Copy selection" msgid "Copy selection"
msgstr "Kopiraj izbor" msgstr "Kopiraj izbor"
#: zrcolagui.cpp:117 #: zrcolagui.cpp:121
msgid "Paste" msgid "Paste"
msgstr "Prilepi" msgstr "Prilepi"
#: zrcolagui.cpp:117 #: zrcolagui.cpp:121
msgid "Paste selection" msgid "Paste selection"
msgstr "Prilepi izbor" msgstr "Prilepi izbor"
#: zrcolagui.cpp:121 #: zrcolagui.cpp:125
msgid "Send Composed" msgid "Send Composed"
msgstr "Pošlji sestavljeno" msgstr "Pošlji sestavljeno"
#: zrcolagui.cpp:123 #: zrcolagui.cpp:127
msgid "Send Decomposed" msgid "Send Decomposed"
msgstr "Pošlji razstavljeno" msgstr "Pošlji razstavljeno"
#: zrcolagui.h:64 MSIBuild/En.Win32.Release.Feature-2.idtx:4 #: zrcolagui.cpp:129
msgid "Language:"
msgstr "Jezik:"
#: zrcolagui.h:73 MSIBuild/En.Win32.Release.Feature-2.idtx:4
#: MSIBuild/En.Win32.Release.Shortcut-2.idtx:4 #: MSIBuild/En.Win32.Release.Shortcut-2.idtx:4
#: MSIBuild/En.x64.Release.Feature-2.idtx:4 #: MSIBuild/En.x64.Release.Feature-2.idtx:4
#: MSIBuild/En.x64.Release.Shortcut-2.idtx:4 #: MSIBuild/En.x64.Release.Shortcut-2.idtx:4

View File

@ -84,6 +84,23 @@ bool ZRColaApp::OnInit()
m_t_db.idxDecomp.clear(); m_t_db.idxDecomp.clear();
m_t_db.data .clear(); m_t_db.data .clear();
} }
} else if (id == ZRCola::langchar_rec::id) {
dat >> ZRCola::langchar_rec(m_lc_db);
if (!dat.good()) {
wxFAIL_MSG(wxT("Error reading language character data from ZRCola.zrcdb."));
m_lc_db.idxChr.clear();
#ifdef ZRCOLA_LANGCHAR_LANG_IDX
m_lc_db.idxLng.clear();
#endif
m_lc_db.data .clear();
}
} else if (id == ZRCola::language_rec::id) {
dat >> ZRCola::language_rec(m_lang_db);
if (!dat.good()) {
wxFAIL_MSG(wxT("Error reading language character data from ZRCola.zrcdb."));
m_lang_db.idxLng.clear();
m_lang_db.data .clear();
}
} }
} }
@ -95,7 +112,7 @@ bool ZRColaApp::OnInit()
} }
wxZRColaFrame* mainFrame = new wxZRColaFrame(); wxZRColaFrame* mainFrame = new wxZRColaFrame();
wxPersistentRegisterAndRestore<wxTopLevelWindow>(mainFrame); wxPersistentRegisterAndRestore<wxZRColaFrame>(mainFrame);
mainFrame->Show(); mainFrame->Show();
return true; return true;

View File

@ -28,6 +28,7 @@ class ZRColaApp;
#include <wx/app.h> #include <wx/app.h>
#include <wx/config.h> #include <wx/config.h>
#include <wx/intl.h> #include <wx/intl.h>
#include <zrcola/language.h>
#include <zrcola/translate.h> #include <zrcola/translate.h>
@ -57,6 +58,8 @@ public:
public: public:
ZRCola::translation_db m_t_db; ///< Translation database ZRCola::translation_db m_t_db; ///< Translation database
ZRCola::langchar_db m_lc_db; ///< Language character database
ZRCola::language_db m_lang_db; ///< Language database
protected: protected:
wxLocale m_locale; ///< Current locale wxLocale m_locale; ///< Current locale

View File

@ -118,8 +118,13 @@ void wxZRColaComposerPanel::OnComposedText(wxCommandEvent& event)
wxString src(m_composed->GetValue()); wxString src(m_composed->GetValue());
#endif #endif
ZRColaApp *app = (ZRColaApp*)wxTheApp;
std::wstring dst; std::wstring dst;
((ZRColaApp*)wxTheApp)->m_t_db.Decompose(src.data(), src.size(), dst, &m_mapping); wxZRColaFrame *mainWnd = dynamic_cast<wxZRColaFrame*>(wxGetActiveWindow());
if (mainWnd)
app->m_t_db.Decompose(src.data(), src.size(), &app->m_lc_db, mainWnd->m_lang, dst, &m_mapping);
else
app->m_t_db.Decompose(src.data(), src.size(), dst, &m_mapping);
long from, to; long from, to;
m_composed->GetSelection(&from, &to); m_composed->GetSelection(&from, &to);

View File

@ -35,6 +35,9 @@ wxBEGIN_EVENT_TABLE(wxZRColaFrame, wxZRColaFrameBase)
EVT_MENU(wxID_SEND_DECOMPOSED, wxZRColaFrame::OnSendDecomposed ) EVT_MENU(wxID_SEND_DECOMPOSED, wxZRColaFrame::OnSendDecomposed )
EVT_MENU(wxID_SEND_ABORT , wxZRColaFrame::OnSendAbort ) EVT_MENU(wxID_SEND_ABORT , wxZRColaFrame::OnSendAbort )
EVT_UPDATE_UI_RANGE(wxID_DECOMP_LANGUAGE_START, wxID_DECOMP_LANGUAGE_END, wxZRColaFrame::OnDecomposedLanguageUpdate)
EVT_MENU_RANGE(wxID_DECOMP_LANGUAGE_START, wxID_DECOMP_LANGUAGE_END, wxZRColaFrame::OnDecomposedLanguage)
EVT_MENU(wxID_EXIT , wxZRColaFrame::OnExit ) EVT_MENU(wxID_EXIT , wxZRColaFrame::OnExit )
EVT_MENU(wxID_ABOUT, wxZRColaFrame::OnAbout) EVT_MENU(wxID_ABOUT, wxZRColaFrame::OnAbout)
wxEND_EVENT_TABLE() wxEND_EVENT_TABLE()
@ -54,6 +57,23 @@ wxZRColaFrame::wxZRColaFrame() :
SetIcon(wxICON(00_zrcola.ico)); SetIcon(wxICON(00_zrcola.ico));
#endif #endif
// Populate language lists.
memcpy(m_lang, ZRCOLA_LANG_VOID, sizeof(m_lang));
ZRColaApp *app = ((ZRColaApp*)wxTheApp);
m_toolDecompLanguage->Clear();
if (!app->m_lang_db.idxLng.empty()) {
for (size_t i = 0, n = app->m_lang_db.idxLng.size(); i < n; i++) {
const ZRCola::language_db::language &lang = app->m_lang_db.idxLng[i];
wxString label(wxString::FromAscii(lang.id, strnlen(lang.id, sizeof(lang.id))));
if (i < wxID_DECOMP_LANGUAGE_END - wxID_DECOMP_LANGUAGE_START + 1)
m_menuDecompLanguage->Insert(i, wxID_DECOMP_LANGUAGE_START + i, label, wxString::Format(_("Select %s language for decomposition"), (const wxStringCharType*)label), wxITEM_RADIO);
m_toolDecompLanguage->Insert(label, i);
if (memcmp(m_lang, lang.id, sizeof(m_lang)) == 0)
m_toolDecompLanguage->Select(i);
}
}
// Set focus.
m_panel->m_decomposed->SetFocus(); m_panel->m_decomposed->SetFocus();
// Register global hotkey(s). // Register global hotkey(s).
@ -75,7 +95,7 @@ wxZRColaFrame::~wxZRColaFrame()
void wxZRColaFrame::OnForwardEventUpdate(wxUpdateUIEvent& event) void wxZRColaFrame::OnForwardEventUpdate(wxUpdateUIEvent& event)
{ {
wxControl *focusWnd = wxDynamicCast(FindFocus(), wxControl); wxControl *focusWnd = wxDynamicCast(FindFocus(), wxControl);
if (focusWnd) if (focusWnd && !m_toolbar->IsDescendant(focusWnd))
focusWnd->GetEventHandler()->ProcessEvent(event); focusWnd->GetEventHandler()->ProcessEvent(event);
else else
event.Enable(false); event.Enable(false);
@ -133,6 +153,47 @@ void wxZRColaFrame::OnSendAbort(wxCommandEvent& event)
} }
void wxZRColaFrame::OnDecomposedLanguageUpdate(wxUpdateUIEvent& event)
{
ZRColaApp *app = ((ZRColaApp*)wxTheApp);
const ZRCola::language_db::language &lang = app->m_lang_db.idxLng[event.GetId() - wxID_DECOMP_LANGUAGE_START];
event.Check(memcmp(m_lang, lang.id, sizeof(m_lang)) == 0);
}
void wxZRColaFrame::OnDecomposedLanguage(wxCommandEvent& event)
{
ZRColaApp *app = ((ZRColaApp*)wxTheApp);
size_t i = event.GetId() - wxID_DECOMP_LANGUAGE_START;
const ZRCola::language_db::language &lang = app->m_lang_db.idxLng[i];
if (memcmp(m_lang, lang.id, sizeof(m_lang)) != 0) {
memcpy(m_lang, lang.id, sizeof(m_lang));
m_toolDecompLanguage->Select(i);
// Notify composed text something changed and should re-decompose.
wxCommandEvent event2(wxEVT_COMMAND_TEXT_UPDATED);
m_panel->m_composed->ProcessWindowEvent(event2);
}
}
void wxZRColaFrame::OnDecompLanguageChoice(wxCommandEvent& event)
{
ZRColaApp *app = ((ZRColaApp*)wxTheApp);
size_t i = event.GetSelection();
const ZRCola::language_db::language &lang = app->m_lang_db.idxLng[i];
if (memcmp(m_lang, lang.id, sizeof(m_lang)) != 0) {
memcpy(m_lang, lang.id, sizeof(m_lang));
// Notify composed text something changed and should re-decompose.
wxCommandEvent event2(wxEVT_COMMAND_TEXT_UPDATED);
m_panel->m_composed->ProcessWindowEvent(event2);
}
}
void wxZRColaFrame::OnExit(wxCommandEvent& event) void wxZRColaFrame::OnExit(wxCommandEvent& event)
{ {
Close(); Close();
@ -224,3 +285,47 @@ WXLRESULT wxZRColaFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM
} else } else
return wxZRColaFrameBase::MSWWindowProc(message, wParam, lParam); return wxZRColaFrameBase::MSWWindowProc(message, wParam, lParam);
} }
//////////////////////////////////////////////////////////////////////////
// wxPersistentZRColaFrame
//////////////////////////////////////////////////////////////////////////
wxPersistentZRColaFrame::wxPersistentZRColaFrame(wxZRColaFrame *wnd) : wxPersistentTLW(wnd)
{
}
void wxPersistentZRColaFrame::Save() const
{
//
const wxZRColaFrame * const wnd = static_cast<const wxZRColaFrame*>(GetWindow());
SaveValue(wxT("lang"), wxString::FromAscii(wnd->m_lang, sizeof(wnd->m_lang)));
wxPersistentTLW::Save();
}
bool wxPersistentZRColaFrame::Restore()
{
const bool r = wxPersistentTLW::Restore();
wxZRColaFrame * const wnd = static_cast<wxZRColaFrame*>(GetWindow());
wxString lang;
if (RestoreValue(wxT("lang"), &lang) && lang.Length() == 3) {
memcpy(wnd->m_lang, (const char*)lang.c_str(), sizeof(wnd->m_lang));
wnd->m_toolDecompLanguage->SetStringSelection(wxString::FromAscii(wnd->m_lang, sizeof(wnd->m_lang)));
} else {
ZRColaApp *app = ((ZRColaApp*)wxTheApp);
if (!app->m_lang_db.idxLng.empty()) {
const ZRCola::language_db::language &lang = app->m_lang_db.idxLng[0];
memcpy(wnd->m_lang, lang.id, sizeof(wnd->m_lang));
wnd->m_toolDecompLanguage->Select(0);
} else {
memcpy(wnd->m_lang, ZRCOLA_LANG_VOID, sizeof(wnd->m_lang));
}
}
return r;
}

View File

@ -27,6 +27,8 @@ class wxZRColaFrame;
#pragma once #pragma once
#include "zrcolagui.h" #include "zrcolagui.h"
#include <zrcola/language.h>
#include <wx/persist/toplevel.h>
/// ///
@ -42,6 +44,12 @@ class wxZRColaFrame;
class wxZRColaFrame : public wxZRColaFrameBase class wxZRColaFrame : public wxZRColaFrameBase
{ {
public: public:
enum
{
wxID_DECOMP_LANGUAGE_START = 6000,
wxID_DECOMP_LANGUAGE_END = 6099,
};
wxZRColaFrame(); wxZRColaFrame();
virtual ~wxZRColaFrame(); virtual ~wxZRColaFrame();
@ -52,10 +60,16 @@ protected:
void OnSendComposed(wxCommandEvent& event); void OnSendComposed(wxCommandEvent& event);
void OnSendDecomposed(wxCommandEvent& event); void OnSendDecomposed(wxCommandEvent& event);
void OnSendAbort(wxCommandEvent& event); void OnSendAbort(wxCommandEvent& event);
void OnDecomposedLanguageUpdate(wxUpdateUIEvent& event);
void OnDecomposedLanguage(wxCommandEvent& event);
virtual void OnDecompLanguageChoice(wxCommandEvent& event);
void OnExit(wxCommandEvent& event); void OnExit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event); void OnAbout(wxCommandEvent& event);
wxDECLARE_EVENT_TABLE(); wxDECLARE_EVENT_TABLE();
friend class wxPersistentZRColaFrame;
friend class wxZRColaComposerPanel;
private: private:
void DoSend(const wxString& str); void DoSend(const wxString& str);
@ -63,5 +77,25 @@ protected:
virtual WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam); virtual WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam);
protected: protected:
ZRCola::langid_t m_lang; ///< Language for decomposing
WXHWND m_hWndSource; ///< handle of the active window, when the ZRCola hotkey was pressed WXHWND m_hWndSource; ///< handle of the active window, when the ZRCola hotkey was pressed
}; };
///
/// Supports saving/restoring wxZRColaFrame GUI state
///
class wxPersistentZRColaFrame : public wxPersistentTLW
{
public:
wxPersistentZRColaFrame(wxZRColaFrame *wnd);
virtual void Save() const;
virtual bool Restore();
};
inline wxPersistentObject *wxCreatePersistentObject(wxZRColaFrame *wnd)
{
return new wxPersistentZRColaFrame(wnd);
}

View File

@ -97,6 +97,10 @@ wxZRColaFrameBase::wxZRColaFrameBase( wxWindow* parent, wxWindowID id, const wxS
#endif #endif
m_menuEdit->Append( m_menuItemSendAbort ); m_menuEdit->Append( m_menuItemSendAbort );
m_menuDecompLanguage = new wxMenu();
wxMenuItem* m_menuDecompLanguageItem = new wxMenuItem( m_menuEdit, wxID_ANY, _("&Language"), wxEmptyString, wxITEM_NORMAL, m_menuDecompLanguage );
m_menuEdit->Append( m_menuDecompLanguageItem );
m_menubar->Append( m_menuEdit, _("&Edit") ); m_menubar->Append( m_menuEdit, _("&Edit") );
m_menuHelp = new wxMenu(); m_menuHelp = new wxMenu();
@ -122,6 +126,13 @@ wxZRColaFrameBase::wxZRColaFrameBase( wxWindow* parent, wxWindowID id, const wxS
m_toolSendDecomposed = m_toolbar->AddTool( wxID_SEND_DECOMPOSED, _("Send Decomposed"), wxIcon( wxT("send_decomposed.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Send Decomposed"), _("Send decomposed text to source window"), NULL ); m_toolSendDecomposed = m_toolbar->AddTool( wxID_SEND_DECOMPOSED, _("Send Decomposed"), wxIcon( wxT("send_decomposed.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Send Decomposed"), _("Send decomposed text to source window"), NULL );
m_toolDecompLanguageLbl = new wxStaticText( m_toolbar, wxID_ANY, _("Language:"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
m_toolDecompLanguageLbl->Wrap( -1 );
m_toolbar->AddControl( m_toolDecompLanguageLbl );
wxArrayString m_toolDecompLanguageChoices;
m_toolDecompLanguage = new wxChoice( m_toolbar, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_toolDecompLanguageChoices, 0 );
m_toolDecompLanguage->SetSelection( 0 );
m_toolbar->AddControl( m_toolDecompLanguage );
m_toolbar->Realize(); m_toolbar->Realize();
wxBoxSizer* bSizerMain; wxBoxSizer* bSizerMain;
@ -137,10 +148,16 @@ wxZRColaFrameBase::wxZRColaFrameBase( wxWindow* parent, wxWindowID id, const wxS
m_statusBar = this->CreateStatusBar( 1, wxST_SIZEGRIP, wxID_ANY ); m_statusBar = this->CreateStatusBar( 1, wxST_SIZEGRIP, wxID_ANY );
this->Centre( wxBOTH ); this->Centre( wxBOTH );
// Connect Events
m_toolDecompLanguage->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( wxZRColaFrameBase::OnDecompLanguageChoice ), NULL, this );
} }
wxZRColaFrameBase::~wxZRColaFrameBase() wxZRColaFrameBase::~wxZRColaFrameBase()
{ {
// Disconnect Events
m_toolDecompLanguage->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( wxZRColaFrameBase::OnDecompLanguageChoice ), NULL, this );
} }
wxZRColaComposerPanelBase::wxZRColaComposerPanelBase( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ) wxZRColaComposerPanelBase::wxZRColaComposerPanelBase( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style )

View File

@ -21,6 +21,8 @@
#include <wx/font.h> #include <wx/font.h>
#include <wx/colour.h> #include <wx/colour.h>
#include <wx/settings.h> #include <wx/settings.h>
#include <wx/stattext.h>
#include <wx/choice.h>
#include <wx/toolbar.h> #include <wx/toolbar.h>
#include "zrcolacomppnl.h" #include "zrcolacomppnl.h"
#include <wx/sizer.h> #include <wx/sizer.h>
@ -49,6 +51,7 @@ class wxZRColaFrameBase : public wxFrame
wxMenuBar* m_menubar; wxMenuBar* m_menubar;
wxMenu* m_menuProgram; wxMenu* m_menuProgram;
wxMenu* m_menuEdit; wxMenu* m_menuEdit;
wxMenu* m_menuDecompLanguage;
wxMenu* m_menuHelp; wxMenu* m_menuHelp;
wxToolBar* m_toolbar; wxToolBar* m_toolbar;
wxToolBarToolBase* m_toolEditCut; wxToolBarToolBase* m_toolEditCut;
@ -56,9 +59,15 @@ class wxZRColaFrameBase : public wxFrame
wxToolBarToolBase* m_toolEditPaste; wxToolBarToolBase* m_toolEditPaste;
wxToolBarToolBase* m_toolSendComposed; wxToolBarToolBase* m_toolSendComposed;
wxToolBarToolBase* m_toolSendDecomposed; wxToolBarToolBase* m_toolSendDecomposed;
wxStaticText* m_toolDecompLanguageLbl;
wxChoice* m_toolDecompLanguage;
wxZRColaComposerPanel* m_panel; wxZRColaComposerPanel* m_panel;
wxStatusBar* m_statusBar; wxStatusBar* m_statusBar;
// Virtual event handlers, overide them in your derived class
virtual void OnDecompLanguageChoice( wxCommandEvent& event ) { event.Skip(); }
public: public:
wxZRColaFrameBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("ZRCola"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 600,400 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL, const wxString& name = wxT("ZRCola") ); wxZRColaFrameBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("ZRCola"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 600,400 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL, const wxString& name = wxT("ZRCola") );