Settings moved from menu(s) to configuration dialog

(closes #21)
This commit is contained in:
Simon Rozman 2016-05-13 16:22:51 +02:00
parent a81dd7e250
commit e4fb91e305
16 changed files with 1485 additions and 462 deletions

File diff suppressed because it is too large Load Diff

View File

@ -88,6 +88,7 @@
<ClCompile Include="zrcolafrm.cpp" /> <ClCompile Include="zrcolafrm.cpp" />
<ClCompile Include="zrcolagui.cpp" /> <ClCompile Include="zrcolagui.cpp" />
<ClCompile Include="zrcolakeyhndlr.cpp" /> <ClCompile Include="zrcolakeyhndlr.cpp" />
<ClCompile Include="zrcolasettings.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="stdafx.h" /> <ClInclude Include="stdafx.h" />
@ -99,6 +100,7 @@
<ClInclude Include="zrcolafrm.h" /> <ClInclude Include="zrcolafrm.h" />
<ClInclude Include="zrcolagui.h" /> <ClInclude Include="zrcolagui.h" />
<ClInclude Include="zrcolakeyhndlr.h" /> <ClInclude Include="zrcolakeyhndlr.h" />
<ClInclude Include="zrcolasettings.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\lib\libZRColaUI\build\libZRColaUI.vcxproj"> <ProjectReference Include="..\lib\libZRColaUI\build\libZRColaUI.vcxproj">

View File

@ -46,6 +46,9 @@
<ClCompile Include="zrcolachrslct.cpp"> <ClCompile Include="zrcolachrslct.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="zrcolasettings.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="stdafx.h"> <ClInclude Include="stdafx.h">
@ -75,6 +78,9 @@
<ClInclude Include="zrcolachrslct.h"> <ClInclude Include="zrcolachrslct.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="zrcolasettings.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="res\zrcola.ico"> <None Include="res\zrcola.ico">

View File

@ -1,8 +1,8 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: ZRCola\n" "Project-Id-Version: ZRCola\n"
"POT-Creation-Date: 2016-05-13 13:33+0200\n" "POT-Creation-Date: 2016-05-13 15:52+0200\n"
"PO-Revision-Date: 2016-05-13 13:34+0200\n" "PO-Revision-Date: 2016-05-13 15:52+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,19 +17,14 @@ msgstr ""
"X-Poedit-KeywordsList: _\n" "X-Poedit-KeywordsList: _\n"
"X-Poedit-SearchPath-0: .\n" "X-Poedit-SearchPath-0: .\n"
#: zrcolafrm.cpp:96 zrcolagui.h:97 MSIBuild/En.Win32.Release.Feature-2.idtx:4 #: zrcolafrm.cpp:90 zrcolagui.h:98 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
msgid "ZRCola" msgid "ZRCola"
msgstr "ZRCola" msgstr "ZRCola"
#: zrcolafrm.cpp:107 #: zrcolafrm.cpp:108
#, c-format
msgid "Select %s language for decomposition"
msgstr "Izberi jezik %s za razstavljanje"
#: zrcolafrm.cpp:129
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."
@ -37,11 +32,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:129 zrcolafrm.cpp:131 #: zrcolafrm.cpp:108 zrcolafrm.cpp:110
msgid "Warning" msgid "Warning"
msgstr "Opozorilo" msgstr "Opozorilo"
#: zrcolafrm.cpp:131 #: zrcolafrm.cpp:110
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."
@ -49,15 +44,11 @@ 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:214 #: zrcolafrm.cpp:336
msgid "Start ZRCola automatically on logon"
msgstr "Samodejno zaženi ZRColo ob prijavi"
#: zrcolafrm.cpp:464
msgid "http://zrcola-2.amebis.si/en/contact/" msgid "http://zrcola-2.amebis.si/en/contact/"
msgstr "http://zrcola-2.amebis.si/contact/" msgstr "http://zrcola-2.amebis.si/contact/"
#: zrcolafrm.cpp:470 #: zrcolafrm.cpp:342
#, c-format #, c-format
msgid "" msgid ""
"ZRCola v%s\n" "ZRCola v%s\n"
@ -66,214 +57,242 @@ 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:470 #: zrcolafrm.cpp:342
msgid "About ZRCola" msgid "About ZRCola"
msgstr "O ZRColi" msgstr "O ZRColi"
#: zrcolagui.cpp:36 #: zrcolagui.cpp:36
msgid "&Start on Logon"
msgstr "Z&aženi ob prijavi"
#: zrcolagui.cpp:36
msgid "Start this program automatically on logon"
msgstr "Samodejno zaženi ta program ob prijavi"
#: zrcolagui.cpp:42
msgid "E&xit" msgid "E&xit"
msgstr "I&zhod" msgstr "I&zhod"
#: zrcolagui.cpp:42 #: zrcolagui.cpp:36
msgid "Quit this program" msgid "Quit this program"
msgstr "Zapri ta program" msgstr "Zapri ta program"
#: zrcolagui.cpp:45 #: zrcolagui.cpp:39
msgid "&Program" msgid "&Program"
msgstr "&Program" msgstr "&Program"
#: zrcolagui.cpp:78 #: zrcolagui.cpp:72
msgid "Select &All" msgid "Select &All"
msgstr "Izberi &vse" msgstr "Izberi &vse"
#: zrcolagui.cpp:78 #: zrcolagui.cpp:72
msgid "Select all text" msgid "Select all text"
msgstr "Izberi celotno besedilo" msgstr "Izberi celotno besedilo"
#: zrcolagui.cpp:84 #: zrcolagui.cpp:78
msgid "C&haracter Selector..." msgid "C&haracter Selector..."
msgstr "Izbirnik &znaka ..." msgstr "Izbirnik &znaka ..."
#: zrcolagui.cpp:84 zrcolagui.cpp:176 #: zrcolagui.cpp:78 zrcolagui.cpp:166
msgid "Display character selector to select character to insert into text" msgid "Display character selector to select character to insert into text"
msgstr "Prikaži izbirnik znaka za izbor znaka za vstavljanje v besedilo" msgstr "Prikaži izbirnik znaka za izbor znaka za vstavljanje v besedilo"
#: zrcolagui.cpp:95 #: zrcolagui.cpp:89
msgid "&Send Composed" msgid "&Send Composed"
msgstr "Pošlji &sestavljeno" msgstr "Pošlji &sestavljeno"
#: zrcolagui.cpp:95 zrcolagui.cpp:178 #: zrcolagui.cpp:89 zrcolagui.cpp:168
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"
#: zrcolagui.cpp:104 #: zrcolagui.cpp:98
msgid "Send &Decomposed" msgid "Send &Decomposed"
msgstr "Pošlji &razstavljeno" msgstr "Pošlji &razstavljeno"
#: zrcolagui.cpp:104 zrcolagui.cpp:180 #: zrcolagui.cpp:98 zrcolagui.cpp:170
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"
#: zrcolagui.cpp:113 #: zrcolagui.cpp:107
msgid "Abort (De)composition" msgid "Abort (De)composition"
msgstr "Prekini raz/sestavljanje" msgstr "Prekini raz/sestavljanje"
#: zrcolagui.cpp:113 #: zrcolagui.cpp:107
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:122 #: zrcolagui.cpp:118
msgid "&Language" msgid "&Settings..."
msgstr "&Jezik" msgstr "Na&stavitve ..."
#: zrcolagui.cpp:124 #: zrcolagui.cpp:118
msgid "&Automatic" msgid "Open program configuration dialog"
msgstr "S&amodejno" msgstr "Odpri nastavitveni dialog programa"
#: zrcolagui.cpp:124 #: zrcolagui.cpp:121
msgid "Set language according to keyboard layout automatically"
msgstr "Samodejno nastavi jezik glede na izbrano tipkovnico"
#: zrcolagui.cpp:131
msgid "&Edit" msgid "&Edit"
msgstr "Ur&edi" msgstr "Ur&edi"
#: zrcolagui.cpp:135 #: zrcolagui.cpp:125
msgid "&Edit Toolbar" msgid "&Edit Toolbar"
msgstr "Orodna vrstica za ur&ejanje" msgstr "Orodna vrstica za ur&ejanje"
#: zrcolagui.cpp:135 #: zrcolagui.cpp:125
msgid "Toggle edit toolbar" msgid "Toggle edit toolbar"
msgstr "Prikaži/skrij orodno vrstico za urejanje" msgstr "Prikaži/skrij orodno vrstico za urejanje"
#: zrcolagui.cpp:139 #: zrcolagui.cpp:129
msgid "&Compose Toolbar" msgid "&Compose Toolbar"
msgstr "Orodna vrsti&ca za sestavljanje" msgstr "Orodna vrsti&ca za sestavljanje"
#: zrcolagui.cpp:139 #: zrcolagui.cpp:129
msgid "Toggle compose toolbar" msgid "Toggle compose toolbar"
msgstr "Prikaži/skrij orodno vrstico za sestavljanje" msgstr "Prikaži/skrij orodno vrstico za sestavljanje"
#: zrcolagui.cpp:145 #: zrcolagui.cpp:135
msgid "Character Catalo&g" msgid "Character Catalo&g"
msgstr "Katalo&g znakov" msgstr "Katalo&g znakov"
#: zrcolagui.cpp:145 #: zrcolagui.cpp:135
msgid "Toggle character catalog panel" msgid "Toggle character catalog panel"
msgstr "Prikaži/skrij katalog znakov" msgstr "Prikaži/skrij katalog znakov"
#: zrcolagui.cpp:148 #: zrcolagui.cpp:138
msgid "&View" msgid "&View"
msgstr "Po&gled" msgstr "Po&gled"
#: zrcolagui.cpp:152 #: zrcolagui.cpp:142
msgid "&Request a new character..." msgid "&Request a new character..."
msgstr "&Zahtevaj nov znak ..." msgstr "&Zahtevaj nov znak ..."
#: zrcolagui.cpp:152 #: zrcolagui.cpp:142
msgid "Submit a request to ZRC to add a new character" msgid "Submit a request to ZRC to add a new character"
msgstr "Oddaj prošnjo ZRC-u za dodajanje novega znaka" msgstr "Oddaj prošnjo ZRC-u za dodajanje novega znaka"
#: zrcolagui.cpp:161 #: zrcolagui.cpp:151
msgid "&Help" msgid "&Help"
msgstr "Po&moč" msgstr "Po&moč"
#: zrcolagui.cpp:166 #: zrcolagui.cpp:156
msgid "Cut" msgid "Cut"
msgstr "Izreži" msgstr "Izreži"
#: zrcolagui.cpp:166 #: zrcolagui.cpp:156
msgid "Cut selection" msgid "Cut selection"
msgstr "Izreži izbor" msgstr "Izreži izbor"
#: zrcolagui.cpp:168 #: zrcolagui.cpp:158
msgid "Copy" msgid "Copy"
msgstr "Kopiraj" msgstr "Kopiraj"
#: zrcolagui.cpp:168 #: zrcolagui.cpp:158
msgid "Copy selection" msgid "Copy selection"
msgstr "Kopiraj izbor" msgstr "Kopiraj izbor"
#: zrcolagui.cpp:170 #: zrcolagui.cpp:160
msgid "Paste" msgid "Paste"
msgstr "Prilepi" msgstr "Prilepi"
#: zrcolagui.cpp:170 #: zrcolagui.cpp:160
msgid "Paste selection" msgid "Paste selection"
msgstr "Prilepi izbor" msgstr "Prilepi izbor"
#: zrcolagui.cpp:173 #: zrcolagui.cpp:163
msgid "Edit" msgid "Edit"
msgstr "Urejanje" msgstr "Urejanje"
#: zrcolagui.cpp:176 zrcolagui.h:221 #: zrcolagui.cpp:166 zrcolagui.h:222
msgid "Character Selector" msgid "Character Selector"
msgstr "Izbirnik znaka" msgstr "Izbirnik znaka"
#: zrcolagui.cpp:178 #: zrcolagui.cpp:168
msgid "Send Composed" msgid "Send Composed"
msgstr "Pošlji sestavljeno" msgstr "Pošlji sestavljeno"
#: zrcolagui.cpp:180 #: zrcolagui.cpp:170
msgid "Send Decomposed" msgid "Send Decomposed"
msgstr "Pošlji razstavljeno" msgstr "Pošlji razstavljeno"
#: zrcolagui.cpp:189 #: zrcolagui.cpp:173
msgid "Compose" msgid "Compose"
msgstr "Sestavljanje" msgstr "Sestavljanje"
#: zrcolagui.cpp:193 #: zrcolagui.cpp:177
msgid "Character Catalog" msgid "Character Catalog"
msgstr "Katalog znakov" msgstr "Katalog znakov"
#: zrcolagui.cpp:197 #: zrcolagui.cpp:181
msgid "(De)Composer" msgid "(De)Composer"
msgstr "Raz/Sestavljalnik" msgstr "Raz/Sestavljalnik"
#: zrcolagui.cpp:236 #: zrcolagui.cpp:218
msgid "Decomposed Text" msgid "Decomposed Text"
msgstr "Razstavljeno besedilo" msgstr "Razstavljeno besedilo"
#: zrcolagui.cpp:256 #: zrcolagui.cpp:238
msgid "Decomposed Unicode Dump" msgid "Decomposed Unicode Dump"
msgstr "Unicode razstavljenega" msgstr "Unicode razstavljenega"
#: zrcolagui.cpp:283 #: zrcolagui.cpp:265
msgid "Composed Text" msgid "Composed Text"
msgstr "Sestavljeno besedilo" msgstr "Sestavljeno besedilo"
#: zrcolagui.cpp:303 #: zrcolagui.cpp:285
msgid "Composed Unicode Dump" msgid "Composed Unicode Dump"
msgstr "Unicode sestavljenega" msgstr "Unicode sestavljenega"
#: zrcolagui.cpp:423 #: zrcolagui.cpp:405
msgid "&Browse" msgid "&Browse"
msgstr "Pre&brskaj" msgstr "Pre&brskaj"
#: zrcolagui.cpp:471 #: zrcolagui.cpp:453
msgid "Re&cently Used" msgid "Re&cently Used"
msgstr "Nedavno &uporabljeni" msgstr "Nedavno &uporabljeni"
#: zrcolagui.cpp:512 #: zrcolagui.cpp:494
msgid "Preview" msgid "Preview"
msgstr "Predogled" msgstr "Predogled"
#: zrcolagui.cpp:517 #: zrcolagui.cpp:499
msgid "U+" msgid "U+"
msgstr "U+" msgstr "U+"
#: zrcolagui.cpp:568 #: zrcolagui.cpp:550
msgid "Re&lated" msgid "Re&lated"
msgstr "&Sorodni" msgstr "&Sorodni"
#: zrcolagui.cpp:650
msgid ""
"Some character native to specific language you are working with should not "
"decompose to primitives.\n"
"For optimal decomposition you should set the language correctly."
msgstr ""
"Nekateri znaki iz posameznih jezikov, s katerimi delate, se ne smejo "
"razstaviti v dele.\n"
"Za optimalno razstavljanje izberite pravilni jezik."
#: zrcolagui.cpp:654
msgid "Select language &automatically according to selected keyboard"
msgstr "S&amodejno izberi jezik glede na izbrano tipkovnico"
#: zrcolagui.cpp:657
msgid "&Manually select the language from the list below:"
msgstr "Ročno izberi jezik na spodnje&m spisku:"
#: zrcolagui.cpp:669
msgid "Text Language"
msgstr "Jezik besedila"
#: zrcolagui.cpp:674
msgid ""
"ZRCola can be launched every time you log in to your computer.\n"
"It will be available on the system tray and via registered shortcuts Win+F5 "
"and Win+F6."
msgstr ""
"ZRCola se lahko zažene ob vsaki prijavi v vaš računalnik.\n"
"Na voljo bo na vrstici za sistemska obvestila ter preko registriranih "
"bližnjic Win+F5 in Win+F6."
#: zrcolagui.cpp:678
msgid "Start ZRCola &automatically on logon"
msgstr "S&amodejno zaženi ZRColo ob prijavi"
#: zrcolagui.cpp:685
msgid "Startup"
msgstr "Zagon"
#: zrcolakeyhndlr.cpp:44 #: zrcolakeyhndlr.cpp:44
msgid "" msgid ""
"INS key is pressed. Type the Unicode code of desired character now (up to " "INS key is pressed. Type the Unicode code of desired character now (up to "
@ -282,6 +301,14 @@ msgstr ""
"Pritisnjena tipka INS. Zdaj vtpikajte kodo Unicode želenega znaka (do štiri " "Pritisnjena tipka INS. Zdaj vtpikajte kodo Unicode želenega znaka (do štiri "
"šestnajstiške števke: 0-9, A-F), nato izpustite INS." "šestnajstiške števke: 0-9, A-F), nato izpustite INS."
#: zrcolasettings.cpp:116
msgid "Start ZRCola automatically on logon"
msgstr "Samodejno zaženi ZRColo ob prijavi"
#: zrcolagui.h:258
msgid "Settings"
msgstr "Nastavitve"
# Windows charset for this language (decimal) # Windows charset for this language (decimal)
#: MSIBuild/En.Win32.Release.Feature-2.idtx:3 #: MSIBuild/En.Win32.Release.Feature-2.idtx:3
#: MSIBuild/En.Win32.Release.Shortcut-2.idtx:3 #: MSIBuild/En.Win32.Release.Shortcut-2.idtx:3
@ -297,6 +324,21 @@ msgstr "1250"
msgid "Input system for linguistic use" msgid "Input system for linguistic use"
msgstr "Vnašalni sistem za jezikoslovno rabo" msgstr "Vnašalni sistem za jezikoslovno rabo"
#~ msgid "Auto Start"
#~ msgstr "Samodejni zagon"
#~ msgid "Select %s language for decomposition"
#~ msgstr "Izberi jezik %s za razstavljanje"
#~ msgid "&Start on Logon"
#~ msgstr "Z&aženi ob prijavi"
#~ msgid "Start this program automatically on logon"
#~ msgstr "Samodejno zaženi ta program ob prijavi"
#~ msgid "Set language according to keyboard layout automatically"
#~ msgstr "Samodejno nastavi jezik glede na izbrano tipkovnico"
#~ msgid "&Unicode" #~ msgid "&Unicode"
#~ msgstr "&Unicode" #~ msgstr "&Unicode"

View File

@ -48,3 +48,4 @@
#include "zrcolacomppnl.h" #include "zrcolacomppnl.h"
#include "zrcolafrm.h" #include "zrcolafrm.h"
#include "zrcolakeyhndlr.h" #include "zrcolakeyhndlr.h"
#include "zrcolasettings.h"

View File

@ -69,7 +69,7 @@ public:
wxZRColaFrame *m_mainWnd; ///< Main window wxZRColaFrame *m_mainWnd; ///< Main window
protected: protected:
wxLocale m_locale; ///< Current locale wxLocale m_locale; ///< Current locale
}; };

