diff --git a/ZRCola/ZRCola.fbp b/ZRCola/ZRCola.fbp index 733e6d0..c7753ea 100644 --- a/ZRCola/ZRCola.fbp +++ b/ZRCola/ZRCola.fbp @@ -363,7 +363,7 @@ 0 1 Toggle compose toolbar - wxID_TOOLBAR_TRANSLATE + wxID_TOOLBAR_TRANSFORM wxITEM_CHECK &Compose Toolbar m_menuItemToolbarCompose @@ -666,7 +666,7 @@ 0 1 - m_toolbarTranslate + m_toolbarTransform 1 1 -1,-1 @@ -4554,7 +4554,7 @@ none 5 - wxEXPAND | wxALL + wxALL|wxEXPAND 1 1 @@ -4682,7 +4682,7 @@ Resizable 1 - + 500,-1 0 @@ -4711,7 +4711,7 @@ - + OnLanguageUpdate bSizerLanguage @@ -4774,7 +4774,7 @@ - -1 + 490 @@ -4879,7 +4879,7 @@ - OnLangAuto + @@ -4967,7 +4967,7 @@ - OnLangManual + @@ -5067,6 +5067,931 @@ + + + Transformation + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_panelTransformation + 1 + + + protected + 1 + + Resizable + 1 + 500,-1 + + 0 + + + + wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + OnTransformationUpdate + + + bSizerTransformation + wxVERTICAL + none + + 5 + wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + ZRCola offers multiple text transformations that can be arranged in a sequence. Please select desired transformations and the order they are applied. + + 0 + + + 0 + + 1 + m_transLabel + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + 490 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 3 + wxBOTH + 0,2 + 0 + 0 + + fgSizerTransformation + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 5 + wxEXPAND + 1 + + + bSizerTransAvailable + wxVERTICAL + none + + 5 + wxEXPAND|wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + A&vailable: + + 0 + + + 0 + + 1 + m_transAvailableLabel + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + -1,-1 + 1 + m_transAvailable + 1 + + + protected + 1 + + Resizable + 1 + + wxLB_SINGLE|wxLB_SORT + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL + 0 + + + bSizerTransActivate + wxVERTICAL + none + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + > + + 0 + -1,-1 + + 0 + + 1 + m_transActivate + 1 + + + protected + 1 + + Resizable + 1 + 32,32 + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + OnTransActivate + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + < + + 0 + -1,-1 + + 0 + + 1 + m_transDeactivate + 1 + + + protected + 1 + + Resizable + 1 + 32,32 + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + OnTransDeactivate + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + bSizerTransActive + wxVERTICAL + none + + 5 + wxEXPAND|wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + &Active: + + 0 + + + 0 + + 1 + m_transActiveLabel + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + -1,-1 + 1 + m_transActive + 1 + + + protected + 1 + + Resizable + 1 + + wxLB_SINGLE + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_RIGHT + 0 + + + bSizerTransActiveReorder + wxHORIZONTAL + none + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Up + + 0 + -1,-1 + + 0 + + 1 + m_transActiveUp + 1 + + + protected + 1 + + Resizable + 1 + 70,-1 + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + OnTransActiveUp + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Down + + 0 + -1,-1 + + 0 + + 1 + m_transActiveDown + 1 + + + protected + 1 + + Resizable + 1 + 70,-1 + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + OnTransActiveDown + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Startup @@ -5115,7 +6040,7 @@ Resizable 1 - + 500,-1 0 @@ -5207,7 +6132,7 @@ - -1 + 490 diff --git a/ZRCola/locale/ZRCola.pot b/ZRCola/locale/ZRCola.pot index bd32927..53c7de0 100644 --- a/ZRCola/locale/ZRCola.pot +++ b/ZRCola/locale/ZRCola.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: ZRCola\n" -"POT-Creation-Date: 2017-03-27 14:03+0200\n" +"POT-Creation-Date: 2017-04-03 12:01+0200\n" "PO-Revision-Date: 2016-05-13 15:52+0200\n" "Last-Translator: Simon Rozman \n" "Language-Team: Amebis, d. o. o., Kamnik \n" @@ -22,7 +22,7 @@ msgstr "" msgid "© 2004-%s ZRC SAZU" msgstr "" -#: zrcolaapp.cpp:72 zrcolafrm.cpp:92 zrcolagui.cpp:892 zrcolagui.h:106 +#: zrcolaapp.cpp:72 zrcolafrm.cpp:92 zrcolagui.cpp:980 zrcolagui.h:106 #: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4 #: MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4 #: MSIBuild/en_US.x64.Release.Feature-2.idtx:4 @@ -30,15 +30,15 @@ msgstr "" msgid "ZRCola" msgstr "" -#: zrcolachrreq.cpp:49 zrcolagui.cpp:1022 +#: zrcolachrreq.cpp:49 zrcolagui.cpp:1110 msgid "Character" msgstr "" -#: zrcolachrreq.cpp:58 zrcolagui.cpp:1043 +#: zrcolachrreq.cpp:58 zrcolagui.cpp:1131 msgid "Context" msgstr "" -#: zrcolachrreq.cpp:64 zrcolagui.h:365 +#: zrcolachrreq.cpp:64 zrcolagui.h:379 msgid "Request a New Character" msgstr "" @@ -55,15 +55,15 @@ msgstr "" msgid "Invalid character in Unicode found: %c" msgstr "" -#: zrcolachrslct.cpp:214 zrcolachrslct.cpp:395 zrcolachrslct.cpp:886 +#: zrcolachrslct.cpp:214 zrcolachrslct.cpp:390 zrcolachrslct.cpp:869 msgid "▸ Search Options" msgstr "" -#: zrcolachrslct.cpp:333 +#: zrcolachrslct.cpp:328 msgid ", " msgstr "" -#: zrcolachrslct.cpp:398 zrcolachrslct.cpp:883 +#: zrcolachrslct.cpp:393 zrcolachrslct.cpp:866 msgid "▾ Search Options" msgstr "" @@ -79,11 +79,11 @@ msgstr "" msgid "ZRCola keyboard shortcut Win+F6 could not be registered. Some functionality will not be available." msgstr "" -#: zrcolafrm.cpp:371 +#: zrcolafrm.cpp:362 msgid "http://zrcola.zrc-sazu.si/en/info/instructions/" msgstr "" -#: zrcolafrm.cpp:395 +#: zrcolafrm.cpp:386 msgid "http://zrcola.zrc-sazu.si/wp-content/uploads/2016/06/ZRCola_tipkovnica_Jun2016.pdf" msgstr "" @@ -427,39 +427,73 @@ msgstr "" msgid "List of related characters" msgstr "" -#: zrcolagui.cpp:788 +#: zrcolagui.cpp:790 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 "" -#: zrcolagui.cpp:792 +#: zrcolagui.cpp:794 msgid "Select language &automatically according to selected keyboard" msgstr "" -#: zrcolagui.cpp:795 +#: zrcolagui.cpp:797 msgid "&Manually select the language from the list below:" msgstr "" -#: zrcolagui.cpp:807 +#: zrcolagui.cpp:809 msgid "Text Language" msgstr "" -#: zrcolagui.cpp:812 +#: zrcolagui.cpp:816 +msgid "" +"ZRCola offers multiple text transformations that can be arranged in a sequence.\n" +"Please select desired transformations and the order they are applied." +msgstr "" + +#: zrcolagui.cpp:831 +msgid "A&vailable:" +msgstr "" + +#: zrcolagui.cpp:844 +msgid ">" +msgstr "" + +#: zrcolagui.cpp:847 +msgid "<" +msgstr "" + +#: zrcolagui.cpp:856 +msgid "&Active:" +msgstr "" + +#: zrcolagui.cpp:872 +msgid "Up" +msgstr "" + +#: zrcolagui.cpp:875 +msgid "Down" +msgstr "" + +#: zrcolagui.cpp:885 +msgid "Transformation" +msgstr "" + +#: zrcolagui.cpp:892 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 "" -#: zrcolagui.cpp:816 +#: zrcolagui.cpp:896 msgid "Start ZRCola &automatically on logon" msgstr "" -#: zrcolagui.cpp:823 +#: zrcolagui.cpp:903 msgid "Startup" msgstr "" -#: zrcolagui.cpp:903 +#: zrcolagui.cpp:991 msgid "" "Program and Website Editor: Janoš Ježovnik\n" "Development: Amebis, d. o. o., Kamnik\n" @@ -468,61 +502,61 @@ msgid "" "Development and maintenance of the original program (2004–2015): Peter Weiss" msgstr "" -#: zrcolagui.cpp:911 +#: zrcolagui.cpp:999 msgid "zrcola.zrc-sazu.si" msgstr "" -#: zrcolagui.cpp:917 +#: zrcolagui.cpp:1005 msgid "Texts made using ZRCola have to include in a footnote or some other appropriate part of the publication the note below:" msgstr "" -#: zrcolagui.cpp:921 +#: zrcolagui.cpp:1009 msgid "This text was written using the ZRCola input system (http://zrcola.zrc-sazu.si), developed at the Science and Research Centre of SAZU in Ljubljana (http://www.zrc-sazu.si) by Peter Weiss." msgstr "" -#: zrcolagui.cpp:962 +#: zrcolagui.cpp:1050 msgid "Log" msgstr "" -#: zrcolagui.cpp:978 +#: zrcolagui.cpp:1066 msgid "Quit and &Update..." msgstr "" -#: zrcolagui.cpp:980 +#: zrcolagui.cpp:1068 msgid "Exit this program and launch product update" msgstr "" -#: zrcolagui.cpp:984 +#: zrcolagui.cpp:1072 msgid "&Close" msgstr "" -#: zrcolagui.cpp:985 +#: zrcolagui.cpp:1073 msgid "Close this window" msgstr "" -#: zrcolagui.cpp:1024 +#: zrcolagui.cpp:1112 msgid "Enter the &character you would like to request:" msgstr "" -#: zrcolagui.cpp:1031 +#: zrcolagui.cpp:1119 msgid "Decomposed character to request" msgstr "" -#: zrcolagui.cpp:1035 +#: zrcolagui.cpp:1123 msgid "" "Please, use the decomposed form.\n" "You can use ZRCola keyboard shortcuts to enter the character or Copy&&Paste it from the Decomposed window." msgstr "" -#: zrcolagui.cpp:1045 +#: zrcolagui.cpp:1133 msgid "The &context, examples or description why and where the character is required:" msgstr "" -#: zrcolagui.cpp:1051 +#: zrcolagui.cpp:1139 msgid "Additional notes for character request" msgstr "" -#: zrcolagui.cpp:1058 +#: zrcolagui.cpp:1146 msgid "" "After clicking OK button, your e-mail application should open allowing you to submit the new character request to ZRCola Editor.\n" "Your e-mail application might not display all the characters correctly, but the Editor will be able to read them correctly anyway." @@ -532,7 +566,12 @@ msgstr "" msgid "INS key is pressed. Type the Unicode code of desired character now (up to four hexadecimal digits: 0-9, A-F), then release INS." msgstr "" -#: zrcolasettings.cpp:93 +#: zrcolasettings.cpp:90 +#, c-format +msgid "Unknown transformation (%u)" +msgstr "" + +#: zrcolasettings.cpp:181 msgid "Start ZRCola automatically on logon" msgstr "" @@ -542,7 +581,7 @@ msgid "" "Are you sure?" msgstr "" -#: zrcolaupdater.cpp:94 zrcolagui.h:336 +#: zrcolaupdater.cpp:94 zrcolagui.h:350 msgid "Product Update" msgstr "" @@ -550,11 +589,11 @@ msgstr "" msgid "Character Search" msgstr "" -#: zrcolagui.h:285 +#: zrcolagui.h:299 msgid "Settings" msgstr "" -#: zrcolagui.h:311 +#: zrcolagui.h:325 msgid "About ZRCola" msgstr "" diff --git a/ZRCola/locale/de_DE.po b/ZRCola/locale/de_DE.po index bca9089..3efca36 100644 --- a/ZRCola/locale/de_DE.po +++ b/ZRCola/locale/de_DE.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: ZRCola\n" -"POT-Creation-Date: 2017-03-27 14:04+0200\n" -"PO-Revision-Date: 2017-03-27 14:05+0200\n" +"POT-Creation-Date: 2017-04-03 12:04+0200\n" +"PO-Revision-Date: 2017-04-03 12:05+0200\n" "Last-Translator: Simon Rozman \n" "Language-Team: Amebis, d. o. o., Kamnik \n" "Language: de_DE\n" @@ -20,7 +20,7 @@ msgstr "" msgid "© 2004-%s ZRC SAZU" msgstr "" -#: zrcolaapp.cpp:72 zrcolafrm.cpp:92 zrcolagui.cpp:892 zrcolagui.h:106 +#: zrcolaapp.cpp:72 zrcolafrm.cpp:92 zrcolagui.cpp:980 zrcolagui.h:106 #: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4 #: MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4 #: MSIBuild/en_US.x64.Release.Feature-2.idtx:4 @@ -28,17 +28,17 @@ msgstr "" msgid "ZRCola" msgstr "ZRCola" -#: zrcolachrreq.cpp:49 zrcolagui.cpp:1022 +#: zrcolachrreq.cpp:49 zrcolagui.cpp:1110 #, fuzzy msgid "Character" msgstr "Eingabe eines Zeichenstils" -#: zrcolachrreq.cpp:58 zrcolagui.cpp:1043 +#: zrcolachrreq.cpp:58 zrcolagui.cpp:1131 #, fuzzy msgid "Context" msgstr "Konnte den Kontext auf dem überlagerten Fenster nicht initialisieren." -#: zrcolachrreq.cpp:64 zrcolagui.h:365 +#: zrcolachrreq.cpp:64 zrcolagui.h:379 msgid "Request a New Character" msgstr "" @@ -55,17 +55,17 @@ msgstr "Fehler bei der Validierung" msgid "Invalid character in Unicode found: %c" msgstr "" -#: zrcolachrslct.cpp:214 zrcolachrslct.cpp:395 zrcolachrslct.cpp:886 +#: zrcolachrslct.cpp:214 zrcolachrslct.cpp:390 zrcolachrslct.cpp:869 msgid "▸ Search Options" msgstr "" # Recitation separator -#: zrcolachrslct.cpp:333 +#: zrcolachrslct.cpp:328 #, fuzzy msgid ", " msgstr ", " -#: zrcolachrslct.cpp:398 zrcolachrslct.cpp:883 +#: zrcolachrslct.cpp:393 zrcolachrslct.cpp:866 msgid "▾ Search Options" msgstr "" @@ -82,11 +82,11 @@ msgstr "Warnung: " msgid "ZRCola keyboard shortcut Win+F6 could not be registered. Some functionality will not be available." msgstr "" -#: zrcolafrm.cpp:371 +#: zrcolafrm.cpp:362 msgid "http://zrcola.zrc-sazu.si/en/info/instructions/" msgstr "http://zrcola.zrc-sazu.si/de/info/instructions/" -#: zrcolafrm.cpp:395 +#: zrcolafrm.cpp:386 msgid "http://zrcola.zrc-sazu.si/wp-content/uploads/2016/06/ZRCola_tipkovnica_Jun2016.pdf" msgstr "http://zrcola.zrc-sazu.si/wp-content/uploads/2016/06/ZRCola_tipkovnica_Jun2016.pdf" @@ -461,39 +461,73 @@ msgstr "" msgid "List of related characters" msgstr "" -#: zrcolagui.cpp:788 +#: zrcolagui.cpp:790 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 "" -#: zrcolagui.cpp:792 +#: zrcolagui.cpp:794 msgid "Select language &automatically according to selected keyboard" msgstr "" -#: zrcolagui.cpp:795 +#: zrcolagui.cpp:797 msgid "&Manually select the language from the list below:" msgstr "" -#: zrcolagui.cpp:807 +#: zrcolagui.cpp:809 msgid "Text Language" msgstr "" -#: zrcolagui.cpp:812 +#: zrcolagui.cpp:816 +msgid "" +"ZRCola offers multiple text transformations that can be arranged in a sequence.\n" +"Please select desired transformations and the order they are applied." +msgstr "" + +#: zrcolagui.cpp:831 +msgid "A&vailable:" +msgstr "" + +#: zrcolagui.cpp:844 +msgid ">" +msgstr ">" + +#: zrcolagui.cpp:847 +msgid "<" +msgstr "<" + +#: zrcolagui.cpp:856 +msgid "&Active:" +msgstr "" + +#: zrcolagui.cpp:872 +msgid "Up" +msgstr "" + +#: zrcolagui.cpp:875 +msgid "Down" +msgstr "" + +#: zrcolagui.cpp:885 +msgid "Transformation" +msgstr "" + +#: zrcolagui.cpp:892 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 "" -#: zrcolagui.cpp:816 +#: zrcolagui.cpp:896 msgid "Start ZRCola &automatically on logon" msgstr "" -#: zrcolagui.cpp:823 +#: zrcolagui.cpp:903 msgid "Startup" msgstr "" -#: zrcolagui.cpp:903 +#: zrcolagui.cpp:991 msgid "" "Program and Website Editor: Janoš Ježovnik\n" "Development: Amebis, d. o. o., Kamnik\n" @@ -502,65 +536,65 @@ msgid "" "Development and maintenance of the original program (2004–2015): Peter Weiss" msgstr "" -#: zrcolagui.cpp:911 +#: zrcolagui.cpp:999 msgid "zrcola.zrc-sazu.si" msgstr "" -#: zrcolagui.cpp:917 +#: zrcolagui.cpp:1005 msgid "Texts made using ZRCola have to include in a footnote or some other appropriate part of the publication the note below:" msgstr "" -#: zrcolagui.cpp:921 +#: zrcolagui.cpp:1009 msgid "This text was written using the ZRCola input system (http://zrcola.zrc-sazu.si), developed at the Science and Research Centre of SAZU in Ljubljana (http://www.zrc-sazu.si) by Peter Weiss." msgstr "" -#: zrcolagui.cpp:962 +#: zrcolagui.cpp:1050 #, fuzzy msgid "Log" msgstr "&Log" -#: zrcolagui.cpp:978 +#: zrcolagui.cpp:1066 #, fuzzy msgid "Quit and &Update..." msgstr "Kann Benutzer-Konfigurationsdatei nicht aktualisieren." -#: zrcolagui.cpp:980 +#: zrcolagui.cpp:1068 msgid "Exit this program and launch product update" msgstr "" -#: zrcolagui.cpp:984 +#: zrcolagui.cpp:1072 #, fuzzy msgid "&Close" msgstr "&Schließen" -#: zrcolagui.cpp:985 +#: zrcolagui.cpp:1073 #, fuzzy msgid "Close this window" msgstr "Fenster schließen" -#: zrcolagui.cpp:1024 +#: zrcolagui.cpp:1112 msgid "Enter the &character you would like to request:" msgstr "" -#: zrcolagui.cpp:1031 +#: zrcolagui.cpp:1119 msgid "Decomposed character to request" msgstr "" -#: zrcolagui.cpp:1035 +#: zrcolagui.cpp:1123 msgid "" "Please, use the decomposed form.\n" "You can use ZRCola keyboard shortcuts to enter the character or Copy&&Paste it from the Decomposed window." msgstr "" -#: zrcolagui.cpp:1045 +#: zrcolagui.cpp:1133 msgid "The &context, examples or description why and where the character is required:" msgstr "" -#: zrcolagui.cpp:1051 +#: zrcolagui.cpp:1139 msgid "Additional notes for character request" msgstr "" -#: zrcolagui.cpp:1058 +#: zrcolagui.cpp:1146 msgid "" "After clicking OK button, your e-mail application should open allowing you to submit the new character request to ZRCola Editor.\n" "Your e-mail application might not display all the characters correctly, but the Editor will be able to read them correctly anyway." @@ -570,7 +604,12 @@ msgstr "" msgid "INS key is pressed. Type the Unicode code of desired character now (up to four hexadecimal digits: 0-9, A-F), then release INS." msgstr "" -#: zrcolasettings.cpp:93 +#: zrcolasettings.cpp:90 +#, c-format +msgid "Unknown transformation (%u)" +msgstr "" + +#: zrcolasettings.cpp:181 msgid "Start ZRCola automatically on logon" msgstr "" @@ -580,7 +619,7 @@ msgid "" "Are you sure?" msgstr "" -#: zrcolaupdater.cpp:94 zrcolagui.h:336 +#: zrcolaupdater.cpp:94 zrcolagui.h:350 msgid "Product Update" msgstr "" @@ -589,11 +628,11 @@ msgstr "" msgid "Character Search" msgstr "Skupine &znakov" -#: zrcolagui.h:285 +#: zrcolagui.h:299 msgid "Settings" msgstr "" -#: zrcolagui.h:311 +#: zrcolagui.h:325 msgid "About ZRCola" msgstr "" diff --git a/ZRCola/locale/ru_RU.po b/ZRCola/locale/ru_RU.po index a162662..719da73 100644 --- a/ZRCola/locale/ru_RU.po +++ b/ZRCola/locale/ru_RU.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: ZRCola\n" -"POT-Creation-Date: 2017-03-27 14:05+0200\n" -"PO-Revision-Date: 2017-03-27 14:05+0200\n" +"POT-Creation-Date: 2017-04-03 12:04+0200\n" +"PO-Revision-Date: 2017-04-03 12:04+0200\n" "Last-Translator: Simon Rozman \n" "Language-Team: Amebis, d. o. o., Kamnik \n" "Language: ru_RU\n" @@ -20,7 +20,7 @@ msgstr "" msgid "© 2004-%s ZRC SAZU" msgstr "© 2004–%s ZRC SAZU" -#: zrcolaapp.cpp:72 zrcolafrm.cpp:92 zrcolagui.cpp:892 zrcolagui.h:106 +#: zrcolaapp.cpp:72 zrcolafrm.cpp:92 zrcolagui.cpp:980 zrcolagui.h:106 #: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4 #: MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4 #: MSIBuild/en_US.x64.Release.Feature-2.idtx:4 @@ -28,15 +28,15 @@ msgstr "© 2004–%s ZRC SAZU" msgid "ZRCola" msgstr "ZRCola" -#: zrcolachrreq.cpp:49 zrcolagui.cpp:1022 +#: zrcolachrreq.cpp:49 zrcolagui.cpp:1110 msgid "Character" msgstr "Знак" -#: zrcolachrreq.cpp:58 zrcolagui.cpp:1043 +#: zrcolachrreq.cpp:58 zrcolagui.cpp:1131 msgid "Context" msgstr "Контекст" -#: zrcolachrreq.cpp:64 zrcolagui.h:365 +#: zrcolachrreq.cpp:64 zrcolagui.h:379 msgid "Request a New Character" msgstr "Запрос нового знака" @@ -53,16 +53,16 @@ msgstr "" msgid "Invalid character in Unicode found: %c" msgstr "" -#: zrcolachrslct.cpp:214 zrcolachrslct.cpp:395 zrcolachrslct.cpp:886 +#: zrcolachrslct.cpp:214 zrcolachrslct.cpp:390 zrcolachrslct.cpp:869 msgid "▸ Search Options" msgstr "▸ Опции поиска" # Recitation separator -#: zrcolachrslct.cpp:333 +#: zrcolachrslct.cpp:328 msgid ", " msgstr ", " -#: zrcolachrslct.cpp:398 zrcolachrslct.cpp:883 +#: zrcolachrslct.cpp:393 zrcolachrslct.cpp:866 msgid "▾ Search Options" msgstr "▾ Опции поиска" @@ -78,11 +78,11 @@ msgstr "Предупреждение" msgid "ZRCola keyboard shortcut Win+F6 could not be registered. Some functionality will not be available." msgstr "Сочетание клавиш Win+F6 невозможно регистрировать. Некоторые функциональности не будут доступны." -#: zrcolafrm.cpp:371 +#: zrcolafrm.cpp:362 msgid "http://zrcola.zrc-sazu.si/en/info/instructions/" msgstr "http://zrcola.zrc-sazu.si/ru/info/instructions/" -#: zrcolafrm.cpp:395 +#: zrcolafrm.cpp:386 msgid "http://zrcola.zrc-sazu.si/wp-content/uploads/2016/06/ZRCola_tipkovnica_Jun2016.pdf" msgstr "http://zrcola.zrc-sazu.si/wp-content/uploads/2016/06/ZRCola_tipkovnica_Jun2016.pdf" @@ -426,7 +426,7 @@ msgstr "&Связанное" msgid "List of related characters" msgstr "Список связанных знаков" -#: zrcolagui.cpp:788 +#: zrcolagui.cpp:790 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." @@ -434,19 +434,53 @@ msgstr "" "Некоторые знаки использованного языка нельзя разбирать.\n" "Для оптимальной разборки вы должны настроить правильный язык." -#: zrcolagui.cpp:792 +#: zrcolagui.cpp:794 msgid "Select language &automatically according to selected keyboard" msgstr "&Автоматически установить язык на основе выбранной клавиатуры" -#: zrcolagui.cpp:795 +#: zrcolagui.cpp:797 msgid "&Manually select the language from the list below:" msgstr "&Вручную выбрать язык со списка:" -#: zrcolagui.cpp:807 +#: zrcolagui.cpp:809 msgid "Text Language" msgstr "Язык текста" -#: zrcolagui.cpp:812 +#: zrcolagui.cpp:816 +msgid "" +"ZRCola offers multiple text transformations that can be arranged in a sequence.\n" +"Please select desired transformations and the order they are applied." +msgstr "" + +#: zrcolagui.cpp:831 +msgid "A&vailable:" +msgstr "" + +#: zrcolagui.cpp:844 +msgid ">" +msgstr ">" + +#: zrcolagui.cpp:847 +msgid "<" +msgstr "<" + +#: zrcolagui.cpp:856 +msgid "&Active:" +msgstr "" + +#: zrcolagui.cpp:872 +msgid "Up" +msgstr "Up" + +#: zrcolagui.cpp:875 +msgid "Down" +msgstr "Down" + +#: zrcolagui.cpp:885 +msgid "Transformation" +msgstr "" + +#: zrcolagui.cpp:892 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." @@ -454,15 +488,15 @@ msgstr "" "Запуск системы ZRCola возможен при каждом запуске компьютера.\n" "После запуска система ZRCola доступна на панели задач либо через нажатие сочетания клавиш Win+F5 и Win+F6." -#: zrcolagui.cpp:816 +#: zrcolagui.cpp:896 msgid "Start ZRCola &automatically on logon" msgstr "&Автоматически запустить систему ZRCola при запуске компьютера" -#: zrcolagui.cpp:823 +#: zrcolagui.cpp:903 msgid "Startup" msgstr "Запуск" -#: zrcolagui.cpp:903 +#: zrcolagui.cpp:991 msgid "" "Program and Website Editor: Janoš Ježovnik\n" "Development: Amebis, d. o. o., Kamnik\n" @@ -476,47 +510,47 @@ msgstr "" "Перевод на русский язык: Домен Крвина (Domen Krvina), Силво Торкар (Silvo Torkar), Анастасия Плотникова\n" "Разработка in техническая поддержка первоначальной программы (2004–2015): Петер Вейсс (Peter Weiss)" -#: zrcolagui.cpp:911 +#: zrcolagui.cpp:999 msgid "zrcola.zrc-sazu.si" msgstr "zrcola.zrc-sazu.si" -#: zrcolagui.cpp:917 +#: zrcolagui.cpp:1005 msgid "Texts made using ZRCola have to include in a footnote or some other appropriate part of the publication the note below:" msgstr "Текст, созданный с помощью системы ZRCola, должен в примечании или другом соответствующем месте в публикации сопровождаться следующей записью:" -#: zrcolagui.cpp:921 +#: zrcolagui.cpp:1009 msgid "This text was written using the ZRCola input system (http://zrcola.zrc-sazu.si), developed at the Science and Research Centre of SAZU in Ljubljana (http://www.zrc-sazu.si) by Peter Weiss." msgstr "Текст подготовлен с помощью системы ввода ZRCola (http://zrcola.zrc-sazu.si), разработанной в Научно-исследовательском центре Словенской академии наук и искусств в Любляне (http://www.zrc-sazu.si) Петром Вейссoм." -#: zrcolagui.cpp:962 +#: zrcolagui.cpp:1050 msgid "Log" msgstr "Журнал" -#: zrcolagui.cpp:978 +#: zrcolagui.cpp:1066 msgid "Quit and &Update..." msgstr "Выйти и &обновить ..." -#: zrcolagui.cpp:980 +#: zrcolagui.cpp:1068 msgid "Exit this program and launch product update" msgstr "Выйти из программы и запустить обновление" -#: zrcolagui.cpp:984 +#: zrcolagui.cpp:1072 msgid "&Close" msgstr "&Закрыть" -#: zrcolagui.cpp:985 +#: zrcolagui.cpp:1073 msgid "Close this window" msgstr "Закрыть это окно" -#: zrcolagui.cpp:1024 +#: zrcolagui.cpp:1112 msgid "Enter the &character you would like to request:" msgstr "Ввести запрашиваемый &знак:" -#: zrcolagui.cpp:1031 +#: zrcolagui.cpp:1119 msgid "Decomposed character to request" msgstr "Запрашиваемый разобранный знак" -#: zrcolagui.cpp:1035 +#: zrcolagui.cpp:1123 msgid "" "Please, use the decomposed form.\n" "You can use ZRCola keyboard shortcuts to enter the character or Copy&&Paste it from the Decomposed window." @@ -524,15 +558,15 @@ msgstr "" "Пожалуйста, используйте разобранный формат.\n" "Для ввода запрашиваемого знака можно использовать сочетания клавиш системы ZRCola либо копировать и вставить знаки из окна для разборки." -#: zrcolagui.cpp:1045 +#: zrcolagui.cpp:1133 msgid "The &context, examples or description why and where the character is required:" msgstr "&Контекст, примеры либо описание запрашиваемого знака или объяснение, зачем он нужен:" -#: zrcolagui.cpp:1051 +#: zrcolagui.cpp:1139 msgid "Additional notes for character request" msgstr "Дополнительные примечания" -#: zrcolagui.cpp:1058 +#: zrcolagui.cpp:1146 msgid "" "After clicking OK button, your e-mail application should open allowing you to submit the new character request to ZRCola Editor.\n" "Your e-mail application might not display all the characters correctly, but the Editor will be able to read them correctly anyway." @@ -544,7 +578,12 @@ msgstr "" msgid "INS key is pressed. Type the Unicode code of desired character now (up to four hexadecimal digits: 0-9, A-F), then release INS." msgstr "Нажата клавиша INS. Введите код Юникод желаемого знака (максимум четыре шестнадцатеричныe цифры: 0-9, A-F), затем отпустите клавишу INS." -#: zrcolasettings.cpp:93 +#: zrcolasettings.cpp:90 +#, c-format +msgid "Unknown transformation (%u)" +msgstr "" + +#: zrcolasettings.cpp:181 msgid "Start ZRCola automatically on logon" msgstr "Автоматически запустить систему ZRCola при запуске компьютера" @@ -556,7 +595,7 @@ msgstr "" "Программа будет закрыта и обновлена.\n" "Вы уверены?" -#: zrcolaupdater.cpp:94 zrcolagui.h:336 +#: zrcolaupdater.cpp:94 zrcolagui.h:350 msgid "Product Update" msgstr "Обновление продукта" @@ -564,11 +603,11 @@ msgstr "Обновление продукта" msgid "Character Search" msgstr "Поиск знака" -#: zrcolagui.h:285 +#: zrcolagui.h:299 msgid "Settings" msgstr "Настройки" -#: zrcolagui.h:311 +#: zrcolagui.h:325 msgid "About ZRCola" msgstr "О системе ZRCola" @@ -772,15 +811,9 @@ msgstr "Система ввода ZRCola для лингвистического #~ msgid "Left" #~ msgstr "Left" -#~ msgid "Up" -#~ msgstr "Up" - #~ msgid "Right" #~ msgstr "Right" -#~ msgid "Down" -#~ msgstr "Down" - #~ msgid "Num Lock" #~ msgstr "Num Lock" diff --git a/ZRCola/locale/sl_SI.po b/ZRCola/locale/sl_SI.po index 4433292..d44dcb3 100644 --- a/ZRCola/locale/sl_SI.po +++ b/ZRCola/locale/sl_SI.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: ZRCola\n" -"POT-Creation-Date: 2017-03-27 14:03+0200\n" -"PO-Revision-Date: 2017-03-27 14:04+0200\n" +"POT-Creation-Date: 2017-04-03 12:01+0200\n" +"PO-Revision-Date: 2017-04-03 12:03+0200\n" "Last-Translator: Simon Rozman \n" "Language-Team: Amebis, d. o. o., Kamnik \n" "Language: sl_SI\n" @@ -20,7 +20,7 @@ msgstr "" msgid "© 2004-%s ZRC SAZU" msgstr "© 2004-%s ZRC SAZU" -#: zrcolaapp.cpp:72 zrcolafrm.cpp:92 zrcolagui.cpp:892 zrcolagui.h:106 +#: zrcolaapp.cpp:72 zrcolafrm.cpp:92 zrcolagui.cpp:980 zrcolagui.h:106 #: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4 #: MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4 #: MSIBuild/en_US.x64.Release.Feature-2.idtx:4 @@ -28,15 +28,15 @@ msgstr "© 2004-%s ZRC SAZU" msgid "ZRCola" msgstr "ZRCola" -#: zrcolachrreq.cpp:49 zrcolagui.cpp:1022 +#: zrcolachrreq.cpp:49 zrcolagui.cpp:1110 msgid "Character" msgstr "Znak" -#: zrcolachrreq.cpp:58 zrcolagui.cpp:1043 +#: zrcolachrreq.cpp:58 zrcolagui.cpp:1131 msgid "Context" msgstr "Kontekst" -#: zrcolachrreq.cpp:64 zrcolagui.h:365 +#: zrcolachrreq.cpp:64 zrcolagui.h:379 msgid "Request a New Character" msgstr "Zahtevaj nov znak" @@ -53,16 +53,16 @@ msgstr "Nesoglasje pri preverjanju" msgid "Invalid character in Unicode found: %c" msgstr "Napačen znak v zapisu Unicode: %c" -#: zrcolachrslct.cpp:214 zrcolachrslct.cpp:395 zrcolachrslct.cpp:886 +#: zrcolachrslct.cpp:214 zrcolachrslct.cpp:390 zrcolachrslct.cpp:869 msgid "▸ Search Options" msgstr "▸ Možnosti iskanja" # Recitation separator -#: zrcolachrslct.cpp:333 +#: zrcolachrslct.cpp:328 msgid ", " msgstr ", " -#: zrcolachrslct.cpp:398 zrcolachrslct.cpp:883 +#: zrcolachrslct.cpp:393 zrcolachrslct.cpp:866 msgid "▾ Search Options" msgstr "▾ Možnosti iskanja" @@ -78,11 +78,11 @@ msgstr "Opozorilo" msgid "ZRCola keyboard shortcut Win+F6 could not be registered. Some functionality will not be available." msgstr "ZRColine bližnjice na tipkovnici Win+F6 ni mogoče registrirati. Nekaj funkcionalnosti ne bo na voljo." -#: zrcolafrm.cpp:371 +#: zrcolafrm.cpp:362 msgid "http://zrcola.zrc-sazu.si/en/info/instructions/" msgstr "http://zrcola.zrc-sazu.si/info/instructions/" -#: zrcolafrm.cpp:395 +#: zrcolafrm.cpp:386 msgid "http://zrcola.zrc-sazu.si/wp-content/uploads/2016/06/ZRCola_tipkovnica_Jun2016.pdf" msgstr "http://zrcola.zrc-sazu.si/wp-content/uploads/2016/06/ZRCola_tipkovnica_Jun2016.pdf" @@ -426,7 +426,7 @@ msgstr "&Sorodni" msgid "List of related characters" msgstr "Seznam sorodnih znakov" -#: zrcolagui.cpp:788 +#: zrcolagui.cpp:790 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." @@ -434,19 +434,55 @@ msgstr "" "Nekateri znaki iz posameznih jezikov, s katerimi delate, se ne smejo razstavljati.\n" "Za optimalno razstavljanje izberite pravilni jezik." -#: zrcolagui.cpp:792 +#: zrcolagui.cpp:794 msgid "Select language &automatically according to selected keyboard" msgstr "S&amodejno izberi jezik glede na izbrano tipkovnico" -#: zrcolagui.cpp:795 +#: zrcolagui.cpp:797 msgid "&Manually select the language from the list below:" msgstr "&Ročno izberi jezik s seznama spodaj:" -#: zrcolagui.cpp:807 +#: zrcolagui.cpp:809 msgid "Text Language" msgstr "Jezik besedila" -#: zrcolagui.cpp:812 +#: zrcolagui.cpp:816 +msgid "" +"ZRCola offers multiple text transformations that can be arranged in a sequence.\n" +"Please select desired transformations and the order they are applied." +msgstr "" +"ZRCola ponuja različne pretvorbe besedila, ki jih lahko uredimo v zaporedje.\n" +"Prosimo, izberite želene pretvorbe in vrstni red, v katerem naj jih uporabi." + +#: zrcolagui.cpp:831 +msgid "A&vailable:" +msgstr "Na &voljo:" + +#: zrcolagui.cpp:844 +msgid ">" +msgstr ">" + +#: zrcolagui.cpp:847 +msgid "<" +msgstr "<" + +#: zrcolagui.cpp:856 +msgid "&Active:" +msgstr "&Aktivni:" + +#: zrcolagui.cpp:872 +msgid "Up" +msgstr "Gor" + +#: zrcolagui.cpp:875 +msgid "Down" +msgstr "Dol" + +#: zrcolagui.cpp:885 +msgid "Transformation" +msgstr "Pretvorba" + +#: zrcolagui.cpp:892 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." @@ -454,15 +490,15 @@ msgstr "" "ZRCola se lahko zažene ob vsaki prijavi v vaš računalnik.\n" "Na voljo bo v vrstici za sistemska obvestila ter preko registriranih bližnjic Win+F5 in Win+F6." -#: zrcolagui.cpp:816 +#: zrcolagui.cpp:896 msgid "Start ZRCola &automatically on logon" msgstr "S&amodejno zaženi ZRColo ob prijavi" -#: zrcolagui.cpp:823 +#: zrcolagui.cpp:903 msgid "Startup" msgstr "Zagon" -#: zrcolagui.cpp:903 +#: zrcolagui.cpp:991 msgid "" "Program and Website Editor: Janoš Ježovnik\n" "Development: Amebis, d. o. o., Kamnik\n" @@ -476,48 +512,48 @@ msgstr "" "Prevod v ruski jezik: Domen Krvina, Silvo Torkar, Anastasija Plotnikova\n" "Razvoj in vzdrževanje prvotnega programa (2004–2015): Peter Weiss" -#: zrcolagui.cpp:911 +#: zrcolagui.cpp:999 msgid "zrcola.zrc-sazu.si" msgstr "zrcola.zrc-sazu.si" -#: zrcolagui.cpp:917 +#: zrcolagui.cpp:1005 msgid "Texts made using ZRCola have to include in a footnote or some other appropriate part of the publication the note below:" msgstr "Besedilo, nastalo z uporabo ZRCole, mora biti v opombi ali na drugem ustreznem mestu v publikaciji opremljeno z naslednjim zapisom:" -#: zrcolagui.cpp:921 +#: zrcolagui.cpp:1009 msgid "This text was written using the ZRCola input system (http://zrcola.zrc-sazu.si), developed at the Science and Research Centre of SAZU in Ljubljana (http://www.zrc-sazu.si) by Peter Weiss." msgstr "Besedilo je bilo pripravljeno z vnašalnim sistemom ZRCola (http://zrcola.zrc-sazu.si), ki ga je na Znanstvenoraziskovalnem centru SAZU v Ljubljani (http://www.zrc-sazu.si) razvil Peter Weiss." -#: zrcolagui.cpp:962 +#: zrcolagui.cpp:1050 msgid "Log" msgstr "Dnevnik" -#: zrcolagui.cpp:978 +#: zrcolagui.cpp:1066 msgid "Quit and &Update..." msgstr "Za&ustavi in posodobi ..." -#: zrcolagui.cpp:980 +#: zrcolagui.cpp:1068 msgid "Exit this program and launch product update" msgstr "Zaustavi program in zaženi posodobitev izdelka" -#: zrcolagui.cpp:984 +#: zrcolagui.cpp:1072 msgid "&Close" msgstr "&Zapri" -#: zrcolagui.cpp:985 +#: zrcolagui.cpp:1073 msgid "Close this window" msgstr "Zapri to okno" -#: zrcolagui.cpp:1024 +#: zrcolagui.cpp:1112 msgid "Enter the &character you would like to request:" msgstr "Vpišite &znak, ki ga želite zahtevati:" -#: zrcolagui.cpp:1031 +#: zrcolagui.cpp:1119 msgid "Decomposed character to request" msgstr "Zahtevani znak v razstavljeni obliki" # Please use a double && for final "&" character -#: zrcolagui.cpp:1035 +#: zrcolagui.cpp:1123 msgid "" "Please, use the decomposed form.\n" "You can use ZRCola keyboard shortcuts to enter the character or Copy&&Paste it from the Decomposed window." @@ -525,15 +561,15 @@ msgstr "" "Uporabite razstavljeno obliko.\n" "Za vnos znaka lahko uporabite ZRColine bližnjice na tipkovnici ali ga kopirate in prilepite iz okna z razstavljenim besedilom." -#: zrcolagui.cpp:1045 +#: zrcolagui.cpp:1133 msgid "The &context, examples or description why and where the character is required:" msgstr "&Kontekst, primeri oziroma opis, zakaj in kje potrebujete novi znak:" -#: zrcolagui.cpp:1051 +#: zrcolagui.cpp:1139 msgid "Additional notes for character request" msgstr "Dodatne opombe za zahtevo znaka" -#: zrcolagui.cpp:1058 +#: zrcolagui.cpp:1146 msgid "" "After clicking OK button, your e-mail application should open allowing you to submit the new character request to ZRCola Editor.\n" "Your e-mail application might not display all the characters correctly, but the Editor will be able to read them correctly anyway." @@ -545,7 +581,12 @@ msgstr "" msgid "INS key is pressed. Type the Unicode code of desired character now (up to four hexadecimal digits: 0-9, A-F), then release INS." msgstr "Pritisnili ste tipko INS. Vtipkajte kodo Unicode želenega znaka (do štiri šestnajstiške števke: 0–9, A–F), nato izpustite INS." -#: zrcolasettings.cpp:93 +#: zrcolasettings.cpp:90 +#, c-format +msgid "Unknown transformation (%u)" +msgstr "Neznana pretvorba (%u)" + +#: zrcolasettings.cpp:181 msgid "Start ZRCola automatically on logon" msgstr "Samodejno zaženi ZRColo ob prijavi" @@ -557,7 +598,7 @@ msgstr "" "Program se bo zdaj zaprl in zagnala se bo posodobitev.\n" "Ali ste prepričani, da želite nadaljevati?" -#: zrcolaupdater.cpp:94 zrcolagui.h:336 +#: zrcolaupdater.cpp:94 zrcolagui.h:350 msgid "Product Update" msgstr "Posodabljanje izdelka" @@ -565,11 +606,11 @@ msgstr "Posodabljanje izdelka" msgid "Character Search" msgstr "Poišči znak" -#: zrcolagui.h:285 +#: zrcolagui.h:299 msgid "Settings" msgstr "Nastavitve" -#: zrcolagui.h:311 +#: zrcolagui.h:325 msgid "About ZRCola" msgstr "O ZRColi" diff --git a/ZRCola/zrcolacomppnl.cpp b/ZRCola/zrcolacomppnl.cpp index 8fda9e2..ce94564 100644 --- a/ZRCola/zrcolacomppnl.cpp +++ b/ZRCola/zrcolacomppnl.cpp @@ -87,14 +87,30 @@ void wxZRColaComposerPanel::SynchronizePanels() m_timerSave.Stop(); auto app = dynamic_cast(wxTheApp); + wxZRColaFrame *mainWnd = dynamic_cast(wxGetActiveWindow()); + wxASSERT_MSG(mainWnd, "main window missing"); + wxString src; size_t len = GetValue(m_source, src); + std::wstring dst(src.data(), len), dst2; + ZRCola::mapping_vector map; - std::wstring norm; - app->m_t_db.TranslateInv(0, src.data(), len, norm, &m_mapping1); + m_mapping.clear(); + for (auto s = mainWnd->m_settings->m_transeq.cbegin(), s_end = mainWnd->m_settings->m_transeq.cend(); s != s_end; ++s) { + if (*s == 0) { + // ZRCola Decomposed => ZRCola Composed should decompose first. + app->m_t_db.TranslateInv(*s, dst.data(), dst.size(), dst2, &map); + m_mapping.push_back(std::move(map)); - std::wstring dst; - app->m_t_db.Translate(0, norm.data(), norm.size(), dst, &m_mapping2); + app->m_t_db.Translate(*s, dst2.data(), dst2.size(), dst, &map); + m_mapping.push_back(std::move(map)); + } else { + // Other transforms + app->m_t_db.Translate(*s, dst.data(), dst.size(), dst2, &map); + m_mapping.push_back(std::move(map)); + dst = std::move(dst2); + } + } m_source->GetSelection(&m_selSource.first, &m_selSource.second); @@ -104,8 +120,8 @@ void wxZRColaComposerPanel::SynchronizePanels() // Update destination text, and its HEX dump. m_destination->SetValue(dst); m_destination->SetSelection( - m_selDestination.first = m_mapping2.to_dst(m_mapping1.to_dst(m_selSource.first )), - m_selDestination.second = m_mapping2.to_dst(m_mapping1.to_dst(m_selSource.second))); + m_selDestination.first = MapToDestination(m_selSource.first ), + m_selDestination.second = MapToDestination(m_selSource.second)); SetHexValue(m_destinationHex, m_selDestinationHex, m_mappingDestinationHex, dst.data(), dst.length(), m_selDestination.first, m_selDestination.second); // Schedule state save after 3s. @@ -113,19 +129,29 @@ void wxZRColaComposerPanel::SynchronizePanels() } else if (m_destinationChanged) { m_timerSave.Stop(); + auto app = dynamic_cast(wxTheApp); + wxZRColaFrame *mainWnd = dynamic_cast(wxGetActiveWindow()); + wxASSERT_MSG(mainWnd, "main window missing"); + wxString src; size_t len = GetValue(m_destination, src); + std::wstring dst(src.data(), len), dst2; + ZRCola::mapping_vector map; - auto app = dynamic_cast(wxTheApp); - std::wstring dst; - wxZRColaFrame *mainWnd = dynamic_cast(wxGetActiveWindow()); - if (mainWnd) - app->m_t_db.TranslateInv(0, src.data(), len, &app->m_lc_db, mainWnd->m_settings->m_lang, dst, &m_mapping2); - else - app->m_t_db.TranslateInv(0, src.data(), len, dst, &m_mapping2); + m_mapping.clear(); + for (auto s = mainWnd->m_settings->m_transeq.crbegin(), s_end = mainWnd->m_settings->m_transeq.crend(); s != s_end; ++s) { + if (*s) { + // ZRCola Decomposed => ZRCola Composed + app->m_t_db.TranslateInv(*s, dst.data(), dst.size(), &app->m_lc_db, mainWnd->m_settings->m_lang, dst2, &map); + } else { + // Other transforms + app->m_t_db.TranslateInv(*s, dst.data(), dst.size(), dst2, &map); + } + dst = std::move(dst2); - m_mapping1.clear(); - m_mapping2.invert(); + map.invert(); + m_mapping.push_back(std::move(map)); + } m_destination->GetSelection(&m_selDestination.first, &m_selDestination.second); @@ -135,8 +161,8 @@ void wxZRColaComposerPanel::SynchronizePanels() // Update source text, and its HEX dump. m_source->SetValue(dst); m_source->SetSelection( - m_selSource.first = m_mapping1.to_src(m_mapping2.to_src(m_selDestination.first )), - m_selSource.second = m_mapping1.to_src(m_mapping2.to_src(m_selDestination.second))); + m_selSource.first = MapToSource(m_selDestination.first ), + m_selSource.second = MapToSource(m_selDestination.second)); SetHexValue(m_sourceHex, m_selSourceHex, m_mappingSourceHex, dst.data(), dst.length(), m_selSource.first, m_selSource.second); // Schedule state save after 3s. @@ -166,8 +192,8 @@ void wxZRColaComposerPanel::OnSourcePaint(wxPaintEvent& event) m_selSourceHex.second = m_mappingSourceHex.to_dst(to )); m_destination->SetSelection( - m_selDestination.first = m_mapping2.to_dst(m_mapping1.to_dst(from)), - m_selDestination.second = m_mapping2.to_dst(m_mapping1.to_dst(to ))); + m_selDestination.first = MapToDestination(from), + m_selDestination.second = MapToDestination(to )); m_destinationHex->SetSelection( m_selDestinationHex.first = m_mappingDestinationHex.to_dst(m_selDestination.first ), @@ -193,8 +219,8 @@ void wxZRColaComposerPanel::OnSourceHexPaint(wxPaintEvent& event) m_selSource.second = m_mappingSourceHex.to_src(to )); m_destination->SetSelection( - m_selDestination.first = m_mapping2.to_dst(m_mapping1.to_dst(m_selSource.first )), - m_selDestination.second = m_mapping2.to_dst(m_mapping1.to_dst(m_selSource.second))); + m_selDestination.first = MapToDestination(m_selSource.first ), + m_selDestination.second = MapToDestination(m_selSource.second)); m_destinationHex->SetSelection( m_selDestinationHex.first = m_mappingDestinationHex.to_dst(m_selDestination.first ), @@ -207,7 +233,7 @@ void wxZRColaComposerPanel::OnSourceText(wxCommandEvent& event) { event.Skip(); - // Set the flag the source text changed to trigger idle-time translation. + // Set the flag the source text changed to trigger idle-time transformation. m_sourceChanged = true; } @@ -229,8 +255,8 @@ void wxZRColaComposerPanel::OnDestinationPaint(wxPaintEvent& event) m_selDestinationHex.second = m_mappingDestinationHex.to_dst(to )); m_source->SetSelection( - m_selSource.first = m_mapping1.to_src(m_mapping2.to_src(from)), - m_selSource.second = m_mapping1.to_src(m_mapping2.to_src(to ))); + m_selSource.first = MapToSource(from), + m_selSource.second = MapToSource(to )); m_sourceHex->SetSelection( m_selSourceHex.first = m_mappingSourceHex.to_dst(m_selSource.first ), @@ -256,8 +282,8 @@ void wxZRColaComposerPanel::OnDestinationHexPaint(wxPaintEvent& event) m_selDestination.second = m_mappingDestinationHex.to_src(to )); m_source->SetSelection( - m_selSource.first = m_mapping1.to_src(m_mapping2.to_src(m_selDestination.first )), - m_selSource.second = m_mapping1.to_src(m_mapping2.to_src(m_selDestination.second))); + m_selSource.first = MapToSource(m_selDestination.first ), + m_selSource.second = MapToSource(m_selDestination.second)); m_sourceHex->SetSelection( m_selSourceHex.first = m_mappingSourceHex.to_dst(m_selSource.first ), @@ -270,7 +296,7 @@ void wxZRColaComposerPanel::OnDestinationText(wxCommandEvent& event) { event.Skip(); - // Set the flag the destination text changed to trigger idle-time inverse translation. + // Set the flag the destination text changed to trigger idle-time inverse transformation. m_destinationChanged = true; } diff --git a/ZRCola/zrcolacomppnl.h b/ZRCola/zrcolacomppnl.h index 157f0a1..cdaa4bf 100644 --- a/ZRCola/zrcolacomppnl.h +++ b/ZRCola/zrcolacomppnl.h @@ -30,6 +30,7 @@ class wxZRColaComposerPanel; #include #include #include +#include /// @@ -53,16 +54,17 @@ protected: virtual void OnDestinationHexPaint(wxPaintEvent& event); virtual void OnDestinationText(wxCommandEvent& event); virtual void OnSaveTimer(wxTimerEvent& event); + inline size_t MapToDestination(_In_ size_t src) const; + inline size_t MapToSource(_In_ size_t dst) const; static wxString GetStateFileName(); static size_t GetValue(wxTextCtrl *wnd, wxString &text); static void SetHexValue(wxTextCtrl *wnd, std::pair &range, ZRCola::mapping_vector &mapping, const wchar_t *src, size_t len, long from, long to); protected: - bool m_sourceChanged; ///< Boolean flag to mark source text "dirty" to trigger translation - bool m_destinationChanged; ///< Boolean flag to mark destination text "dirty" to trigger inverse translation - ZRCola::mapping_vector m_mapping1; ///< Character index mapping vector between source and normalized text - ZRCola::mapping_vector m_mapping2; ///< Character index mapping vector between normalized and destination text + bool m_sourceChanged; ///< Boolean flag to mark source text "dirty" to trigger transformation + bool m_destinationChanged; ///< Boolean flag to mark destination text "dirty" to trigger inverse transformation + std::vector m_mapping; ///< Character index mapping vector between source and normalized text std::pair m_selSource, ///< Character index of selected text in source text control m_selSourceHex, ///< Character index of selected text in source HEX dump text control @@ -88,6 +90,24 @@ public: }; +inline size_t wxZRColaComposerPanel::MapToDestination(_In_ size_t src) const +{ + for (auto m = m_mapping.cbegin(), m_end = m_mapping.cend(); m != m_end; ++m) + src = m->to_dst(src); + + return src; +} + + +inline size_t wxZRColaComposerPanel::MapToSource(_In_ size_t dst) const +{ + for (auto m = m_mapping.crbegin(), m_end = m_mapping.crend(); m != m_end; ++m) + dst = m->to_src(dst); + + return dst; +} + + inline wxPersistentObject *wxCreatePersistentObject(wxZRColaComposerPanel *wnd) { return new wxPersistentZRColaComposerPanel(wnd); diff --git a/ZRCola/zrcolafrm.cpp b/ZRCola/zrcolafrm.cpp index 774b2f6..25cf528 100644 --- a/ZRCola/zrcolafrm.cpp +++ b/ZRCola/zrcolafrm.cpp @@ -45,8 +45,8 @@ wxBEGIN_EVENT_TABLE(wxZRColaFrame, wxZRColaFrameBase) EVT_UPDATE_UI (wxID_TOOLBAR_EDIT , wxZRColaFrame::OnToolbarEditUpdate ) EVT_MENU (wxID_TOOLBAR_EDIT , wxZRColaFrame::OnToolbarEdit ) - EVT_UPDATE_UI (wxID_TOOLBAR_TRANSLATE , wxZRColaFrame::OnToolbarTranslateUpdate ) - EVT_MENU (wxID_TOOLBAR_TRANSLATE , wxZRColaFrame::OnToolbarTranslate ) + EVT_UPDATE_UI (wxID_TOOLBAR_TRANSFORM , wxZRColaFrame::OnToolbarTransformUpdate ) + EVT_MENU (wxID_TOOLBAR_TRANSFORM , wxZRColaFrame::OnToolbarTransform ) EVT_UPDATE_UI (wxID_PANEL_CHRGRPS , wxZRColaFrame::OnPanelCharacterCatalogUpdate) EVT_MENU (wxID_PANEL_CHRGRPS , wxZRColaFrame::OnPanelCharacterCatalog ) EVT_MENU (wxID_FOCUS_CHARACTER_CATALOG , wxZRColaFrame::OnPanelCharacterCatalogFocus ) @@ -69,10 +69,10 @@ wxZRColaFrame::wxZRColaFrame() : { { // wxFrameBuilder 3.5 does not support wxAUI_TB_HORIZONTAL flag. Add it manually. - wxAuiPaneInfo &paneInfo = m_mgr.GetPane(m_toolbarTranslate); + wxAuiPaneInfo &paneInfo = m_mgr.GetPane(m_toolbarTransform); paneInfo.LeftDockable(false); paneInfo.RightDockable(false); - m_toolbarTranslate->SetWindowStyleFlag(m_toolbarTranslate->GetWindowStyleFlag() | wxAUI_TB_HORIZONTAL); + m_toolbarTransform->SetWindowStyleFlag(m_toolbarTransform->GetWindowStyleFlag() | wxAUI_TB_HORIZONTAL); } // Load main window icons. @@ -139,9 +139,9 @@ wxZRColaFrame::wxZRColaFrame() : wxPersistentAuiManager(&m_mgr).Restore(); // Register global hotkey(s). - if (!RegisterHotKey(wxZRColaHKID_INVOKE_TRANSLATE, wxMOD_WIN, VK_F5)) + if (!RegisterHotKey(wxZRColaHKID_INVOKE_TRANSFORM, wxMOD_WIN, VK_F5)) wxMessageBox(_("ZRCola keyboard shortcut Win+F5 could not be registered. Some functionality will not be available."), _("Warning"), wxOK | wxICON_WARNING); - if (!RegisterHotKey(wxZRColaHKID_INVOKE_TRANSLATE_INV, wxMOD_WIN, VK_F6)) + if (!RegisterHotKey(wxZRColaHKID_INVOKE_TRANSFORM_INV, wxMOD_WIN, VK_F6)) wxMessageBox(_("ZRCola keyboard shortcut Win+F6 could not be registered. Some functionality will not be available."), _("Warning"), wxOK | wxICON_WARNING); } @@ -149,8 +149,8 @@ wxZRColaFrame::wxZRColaFrame() : wxZRColaFrame::~wxZRColaFrame() { // Unregister global hotkey(s). - UnregisterHotKey(wxZRColaHKID_INVOKE_TRANSLATE_INV); - UnregisterHotKey(wxZRColaHKID_INVOKE_TRANSLATE ); + UnregisterHotKey(wxZRColaHKID_INVOKE_TRANSFORM_INV); + UnregisterHotKey(wxZRColaHKID_INVOKE_TRANSFORM ); #if defined(__WXMSW__) if (m_tfSource) { @@ -317,15 +317,15 @@ void wxZRColaFrame::OnToolbarEdit(wxCommandEvent& event) } -void wxZRColaFrame::OnToolbarTranslateUpdate(wxUpdateUIEvent& event) +void wxZRColaFrame::OnToolbarTransformUpdate(wxUpdateUIEvent& event) { - event.Check(m_mgr.GetPane(m_toolbarTranslate).IsShown()); + event.Check(m_mgr.GetPane(m_toolbarTransform).IsShown()); } -void wxZRColaFrame::OnToolbarTranslate(wxCommandEvent& event) +void wxZRColaFrame::OnToolbarTransform(wxCommandEvent& event) { - wxAuiPaneInfo &paneInfo = m_mgr.GetPane(m_toolbarTranslate); + wxAuiPaneInfo &paneInfo = m_mgr.GetPane(m_toolbarTransform); paneInfo.Show(!paneInfo.IsShown()); m_mgr.Update(); } @@ -527,8 +527,8 @@ WXLRESULT wxZRColaFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM WXHWND hWndSource = ::GetForegroundWindow(); switch (wParam) { - case wxZRColaHKID_INVOKE_TRANSLATE : m_panel->m_source ->SetFocus(); break; - case wxZRColaHKID_INVOKE_TRANSLATE_INV: m_panel->m_destination->SetFocus(); break; + case wxZRColaHKID_INVOKE_TRANSFORM : m_panel->m_source ->SetFocus(); break; + case wxZRColaHKID_INVOKE_TRANSFORM_INV: m_panel->m_destination->SetFocus(); break; default: wxFAIL_MSG(wxT("not our registered shortcut")); return wxZRColaFrameBase::MSWWindowProc(message, wParam, lParam); diff --git a/ZRCola/zrcolafrm.h b/ZRCola/zrcolafrm.h index 7eb4c36..597a6c1 100644 --- a/ZRCola/zrcolafrm.h +++ b/ZRCola/zrcolafrm.h @@ -40,8 +40,8 @@ class wxZRColaFrame; /// /// Global hotkey message identifiers /// -#define wxZRColaHKID_INVOKE_TRANSLATE 0 -#define wxZRColaHKID_INVOKE_TRANSLATE_INV 1 +#define wxZRColaHKID_INVOKE_TRANSFORM 0 +#define wxZRColaHKID_INVOKE_TRANSFORM_INV 1 /// @@ -83,8 +83,8 @@ protected: virtual void OnIconize(wxIconizeEvent& event); void OnToolbarEditUpdate(wxUpdateUIEvent& event); void OnToolbarEdit(wxCommandEvent& event); - void OnToolbarTranslateUpdate(wxUpdateUIEvent& event); - void OnToolbarTranslate(wxCommandEvent& event); + void OnToolbarTransformUpdate(wxUpdateUIEvent& event); + void OnToolbarTransform(wxCommandEvent& event); void OnPanelCharacterCatalogUpdate(wxUpdateUIEvent& event); void OnPanelCharacterCatalog(wxCommandEvent& event); void OnPanelCharacterCatalogFocus(wxCommandEvent& event); diff --git a/ZRCola/zrcolagui.cpp b/ZRCola/zrcolagui.cpp index 826be55..f15c5e1 100644 --- a/ZRCola/zrcolagui.cpp +++ b/ZRCola/zrcolagui.cpp @@ -144,7 +144,7 @@ wxZRColaFrameBase::wxZRColaFrameBase( wxWindow* parent, wxWindowID id, const wxS m_menuView->Append( m_menuItemToolbarEdit ); wxMenuItem* m_menuItemToolbarCompose; - m_menuItemToolbarCompose = new wxMenuItem( m_menuView, wxID_TOOLBAR_TRANSLATE, wxString( _("&Compose Toolbar") ) , _("Toggle compose toolbar"), wxITEM_CHECK ); + m_menuItemToolbarCompose = new wxMenuItem( m_menuView, wxID_TOOLBAR_TRANSFORM, wxString( _("&Compose Toolbar") ) , _("Toggle compose toolbar"), wxITEM_CHECK ); m_menuView->Append( m_menuItemToolbarCompose ); m_menuView->AppendSeparator(); @@ -194,15 +194,15 @@ wxZRColaFrameBase::wxZRColaFrameBase( wxWindow* parent, wxWindowID id, const wxS m_toolbarEdit->Realize(); m_mgr.AddPane( m_toolbarEdit, wxAuiPaneInfo().Name( wxT("toolbarEdit") ).Top().Caption( _("Edit") ).PinButton( true ).Dock().Resizable().FloatingSize( wxSize( -1,-1 ) ).LeftDockable( false ).RightDockable( false ).Row( 0 ).Layer( 1 ).ToolbarPane() ); - m_toolbarTranslate = new wxAuiToolBar( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxAUI_TB_HORZ_LAYOUT ); - m_toolCharSelect = m_toolbarTranslate->AddTool( wxID_CHARACTER_SELECTOR, _("Find Character"), wxIcon( wxT("char_select.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Find Character"), _("Display character search to select character to insert into text"), NULL ); + m_toolbarTransform = new wxAuiToolBar( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxAUI_TB_HORZ_LAYOUT ); + m_toolCharSelect = m_toolbarTransform->AddTool( wxID_CHARACTER_SELECTOR, _("Find Character"), wxIcon( wxT("char_select.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Find Character"), _("Display character search to select character to insert into text"), NULL ); - m_toolSendDestination = m_toolbarTranslate->AddTool( wxID_SEND_DESTINATION, _("Send Composed"), wxIcon( wxT("send_destination.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Send Composed"), _("Send composed text to source window"), NULL ); + m_toolSendDestination = m_toolbarTransform->AddTool( wxID_SEND_DESTINATION, _("Send Composed"), wxIcon( wxT("send_destination.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Send Composed"), _("Send composed text to source window"), NULL ); - m_toolSendSource = m_toolbarTranslate->AddTool( wxID_SEND_SOURCE, _("Send Decomposed"), wxIcon( wxT("send_source.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Send Decomposed"), _("Send decomposed text to source window"), NULL ); + m_toolSendSource = m_toolbarTransform->AddTool( wxID_SEND_SOURCE, _("Send Decomposed"), wxIcon( wxT("send_source.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Send Decomposed"), _("Send decomposed text to source window"), NULL ); - m_toolbarTranslate->Realize(); - m_mgr.AddPane( m_toolbarTranslate, 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_toolbarTransform->Realize(); + m_mgr.AddPane( m_toolbarTransform, 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_panelChrCat = new wxZRColaCharacterCatalogPanel( this ); @@ -781,12 +781,12 @@ wxZRColaSettingsBase::wxZRColaSettingsBase( wxWindow* parent, wxWindowID id, con 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 ); + m_panelLanguage = new wxPanel( m_listbook, wxID_ANY, wxDefaultPosition, wxSize( 500,-1 ), 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 ); + m_langLabel->Wrap( 490 ); 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 ); @@ -803,14 +803,86 @@ wxZRColaSettingsBase::wxZRColaSettingsBase( wxWindow* parent, wxWindowID id, con 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 ); + m_panelTransformation = new wxPanel( m_listbook, wxID_ANY, wxDefaultPosition, wxSize( 500,-1 ), wxTAB_TRAVERSAL ); + wxBoxSizer* bSizerTransformation; + bSizerTransformation = new wxBoxSizer( wxVERTICAL ); + + m_transLabel = new wxStaticText( m_panelTransformation, wxID_ANY, _("ZRCola offers multiple text transformations that can be arranged in a sequence.\nPlease select desired transformations and the order they are applied."), wxDefaultPosition, wxDefaultSize, 0 ); + m_transLabel->Wrap( 490 ); + bSizerTransformation->Add( m_transLabel, 0, wxALL|wxEXPAND, 5 ); + + wxFlexGridSizer* fgSizerTransformation; + fgSizerTransformation = new wxFlexGridSizer( 2, 3, 0, 0 ); + fgSizerTransformation->AddGrowableCol( 0 ); + fgSizerTransformation->AddGrowableCol( 2 ); + fgSizerTransformation->AddGrowableRow( 0 ); + fgSizerTransformation->SetFlexibleDirection( wxBOTH ); + fgSizerTransformation->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + wxBoxSizer* bSizerTransAvailable; + bSizerTransAvailable = new wxBoxSizer( wxVERTICAL ); + + m_transAvailableLabel = new wxStaticText( m_panelTransformation, wxID_ANY, _("A&vailable:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_transAvailableLabel->Wrap( -1 ); + bSizerTransAvailable->Add( m_transAvailableLabel, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_transAvailable = new wxListBox( m_panelTransformation, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_SINGLE|wxLB_SORT ); + bSizerTransAvailable->Add( m_transAvailable, 1, wxALL|wxEXPAND, 5 ); + + + fgSizerTransformation->Add( bSizerTransAvailable, 1, wxEXPAND, 5 ); + + wxBoxSizer* bSizerTransActivate; + bSizerTransActivate = new wxBoxSizer( wxVERTICAL ); + + m_transActivate = new wxButton( m_panelTransformation, wxID_ANY, _(">"), wxDefaultPosition, wxSize( 32,32 ), 0 ); + bSizerTransActivate->Add( m_transActivate, 0, wxALL, 5 ); + + m_transDeactivate = new wxButton( m_panelTransformation, wxID_ANY, _("<"), wxDefaultPosition, wxSize( 32,32 ), 0 ); + bSizerTransActivate->Add( m_transDeactivate, 0, wxALL, 5 ); + + + fgSizerTransformation->Add( bSizerTransActivate, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizerTransActive; + bSizerTransActive = new wxBoxSizer( wxVERTICAL ); + + m_transActiveLabel = new wxStaticText( m_panelTransformation, wxID_ANY, _("&Active:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_transActiveLabel->Wrap( -1 ); + bSizerTransActive->Add( m_transActiveLabel, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_transActive = new wxListBox( m_panelTransformation, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_SINGLE ); + bSizerTransActive->Add( m_transActive, 1, wxALL|wxEXPAND, 5 ); + + + fgSizerTransformation->Add( bSizerTransActive, 1, wxEXPAND, 5 ); + + + bSizerTransformation->Add( fgSizerTransformation, 1, wxEXPAND, 5 ); + + wxBoxSizer* bSizerTransActiveReorder; + bSizerTransActiveReorder = new wxBoxSizer( wxHORIZONTAL ); + + m_transActiveUp = new wxButton( m_panelTransformation, wxID_ANY, _("Up"), wxDefaultPosition, wxSize( 70,-1 ), 0 ); + bSizerTransActiveReorder->Add( m_transActiveUp, 0, wxALL, 5 ); + + m_transActiveDown = new wxButton( m_panelTransformation, wxID_ANY, _("Down"), wxDefaultPosition, wxSize( 70,-1 ), 0 ); + bSizerTransActiveReorder->Add( m_transActiveDown, 0, wxALL, 5 ); + + + bSizerTransformation->Add( bSizerTransActiveReorder, 0, wxALIGN_RIGHT, 5 ); + + + m_panelTransformation->SetSizer( bSizerTransformation ); + m_panelTransformation->Layout(); + m_listbook->AddPage( m_panelTransformation, _("Transformation"), false ); + m_panelAutoStart = new wxPanel( m_listbook, wxID_ANY, wxDefaultPosition, wxSize( 500,-1 ), 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 ); + m_autoStartLabel->Wrap( 490 ); bSizerAutoStart->Add( m_autoStartLabel, 0, wxALL|wxEXPAND, 5 ); m_autoStart = new wxCheckBox( m_panelAutoStart, wxID_ANY, _("Start ZRCola &automatically on logon"), wxDefaultPosition, wxDefaultSize, 0 ); @@ -819,7 +891,6 @@ wxZRColaSettingsBase::wxZRColaSettingsBase( wxWindow* parent, wxWindowID id, con 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(); @@ -831,7 +902,7 @@ wxZRColaSettingsBase::wxZRColaSettingsBase( wxWindow* parent, wxWindowID id, con m_listbookListView->SetWindowStyleFlag( m_listbookFlags ); #endif - bSizerContent->Add( m_listbook, 1, wxEXPAND | wxALL, 5 ); + bSizerContent->Add( m_listbook, 1, wxALL|wxEXPAND, 5 ); bSizerContent->Add( 0, 0, 0, wxALL|wxEXPAND, 5 ); @@ -856,8 +927,12 @@ wxZRColaSettingsBase::wxZRColaSettingsBase( wxWindow* parent, wxWindowID id, con // 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_panelLanguage->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( wxZRColaSettingsBase::OnLanguageUpdate ), NULL, this ); + m_panelTransformation->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( wxZRColaSettingsBase::OnTransformationUpdate ), NULL, this ); + m_transActivate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaSettingsBase::OnTransActivate ), NULL, this ); + m_transDeactivate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaSettingsBase::OnTransDeactivate ), NULL, this ); + m_transActiveUp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaSettingsBase::OnTransActiveUp ), NULL, this ); + m_transActiveDown->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaSettingsBase::OnTransActiveDown ), 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 ); } @@ -866,8 +941,12 @@ 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_panelLanguage->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( wxZRColaSettingsBase::OnLanguageUpdate ), NULL, this ); + m_panelTransformation->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( wxZRColaSettingsBase::OnTransformationUpdate ), NULL, this ); + m_transActivate->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaSettingsBase::OnTransActivate ), NULL, this ); + m_transDeactivate->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaSettingsBase::OnTransDeactivate ), NULL, this ); + m_transActiveUp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaSettingsBase::OnTransActiveUp ), NULL, this ); + m_transActiveDown->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaSettingsBase::OnTransActiveDown ), 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 ); diff --git a/ZRCola/zrcolagui.h b/ZRCola/zrcolagui.h index 7554cf3..9af1c0b 100644 --- a/ZRCola/zrcolagui.h +++ b/ZRCola/zrcolagui.h @@ -70,7 +70,7 @@ class wxZRColaFrameBase : public wxFrame wxID_SEND_ABORT, wxID_SETTINGS, wxID_TOOLBAR_EDIT, - wxID_TOOLBAR_TRANSLATE, + wxID_TOOLBAR_TRANSFORM, wxID_PANEL_CHRGRPS, wxID_HELP_INSTRUCTIONS, wxID_HELP_SHORTCUTS, @@ -87,7 +87,7 @@ class wxZRColaFrameBase : public wxFrame wxAuiToolBarItem* m_toolEditCut; wxAuiToolBarItem* m_toolEditCopy; wxAuiToolBarItem* m_toolEditPaste; - wxAuiToolBar* m_toolbarTranslate; + wxAuiToolBar* m_toolbarTransform; wxAuiToolBarItem* m_toolCharSelect; wxAuiToolBarItem* m_toolSendDestination; wxAuiToolBarItem* m_toolSendSource; @@ -264,6 +264,16 @@ class wxZRColaSettingsBase : public wxDialog wxRadioButton* m_langAuto; wxRadioButton* m_langManual; wxListBox* m_languages; + wxPanel* m_panelTransformation; + wxStaticText* m_transLabel; + wxStaticText* m_transAvailableLabel; + wxListBox* m_transAvailable; + wxButton* m_transActivate; + wxButton* m_transDeactivate; + wxStaticText* m_transActiveLabel; + wxListBox* m_transActive; + wxButton* m_transActiveUp; + wxButton* m_transActiveDown; wxPanel* m_panelAutoStart; wxStaticText* m_autoStartLabel; wxCheckBox* m_autoStart; @@ -274,8 +284,12 @@ class wxZRColaSettingsBase : public wxDialog // 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 OnLanguageUpdate( wxUpdateUIEvent& event ) { event.Skip(); } + virtual void OnTransformationUpdate( wxUpdateUIEvent& event ) { event.Skip(); } + virtual void OnTransActivate( wxCommandEvent& event ) { event.Skip(); } + virtual void OnTransDeactivate( wxCommandEvent& event ) { event.Skip(); } + virtual void OnTransActiveUp( wxCommandEvent& event ) { event.Skip(); } + virtual void OnTransActiveDown( wxCommandEvent& event ) { event.Skip(); } virtual void OnApplyButtonClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnOKButtonClick( wxCommandEvent& event ) { event.Skip(); } diff --git a/ZRCola/zrcolasettings.cpp b/ZRCola/zrcolasettings.cpp index 0e86032..17aa1d5 100644 --- a/ZRCola/zrcolasettings.cpp +++ b/ZRCola/zrcolasettings.cpp @@ -27,6 +27,7 @@ wxZRColaSettings::wxZRColaSettings(wxWindow* parent) : m_lang_auto(true), m_lang(ZRCola::langid_t::blank), + m_transeq(1, 0), // By default use translation set 0 (ZRCola Decomposed >> ZRCola Composed) wxZRColaSettingsBase(parent) { auto app = dynamic_cast(wxTheApp); @@ -38,6 +39,18 @@ wxZRColaSettings::wxZRColaSettings(wxWindow* parent) : label_tran(wxGetTranslation(label, wxT("ZRCola-zrcdb"))); m_languages->Insert(label_tran, i); } + + m_transAvailable->Clear(); + for (size_t i = 0, n = app->m_ts_db.idxTranSet.size(); i < n; i++) { + const ZRCola::transet_db::transet &ts = app->m_ts_db.idxTranSet[i]; + wxString + src(ts.src(), ts.src_len()), + dst(ts.dst(), ts.dst_len()), + src_tran(wxGetTranslation(src, wxT("ZRCola-zrcdb"))), + dst_tran(wxGetTranslation(dst, wxT("ZRCola-zrcdb"))), + label_tran(wxString::Format(wxT("%s \x00bb %s"), src_tran.c_str(), dst_tran.c_str())); + m_transAvailable->Append(label_tran, (void*)ts.set); + } } @@ -58,22 +71,97 @@ void wxZRColaSettings::OnInitDialog(wxInitDialogEvent& event) (m_lang_auto ? m_langAuto : m_langManual)->SetValue(true); auto app = dynamic_cast(wxTheApp); - char l[sizeof(ZRCola::language_db::language)] = {}; - ((ZRCola::language_db::language*)l)->lang = m_lang; ZRCola::language_db::indexLang::size_type start; - m_languages->Select(app->m_lang_db.idxLang.find(*(ZRCola::language_db::language*)l, start) ? start : -1); + m_languages->Select(app->m_lang_db.idxLang.find(ZRCola::language_db::language(m_lang), start) ? start : -1); + + m_transActive->Clear(); + for (auto s = m_transeq.cbegin(), s_end = m_transeq.cend(); s != s_end; ++s) { + ZRCola::transet_db::indexTranSet::size_type start; + if (app->m_ts_db.idxTranSet.find(ZRCola::transet_db::transet(*s), start)) { + const ZRCola::transet_db::transet &ts = app->m_ts_db.idxTranSet[start]; + wxString + src(ts.src(), ts.src_len()), + dst(ts.dst(), ts.dst_len()), + src_tran(wxGetTranslation(src, wxT("ZRCola-zrcdb"))), + dst_tran(wxGetTranslation(dst, wxT("ZRCola-zrcdb"))), + label_tran(wxString::Format(wxT("%s \x00bb %s"), src_tran.c_str(), dst_tran.c_str())); + m_transActive->Append(label_tran, (void*)ts.set); + } else { + wxString label_tran(wxString::Format(_("Unknown transformation (%u)"), (unsigned int)*s)); + m_transActive->Append(label_tran, (void*)*s); + } + } } -void wxZRColaSettings::OnLangAuto(wxCommandEvent& event) +void wxZRColaSettings::OnLanguageUpdate(wxUpdateUIEvent& event) { - m_languages->Enable(!event.IsChecked()); + m_languages->Enable(m_langManual->GetValue()); + + wxZRColaSettingsBase::OnLanguageUpdate(event); } -void wxZRColaSettings::OnLangManual(wxCommandEvent& event) +void wxZRColaSettings::OnTransformationUpdate(wxUpdateUIEvent& event) { - m_languages->Enable(event.IsChecked()); + m_transActivate->Enable(m_transAvailable->GetSelection() != wxNOT_FOUND); + + int idx = m_transActive->GetSelection(); + m_transDeactivate->Enable(idx != wxNOT_FOUND); + m_transActiveUp ->Enable(idx != wxNOT_FOUND && (unsigned int)idx > 0); + m_transActiveDown->Enable(idx != wxNOT_FOUND && (unsigned int)idx < m_transActive->GetCount() - 1); + + wxZRColaSettingsBase::OnTransformationUpdate(event); +} + + +void wxZRColaSettings::OnTransActivate(wxCommandEvent& event) +{ + int idx = m_transAvailable->GetSelection(); + wxASSERT_MSG(idx != wxNOT_FOUND, wxT("no available transformation selected")); + m_transActive->Append( + m_transAvailable->GetString(idx), + m_transAvailable->GetClientData(idx)); + + wxZRColaSettingsBase::OnTransActivate(event); +} + + +void wxZRColaSettings::OnTransDeactivate(wxCommandEvent& event) +{ + int idx = m_transActive->GetSelection(); + wxASSERT_MSG(idx != wxNOT_FOUND, wxT("no active transformation selected")); + m_transActive->Delete(idx); + + wxZRColaSettingsBase::OnTransDeactivate(event); +} + + +void wxZRColaSettings::OnTransActiveUp(wxCommandEvent& event) +{ + int idx = m_transActive->GetSelection(); + wxASSERT_MSG(idx != wxNOT_FOUND && (unsigned int)idx > 0, wxT("no or first active transformation selected")); + wxString label = m_transActive->GetString(idx); + void *data = m_transActive->GetClientData(idx); + m_transActive->Delete(idx); + m_transActive->Insert(label, idx - 1, data); + m_transActive->Select(idx - 1); + + wxZRColaSettingsBase::OnTransActiveUp(event); +} + + +void wxZRColaSettings::OnTransActiveDown(wxCommandEvent& event) +{ + int idx = m_transActive->GetSelection(); + wxASSERT_MSG(idx != wxNOT_FOUND && (unsigned int)idx < m_transActive->GetCount() - 1, wxT("no or last active transformation selected")); + wxString label = m_transActive->GetString(idx); + void *data = m_transActive->GetClientData(idx); + m_transActive->Delete(idx); + m_transActive->Insert(label, idx + 1, data); + m_transActive->Select(idx + 1); + + wxZRColaSettingsBase::OnTransActiveDown(event); } @@ -127,11 +215,15 @@ void wxZRColaSettings::OnApplyButtonClick(wxCommandEvent& event) if (m_lang != lang.lang) { m_lang = lang.lang; - // Notify destination text something changed and should re-inverse translate. + // Notify destination text something changed and should re-inverse transform. wxCommandEvent event2(wxEVT_COMMAND_TEXT_UPDATED); app->m_mainWnd->m_panel->m_destination->ProcessWindowEvent(event2); } } + + m_transeq.clear(); + for (unsigned int i = 0, n = m_transActive->GetCount(); i < n; i++) + m_transeq.push_back((ZRCola::transetid_t)m_transActive->GetClientData(i)); } @@ -159,6 +251,12 @@ void wxPersistentZRColaSettings::Save() const SaveValue(wxT("langAuto"), wnd->m_lang_auto); SaveValue(wxT("lang" ), wxString::FromAscii(wnd->m_lang.data, _countof(wnd->m_lang.data))); + + wxString str; + bool first = true; + for (auto s = wnd->m_transeq.cbegin(), s_end = wnd->m_transeq.cend(); s != s_end; ++s, first = false) + str += wxString::Format(first ? wxT("%u") : wxT("|%u"), *s); + SaveValue(wxT("transeq"), str); } @@ -185,5 +283,22 @@ bool wxPersistentZRColaSettings::Restore() } else wnd->m_lang = ZRCola::langid_t::blank; + wxString str; + if (RestoreValue(wxT("transeq"), &str)) { + std::vector transeq; + for (wxStringTokenizer tok(str, wxT("|")); tok.HasMoreTokens(); ) { + unsigned long val = _tcstoul(tok.GetNextToken().c_str(), NULL, 10); + for (size_t i = 0, n = app->m_ts_db.idxTranSet.size(); i < n; i++) { + const ZRCola::transet_db::transet &cg = app->m_ts_db.idxTranSet[i]; + if (cg.set == val) { + transeq.push_back(val); + break; + } + } + } + if (!transeq.empty()) + wnd->m_transeq = std::move(transeq); + } + return wxPersistentDialog::Restore(); } diff --git a/ZRCola/zrcolasettings.h b/ZRCola/zrcolasettings.h index efce7ea..ff7d9ba 100644 --- a/ZRCola/zrcolasettings.h +++ b/ZRCola/zrcolasettings.h @@ -27,7 +27,9 @@ class wxPersistentZRColaSettings; #pragma once #include "zrcolagui.h" +#include #include +#include /// @@ -42,14 +44,19 @@ public: protected: virtual void OnInitDialog(wxInitDialogEvent& event); - virtual void OnLangAuto(wxCommandEvent& event); - virtual void OnLangManual(wxCommandEvent& event); + virtual void OnLanguageUpdate(wxUpdateUIEvent& event); + virtual void OnTransformationUpdate(wxUpdateUIEvent& event); + virtual void OnTransActivate(wxCommandEvent& event); + virtual void OnTransDeactivate(wxCommandEvent& event); + virtual void OnTransActiveUp(wxCommandEvent& event); + virtual void OnTransActiveDown(wxCommandEvent& event); virtual void OnApplyButtonClick(wxCommandEvent& event); virtual void OnOKButtonClick(wxCommandEvent& event); public: - bool m_lang_auto; ///< Is language for inverse translation resolved using currently selected keyboard - ZRCola::langid_t m_lang; ///< Language for inverse translation + bool m_lang_auto; ///< Is language for inverse translation resolved using currently selected keyboard + ZRCola::langid_t m_lang; ///< Language for inverse translation + std::vector m_transeq; ///< Transformation set sequence };