View File

@ -88,11 +88,9 @@ wxString wxZRColaCharGrid::GetToolTipText(int idx)
// See if this character has a key sequence registered. // See if this character has a key sequence registered.
ZRCola::keyseq_db::indexKey::size_type start; ZRCola::keyseq_db::indexKey::size_type start;
bool found; bool found;
ZRCola::keyseq_db::keyseq *ks = (ZRCola::keyseq_db::keyseq*)new char[sizeof(ZRCola::keyseq_db::keyseq)]; char ks[sizeof(ZRCola::keyseq_db::keyseq)] = {};
ks->chr = m_chars[idx]; ((ZRCola::keyseq_db::keyseq*)ks)->chr = m_chars[idx];
ks->seq_len = 0; found = app->m_ks_db.idxChr.find(*(ZRCola::keyseq_db::keyseq*)ks, start);
found = app->m_ks_db.idxChr.find(*ks, start);
delete ks;
if (found) { if (found) {
ZRCola::keyseq_db::keyseq &seq = app->m_ks_db.idxChr[start]; ZRCola::keyseq_db::keyseq &seq = app->m_ks_db.idxChr[start];

View File

@ -71,10 +71,10 @@ void wxZRColaCharSelect::OnIdle(wxIdleEvent& event)
m_gridPreview->SetCellValue(wxString(1, m_char), 0, 0); m_gridPreview->SetCellValue(wxString(1, m_char), 0, 0);
{ {
ZRCola::character_db::character *chr = (ZRCola::character_db::character*)new char[sizeof(ZRCola::character_db::character)]; char chr[sizeof(ZRCola::character_db::character)] = {};
chr->chr = m_char; ((ZRCola::character_db::character*)chr)->chr = m_char;
size_t start; size_t start;
if (app->m_chr_db.idxChr.find(*chr, start)) { if (app->m_chr_db.idxChr.find(*(ZRCola::character_db::character*)chr, start)) {
const ZRCola::character_db::character &chr = app->m_chr_db.idxChr[start]; const ZRCola::character_db::character &chr = app->m_chr_db.idxChr[start];
m_description->SetValue(wxString(chr.data, chr.desc_len)); m_description->SetValue(wxString(chr.data, chr.desc_len));
{ {
@ -94,7 +94,6 @@ void wxZRColaCharSelect::OnIdle(wxIdleEvent& event)
m_gridRelated->ClearGrid(); m_gridRelated->ClearGrid();
} }
m_gridRelated->Scroll(0, 0); m_gridRelated->Scroll(0, 0);
delete chr;
} }
} }

View File

@ -17,11 +17,11 @@
along with ZRCola. If not, see <http://www.gnu.org/licenses/>. along with ZRCola. If not, see <http://www.gnu.org/licenses/>.
*/ */
/// ///
/// Forward declarations /// Forward declarations
/// ///
class wxZRColaCharSelect; class wxZRColaCharSelect;
class wxPersistentZRColaCharSelect;
#pragma once #pragma once

View File

@ -119,7 +119,7 @@ void wxZRColaComposerPanel::SynchronizePanels()
std::wstring dst; std::wstring dst;
wxZRColaFrame *mainWnd = dynamic_cast<wxZRColaFrame*>(wxGetActiveWindow()); wxZRColaFrame *mainWnd = dynamic_cast<wxZRColaFrame*>(wxGetActiveWindow());
if (mainWnd) if (mainWnd)
app->m_t_db.Decompose(src.data(), len, &app->m_lc_db, mainWnd->m_lang, dst, &m_mapping2); app->m_t_db.Decompose(src.data(), len, &app->m_lc_db, mainWnd->m_settings->m_lang, dst, &m_mapping2);
else else
app->m_t_db.Decompose(src.data(), len, dst, &m_mapping2); app->m_t_db.Decompose(src.data(), len, dst, &m_mapping2);

View File

@ -25,46 +25,40 @@
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
wxBEGIN_EVENT_TABLE(wxZRColaFrame, wxZRColaFrameBase) wxBEGIN_EVENT_TABLE(wxZRColaFrame, wxZRColaFrameBase)
EVT_UPDATE_UI (wxID_AUTOSTART , wxZRColaFrame::OnAutostartUpdate ) EVT_MENU (wxID_EXIT , wxZRColaFrame::OnExit )
EVT_MENU (wxID_AUTOSTART , wxZRColaFrame::OnAutostart )
EVT_MENU (wxID_EXIT , wxZRColaFrame::OnExit )
EVT_UPDATE_UI_RANGE(wxID_CUT , wxID_CLEAR , wxZRColaFrame::OnForwardEventUpdate ) EVT_UPDATE_UI_RANGE(wxID_CUT , wxID_CLEAR , wxZRColaFrame::OnForwardEventUpdate )
EVT_MENU_RANGE (wxID_CUT , wxID_CLEAR , wxZRColaFrame::OnForwardEvent ) EVT_MENU_RANGE (wxID_CUT , wxID_CLEAR , wxZRColaFrame::OnForwardEvent )
EVT_UPDATE_UI (wxID_SELECTALL , wxZRColaFrame::OnForwardEventUpdate ) EVT_UPDATE_UI (wxID_SELECTALL , wxZRColaFrame::OnForwardEventUpdate )
EVT_MENU (wxID_SELECTALL , wxZRColaFrame::OnForwardEvent ) EVT_MENU (wxID_SELECTALL , wxZRColaFrame::OnForwardEvent )
EVT_UPDATE_UI_RANGE(wxID_SEND_COMPOSED , wxID_SEND_ABORT , wxZRColaFrame::OnSendUpdate ) EVT_MENU (wxID_CHARACTER_SELECTOR , wxZRColaFrame::OnInsertCharacter )
EVT_MENU (wxID_SEND_COMPOSED , wxZRColaFrame::OnSendComposed )
EVT_MENU (wxID_SEND_DECOMPOSED , wxZRColaFrame::OnSendDecomposed )
EVT_MENU (wxID_SEND_ABORT , wxZRColaFrame::OnSendAbort )
EVT_MENU (wxID_CHARACTER_SELECTOR , wxZRColaFrame::OnInsertCharacter ) EVT_UPDATE_UI_RANGE(wxID_SEND_COMPOSED , wxID_SEND_ABORT, wxZRColaFrame::OnSendUpdate )
EVT_MENU (wxID_SEND_COMPOSED , wxZRColaFrame::OnSendComposed )
EVT_MENU (wxID_SEND_DECOMPOSED , wxZRColaFrame::OnSendDecomposed )
EVT_MENU (wxID_SEND_ABORT , wxZRColaFrame::OnSendAbort )
EVT_UPDATE_UI (wxID_DECOMP_LANG_AUTO , wxZRColaFrame::OnDecomposedLanguageAutoUpdate) EVT_MENU (wxID_SETTINGS , wxZRColaFrame::OnSettings )
EVT_MENU (wxID_DECOMP_LANG_AUTO , wxZRColaFrame::OnDecomposedLanguageAuto )
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_UPDATE_UI (wxID_TOOLBAR_EDIT , wxZRColaFrame::OnToolbarEditUpdate ) EVT_UPDATE_UI (wxID_TOOLBAR_EDIT , wxZRColaFrame::OnToolbarEditUpdate )
EVT_MENU (wxID_TOOLBAR_EDIT , wxZRColaFrame::OnToolbarEdit ) EVT_MENU (wxID_TOOLBAR_EDIT , wxZRColaFrame::OnToolbarEdit )
EVT_UPDATE_UI (wxID_TOOLBAR_COMPOSE , wxZRColaFrame::OnToolbarComposeUpdate ) EVT_UPDATE_UI (wxID_TOOLBAR_COMPOSE , wxZRColaFrame::OnToolbarComposeUpdate )
EVT_MENU (wxID_TOOLBAR_COMPOSE , wxZRColaFrame::OnToolbarCompose ) EVT_MENU (wxID_TOOLBAR_COMPOSE , wxZRColaFrame::OnToolbarCompose )
EVT_UPDATE_UI (wxID_PANEL_CHRGRPS , wxZRColaFrame::OnPanelCharacterCatalogUpdate ) EVT_UPDATE_UI (wxID_PANEL_CHRGRPS , wxZRColaFrame::OnPanelCharacterCatalogUpdate)
EVT_MENU (wxID_PANEL_CHRGRPS , wxZRColaFrame::OnPanelCharacterCatalog ) EVT_MENU (wxID_PANEL_CHRGRPS , wxZRColaFrame::OnPanelCharacterCatalog )
EVT_MENU (wxID_FOCUS_CHARACTER_CATALOG , wxZRColaFrame::OnPanelCharacterCatalogFocus ) EVT_MENU (wxID_FOCUS_CHARACTER_CATALOG , wxZRColaFrame::OnPanelCharacterCatalogFocus )
EVT_MENU (wxID_HELP_REQCHAR , wxZRColaFrame::OnHelpReqChar ) EVT_MENU (wxID_HELP_REQCHAR , wxZRColaFrame::OnHelpReqChar )
EVT_MENU (wxID_ABOUT , wxZRColaFrame::OnAbout ) EVT_MENU (wxID_ABOUT , wxZRColaFrame::OnAbout )
wxEND_EVENT_TABLE() wxEND_EVENT_TABLE()
wxZRColaFrame::wxZRColaFrame() : wxZRColaFrame::wxZRColaFrame() :
m_lang_auto(true),
m_lang(ZRCola::langid_t_blank),
m_hWndSource(NULL), m_hWndSource(NULL),
m_chrSelect(NULL), m_chrSelect(NULL),
m_settings(NULL),
wxZRColaFrameBase(NULL) wxZRColaFrameBase(NULL)
{ {
{ {
@ -100,30 +94,15 @@ wxZRColaFrame::wxZRColaFrame() :
delete m_taskBarIcon; delete m_taskBarIcon;
} }
{ m_settings = new wxZRColaSettings(this);
// Populate language lists. wxPersistentRegisterAndRestore<wxZRColaSettings>(m_settings);
ZRColaApp *app = ((ZRColaApp*)wxTheApp);
m_toolDecompLanguage->Clear();
wxString label1_tran(_("Select %s language for decomposition"));
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(lang.name, lang.name_len),
label_tran2(wxGetTranslation(label, wxT("ZRCola-zrcdb")));
if (i < wxID_DECOMP_LANGUAGE_END - wxID_DECOMP_LANGUAGE_START + 1)
m_menuDecompLanguage->AppendRadioItem(wxID_DECOMP_LANGUAGE_START + i, label_tran2, wxString::Format(label1_tran, (const wxStringCharType*)label_tran2));
m_toolDecompLanguage->Insert(label_tran2, i);
if (m_lang == lang.id)
m_toolDecompLanguage->Select(i);
}
}
// Set focus.
m_panel->m_decomposed->SetFocus();
m_chrSelect = new wxZRColaCharSelect(this); m_chrSelect = new wxZRColaCharSelect(this);
wxPersistentRegisterAndRestore<wxZRColaCharSelect>(m_chrSelect); wxPersistentRegisterAndRestore<wxZRColaCharSelect>(m_chrSelect);
// Set focus.
m_panel->m_decomposed->SetFocus();
// Register global hotkey(s). // Register global hotkey(s).
if (!RegisterHotKey(wxZRColaHKID_INVOKE_COMPOSE, wxMOD_WIN, VK_F5)) if (!RegisterHotKey(wxZRColaHKID_INVOKE_COMPOSE, wxMOD_WIN, VK_F5))
wxMessageBox(_("ZRCola keyboard shortcut Win+F5 could not be registered. Some functionality will not be available."), _("Warning"), wxOK | wxICON_WARNING); wxMessageBox(_("ZRCola keyboard shortcut Win+F5 could not be registered. Some functionality will not be available."), _("Warning"), wxOK | wxICON_WARNING);
@ -175,6 +154,9 @@ wxZRColaFrame::~wxZRColaFrame()
if (m_chrSelect) if (m_chrSelect)
delete m_chrSelect; delete m_chrSelect;
if (m_settings)
delete m_settings;
if (m_taskBarIcon) { if (m_taskBarIcon) {
m_taskBarIcon->Disconnect(wxEVT_TASKBAR_LEFT_DOWN, wxTaskBarIconEventHandler(wxZRColaFrame::OnTaskbarIconClick), NULL, this); m_taskBarIcon->Disconnect(wxEVT_TASKBAR_LEFT_DOWN, wxTaskBarIconEventHandler(wxZRColaFrame::OnTaskbarIconClick), NULL, this);
delete m_taskBarIcon; delete m_taskBarIcon;
@ -186,51 +168,6 @@ wxZRColaFrame::~wxZRColaFrame()
} }
void wxZRColaFrame::OnAutostartUpdate(wxUpdateUIEvent& event)
{
#if defined(__WXMSW__)
wxString linkName(wxExpandEnvVars("%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\ZRCola.lnk"));
event.Check(wxFileExists(linkName));
#else
event.Enable(false);
#endif
}
void wxZRColaFrame::OnAutostart(wxCommandEvent& event)
{
#if defined(__WXMSW__)
wxString linkName(wxExpandEnvVars("%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\ZRCola.lnk"));
if (wxFileExists(linkName)) {
// The shortcut already exists. Remove it.
wxRemoveFile(linkName);
} else {
// Create the shortcut.
IShellLink *sl;
HRESULT hr = ::CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&sl);
if (SUCCEEDED(hr)) {
// Setup ZRCola shortcut.
sl->SetPath(wxTheApp->argv[0]);
sl->SetDescription(_("Start ZRCola automatically on logon"));
sl->SetShowCmd(SW_SHOWMINNOACTIVE);
// Query IShellLink for the IPersistFile interface, used for saving the
// shortcut in persistent storage.
IPersistFile *pf;
hr = sl->QueryInterface(IID_IPersistFile, (LPVOID*)&pf);
if (SUCCEEDED(hr)) {
// Save the link by calling IPersistFile::Save.
hr = pf->Save(linkName, TRUE);
pf->Release();
}
sl->Release();
}
}
#endif
}
void wxZRColaFrame::OnExit(wxCommandEvent& event) void wxZRColaFrame::OnExit(wxCommandEvent& event)
{ {
Close(); Close();
@ -307,74 +244,9 @@ void wxZRColaFrame::OnSendAbort(wxCommandEvent& event)
} }
void wxZRColaFrame::OnDecomposedLanguageAutoUpdate(wxUpdateUIEvent& event) void wxZRColaFrame::OnSettings(wxCommandEvent& event)
{ {
#if defined(__WXMSW__) m_settings->ShowModal();
event.Check(m_lang_auto);
#else
event.Enable(false);
#endif
}
void wxZRColaFrame::OnDecomposedLanguageAuto(wxCommandEvent& event)
{
// Toggle auto language flag.
m_lang_auto = !m_lang_auto;
if (m_lang_auto) {
#if defined(__WXMSW__)
// Set keyboard language.
HKL hkl = ::GetKeyboardLayout(0);
ZRCola::LangConvert(LOWORD(hkl), m_lang);
UpdateDecomposedLanguage();
#endif
}
}
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(m_lang == lang.id);
}
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 (m_lang != lang.id) {
m_lang = lang.id;
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);
m_lang_auto = false;
}
}
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 (m_lang != lang.id) {
m_lang = lang.id;
// Notify composed text something changed and should re-decompose.
wxCommandEvent event2(wxEVT_COMMAND_TEXT_UPDATED);
m_panel->m_composed->ProcessWindowEvent(event2);
m_lang_auto = false;
}
event.Skip();
} }
@ -482,11 +354,10 @@ HRESULT STDMETHODCALLTYPE wxZRColaFrame::OnLanguageChange(LANGID langid, __RPC__
HRESULT STDMETHODCALLTYPE wxZRColaFrame::OnLanguageChanged() HRESULT STDMETHODCALLTYPE wxZRColaFrame::OnLanguageChanged()
{ {
if (m_lang_auto) { if (m_settings->m_lang_auto) {
// Set keyboard language. // Set keyboard language.
HKL hkl = ::GetKeyboardLayout(0); HKL hkl = ::GetKeyboardLayout(0);
ZRCola::LangConvert(LOWORD(hkl), m_lang); ZRCola::LangConvert(LOWORD(hkl), m_settings->m_lang);
UpdateDecomposedLanguage();
} }
return S_OK; return S_OK;
@ -565,20 +436,6 @@ void wxZRColaFrame::DoSend(const wxString& str)
} }
void wxZRColaFrame::UpdateDecomposedLanguage()
{
ZRColaApp *app = ((ZRColaApp*)wxTheApp);
// Find language on the language list.
ZRCola::language_db::language *l = new ZRCola::language_db::language;
l->id = m_lang;
l->name_len = 0;
ZRCola::language_db::indexLang::size_type start;
m_toolDecompLanguage->SetSelection(app->m_lang_db.idxLng.find(*l, start) ? start : -1);
delete l;
}
#ifdef __WXMSW__ #ifdef __WXMSW__
WXLRESULT wxZRColaFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) WXLRESULT wxZRColaFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
@ -646,8 +503,6 @@ void wxPersistentZRColaFrame::Save() const
wxPersistentZRColaComposerPanel(wnd->m_panel).Save(); wxPersistentZRColaComposerPanel(wnd->m_panel).Save();
wxPersistentZRColaCharacterCatalogPanel(wnd->m_panelChrCat).Save(); wxPersistentZRColaCharacterCatalogPanel(wnd->m_panelChrCat).Save();
SaveValue(wxT("langAuto" ), wnd->m_lang_auto);
SaveValue(wxT("lang" ), wxString::FromAscii(wnd->m_lang.data, _countof(wnd->m_lang.data)));
wxPersistentTLW::Save(); wxPersistentTLW::Save();
} }
@ -658,27 +513,6 @@ bool wxPersistentZRColaFrame::Restore()
wxZRColaFrame * const wnd = static_cast<wxZRColaFrame*>(GetWindow()); wxZRColaFrame * const wnd = static_cast<wxZRColaFrame*>(GetWindow());
ZRColaApp *app = ((ZRColaApp*)wxTheApp);
wxString lang;
// Restore automatic language detection setting first.
RestoreValue(wxT("langAuto"), &(wnd->m_lang_auto));
if (wnd->m_lang_auto) {
#if defined(__WXMSW__)
// Set keyboard language.
HKL hkl = ::GetKeyboardLayout(0);
ZRCola::LangConvert(LOWORD(hkl), wnd->m_lang);
#endif
} else if (RestoreValue(wxT("lang"), &lang) && lang.Length() == 3) {
// The language was read from configuration.
wnd->m_lang = lang.c_str();
} else if (!app->m_lang_db.idxLng.empty()) {
const ZRCola::language_db::language &lang = app->m_lang_db.idxLng[0];
wnd->m_lang = lang.id;
} else
wnd->m_lang = ZRCola::langid_t_blank;
wnd->UpdateDecomposedLanguage();
wxPersistentZRColaCharacterCatalogPanel(wnd->m_panelChrCat).Restore(); wxPersistentZRColaCharacterCatalogPanel(wnd->m_panelChrCat).Restore();
wxPersistentZRColaComposerPanel(wnd->m_panel).Restore(); wxPersistentZRColaComposerPanel(wnd->m_panel).Restore();

View File

@ -27,6 +27,7 @@ class wxZRColaFrame;
#include "zrcolagui.h" #include "zrcolagui.h"
#include "zrcolachrslct.h" #include "zrcolachrslct.h"
#include "zrcolasettings.h"
#include <zrcola/language.h> #include <zrcola/language.h>
#include <wx/taskbar.h> #include <wx/taskbar.h>
#include <wx/persist/toplevel.h> #include <wx/persist/toplevel.h>
@ -54,9 +55,7 @@ class wxZRColaFrame :
public: public:
enum enum
{ {
wxID_DECOMP_LANGUAGE_START = 6000, wxID_FOCUS_CHARACTER_CATALOG = 2000,
wxID_DECOMP_LANGUAGE_END = 6099,
wxID_FOCUS_CHARACTER_CATALOG,
}; };
wxZRColaFrame(); wxZRColaFrame();
@ -66,8 +65,6 @@ public:
friend class wxZRColaComposerPanel; friend class wxZRColaComposerPanel;
protected: protected:
void OnAutostartUpdate(wxUpdateUIEvent& event);
void OnAutostart(wxCommandEvent& event);
void OnExit(wxCommandEvent& event); void OnExit(wxCommandEvent& event);
void OnForwardEventUpdate(wxUpdateUIEvent& event); void OnForwardEventUpdate(wxUpdateUIEvent& event);
void OnForwardEvent(wxCommandEvent& event); void OnForwardEvent(wxCommandEvent& event);
@ -76,11 +73,7 @@ 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 OnDecomposedLanguageAutoUpdate(wxUpdateUIEvent& event); void OnSettings(wxCommandEvent& event);
void OnDecomposedLanguageAuto(wxCommandEvent& event);
void OnDecomposedLanguageUpdate(wxUpdateUIEvent& event);
void OnDecomposedLanguage(wxCommandEvent& event);
virtual void OnDecompLanguageChoice(wxCommandEvent& event);
virtual void OnIdle(wxIdleEvent& event); virtual void OnIdle(wxIdleEvent& event);
void OnTaskbarIconClick(wxTaskBarIconEvent& event); void OnTaskbarIconClick(wxTaskBarIconEvent& event);
virtual void OnIconize(wxIconizeEvent& event); virtual void OnIconize(wxIconizeEvent& event);
@ -113,7 +106,6 @@ protected:
private: private:
void DoSend(const wxString& str); void DoSend(const wxString& str);
void UpdateDecomposedLanguage();
protected: protected:
#ifdef __WXMSW__ #ifdef __WXMSW__
@ -121,11 +113,10 @@ protected:
#endif #endif
protected: protected:
bool m_lang_auto; ///< Automatic language selection according to keyboard layout
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
wxTaskBarIcon *m_taskBarIcon; ///< Taskbar icon wxTaskBarIcon *m_taskBarIcon; ///< Taskbar icon
wxZRColaCharSelect *m_chrSelect; ///< Character selection dialog wxZRColaCharSelect *m_chrSelect; ///< Character selection dialog
wxZRColaSettings *m_settings; ///< Configuration dialog
}; };

View File

@ -32,12 +32,6 @@ wxZRColaFrameBase::wxZRColaFrameBase( wxWindow* parent, wxWindowID id, const wxS
m_menubar = new wxMenuBar( 0 ); m_menubar = new wxMenuBar( 0 );
m_menuProgram = new wxMenu(); m_menuProgram = new wxMenu();
wxMenuItem* m_menuItemAutoStart;
m_menuItemAutoStart = new wxMenuItem( m_menuProgram, wxID_AUTOSTART, wxString( _("&Start on Logon") ) , _("Start this program automatically on logon"), wxITEM_CHECK );
m_menuProgram->Append( m_menuItemAutoStart );
m_menuProgram->AppendSeparator();
wxMenuItem* m_menuItemExit; wxMenuItem* m_menuItemExit;
m_menuItemExit = new wxMenuItem( m_menuProgram, wxID_EXIT, wxString( _("E&xit") ) + wxT('\t') + wxT("Alt+F4"), _("Quit this program"), wxITEM_NORMAL ); m_menuItemExit = new wxMenuItem( m_menuProgram, wxID_EXIT, wxString( _("E&xit") ) + wxT('\t') + wxT("Alt+F4"), _("Quit this program"), wxITEM_NORMAL );
m_menuProgram->Append( m_menuItemExit ); m_menuProgram->Append( m_menuItemExit );
@ -118,15 +112,11 @@ wxZRColaFrameBase::wxZRColaFrameBase( wxWindow* parent, wxWindowID id, const wxS
#endif #endif
m_menuEdit->Append( m_menuItemSendAbort ); m_menuEdit->Append( m_menuItemSendAbort );
m_menuDecompLanguage = new wxMenu(); m_menuEdit->AppendSeparator();
wxMenuItem* m_menuDecompLanguageItem = new wxMenuItem( m_menuEdit, wxID_ANY, _("&Language"), wxEmptyString, wxITEM_NORMAL, m_menuDecompLanguage );
wxMenuItem* m_menuDecompLanguageAuto;
m_menuDecompLanguageAuto = new wxMenuItem( m_menuDecompLanguage, wxID_DECOMP_LANG_AUTO, wxString( _("&Automatic") ) , _("Set language according to keyboard layout automatically"), wxITEM_CHECK );
m_menuDecompLanguage->Append( m_menuDecompLanguageAuto );
m_menuDecompLanguage->AppendSeparator(); wxMenuItem* m_menuSettings;
m_menuSettings = new wxMenuItem( m_menuEdit, wxID_SETTINGS, wxString( _("&Settings...") ) , _("Open program configuration dialog"), wxITEM_NORMAL );
m_menuEdit->Append( m_menuDecompLanguageItem ); m_menuEdit->Append( m_menuSettings );
m_menubar->Append( m_menuEdit, _("&Edit") ); m_menubar->Append( m_menuEdit, _("&Edit") );
@ -179,12 +169,6 @@ wxZRColaFrameBase::wxZRColaFrameBase( wxWindow* parent, wxWindowID id, const wxS
m_toolSendDecomposed = m_toolbarCompose->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_toolbarCompose->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_toolbarCompose->AddSeparator();
wxArrayString m_toolDecompLanguageChoices;
m_toolDecompLanguage = new wxChoice( m_toolbarCompose, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_toolDecompLanguageChoices, 0 );
m_toolDecompLanguage->SetSelection( 0 );
m_toolbarCompose->AddControl( m_toolDecompLanguage );
m_toolbarCompose->Realize(); m_toolbarCompose->Realize();
m_mgr.AddPane( m_toolbarCompose, wxAuiPaneInfo().Name( wxT("toolbarCompose") ).Top().Caption( _("Compose") ).PinButton( true ).Dock().Resizable().FloatingSize( wxSize( -1,-1 ) ).LeftDockable( false ).RightDockable( false ).Row( 0 ).Layer( 1 ).ToolbarPane() ); m_mgr.AddPane( m_toolbarCompose, wxAuiPaneInfo().Name( wxT("toolbarCompose") ).Top().Caption( _("Compose") ).PinButton( true ).Dock().Resizable().FloatingSize( wxSize( -1,-1 ) ).LeftDockable( false ).RightDockable( false ).Row( 0 ).Layer( 1 ).ToolbarPane() );
@ -204,7 +188,6 @@ wxZRColaFrameBase::wxZRColaFrameBase( wxWindow* parent, wxWindowID id, const wxS
// Connect Events // Connect Events
this->Connect( wxEVT_ICONIZE, wxIconizeEventHandler( wxZRColaFrameBase::OnIconize ) ); this->Connect( wxEVT_ICONIZE, wxIconizeEventHandler( wxZRColaFrameBase::OnIconize ) );
this->Connect( wxEVT_IDLE, wxIdleEventHandler( wxZRColaFrameBase::OnIdle ) ); this->Connect( wxEVT_IDLE, wxIdleEventHandler( wxZRColaFrameBase::OnIdle ) );
m_toolDecompLanguage->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( wxZRColaFrameBase::OnDecompLanguageChoice ), NULL, this );
} }
wxZRColaFrameBase::~wxZRColaFrameBase() wxZRColaFrameBase::~wxZRColaFrameBase()
@ -212,7 +195,6 @@ wxZRColaFrameBase::~wxZRColaFrameBase()
// Disconnect Events // Disconnect Events
this->Disconnect( wxEVT_ICONIZE, wxIconizeEventHandler( wxZRColaFrameBase::OnIconize ) ); this->Disconnect( wxEVT_ICONIZE, wxIconizeEventHandler( wxZRColaFrameBase::OnIconize ) );
this->Disconnect( wxEVT_IDLE, wxIdleEventHandler( wxZRColaFrameBase::OnIdle ) ); this->Disconnect( wxEVT_IDLE, wxIdleEventHandler( wxZRColaFrameBase::OnIdle ) );
m_toolDecompLanguage->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( wxZRColaFrameBase::OnDecompLanguageChoice ), NULL, this );
m_mgr.UnInit(); m_mgr.UnInit();
@ -652,3 +634,103 @@ wxZRColaCharSelectBase::~wxZRColaCharSelectBase()
m_sdbSizerButtonsOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaCharSelectBase::OnOKButtonClick ), NULL, this ); m_sdbSizerButtonsOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaCharSelectBase::OnOKButtonClick ), NULL, this );
} }
wxZRColaSettingsBase::wxZRColaSettingsBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxDialog( parent, id, title, pos, size, style, name )
{
this->SetSizeHints( wxDefaultSize, wxSize( -1,-1 ) );
wxBoxSizer* bSizerContent;
bSizerContent = new wxBoxSizer( wxVERTICAL );
m_listbook = new wxListbook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLB_DEFAULT );
m_panelLanguage = new wxPanel( m_listbook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
wxBoxSizer* bSizerLanguage;
bSizerLanguage = new wxBoxSizer( wxVERTICAL );
m_langLabel = new wxStaticText( m_panelLanguage, wxID_ANY, _("Some character native to specific language you are working with should not decompose to primitives.\nFor optimal decomposition you should set the language correctly."), wxDefaultPosition, wxDefaultSize, 0 );
m_langLabel->Wrap( -1 );
bSizerLanguage->Add( m_langLabel, 0, wxALL|wxEXPAND, 5 );
m_langAuto = new wxRadioButton( m_panelLanguage, wxID_ANY, _("Select language &automatically according to selected keyboard"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
bSizerLanguage->Add( m_langAuto, 0, wxALL|wxEXPAND, 5 );
m_langManual = new wxRadioButton( m_panelLanguage, wxID_ANY, _("&Manually select the language from the list below:"), wxDefaultPosition, wxDefaultSize, 0 );
bSizerLanguage->Add( m_langManual, 0, wxALL|wxEXPAND, 5 );
m_languages = new wxListBox( m_panelLanguage, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
m_languages->SetMinSize( wxSize( -1,150 ) );
bSizerLanguage->Add( m_languages, 1, wxALL|wxEXPAND, 5 );
m_panelLanguage->SetSizer( bSizerLanguage );
m_panelLanguage->Layout();
bSizerLanguage->Fit( m_panelLanguage );
m_listbook->AddPage( m_panelLanguage, _("Text Language"), true );
m_panelAutoStart = new wxPanel( m_listbook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
wxBoxSizer* bSizerAutoStart;
bSizerAutoStart = new wxBoxSizer( wxVERTICAL );
m_autoStartLabel = new wxStaticText( m_panelAutoStart, wxID_ANY, _("ZRCola can be launched every time you log in to your computer.\nIt will be available on the system tray and via registered shortcuts Win+F5 and Win+F6."), wxDefaultPosition, wxDefaultSize, 0 );
m_autoStartLabel->Wrap( -1 );
bSizerAutoStart->Add( m_autoStartLabel, 0, wxALL|wxEXPAND, 5 );
m_autoStart = new wxCheckBox( m_panelAutoStart, wxID_ANY, _("Start ZRCola &automatically on logon"), wxDefaultPosition, wxDefaultSize, 0 );
bSizerAutoStart->Add( m_autoStart, 0, wxALL|wxEXPAND, 5 );
m_panelAutoStart->SetSizer( bSizerAutoStart );
m_panelAutoStart->Layout();
bSizerAutoStart->Fit( m_panelAutoStart );
m_listbook->AddPage( m_panelAutoStart, _("Startup"), false );
#ifdef __WXGTK__ // Small icon style not supported in GTK
wxListView* m_listbookListView = m_listbook->GetListView();
long m_listbookFlags = m_listbookListView->GetWindowStyleFlag();
if( m_listbookFlags & wxLC_SMALL_ICON )
{
m_listbookFlags = ( m_listbookFlags & ~wxLC_SMALL_ICON ) | wxLC_ICON;
}
m_listbookListView->SetWindowStyleFlag( m_listbookFlags );
#endif
bSizerContent->Add( m_listbook, 1, wxEXPAND | wxALL, 5 );
bSizerContent->Add( 0, 0, 0, wxALL|wxEXPAND, 5 );
m_sdbSizerButtons = new wxStdDialogButtonSizer();
m_sdbSizerButtonsOK = new wxButton( this, wxID_OK );
m_sdbSizerButtons->AddButton( m_sdbSizerButtonsOK );
m_sdbSizerButtonsApply = new wxButton( this, wxID_APPLY );
m_sdbSizerButtons->AddButton( m_sdbSizerButtonsApply );
m_sdbSizerButtonsCancel = new wxButton( this, wxID_CANCEL );
m_sdbSizerButtons->AddButton( m_sdbSizerButtonsCancel );
m_sdbSizerButtons->Realize();
bSizerContent->Add( m_sdbSizerButtons, 0, wxALL|wxEXPAND, 5 );
this->SetSizer( bSizerContent );
this->Layout();
bSizerContent->Fit( this );
this->Centre( wxBOTH );
// Connect Events
this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( wxZRColaSettingsBase::OnInitDialog ) );
m_langAuto->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( wxZRColaSettingsBase::OnLangAuto ), NULL, this );
m_langManual->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( wxZRColaSettingsBase::OnLangManual ), NULL, this );
m_sdbSizerButtonsApply->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaSettingsBase::OnApplyButtonClick ), NULL, this );
m_sdbSizerButtonsOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaSettingsBase::OnOKButtonClick ), NULL, this );
}
wxZRColaSettingsBase::~wxZRColaSettingsBase()
{
// Disconnect Events
this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( wxZRColaSettingsBase::OnInitDialog ) );
m_langAuto->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( wxZRColaSettingsBase::OnLangAuto ), NULL, this );
m_langManual->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( wxZRColaSettingsBase::OnLangManual ), NULL, this );
m_sdbSizerButtonsApply->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaSettingsBase::OnApplyButtonClick ), NULL, this );
m_sdbSizerButtonsOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaSettingsBase::OnOKButtonClick ), NULL, this );
}

View File

@ -25,7 +25,6 @@ class wxZRColaCharGrid;
#include <wx/settings.h> #include <wx/settings.h>
#include <wx/aui/aui.h> #include <wx/aui/aui.h>
#include <wx/aui/auibar.h> #include <wx/aui/auibar.h>
#include <wx/choice.h>
class wxZRColaCharacterCatalogPanel; class wxZRColaCharacterCatalogPanel;
class wxZRColaComposerPanel; class wxZRColaComposerPanel;
#include <wx/statusbr.h> #include <wx/statusbr.h>
@ -36,12 +35,18 @@ class wxZRColaComposerPanel;
#include <wx/panel.h> #include <wx/panel.h>
#include <wx/splitter.h> #include <wx/splitter.h>
#include <wx/timer.h> #include <wx/timer.h>
#include <wx/choice.h>
#include <wx/grid.h> #include <wx/grid.h>
#include <wx/srchctrl.h> #include <wx/srchctrl.h>
#include <wx/checklst.h> #include <wx/checklst.h>
#include <wx/stattext.h> #include <wx/stattext.h>
#include <wx/button.h> #include <wx/button.h>
#include <wx/dialog.h> #include <wx/dialog.h>
#include <wx/radiobut.h>
#include <wx/listbox.h>
#include <wx/checkbox.h>
#include <wx/listbook.h>
#include <wx/listctrl.h>
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
@ -55,12 +60,11 @@ class wxZRColaFrameBase : public wxFrame
protected: protected:
enum enum
{ {
wxID_AUTOSTART = 1000, wxID_CHARACTER_SELECTOR = 1000,
wxID_CHARACTER_SELECTOR,
wxID_SEND_COMPOSED, wxID_SEND_COMPOSED,
wxID_SEND_DECOMPOSED, wxID_SEND_DECOMPOSED,
wxID_SEND_ABORT, wxID_SEND_ABORT,
wxID_DECOMP_LANG_AUTO, wxID_SETTINGS,
wxID_TOOLBAR_EDIT, wxID_TOOLBAR_EDIT,
wxID_TOOLBAR_COMPOSE, wxID_TOOLBAR_COMPOSE,
wxID_PANEL_CHRGRPS, wxID_PANEL_CHRGRPS,
@ -70,7 +74,6 @@ 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_menuView; wxMenu* m_menuView;
wxMenu* m_menuHelp; wxMenu* m_menuHelp;
wxAuiToolBar* m_toolbarEdit; wxAuiToolBar* m_toolbarEdit;
@ -81,14 +84,12 @@ class wxZRColaFrameBase : public wxFrame
wxAuiToolBarItem* m_toolCharSelect; wxAuiToolBarItem* m_toolCharSelect;
wxAuiToolBarItem* m_toolSendComposed; wxAuiToolBarItem* m_toolSendComposed;
wxAuiToolBarItem* m_toolSendDecomposed; wxAuiToolBarItem* m_toolSendDecomposed;
wxChoice* m_toolDecompLanguage;
wxZRColaCharacterCatalogPanel* m_panelChrCat; wxZRColaCharacterCatalogPanel* m_panelChrCat;
wxStatusBar* m_statusBar; wxStatusBar* m_statusBar;
// Virtual event handlers, overide them in your derived class // Virtual event handlers, overide them in your derived class
virtual void OnIconize( wxIconizeEvent& event ) { event.Skip(); } virtual void OnIconize( wxIconizeEvent& event ) { event.Skip(); }
virtual void OnIdle( wxIdleEvent& event ) { event.Skip(); } virtual void OnIdle( wxIdleEvent& event ) { event.Skip(); }
virtual void OnDecompLanguageChoice( wxCommandEvent& event ) { event.Skip(); }
public: public:
@ -223,4 +224,41 @@ class wxZRColaCharSelectBase : public wxDialog
}; };
///////////////////////////////////////////////////////////////////////////////
/// Class wxZRColaSettingsBase
///////////////////////////////////////////////////////////////////////////////
class wxZRColaSettingsBase : public wxDialog
{
private:
protected:
wxListbook* m_listbook;
wxPanel* m_panelLanguage;
wxStaticText* m_langLabel;
wxRadioButton* m_langAuto;
wxRadioButton* m_langManual;
wxListBox* m_languages;
wxPanel* m_panelAutoStart;
wxStaticText* m_autoStartLabel;
wxCheckBox* m_autoStart;
wxStdDialogButtonSizer* m_sdbSizerButtons;
wxButton* m_sdbSizerButtonsOK;
wxButton* m_sdbSizerButtonsApply;
wxButton* m_sdbSizerButtonsCancel;
// Virtual event handlers, overide them in your derived class
virtual void OnInitDialog( wxInitDialogEvent& event ) { event.Skip(); }
virtual void OnLangAuto( wxCommandEvent& event ) { event.Skip(); }
virtual void OnLangManual( wxCommandEvent& event ) { event.Skip(); }
virtual void OnApplyButtonClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnOKButtonClick( wxCommandEvent& event ) { event.Skip(); }
public:
wxZRColaSettingsBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = wxT("ZRColaSettings") );
~wxZRColaSettingsBase();
};
#endif //__ZRCOLAGUI_H__ #endif //__ZRCOLAGUI_H__

190
ZRCola/zrcolasettings.cpp Normal file
View File

@ -0,0 +1,190 @@
/*
Copyright 2015-2016 Amebis
This file is part of ZRCola.
ZRCola 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.
ZRCola 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 ZRCola. If not, see <http://www.gnu.org/licenses/>.
*/
#include "stdafx.h"
//////////////////////////////////////////////////////////////////////////
// wxZRColaSettings
//////////////////////////////////////////////////////////////////////////
wxZRColaSettings::wxZRColaSettings(wxWindow* parent) :
m_lang_auto(true),
m_lang(ZRCola::langid_t_blank),
wxZRColaSettingsBase(parent)
{
ZRColaApp *app = ((ZRColaApp*)wxTheApp);
m_languages->Clear();
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(lang.name, lang.name_len),
label_tran(wxGetTranslation(label, wxT("ZRCola-zrcdb")));
m_languages->Insert(label_tran, i);
}
}
void wxZRColaSettings::OnInitDialog(wxInitDialogEvent& event)
{
event.Skip();
// Set state of auto-start according to Startup folder shortcut presence.
#if defined(__WXMSW__)
wxString linkName(wxExpandEnvVars("%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\ZRCola.lnk"));
m_autoStart->SetValue(wxFileExists(linkName));
#else
m_autoStart->SetValue(false);
m_panelAutoStart->Enable(false);
#endif
m_languages->Enable(!m_lang_auto);
(m_lang_auto ? m_langAuto : m_langManual)->SetValue(true);
ZRColaApp *app = ((ZRColaApp*)wxTheApp);
char l[sizeof(ZRCola::language_db::language)] = {};
((ZRCola::language_db::language*)l)->id = m_lang;
ZRCola::language_db::indexLang::size_type start;
m_languages->Select(app->m_lang_db.idxLng.find(*(ZRCola::language_db::language*)l, start) ? start : -1);
}
void wxZRColaSettings::OnLangAuto(wxCommandEvent& event)
{
m_languages->Enable(!event.IsChecked());
}
void wxZRColaSettings::OnLangManual(wxCommandEvent& event)
{
m_languages->Enable(event.IsChecked());
}
void wxZRColaSettings::OnApplyButtonClick(wxCommandEvent& event)
{
event.Skip();
#if defined(__WXMSW__)
wxString linkName(wxExpandEnvVars("%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\ZRCola.lnk"));
if (m_autoStart->IsChecked()) {
// Create the shortcut.
IShellLink *sl;
HRESULT hr = ::CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&sl);
if (SUCCEEDED(hr)) {
// Setup ZRCola shortcut.
sl->SetPath(wxTheApp->argv[0]);
sl->SetDescription(_("Start ZRCola automatically on logon"));
sl->SetShowCmd(SW_SHOWMINNOACTIVE);
// Query IShellLink for the IPersistFile interface, used for saving the
// shortcut in persistent storage.
IPersistFile *pf;
hr = sl->QueryInterface(IID_IPersistFile, (LPVOID*)&pf);
if (SUCCEEDED(hr)) {
// Save the link by calling IPersistFile::Save.
hr = pf->Save(linkName, TRUE);
pf->Release();
}
sl->Release();
}
} else if (wxFileExists(linkName)) {
// The shortcut already exists. Remove it.
wxRemoveFile(linkName);
}
#endif
if (m_langAuto->GetValue()) {
m_lang_auto = true;
#if defined(__WXMSW__)
// Set update keyboard language.
HKL hkl = ::GetKeyboardLayout(0);
ZRCola::LangConvert(LOWORD(hkl), m_lang);
#endif
} else {
m_lang_auto = false;
ZRColaApp *app = ((ZRColaApp*)wxTheApp);
const ZRCola::language_db::language &lang = app->m_lang_db.idxLng[m_languages->GetSelection()];
if (m_lang != lang.id) {
m_lang = lang.id;
// Notify composed text something changed and should re-decompose.
wxCommandEvent event2(wxEVT_COMMAND_TEXT_UPDATED);
app->m_mainWnd->m_panel->m_composed->ProcessWindowEvent(event2);
}
}
}
void wxZRColaSettings::OnOKButtonClick(wxCommandEvent& event)
{
wxZRColaSettings::OnApplyButtonClick(event);
}
//////////////////////////////////////////////////////////////////////////
// wxPersistentZRColaSettings
//////////////////////////////////////////////////////////////////////////
wxPersistentZRColaSettings::wxPersistentZRColaSettings(wxZRColaSettings *wnd) : wxPersistentDialog(wnd)
{
}
void wxPersistentZRColaSettings::Save() const
{
wxPersistentDialog::Save();
const wxZRColaSettings * const wnd = static_cast<const wxZRColaSettings*>(GetWindow());
SaveValue(wxT("langAuto"), wnd->m_lang_auto);
SaveValue(wxT("lang" ), wxString::FromAscii(wnd->m_lang.data, _countof(wnd->m_lang.data)));
}
bool wxPersistentZRColaSettings::Restore()
{
wxZRColaSettings * const wnd = static_cast<wxZRColaSettings*>(GetWindow());
ZRColaApp *app = ((ZRColaApp*)wxTheApp);
wxString lang;
// Restore automatic language detection setting first.
RestoreValue(wxT("langAuto"), &(wnd->m_lang_auto));
if (wnd->m_lang_auto) {
#if defined(__WXMSW__)
// Set keyboard language.
HKL hkl = ::GetKeyboardLayout(0);
ZRCola::LangConvert(LOWORD(hkl), wnd->m_lang);
#endif
} else if (RestoreValue(wxT("lang"), &lang) && lang.Length() == 3) {
// The language was read from configuration.
wnd->m_lang = lang.c_str();
} else if (!app->m_lang_db.idxLng.empty()) {
const ZRCola::language_db::language &lang = app->m_lang_db.idxLng[0];
wnd->m_lang = lang.id;
} else
wnd->m_lang = ZRCola::langid_t_blank;
return wxPersistentDialog::Restore();
}

72
ZRCola/zrcolasettings.h Normal file
View File

@ -0,0 +1,72 @@
/*
Copyright 2015-2016 Amebis
This file is part of ZRCola.
ZRCola 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.
ZRCola 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 ZRCola. If not, see <http://www.gnu.org/licenses/>.
*/
///
/// Forward declarations
///
class wxZRColaSettings;
class wxPersistentZRColaSettings;
#pragma once
#include "zrcolagui.h"
#include <wxex/persist/dialog.h>
///
/// Configuration dialog
///
class wxZRColaSettings : public wxZRColaSettingsBase
{
public:
wxZRColaSettings(wxWindow* parent);
friend class wxPersistentZRColaSettings; // Allow saving/restoring window state.
protected:
virtual void OnInitDialog(wxInitDialogEvent& event);
virtual void OnLangAuto(wxCommandEvent& event);
virtual void OnLangManual(wxCommandEvent& event);
virtual void OnApplyButtonClick(wxCommandEvent& event);
virtual void OnOKButtonClick(wxCommandEvent& event);
public:
bool m_lang_auto; ///< Is language for decomposing resolved using currently selected keyboard
ZRCola::langid_t m_lang; ///< Language for decomposing
};
///
/// Supports saving/restoring wxZRColaSettings state
///
class wxPersistentZRColaSettings : public wxPersistentDialog
{
public:
wxPersistentZRColaSettings(wxZRColaSettings *wnd);
virtual void Save() const;
virtual bool Restore();
};
inline wxPersistentObject *wxCreatePersistentObject(wxZRColaSettings *wnd)
{
return new wxPersistentZRColaSettings(wnd);
}