Compare commits

..

544 Commits

Author SHA1 Message Date
Simon Rozman
3b64c576fa Update database
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-06-20 15:04:58 +02:00
Simon Rozman
0b777b89c2 Report error if database file don't open successfully
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-06-20 14:27:45 +02:00
Simon Rozman
b6567582e5 Enable function-level linking to allow LTCG
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-06-19 12:05:05 +02:00
Simon Rozman
8f1b412c1f Switch to Visual Studio 2019
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-06-19 11:51:33 +02:00
Simon Rozman
79ec7c51ba Fix UninstallFonts Makefile target
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-06-19 11:44:20 +02:00
Simon Rozman
33aa840e50 Update translations
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-06-19 10:22:58 +02:00
Simon Rozman
63ff924b76 Update font and database
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-04-15 11:43:43 +02:00
Simon Rozman
c790fff673 Remove auto-added translations from POT file
POT files should not contain any translations at all. Transifex is
picky.

Signed-off-by: Simon Rozman <simon@rozman.si>
2019-04-01 19:40:54 +02:00
Simon Rozman
99283e806a Preset version to 2.1.4.
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-04-01 19:35:49 +02:00
Simon Rozman
893dbf5783 Update year to 2019
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-04-01 14:50:04 +02:00
Simon Rozman
64e3735b12 Make character selection dialog non-modal
This allows direct focusing in (de)compose text control even when the
character selection dialog is open.

Signed-off-by: Simon Rozman <simon@rozman.si>
2019-04-01 14:49:56 +02:00
Simon Rozman
c598fe4fe0 Invert order of translations and (de)composition
Example: This allows a to be translated into ά, as a is first
translated to α and finally ZRCola composed into ά. Otherwise we'd need
to include all accented character translations in transliteration
tables.

Signed-off-by: Simon Rozman <simon@rozman.si>
2019-04-01 14:49:49 +02:00
Simon Rozman
4393b02323 Fix decomposition
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-04-01 14:49:41 +02:00
Simon Rozman
0dba3d4652 Update sub-module
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-04-01 14:49:33 +02:00
Simon Rozman
c9231078a6 Preset version to 2.1.3
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-04-01 14:49:24 +02:00
Simon Rozman
d98987ec5f Upgrade to latest WinStd library
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-04-01 14:48:40 +02:00
Simon Rozman
4900202d7e Trigger per-user setup on logon 2019-04-01 14:48:31 +02:00
Simon Rozman
a3c73e1c4d Preset version to 2.1.2 2018-11-19 12:07:10 +01:00
Simon Rozman
a8436ee3d7 Silence the missing shcore.dll warning on Windows 7 2018-11-06 09:33:17 +01:00
Simon Rozman
c8ea746474 Preset version to 2.1.1 2018-11-06 09:24:50 +01:00
Simon Rozman
039dae11bc Set version to 2.1 2018-10-09 14:00:02 +02:00
Simon Rozman
ce11c7f4d4 Do not restore placement and sizing when GUI changes 2018-09-25 13:45:06 +02:00
Simon Rozman
ea5049172d Revise main window minimization/hiding/restoring 2018-09-25 12:04:02 +02:00
Simon Rozman
1feebdbbf8 Pre-set version to 2.1-beta7 2018-09-25 12:02:39 +02:00
Simon Rozman
39708ad4cb Set m_taskBarIcon to NULL after deleted 2018-09-25 12:00:04 +02:00
Simon Rozman
e0e8401482 Update translations 2018-09-25 11:02:15 +02:00
Simon Rozman
a5099d7424 Add Cyrillic >> Latin translations back 2018-09-25 10:37:25 +02:00
Simon Rozman
c6d567edfd Resolve warning popup when GetDpiForWindow() is not available 2018-09-19 12:59:03 +02:00
Simon Rozman
3d104d4292 Swap composed and decomposed letters on ZRCola (de)compose icon
...to match the natural order of the decomposed and composed panels in
GUI.
2018-09-19 12:41:09 +02:00
Simon Rozman
07706db14e Switch to Transifex project for localization 2018-09-19 12:15:40 +02:00
Simon Rozman
10e53e431a Update translation templates 2018-09-19 09:10:34 +02:00
Simon Rozman
5e751eb23e Make (de)composition a separate translation set 2018-09-18 11:23:30 +02:00
Simon Rozman
30b2eb270b Update fonts 2018-09-17 15:06:41 +02:00
Simon Rozman
ed98e1d588 Update sub-module 2018-09-17 15:04:35 +02:00
Simon Rozman
6c3b84b448 Revert MSI URLs from HTTPS to HTTP
Updater doesn't handle HTTPS. Yet.
2018-09-17 09:40:02 +02:00
Simon Rozman
2d04361318 Add missing Updater public key to ZRCola.exe resources 2018-09-17 09:06:10 +02:00
Simon Rozman
2d82904b13 Check HTTP status 200 before parsing the response 2018-09-17 09:02:04 +02:00
Simon Rozman
640421be60 Make list of settings pages wider 2018-09-13 13:10:39 +02:00
Simon Rozman
75941da5a7 Fix window placement on DPI changes 2018-09-12 16:11:02 +02:00
Simon Rozman
974d6bd827 Honor monitor layout and DPI changes when persisting window placement 2018-09-11 15:32:13 +02:00
Simon Rozman
16dc9aff96 Add high DPI support 2018-09-10 12:38:40 +02:00
Simon Rozman
18f36e7fde Add missing translation sequence dialog name 2018-09-10 10:02:27 +02:00
Simon Rozman
5d0ea994d7 Update wxFormBuilder 2018-09-10 09:45:36 +02:00
Simon Rozman
e86847f364 Introduce preliminary ARM64 support 2018-09-10 09:41:50 +02:00
Simon Rozman
c295fcfc12 Update documentation 2018-09-08 01:37:01 +02:00
Simon Rozman
9f0c831fb5 Split Makefile into multiple reusable .mak files 2018-09-08 01:32:00 +02:00
Simon Rozman
ddae64ca6d Extend copyright year 2018-09-07 23:57:59 +02:00
Simon Rozman
bc48240e0a Upgrade to Visual Studio 2017 and wxWidgets 3.1.2 static 2018-09-07 23:41:58 +02:00
Simon Rozman
6a3fbc063c Fix down-casting 2018-09-07 20:30:01 +02:00
Simon Rozman
3672c8e87e Distinguish variables with same names
...to resolve C4457 warnings.
2018-09-07 20:17:35 +02:00
Simon Rozman
dcabe36369 Remove MFC dependency 2018-09-07 19:40:28 +02:00
Simon Rozman
4b59582568 Add missing #include <algorithm> 2018-09-07 19:37:22 +02:00
Simon Rozman
692a37651d Fix printf() parameters 2018-09-07 19:36:42 +02:00
Simon Rozman
59d06ae3dc Make explicit int to unsigned __int6 conversion 2018-09-07 19:36:10 +02:00
Simon Rozman
4226774e21 Silence ADO .h warnings 2018-09-07 19:34:56 +02:00
Simon Rozman
3831012af9 Distinguish variables with same names
...to resolve C4457 warnings.
2018-09-07 19:32:54 +02:00
Simon Rozman
073311be78 Simplify property sheet inclusion 2018-09-07 18:02:30 +02:00
Simon Rozman
6636bf4211 Fix intermediate/output folder creation on nmake register 2018-09-03 13:08:53 +02:00
Simon Rozman
7f0e2cca04 Switch to wxWidgets 3.1.1 2018-09-03 13:08:14 +02:00
Simon Rozman
3976831d98 Update sub-modules 2018-09-03 10:42:43 +02:00
Simon Rozman
a22bbcb407 Use local wxWidget DLLs 2018-09-03 10:32:04 +02:00
Simon Rozman
aafa984d7c Fix output path for Updater operations 2018-09-03 10:31:52 +02:00
Simon Rozman
707f57d6ae Update wxExtend sub-module 2018-09-01 06:49:29 +02:00
Simon Rozman
ef2d61cac1 Update sub-modules 2018-08-31 14:28:01 +02:00
Simon Rozman
7edf4f452e Update submodules 2018-08-24 14:51:25 +02:00
Simon Rozman
a3c6313f57 Register en_US language in nmake register
When "Language" setting is absent in registry, the initialization of
wxWidget localization raises asserts.
2018-08-24 14:49:08 +02:00
Simon Rozman
ab319af0b8 Update Amebis URL 2018-07-05 09:28:41 +02:00
Simon Rozman
14de0cbd23 Use absolute devenv.com path 2018-06-01 13:34:29 +02:00
Simon Rozman
7bd5441c31 Update MSIBuild sub-module to latest version 2018-06-01 13:33:08 +02:00
Simon Rozman
8358d3bf35 Update sub-module 2017-12-22 13:08:41 +01:00
Simon Rozman
8f5cd8cae7 Extend copyright to 2017 2017-12-22 10:32:55 +01:00
Simon Rozman
d301b6feed Document localization 2017-12-19 14:21:46 +01:00
Simon Rozman
cc4baa3214 Preset version to 2.1-beta6 2017-12-19 14:18:14 +01:00
Simon Rozman
61d3369631 Set version to 2.1-beta5 2017-12-19 12:23:28 +01:00
Simon Rozman
a40d021404 Update sub-modules 2017-12-19 12:10:38 +01:00
Simon Rozman
bb4331d6f6 Update wxWidgets to 3.0.3 2017-12-19 10:39:15 +01:00
Simon Rozman
9d8c7d87ed Update documentation 2017-12-19 09:11:47 +01:00
Simon Rozman
c0da04dcf4 Update submodule 2017-12-19 09:10:53 +01:00
Simon Rozman
44f00f0c40 Update to new wxFormBuilder 2017-12-18 12:02:26 +01:00
Simon Rozman
48945e15d6 Increase transliteration selector width 2017-12-18 11:15:15 +01:00
Simon Rozman
d0e367b881 Add translitarations 2017-12-18 10:49:06 +01:00
Simon Rozman
72e8e4893e Update font and database 2017-12-18 08:37:46 +01:00
Simon Rozman
5502206810 Update translations 2017-12-18 08:36:28 +01:00
Simon Rozman
35f6b33f54 Update sub-modules 2017-12-18 08:23:19 +01:00
Simon Rozman
c5c505e32e Version set to 2.1-beta4 2017-07-13 15:00:00 +02:00
Simon Rozman
9ca82f02f8 Decomposition (inverse-translation) fixed 2017-07-13 14:50:27 +02:00
Simon Rozman
9ff3f8c2ab Version set to 2.1-beta3 2017-07-12 16:01:45 +02:00
Simon Rozman
0e50a733de Normalization more flexible allowing mixing of modifiers (as long as the modifiers of a same class remain in the same order) 2017-07-12 15:57:48 +02:00
Simon Rozman
7fbcbd17fb Sub-module update 2017-07-12 14:13:27 +02:00
Simon Rozman
593392782a Version set to 2.1-beta2 2017-06-01 20:04:39 +02:00
Simon Rozman
e19a98a249 Translation management extended and moved from settings dialog to Translate toolbar 2017-06-01 20:02:43 +02:00
Simon Rozman
a66128b8ca Incorrect data type fixed 2017-06-01 19:59:09 +02:00
Simon Rozman
6121f7ee12 Translation sequences loaded from database 2017-06-01 15:16:24 +02:00
Simon Rozman
d9527fe70f Predefined translation sequences added to ZRCola.zrcdb database 2017-06-01 13:28:18 +02:00
Simon Rozman
937c263d56 Sub-module update 2017-05-30 12:55:45 +02:00
Simon Rozman
6487507570 Adaptation to database changes 2017-05-10 09:45:21 +02:00
Simon Rozman
84fa35c9be Clean-up 2017-05-10 09:44:06 +02:00
Simon Rozman
b8be10390b Database update 2017-05-09 13:06:05 +02:00
Simon Rozman
de6d890ac1 Secondary translation permutations added to support normalization 2017-05-09 12:08:34 +02:00
Simon Rozman
31b6f1a3e8 Recursively inverse translated translations ranks updated 2017-05-08 14:52:30 +02:00
Simon Rozman
4c6839e9fe com_translation class extended to support normalization 2017-05-08 14:44:53 +02:00
Simon Rozman
397cfe71dd Duplicate transformations (differing by rank only) removed from database 2017-05-08 14:33:33 +02:00
Simon Rozman
1834543564 Rearranged transformation sort order in database 2017-05-08 13:39:19 +02:00
Simon Rozman
8f4f20f2b4 Internal classes upgraded to support future normalization 2017-05-08 13:33:40 +02:00
Simon Rozman
9bba0ca557 com_translation now stand-alone class for clearer code 2017-05-08 12:40:01 +02:00
Simon Rozman
435b5c4a10 Duplicate error number resolved 2017-05-03 13:30:06 +02:00
Simon Rozman
bc5058f168 Database update 2017-05-03 13:01:29 +02:00
Simon Rozman
5ba870158e Decomposition syntax validation temporary removed 2017-05-03 12:36:15 +02:00
Simon Rozman
a6693673a5 Preliminary decomposition syntax validation introduced 2017-04-28 19:37:14 +02:00
Simon Rozman
ba55173f28 Sub-module update 2017-04-28 19:34:56 +02:00
Simon Rozman
12a053a495 Database update 2017-04-28 19:34:47 +02:00
Simon Rozman
8da5f88e0d MSICA has its own copy of WinStd and MSICALib libraries to allow stand-alone configuration (i.e. static RTL) 2017-04-24 23:07:06 +02:00
Simon Rozman
5a4a20a873 Sub-module update 2017-04-24 22:07:15 +02:00
Simon Rozman
7e50ba5974 Sub-module update 2017-04-24 21:59:48 +02:00
Simon Rozman
91fd26a51d Sub-module update 2017-04-18 14:47:54 +02:00
Simon Rozman
1ea5e52208 Sub-module update 2017-04-18 14:44:13 +02:00
Simon Rozman
2a18117b17 Sub-module update 2017-04-18 14:05:58 +02:00
Simon Rozman
b7bef14746 Copyright extended to 2017 2017-04-18 14:05:45 +02:00
Simon Rozman
4aacc4abc5 Version set to 2.1-beta1 2017-04-03 12:38:54 +02:00
Simon Rozman
2f6c789fdf Support for multiple transformations 2017-04-03 12:36:14 +02:00
Simon Rozman
57ceeadbe7 Clean-up 2017-04-03 12:34:18 +02:00
Simon Rozman
3b297c8427 Missing translations added 2017-04-03 12:16:46 +02:00
Simon Rozman
92374e57a8 Loading of recent character list simplified by using wxStringTokenizer 2017-03-31 14:02:37 +02:00
Simon Rozman
ace7551281 Main frame no longer deletes child dialogues in destructor, causing after-death wxPersist saving of deleted dialogue states later. 2017-03-31 13:44:47 +02:00
Simon Rozman
15e5f2d9e2 Character select dialog saves history in legacy format too now 2017-03-31 13:17:25 +02:00
Simon Rozman
08397415c4 Clean-up 2017-03-30 14:54:15 +02:00
Simon Rozman
6dff6eed4f Translation set database and other translation sets added 2017-03-30 13:08:20 +02:00
Simon Rozman
acbae76737 Clean-up 2017-03-30 10:57:31 +02:00
Simon Rozman
cc4a150501 Translation set ID data-type introduced 2017-03-30 10:23:08 +02:00
Simon Rozman
186dbee443 Multiple translation sets support 2017-03-30 09:49:22 +02:00
Simon Rozman
716dde0a84 Clean-up 2017-03-29 09:46:33 +02:00
Simon Rozman
155642a3f9 "Composition" and "Decomposition" renamed to more general terms "Translation" and "Inverse translation" to extend its use for transliteration 2017-03-27 14:10:43 +02:00
Simon Rozman
7cb0317544 Translation update 2017-03-27 14:06:16 +02:00
Simon Rozman
87a2828ce0 Translation rank split to composed and decomposed character rank allowing asymmetric ranking 2017-03-27 12:39:36 +02:00
Simon Rozman
806aa550a5 Characters are represented as UTF-16 sequences instead of a single UTF-16 character 2017-03-21 09:09:07 +01:00
Simon Rozman
ca306345c2 Composed and decomposed strings of the ZRCola::translation_db::translation protected 2017-03-16 10:21:29 +01:00
Simon Rozman
03ff056898 ZRCola::translation_db::translation::com_start marked as const now 2017-03-16 09:44:43 +01:00
Simon Rozman
9f083bb521 Character-Language table extended to support multi-UTF-16 characters 2017-03-14 14:14:39 +01:00
Simon Rozman
a224454b3c ZRCola::translation::CompareString() >> ZRCola::CompareString() 2017-03-14 13:23:20 +01:00
Simon Rozman
bd0fdba435 Composed characters extended to support multiple UTF-16 character 2017-03-14 12:54:46 +01:00
Simon Rozman
87814981db ZRCola::translation_db::Compose fixed to honor inputMax==-1 correctly 2017-03-14 10:51:56 +01:00
Simon Rozman
acf86e2ce0 Reverted to SHA1 Authenticode signatures for Windows XP compatibility 2017-03-14 09:44:31 +01:00
Simon Rozman
1016d5f738 ZRCola tutorial is now displayed only if ZRCola feature was installed 2017-03-14 09:23:53 +01:00
Simon Rozman
4d53785af7 wxWidget RTL dependencies fixed 2017-03-14 09:00:16 +01:00
Simon Rozman
8e2a3860e3 Changed to RFC3161 time-stamping and forced SHA1 digest to support Vista 2017-03-10 13:49:07 +01:00
Simon Rozman
0c2e666d0f Russian translation update 2017-03-10 13:36:48 +01:00
Simon Rozman
d6075327ef Copy (de)composed and return feature introduced 2017-01-13 13:56:51 +01:00
Simon Rozman
14e665fdf2 Sub-module update 2017-01-13 13:55:18 +01:00
Simon Rozman
55e2ee8c4d Folder options added 2017-01-12 10:10:08 +01:00
Simon Rozman
f444355d6d 00ZRCOla fonts replaced with ZRCOla 2017-01-12 10:09:54 +01:00
Simon Rozman
feb3c7c150 Unicode apostrophe changed to ASCII version for simplicity 2017-01-03 11:52:36 +01:00
Simon Rozman
f65634e285 Sub-module update and version set to 2.0 2016-11-08 11:20:50 +01:00
Simon Rozman
62a67b6be7 German MSI building commented until translation is available 2016-11-08 11:05:08 +01:00
Simon Rozman
5304402ec5 Sub-module update 2016-10-18 14:26:57 +02:00
Simon Rozman
f14fa2911d Version set to 2.0-beta14 2016-10-18 13:50:13 +02:00
Simon Rozman
db391d7023 Incorrect frequent character information in Character Catalog fixed 2016-10-18 13:36:35 +02:00
Simon Rozman
0b5a6a7016 Required update package language determined correctly now 2016-10-18 12:56:34 +02:00
Simon Rozman
5cc72a6a96 wxAUI pane captions no longer persist to allow localization 2016-10-18 12:38:55 +02:00
Simon Rozman
4138f6a5a3 Language for product update matches UI language not OS Regional settings now 2016-10-18 11:14:55 +02:00
Simon Rozman
2b2b2656b3 Language of character tags in Character Search dialog resolved to match UI language 2016-10-18 11:00:40 +02:00
Simon Rozman
6253f2c267 About dialog text updated 2016-10-18 10:10:49 +02:00
Simon Rozman
c9779c3772 Version set to 2.0-beta13 2016-10-17 10:38:34 +02:00
Simon Rozman
f6019e361c Russian translation complete now 2016-10-17 10:35:22 +02:00
Simon Rozman
3fd0aef27d SRC SASA >> ZRC SAZU 2016-10-17 09:30:01 +02:00
Simon Rozman
49c9d33b97 Russian translations added 2016-10-17 09:21:16 +02:00
Simon Rozman
b01d1c5409 Sub-module update 2016-10-14 08:47:04 +02:00
Simon Rozman
b0b434fec2 Version set to 2.0-beta12 2016-10-13 12:56:08 +02:00
Simon Rozman
d46557a367 CompareString() flags simplified to work on Windows XP 2016-10-13 12:55:44 +02:00
Simon Rozman
0180cb6306 Updating task triggering adjusted to workaround Windows 10 Task Scheduler 0x800710e0 bug 2016-10-13 12:32:26 +02:00
Simon Rozman
4ce3213b1a Searching by character tags honors category selection now 2016-10-13 12:30:55 +02:00
Simon Rozman
75b2758797 Translation update 2016-10-13 11:55:46 +02:00
Simon Rozman
2e14bcf1ec Translation templates update 2016-10-13 11:53:04 +02:00
Simon Rozman
cf49e3e401 Merge branch 'master' of https://github.com/Amebis/ZRCola
# Conflicts:
#	ZRCola/zrcolacomppnl.cpp
2016-10-13 11:16:27 +02:00
Simon Rozman
0ed0cf8c49 Support for searchable character tags added 2016-10-13 11:13:46 +02:00
Simon Rozman
38a77ca51b Code clean-up 2016-10-13 10:34:45 +02:00
Simon Rozman
891bd624fc Code clean-up 2016-10-13 10:32:20 +02:00
Simon Rozman
affe7b06a2 Code clean-up 2016-10-13 09:01:23 +02:00
Simon Rozman
f51c4dbbec ZRCola::tagname_db::Search() added 2016-10-12 18:45:59 +02:00
Simon Rozman
650ad13a30 lang >> locale 2016-10-12 18:40:07 +02:00
Simon Rozman
f53779dbad Character tagging support added 2016-10-12 14:30:24 +02:00
Simon Rozman
a45115d5e7 Support for the [VRS_CharList].[klj_bes_en] has been discontinued 2016-10-12 14:28:15 +02:00
Simon Rozman
b5ba1290f9 Setup sub-folder abolished and final MSI output CAB embedding and signing re-established 2016-10-11 13:28:09 +02:00
Simon Rozman
52689653d0 Adaptation to Updater changes 2016-10-11 13:25:33 +02:00
Simon Rozman
8d9af61d5e ZRCOLA_ >> PRODUCT_ 2016-10-11 12:54:13 +02:00
Simon Rozman
5f339d0d51 Sub-module update 2016-10-11 12:49:35 +02:00
Simon Rozman
641d178248 include/zrcola.h >> include/version.h 2016-10-11 12:49:01 +02:00
Simon Rozman
67d3c6f3ac Output MSI file updated 2016-10-11 11:34:24 +02:00
Simon Rozman
060ed729b3 en_US localization fixed 2016-10-11 11:22:40 +02:00
Simon Rozman
f8eead6835 MSI building process revised
- Common cabinet file for all language variations
- Same practice applied as with GÉANTLink project
2016-10-11 11:08:36 +02:00
Simon Rozman
15693f643f MSI module Makefile simplified 2016-10-11 11:04:42 +02:00
Simon Rozman
916b466909 Revert "MSI files contain all localization files now"
This reverts commit a112a46755.
2016-10-11 10:06:59 +02:00
Simon Rozman
a112a46755 MSI files contain all localization files now 2016-10-11 10:03:18 +02:00
Simon Rozman
fba2181b32 REDIST_ variables removed for cleaner Makefile 2016-10-11 09:33:56 +02:00
Simon Rozman
d9bf31897e Sub-module update 2016-10-11 09:26:26 +02:00
Simon Rozman
65b92f017b Character tags updated 2016-10-07 12:19:16 +02:00
Simon Rozman
dddc2d5794 chrcatid_t_blank and langid_t_blank are static members of their respective structures now 2016-10-06 23:17:24 +02:00
Simon Rozman
e4e8609a00 Initial setup of character tags added 2016-10-06 23:15:30 +02:00
Simon Rozman
cee1ea7dbc Total decomposition of rule's decompositions added 2016-10-06 20:56:41 +02:00
Simon Rozman
87c41451ab ATL replaced by WinStd 2016-10-06 16:02:56 +02:00
Simon Rozman
ecefcecfd8 Event to detect secondary ZRCola launch implemented by winstd::win_handle now 2016-10-06 15:59:27 +02:00
Simon Rozman
ba8254c097 Auto C++ typing introduced where appropriate 2016-10-06 11:52:17 +02:00
Simon Rozman
dacca1409e Version set to 2.0-beta10 2016-10-05 19:39:28 +02:00
Simon Rozman
8a3a539d5b Texts and translations update 2016-10-05 14:00:42 +02:00
Simon Rozman
bb2e5e256b Stock "About" menu text replaced with custom one (the stock was missing ellipsis) 2016-10-05 13:39:33 +02:00
Simon Rozman
6828887308 Program title in About dialog box now limited in width to prevent excess dimensions when font is not installed 2016-10-05 13:33:22 +02:00
Simon Rozman
186bc61723 Locale is set using wxExtend's wxInitializeLocale() helper function now 2016-10-05 13:18:35 +02:00
Simon Rozman
19a9d9c26d Shortcuts in Russian translation revised 2016-10-05 13:18:26 +02:00
Simon Rozman
cca084be7d Missing shortcuts and ellipses added to Russian translation 2016-10-05 11:56:34 +02:00
Simon Rozman
6710e0a21c Font and database update 2016-10-05 11:43:25 +02:00
Simon Rozman
b5cc0b8f2c Slovenian translation update 2016-10-05 11:36:33 +02:00
Simon Rozman
ded987e4f8 Slovenian translations update 2016-10-05 11:07:54 +02:00
Simon Rozman
957d530801 Russian MSI files available now 2016-10-05 11:04:40 +02:00
Simon Rozman
4c716f2ba3 Translation update 2016-10-05 11:02:42 +02:00
Simon Rozman
7e3cf0bce7 HKLM\SOFTWARE\Amebis\ZRCola\Language is set using LANGUAGE property now to prevent accidental localization of registry key and/or value name 2016-10-05 11:02:23 +02:00
Simon Rozman
7f97a20ba0 MO files are dynamically generated as a part of build process now 2016-10-05 10:22:06 +02:00
Simon Rozman
4b4bc1b371 Revert "A system reboot is scheduled when "00 ZRCola" font substitute is registered"
This reverts commit 41aa04abad.
2016-10-04 13:19:48 +02:00
Simon Rozman
f0b573f1a8 Sub-module update 2016-10-04 13:15:52 +02:00
Simon Rozman
c2887f77b0 WinStd update 2016-09-19 10:52:04 +02:00
Simon Rozman
f056a4b0ec rcxgettext.exe dependency eliminated 2016-09-19 10:46:17 +02:00
Simon Rozman
181778c981 Adaptation to MSIBuild updates
- Source file English "en_US" instead of generic "En" now
- MSIBUILD_LANG_PO merged to LANG
- Language names in MSIBuild extended from two letter to ll_CC syntax
2016-09-19 10:04:42 +02:00
Simon Rozman
ffb887b306 Creation of localized folder added 2016-09-15 12:56:38 +02:00
Simon Rozman
515a994ece Switch to new version of MSIBuild 2016-09-14 00:20:07 +02:00
Simon Rozman
ab28678227 Generation of localized IDT files simplified 2016-09-06 16:40:56 +02:00
Simon Rozman
b90ff2977f Translations update 2016-08-12 13:42:58 +02:00
Simon Rozman
eab7bcb35f URL update 2016-08-03 08:38:16 +02:00
Simon Rozman
a7c6f2967f Version set to 2.0-beta9 2016-08-03 08:28:29 +02:00
Simon Rozman
2316e5906c Database update 2016-08-03 08:27:24 +02:00
Simon Rozman
1866ace76f Version tagging removed from POT file generation to make POT files version independent 2016-08-03 08:27:09 +02:00
Simon Rozman
48d97742b1 URL update 2016-08-02 17:47:52 +02:00
Simon Rozman
96bde4740f A reboot after "00 ZRCola" font substitute installation is explained now + Updater updated to version that should not reboot after an unattended update 2016-07-22 01:20:24 +02:00
Simon Rozman
333a415a66 Database and Slovenian translation update 2016-07-22 00:19:00 +02:00
Simon Rozman
26e81ac0a0 Sub-module update 2016-07-18 08:51:20 +02:00
Simon Rozman
2b610e2804 Version set to 2.0-beta8 2016-07-18 08:29:30 +02:00
Simon Rozman
ea4f85223c "ZRCola" font name mainstream now 2016-07-15 21:44:28 +02:00
Simon Rozman
aff96d1efe Russian MSI generation commented & some additional support for German added 2016-07-15 21:27:51 +02:00
Simon Rozman
f5eaf3c74b Internal and output folders now using $(MSBuildProjectName) instead of $(ProjectName), to distinguish project variations of essentially the same module 2016-07-15 12:48:07 +02:00
Simon Rozman
6e167b7344 Contact information updated 2016-07-15 10:32:26 +02:00
Simon Rozman
acaae141de ZRCola keyboard PDF updated 2016-07-15 10:28:29 +02:00
Simon Rozman
4a32a4b40c General package information moved from NMAKE macros to Property table, to allow translation to other scripts (than Windows-1252 and Windows-1250) 2016-07-15 09:52:22 +02:00
Simon Rozman
902fcf92a4 Support for Russian localization introduced 2016-07-14 18:08:15 +02:00
Simon Rozman
424a6762f7 Support for numeric keyboard with Ins+nnnn added 2016-07-14 13:59:50 +02:00
Simon Rozman
41aa04abad A system reboot is scheduled when "00 ZRCola" font substitute is registered 2016-07-14 13:44:32 +02:00
Simon Rozman
8ae98bfb12 The font components marked to use reference counter 2016-07-14 12:34:27 +02:00
Simon Rozman
41dfe0c892 Font update 2016-07-14 11:25:01 +02:00
Simon Rozman
5cd454a757 Version set to 2.0-beta7f 2016-07-14 10:56:38 +02:00
Simon Rozman
a75b649f8b Database and font update 2016-07-14 10:50:53 +02:00
Simon Rozman
174f117770 "00 ZRCola" font renamed to "ZRCola" 2016-07-14 10:25:54 +02:00
Simon Rozman
19d1daf099 Slovenian translations updated 2016-07-14 09:27:36 +02:00
Simon Rozman
c4fe7c4370 Some Russian translations added 2016-07-14 09:18:37 +02:00
Simon Rozman
7a7135ea81 Version set to 2.0-beta7 2016-06-17 13:04:29 +02:00
Simon Rozman
2d97afded3 Database update 2016-06-17 13:01:16 +02:00
Simon Rozman
01e8ca5338 Documentation update 2016-06-14 12:45:31 +02:00
Simon Rozman
02f69e332c Documentation update 2016-06-14 12:38:46 +02:00
Simon Rozman
5ce2d209d2 Update README.md 2016-06-14 12:29:38 +02:00
Simon Rozman
088abe062b Documentation update 2016-06-14 12:28:19 +02:00
Simon Rozman
f264fdb211 Version set to 2.0-beta6 2016-06-14 12:13:21 +02:00
Simon Rozman
0e9c6ab66e Support for more or less frequent characters in catalog added 2016-06-14 12:12:17 +02:00
Simon Rozman
040109c36f Version set to 2.0-beta5 2016-06-14 10:15:43 +02:00
Simon Rozman
d130888753 End-of-setup tutorial added 2016-06-14 10:14:45 +02:00
Simon Rozman
e81b0f772d Translation update 2016-06-14 10:02:21 +02:00
Simon Rozman
750cab5370 Add/Remove Programs icon reverted back to ZRCola's 2016-06-14 09:19:03 +02:00
Simon Rozman
213425fd11 Global hot-key registration moved as late as possible to avoid non-effective registration at auto start-up 2016-06-13 15:38:19 +02:00
Simon Rozman
689c72e7e7 Composing ə (and some other characters) combinations fixed 2016-06-13 15:35:52 +02:00
Simon Rozman
fbd60a53dc Categories are collapsible in Character Search dialog now 2016-06-13 13:25:05 +02:00
Simon Rozman
e3475ef48d Font and database update - fonts now OpenType 2016-06-13 11:02:55 +02:00
Simon Rozman
86d512e752 Empty character groups and categories are included in translation catalog too now 2016-06-13 10:57:00 +02:00
Simon Rozman
665b6c3564 Version set to 2.0-beta4 2016-06-02 21:24:13 +02:00
Simon Rozman
173d9c77af ZRCola keyboard PDF update 2016-06-02 21:23:21 +02:00
Simon Rozman
a6088c3028 Additional check for inactive/disabled characters in Character Catalog added 2016-06-02 21:06:36 +02:00
Simon Rozman
ff0354474e Character Selector >> Find Character 2016-06-02 20:54:52 +02:00
Simon Rozman
33f0cbea0d About dialog text change 2016-06-02 20:41:18 +02:00
Simon Rozman
c39aa9f97e Manual check for updates modified to use foreground thread: works always, but blocks UI while downloading 2016-06-02 20:33:49 +02:00
Simon Rozman
45530b23f3 WX_INSTALL_PATH >> WXWIN 2016-06-02 15:10:22 +02:00
Simon Rozman
cb17f06927 ZRCola keyboard shortcuts PDF and link to Instructions website added 2016-06-01 19:16:25 +02:00
Simon Rozman
ac3b44de2b Sub-module update 2016-06-01 17:52:57 +02:00
Simon Rozman
c839d5f50d Version set to 2.0-beta3 2016-05-31 14:55:43 +02:00
Simon Rozman
22be76bec5 New character request is now dialog based
(closes #13)
2016-05-31 14:54:15 +02:00
Simon Rozman
e5b246a4f0 Character search ranking and display is more sophisticated now 2016-05-31 11:50:12 +02:00
Simon Rozman
3f64aef58d Version set to 2.0-beta2 2016-05-31 10:41:15 +02:00
Simon Rozman
2dc6b2d4f5 ZRCola declaration instruction added 2016-05-31 10:39:10 +02:00
Simon Rozman
c938320c45 Character selector dialog upgrade: tool tips and keyboard shortcut display added 2016-05-31 08:32:32 +02:00
Simon Rozman
d7968f539c Related character detection is smarter and more accurate now 2016-05-30 12:11:16 +02:00
Simon Rozman
beabeb17aa Character preview grid control allows Tab traversal now 2016-05-30 11:55:22 +02:00
Simon Rozman
155f12f44e Backward/forward navigation in Character Selector introduced 2016-05-30 09:43:28 +02:00
Simon Rozman
d46a1d4041 Select All/None/Invert feature added to categories in Character Selector 2016-05-26 17:16:51 +02:00
Simon Rozman
c195a07982 Code simplified as the benefit did not outweigh complexity 2016-05-26 16:27:55 +02:00
Simon Rozman
6c82b6333f AEsthetic modifications 2016-05-26 16:02:44 +02:00
Simon Rozman
1178406aa9 Related character generation finished
(closes #26)
2016-05-26 15:57:49 +02:00
Simon Rozman
1e09407742 Related characters preparation multi-threaded now 2016-05-26 12:59:06 +02:00
Simon Rozman
a7b5e1a573 Related characters feature work continues... 2016-05-26 12:03:43 +02:00
Simon Rozman
d70b72b0c1 Inactive related characters removed 2016-05-26 08:53:38 +02:00
Simon Rozman
7bbe92d359 Version set to 2.0-beta1. 2016-05-26 07:22:00 +02:00
Simon Rozman
0e844cd5e4 Incorrect string reset in DBSource::GetValue() fixed 2016-05-25 15:49:56 +02:00
Simon Rozman
67a6fd18e4 Empty character categories removed from database 2016-05-25 13:57:33 +02:00
Simon Rozman
1fcd2d2689 std namespace omitted for code clarity 2016-05-25 13:24:37 +02:00
Simon Rozman
1becda5600 ZRColaInstall*.exe utility publishing added 2016-05-25 13:21:46 +02:00
Simon Rozman
9bccaefabb Other language variations of ZRColaInstallSl.exe utility added 2016-05-25 13:21:13 +02:00
Simon Rozman
7e3e24232d Key codes are translated to English U.S. keyboard correctly now 2016-05-25 12:44:00 +02:00
Simon Rozman
6733ef3cfc wxAuiManager persistence changed to resolve asserts in Win32 builds 2016-05-25 00:07:34 +02:00
Simon Rozman
38f47db6d6 Temporary modal dialogs moved to stack 2016-05-24 23:18:45 +02:00
Simon Rozman
5a26350153 Sub-module update 2016-05-24 23:18:26 +02:00
Simon Rozman
5570a73895 Log level for is now adjusted to allow display of Updater progress for release builds too 2016-05-24 23:17:09 +02:00
Simon Rozman
de98129893 Database update 2016-05-24 22:24:17 +02:00
Simon Rozman
4898492972 Sub-module update 2016-05-24 22:13:09 +02:00
Simon Rozman
73c2146fe2 Missing wxSocketBase::Shutdown() added 2016-05-24 21:47:34 +02:00
Simon Rozman
44c86e2886 Manual check for updates added
(closes #22)
2016-05-24 16:53:26 +02:00
Simon Rozman
3c2e689ae2 Index-out-of-bounds issue fixed 2016-05-24 12:18:49 +02:00
Simon Rozman
5d215f628b Icon for ZRColaInstall added 2016-05-24 11:40:39 +02:00
Simon Rozman
e055207cea Installer bootstrap utility introduced 2016-05-24 10:31:53 +02:00
Simon Rozman
8f10cff923 Digital signatures reverted to SHA-1 for Windows XP and Vista support 2016-05-24 10:31:11 +02:00
Simon Rozman
91c44c388f About dialog extended 2016-05-24 08:43:03 +02:00
Simon Rozman
79664972a3 Grid navigation to previous/next row using left and right arrow keys added 2016-05-23 18:59:12 +02:00
Simon Rozman
d36c47e8a6 Character not implemented in 00 ZRCola font removed 2016-05-23 18:41:36 +02:00
Simon Rozman
16a28cd011 Font and database update 2016-05-23 15:35:50 +02:00
Simon Rozman
73f1d4d2c9 Unicode control characters removed from the lists 2016-05-23 15:15:31 +02:00
Simon Rozman
26c899734b The character entered via Unicode in Character Selector is now looked up in search results, brought into view and selected. 2016-05-23 15:03:09 +02:00
Simon Rozman
ff6a551c50 Unicode code in Character Selector is four hexadecimal digits long now 2016-05-23 15:02:08 +02:00
Simon Rozman
72ba4377c8 Sub-module update 2016-05-23 15:01:01 +02:00
Simon Rozman
3f02306182 Font of character preview in character selector reduced for less clipping 2016-05-23 10:50:43 +02:00
Simon Rozman
9c03547378 ZRCola window is now brought front and focused when invoked from iconized state.
(fixes #25)
2016-05-23 10:41:32 +02:00
Simon Rozman
5271aca526 Double application launch prevention lock added
(fixes #24)
2016-05-23 10:40:07 +02:00
Simon Rozman
dbcf539616 Sub-module update 2016-05-23 10:32:25 +02:00
Simon Rozman
903c635b34 Sub-module update 2016-05-16 12:23:14 +02:00
Simon Rozman
6c13837398 Couple of compiler warnings resolved 2016-05-16 10:44:05 +02:00
Simon Rozman
3126091e0b Sub-module update 2016-05-13 20:05:34 +02:00
Simon Rozman
bb1b0e64d6 German and Russian translation stub added 2016-05-13 20:05:18 +02:00
Simon Rozman
78ccf1b2cf Version set to 2.0-beta 2016-05-13 18:54:11 +02:00
Simon Rozman
c921d533a9 Issue with non included term trailing in sub-word index fixed 2016-05-13 18:47:12 +02:00
Simon Rozman
e4fb91e305 Settings moved from menu(s) to configuration dialog
(closes #21)
2016-05-13 16:22:51 +02:00
Simon Rozman
a81dd7e250 Character request feature added
(closes #13)
2016-05-13 13:36:25 +02:00
Simon Rozman
a4fe4b6a26 Current character category display added to character selector 2016-05-13 13:24:18 +02:00
Simon Rozman
1198579963 Character category index fixed 2016-05-13 13:22:17 +02:00
Simon Rozman
5d732522fe wxZRColaCharGrid memory leak fixed
(fixes #23)
2016-05-13 13:21:39 +02:00
Simon Rozman
155fb03c5a Character search moved to separate thread for smoother experience 2016-05-13 12:11:38 +02:00
Simon Rozman
710937f8df Language ID type redeclaration for easier and safer work 2016-05-13 10:16:29 +02:00
Simon Rozman
4e435b044c Additional operators 2016-05-13 10:16:23 +02:00
Simon Rozman
4ec7dc3ca5 Search optimizations 2016-05-13 09:32:36 +02:00
Simon Rozman
9c3c1585d5 Character Select finished
(closes #11)
2016-05-13 03:44:28 +02:00
Simon Rozman
53ce3a2411 COMDAT Folding disabled for debug builds 2016-05-12 17:15:04 +02:00
Simon Rozman
643a8dcb82 Sub-module update 2016-05-12 14:12:09 +02:00
Simon Rozman
9337b660d2 Database update 2016-05-12 10:56:07 +02:00
Simon Rozman
44f2ef1ae1 Work on character selector continues 2016-05-11 14:39:57 +02:00
Simon Rozman
4aa0d9183e Support for Unicode character database added 2016-05-11 14:39:20 +02:00
Simon Rozman
e3c6a01722 ZRCola::index::compare_sort() reverts to compare() by default now 2016-05-11 12:40:14 +02:00
Simon Rozman
0d30a89d22 Character selector merged back to continue work
# Conflicts:
#	ZRCola/ZRCola.fbp
#	ZRCola/ZRCola.vcxproj
#	ZRCola/ZRCola.vcxproj.filters
#	ZRCola/locale/sl_SI.po
#	ZRCola/zrcolafrm.cpp
#	ZRCola/zrcolafrm.h
#	ZRCola/zrcolagui.cpp
#	ZRCola/zrcolagui.h
2016-05-11 09:00:59 +02:00
Simon Rozman
23ba447283 ZRCola now minimizes to system tray.
(closes #20)
2016-05-10 13:10:37 +02:00
Simon Rozman
a27f7f470d (De)Composition moved to idle processing & other optimizations
(fixes #19)
2016-05-10 09:41:35 +02:00
Simon Rozman
50790ad01d ZRCola no longer responds to Ctrl+Alt shortcuts when invoked with AltGr 2016-05-09 16:48:54 +02:00
Simon Rozman
ae3344d5eb Aesthetic modifications 2016-05-09 11:57:19 +02:00
Simon Rozman
79ae4855e3 Additional "text updated" event generation added to fix premature event receiving on EM_REPLACESEL
(fixes #19)
2016-05-09 11:57:02 +02:00
Simon Rozman
349bc34fa8 libZRColaUI extended to use wxWidgets and ZRColaApp::GetKeySequenceAsText() moved back to ZRCola::keyseq_db::GetSequenceAsText() for general accessibility 2016-05-09 11:05:21 +02:00
Simon Rozman
92bbc9a8bf Version set to 2.0-alpha7. 2016-05-06 15:05:43 +02:00
Simon Rozman
b88cafcdfd Missing dependency added 2016-05-06 15:05:26 +02:00
Simon Rozman
994ec6461e Non-working locale-specific key sequences issue fixed 2016-05-06 14:27:12 +02:00
Simon Rozman
1867235007 Key sequences (shortcuts) added to Character Catalog tooltips 2016-05-06 13:42:14 +02:00
Simon Rozman
7545e9dadf Key sequence naming moved to ZRCola to allow localization 2016-05-06 13:40:55 +02:00
Simon Rozman
eb67174bed - Key sequences moved to wxZRCola app for global availability
- Top window retrieval mechanism in wxZRColaKeyHandler more robust now
2016-05-06 12:24:21 +02:00
Simon Rozman
8f33c72ad7 Inline function optimization more aggressive now 2016-05-06 12:11:41 +02:00
Simon Rozman
dbdfa139c4 Sub-module update 2016-05-06 12:11:10 +02:00
Simon Rozman
dd87605ac2 Character grid updated to show wxAui style tool tips 2016-05-06 11:56:41 +02:00
Simon Rozman
5c9a9cab03 INS+Unicode status bar message more descriptive now 2016-05-06 11:32:30 +02:00
Simon Rozman
d86c1d004d Tooltips added to character grid 2016-05-06 11:25:41 +02:00
Simon Rozman
7bd217ec47 Aesthetic modifications 2016-05-06 11:25:12 +02:00
Simon Rozman
01c50ba9e1 wxZRColaCharGrid now forwards Tab key to allow classic dialog control navigation 2016-05-06 08:40:03 +02:00
Simon Rozman
f9ef646f22 On-screen character catalog added 2016-05-05 15:37:44 +02:00
Simon Rozman
2a6212d19d Character group data cleanup 2016-05-05 15:21:25 +02:00
Simon Rozman
1a6dc8b723 AUI initial organization fixed 2016-05-05 08:15:54 +02:00
Simon Rozman
3b6eff0b44 Changed Cut/Copy/Paste event forwarding logic to avoid deadlocks in future 2016-05-04 15:54:07 +02:00
Simon Rozman
9a2bc6b743 Language localization optimization 2016-05-04 15:52:47 +02:00
Simon Rozman
6e4cd60152 Character group database support added 2016-05-04 15:49:51 +02:00
Simon Rozman
f2f0b007c4 wxAui becoming main UI 2016-05-03 13:33:43 +02:00
Simon Rozman
306be13fca GUI switched to wxAui 2016-05-03 13:29:24 +02:00
Simon Rozman
eb75e020e9 Folder icon added 2016-05-03 12:44:58 +02:00
Simon Rozman
bbb09f3779 8.3 file names now unique across module variations 2016-05-03 12:43:10 +02:00
Simon Rozman
99a4b2e6c8 Insert+Unicode keyboard feature added 2016-04-30 15:37:06 +02:00
Simon Rozman
3ff9459198 Slovenian translation update 2016-04-30 15:36:03 +02:00
Simon Rozman
8bdef858a0 Composition recognition improvements 2016-04-30 14:55:52 +02:00
Simon Rozman
4ef335b6aa Version set to 2.0-alpha6 2016-04-29 13:09:19 +02:00
Simon Rozman
15365aff46 Input language detection added
(closes #2)
2016-04-29 12:54:39 +02:00
Simon Rozman
4a27d62b4e ZRCola::LangConvert() function added 2016-04-29 12:35:59 +02:00
Simon Rozman
38bf070a4a Auto-start on logon feature added
(closes #8)
2016-04-29 09:51:40 +02:00
Simon Rozman
b7533d4b27 Character selector feature skeleton added 2016-04-26 16:05:42 +02:00
Simon Rozman
c7df06ba1e Fixed order in SQL queries for consistent ZRCola.zrcdb generation 2016-04-26 15:43:33 +02:00
Simon Rozman
b9d636fb30 CharDescGenerate job added to generate character descriptions 2016-04-26 15:26:11 +02:00
Simon Rozman
ac005c0b77 Merge branch 'master' of https://github.com/Amebis/ZRCola 2016-04-23 22:23:00 +02:00
Simon Rozman
58f354f028 GUI edit boxes labeled now 2016-04-23 22:22:46 +02:00
Simon Rozman
a1a1852552 GUI edit boxes labeled now 2016-04-23 22:16:03 +02:00
Simon Rozman
7807e8a918 ZRCola.fbp added to project 2016-04-23 22:14:49 +02:00
Simon Rozman
3daaff4260 Script to import UnicodeData.txt to ZRCola.mdb added 2016-04-23 14:02:50 +02:00
Simon Rozman
840c8240b7 Composer panel settings moved for simpler configuration organization 2016-04-23 06:38:48 +02:00
Simon Rozman
21114d818c On-screen Unicode dump added
(closes #14)
2016-04-22 16:12:59 +02:00
Simon Rozman
7a424da3fc Code to Save & Restore text moved to wxZRColaComposerPanel to avoid confusion with GUI persistence 2016-04-22 14:24:17 +02:00
Simon Rozman
82d2fc42bd Minor updates of auto-saving feature 2016-04-22 13:39:34 +02:00
Simon Rozman
5f755aa3d9 Auto-Save & Restore of text added
(closes #16)
2016-04-22 13:29:30 +02:00
Simon Rozman
8c51f9c2a6 Ambiguous decomposition sequences now decompose to first ranked decomposition
(resolves #18)
2016-04-22 11:30:42 +02:00
Simon Rozman
5df7ca886b Decomposition before composition added
(resolves #17)
2016-04-22 11:00:11 +02:00
Simon Rozman
2e89edb62c Source and destination index mapping on the left side of the first transformation issue fixed 2016-04-22 10:59:29 +02:00
Simon Rozman
a021dd31f7 ZRCola::mapping is generic now 2016-04-20 12:24:23 +02:00
Simon Rozman
5e4331903b Language names are displayed with the localized full name now
(closes #15)
2016-04-13 20:39:14 +02:00
Simon Rozman
55c76265df Redundant check removed 2016-04-13 12:41:41 +02:00
Simon Rozman
5a2fcf7cb2 Version set to 2.0-alpha5. 2016-04-13 11:05:09 +02:00
Simon Rozman
4fba54bdb2 Text language for decomposition GUI support added
(closes #1)
2016-04-13 11:03:38 +02:00
Simon Rozman
ab3ef08a5f Translation database moved to ZRColaApp 2016-04-12 14:47:14 +02:00
Simon Rozman
c21e1b8198 Sub-module update 2016-04-11 13:53:08 +02:00
Simon Rozman
7e6eaefd42 Doxygen annotation update 2016-04-11 13:52:57 +02:00
Simon Rozman
f735bd5bee Decomposition can omit language specific characters now 2016-04-11 13:28:19 +02:00
Simon Rozman
b7f3305019 ZRCola::langid_t moved to common.h 2016-04-11 12:51:49 +02:00
Simon Rozman
b194662c03 Typo in documentation fixed 2016-04-11 12:41:40 +02:00
Simon Rozman
177edd19e8 Languages and language-specific characters added to the database 2016-04-11 12:41:22 +02:00
Simon Rozman
fc93474b9a Characters with decompositions starting with # do not decompose any more. 2016-04-11 10:21:11 +02:00
Simon Rozman
02f164cee6 Version set to 2.0-alpha4 2016-04-08 14:54:18 +02:00
Simon Rozman
a35c0d83ca Merge branch 'master' of https://github.com/Amebis/ZRCola 2016-04-08 14:49:47 +02:00
Simon Rozman
6b4ed23801 ZRCola database updated
(resolves #7)
2016-04-08 14:49:27 +02:00
Simon Rozman
2c602ad659 ZRCola database updated 2016-04-08 14:48:23 +02:00
Simon Rozman
279537b1f3 Combinations with partial longer match not composed issue resolved
(resolves #6)
2016-04-08 14:45:28 +02:00
Simon Rozman
f918c49bfd Accessing an element of table before determining size issue resolved 2016-04-08 13:48:33 +02:00
Simon Rozman
72c29a692e GUI aligned with stock text 2016-04-08 13:22:23 +02:00
Simon Rozman
fc78a650a2 Select All (text) feature added 2016-04-08 13:01:09 +02:00
Simon Rozman
acec7098e5 Minor GUI improvements 2016-04-08 12:44:35 +02:00
Simon Rozman
98eff47054 Clipboard events are forwarded to focused control now
(resolves #12)
2016-04-08 12:35:38 +02:00
Simon Rozman
cd2c20fc06 Version set to 2.0-alpha3. 2016-04-08 09:22:10 +02:00
Simon Rozman
ac772671cc Publish target split into PublishPre and Publish 2016-04-08 09:21:53 +02:00
Simon Rozman
acfe980705 Non-working OEM key sequences issue fixed
resolves #5
2016-04-07 14:52:45 +02:00
Simon Rozman
426b7a6227 Keyboard sequence monitoring upgraded not to react on modifier keys, canceling multi-key sequences when non-first key modifier pressed 2016-04-07 14:49:28 +02:00
Simon Rozman
834743c7dd Cleanup 2016-04-07 13:10:54 +02:00
Simon Rozman
c8628ef4eb Key sequence import fixed (resolves #7) 2016-04-07 12:53:19 +02:00
Simon Rozman
4f52304fe9 Advertised shortcuts disabled (closes #4) 2016-04-07 10:50:31 +02:00
Simon Rozman
eef80067bb Language setting moved from HKCU (per-user) to HKLM (global) 2016-04-07 09:41:29 +02:00
Simon Rozman
9240288245 Generic module names replaced 2016-04-06 14:14:35 +02:00
Simon Rozman
1b41ff7aab Version set to 2.0-alpha2 2016-04-06 13:21:24 +02:00
Simon Rozman
61af77e7b6 Main window size and position is remembered now 2016-04-06 13:15:03 +02:00
Simon Rozman
ee7f94d776 Old configuration delete added 2016-04-06 13:12:44 +02:00
Simon Rozman
1cb4f470c6 Application's config is global now 2016-04-06 13:09:33 +02:00
Simon Rozman
8fd0437502 GUI upgrade: Edit menu added, tool bar added, status bar added 2016-04-06 12:33:38 +02:00
Simon Rozman
93361f0edb Partial key sequence match no longer propagates the event 2016-04-06 12:29:07 +02:00
Simon Rozman
2007d04812 Non-Slovenian setup no longer include Slovenian localization 2016-04-05 14:54:54 +02:00
Simon Rozman
a4aff5151e Merged consecutive characters issue fixed 2016-04-05 14:38:59 +02:00
Simon Rozman
ce43a99b30 Sub-module update 2016-04-04 15:36:28 +02:00
Simon Rozman
06dae56c66 Shortcut monitor handles raw keyboard events now to get untranslated key codes 2016-04-04 14:22:33 +02:00
Simon Rozman
31869a9094 Comment fixed 2016-04-04 14:21:28 +02:00
Simon Rozman
799ef2da6b Sending capital Latin letters as lowercase issue fixed 2016-04-04 13:43:36 +02:00
Simon Rozman
80941d968f Cleanup 2016-04-04 13:21:40 +02:00
Simon Rozman
041ce03f09 Keyboard shortcuts changed to:
- ZRCola Compose: Win+Z => Win+F5
- Send composed: Ctrl+Enter => F5
- ZRCola Decompose: Win+Shift+Z => Win+F6
- Send decomposed: Ctrl+Enter => F6
- Cancel (de)composition: Esc
2016-04-04 13:15:26 +02:00
Simon Rozman
06c0ee790d Version set to 2.0-alpha1 2016-04-04 10:05:06 +02:00
Simon Rozman
e9535d5ee4 Cleanup 2016-04-04 10:03:57 +02:00
Simon Rozman
7af2b3da0a Publishing added 2016-04-01 19:43:12 +02:00
Simon Rozman
30a2027707 Sub-module update 2016-04-01 19:42:33 +02:00
Simon Rozman
39ec4750f4 Cleanup 2016-04-01 14:02:39 +02:00
Simon Rozman
d446c50ed0 Key generation for Updater module removed 2016-04-01 14:01:34 +02:00
Simon Rozman
9d6a4d2f1f Update publish URL changed 2016-04-01 13:33:06 +02:00
Simon Rozman
1d46968076 Sub-module update 2016-04-01 13:28:23 +02:00
Simon Rozman
c1e9819446 MSIBuildCfg.mak moved 2016-03-30 15:09:59 +02:00
Simon Rozman
7b27a14505 Sub-module update 2016-03-30 14:30:11 +02:00
Simon Rozman
b07ba1671c Friendlier parameter names 2016-03-30 13:17:09 +02:00
Simon Rozman
2308403400 8.3 file name confusion resolved 2016-03-30 12:01:09 +02:00
Simon Rozman
b863abd319 UpdCheck added to MSI package 2016-03-30 11:44:07 +02:00
Simon Rozman
fd36ffdc1f wxbase30u*_net and wxbase30u*_xml merge modules added 2016-03-30 11:43:05 +02:00
Simon Rozman
45ea582e59 ZRCola shortcut is registered for all users now (same as MSI install) 2016-03-30 10:11:01 +02:00
Simon Rozman
111db1ef21 Obsolete UPDATER_LOG_FILE setting removed 2016-03-29 15:33:57 +02:00
Simon Rozman
fa4460213d Sub-module update 2016-03-29 15:33:31 +02:00
Simon Rozman
5c032295d5 Sub-module update 2016-03-25 13:27:41 +01:00
Simon Rozman
301f218098 Updater integration continues 2016-03-25 13:15:54 +01:00
Simon Rozman
0ee6d6b4b2 Sub-module update 2016-03-24 12:45:27 +01:00
Simon Rozman
4650f8244b Localization issues fixed 2016-03-24 12:37:01 +01:00
Simon Rozman
f61d6f8a4b Sub-module update 2016-03-24 11:37:08 +01:00
Simon Rozman
18b9bf3750 Updater path changed to allow future expansion 2016-03-24 10:29:01 +01:00
Simon Rozman
aa6ceacee1 Merge branch 'master' of https://github.com/Amebis/ZRCola 2016-03-24 10:28:28 +01:00
Simon Rozman
64046a60c3 Microsoft Visual Studio 2010 C++ run-time libraries added to setup 2016-03-24 10:28:07 +01:00
Simon Rozman
6bec2894ed Microsoft Visual Studio 2010 C++ run-time libraries added to setup 2016-03-24 10:27:02 +01:00
Simon Rozman
e5711cc6b5 ZRCola.zrcdb installation added 2016-03-18 15:10:07 +01:00
Simon Rozman
54802ec29a Language of localization file fixed 2016-03-18 15:07:09 +01:00
Simon Rozman
08808db8c8 Submodule updated 2016-03-18 15:06:01 +01:00
Simon Rozman
4121239e9b 00 ZRCola font setup added 2016-03-18 14:40:33 +01:00
Simon Rozman
3a0dc3a41a TTF fonts moved to avoid ICE07 validation fail 2016-03-18 14:28:52 +01:00
Simon Rozman
fdcc7c682a Font installation script added 2016-03-18 13:53:27 +01:00
Simon Rozman
e92291de98 LocalizationRepositoryPath registered for 32 and 64-bit registry, and inside HKLM instead of HKCU 2016-03-18 13:52:19 +01:00
Simon Rozman
cb90f05ed2 Font (un)installation added 2016-03-18 13:51:20 +01:00
Simon Rozman
dfd429d14c 00 ZRCola fonts added 2016-03-18 13:04:48 +01:00
Simon Rozman
75ca79a466 Keys and configuration for Updater module added 2016-03-18 12:49:50 +01:00
Simon Rozman
50e49f9a8c Updater submodule added 2016-03-15 11:48:49 +01:00
Simon Rozman
f58d91bcc1 Includes inheritance fixed 2016-03-15 10:48:12 +01:00
Simon Rozman
7f28cdecae Minor modifications 2016-03-15 10:24:48 +01:00
Simon Rozman
4b40c0c31c Public key is published in Git now 2016-03-15 10:24:30 +01:00
Simon Rozman
044fdd331a Git ignore fixes 2016-03-15 10:22:42 +01:00
Simon Rozman
17c63556ad RSA key pair for signing publications added 2016-03-15 10:19:21 +01:00
Simon Rozman
41c1fd2328 ZRColaUtils cleanup added 2016-03-14 17:34:53 +01:00
Simon Rozman
b94d2b6b82 Localization files added to setup 2016-03-14 17:31:53 +01:00
Simon Rozman
732b8afdf7 Translations updated 2016-03-14 17:30:38 +01:00
Simon Rozman
f46f38d0e3 Submodules updated 2016-03-14 17:29:44 +01:00
Simon Rozman
f96213691b sl locale specialized to sl_SI 2016-03-14 17:09:32 +01:00
Simon Rozman
5edfe17fae Localization setup modified 2016-03-14 17:06:26 +01:00
Simon Rozman
3e3e311a62 sl locale specialized to sl_SI 2016-03-14 17:02:23 +01:00
Simon Rozman
690109c5a6 Localization settings are read from configuration now 2016-03-12 15:49:17 +01:00
Simon Rozman
b82e4e9b22 Settings registration added 2016-03-12 15:47:53 +01:00
Simon Rozman
5511625e5e Main MSI module split into submodules 2016-03-12 14:48:25 +01:00
Simon Rozman
8f66e85cee Copyright year updated 2016-03-12 14:22:39 +01:00
Simon Rozman
71b85d9213 Localization folder renamed 2016-03-12 14:20:32 +01:00
Simon Rozman
96acb87852 Submodules updated 2016-03-12 14:14:14 +01:00
Simon Rozman
417acc5418 Git ignores fixed 2016-03-12 14:13:58 +01:00
Simon Rozman
d9e0489a34 MSI building added 2016-03-12 13:57:35 +01:00
Simon Rozman
a8c7c4ab89 wxMSM submodule removed 2016-03-12 13:29:50 +01:00
Simon Rozman
8c0421c231 Image border hidden 2016-03-12 12:35:55 +01:00
Simon Rozman
3d4bdb4453 wxMSM submodule added 2016-03-12 12:18:19 +01:00
Simon Rozman
04a89d9f86 Slovenian translations updated 2016-03-12 11:45:00 +01:00
Simon Rozman
d4c0d0ca12 Submodule update 2016-03-12 09:24:12 +01:00
Simon Rozman
f4531bdf20 atlex and MSICALib submodules added 2016-03-12 08:50:48 +01:00
Simon Rozman
18b71b6ee9 MSIBuild and MSICA submodules added 2016-03-11 14:12:55 +01:00
Simon Rozman
b9199f9a7b size_type data type changed to best matching class 2016-03-08 14:44:48 +01:00
Simon Rozman
0e70075c78 Missing ATL namespace identifiers added 2016-03-08 14:18:54 +01:00
Simon Rozman
e13133d0e4 Indexes redesigned to return data reference directly for cleaner code 2016-03-08 14:09:23 +01:00
Simon Rozman
4d72a5bc4c Support for separate search-sort comparison added 2016-03-08 14:02:28 +01:00
Simon Rozman
74d076861b Support for multi-stage keyboard sequences added 2016-03-08 13:26:16 +01:00
Simon Rozman
87b80bb8c4 Dynamic keyboard entries moved to wxZRColaKeyHandler 2016-03-03 16:24:30 +01:00
Simon Rozman
70990846e1 Compare methods changed to compare index relevant fields only, to make reusable for search purposes 2016-03-03 16:08:07 +01:00
Simon Rozman
0ec73e44ca Index search method added 2016-03-03 16:06:59 +01:00
Simon Rozman
48e0fc9639 Index reorganization 2016-03-03 14:48:27 +01:00
Simon Rozman
3e6c535f42 Index comparison logic is part of indexes now 2016-03-03 13:42:37 +01:00
Simon Rozman
c6f1e8a251 Temporary special character insertion replaced with a first version of a dynamic one 2016-03-02 14:44:32 +01:00
Simon Rozman
72c03af0c5 Key sequence length check added 2016-03-02 14:03:27 +01:00
Simon Rozman
775d6611b2 Duplicate key sequences detection added 2016-03-02 13:30:21 +01:00
Simon Rozman
5398ccbd5e Support for dynamic keyboard shortcuts added 2016-03-02 12:29:54 +01:00
Simon Rozman
f3c0e83d04 Database element is generic 16-bit unsigned integer now 2016-03-02 12:29:41 +01:00
Simon Rozman
0501a5c7ca Indexes simplified to save space and add flexibility 2016-03-02 11:20:45 +01:00
Simon Rozman
4e5811803a Accessing translation data standardized 2016-03-02 10:45:22 +01:00
Simon Rozman
c44b449a36 Translation block ID changed 2016-03-02 10:19:24 +01:00
Simon Rozman
8e9a7d0fa9 Merged libZRColaUI back 2016-03-02 09:56:47 +01:00
Simon Rozman
8b86afeb5d Error output revision 2016-03-01 15:44:14 +01:00
Simon Rozman
6bb0cd7b89 (De)composition is not static any more 2016-03-01 15:36:21 +01:00
Simon Rozman
ce89d26373 ZRCola.zrcdb loading added 2016-03-01 14:49:32 +01:00
Simon Rozman
81e88a82e4 ZRCola.zrcdb added 2016-03-01 14:07:02 +01:00
Simon Rozman
cf49ef6fb7 <iostream> support for translation database added 2016-03-01 14:03:38 +01:00
Simon Rozman
628c9b6884 Merge branch 'master' of https://github.com/Amebis/ZRCola
# Conflicts:
#	ZRColaCompile/dbsource.cpp
#	ZRColaCompile/dbsource.h
#	ZRColaCompile/main.cpp
#	ZRColaCompile/stdafx.h
#	lib/libZRCola/include/zrcola/common.h
#	lib/libZRCola/include/zrcola/compose.h
2016-02-29 17:09:12 +01:00
Simon Rozman
215e03a705 Migration to dynamic translation tables continues... 2016-02-29 17:05:35 +01:00
Simon Rozman
7e6bc01b8a Migration to dynamic translation tables continues... 2016-02-29 15:28:17 +01:00
Simon Rozman
9d7cd76520 stdex library added to workspace 2016-02-29 11:11:45 +01:00
Simon Rozman
c32475c8ac Work continues... 2016-02-26 14:27:29 +01:00
Simon Rozman
a5454cb537 Cleanup 2016-02-26 13:32:26 +01:00
Simon Rozman
b31e796049 wxExtend switched to master 2016-02-26 12:50:14 +01:00
Simon Rozman
795bddcdc3 Back to master 2016-02-26 12:20:45 +01:00
Simon Rozman
866fceb081 Work continues 2016-02-26 12:20:08 +01:00
Simon Rozman
0e17c9d4dc ZRColaCompile utility introduced 2016-02-25 15:15:42 +01:00
Simon Rozman
1afc37c916 Empty libZRColaUI project added 2016-02-25 14:24:54 +01:00
Simon Rozman
4c91b8582a Output DLL filename changed 2016-02-25 12:43:04 +01:00
Simon Rozman
811778bd4e API version suffix added to DLL file name 2016-02-22 09:22:05 +01:00
208 changed files with 76503 additions and 23268 deletions

12
.gitignore vendored
View File

@@ -1,13 +1,3 @@
/ipch
/output/Win32.Debug
/output/Win32.Release
/output/x64.Debug
/output/x64.Release
/*.sdf
/*.suo
/.vs
*.user
temp
/*.opensdf
/ZRCola/locale/*.mo
/output/locale/sl/ZRCola.mo
/output/locale/sl/wxExtend.mo

15
.gitmodules vendored
View File

@@ -1,3 +1,18 @@
[submodule "lib/stdex"]
path = lib/stdex
url = https://github.com/Amebis/stdex.git
[submodule "lib/WinStd"]
path = lib/WinStd
url = https://github.com/Amebis/WinStd.git
[submodule "lib/wxExtend"]
path = lib/wxExtend
url = https://github.com/Amebis/wxExtend.git
[submodule "MSI/MSIBuild"]
path = MSI/MSIBuild
url = https://github.com/Amebis/MSIBuild.git
[submodule "MSI/MSICA"]
path = MSI/MSICA
url = https://github.com/Amebis/MSICA.git
[submodule "Updater"]
path = Updater
url = https://github.com/Amebis/Updater.git

21
LOCALIZATION.md Normal file
View File

@@ -0,0 +1,21 @@
# Localization of ZRCola
In order to get ZRCola experience in your language the following resources should be translated:
1. [ZRCola Application](https://www.transifex.com/amebis/zrcola/app/)
2. [ZRCola Database](https://www.transifex.com/amebis/zrcola/database/)
3. [ZRCola Core](https://www.transifex.com/amebis/zrcola/core/)
4. [Updater](https://www.transifex.com/amebis/updater/updater/) and [Updater UpdCheck](https://www.transifex.com/amebis/updater/updcheck/)
5. [wxExtend](https://www.transifex.com/amebis/wxextend/wxextend/)
6. Setup
- [ZRCola Setup](https://www.transifex.com/amebis/zrcola/setup/)
- [MSIBuild UI](https://www.transifex.com/amebis/msibuild/ui/)
- [MSIBuild Core](https://www.transifex.com/amebis/msibuild/core/)
- [MSICALib](https://www.transifex.com/amebis/msicalib/msicalib/)
- [MSICA](https://www.transifex.com/amebis/msica/msica/)
## General Guidelines
Please use the Windows "official" translations for terms published at [Microsoft Language Portal](https://www.microsoft.com/en-us/language). This will provide a consistent terminology experience on Windows.
Should you need any assistance to get started, please do not hesitate to contact project maintainer at [simon.rozman@amebis.si](mailto:simon.rozman@amebis.si).

1
MSI/MSIBuild Submodule

Submodule MSI/MSIBuild added at 320f7e9ee5

1
MSI/MSICA Submodule

Submodule MSI/MSICA added at c42ea05547

9
MSI/ZRCola/Main/.gitignore vendored Normal file
View File

@@ -0,0 +1,9 @@
/*-1.idt
/*-2.idt
/*-2.idtx
/*.Binary-1
/*.Binary-2
/*.Icon-1
/*.Icon-2
/*.lst
/*.msm

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
MSI/ZRCola/Main/Makefile Normal file

Binary file not shown.

21
MSI/ZRCola/Makefile Normal file
View File

@@ -0,0 +1,21 @@
#
# Copyright 1991-2019 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 "..\..\include\MSIBuildCfg.mak"
!INCLUDE "..\MSIBuild\Makefile"

1
MSI/ZRCola/locale/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/*.mo

File diff suppressed because one or more lines are too long

3619
MSI/ZRCola/locale/de_DE.po Normal file

File diff suppressed because one or more lines are too long

3642
MSI/ZRCola/locale/ru_RU.po Normal file

File diff suppressed because one or more lines are too long

3635
MSI/ZRCola/locale/sl_SI.po Normal file

File diff suppressed because one or more lines are too long

281
Makefile Normal file
View File

@@ -0,0 +1,281 @@
#
# Copyright 1991-2019 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/>.
#
OUTPUT_DIR=output
PUBLISH_DIR=\\amebis.doma\Splet\WWW\Apache\www.amebis.si-prenos\ZRCola
!IF "$(PROCESSOR_ARCHITECTURE)" == "AMD64"
PLAT=x64
REG_FLAGS=/f /reg:64
REG_FLAGS32=/f /reg:32
PROGRAM_FILES_32=C:\Program Files (x86)
!ELSEIF "$(PROCESSOR_ARCHITECTURE)" == "ARM64"
PLAT=ARM64
REG_FLAGS=/f /reg:64
REG_FLAGS32=/f /reg:32
PROGRAM_FILES_32=C:\Program Files (x86)
!ELSE
PLAT=Win32
REG_FLAGS=/f
PROGRAM_FILES_32=C:\Program Files
!ENDIF
MSBUILDFLAGS=/v:m /m
All ::
Clean ::
cd "MSI\MSIBuild\Version"
$(MAKE) /f "Makefile" /$(MAKEFLAGS) Clean
cd "$(MAKEDIR)"
-if exist "$(OUTPUT_DIR)\catalog.xml" del /f /q "$(OUTPUT_DIR)\catalog.xml"
!IFNDEF HAS_VERSION
######################################################################
# 1st Phase
# - Version info parsing
######################################################################
All \
Setup \
SetupDebug \
Register \
Unregister \
Localization \
PublishPre \
Publish :: "MSI\MSIBuild\Version\Version.mak"
$(MAKE) /f "Makefile" /$(MAKEFLAGS) HAS_VERSION=1 $@
"MSI\MSIBuild\Version\Version.mak" ::
cd "MSI\MSIBuild\Version"
$(MAKE) /f "Makefile" /$(MAKEFLAGS) Version
cd "$(MAKEDIR)"
!ELSE
######################################################################
# 2nd Phase
# - The version is known, do the rest.
######################################################################
!INCLUDE "MSI\MSIBuild\Version\Version.mak"
!INCLUDE "include\MSIBuildCfg.mak"
PUBLISH_PACKAGE_DIR=$(PUBLISH_DIR)\$(MSIBUILD_VERSION_STR)
PUBLISH_PACKAGE_URL=http://www.amebis.si/prenos/ZRCola/$(MSIBUILD_VERSION_STR)
######################################################################
# Main targets
######################################################################
All :: \
Setup
######################################################################
# Publishing
######################################################################
PublishPre :: \
"$(PUBLISH_PACKAGE_DIR)" \
"$(PUBLISH_DIR)"
Publish :: \
PublishPre \
"$(PUBLISH_DIR)\catalog-0000.xml"
######################################################################
# Registration
######################################################################
Register :: \
RegisterSettings \
InstallFonts \
RegisterShortcuts
Unregister :: \
UnregisterShortcuts \
UninstallFonts \
UnregisterSettings
RegisterSettings ::
reg.exe add "HKLM\Software\Amebis\ZRCola" /v "Language" /t REG_SZ /d "en_US" $(REG_FLAGS) > NUL
reg.exe add "HKLM\Software\Amebis\ZRCola" /v "LocalizationRepositoryPath" /t REG_SZ /d "$(MAKEDIR)\$(OUTPUT_DIR)\locale" $(REG_FLAGS) > NUL
reg.exe add "HKLM\Software\Amebis\ZRCola" /v "DatabasePath" /t REG_SZ /d "$(MAKEDIR)\$(OUTPUT_DIR)\data" $(REG_FLAGS) > NUL
!IF "$(PROCESSOR_ARCHITECTURE)" == "AMD64" || "$(PROCESSOR_ARCHITECTURE)" == "ARM64"
reg.exe add "HKLM\Software\Amebis\ZRCola" /v "Language" /t REG_SZ /d "en_US" $(REG_FLAGS32) > NUL
reg.exe add "HKLM\Software\Amebis\ZRCola" /v "LocalizationRepositoryPath" /t REG_SZ /d "$(MAKEDIR)\$(OUTPUT_DIR)\locale" $(REG_FLAGS32) > NUL
reg.exe add "HKLM\Software\Amebis\ZRCola" /v "DatabasePath" /t REG_SZ /d "$(MAKEDIR)\$(OUTPUT_DIR)\data" $(REG_FLAGS32) > NUL
!ENDIF
UnregisterSettings ::
-reg.exe delete "HKLM\Software\Amebis\ZRCola" /v "Language" $(REG_FLAGS) > NUL
-reg.exe delete "HKLM\Software\Amebis\ZRCola" /v "LocalizationRepositoryPath" $(REG_FLAGS) > NUL
-reg.exe delete "HKLM\Software\Amebis\ZRCola" /v "DatabasePath" $(REG_FLAGS) > NUL
!IF "$(PROCESSOR_ARCHITECTURE)" == "AMD64" || "$(PROCESSOR_ARCHITECTURE)" == "ARM64"
-reg.exe delete "HKLM\Software\Amebis\ZRCola" /v "Language" $(REG_FLAGS32) > NUL
-reg.exe delete "HKLM\Software\Amebis\ZRCola" /v "LocalizationRepositoryPath" $(REG_FLAGS32) > NUL
-reg.exe delete "HKLM\Software\Amebis\ZRCola" /v "DatabasePath" $(REG_FLAGS32) > NUL
!ENDIF
InstallFonts :: \
"$(WINDIR)\Fonts\ZRCola_Re.otf" \
"$(WINDIR)\Fonts\ZRCola_It.otf" \
"$(WINDIR)\Fonts\ZRCola_Bd.otf" \
"$(WINDIR)\Fonts\ZRCola_BI.otf"
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v "ZRCola (TrueType)" /t REG_SZ /d "ZRCola_Re.otf" $(REG_FLAGS) > NUL
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v "ZRCola Italic (TrueType)" /t REG_SZ /d "ZRCola_It.otf" $(REG_FLAGS) > NUL
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v "ZRCola Bold (TrueType)" /t REG_SZ /d "ZRCola_Bd.otf" $(REG_FLAGS) > NUL
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v "ZRCola Bold Italic (TrueType)" /t REG_SZ /d "ZRCola_BI.otf" $(REG_FLAGS) > NUL
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes" /v "00 ZRCola" /t REG_SZ /d "ZRCola" $(REG_FLAGS) > NUL
UninstallFonts ::
-reg.exe delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v "ZRCola (TrueType)" $(REG_FLAGS) > NUL
-reg.exe delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v "ZRCola Italic (TrueType)" $(REG_FLAGS) > NUL
-reg.exe delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v "ZRCola Bold (TrueType)" $(REG_FLAGS) > NUL
-reg.exe delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v "ZRCola Bold Italic (TrueType)" $(REG_FLAGS) > NUL
-reg.exe delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes" /v "00 ZRCola" $(REG_FLAGS) > NUL
-if exist "$(WINDIR)\Fonts\ZRCola_Re.otf" del /f /q "$(WINDIR)\Fonts\ZRCola_Re.otf"
-if exist "$(WINDIR)\Fonts\ZRCola_It.otf" del /f /q "$(WINDIR)\Fonts\ZRCola_It.otf"
-if exist "$(WINDIR)\Fonts\ZRCola_Bd.otf" del /f /q "$(WINDIR)\Fonts\ZRCola_Bd.otf"
-if exist "$(WINDIR)\Fonts\ZRCola_BI.otf" del /f /q "$(WINDIR)\Fonts\ZRCola_BI.otf"
RegisterShortcuts :: \
"$(PROGRAMDATA)\Microsoft\Windows\Start Menu\Programs\ZRCola" \
"$(PROGRAMDATA)\Microsoft\Windows\Start Menu\Programs\ZRCola\ZRCola.lnk"
UnregisterShortcuts ::
-if exist "$(PROGRAMDATA)\Microsoft\Windows\Start Menu\Programs\ZRCola" rd /s /q "$(PROGRAMDATA)\Microsoft\Windows\Start Menu\Programs\ZRCola"
######################################################################
# Folder creation
######################################################################
"$(OUTPUT_DIR)" \
"$(OUTPUT_DIR)\Keys" \
"$(OUTPUT_DIR)\locale" \
"$(PUBLISH_DIR)" \
"$(PUBLISH_PACKAGE_DIR)" \
"$(PROGRAMDATA)\Microsoft\Windows\Start Menu\Programs\ZRCola" :
if not exist $@ md $@
"$(OUTPUT_DIR)\Keys" \
"$(OUTPUT_DIR)\locale" : "$(OUTPUT_DIR)"
"$(PUBLISH_PACKAGE_DIR)" : "$(PUBLISH_DIR)"
######################################################################
# File copy
######################################################################
"$(WINDIR)\Fonts\ZRCola_Re.otf" : "$(OUTPUT_DIR)\ZRCola_Re.otf"
copy /y $** $@ > NUL
"$(WINDIR)\Fonts\ZRCola_It.otf" : "$(OUTPUT_DIR)\ZRCola_It.otf"
copy /y $** $@ > NUL
"$(WINDIR)\Fonts\ZRCola_Bd.otf" : "$(OUTPUT_DIR)\ZRCola_Bd.otf"
copy /y $** $@ > NUL
"$(WINDIR)\Fonts\ZRCola_BI.otf" : "$(OUTPUT_DIR)\ZRCola_BI.otf"
copy /y $** $@ > NUL
######################################################################
# Shortcut creation
######################################################################
"$(PROGRAMDATA)\Microsoft\Windows\Start Menu\Programs\ZRCola\ZRCola.lnk" : "$(OUTPUT_DIR)\$(PLAT).Debug\ZRCola.exe"
cscript.exe "bin\MkLnk.wsf" //Nologo $@ "$(MAKEDIR)\$(OUTPUT_DIR)\$(PLAT).Debug\ZRCola.exe"
######################################################################
# Building
######################################################################
"$(PUBLISH_DIR)\catalog-0000.xml" : "$(OUTPUT_DIR)\catalog.xml"
if exist $@ del /f /q $@
"$(OUTPUT_DIR)\$(PLAT).Release\UpdSignXML.exe" $** $@
"$(OUTPUT_DIR)\catalog.xml" : \
# "$(OUTPUT_DIR)\ZRColaDe32.msi" \
# "$(OUTPUT_DIR)\ZRColaDe64.msi" \
"$(OUTPUT_DIR)\ZRColaEn32.msi" \
"$(OUTPUT_DIR)\ZRColaEn64.msi" \
"$(OUTPUT_DIR)\ZRColaRu32.msi" \
"$(OUTPUT_DIR)\ZRColaRu64.msi" \
"$(OUTPUT_DIR)\ZRColaSl32.msi" \
"$(OUTPUT_DIR)\ZRColaSl64.msi"
-if exist $@ del /f /q $@
-if exist "$(@:"=).tmp" del /f /q "$(@:"=).tmp"
copy /y "$(PUBLISH_DIR)\catalog-0000.xml" "$(@:"=).tmp" > NUL
# "$(OUTPUT_DIR)\$(PLAT).Release\UpdPublish.exe" "$(@:"=).tmp" "$(@:"=).tmp" win-x86 de_DE "$(PUBLISH_PACKAGE_URL)/ZRColaDe32.msi" -f "$(OUTPUT_DIR)\ZRColaDe32.msi"
# "$(OUTPUT_DIR)\$(PLAT).Release\UpdPublish.exe" "$(@:"=).tmp" "$(@:"=).tmp" win-amd64 de_DE "$(PUBLISH_PACKAGE_URL)/ZRColaDe64.msi" -f "$(OUTPUT_DIR)\ZRColaDe64.msi"
"$(OUTPUT_DIR)\$(PLAT).Release\UpdPublish.exe" "$(@:"=).tmp" "$(@:"=).tmp" win-x86 en_US "$(PUBLISH_PACKAGE_URL)/ZRColaEn32.msi" -f "$(OUTPUT_DIR)\ZRColaEn32.msi"
"$(OUTPUT_DIR)\$(PLAT).Release\UpdPublish.exe" "$(@:"=).tmp" "$(@:"=).tmp" win-amd64 en_US "$(PUBLISH_PACKAGE_URL)/ZRColaEn64.msi" -f "$(OUTPUT_DIR)\ZRColaEn64.msi"
"$(OUTPUT_DIR)\$(PLAT).Release\UpdPublish.exe" "$(@:"=).tmp" "$(@:"=).tmp" win-x86 ru_RU "$(PUBLISH_PACKAGE_URL)/ZRColaRu32.msi" -f "$(OUTPUT_DIR)\ZRColaRu32.msi"
"$(OUTPUT_DIR)\$(PLAT).Release\UpdPublish.exe" "$(@:"=).tmp" "$(@:"=).tmp" win-amd64 ru_RU "$(PUBLISH_PACKAGE_URL)/ZRColaRu64.msi" -f "$(OUTPUT_DIR)\ZRColaRu64.msi"
"$(OUTPUT_DIR)\$(PLAT).Release\UpdPublish.exe" "$(@:"=).tmp" "$(@:"=).tmp" win-x86 sl_SI "$(PUBLISH_PACKAGE_URL)/ZRColaSl32.msi" -f "$(OUTPUT_DIR)\ZRColaSl32.msi"
"$(OUTPUT_DIR)\$(PLAT).Release\UpdPublish.exe" "$(@:"=).tmp" "$(@:"=).tmp" win-amd64 sl_SI "$(PUBLISH_PACKAGE_URL)/ZRColaSl64.msi" -f "$(OUTPUT_DIR)\ZRColaSl64.msi"
move /y "$(@:"=).tmp" $@ > NUL
!ENDIF
######################################################################
# Platform Specific
######################################################################
PLAT=Win32
PLAT_SUFFIX=32
PLAT_SLN=x86
!INCLUDE "MakefilePlat.mak"
PLAT=x64
PLAT_SUFFIX=64
PLAT_SLN=x64
!INCLUDE "MakefilePlat.mak"
######################################################################
# Language Specific
######################################################################
#LANG=de_DE
#LANG_BASE=de
#LANG_SUFFIX=De
#!INCLUDE "MakefileLang.mak"
LANG=en_US
LANG_BASE=en
LANG_SUFFIX=En
!INCLUDE "MakefileLang.mak"
LANG=ru_RU
LANG_BASE=ru
LANG_SUFFIX=Ru
!INCLUDE "MakefileLang.mak"
LANG=sl_SI
LANG_BASE=sl
LANG_SUFFIX=Sl
!INCLUDE "MakefileLang.mak"

BIN
MakefileLang.mak Normal file

Binary file not shown.

BIN
MakefileLangPlatCfg.mak Normal file

Binary file not shown.

BIN
MakefilePlat.mak Normal file

Binary file not shown.

66
MakefilePlatCfg.mak Normal file
View File

@@ -0,0 +1,66 @@
#
# Copyright 1991-2019 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/>.
#
All ::
Clean ::
msbuild.exe $(MSBUILDFLAGS) "ZRCola.sln" /t:Clean /p:Configuration=$(CFG) /p:Platform=$(PLAT_SLN)
!IF "$(PLAT)" == "Win32"
msbuild.exe $(MSBUILDFLAGS) "ZRColaUtils.sln" /t:Clean /p:Configuration=$(CFG) /p:Platform=$(PLAT_SLN)
!ENDIF
msbuild.exe $(MSBUILDFLAGS) "MSI\MSICA\MSICA.sln" /t:Clean /p:Configuration=$(CFG) /p:Platform=$(PLAT_SLN)
msbuild.exe $(MSBUILDFLAGS) "Updater\Updater.sln" /t:Clean /p:Configuration=$(CFG) /p:Platform=$(PLAT_SLN)
-if exist "$(OUTPUT_DIR)\ZRCola$(PLAT_SUFFIX)$(CFG_SUFFIX).ddf" del /f /q "$(OUTPUT_DIR)\ZRCola$(PLAT_SUFFIX)$(CFG_SUFFIX).ddf"
-if exist "$(OUTPUT_DIR)\ZRCola$(PLAT_SUFFIX)$(CFG_SUFFIX).cab" del /f /q "$(OUTPUT_DIR)\ZRCola$(PLAT_SUFFIX)$(CFG_SUFFIX).cab"
-if exist "$(OUTPUT_DIR)\ZRCola$(PLAT_SUFFIX)$(CFG_SUFFIX).inf" del /f /q "$(OUTPUT_DIR)\ZRCola$(PLAT_SUFFIX)$(CFG_SUFFIX).inf"
-if exist "$(OUTPUT_DIR)\ZRCola$(PLAT_SUFFIX)$(CFG_SUFFIX).rpt" del /f /q "$(OUTPUT_DIR)\ZRCola$(PLAT_SUFFIX)$(CFG_SUFFIX).rpt"
!IFDEF HAS_VERSION
######################################################################
# 2nd Phase
# - The version is known, do the rest.
######################################################################
######################################################################
# Building
######################################################################
"$(OUTPUT_DIR)\$(PLAT).$(CFG)\ZRCola.exe" :: Localization
"$(OUTPUT_DIR)\$(PLAT).$(CFG)\ZRCola.exe" ::
msbuild.exe $(MSBUILDFLAGS) "ZRCola.sln" /t:Build /p:Configuration=$(CFG) /p:Platform=$(PLAT_SLN)
"$(OUTPUT_DIR)\ZRCola$(PLAT_SUFFIX)$(CFG_SUFFIX).ddf" : \
# "$(OUTPUT_DIR)\ZRCola.de_DE.$(PLAT_SUFFIX)$(CFG_SUFFIX).2.msi" \
"$(OUTPUT_DIR)\ZRCola.en_US.$(PLAT_SUFFIX)$(CFG_SUFFIX).2.msi" \
"$(OUTPUT_DIR)\ZRCola.ru_RU.$(PLAT_SUFFIX)$(CFG_SUFFIX).2.msi" \
"$(OUTPUT_DIR)\ZRCola.sl_SI.$(PLAT_SUFFIX)$(CFG_SUFFIX).2.msi"
-if exist $@ del /f /q $@
-if exist "$(@:"=).tmp" del /f /q "$(@:"=).tmp"
cscript.exe "MSI\MSIBuild\MSI.wsf" //Job:MakeDDF //Nologo "$(@:"=).tmp" $** /O:"$(OUTPUT_DIR)\ZRCola$(PLAT_SUFFIX)$(CFG_SUFFIX)" /C:LZX
move /y "$(@:"=).tmp" $@ > NUL
"$(OUTPUT_DIR)\ZRCola$(PLAT_SUFFIX)$(CFG_SUFFIX).cab" \
"$(OUTPUT_DIR)\ZRCola$(PLAT_SUFFIX)$(CFG_SUFFIX).inf" \
"$(OUTPUT_DIR)\ZRCola$(PLAT_SUFFIX)$(CFG_SUFFIX).rpt" : "$(OUTPUT_DIR)\ZRCola$(PLAT_SUFFIX)$(CFG_SUFFIX).ddf"
makecab.exe /F $**
!ENDIF

View File

@@ -1 +1,65 @@
# ZRCola
# ZRCola
A Microsoft Windows application for composing texts using a wide range of Slavic (and general) letters from or beyond Unicode.
## Project Website
http://zrcola.zrc-sazu.si/en/
## Binaries for Download
https://www.amebis.si/prenos/ZRCola/
## Building
### Building Environment Requirements
- Microsoft Windows Vista or later
- Microsoft Visual Studio 2017
- _sed.exe_ and _grep.exe_
- Command line utilities from Microsoft Windows SDK Bin folder: distributed with Visual Studio, add Bin folder to path manually.
- Additional command line utilities from project's bin folder: add bin folder to path. The source code is provided on request.
### wxWidgets
ZRCola is using wxWidgets static libraries. You have to compile static libraries yourself.
#### Compiling wxWidgets x86 static libraries
1. Start _x86 Native Tools Command Prompt for VS 2017_
2. Change working folder to `build\msw`
3. Run: `nmake /f makefile.vc /ls RUNTIME_LIBS=static SHARED=0 COMPILER_VERSION=141`
4. Run: `nmake /f makefile.vc /ls RUNTIME_LIBS=static SHARED=0 COMPILER_VERSION=141 BUILD=release`
#### Compiling wxWidgets x64 static libraries
1. Start _x64 Native Tools Command Prompt for VS 2017_
2. Change working folder to `build\msw`
3. Run: `nmake /f makefile.vc /ls RUNTIME_LIBS=static SHARED=0 COMPILER_VERSION=141 TARGET_CPU=X64`
4. Run: `nmake /f makefile.vc /ls RUNTIME_LIBS=static SHARED=0 COMPILER_VERSION=141 TARGET_CPU=X64 BUILD=release`
#### Specifying wxWidgets path
ZRCola compilation references wxWidgets libraries using `WXWIN` environment variable. Please set it to wxWidgets folder (i.e. `C:\SDK\wxWidgets`).
### Digital Signing of Build Outputs
In order to have the build process digitally sign output files, one should provide the following:
1. A signing certificate installed in the current user's certificate store.
2. The following variables in the environment:
- `ManifestCertificateThumbprint` - set the value to certificate's SHA1 thumbprint (hexadecimal, without spaces, i.e. `bc0d8da45f9eeefcbe4e334e1fc262804df88d7e`).
- `ManifestTimestampUrl` - set the value to URL used to perform timestamp signature (i.e. `http://timestamp.verisign.com/scripts/timstamp.dll`). In order to perform timestamp signing successfully, the computer running the build should be online and able to access this URL.
Please note that only Release builds are configured for timestamp signing. Debug configurations do not attempt to timestamp sign the resulting DLL and EXE files in order to speed up the building process and enable offline building.
### Building
Use Microsoft NMAKE to build the project. The resulting files can be found in output subfolder. Open _x64 Native Tools Command Prompt for VS 2017_ for building.
- `nmake Clean` Delete all intermediate and output files.
- `nmake Setup` Build a release version of project and release MSI setup files.
- `nmake SetupDebug` Build a debug version of project and debug MSI setup files.
- `nmake Register` Build a debug version of project, install fonts (reboot required), and Start Menu shortcuts. For development purposes only!
- `nmake Unregister` Remove Start Menu shortcuts, and fonts. For development purposes only!
The `/ls` flag can be appended to the commands above to reduce NMAKE's verbosity. You can combine multiple targets (i.e. nmake Unregister Clean). Please, see NMAKE reference for further reading.
## Translating ZRCola
Instructions how to translate ZRCola to your language can be found [here](LOCALIZATION.md).
## Contact Information
Please contact the following addressee for further information and help:
- ZRC SAZU, ZRCola@zrc-sazu.si
- Amebis, info@amebis.si

1
Updater Submodule

Submodule Updater added at 5ae6dd56c2

View File

@@ -1,57 +1,136 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28010.2016
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZRCola", "ZRCola\ZRCola.vcxproj", "{CD9E4170-92DD-440E-980C-D15F62032249}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{6D85AD6A-69D6-40EB-BF0C-7495479DDCE5}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxExtend", "lib\wxExtend\build\wxExtend.vcxproj", "{A3A36689-AC35-4026-93DA-A3BA0C0E767C}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxExtend", "lib\wxExtend\build\wxExtendLib-16.0.vcxproj", "{D3E29951-D9F5-486D-A167-20AE8E90B1FA}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{CFEBC17E-C840-4507-BDE6-1EF5B52DDCC5}"
ProjectSection(SolutionItems) = preProject
include\zrcola.h = include\zrcola.h
include\version.h = include\version.h
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libZRCola", "lib\libZRCola\build\libZRCola.vcxproj", "{3C61929E-7289-4101-8D0A-DA22D6E1AEA8}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libZRColaUI", "lib\libZRColaUI\build\libZRColaUI.vcxproj", "{C0A84BD2-3870-4CD6-B281-0AB322E3C579}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stdex", "lib\stdex\build\stdex-16.0.vcxproj", "{518777CC-0A59-4415-A12A-82751ED75343}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Updater", "Updater\Updater\build\Updater.vcxproj", "{990D8CF9-4457-4DC0-AA18-4968EF434741}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinStd", "lib\WinStd\build\WinStd-16.0.vcxproj", "{47399D91-7EB9-41DE-B521-514BA5DB0C43}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64
Release|Win32 = Release|Win32
Debug|x86 = Debug|x86
Release|ARM64 = Release|ARM64
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{CD9E4170-92DD-440E-980C-D15F62032249}.Debug|Win32.ActiveCfg = Debug|Win32
{CD9E4170-92DD-440E-980C-D15F62032249}.Debug|Win32.Build.0 = Debug|Win32
{CD9E4170-92DD-440E-980C-D15F62032249}.Debug|ARM64.ActiveCfg = Debug|ARM64
{CD9E4170-92DD-440E-980C-D15F62032249}.Debug|ARM64.Build.0 = Debug|ARM64
{CD9E4170-92DD-440E-980C-D15F62032249}.Debug|x64.ActiveCfg = Debug|x64
{CD9E4170-92DD-440E-980C-D15F62032249}.Debug|x64.Build.0 = Debug|x64
{CD9E4170-92DD-440E-980C-D15F62032249}.Release|Win32.ActiveCfg = Release|Win32
{CD9E4170-92DD-440E-980C-D15F62032249}.Release|Win32.Build.0 = Release|Win32
{CD9E4170-92DD-440E-980C-D15F62032249}.Debug|x86.ActiveCfg = Debug|Win32
{CD9E4170-92DD-440E-980C-D15F62032249}.Debug|x86.Build.0 = Debug|Win32
{CD9E4170-92DD-440E-980C-D15F62032249}.Release|ARM64.ActiveCfg = Release|ARM64
{CD9E4170-92DD-440E-980C-D15F62032249}.Release|ARM64.Build.0 = Release|ARM64
{CD9E4170-92DD-440E-980C-D15F62032249}.Release|x64.ActiveCfg = Release|x64
{CD9E4170-92DD-440E-980C-D15F62032249}.Release|x64.Build.0 = Release|x64
{A3A36689-AC35-4026-93DA-A3BA0C0E767C}.Debug|Win32.ActiveCfg = Debug|Win32
{A3A36689-AC35-4026-93DA-A3BA0C0E767C}.Debug|Win32.Build.0 = Debug|Win32
{A3A36689-AC35-4026-93DA-A3BA0C0E767C}.Debug|x64.ActiveCfg = Debug|x64
{A3A36689-AC35-4026-93DA-A3BA0C0E767C}.Debug|x64.Build.0 = Debug|x64
{A3A36689-AC35-4026-93DA-A3BA0C0E767C}.Release|Win32.ActiveCfg = Release|Win32
{A3A36689-AC35-4026-93DA-A3BA0C0E767C}.Release|Win32.Build.0 = Release|Win32
{A3A36689-AC35-4026-93DA-A3BA0C0E767C}.Release|x64.ActiveCfg = Release|x64
{A3A36689-AC35-4026-93DA-A3BA0C0E767C}.Release|x64.Build.0 = Release|x64
{3C61929E-7289-4101-8D0A-DA22D6E1AEA8}.Debug|Win32.ActiveCfg = Debug|Win32
{3C61929E-7289-4101-8D0A-DA22D6E1AEA8}.Debug|Win32.Build.0 = Debug|Win32
{CD9E4170-92DD-440E-980C-D15F62032249}.Release|x86.ActiveCfg = Release|Win32
{CD9E4170-92DD-440E-980C-D15F62032249}.Release|x86.Build.0 = Release|Win32
{D3E29951-D9F5-486D-A167-20AE8E90B1FA}.Debug|ARM64.ActiveCfg = Debug|ARM64
{D3E29951-D9F5-486D-A167-20AE8E90B1FA}.Debug|ARM64.Build.0 = Debug|ARM64
{D3E29951-D9F5-486D-A167-20AE8E90B1FA}.Debug|x64.ActiveCfg = Debug|x64
{D3E29951-D9F5-486D-A167-20AE8E90B1FA}.Debug|x64.Build.0 = Debug|x64
{D3E29951-D9F5-486D-A167-20AE8E90B1FA}.Debug|x86.ActiveCfg = Debug|Win32
{D3E29951-D9F5-486D-A167-20AE8E90B1FA}.Debug|x86.Build.0 = Debug|Win32
{D3E29951-D9F5-486D-A167-20AE8E90B1FA}.Release|ARM64.ActiveCfg = Release|ARM64
{D3E29951-D9F5-486D-A167-20AE8E90B1FA}.Release|ARM64.Build.0 = Release|ARM64
{D3E29951-D9F5-486D-A167-20AE8E90B1FA}.Release|x64.ActiveCfg = Release|x64
{D3E29951-D9F5-486D-A167-20AE8E90B1FA}.Release|x64.Build.0 = Release|x64
{D3E29951-D9F5-486D-A167-20AE8E90B1FA}.Release|x86.ActiveCfg = Release|Win32
{D3E29951-D9F5-486D-A167-20AE8E90B1FA}.Release|x86.Build.0 = Release|Win32
{3C61929E-7289-4101-8D0A-DA22D6E1AEA8}.Debug|ARM64.ActiveCfg = Debug|ARM64
{3C61929E-7289-4101-8D0A-DA22D6E1AEA8}.Debug|ARM64.Build.0 = Debug|ARM64
{3C61929E-7289-4101-8D0A-DA22D6E1AEA8}.Debug|x64.ActiveCfg = Debug|x64
{3C61929E-7289-4101-8D0A-DA22D6E1AEA8}.Debug|x64.Build.0 = Debug|x64
{3C61929E-7289-4101-8D0A-DA22D6E1AEA8}.Release|Win32.ActiveCfg = Release|Win32
{3C61929E-7289-4101-8D0A-DA22D6E1AEA8}.Release|Win32.Build.0 = Release|Win32
{3C61929E-7289-4101-8D0A-DA22D6E1AEA8}.Debug|x86.ActiveCfg = Debug|Win32
{3C61929E-7289-4101-8D0A-DA22D6E1AEA8}.Debug|x86.Build.0 = Debug|Win32
{3C61929E-7289-4101-8D0A-DA22D6E1AEA8}.Release|ARM64.ActiveCfg = Release|ARM64
{3C61929E-7289-4101-8D0A-DA22D6E1AEA8}.Release|ARM64.Build.0 = Release|ARM64
{3C61929E-7289-4101-8D0A-DA22D6E1AEA8}.Release|x64.ActiveCfg = Release|x64
{3C61929E-7289-4101-8D0A-DA22D6E1AEA8}.Release|x64.Build.0 = Release|x64
{3C61929E-7289-4101-8D0A-DA22D6E1AEA8}.Release|x86.ActiveCfg = Release|Win32
{3C61929E-7289-4101-8D0A-DA22D6E1AEA8}.Release|x86.Build.0 = Release|Win32
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Debug|ARM64.ActiveCfg = Debug|ARM64
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Debug|ARM64.Build.0 = Debug|ARM64
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Debug|x64.ActiveCfg = Debug|x64
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Debug|x64.Build.0 = Debug|x64
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Debug|x86.ActiveCfg = Debug|Win32
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Debug|x86.Build.0 = Debug|Win32
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Release|ARM64.ActiveCfg = Release|ARM64
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Release|ARM64.Build.0 = Release|ARM64
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Release|x64.ActiveCfg = Release|x64
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Release|x64.Build.0 = Release|x64
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Release|x86.ActiveCfg = Release|Win32
{C0A84BD2-3870-4CD6-B281-0AB322E3C579}.Release|x86.Build.0 = Release|Win32
{518777CC-0A59-4415-A12A-82751ED75343}.Debug|ARM64.ActiveCfg = Debug|ARM64
{518777CC-0A59-4415-A12A-82751ED75343}.Debug|ARM64.Build.0 = Debug|ARM64
{518777CC-0A59-4415-A12A-82751ED75343}.Debug|x64.ActiveCfg = Debug|x64
{518777CC-0A59-4415-A12A-82751ED75343}.Debug|x64.Build.0 = Debug|x64
{518777CC-0A59-4415-A12A-82751ED75343}.Debug|x86.ActiveCfg = Debug|Win32
{518777CC-0A59-4415-A12A-82751ED75343}.Debug|x86.Build.0 = Debug|Win32
{518777CC-0A59-4415-A12A-82751ED75343}.Release|ARM64.ActiveCfg = Release|ARM64
{518777CC-0A59-4415-A12A-82751ED75343}.Release|ARM64.Build.0 = Release|ARM64
{518777CC-0A59-4415-A12A-82751ED75343}.Release|x64.ActiveCfg = Release|x64
{518777CC-0A59-4415-A12A-82751ED75343}.Release|x64.Build.0 = Release|x64
{518777CC-0A59-4415-A12A-82751ED75343}.Release|x86.ActiveCfg = Release|Win32
{518777CC-0A59-4415-A12A-82751ED75343}.Release|x86.Build.0 = Release|Win32
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Debug|ARM64.ActiveCfg = Debug|ARM64
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Debug|ARM64.Build.0 = Debug|ARM64
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Debug|x64.ActiveCfg = Debug|x64
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Debug|x64.Build.0 = Debug|x64
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Debug|x86.ActiveCfg = Debug|Win32
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Debug|x86.Build.0 = Debug|Win32
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Release|ARM64.ActiveCfg = Release|ARM64
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Release|ARM64.Build.0 = Release|ARM64
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Release|x64.ActiveCfg = Release|x64
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Release|x64.Build.0 = Release|x64
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Release|x86.ActiveCfg = Release|Win32
{990D8CF9-4457-4DC0-AA18-4968EF434741}.Release|x86.Build.0 = Release|Win32
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Debug|ARM64.ActiveCfg = Debug|ARM64
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Debug|ARM64.Build.0 = Debug|ARM64
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Debug|x64.ActiveCfg = Debug|x64
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Debug|x64.Build.0 = Debug|x64
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Debug|x86.ActiveCfg = Debug|Win32
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Debug|x86.Build.0 = Debug|Win32
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Release|ARM64.ActiveCfg = Release|ARM64
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Release|ARM64.Build.0 = Release|ARM64
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Release|x64.ActiveCfg = Release|x64
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Release|x64.Build.0 = Release|x64
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Release|x86.ActiveCfg = Release|Win32
{47399D91-7EB9-41DE-B521-514BA5DB0C43}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{A3A36689-AC35-4026-93DA-A3BA0C0E767C} = {6D85AD6A-69D6-40EB-BF0C-7495479DDCE5}
{D3E29951-D9F5-486D-A167-20AE8E90B1FA} = {6D85AD6A-69D6-40EB-BF0C-7495479DDCE5}
{3C61929E-7289-4101-8D0A-DA22D6E1AEA8} = {6D85AD6A-69D6-40EB-BF0C-7495479DDCE5}
{C0A84BD2-3870-4CD6-B281-0AB322E3C579} = {6D85AD6A-69D6-40EB-BF0C-7495479DDCE5}
{518777CC-0A59-4415-A12A-82751ED75343} = {6D85AD6A-69D6-40EB-BF0C-7495479DDCE5}
{990D8CF9-4457-4DC0-AA18-4968EF434741} = {6D85AD6A-69D6-40EB-BF0C-7495479DDCE5}
{47399D91-7EB9-41DE-B521-514BA5DB0C43} = {6D85AD6A-69D6-40EB-BF0C-7495479DDCE5}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {EECB5329-0607-4D77-8BC0-48BD8C08BEF9}
EndGlobalSection
EndGlobal

9
ZRCola/MSIBuild/.gitignore vendored Normal file
View File

@@ -0,0 +1,9 @@
/*-1.idt
/*-2.idt
/*-2.idtx
/*.Binary-1
/*.Binary-2
/*.Icon-1
/*.Icon-2
/*.lst
/*.msm

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

340
ZRCola/MSIBuild/Makefile Normal file
View File

@@ -0,0 +1,340 @@
#
# Copyright 1991-2019 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 "..\..\include\MSIBuildCfg.mak"
!IFNDEF MSIBUILD_LANGID
!ERROR Parameter MSIBUILD_LANGID is undefined.
!ENDIF
MSIBUILD_IS_LOCALIZEABLE=1
######################################################################
# AppSearch
All :: "$(LANG).$(PLAT).$(CFG).AppSearch-1.idt"
"$(LANG).$(PLAT).$(CFG).AppSearch-1.idt" : "Makefile" "..\..\include\MSIBuildCfg.mak"
-if exist $@ del /f /q $@
move /y << $@ > NUL
Property Signature_
s$(MSIBUILD_LENGTH_ID) s$(MSIBUILD_LENGTH_ID)
AppSearch Property Signature_
OLDZRCOLADIR clZRCola.exe.$(PLAT)
<<NOKEEP
######################################################################
# Binary
All :: \
"$(LANG).$(PLAT).$(CFG).Binary-1.idt" \
"$(LANG).$(PLAT).$(CFG).Binary-1\tutorial1.bmp" \
"$(LANG).$(PLAT).$(CFG).Binary-1\tutorial2.bmp" \
"$(LANG).$(PLAT).$(CFG).Binary-1\tutorial3.bmp"
"$(LANG).$(PLAT).$(CFG).Binary-1.idt" : "Makefile" "..\..\include\MSIBuildCfg.mak" "$(LANG).$(PLAT).$(CFG).Binary-1"
-if exist $@ del /f /q $@
move /y << $@ > NUL
Name Data
s$(MSIBUILD_LENGTH_ID) v0
Binary Name
bintutorial1.bmp tutorial1.bmp
bintutorial2.bmp tutorial2.bmp
bintutorial3.bmp tutorial3.bmp
<<NOKEEP
"$(LANG).$(PLAT).$(CFG).Binary-1\tutorial1.bmp" : "Binary\tutorial1.bmp"
copy /y $** $@ > NUL
"$(LANG).$(PLAT).$(CFG).Binary-1\tutorial2.bmp" : "Binary\tutorial2.bmp"
copy /y $** $@ > NUL
"$(LANG).$(PLAT).$(CFG).Binary-1\tutorial3.bmp" : "Binary\tutorial3.bmp"
copy /y $** $@ > NUL
######################################################################
# CompLocator
All :: "$(LANG).$(PLAT).$(CFG).CompLocator-1.idt"
"$(LANG).$(PLAT).$(CFG).CompLocator-1.idt" : "Makefile" "..\..\include\MSIBuildCfg.mak"
-if exist $@ del /f /q $@
move /y << $@ > NUL
Signature_ ComponentId Type
s$(MSIBUILD_LENGTH_ID) s38 I2
CompLocator Signature_
!IF "$(PLAT)" == "Win32"
clZRCola.exe.Win32 {F30B6545-6203-4B7D-8575-85245A0F90E5} 1
!ENDIF
!IF "$(PLAT)" == "x64"
clZRCola.exe.x64 {D45B105D-2303-459A-AF4B-52AC3AAD5510} 1
!ENDIF
<<NOKEEP
######################################################################
# Component
All :: "$(LANG).$(PLAT).$(CFG).Component-1.idt"
"$(LANG).$(PLAT).$(CFG).Component-1.idt" : "Makefile" "..\..\include\MSIBuildCfg.mak"
-if exist $@ del /f /q $@
move /y << $@ > NUL
Component ComponentId Directory_ Attributes Condition KeyPath
s$(MSIBUILD_LENGTH_ID) S38 s$(MSIBUILD_LENGTH_ID) i2 S255 S$(MSIBUILD_LENGTH_ID)
Component Component
!IF "$(PLAT)" == "Win32"
compZRCola.exe.Win32 {F30B6545-6203-4B7D-8575-85245A0F90E5} ZRCOLABINDIR 0 fileZRCola.exe.Win32
!ENDIF
!IF "$(PLAT)" == "x64"
compZRCola.exe.x64 {D45B105D-2303-459A-AF4B-52AC3AAD5510} ZRCOLABINDIR 256 fileZRCola.exe.x64
!ENDIF
!IF "$(LANG)" == "ru_RU"
compZRCola.mo.ru_RU {DEA5D11C-2B0E-4B85-ACE3-D76334866F50} ZRCOLALOCRURUDIR $(MSIBUILD_COMPONENT_ATTRIB_FILE) fileZRCola.mo.ru_RU
!ENDIF
!IF "$(LANG)" == "sl_SI"
compZRCola.mo.sl_SI {7FF95C71-D8DE-4D2B-A26D-FEB5A1F54D63} ZRCOLALOCSLSIDIR $(MSIBUILD_COMPONENT_ATTRIB_FILE) fileZRCola.mo.sl_SI
!ENDIF
<<NOKEEP
######################################################################
# Control
All :: "$(LANG).$(PLAT).$(CFG).Control-2.idt"
"en_US.$(PLAT).$(CFG).Control-2.idtx" : "Makefile" "..\..\include\MSIBuildCfg.mak"
-if exist $@ del /f /q $@
move /y << $@ > NUL
Dialog_ Control Type X Y Width Height Attributes Property Text Control_Next Help
s$(MSIBUILD_LENGTH_ID) s50 s20 i2 i2 i2 i2 I4 S50 L0 S50 L$(MSIBUILD_LENGTH_HELP)
1252 Control Dialog_ Control
dlgTutorial1 ctlBannerBitmap Bitmap 0 0 400 45 1 binUIHeader.bmp ctlTitle
dlgTutorial1 ctlTitle Text 15 15 320 15 196611 [DlgTitleFont][SimpleProductName] Tutorial : Starting ctlScreenshot
dlgTutorial1 ctlScreenshot Bitmap 154 60 92 54 5 bintutorial1.bmp ctlText1
dlgTutorial1 ctlText1 Text 15 119 370 24 196611 When configured, ZRCola starts at system startup and runs in the background. If needed, it can be brought up by pressing the combination Win+F5. ctlText2
dlgTutorial1 ctlText2 Text 15 148 370 36 196611 IMPORTANT: Upon pressing the combination Win+F5 the program memorises the location of the cursor in the text. If ZRCola is brought to the foreground without using the aforementioned combination of keys, the program won't know where to insert the special characters! ctlContinue
dlgTutorial1 ctlContinue PushButton 325 265 60 20 3 &Continue ctlBannerBitmap
dlgTutorial2 ctlBannerBitmap Bitmap 0 0 400 45 1 binUIHeader.bmp ctlTitle
dlgTutorial2 ctlTitle Text 15 15 320 15 196611 [DlgTitleFont][SimpleProductName] Tutorial : Composition ctlScreenshot
dlgTutorial2 ctlScreenshot Bitmap 81 60 238 137 5 bintutorial2.bmp ctlText1
dlgTutorial2 ctlText1 Text 15 202 370 36 196611 The string of basic and substitute characters is entered into the upper input window of the program. In the window below the resulted special characters are displayed. To insert them in the text, the F5 key is used. ctlContinue
dlgTutorial2 ctlContinue PushButton 325 265 60 20 3 &Continue ctlBannerBitmap
dlgTutorial3 ctlBannerBitmap Bitmap 0 0 400 45 1 binUIHeader.bmp ctlTitle
dlgTutorial3 ctlTitle Text 15 15 320 15 196611 [DlgTitleFont][SimpleProductName] Tutorial : Entering Characters ctlScreenshot
dlgTutorial3 ctlScreenshot Bitmap 147 60 106 112 5 bintutorial3.bmp ctlText1
dlgTutorial3 ctlText1 Text 15 177 370 24 196611 Characters can be entered using keyboard shortcuts, the character catalogue (F4) or the character finding tool (F8). ctlContinue
dlgTutorial3 ctlContinue PushButton 325 265 60 20 3 &Continue ctlBannerBitmap
<<NOKEEP
!IF "$(LANG)" == "en_US"
"en_US.$(PLAT).$(CFG).Control-2.idt" : "en_US.$(PLAT).$(CFG).Control-2.idtx"
copy /y $** $@ > NUL
!ELSE
"$(LANG).$(PLAT).$(CFG).Control-2.idt" : "en_US.$(PLAT).$(CFG).Control-2.idtx" "..\locale\$(LANG).po"
cscript.exe "..\..\MSI\MSIBuild\MSI.wsf" //Job:IDTTranslate //Nologo $@ $** /CP:$(MSIBUILD_CODEPAGE)
!ENDIF
######################################################################
# ControlEvent
All :: "$(LANG).$(PLAT).$(CFG).ControlEvent-1.idt"
"$(LANG).$(PLAT).$(CFG).ControlEvent-1.idt" : "Makefile" "..\..\include\MSIBuildCfg.mak"
-if exist $@ del /f /q $@
move /y << $@ > NUL
Dialog_ Control_ Event Argument Condition Ordering
s$(MSIBUILD_LENGTH_ID) s50 s50 s255 S255 I2
ControlEvent Dialog_ Control_ Event Argument Condition
dlgTutorial1 ctlContinue EndDialog Return 1 1000
dlgTutorial2 ctlContinue EndDialog Return 1 1000
dlgTutorial3 ctlContinue EndDialog Return 1 1000
<<NOKEEP
######################################################################
# Dialog
All :: "$(LANG).$(PLAT).$(CFG).Dialog-1.idt"
"$(LANG).$(PLAT).$(CFG).Dialog-1.idt" : "Makefile" "..\..\include\MSIBuildCfg.mak"
-if exist $@ del /f /q $@
move /y << $@ > NUL
Dialog HCentering VCentering Width Height Attributes Title Control_First Control_Default Control_Cancel
s$(MSIBUILD_LENGTH_ID) i2 i2 i2 i2 I4 L128 s50 S50 S50
Dialog Dialog
dlgTutorial1 50 50 400 300 3 [Setup] [SimpleProductName] [DisplayVersion] ctlTitle ctlContinue ctlContinue
dlgTutorial2 50 50 400 300 3 [Setup] [SimpleProductName] [DisplayVersion] ctlTitle ctlContinue ctlContinue
dlgTutorial3 50 50 400 300 3 [Setup] [SimpleProductName] [DisplayVersion] ctlTitle ctlContinue ctlContinue
<<NOKEEP
######################################################################
# InstallUISequence
All :: "$(LANG).$(PLAT).$(CFG).InstallUISequence-1.idt"
"$(LANG).$(PLAT).$(CFG).InstallUISequence-1.idt" : "Makefile" "..\..\include\MSIBuildCfg.mak"
-if exist $@ del /f /q $@
move /y << $@ > NUL
Action Condition Sequence
s$(MSIBUILD_LENGTH_ID) S255 I2
InstallUISequence Action
dlgTutorial1 NOT Installed AND &featZRCola>=3 1400
dlgTutorial2 NOT Installed AND &featZRCola>=3 1401
dlgTutorial3 NOT Installed AND &featZRCola>=3 1402
<<NOKEEP
######################################################################
# Feature
All :: "$(LANG).$(PLAT).$(CFG).Feature-2.idt"
"en_US.$(PLAT).$(CFG).Feature-2.idtx" : "Makefile" "..\..\include\MSIBuildCfg.mak"
-if exist $@ del /f /q $@
move /y << $@ > NUL
Feature Feature_Parent Title Description Display Level Directory_ Attributes
s$(MSIBUILD_LENGTH_ID) S$(MSIBUILD_LENGTH_ID) L64 L255 I2 i2 S$(MSIBUILD_LENGTH_ID) i2
1252 Feature Feature
featZRCola ZRCola Input system for linguistic use 1 1 ZRCOLADIR 8
<<NOKEEP
!IF "$(LANG)" == "en_US"
"en_US.$(PLAT).$(CFG).Feature-2.idt" : "en_US.$(PLAT).$(CFG).Feature-2.idtx"
copy /y $** $@ > NUL
!ELSE
"$(LANG).$(PLAT).$(CFG).Feature-2.idt" : "en_US.$(PLAT).$(CFG).Feature-2.idtx" "..\locale\$(LANG).po"
cscript.exe "..\..\MSI\MSIBuild\MSI.wsf" //Job:IDTTranslate //Nologo $@ $** /CP:$(MSIBUILD_CODEPAGE)
!ENDIF
######################################################################
# FeatureComponents
All :: "$(LANG).$(PLAT).$(CFG).FeatureComponents-1.idt"
"$(LANG).$(PLAT).$(CFG).FeatureComponents-1.idt" : "Makefile" "..\..\include\MSIBuildCfg.mak"
-if exist $@ del /f /q $@
move /y << $@ > NUL
Feature_ Component_
s$(MSIBUILD_LENGTH_ID) s$(MSIBUILD_LENGTH_ID)
FeatureComponents Feature_ Component_
featZRCola compZRCola.exe.$(PLAT)
featZRCola compLocalizationRepositoryPath
featZRCola compLanguage
featZRCola compDatabasePath
featZRCola compZRCola.zrcdb
featZRCola compZRCola_Re.otf
!IF "$(LANG)" != "en_US"
featZRCola compZRCola.mo.$(LANG)
featZRCola compZRCola.zrcdb.mo.$(LANG)
featZRCola complibZRColaUI.mo.$(LANG)
featZRCola compwxExtend.mo.$(LANG)
featZRCola compUpdater.mo.$(LANG)
featZRCola compwxstd.mo.$(LANG)
!ENDIF
<<NOKEEP
######################################################################
# File
All :: "$(LANG).$(PLAT).$(CFG).File-1.idt"
"$(LANG).$(PLAT).$(CFG).File-1.idt" : "Makefile" "..\..\include\MSIBuildCfg.mak"
-if exist $@ del /f /q $@
move /y << $@ > NUL
File Component_ FileName FileSize Version Language Attributes Sequence
s$(MSIBUILD_LENGTH_ID) s$(MSIBUILD_LENGTH_ID) l255 i4 S$(MSIBUILD_LENGTH_ID) S20 I2 i2
File File
fileZRCola.exe.$(PLAT) compZRCola.exe.$(PLAT) ZRCola.exe 0 0 1536 1
!IF "$(LANG)" != "en_US"
fileZRCola.mo.$(LANG) compZRCola.mo.$(LANG) ZRCola.mo 0 $(MSIBUILD_LANGID) 0 1
!ENDIF
<<NOKEEP
######################################################################
# Icon
All :: \
"$(LANG).$(PLAT).$(CFG).Icon-1.idt" \
"$(LANG).$(PLAT).$(CFG).Icon-1\ZRCola.ico"
"$(LANG).$(PLAT).$(CFG).Icon-1.idt" : "Makefile" "..\..\include\MSIBuildCfg.mak" "$(LANG).$(PLAT).$(CFG).Icon-1"
-if exist $@ del /f /q $@
move /y << $@ > NUL
Name Data
s$(MSIBUILD_LENGTH_ID) v0
Icon Name
iconZRCola.ico ZRCola.ico
<<NOKEEP
"$(LANG).$(PLAT).$(CFG).Icon-1\ZRCola.ico" : "..\res\zrcola.ico"
copy /y $** $@ > NUL
######################################################################
# RemoveFile
All :: "$(LANG).$(PLAT).$(CFG).RemoveFile-1.idt"
"$(LANG).$(PLAT).$(CFG).RemoveFile-1.idt" : "Makefile" "..\..\include\MSIBuildCfg.mak"
-if exist $@ del /f /q $@
move /y << $@ > NUL
FileKey Component_ FileName DirProperty InstallMode
s$(MSIBUILD_LENGTH_ID) s$(MSIBUILD_LENGTH_ID) L255 s$(MSIBUILD_LENGTH_ID) i2
RemoveFile FileKey
rmfiZRCola compZRCola.exe.$(PLAT) ZRColaShortcutDir 2
<<NOKEEP
######################################################################
# Shortcut
All :: "$(LANG).$(PLAT).$(CFG).Shortcut-2.idt"
"en_US.$(PLAT).$(CFG).Shortcut-2.idtx" : "Makefile" "..\..\include\MSIBuildCfg.mak"
-if exist $@ del /f /q $@
move /y << $@ > NUL
Shortcut Directory_ Name Component_ Target Arguments Description Hotkey Icon_ IconIndex ShowCmd WkDir
s$(MSIBUILD_LENGTH_ID) s$(MSIBUILD_LENGTH_ID) l128 s$(MSIBUILD_LENGTH_ID) s$(MSIBUILD_LENGTH_ID) S255 L255 I2 S$(MSIBUILD_LENGTH_ID) I2 I2 S$(MSIBUILD_LENGTH_ID)
1252 Shortcut Shortcut
shctZRCola ZRColaShortcutDir ZRCola compZRCola.exe.$(PLAT) featZRCola Input system for linguistic use iconZRCola.ico ZRCOLABINDIR
<<NOKEEP
!IF "$(LANG)" == "en_US"
"en_US.$(PLAT).$(CFG).Shortcut-2.idt" : "en_US.$(PLAT).$(CFG).Shortcut-2.idtx"
copy /y $** $@ > NUL
!ELSE
"$(LANG).$(PLAT).$(CFG).Shortcut-2.idt" : "en_US.$(PLAT).$(CFG).Shortcut-2.idtx" "..\locale\$(LANG).po"
cscript.exe "..\..\MSI\MSIBuild\MSI.wsf" //Job:IDTTranslate //Nologo $@ $** /CP:$(MSIBUILD_CODEPAGE)
!ENDIF
######################################################################
# Build MSM module!
######################################################################
!INCLUDE "..\..\MSI\MSIBuild\MSM.mak"

View File

@@ -1,580 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<wxFormBuilder_Project>
<FileVersion major="1" minor="13" />
<object class="Project" expanded="1">
<property name="class_decoration"></property>
<property name="code_generation">C++</property>
<property name="disconnect_events">1</property>
<property name="disconnect_mode">source_name</property>
<property name="disconnect_php_events">0</property>
<property name="disconnect_python_events">0</property>
<property name="embedded_files_path">res</property>
<property name="encoding">ANSI</property>
<property name="event_generation">connect</property>
<property name="file">zrcolagui</property>
<property name="first_id">1000</property>
<property name="help_provider">wxHelpControllerHelpProvider</property>
<property name="internationalize">1</property>
<property name="name">ZRCola</property>
<property name="namespace"></property>
<property name="path">.</property>
<property name="precompiled_header">#include &quot;stdafx.h&quot;</property>
<property name="relative_path">1</property>
<property name="skip_lua_events">1</property>
<property name="skip_php_events">1</property>
<property name="skip_python_events">1</property>
<property name="ui_table">UI</property>
<property name="use_enum">1</property>
<property name="use_microsoft_bom">0</property>
<object class="Frame" expanded="1">
<property name="aui_managed">0</property>
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
<property name="bg"></property>
<property name="center">wxBOTH</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property>
<property name="event_handler">impl_virtual</property>
<property name="extra_style"></property>
<property name="fg"></property>
<property name="font"></property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="maximum_size"></property>
<property name="minimum_size">150,150</property>
<property name="name">wxZRColaFrameBase</property>
<property name="pos"></property>
<property name="size">600,400</property>
<property name="style">wxDEFAULT_FRAME_STYLE</property>
<property name="subclass"></property>
<property name="title">ZRCola</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style">wxTAB_TRAVERSAL</property>
<property name="xrc_skip_sizer">1</property>
<event name="OnActivate"></event>
<event name="OnActivateApp"></event>
<event name="OnAuiFindManager"></event>
<event name="OnAuiPaneButton"></event>
<event name="OnAuiPaneClose"></event>
<event name="OnAuiPaneMaximize"></event>
<event name="OnAuiPaneRestore"></event>
<event name="OnAuiRender"></event>
<event name="OnChar"></event>
<event name="OnClose"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnHibernate"></event>
<event name="OnIconize"></event>
<event name="OnIdle"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
<object class="wxMenuBar" expanded="1">
<property name="bg"></property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="font"></property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Menu</property>
<property name="maximum_size"></property>
<property name="minimum_size"></property>
<property name="name">m_menubar</property>
<property name="permission">protected</property>
<property name="pos"></property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
<object class="wxMenu" expanded="1">
<property name="label">&amp;File</property>
<property name="name">m_menuFile</property>
<property name="permission">protected</property>
<object class="wxMenuItem" expanded="1">
<property name="bitmap"></property>
<property name="checked">0</property>
<property name="enabled">1</property>
<property name="help"></property>
<property name="id">wxID_EXIT</property>
<property name="kind">wxITEM_NORMAL</property>
<property name="label">E&amp;xit</property>
<property name="name">m_menuItemExit</property>
<property name="permission">none</property>
<property name="shortcut">Alt+F4</property>
<property name="unchecked_bitmap"></property>
<event name="OnMenuSelection"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="wxMenu" expanded="1">
<property name="label">&amp;Accents</property>
<property name="name">m_menuAccents</property>
<property name="permission">protected</property>
<object class="wxMenuItem" expanded="1">
<property name="bitmap"></property>
<property name="checked">0</property>
<property name="enabled">1</property>
<property name="help"></property>
<property name="id">wxID_INSERT_GRAVE</property>
<property name="kind">wxITEM_NORMAL</property>
<property name="label">Grave&#x09;&amp;7</property>
<property name="name">m_menuItemGrave</property>
<property name="permission">none</property>
<property name="shortcut"></property>
<property name="unchecked_bitmap"></property>
<event name="OnMenuSelection"></event>
<event name="OnUpdateUI"></event>
</object>
<object class="wxMenuItem" expanded="1">
<property name="bitmap"></property>
<property name="checked">0</property>
<property name="enabled">1</property>
<property name="help"></property>
<property name="id">wxID_INSERT_ACUTE</property>
<property name="kind">wxITEM_NORMAL</property>
<property name="label">Acute&#x09;&amp;9</property>
<property name="name">m_menuItemAcute</property>
<property name="permission">none</property>
<property name="shortcut"></property>
<property name="unchecked_bitmap"></property>
<event name="OnMenuSelection"></event>
<event name="OnUpdateUI"></event>
</object>
<object class="wxMenuItem" expanded="1">
<property name="bitmap"></property>
<property name="checked">0</property>
<property name="enabled">1</property>
<property name="help"></property>
<property name="id">wxID_INSERT_CIRCUMFLEX</property>
<property name="kind">wxITEM_NORMAL</property>
<property name="label">Circumflex&#x09;&amp;3</property>
<property name="name">m_menuItemCircumflex</property>
<property name="permission">none</property>
<property name="shortcut"></property>
<property name="unchecked_bitmap"></property>
<event name="OnMenuSelection"></event>
<event name="OnUpdateUI"></event>
</object>
<object class="separator" expanded="1">
<property name="name">m_separator2</property>
<property name="permission">none</property>
</object>
<object class="wxMenuItem" expanded="1">
<property name="bitmap"></property>
<property name="checked">0</property>
<property name="enabled">1</property>
<property name="help"></property>
<property name="id">wxID_INSERT_INV_BREVE_BELOW</property>
<property name="kind">wxITEM_NORMAL</property>
<property name="label">Inverted &amp;breve</property>
<property name="name">m_menuItemInvBreveBelow</property>
<property name="permission">none</property>
<property name="shortcut"></property>
<property name="unchecked_bitmap"></property>
<event name="OnMenuSelection"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="wxMenu" expanded="1">
<property name="label">&amp;Help</property>
<property name="name">m_menuHelp</property>
<property name="permission">protected</property>
<object class="wxMenuItem" expanded="1">
<property name="bitmap"></property>
<property name="checked">0</property>
<property name="enabled">1</property>
<property name="help"></property>
<property name="id">wxID_ABOUT</property>
<property name="kind">wxITEM_NORMAL</property>
<property name="label">&amp;About</property>
<property name="name">m_menuItemAbout</property>
<property name="permission">none</property>
<property name="shortcut"></property>
<property name="unchecked_bitmap"></property>
<event name="OnMenuSelection"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bSizerMain</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">100</property>
<object class="CustomControl" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="class">wxZRColaComposerPanel</property>
<property name="close_button">1</property>
<property name="construction">m_panel = new wxZRColaComposerPanel( this );&#x0A;</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="declaration">wxZRColaComposerPanel* m_panel;</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="include">#include &quot;zrcolacomppnl.h&quot;</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_panel</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="settings"></property>
<property name="show">1</property>
<property name="size"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
</object>
<object class="Panel" expanded="1">
<property name="aui_managed">0</property>
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
<property name="bg"></property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property>
<property name="event_handler">impl_virtual</property>
<property name="fg"></property>
<property name="font"></property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="maximum_size"></property>
<property name="minimum_size"></property>
<property name="name">wxZRColaComposerPanelBase</property>
<property name="pos"></property>
<property name="size">-1,-1</property>
<property name="subclass"></property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style">wxTAB_TRAVERSAL</property>
<event name="OnAuiFindManager"></event>
<event name="OnAuiPaneButton"></event>
<event name="OnAuiPaneClose"></event>
<event name="OnAuiPaneMaximize"></event>
<event name="OnAuiPaneRestore"></event>
<event name="OnAuiRender"></event>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnInitDialog"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
<object class="wxBoxSizer" expanded="0">
<property name="minimum_size"></property>
<property name="name">bSizerEditor</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">50</property>
<object class="wxTextCtrl" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font">00 ZRCola,90,90,20,70,0</property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_DECOMPOSED</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="maxlength"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size">100,25</property>
<property name="moveable">1</property>
<property name="name">m_decomposed</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxTE_CENTRE|wxTE_MULTILINE</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint">OnDecomposedPaint</event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnText">OnDecomposedText</event>
<event name="OnTextEnter"></event>
<event name="OnTextMaxLen"></event>
<event name="OnTextURL"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">50</property>
<object class="wxTextCtrl" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font">00 ZRCola,90,90,20,70,0</property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_COMPOSED</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="maxlength"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size">100,25</property>
<property name="moveable">1</property>
<property name="name">m_composed</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxTE_CENTRE|wxTE_MULTILINE</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint">OnComposedPaint</event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnText">OnComposedText</event>
<event name="OnTextEnter"></event>
<event name="OnTextMaxLen"></event>
<event name="OnTextURL"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
</object>
</object>
</wxFormBuilder_Project>

View File

@@ -7,8 +7,14 @@
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\lib\wxExtend\include;..\lib\libZRCola\include</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\lib\wxExtend\include;..\Updater\Updater\include;..\lib\stdex\include;..\lib\WinStd\include;..\lib\libZRCola\include;..\lib\libZRColaUI\include</AdditionalIncludeDirectories>
</ClCompile>
<Manifest>
<EnableDpiAwareness>true</EnableDpiAwareness>
</Manifest>
<ResourceCompile>
<AdditionalIncludeDirectories>..\Updater\Updater\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

Binary file not shown.

View File

@@ -1,6 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
@@ -9,6 +13,10 @@
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
@@ -21,55 +29,87 @@
<PropertyGroup Label="Globals">
<ProjectGuid>{CD9E4170-92DD-440E-980C-D15F62032249}</ProjectGuid>
<RootNamespace>ZRCola</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\include\Win32.props" />
<Import Project="..\include\Debug.props" />
<Import Project="..\include\$(Platform).props" />
<Import Project="..\include\$(Configuration).props" />
<Import Project="ZRCola.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\include\x64.props" />
<Import Project="..\include\Debug.props" />
<Import Project="..\include\$(Platform).props" />
<Import Project="..\include\$(Configuration).props" />
<Import Project="ZRCola.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\include\$(Platform).props" />
<Import Project="..\include\$(Configuration).props" />
<Import Project="ZRCola.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\include\Win32.props" />
<Import Project="..\include\Release.props" />
<Import Project="..\include\$(Platform).props" />
<Import Project="..\include\$(Configuration).props" />
<Import Project="ZRCola.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\include\x64.props" />
<Import Project="..\include\Release.props" />
<Import Project="..\include\$(Platform).props" />
<Import Project="..\include\$(Configuration).props" />
<Import Project="ZRCola.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\include\$(Platform).props" />
<Import Project="..\include\$(Configuration).props" />
<Import Project="ZRCola.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
@@ -78,37 +118,85 @@
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="zrcolaabout.cpp" />
<ClCompile Include="zrcolaapp.cpp" />
<ClCompile Include="zrcolachrcatpnl.cpp" />
<ClCompile Include="zrcolachrgrid.cpp" />
<ClCompile Include="zrcolachrreq.cpp" />
<ClCompile Include="zrcolachrslct.cpp" />
<ClCompile Include="zrcolacomppnl.cpp" />
<ClCompile Include="zrcolafrm.cpp" />
<ClCompile Include="zrcolagui.cpp" />
<ClCompile Include="zrcolakeyhndlr.cpp" />
<ClCompile Include="zrcolasettings.cpp" />
<ClCompile Include="zrcolatranseq.cpp" />
<ClCompile Include="zrcolaupdater.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="stdafx.h" />
<ClInclude Include="zrcolaabout.h" />
<ClInclude Include="zrcolaapp.h" />
<ClInclude Include="zrcolachrcatpnl.h" />
<ClInclude Include="zrcolachrgrid.h" />
<ClInclude Include="zrcolachrreq.h" />
<ClInclude Include="zrcolachrslct.h" />
<ClInclude Include="zrcolacomppnl.h" />
<ClInclude Include="zrcolafrm.h" />
<ClInclude Include="zrcolagui.h" />
<ClInclude Include="zrcolakeyhndlr.h" />
<ClInclude Include="zrcolasettings.h" />
<ClInclude Include="zrcolatranseq.h" />
<ClInclude Include="zrcolaupdater.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\lib\libZRColaUI\build\libZRColaUI.vcxproj">
<Project>{c0a84bd2-3870-4cd6-b281-0ab322e3c579}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\libZRCola\build\libZRCola.vcxproj">
<Project>{3c61929e-7289-4101-8d0a-da22d6e1aea8}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\wxExtend\build\wxExtend.vcxproj">
<Project>{a3a36689-ac35-4026-93da-a3ba0c0e767c}</Project>
<ProjectReference Include="..\lib\WinStd\build\WinStd-16.0.vcxproj">
<Project>{47399d91-7eb9-41de-b521-514ba5db0c43}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\wxExtend\build\wxExtendLib-16.0.vcxproj">
<Project>{D3E29951-D9F5-486D-A167-20AE8E90B1FA}</Project>
</ProjectReference>
<ProjectReference Include="..\Updater\Updater\build\Updater.vcxproj">
<Project>{990d8cf9-4457-4dc0-aa18-4968ef434741}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="res\send.ico" />
<None Include="locale\ZRCola.pot" />
<None Include="res\char_select.ico" />
<None Include="res\copy_composed_and_return.ico" />
<None Include="res\copy_decomposed_and_return.ico" />
<None Include="res\edit_copy.ico" />
<None Include="res\edit_cut.ico" />
<None Include="res\edit_paste.ico" />
<None Include="res\navigate_back.ico" />
<None Include="res\navigate_forward.ico" />
<None Include="res\send_abort.ico" />
<None Include="res\send_composed.ico" />
<None Include="res\send_decomposed.ico" />
<None Include="res\zrcola.ico" />
<None Include="res\ZRCola.fbp">
<SubType>Designer</SubType>
</None>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="ZRCola.rc" />
</ItemGroup>
<ItemGroup>
<POCompile Include="locale\sl.po" />
<POCompile Include="locale\de_DE.po" />
<POCompile Include="locale\ru_RU.po" />
<POCompile Include="locale\sl_SI.po" />
</ItemGroup>
<ItemGroup>
<Image Include="res\composition.ico" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">

View File

@@ -34,6 +34,33 @@
<ClCompile Include="zrcolafrm.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="zrcolakeyhndlr.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="zrcolachrgrid.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="zrcolachrcatpnl.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="zrcolachrslct.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="zrcolasettings.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="zrcolaabout.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="zrcolaupdater.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="zrcolachrreq.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="zrcolatranseq.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="stdafx.h">
@@ -51,12 +78,75 @@
<ClInclude Include="zrcolafrm.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="zrcolakeyhndlr.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="zrcolachrgrid.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="zrcolachrcatpnl.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="zrcolachrslct.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="zrcolasettings.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="zrcolaabout.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="zrcolaupdater.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="zrcolachrreq.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="zrcolatranseq.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="res\send.ico">
<None Include="res\zrcola.ico">
<Filter>Resource Files</Filter>
</None>
<None Include="res\zrcola.ico">
<None Include="res\send_abort.ico">
<Filter>Resource Files</Filter>
</None>
<None Include="res\send_composed.ico">
<Filter>Resource Files</Filter>
</None>
<None Include="res\send_decomposed.ico">
<Filter>Resource Files</Filter>
</None>
<None Include="res\edit_copy.ico">
<Filter>Resource Files</Filter>
</None>
<None Include="res\edit_cut.ico">
<Filter>Resource Files</Filter>
</None>
<None Include="res\edit_paste.ico">
<Filter>Resource Files</Filter>
</None>
<None Include="res\ZRCola.fbp">
<Filter>Resource Files</Filter>
</None>
<None Include="res\char_select.ico">
<Filter>Resource Files</Filter>
</None>
<None Include="locale\ZRCola.pot">
<Filter>Resource Files\Localization</Filter>
</None>
<None Include="res\navigate_back.ico">
<Filter>Resource Files</Filter>
</None>
<None Include="res\navigate_forward.ico">
<Filter>Resource Files</Filter>
</None>
<None Include="res\copy_composed_and_return.ico">
<Filter>Resource Files</Filter>
</None>
<None Include="res\copy_decomposed_and_return.ico">
<Filter>Resource Files</Filter>
</None>
</ItemGroup>
@@ -66,8 +156,19 @@
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<POCompile Include="locale\sl.po">
<POCompile Include="locale\sl_SI.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\de_DE.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
<POCompile Include="locale\ru_RU.po">
<Filter>Resource Files\Localization</Filter>
</POCompile>
</ItemGroup>
<ItemGroup>
<Image Include="res\composition.ico">
<Filter>Resource Files</Filter>
</Image>
</ItemGroup>
</Project>

1
ZRCola/locale/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/*.mo

753
ZRCola/locale/ZRCola.pot Normal file
View File

@@ -0,0 +1,753 @@
msgid ""
msgstr ""
"Project-Id-Version: ZRCola\n"
"POT-Creation-Date: 2019-04-01 11:13+0200\n"
"PO-Revision-Date: 2019-04-01 19:38+0200\n"
"Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n"
"Language-Team: Amebis, d. o. o., Kamnik <info@amebis.si>\n"
"Language: sl_SI\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.2.1\n"
"X-Poedit-Basepath: ..\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: _\n"
"X-Poedit-SearchPath-0: .\n"
#: res/zrcolagui.cpp:42 zrcolagui.cpp:42
msgid "E&xit"
msgstr ""
#: res/zrcolagui.cpp:42 zrcolagui.cpp:42
msgid "Quit this program"
msgstr ""
#: res/zrcolagui.cpp:45 zrcolagui.cpp:45
msgid "&Program"
msgstr ""
#: res/zrcolagui.cpp:78 zrcolagui.cpp:78
msgid "Select &All"
msgstr ""
#: res/zrcolagui.cpp:78 zrcolagui.cpp:78
msgid "Select all text"
msgstr ""
#: res/zrcolagui.cpp:84 zrcolagui.cpp:84
msgid "Find C&haracter..."
msgstr ""
#: res/zrcolagui.cpp:84 res/zrcolagui.cpp:208 zrcolagui.cpp:84
#: zrcolagui.cpp:208
msgid "Toggle character search to select character to insert into text"
msgstr ""
#: res/zrcolagui.cpp:90 zrcolagui.cpp:90
msgid "&Send Composed"
msgstr ""
#: res/zrcolagui.cpp:90 res/zrcolagui.cpp:210 zrcolagui.cpp:90
#: zrcolagui.cpp:210
msgid "Send composed text to source window"
msgstr ""
#: res/zrcolagui.cpp:99 zrcolagui.cpp:99
msgid "Copy Composed and &Return"
msgstr ""
#: res/zrcolagui.cpp:99 zrcolagui.cpp:99
msgid "Copy composed text to clipboard and return focus to source window"
msgstr ""
#: res/zrcolagui.cpp:108 zrcolagui.cpp:108
msgid "Send &Decomposed"
msgstr ""
#: res/zrcolagui.cpp:108 res/zrcolagui.cpp:212 zrcolagui.cpp:108
#: zrcolagui.cpp:212
msgid "Send decomposed text to source window"
msgstr ""
#: res/zrcolagui.cpp:117 zrcolagui.cpp:117
msgid "Copy Decomposed and Re&turn"
msgstr ""
#: res/zrcolagui.cpp:117 zrcolagui.cpp:117
msgid "Copy decomposed text to clipboard and return focus to source window"
msgstr ""
#: res/zrcolagui.cpp:126 zrcolagui.cpp:126
msgid "Abort (De)composition"
msgstr ""
#: res/zrcolagui.cpp:126 zrcolagui.cpp:126
msgid "Abort composition and return focus to source window"
msgstr ""
#: res/zrcolagui.cpp:136 zrcolagui.cpp:136
msgid "&ZRCola (De)composition"
msgstr ""
#: res/zrcolagui.cpp:136 res/zrcolagui.cpp:214 zrcolagui.cpp:136
#: zrcolagui.cpp:216
msgid "Toggle ZRCola character (De)composition"
msgstr ""
#: res/zrcolagui.cpp:140 zrcolagui.cpp:140
msgid "Tra&nslation"
msgstr ""
#: res/zrcolagui.cpp:146 zrcolagui.cpp:146
msgid "&Settings..."
msgstr ""
#: res/zrcolagui.cpp:146 zrcolagui.cpp:146
msgid "Open program configuration dialog"
msgstr ""
#: res/zrcolagui.cpp:149 zrcolagui.cpp:149
msgid "&Edit"
msgstr ""
#: res/zrcolagui.cpp:153 zrcolagui.cpp:153
msgid "&Edit Toolbar"
msgstr ""
#: res/zrcolagui.cpp:153 zrcolagui.cpp:153
msgid "Toggle edit toolbar"
msgstr ""
#: res/zrcolagui.cpp:157 zrcolagui.cpp:157
msgid "&Compose Toolbar"
msgstr ""
#: res/zrcolagui.cpp:157 zrcolagui.cpp:157
msgid "Toggle compose toolbar"
msgstr ""
#: res/zrcolagui.cpp:163 zrcolagui.cpp:163
msgid "Character Catalo&g"
msgstr ""
#: res/zrcolagui.cpp:163 zrcolagui.cpp:163
msgid "Toggle character catalog panel"
msgstr ""
#: res/zrcolagui.cpp:166 zrcolagui.cpp:166
msgid "&View"
msgstr ""
#: res/zrcolagui.cpp:170 zrcolagui.cpp:170
msgid "&Instructions..."
msgstr ""
#: res/zrcolagui.cpp:170 zrcolagui.cpp:170
msgid "Open a web site with product instructions"
msgstr ""
#: res/zrcolagui.cpp:174 zrcolagui.cpp:174
msgid "Keyboard &Shortcuts..."
msgstr ""
#: res/zrcolagui.cpp:174 zrcolagui.cpp:174
msgid "Open a list of keyboard shortcuts"
msgstr ""
#: res/zrcolagui.cpp:180 zrcolagui.cpp:180
msgid "&Request a new character..."
msgstr ""
#: res/zrcolagui.cpp:180 zrcolagui.cpp:180
msgid "Submit a request to ZRC to add a new character"
msgstr ""
#: res/zrcolagui.cpp:184 zrcolagui.cpp:184
msgid "Check for &Updates..."
msgstr ""
#: res/zrcolagui.cpp:184 zrcolagui.cpp:184
msgid "Check online for product update"
msgstr ""
#: res/zrcolagui.cpp:190 zrcolagui.cpp:190
msgid "&About..."
msgstr ""
#: res/zrcolagui.cpp:193 zrcolagui.cpp:193
msgid "&Help"
msgstr ""
#: res/zrcolagui.cpp:198 zrcolagui.cpp:198
msgid "Cut"
msgstr ""
#: res/zrcolagui.cpp:198 zrcolagui.cpp:198
msgid "Cut selection"
msgstr ""
#: res/zrcolagui.cpp:200 zrcolagui.cpp:200
msgid "Copy"
msgstr ""
#: res/zrcolagui.cpp:200 zrcolagui.cpp:200
msgid "Copy selection"
msgstr ""
#: res/zrcolagui.cpp:202 zrcolagui.cpp:202
msgid "Paste"
msgstr ""
#: res/zrcolagui.cpp:202 zrcolagui.cpp:202
msgid "Paste selection"
msgstr ""
#: res/zrcolagui.cpp:205 zrcolagui.cpp:205
msgid "Edit"
msgstr ""
#: res/zrcolagui.cpp:208 zrcolagui.cpp:208
msgid "Find Character"
msgstr ""
#: res/zrcolagui.cpp:210 zrcolagui.cpp:210
msgid "Send Composed"
msgstr ""
#: res/zrcolagui.cpp:212 zrcolagui.cpp:212
msgid "Send Decomposed"
msgstr ""
#: res/zrcolagui.cpp:214 zrcolagui.cpp:216
msgid "ZRCola (De)composition"
msgstr ""
#: res/zrcolagui.cpp:221 zrcolagui.cpp:223
msgid "Compose"
msgstr ""
#: res/zrcolagui.cpp:225 zrcolagui.cpp:227
msgid "Character Catalog"
msgstr ""
#: res/zrcolagui.cpp:229 zrcolagui.cpp:231
msgid "(De)Composer"
msgstr ""
#: res/zrcolagui.cpp:270 zrcolagui.cpp:272
msgid "Decomposed Text"
msgstr ""
#: res/zrcolagui.cpp:290 zrcolagui.cpp:292
msgid "Decomposed Unicode Dump"
msgstr ""
#: res/zrcolagui.cpp:317 zrcolagui.cpp:319
msgid "Composed Text"
msgstr ""
#: res/zrcolagui.cpp:337 zrcolagui.cpp:339
msgid "Composed Unicode Dump"
msgstr ""
#: res/zrcolagui.cpp:391 zrcolagui.cpp:393
msgid "Select category to display"
msgstr ""
#: res/zrcolagui.cpp:425 zrcolagui.cpp:427
msgid "Show &All"
msgstr ""
#: res/zrcolagui.cpp:426 zrcolagui.cpp:428
msgid "Toggle display of less frequent characters"
msgstr ""
#: res/zrcolagui.cpp:466 zrcolagui.cpp:468
msgid "&Browse"
msgstr ""
#: res/zrcolagui.cpp:473 zrcolagui.cpp:475
msgid "Full or partial terms from Unicode character description (in English) to search for"
msgstr ""
#: res/zrcolagui.cpp:477 zrcolagui.cpp:479
msgid "Search Options"
msgstr ""
#: res/zrcolagui.cpp:478 zrcolagui.cpp:480
msgid "Shows/hides additional search options"
msgstr ""
#: res/zrcolagui.cpp:490 zrcolagui.cpp:492
msgid "List of Unicode character categories to search in"
msgstr ""
#: res/zrcolagui.cpp:497 zrcolagui.cpp:499
msgid "All"
msgstr ""
#: res/zrcolagui.cpp:498 zrcolagui.cpp:500
msgid "Select all categories"
msgstr ""
#: res/zrcolagui.cpp:502 zrcolagui.cpp:504
msgid "None"
msgstr ""
#: res/zrcolagui.cpp:503 zrcolagui.cpp:505
msgid "Clear category selection"
msgstr ""
#: res/zrcolagui.cpp:507 zrcolagui.cpp:509
msgid "Invert"
msgstr ""
#: res/zrcolagui.cpp:508 zrcolagui.cpp:510
msgid "Invert category selection"
msgstr ""
#: res/zrcolagui.cpp:547 zrcolagui.cpp:549
msgid "Character search results"
msgstr ""
#: res/zrcolagui.cpp:557 zrcolagui.cpp:559
msgid "Re&cently Used"
msgstr ""
#: res/zrcolagui.cpp:585 zrcolagui.cpp:587
msgid "List of recently inserted characters"
msgstr ""
#: res/zrcolagui.cpp:599 zrcolagui.cpp:601
msgid "Preview"
msgstr ""
#: res/zrcolagui.cpp:604 zrcolagui.cpp:606
msgid "U+"
msgstr ""
#: res/zrcolagui.cpp:609 zrcolagui.cpp:611
msgid "Unicode hexadecimal code"
msgstr ""
#: res/zrcolagui.cpp:614 zrcolagui.cpp:616
msgid "Keyboard shortcut in Composer window"
msgstr ""
#: res/zrcolagui.cpp:649 zrcolagui.cpp:651
msgid "Character preview"
msgstr ""
#: res/zrcolagui.cpp:654 zrcolagui.cpp:656
msgid "Unicode character description"
msgstr ""
#: res/zrcolagui.cpp:659 zrcolagui.cpp:661
msgid "Character tags"
msgstr ""
#: res/zrcolagui.cpp:664 zrcolagui.cpp:666
msgid "Unicode character category"
msgstr ""
#: res/zrcolagui.cpp:671 zrcolagui.cpp:673
msgid "« Back"
msgstr ""
#: res/zrcolagui.cpp:673 zrcolagui.cpp:675
msgid "To previously viewed character"
msgstr ""
#: res/zrcolagui.cpp:677 zrcolagui.cpp:679
msgid "Forward »"
msgstr ""
#: res/zrcolagui.cpp:679 zrcolagui.cpp:681
msgid "To following viewed character"
msgstr ""
#: res/zrcolagui.cpp:690 zrcolagui.cpp:692
msgid "Re&lated"
msgstr ""
#: res/zrcolagui.cpp:717 zrcolagui.cpp:719
msgid "List of related characters"
msgstr ""
#: res/zrcolagui.cpp:736 zrcolagui.cpp:738
msgid "&Insert"
msgstr ""
#: res/zrcolagui.cpp:740 zrcolagui.cpp:742
msgid "Insert character into decomposed text"
msgstr ""
#: res/zrcolagui.cpp:813 zrcolagui.cpp:818
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 ""
#: res/zrcolagui.cpp:817 zrcolagui.cpp:822
msgid "Select language &automatically according to selected keyboard"
msgstr ""
#: res/zrcolagui.cpp:820 zrcolagui.cpp:825
msgid "&Manually select the language from the list below:"
msgstr ""
#: res/zrcolagui.cpp:831 zrcolagui.cpp:836
msgid "Text Language"
msgstr ""
#: res/zrcolagui.cpp:836 zrcolagui.cpp:841
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 ""
#: res/zrcolagui.cpp:840 zrcolagui.cpp:845
msgid "Start ZRCola &automatically on logon"
msgstr ""
#: res/zrcolagui.cpp:846 zrcolagui.cpp:851
msgid "Startup"
msgstr ""
#: res/zrcolagui.cpp:913 res/zrcolagui.h:113 zrcolaapp.cpp:72 zrcolafrm.cpp:128
#: zrcolagui.cpp:918 zrcolagui.h:113
#: MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Debug.Shortcut-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4
#: MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Debug.Shortcut-2.idtx:4
#: MSIBuild/en_US.x64.Release.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
msgid "ZRCola"
msgstr ""
#: res/zrcolagui.cpp:924 zrcolagui.cpp:929
msgid ""
"Program and Website Editor: Janoš Ježovnik\n"
"Development: Amebis, d. o. o., Kamnik\n"
"Translation into English: Janoš Ježovnik\n"
"Translation into Russian language: Domen Krvina, Silvo Torkar, Anastasia Plotnikova\n"
"Development and maintenance of the original program (20042015): Peter Weiss"
msgstr ""
#: res/zrcolagui.cpp:932 zrcolagui.cpp:937
msgid "zrcola.zrc-sazu.si"
msgstr ""
#: res/zrcolagui.cpp:938 zrcolagui.cpp:943
msgid "Texts made using ZRCola have to include in a footnote or some other appropriate part of the publication the note below:"
msgstr ""
#: res/zrcolagui.cpp:942 zrcolagui.cpp:947
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 ""
#: res/zrcolagui.cpp:983 zrcolagui.cpp:988
msgid "Log"
msgstr ""
#: res/zrcolagui.cpp:999 zrcolagui.cpp:1004
msgid "Quit and &Update..."
msgstr ""
#: res/zrcolagui.cpp:1001 zrcolagui.cpp:1006
msgid "Exit this program and launch product update"
msgstr ""
#: res/zrcolagui.cpp:1005 zrcolagui.cpp:1010
msgid "&Close"
msgstr ""
#: res/zrcolagui.cpp:1006 zrcolagui.cpp:1011
msgid "Close this window"
msgstr ""
#: res/zrcolagui.cpp:1043 zrcolachrreq.cpp:49 zrcolagui.cpp:1048
msgid "Character"
msgstr ""
#: res/zrcolagui.cpp:1045 zrcolagui.cpp:1050
msgid "Enter the &character you would like to request:"
msgstr ""
#: res/zrcolagui.cpp:1059 zrcolagui.cpp:1064
msgid "Decomposed character to request"
msgstr ""
#: res/zrcolagui.cpp:1063 zrcolagui.cpp:1068
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 ""
#: res/zrcolagui.cpp:1071 zrcolachrreq.cpp:58 zrcolagui.cpp:1076
msgid "Context"
msgstr ""
#: res/zrcolagui.cpp:1073 zrcolagui.cpp:1078
msgid "The &context, examples or description why and where the character is required:"
msgstr ""
#: res/zrcolagui.cpp:1079 zrcolagui.cpp:1084
msgid "Additional notes for character request"
msgstr ""
#: res/zrcolagui.cpp:1086 zrcolagui.cpp:1091
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."
msgstr ""
#: res/zrcolagui.cpp:1128 zrcolagui.cpp:1133
msgid "Translation"
msgstr ""
#: res/zrcolagui.cpp:1130 zrcolagui.cpp:1135
msgid ""
"ZRCola offers multiple text translations that can be arranged in a sequence.\n"
"Please select desired translations and the order they are applied."
msgstr ""
#: res/zrcolagui.cpp:1140 zrcolagui.cpp:1145
msgid "A&vailable:"
msgstr ""
#: res/zrcolagui.cpp:1155 zrcolagui.cpp:1160
msgid ">"
msgstr ""
#: res/zrcolagui.cpp:1158 zrcolagui.cpp:1163
msgid "<"
msgstr ""
#: res/zrcolagui.cpp:1167 zrcolagui.cpp:1172
msgid "&Selected:"
msgstr ""
#: res/zrcolagui.cpp:1185 zrcolagui.cpp:1190
msgid "Up"
msgstr ""
#: res/zrcolagui.cpp:1188 zrcolagui.cpp:1193
msgid "Down"
msgstr ""
#: res/zrcolagui.h:254 zrcolagui.h:254
msgid "Character Search"
msgstr ""
#: res/zrcolagui.h:290 zrcolagui.h:290
msgid "Settings"
msgstr ""
#: res/zrcolagui.h:316 zrcolagui.h:316
msgid "About ZRCola"
msgstr ""
#: res/zrcolagui.h:341 zrcolagui.h:341 zrcolaupdater.cpp:94
msgid "Product Update"
msgstr ""
#: res/zrcolagui.h:370 zrcolachrreq.cpp:64 zrcolagui.h:370
msgid "Request a New Character"
msgstr ""
#: res/zrcolagui.h:412 zrcolagui.h:412
msgid "Custom Translation Sequence"
msgstr ""
#: zrcolaabout.cpp:31
#, c-format
msgid "© 2004-%s ZRC SAZU"
msgstr ""
#: zrcolachrslct.cpp:89
msgid "Too many digits in Unicode."
msgstr ""
#: zrcolachrslct.cpp:89 zrcolachrslct.cpp:107
msgid "Validation conflict"
msgstr ""
#: zrcolachrslct.cpp:107
#, c-format
msgid "Invalid character in Unicode found: %c"
msgstr ""
#: zrcolachrslct.cpp:214 zrcolachrslct.cpp:388 zrcolachrslct.cpp:885
msgid "▸ Search Options"
msgstr ""
#: zrcolachrslct.cpp:326
msgid ", "
msgstr ""
#: zrcolachrslct.cpp:391 zrcolachrslct.cpp:882
msgid "▾ Search Options"
msgstr ""
#: zrcolafrm.cpp:94
msgid "No Translation"
msgstr ""
#: zrcolafrm.cpp:107
msgid "Custom Translation..."
msgstr ""
#: zrcolafrm.cpp:215
msgid "ZRCola keyboard shortcut Win+F5 could not be registered. Some functionality will not be available."
msgstr ""
#: zrcolafrm.cpp:215 zrcolafrm.cpp:217
msgid "Warning"
msgstr ""
#: zrcolafrm.cpp:217
msgid "ZRCola keyboard shortcut Win+F6 could not be registered. Some functionality will not be available."
msgstr ""
#: zrcolafrm.cpp:486
msgid "http://zrcola.zrc-sazu.si/en/info/instructions/"
msgstr ""
#: zrcolafrm.cpp:510
msgid "http://zrcola.zrc-sazu.si/wp-content/uploads/2016/06/ZRCola_tipkovnica_Jun2016.pdf"
msgstr ""
#: zrcolakeyhndlr.cpp:44
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:87
msgid "Start ZRCola automatically on logon"
msgstr ""
#: zrcolatranseq.cpp:63
#, c-format
msgid "Unknown translation (%u)"
msgstr ""
#: zrcolaupdater.cpp:94
msgid ""
"This program will now close and the upgrade will be launched.\n"
"Are you sure?"
msgstr ""
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:4
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:10
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:15
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:10
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:15
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:4
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:10
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:15
#: MSIBuild/en_US.x64.Release.Control-2.idtx:4
#: MSIBuild/en_US.x64.Release.Control-2.idtx:10
#: MSIBuild/en_US.x64.Release.Control-2.idtx:15
msgid "binUIHeader.bmp"
msgstr ""
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:5
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:5
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:5
#: MSIBuild/en_US.x64.Release.Control-2.idtx:5
msgid "[DlgTitleFont][SimpleProductName] Tutorial : Starting"
msgstr ""
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:6
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:6
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:6
#: MSIBuild/en_US.x64.Release.Control-2.idtx:6
msgid "bintutorial1.bmp"
msgstr ""
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:7
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:7
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:7
#: MSIBuild/en_US.x64.Release.Control-2.idtx:7
msgid "When configured, ZRCola starts at system startup and runs in the background. If needed, it can be brought up by pressing the combination Win+F5."
msgstr ""
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:8
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:8
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:8
#: MSIBuild/en_US.x64.Release.Control-2.idtx:8
msgid "IMPORTANT: Upon pressing the combination Win+F5 the program memorises the location of the cursor in the text. If ZRCola is brought to the foreground without using the aforementioned combination of keys, the program won't know where to insert the special characters!"
msgstr ""
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:9
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:14
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:19
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:9
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:14
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:19
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:9
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:14
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:19
#: MSIBuild/en_US.x64.Release.Control-2.idtx:9
#: MSIBuild/en_US.x64.Release.Control-2.idtx:14
#: MSIBuild/en_US.x64.Release.Control-2.idtx:19
msgid "&Continue"
msgstr ""
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:11
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:11
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:11
#: MSIBuild/en_US.x64.Release.Control-2.idtx:11
msgid "[DlgTitleFont][SimpleProductName] Tutorial : Composition"
msgstr ""
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:12
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:12
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:12
#: MSIBuild/en_US.x64.Release.Control-2.idtx:12
msgid "bintutorial2.bmp"
msgstr ""
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:13
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:13
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:13
#: MSIBuild/en_US.x64.Release.Control-2.idtx:13
msgid "The string of basic and substitute characters is entered into the upper input window of the program. In the window below the resulted special characters are displayed. To insert them in the text, the F5 key is used."
msgstr ""
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:16
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:16
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:16
#: MSIBuild/en_US.x64.Release.Control-2.idtx:16
msgid "[DlgTitleFont][SimpleProductName] Tutorial : Entering Characters"
msgstr ""
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:17
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:17
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:17
#: MSIBuild/en_US.x64.Release.Control-2.idtx:17
msgid "bintutorial3.bmp"
msgstr ""
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:18
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:18
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:18
#: MSIBuild/en_US.x64.Release.Control-2.idtx:18
msgid "Characters can be entered using keyboard shortcuts, the character catalogue (F4) or the character finding tool (F8)."
msgstr ""
#: MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Debug.Shortcut-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4
#: MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Debug.Shortcut-2.idtx:4
#: MSIBuild/en_US.x64.Release.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
msgid "Input system for linguistic use"
msgstr ""

786
ZRCola/locale/de_DE.po Normal file
View File

@@ -0,0 +1,786 @@
# Translators:
# Simon Rozman <simon@rozman.si>, 2018
#
msgid ""
msgstr ""
"Project-Id-Version: ZRCola\n"
"POT-Creation-Date: 2019-04-01 11:13+0200\n"
"PO-Revision-Date: 2018-09-19 07:18+0000\n"
"Last-Translator: Simon Rozman <simon@rozman.si>, 2018\n"
"Language-Team: German (Germany) (https://www.transifex.com/amebis/teams/91592/de_DE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: de_DE\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.2.1\n"
"X-Poedit-Basepath: ..\n"
"X-Poedit-KeywordsList: _\n"
"X-Poedit-SearchPath-0: .\n"
"X-Poedit-SourceCharset: UTF-8\n"
#: res/zrcolagui.cpp:42 zrcolagui.cpp:42
msgid "E&xit"
msgstr ""
#: res/zrcolagui.cpp:42 zrcolagui.cpp:42
msgid "Quit this program"
msgstr ""
#: res/zrcolagui.cpp:45 zrcolagui.cpp:45
msgid "&Program"
msgstr ""
#: res/zrcolagui.cpp:78 zrcolagui.cpp:78
msgid "Select &All"
msgstr ""
#: res/zrcolagui.cpp:78 zrcolagui.cpp:78
msgid "Select all text"
msgstr ""
#: res/zrcolagui.cpp:84 zrcolagui.cpp:84
msgid "Find C&haracter..."
msgstr ""
#: res/zrcolagui.cpp:84 res/zrcolagui.cpp:208 zrcolagui.cpp:84
#: zrcolagui.cpp:208
msgid "Toggle character search to select character to insert into text"
msgstr ""
#: res/zrcolagui.cpp:90 zrcolagui.cpp:90
msgid "&Send Composed"
msgstr ""
#: res/zrcolagui.cpp:90 res/zrcolagui.cpp:210 zrcolagui.cpp:90
#: zrcolagui.cpp:210
msgid "Send composed text to source window"
msgstr ""
#: res/zrcolagui.cpp:99 zrcolagui.cpp:99
msgid "Copy Composed and &Return"
msgstr ""
#: res/zrcolagui.cpp:99 zrcolagui.cpp:99
msgid "Copy composed text to clipboard and return focus to source window"
msgstr ""
#: res/zrcolagui.cpp:108 zrcolagui.cpp:108
msgid "Send &Decomposed"
msgstr ""
#: res/zrcolagui.cpp:108 res/zrcolagui.cpp:212 zrcolagui.cpp:108
#: zrcolagui.cpp:212
msgid "Send decomposed text to source window"
msgstr ""
#: res/zrcolagui.cpp:117 zrcolagui.cpp:117
msgid "Copy Decomposed and Re&turn"
msgstr ""
#: res/zrcolagui.cpp:117 zrcolagui.cpp:117
msgid "Copy decomposed text to clipboard and return focus to source window"
msgstr ""
#: res/zrcolagui.cpp:126 zrcolagui.cpp:126
msgid "Abort (De)composition"
msgstr ""
#: res/zrcolagui.cpp:126 zrcolagui.cpp:126
msgid "Abort composition and return focus to source window"
msgstr ""
#: res/zrcolagui.cpp:136 zrcolagui.cpp:136
msgid "&ZRCola (De)composition"
msgstr ""
#: res/zrcolagui.cpp:136 res/zrcolagui.cpp:214 zrcolagui.cpp:136
#: zrcolagui.cpp:216
msgid "Toggle ZRCola character (De)composition"
msgstr ""
#: res/zrcolagui.cpp:140 zrcolagui.cpp:140
msgid "Tra&nslation"
msgstr ""
#: res/zrcolagui.cpp:146 zrcolagui.cpp:146
msgid "&Settings..."
msgstr ""
#: res/zrcolagui.cpp:146 zrcolagui.cpp:146
msgid "Open program configuration dialog"
msgstr ""
#: res/zrcolagui.cpp:149 zrcolagui.cpp:149
msgid "&Edit"
msgstr ""
#: res/zrcolagui.cpp:153 zrcolagui.cpp:153
msgid "&Edit Toolbar"
msgstr ""
#: res/zrcolagui.cpp:153 zrcolagui.cpp:153
msgid "Toggle edit toolbar"
msgstr ""
#: res/zrcolagui.cpp:157 zrcolagui.cpp:157
msgid "&Compose Toolbar"
msgstr ""
#: res/zrcolagui.cpp:157 zrcolagui.cpp:157
msgid "Toggle compose toolbar"
msgstr ""
#: res/zrcolagui.cpp:163 zrcolagui.cpp:163
msgid "Character Catalo&g"
msgstr ""
#: res/zrcolagui.cpp:163 zrcolagui.cpp:163
msgid "Toggle character catalog panel"
msgstr ""
#: res/zrcolagui.cpp:166 zrcolagui.cpp:166
msgid "&View"
msgstr ""
#: res/zrcolagui.cpp:170 zrcolagui.cpp:170
msgid "&Instructions..."
msgstr ""
#: res/zrcolagui.cpp:170 zrcolagui.cpp:170
msgid "Open a web site with product instructions"
msgstr ""
#: res/zrcolagui.cpp:174 zrcolagui.cpp:174
msgid "Keyboard &Shortcuts..."
msgstr ""
#: res/zrcolagui.cpp:174 zrcolagui.cpp:174
msgid "Open a list of keyboard shortcuts"
msgstr ""
#: res/zrcolagui.cpp:180 zrcolagui.cpp:180
msgid "&Request a new character..."
msgstr ""
#: res/zrcolagui.cpp:180 zrcolagui.cpp:180
msgid "Submit a request to ZRC to add a new character"
msgstr ""
#: res/zrcolagui.cpp:184 zrcolagui.cpp:184
msgid "Check for &Updates..."
msgstr ""
#: res/zrcolagui.cpp:184 zrcolagui.cpp:184
msgid "Check online for product update"
msgstr ""
#: res/zrcolagui.cpp:190 zrcolagui.cpp:190
msgid "&About..."
msgstr ""
#: res/zrcolagui.cpp:193 zrcolagui.cpp:193
msgid "&Help"
msgstr ""
#: res/zrcolagui.cpp:198 zrcolagui.cpp:198
msgid "Cut"
msgstr ""
#: res/zrcolagui.cpp:198 zrcolagui.cpp:198
msgid "Cut selection"
msgstr ""
#: res/zrcolagui.cpp:200 zrcolagui.cpp:200
msgid "Copy"
msgstr ""
#: res/zrcolagui.cpp:200 zrcolagui.cpp:200
msgid "Copy selection"
msgstr ""
#: res/zrcolagui.cpp:202 zrcolagui.cpp:202
msgid "Paste"
msgstr ""
#: res/zrcolagui.cpp:202 zrcolagui.cpp:202
msgid "Paste selection"
msgstr ""
#: res/zrcolagui.cpp:205 zrcolagui.cpp:205
msgid "Edit"
msgstr ""
#: res/zrcolagui.cpp:208 zrcolagui.cpp:208
msgid "Find Character"
msgstr ""
#: res/zrcolagui.cpp:210 zrcolagui.cpp:210
msgid "Send Composed"
msgstr ""
#: res/zrcolagui.cpp:212 zrcolagui.cpp:212
msgid "Send Decomposed"
msgstr ""
#: res/zrcolagui.cpp:214 zrcolagui.cpp:216
msgid "ZRCola (De)composition"
msgstr ""
#: res/zrcolagui.cpp:221 zrcolagui.cpp:223
msgid "Compose"
msgstr ""
#: res/zrcolagui.cpp:225 zrcolagui.cpp:227
msgid "Character Catalog"
msgstr ""
#: res/zrcolagui.cpp:229 zrcolagui.cpp:231
msgid "(De)Composer"
msgstr ""
#: res/zrcolagui.cpp:270 zrcolagui.cpp:272
msgid "Decomposed Text"
msgstr ""
#: res/zrcolagui.cpp:290 zrcolagui.cpp:292
msgid "Decomposed Unicode Dump"
msgstr ""
#: res/zrcolagui.cpp:317 zrcolagui.cpp:319
msgid "Composed Text"
msgstr ""
#: res/zrcolagui.cpp:337 zrcolagui.cpp:339
msgid "Composed Unicode Dump"
msgstr ""
#: res/zrcolagui.cpp:391 zrcolagui.cpp:393
msgid "Select category to display"
msgstr ""
#: res/zrcolagui.cpp:425 zrcolagui.cpp:427
msgid "Show &All"
msgstr ""
#: res/zrcolagui.cpp:426 zrcolagui.cpp:428
msgid "Toggle display of less frequent characters"
msgstr ""
#: res/zrcolagui.cpp:466 zrcolagui.cpp:468
msgid "&Browse"
msgstr ""
#: res/zrcolagui.cpp:473 zrcolagui.cpp:475
msgid ""
"Full or partial terms from Unicode character description (in English) to "
"search for"
msgstr ""
#: res/zrcolagui.cpp:477 zrcolagui.cpp:479
msgid "Search Options"
msgstr ""
#: res/zrcolagui.cpp:478 zrcolagui.cpp:480
msgid "Shows/hides additional search options"
msgstr ""
#: res/zrcolagui.cpp:490 zrcolagui.cpp:492
msgid "List of Unicode character categories to search in"
msgstr ""
#: res/zrcolagui.cpp:497 zrcolagui.cpp:499
msgid "All"
msgstr ""
#: res/zrcolagui.cpp:498 zrcolagui.cpp:500
msgid "Select all categories"
msgstr ""
#: res/zrcolagui.cpp:502 zrcolagui.cpp:504
msgid "None"
msgstr ""
#: res/zrcolagui.cpp:503 zrcolagui.cpp:505
msgid "Clear category selection"
msgstr ""
#: res/zrcolagui.cpp:507 zrcolagui.cpp:509
msgid "Invert"
msgstr ""
#: res/zrcolagui.cpp:508 zrcolagui.cpp:510
msgid "Invert category selection"
msgstr ""
#: res/zrcolagui.cpp:547 zrcolagui.cpp:549
msgid "Character search results"
msgstr ""
#: res/zrcolagui.cpp:557 zrcolagui.cpp:559
msgid "Re&cently Used"
msgstr ""
#: res/zrcolagui.cpp:585 zrcolagui.cpp:587
msgid "List of recently inserted characters"
msgstr ""
#: res/zrcolagui.cpp:599 zrcolagui.cpp:601
msgid "Preview"
msgstr ""
#: res/zrcolagui.cpp:604 zrcolagui.cpp:606
msgid "U+"
msgstr "U+"
#: res/zrcolagui.cpp:609 zrcolagui.cpp:611
msgid "Unicode hexadecimal code"
msgstr ""
#: res/zrcolagui.cpp:614 zrcolagui.cpp:616
msgid "Keyboard shortcut in Composer window"
msgstr ""
#: res/zrcolagui.cpp:649 zrcolagui.cpp:651
msgid "Character preview"
msgstr ""
#: res/zrcolagui.cpp:654 zrcolagui.cpp:656
msgid "Unicode character description"
msgstr ""
#: res/zrcolagui.cpp:659 zrcolagui.cpp:661
msgid "Character tags"
msgstr ""
#: res/zrcolagui.cpp:664 zrcolagui.cpp:666
msgid "Unicode character category"
msgstr ""
#: res/zrcolagui.cpp:671 zrcolagui.cpp:673
msgid "« Back"
msgstr ""
#: res/zrcolagui.cpp:673 zrcolagui.cpp:675
msgid "To previously viewed character"
msgstr ""
#: res/zrcolagui.cpp:677 zrcolagui.cpp:679
msgid "Forward »"
msgstr ""
#: res/zrcolagui.cpp:679 zrcolagui.cpp:681
msgid "To following viewed character"
msgstr ""
#: res/zrcolagui.cpp:690 zrcolagui.cpp:692
msgid "Re&lated"
msgstr ""
#: res/zrcolagui.cpp:717 zrcolagui.cpp:719
msgid "List of related characters"
msgstr ""
#: res/zrcolagui.cpp:736 zrcolagui.cpp:738
msgid "&Insert"
msgstr ""
#: res/zrcolagui.cpp:740 zrcolagui.cpp:742
msgid "Insert character into decomposed text"
msgstr ""
#: res/zrcolagui.cpp:813 zrcolagui.cpp:818
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 ""
#: res/zrcolagui.cpp:817 zrcolagui.cpp:822
msgid "Select language &automatically according to selected keyboard"
msgstr ""
#: res/zrcolagui.cpp:820 zrcolagui.cpp:825
msgid "&Manually select the language from the list below:"
msgstr ""
#: res/zrcolagui.cpp:831 zrcolagui.cpp:836
msgid "Text Language"
msgstr ""
#: res/zrcolagui.cpp:836 zrcolagui.cpp:841
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 ""
#: res/zrcolagui.cpp:840 zrcolagui.cpp:845
msgid "Start ZRCola &automatically on logon"
msgstr ""
#: res/zrcolagui.cpp:846 zrcolagui.cpp:851
msgid "Startup"
msgstr ""
#: res/zrcolagui.cpp:913 res/zrcolagui.h:113 zrcolaapp.cpp:72
#: zrcolafrm.cpp:128 zrcolagui.cpp:918 zrcolagui.h:113
#: MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Debug.Shortcut-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4
#: MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Debug.Shortcut-2.idtx:4
#: MSIBuild/en_US.x64.Release.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
msgid "ZRCola"
msgstr "ZRCola"
#: res/zrcolagui.cpp:924 zrcolagui.cpp:929
msgid ""
"Program and Website Editor: Janoš Ježovnik\n"
"Development: Amebis, d. o. o., Kamnik\n"
"Translation into English: Janoš Ježovnik\n"
"Translation into Russian language: Domen Krvina, Silvo Torkar, Anastasia Plotnikova\n"
"Development and maintenance of the original program (20042015): Peter Weiss"
msgstr ""
#: res/zrcolagui.cpp:932 zrcolagui.cpp:937
msgid "zrcola.zrc-sazu.si"
msgstr ""
#: res/zrcolagui.cpp:938 zrcolagui.cpp:943
msgid ""
"Texts made using ZRCola have to include in a footnote or some other "
"appropriate part of the publication the note below:"
msgstr ""
#: res/zrcolagui.cpp:942 zrcolagui.cpp:947
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 ""
#: res/zrcolagui.cpp:983 zrcolagui.cpp:988
msgid "Log"
msgstr ""
#: res/zrcolagui.cpp:999 zrcolagui.cpp:1004
msgid "Quit and &Update..."
msgstr ""
#: res/zrcolagui.cpp:1001 zrcolagui.cpp:1006
msgid "Exit this program and launch product update"
msgstr ""
#: res/zrcolagui.cpp:1005 zrcolagui.cpp:1010
msgid "&Close"
msgstr ""
#: res/zrcolagui.cpp:1006 zrcolagui.cpp:1011
msgid "Close this window"
msgstr ""
#: res/zrcolagui.cpp:1043 zrcolachrreq.cpp:49 zrcolagui.cpp:1048
msgid "Character"
msgstr ""
#: res/zrcolagui.cpp:1045 zrcolagui.cpp:1050
msgid "Enter the &character you would like to request:"
msgstr ""
#: res/zrcolagui.cpp:1059 zrcolagui.cpp:1064
msgid "Decomposed character to request"
msgstr ""
#: res/zrcolagui.cpp:1063 zrcolagui.cpp:1068
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 ""
#: res/zrcolagui.cpp:1071 zrcolachrreq.cpp:58 zrcolagui.cpp:1076
msgid "Context"
msgstr ""
#: res/zrcolagui.cpp:1073 zrcolagui.cpp:1078
msgid ""
"The &context, examples or description why and where the character is "
"required:"
msgstr ""
#: res/zrcolagui.cpp:1079 zrcolagui.cpp:1084
msgid "Additional notes for character request"
msgstr ""
#: res/zrcolagui.cpp:1086 zrcolagui.cpp:1091
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."
msgstr ""
#: res/zrcolagui.cpp:1128 zrcolagui.cpp:1133
msgid "Translation"
msgstr ""
#: res/zrcolagui.cpp:1130 zrcolagui.cpp:1135
msgid ""
"ZRCola offers multiple text translations that can be arranged in a sequence.\n"
"Please select desired translations and the order they are applied."
msgstr ""
#: res/zrcolagui.cpp:1140 zrcolagui.cpp:1145
msgid "A&vailable:"
msgstr ""
#: res/zrcolagui.cpp:1155 zrcolagui.cpp:1160
msgid ">"
msgstr ">"
#: res/zrcolagui.cpp:1158 zrcolagui.cpp:1163
msgid "<"
msgstr "<"
#: res/zrcolagui.cpp:1167 zrcolagui.cpp:1172
msgid "&Selected:"
msgstr ""
#: res/zrcolagui.cpp:1185 zrcolagui.cpp:1190
msgid "Up"
msgstr ""
#: res/zrcolagui.cpp:1188 zrcolagui.cpp:1193
msgid "Down"
msgstr ""
#: res/zrcolagui.h:254 zrcolagui.h:254
msgid "Character Search"
msgstr ""
#: res/zrcolagui.h:290 zrcolagui.h:290
msgid "Settings"
msgstr ""
#: res/zrcolagui.h:316 zrcolagui.h:316
msgid "About ZRCola"
msgstr ""
#: res/zrcolagui.h:341 zrcolagui.h:341 zrcolaupdater.cpp:94
msgid "Product Update"
msgstr ""
#: res/zrcolagui.h:370 zrcolachrreq.cpp:64 zrcolagui.h:370
msgid "Request a New Character"
msgstr ""
#: res/zrcolagui.h:412 zrcolagui.h:412
msgid "Custom Translation Sequence"
msgstr ""
#: zrcolaabout.cpp:31
#, c-format
msgid "© 2004-%s ZRC SAZU"
msgstr ""
#: zrcolachrslct.cpp:89
msgid "Too many digits in Unicode."
msgstr ""
#: zrcolachrslct.cpp:89 zrcolachrslct.cpp:107
msgid "Validation conflict"
msgstr "Fehler bei der Validierung"
#: zrcolachrslct.cpp:107
#, c-format
msgid "Invalid character in Unicode found: %c"
msgstr ""
#: zrcolachrslct.cpp:214 zrcolachrslct.cpp:388 zrcolachrslct.cpp:885
msgid "▸ Search Options"
msgstr ""
#: zrcolachrslct.cpp:326
msgid ", "
msgstr ""
#: zrcolachrslct.cpp:391 zrcolachrslct.cpp:882
msgid "▾ Search Options"
msgstr ""
#: zrcolafrm.cpp:94
msgid "No Translation"
msgstr ""
#: zrcolafrm.cpp:107
msgid "Custom Translation..."
msgstr ""
#: zrcolafrm.cpp:215
msgid ""
"ZRCola keyboard shortcut Win+F5 could not be registered. Some functionality "
"will not be available."
msgstr ""
#: zrcolafrm.cpp:215 zrcolafrm.cpp:217
msgid "Warning"
msgstr ""
#: zrcolafrm.cpp:217
msgid ""
"ZRCola keyboard shortcut Win+F6 could not be registered. Some functionality "
"will not be available."
msgstr ""
#: zrcolafrm.cpp:486
msgid "http://zrcola.zrc-sazu.si/en/info/instructions/"
msgstr "http://zrcola.zrc-sazu.si/de/info/instructions/"
#: zrcolafrm.cpp:510
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"
#: zrcolakeyhndlr.cpp:44
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:87
msgid "Start ZRCola automatically on logon"
msgstr ""
#: zrcolatranseq.cpp:63
#, c-format
msgid "Unknown translation (%u)"
msgstr ""
#: zrcolaupdater.cpp:94
msgid ""
"This program will now close and the upgrade will be launched.\n"
"Are you sure?"
msgstr ""
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:4
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:10
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:15
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:10
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:15
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:4
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:10
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:15
#: MSIBuild/en_US.x64.Release.Control-2.idtx:4
#: MSIBuild/en_US.x64.Release.Control-2.idtx:10
#: MSIBuild/en_US.x64.Release.Control-2.idtx:15
msgid "binUIHeader.bmp"
msgstr "binUIHeader.bmp"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:5
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:5
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:5
#: MSIBuild/en_US.x64.Release.Control-2.idtx:5
msgid "[DlgTitleFont][SimpleProductName] Tutorial : Starting"
msgstr ""
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:6
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:6
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:6
#: MSIBuild/en_US.x64.Release.Control-2.idtx:6
msgid "bintutorial1.bmp"
msgstr "bintutorial1.bmp"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:7
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:7
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:7
#: MSIBuild/en_US.x64.Release.Control-2.idtx:7
msgid ""
"When configured, ZRCola starts at system startup and runs in the background."
" If needed, it can be brought up by pressing the combination Win+F5."
msgstr ""
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:8
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:8
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:8
#: MSIBuild/en_US.x64.Release.Control-2.idtx:8
msgid ""
"IMPORTANT: Upon pressing the combination Win+F5 the program memorises the "
"location of the cursor in the text. If ZRCola is brought to the foreground "
"without using the aforementioned combination of keys, the program won't know"
" where to insert the special characters!"
msgstr ""
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:9
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:14
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:19
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:9
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:14
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:19
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:9
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:14
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:19
#: MSIBuild/en_US.x64.Release.Control-2.idtx:9
#: MSIBuild/en_US.x64.Release.Control-2.idtx:14
#: MSIBuild/en_US.x64.Release.Control-2.idtx:19
msgid "&Continue"
msgstr ""
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:11
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:11
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:11
#: MSIBuild/en_US.x64.Release.Control-2.idtx:11
msgid "[DlgTitleFont][SimpleProductName] Tutorial : Composition"
msgstr ""
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:12
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:12
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:12
#: MSIBuild/en_US.x64.Release.Control-2.idtx:12
msgid "bintutorial2.bmp"
msgstr "bintutorial2.bmp"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:13
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:13
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:13
#: MSIBuild/en_US.x64.Release.Control-2.idtx:13
msgid ""
"The string of basic and substitute characters is entered into the upper "
"input window of the program. In the window below the resulted special "
"characters are displayed. To insert them in the text, the F5 key is used."
msgstr ""
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:16
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:16
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:16
#: MSIBuild/en_US.x64.Release.Control-2.idtx:16
msgid "[DlgTitleFont][SimpleProductName] Tutorial : Entering Characters"
msgstr ""
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:17
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:17
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:17
#: MSIBuild/en_US.x64.Release.Control-2.idtx:17
msgid "bintutorial3.bmp"
msgstr "bintutorial3.bmp"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:18
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:18
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:18
#: MSIBuild/en_US.x64.Release.Control-2.idtx:18
msgid ""
"Characters can be entered using keyboard shortcuts, the character catalogue "
"(F4) or the character finding tool (F8)."
msgstr ""
#: MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Debug.Shortcut-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4
#: MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Debug.Shortcut-2.idtx:4
#: MSIBuild/en_US.x64.Release.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
msgid "Input system for linguistic use"
msgstr ""

834
ZRCola/locale/ru_RU.po Normal file
View File

@@ -0,0 +1,834 @@
# Translators:
# Simon Rozman <simon@rozman.si>, 2018
# Janoš Ježovnik, 2019
#
msgid ""
msgstr ""
"Project-Id-Version: ZRCola\n"
"POT-Creation-Date: 2019-04-01 11:13+0200\n"
"PO-Revision-Date: 2018-09-19 07:18+0000\n"
"Last-Translator: Janoš Ježovnik, 2019\n"
"Language-Team: Russian (Russia) (https://www.transifex.com/amebis/teams/91592/ru_RU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ru_RU\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
"X-Generator: Poedit 2.2.1\n"
"X-Poedit-Basepath: ..\n"
"X-Poedit-KeywordsList: _\n"
"X-Poedit-SearchPath-0: .\n"
"X-Poedit-SourceCharset: UTF-8\n"
#: res/zrcolagui.cpp:42 zrcolagui.cpp:42
msgid "E&xit"
msgstr "Вы&ход"
#: res/zrcolagui.cpp:42 zrcolagui.cpp:42
msgid "Quit this program"
msgstr "Выйти из программы"
#: res/zrcolagui.cpp:45 zrcolagui.cpp:45
msgid "&Program"
msgstr "П&рограмма"
#: res/zrcolagui.cpp:78 zrcolagui.cpp:78
msgid "Select &All"
msgstr "Выделить в&се"
#: res/zrcolagui.cpp:78 zrcolagui.cpp:78
msgid "Select all text"
msgstr "Выделить весь текст"
#: res/zrcolagui.cpp:84 zrcolagui.cpp:84
msgid "Find C&haracter..."
msgstr "Поиск &знака ..."
#: res/zrcolagui.cpp:84 res/zrcolagui.cpp:208 zrcolagui.cpp:84
#: zrcolagui.cpp:208
msgid "Toggle character search to select character to insert into text"
msgstr "Переключить поиск знаков для вставки выбранного знака в текст"
#: res/zrcolagui.cpp:90 zrcolagui.cpp:90
msgid "&Send Composed"
msgstr "&Послать составленное"
#: res/zrcolagui.cpp:90 res/zrcolagui.cpp:210 zrcolagui.cpp:90
#: zrcolagui.cpp:210
msgid "Send composed text to source window"
msgstr "Послать составленный текст в исходное окно"
#: res/zrcolagui.cpp:99 zrcolagui.cpp:99
msgid "Copy Composed and &Return"
msgstr "Копировать составленное и &возвратиться"
#: res/zrcolagui.cpp:99 zrcolagui.cpp:99
msgid "Copy composed text to clipboard and return focus to source window"
msgstr ""
"Копировать составленный текст в буфер обмена и возвратить фокус в исходное "
"окно"
#: res/zrcolagui.cpp:108 zrcolagui.cpp:108
msgid "Send &Decomposed"
msgstr "Послать &разобранное"
#: res/zrcolagui.cpp:108 res/zrcolagui.cpp:212 zrcolagui.cpp:108
#: zrcolagui.cpp:212
msgid "Send decomposed text to source window"
msgstr "Послать разобранный текст в исходное окно"
#: res/zrcolagui.cpp:117 zrcolagui.cpp:117
msgid "Copy Decomposed and Re&turn"
msgstr "Копировать разобранное и возв&ратиться"
#: res/zrcolagui.cpp:117 zrcolagui.cpp:117
msgid "Copy decomposed text to clipboard and return focus to source window"
msgstr ""
"Копировать разобранный текст в буфер обмена и возвратить фокус в исходное "
"окно"
#: res/zrcolagui.cpp:126 zrcolagui.cpp:126
msgid "Abort (De)composition"
msgstr "Прервать составление/разборку"
#: res/zrcolagui.cpp:126 zrcolagui.cpp:126
msgid "Abort composition and return focus to source window"
msgstr "Прервать составление и возвратить фокус в исходное окно"
#: res/zrcolagui.cpp:136 zrcolagui.cpp:136
msgid "&ZRCola (De)composition"
msgstr "Составление/разборка &ZRCola "
#: res/zrcolagui.cpp:136 res/zrcolagui.cpp:214 zrcolagui.cpp:136
#: zrcolagui.cpp:216
msgid "Toggle ZRCola character (De)composition"
msgstr "Переключить составление/разборку ZRCola"
#: res/zrcolagui.cpp:140 zrcolagui.cpp:140
msgid "Tra&nslation"
msgstr "Тра&нслитерация"
#: res/zrcolagui.cpp:146 zrcolagui.cpp:146
msgid "&Settings..."
msgstr "&Настройки ..."
#: res/zrcolagui.cpp:146 zrcolagui.cpp:146
msgid "Open program configuration dialog"
msgstr "Открыть диалог конфигурации программы"
#: res/zrcolagui.cpp:149 zrcolagui.cpp:149
msgid "&Edit"
msgstr "&Правка"
#: res/zrcolagui.cpp:153 zrcolagui.cpp:153
msgid "&Edit Toolbar"
msgstr "Панель инструментов для &правки"
#: res/zrcolagui.cpp:153 zrcolagui.cpp:153
msgid "Toggle edit toolbar"
msgstr "Переключить панель инструментов для правки"
#: res/zrcolagui.cpp:157 zrcolagui.cpp:157
msgid "&Compose Toolbar"
msgstr "Панель инструментов для &составления"
#: res/zrcolagui.cpp:157 zrcolagui.cpp:157
msgid "Toggle compose toolbar"
msgstr "Переключить панель инструментов для составления"
#: res/zrcolagui.cpp:163 zrcolagui.cpp:163
msgid "Character Catalo&g"
msgstr "Список &знаков"
#: res/zrcolagui.cpp:163 zrcolagui.cpp:163
msgid "Toggle character catalog panel"
msgstr "Переключить список знаков"
#: res/zrcolagui.cpp:166 zrcolagui.cpp:166
msgid "&View"
msgstr "&Вид"
#: res/zrcolagui.cpp:170 zrcolagui.cpp:170
msgid "&Instructions..."
msgstr "&Инструкции ..."
#: res/zrcolagui.cpp:170 zrcolagui.cpp:170
msgid "Open a web site with product instructions"
msgstr "Открыть сайт с инструкциями по продукту"
#: res/zrcolagui.cpp:174 zrcolagui.cpp:174
msgid "Keyboard &Shortcuts..."
msgstr "Сочетания &клавиш ..."
#: res/zrcolagui.cpp:174 zrcolagui.cpp:174
msgid "Open a list of keyboard shortcuts"
msgstr "Открыть список сочетаний клавиш"
#: res/zrcolagui.cpp:180 zrcolagui.cpp:180
msgid "&Request a new character..."
msgstr "&Запрос нового знака ..."
#: res/zrcolagui.cpp:180 zrcolagui.cpp:180
msgid "Submit a request to ZRC to add a new character"
msgstr "Отправить запрос нового знака"
#: res/zrcolagui.cpp:184 zrcolagui.cpp:184
msgid "Check for &Updates..."
msgstr "Проверить наличие &обновлений ..."
#: res/zrcolagui.cpp:184 zrcolagui.cpp:184
msgid "Check online for product update"
msgstr "Проверить наличие обновлений онлайн"
#: res/zrcolagui.cpp:190 zrcolagui.cpp:190
msgid "&About..."
msgstr "О прогр&амме ..."
#: res/zrcolagui.cpp:193 zrcolagui.cpp:193
msgid "&Help"
msgstr "&Справка"
#: res/zrcolagui.cpp:198 zrcolagui.cpp:198
msgid "Cut"
msgstr "Вырезать"
#: res/zrcolagui.cpp:198 zrcolagui.cpp:198
msgid "Cut selection"
msgstr "Вырезать выбор"
#: res/zrcolagui.cpp:200 zrcolagui.cpp:200
msgid "Copy"
msgstr "Копировать"
#: res/zrcolagui.cpp:200 zrcolagui.cpp:200
msgid "Copy selection"
msgstr "Копировать выбор"
#: res/zrcolagui.cpp:202 zrcolagui.cpp:202
msgid "Paste"
msgstr "Вставить"
#: res/zrcolagui.cpp:202 zrcolagui.cpp:202
msgid "Paste selection"
msgstr "Вставить выбор"
#: res/zrcolagui.cpp:205 zrcolagui.cpp:205
msgid "Edit"
msgstr "Правка"
#: res/zrcolagui.cpp:208 zrcolagui.cpp:208
msgid "Find Character"
msgstr "Поиск знака"
#: res/zrcolagui.cpp:210 zrcolagui.cpp:210
msgid "Send Composed"
msgstr "Послать составленное (F5)"
#: res/zrcolagui.cpp:212 zrcolagui.cpp:212
msgid "Send Decomposed"
msgstr "Послать разобранное (F6)"
#: res/zrcolagui.cpp:214 zrcolagui.cpp:216
msgid "ZRCola (De)composition"
msgstr "ZRCola составление/разборка"
#: res/zrcolagui.cpp:221 zrcolagui.cpp:223
msgid "Compose"
msgstr "Составить"
#: res/zrcolagui.cpp:225 zrcolagui.cpp:227
msgid "Character Catalog"
msgstr "Список знаков"
#: res/zrcolagui.cpp:229 zrcolagui.cpp:231
msgid "(De)Composer"
msgstr "(Де)Композитор"
#: res/zrcolagui.cpp:270 zrcolagui.cpp:272
msgid "Decomposed Text"
msgstr "Разобранний текст"
#: res/zrcolagui.cpp:290 zrcolagui.cpp:292
msgid "Decomposed Unicode Dump"
msgstr "Дамп разобранного Юнукода"
#: res/zrcolagui.cpp:317 zrcolagui.cpp:319
msgid "Composed Text"
msgstr "Составленный текст"
#: res/zrcolagui.cpp:337 zrcolagui.cpp:339
msgid "Composed Unicode Dump"
msgstr "Дамп составленного Юникода"
#: res/zrcolagui.cpp:391 zrcolagui.cpp:393
msgid "Select category to display"
msgstr "Выделить категории для отображения"
#: res/zrcolagui.cpp:425 zrcolagui.cpp:427
msgid "Show &All"
msgstr "Показать &все"
#: res/zrcolagui.cpp:426 zrcolagui.cpp:428
msgid "Toggle display of less frequent characters"
msgstr "Переключить отображение редко использованных знаков"
#: res/zrcolagui.cpp:466 zrcolagui.cpp:468
msgid "&Browse"
msgstr "&Обзор"
#: res/zrcolagui.cpp:473 zrcolagui.cpp:475
msgid ""
"Full or partial terms from Unicode character description (in English) to "
"search for"
msgstr ""
"Полное либо частичное описание знака Юникод (на английском) для поиска"
#: res/zrcolagui.cpp:477 zrcolagui.cpp:479
msgid "Search Options"
msgstr "Опции поиска"
#: res/zrcolagui.cpp:478 zrcolagui.cpp:480
msgid "Shows/hides additional search options"
msgstr "Показать/скрыть дополнительные опции поиска"
#: res/zrcolagui.cpp:490 zrcolagui.cpp:492
msgid "List of Unicode character categories to search in"
msgstr "Список категории Юникод для проведения поиска"
#: res/zrcolagui.cpp:497 zrcolagui.cpp:499
msgid "All"
msgstr "Все"
#: res/zrcolagui.cpp:498 zrcolagui.cpp:500
msgid "Select all categories"
msgstr "Выбрать все категории"
#: res/zrcolagui.cpp:502 zrcolagui.cpp:504
msgid "None"
msgstr "Ничего"
#: res/zrcolagui.cpp:503 zrcolagui.cpp:505
msgid "Clear category selection"
msgstr "Очистить выбор категории"
#: res/zrcolagui.cpp:507 zrcolagui.cpp:509
msgid "Invert"
msgstr "Обратить"
#: res/zrcolagui.cpp:508 zrcolagui.cpp:510
msgid "Invert category selection"
msgstr "Обратить выбор категории"
#: res/zrcolagui.cpp:547 zrcolagui.cpp:549
msgid "Character search results"
msgstr "Результаты поиска знаков"
#: res/zrcolagui.cpp:557 zrcolagui.cpp:559
msgid "Re&cently Used"
msgstr "&Недавно использованное"
#: res/zrcolagui.cpp:585 zrcolagui.cpp:587
msgid "List of recently inserted characters"
msgstr "Список недавно вставленных знаков"
#: res/zrcolagui.cpp:599 zrcolagui.cpp:601
msgid "Preview"
msgstr "Просмотр"
#: res/zrcolagui.cpp:604 zrcolagui.cpp:606
msgid "U+"
msgstr "U+"
#: res/zrcolagui.cpp:609 zrcolagui.cpp:611
msgid "Unicode hexadecimal code"
msgstr "Шестнадцатеричный код Юникод"
#: res/zrcolagui.cpp:614 zrcolagui.cpp:616
msgid "Keyboard shortcut in Composer window"
msgstr "Сочетание клавиш в окне композитора"
#: res/zrcolagui.cpp:649 zrcolagui.cpp:651
msgid "Character preview"
msgstr "Просмотр знака"
#: res/zrcolagui.cpp:654 zrcolagui.cpp:656
msgid "Unicode character description"
msgstr "Описание знака Юникод"
#: res/zrcolagui.cpp:659 zrcolagui.cpp:661
msgid "Character tags"
msgstr "Ключевые слова"
#: res/zrcolagui.cpp:664 zrcolagui.cpp:666
msgid "Unicode character category"
msgstr "Категория знака Юникод"
#: res/zrcolagui.cpp:671 zrcolagui.cpp:673
msgid "« Back"
msgstr "« Назад"
#: res/zrcolagui.cpp:673 zrcolagui.cpp:675
msgid "To previously viewed character"
msgstr "К предыдущему знаку"
#: res/zrcolagui.cpp:677 zrcolagui.cpp:679
msgid "Forward »"
msgstr "Далее »"
#: res/zrcolagui.cpp:679 zrcolagui.cpp:681
msgid "To following viewed character"
msgstr "К следующему знаку"
#: res/zrcolagui.cpp:690 zrcolagui.cpp:692
msgid "Re&lated"
msgstr "&Связанное"
#: res/zrcolagui.cpp:717 zrcolagui.cpp:719
msgid "List of related characters"
msgstr "Список связанных знаков"
#: res/zrcolagui.cpp:736 zrcolagui.cpp:738
msgid "&Insert"
msgstr "&Вставить"
#: res/zrcolagui.cpp:740 zrcolagui.cpp:742
msgid "Insert character into decomposed text"
msgstr "Вставка знака в разобранный текст"
#: res/zrcolagui.cpp:813 zrcolagui.cpp:818
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 ""
"Некоторые знаки использованного языка нельзя разбирать.\n"
"Для оптимальной разборки вы должны настроить правильный язык."
#: res/zrcolagui.cpp:817 zrcolagui.cpp:822
msgid "Select language &automatically according to selected keyboard"
msgstr "&Автоматически установить язык на основе выбранной клавиатуры"
#: res/zrcolagui.cpp:820 zrcolagui.cpp:825
msgid "&Manually select the language from the list below:"
msgstr "&Вручную выбрать язык со списка:"
#: res/zrcolagui.cpp:831 zrcolagui.cpp:836
msgid "Text Language"
msgstr "Язык текста"
#: res/zrcolagui.cpp:836 zrcolagui.cpp:841
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 возможен при каждом запуске компьютера.\n"
"После запуска система ZRCola доступна на панели задач либо через нажатие сочетания клавиш Win+F5 и Win+F6."
#: res/zrcolagui.cpp:840 zrcolagui.cpp:845
msgid "Start ZRCola &automatically on logon"
msgstr "&Автоматически запустить систему ZRCola при запуске компьютера"
#: res/zrcolagui.cpp:846 zrcolagui.cpp:851
msgid "Startup"
msgstr "Запуск"
#: res/zrcolagui.cpp:913 res/zrcolagui.h:113 zrcolaapp.cpp:72
#: zrcolafrm.cpp:128 zrcolagui.cpp:918 zrcolagui.h:113
#: MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Debug.Shortcut-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4
#: MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Debug.Shortcut-2.idtx:4
#: MSIBuild/en_US.x64.Release.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
msgid "ZRCola"
msgstr "ZRCola"
#: res/zrcolagui.cpp:924 zrcolagui.cpp:929
msgid ""
"Program and Website Editor: Janoš Ježovnik\n"
"Development: Amebis, d. o. o., Kamnik\n"
"Translation into English: Janoš Ježovnik\n"
"Translation into Russian language: Domen Krvina, Silvo Torkar, Anastasia Plotnikova\n"
"Development and maintenance of the original program (20042015): Peter Weiss"
msgstr ""
"Администратор программы и сайта: Янош Ежовник (Janoš Ježovnik)\n"
"Разработка: Amebis, d. o. o., Kamnik\n"
"Перевод на английский яазык: Янош Ежовник (Janoš Ježovnik)\n"
"Перевод на русский язык: Домен Крвина (Domen Krvina), Силво Торкар (Silvo Torkar), Анастасия Плотникова\n"
"Разработка in техническая поддержка первоначальной программы (20042015): Петер Вейсс (Peter Weiss)"
#: res/zrcolagui.cpp:932 zrcolagui.cpp:937
msgid "zrcola.zrc-sazu.si"
msgstr "zrcola.zrc-sazu.si"
#: res/zrcolagui.cpp:938 zrcolagui.cpp:943
msgid ""
"Texts made using ZRCola have to include in a footnote or some other "
"appropriate part of the publication the note below:"
msgstr ""
"Текст, созданный с помощью системы ZRCola, должен в примечании или другом "
"соответствующем месте в публикации сопровождаться следующей записью:"
#: res/zrcolagui.cpp:942 zrcolagui.cpp:947
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м."
#: res/zrcolagui.cpp:983 zrcolagui.cpp:988
msgid "Log"
msgstr "Журнал"
#: res/zrcolagui.cpp:999 zrcolagui.cpp:1004
msgid "Quit and &Update..."
msgstr "Выйти и &обновить ..."
#: res/zrcolagui.cpp:1001 zrcolagui.cpp:1006
msgid "Exit this program and launch product update"
msgstr "Выйти из программы и запустить обновление"
#: res/zrcolagui.cpp:1005 zrcolagui.cpp:1010
msgid "&Close"
msgstr "&Закрыть"
#: res/zrcolagui.cpp:1006 zrcolagui.cpp:1011
msgid "Close this window"
msgstr "Закрыть это окно"
#: res/zrcolagui.cpp:1043 zrcolachrreq.cpp:49 zrcolagui.cpp:1048
msgid "Character"
msgstr "Знак"
#: res/zrcolagui.cpp:1045 zrcolagui.cpp:1050
msgid "Enter the &character you would like to request:"
msgstr "Ввести запрашиваемый &знак:"
#: res/zrcolagui.cpp:1059 zrcolagui.cpp:1064
msgid "Decomposed character to request"
msgstr "Запрашиваемый разобранный знак"
#: res/zrcolagui.cpp:1063 zrcolagui.cpp:1068
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 ""
"Пожалуйста, используйте разобранный формат.\n"
"Для ввода запрашиваемого знака можно использовать сочетания клавиш системы ZRCola либо копировать и вставить знаки из окна для разборки."
#: res/zrcolagui.cpp:1071 zrcolachrreq.cpp:58 zrcolagui.cpp:1076
msgid "Context"
msgstr "Контекст"
#: res/zrcolagui.cpp:1073 zrcolagui.cpp:1078
msgid ""
"The &context, examples or description why and where the character is "
"required:"
msgstr ""
"&Контекст, примеры либо описание запрашиваемого знака или объяснение, зачем "
"он нужен:"
#: res/zrcolagui.cpp:1079 zrcolagui.cpp:1084
msgid "Additional notes for character request"
msgstr "Дополнительные примечания"
#: res/zrcolagui.cpp:1086 zrcolagui.cpp:1091
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."
msgstr ""
"После нажатия на кнопку «OK» ваша почтовая программа должна открытся для отправки запроса нового знака администратору системы ZRCola.\n"
"Возможно, не все знаки будут отображены правильно, но все информации будут закодированны таким образом, что администратор сможет их правильно прочитать."
#: res/zrcolagui.cpp:1128 zrcolagui.cpp:1133
msgid "Translation"
msgstr "Преобразование"
#: res/zrcolagui.cpp:1130 zrcolagui.cpp:1135
msgid ""
"ZRCola offers multiple text translations that can be arranged in a sequence.\n"
"Please select desired translations and the order they are applied."
msgstr ""
"ZRCola предоставляет различные преобразования текста, последовательность которых можно свободно изменять.\n"
"Пожалуйста, выбрать желаемые преобразования и порядок их применения."
#: res/zrcolagui.cpp:1140 zrcolagui.cpp:1145
msgid "A&vailable:"
msgstr "&Доступное:"
#: res/zrcolagui.cpp:1155 zrcolagui.cpp:1160
msgid ">"
msgstr ">"
#: res/zrcolagui.cpp:1158 zrcolagui.cpp:1163
msgid "<"
msgstr "<"
#: res/zrcolagui.cpp:1167 zrcolagui.cpp:1172
msgid "&Selected:"
msgstr "&Выбранное:"
#: res/zrcolagui.cpp:1185 zrcolagui.cpp:1190
msgid "Up"
msgstr "Up"
#: res/zrcolagui.cpp:1188 zrcolagui.cpp:1193
msgid "Down"
msgstr "Down"
#: res/zrcolagui.h:254 zrcolagui.h:254
msgid "Character Search"
msgstr "Поиск знака"
#: res/zrcolagui.h:290 zrcolagui.h:290
msgid "Settings"
msgstr "Настройки"
#: res/zrcolagui.h:316 zrcolagui.h:316
msgid "About ZRCola"
msgstr "О системе ZRCola"
#: res/zrcolagui.h:341 zrcolagui.h:341 zrcolaupdater.cpp:94
msgid "Product Update"
msgstr "Обновление продукта"
#: res/zrcolagui.h:370 zrcolachrreq.cpp:64 zrcolagui.h:370
msgid "Request a New Character"
msgstr "Запрос нового знака"
#: res/zrcolagui.h:412 zrcolagui.h:412
msgid "Custom Translation Sequence"
msgstr "Настраиваемая последовательность преобразований"
#: zrcolaabout.cpp:31
#, c-format
msgid "© 2004-%s ZRC SAZU"
msgstr "© 2004%s ZRC SAZU"
#: zrcolachrslct.cpp:89
msgid "Too many digits in Unicode."
msgstr "Слишком много цифр в записи Unicode."
#: zrcolachrslct.cpp:89 zrcolachrslct.cpp:107
msgid "Validation conflict"
msgstr "Конфликт проверки"
#: zrcolachrslct.cpp:107
#, c-format
msgid "Invalid character in Unicode found: %c"
msgstr "Недействительный знак в записи Unicode: %c"
#: zrcolachrslct.cpp:214 zrcolachrslct.cpp:388 zrcolachrslct.cpp:885
msgid "▸ Search Options"
msgstr "▸ Опции поиска"
#: zrcolachrslct.cpp:326
msgid ", "
msgstr ", "
#: zrcolachrslct.cpp:391 zrcolachrslct.cpp:882
msgid "▾ Search Options"
msgstr "▾ Опции поиска"
#: zrcolafrm.cpp:94
msgid "No Translation"
msgstr "Без транслитерации"
#: zrcolafrm.cpp:107
msgid "Custom Translation..."
msgstr "Настраиваемое преобразование ..."
#: zrcolafrm.cpp:215
msgid ""
"ZRCola keyboard shortcut Win+F5 could not be registered. Some functionality "
"will not be available."
msgstr ""
"Сочетание клавиш Win+F5 регистрировать. Некоторые функциональности не будут "
"доступны."
#: zrcolafrm.cpp:215 zrcolafrm.cpp:217
msgid "Warning"
msgstr "Предупреждение"
#: zrcolafrm.cpp:217
msgid ""
"ZRCola keyboard shortcut Win+F6 could not be registered. Some functionality "
"will not be available."
msgstr ""
"Сочетание клавиш Win+F6 невозможно регистрировать. Некоторые "
"функциональности не будут доступны."
#: zrcolafrm.cpp:486
msgid "http://zrcola.zrc-sazu.si/en/info/instructions/"
msgstr "http://zrcola.zrc-sazu.si/ru/info/instructions/"
#: zrcolafrm.cpp:510
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"
#: zrcolakeyhndlr.cpp:44
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:87
msgid "Start ZRCola automatically on logon"
msgstr "Автоматически запустить систему ZRCola при запуске компьютера"
#: zrcolatranseq.cpp:63
#, c-format
msgid "Unknown translation (%u)"
msgstr "Неизвестное преобразование (%u)"
#: zrcolaupdater.cpp:94
msgid ""
"This program will now close and the upgrade will be launched.\n"
"Are you sure?"
msgstr ""
"Программа будет закрыта и обновлена.\n"
"Вы уверены?"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:4
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:10
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:15
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:10
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:15
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:4
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:10
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:15
#: MSIBuild/en_US.x64.Release.Control-2.idtx:4
#: MSIBuild/en_US.x64.Release.Control-2.idtx:10
#: MSIBuild/en_US.x64.Release.Control-2.idtx:15
msgid "binUIHeader.bmp"
msgstr "binUIHeader.bmp"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:5
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:5
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:5
#: MSIBuild/en_US.x64.Release.Control-2.idtx:5
msgid "[DlgTitleFont][SimpleProductName] Tutorial : Starting"
msgstr "[DlgTitleFont][SimpleProductName] Руководство по запуску системы"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:6
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:6
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:6
#: MSIBuild/en_US.x64.Release.Control-2.idtx:6
msgid "bintutorial1.bmp"
msgstr "bintutorial1.bmp"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:7
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:7
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:7
#: MSIBuild/en_US.x64.Release.Control-2.idtx:7
msgid ""
"When configured, ZRCola starts at system startup and runs in the background."
" If needed, it can be brought up by pressing the combination Win+F5."
msgstr ""
"Если так настроено, система ZRCola запускается при запуске компьютера и "
"работает в фоновом режиме. Если потребуется, пользователь может вывести "
"программу на экран, нажав на сочетание клавиш Win+F5."
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:8
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:8
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:8
#: MSIBuild/en_US.x64.Release.Control-2.idtx:8
msgid ""
"IMPORTANT: Upon pressing the combination Win+F5 the program memorises the "
"location of the cursor in the text. If ZRCola is brought to the foreground "
"without using the aforementioned combination of keys, the program won't know"
" where to insert the special characters!"
msgstr ""
"Внимание: При нажатии сочетание клавиш Win+F5 программа запомнить "
"местонахождение курсора в тексте. Если система ZRCola выведена на экран без "
"использования упомянутого сочетания клавиш, программа не знает, куда ввести "
"желаемые знаки!"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:9
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:14
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:19
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:9
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:14
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:19
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:9
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:14
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:19
#: MSIBuild/en_US.x64.Release.Control-2.idtx:9
#: MSIBuild/en_US.x64.Release.Control-2.idtx:14
#: MSIBuild/en_US.x64.Release.Control-2.idtx:19
msgid "&Continue"
msgstr "&Продолжить"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:11
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:11
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:11
#: MSIBuild/en_US.x64.Release.Control-2.idtx:11
msgid "[DlgTitleFont][SimpleProductName] Tutorial : Composition"
msgstr "[DlgTitleFont][SimpleProductName] Руководство по составлению"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:12
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:12
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:12
#: MSIBuild/en_US.x64.Release.Control-2.idtx:12
msgid "bintutorial2.bmp"
msgstr "bintutorial2.bmp"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:13
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:13
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:13
#: MSIBuild/en_US.x64.Release.Control-2.idtx:13
msgid ""
"The string of basic and substitute characters is entered into the upper "
"input window of the program. In the window below the resulted special "
"characters are displayed. To insert them in the text, the F5 key is used."
msgstr ""
"Строка основных и замещающих знаков вводится в верхнее окно для ввода. После"
" того, в нижнем окне появляются соответствующие специальные знаки. Для их "
"ввода в текст нужно нажать клавишу F5."
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:16
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:16
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:16
#: MSIBuild/en_US.x64.Release.Control-2.idtx:16
msgid "[DlgTitleFont][SimpleProductName] Tutorial : Entering Characters"
msgstr "[DlgTitleFont][SimpleProductName] Руководство по вводу знаков"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:17
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:17
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:17
#: MSIBuild/en_US.x64.Release.Control-2.idtx:17
msgid "bintutorial3.bmp"
msgstr "bintutorial3.bmp"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:18
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:18
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:18
#: MSIBuild/en_US.x64.Release.Control-2.idtx:18
msgid ""
"Characters can be entered using keyboard shortcuts, the character catalogue "
"(F4) or the character finding tool (F8)."
msgstr ""
"Знак можно ввести, употребляя сочетания клавиш на клавиатуре, список знаков "
"(F4) или функцию \"Поиск знака\" (F8)."
#: MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Debug.Shortcut-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4
#: MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Debug.Shortcut-2.idtx:4
#: MSIBuild/en_US.x64.Release.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
msgid "Input system for linguistic use"
msgstr "Система ввода ZRCola для лингвистического применения"

View File

@@ -1,121 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: ZRCola\n"
"POT-Creation-Date: 2016-02-09 18:56+0100\n"
"PO-Revision-Date: 2016-02-09 18:56+0100\n"
"Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n"
"Language-Team: Amebis, d. o. o., Kamnik <info@amebis.si>\n"
"Language: sl_SI\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.6\n"
"X-Poedit-Basepath: ..\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
"%100==4 ? 2 : 3);\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: _\n"
"X-Poedit-SearchPath-0: .\n"
#: zrcolafrm.cpp:62
msgid ""
"ZRCola keyboard shortcut Ctrl+Alt+Z could not be registered. Some "
"functionality will not be available."
msgstr ""
"ZRColine bližnjice na tipkovnici Ctrl+Alt+Z ni mogoče registrirati. Nekaj "
"funkcionalnosti ne bo na voljo."
#: zrcolafrm.cpp:62 zrcolafrm.cpp:64
msgid "Warning"
msgstr "Opozorilo"
#: zrcolafrm.cpp:64
msgid ""
"ZRCola keyboard shortcut Ctrl+Alt+Shift+Z could not be registered. Some "
"functionality will not be available."
msgstr ""
"ZRColine bližnjice na tipkovnici Ctrl+Alt+Shift+Z ni mogoče registrirati. "
"Nekaj funkcionalnosti ne bo na voljo."
#: zrcolafrm.cpp:222
#, c-format
msgid ""
"ZRCola v%s\n"
"Copyright 2015-%s Amebis"
msgstr ""
"ZRCola v%s\n"
"Vse pravice pridržane 2015-%s Amebis"
#: zrcolafrm.cpp:222
msgid "About ZRCola"
msgstr "O ZRColi"
#: zrcolagui.cpp:32
msgid "E&xit"
msgstr "I&zhod"
#: zrcolagui.cpp:35
msgid "&File"
msgstr "&Datoteka"
#: zrcolagui.cpp:39
msgid "Grave\t&7"
msgstr "Krativec\t&7"
#: zrcolagui.cpp:43
msgid "Acute\t&9"
msgstr "Ostrivec\t&9"
#: zrcolagui.cpp:47
msgid "Circumflex\t&3"
msgstr "Cirkumfleks\t&3"
#: zrcolagui.cpp:53
msgid "Inverted &breve"
msgstr "O&brnjen polkrog"
#: zrcolagui.cpp:56
msgid "&Accents"
msgstr "N&aglasi"
#: zrcolagui.cpp:60
msgid "&About"
msgstr "O progr&amu"
#: zrcolagui.cpp:63
msgid "&Help"
msgstr "&Pomoč"
#: zrcolagui.h:56
msgid "ZRCola"
msgstr "ZRCola"
#~ msgid ""
#~ "There is already an auto hidden bar on this edge.\n"
#~ "Only one auto hidden bar is allowed on each edge.\n"
#~ "Auto-hide feature is now off."
#~ msgstr ""
#~ "Ob tem robu je že samodejno skrita pasica.\n"
#~ "Na vsakem robu je lahko samo ena samodejno skrita pasica.\n"
#~ "Samodejno skrivanje je zdaj izklopljeno."
#~ msgid "Hello World"
#~ msgstr "Zdravo svet"
#~ msgid "&Hello...\tCtrl+H"
#~ msgstr "&Pozdrav ...\tCtrl+H"
#~ msgid "Help string shown in status bar for this menu item"
#~ msgstr "Niz s pomočjo prikazan v statusni vrstici za to točko menija"
#~ msgid "This is a wxWidgets' Hello world sample"
#~ msgstr "To je primer Zdravo svet v wxWidgets"
#~ msgid "About Hello World"
#~ msgstr "O Zdravo svet"
#~ msgid "Hello world from wxWidgets!"
#~ msgstr "Zdravo svet iz wxWidgets!"
#~ msgid "Welcome to wxWidgets!"
#~ msgstr "Dobrodošli v wxWidgets!"

829
ZRCola/locale/sl_SI.po Normal file
View File

@@ -0,0 +1,829 @@
# Translators:
# Simon Rozman <simon@rozman.si>, 2019
#
msgid ""
msgstr ""
"Project-Id-Version: ZRCola\n"
"POT-Creation-Date: 2019-04-01 11:13+0200\n"
"PO-Revision-Date: 2018-09-19 07:18+0000\n"
"Last-Translator: Simon Rozman <simon@rozman.si>, 2019\n"
"Language-Team: Slovenian (Slovenia) (https://www.transifex.com/amebis/teams/91592/sl_SI/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sl_SI\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
"X-Generator: Poedit 2.2.1\n"
"X-Poedit-Basepath: ..\n"
"X-Poedit-KeywordsList: _\n"
"X-Poedit-SearchPath-0: .\n"
"X-Poedit-SourceCharset: UTF-8\n"
#: res/zrcolagui.cpp:42 zrcolagui.cpp:42
msgid "E&xit"
msgstr "I&zhod"
#: res/zrcolagui.cpp:42 zrcolagui.cpp:42
msgid "Quit this program"
msgstr "Zapri ta program"
#: res/zrcolagui.cpp:45 zrcolagui.cpp:45
msgid "&Program"
msgstr "&Program"
#: res/zrcolagui.cpp:78 zrcolagui.cpp:78
msgid "Select &All"
msgstr "Izberi &vse"
#: res/zrcolagui.cpp:78 zrcolagui.cpp:78
msgid "Select all text"
msgstr "Izberi celotno besedilo"
#: res/zrcolagui.cpp:84 zrcolagui.cpp:84
msgid "Find C&haracter..."
msgstr "Poišči &znak ..."
#: res/zrcolagui.cpp:84 res/zrcolagui.cpp:208 zrcolagui.cpp:84
#: zrcolagui.cpp:208
msgid "Toggle character search to select character to insert into text"
msgstr ""
"Prikaži/skrij iskalnik znakov za izbor znaka za vstavljanje v besedilo"
#: res/zrcolagui.cpp:90 zrcolagui.cpp:90
msgid "&Send Composed"
msgstr "Pošlji &sestavljeno"
#: res/zrcolagui.cpp:90 res/zrcolagui.cpp:210 zrcolagui.cpp:90
#: zrcolagui.cpp:210
msgid "Send composed text to source window"
msgstr "Pošlji sestavljeno besedilo izvornemu oknu"
#: res/zrcolagui.cpp:99 zrcolagui.cpp:99
msgid "Copy Composed and &Return"
msgstr "Kopi&raj sestavljeno in se vrni"
#: res/zrcolagui.cpp:99 zrcolagui.cpp:99
msgid "Copy composed text to clipboard and return focus to source window"
msgstr ""
"Kopiraj sestavljeno besedilo na odložišče in vrni fokus nazaj izvornemu oknu"
#: res/zrcolagui.cpp:108 zrcolagui.cpp:108
msgid "Send &Decomposed"
msgstr "Pošlji &razstavljeno"
#: res/zrcolagui.cpp:108 res/zrcolagui.cpp:212 zrcolagui.cpp:108
#: zrcolagui.cpp:212
msgid "Send decomposed text to source window"
msgstr "Pošlji razstavljeno besedilo izvornemu oknu"
#: res/zrcolagui.cpp:117 zrcolagui.cpp:117
msgid "Copy Decomposed and Re&turn"
msgstr "Kopi&raj razstavljeno in se vrni"
#: res/zrcolagui.cpp:117 zrcolagui.cpp:117
msgid "Copy decomposed text to clipboard and return focus to source window"
msgstr ""
"Kopiraj razstavljeno besedilo na odložišče in vrni fokus nazaj izvornemu "
"oknu"
#: res/zrcolagui.cpp:126 zrcolagui.cpp:126
msgid "Abort (De)composition"
msgstr "Prekini raz/sestavljanje"
#: res/zrcolagui.cpp:126 zrcolagui.cpp:126
msgid "Abort composition and return focus to source window"
msgstr "Prekini sestavljanje in vrni fokus nazaj izvornemu oknu"
#: res/zrcolagui.cpp:136 zrcolagui.cpp:136
msgid "&ZRCola (De)composition"
msgstr "(Raz-)Sestavljanje &ZRCola"
#: res/zrcolagui.cpp:136 res/zrcolagui.cpp:214 zrcolagui.cpp:136
#: zrcolagui.cpp:216
msgid "Toggle ZRCola character (De)composition"
msgstr "Vklopi/izklopi (raz-)sestavljanje ZRCola"
#: res/zrcolagui.cpp:140 zrcolagui.cpp:140
msgid "Tra&nslation"
msgstr "Tra&nsliteracija"
#: res/zrcolagui.cpp:146 zrcolagui.cpp:146
msgid "&Settings..."
msgstr "Na&stavitve ..."
#: res/zrcolagui.cpp:146 zrcolagui.cpp:146
msgid "Open program configuration dialog"
msgstr "Odpri nastavitveni dialog programa"
#: res/zrcolagui.cpp:149 zrcolagui.cpp:149
msgid "&Edit"
msgstr "Ur&edi"
#: res/zrcolagui.cpp:153 zrcolagui.cpp:153
msgid "&Edit Toolbar"
msgstr "Orodna vrstica za ur&ejanje"
#: res/zrcolagui.cpp:153 zrcolagui.cpp:153
msgid "Toggle edit toolbar"
msgstr "Prikaži/skrij orodno vrstico za urejanje"
#: res/zrcolagui.cpp:157 zrcolagui.cpp:157
msgid "&Compose Toolbar"
msgstr "Orodna vrsti&ca za sestavljanje"
#: res/zrcolagui.cpp:157 zrcolagui.cpp:157
msgid "Toggle compose toolbar"
msgstr "Prikaži/skrij orodno vrstico za sestavljanje"
#: res/zrcolagui.cpp:163 zrcolagui.cpp:163
msgid "Character Catalo&g"
msgstr "Katalo&g znakov"
#: res/zrcolagui.cpp:163 zrcolagui.cpp:163
msgid "Toggle character catalog panel"
msgstr "Prikaži/skrij katalog znakov"
#: res/zrcolagui.cpp:166 zrcolagui.cpp:166
msgid "&View"
msgstr "Po&gled"
#: res/zrcolagui.cpp:170 zrcolagui.cpp:170
msgid "&Instructions..."
msgstr "Navod&ila ..."
#: res/zrcolagui.cpp:170 zrcolagui.cpp:170
msgid "Open a web site with product instructions"
msgstr "Odpri spletno stran z navodili izdelka"
#: res/zrcolagui.cpp:174 zrcolagui.cpp:174
msgid "Keyboard &Shortcuts..."
msgstr "&Bližnjice na tipkovnici ..."
#: res/zrcolagui.cpp:174 zrcolagui.cpp:174
msgid "Open a list of keyboard shortcuts"
msgstr "Odpri seznam bližnjic na tipkovnici"
#: res/zrcolagui.cpp:180 zrcolagui.cpp:180
msgid "&Request a new character..."
msgstr "&Zahtevaj nov znak ..."
#: res/zrcolagui.cpp:180 zrcolagui.cpp:180
msgid "Submit a request to ZRC to add a new character"
msgstr "Oddaj prošnjo za dodajanje novega znaka"
#: res/zrcolagui.cpp:184 zrcolagui.cpp:184
msgid "Check for &Updates..."
msgstr "Preveri &posodobitve ..."
#: res/zrcolagui.cpp:184 zrcolagui.cpp:184
msgid "Check online for product update"
msgstr "Preveri na spletu za posodobitev izdelka"
#: res/zrcolagui.cpp:190 zrcolagui.cpp:190
msgid "&About..."
msgstr "O progr&amu ..."
#: res/zrcolagui.cpp:193 zrcolagui.cpp:193
msgid "&Help"
msgstr "Po&moč"
#: res/zrcolagui.cpp:198 zrcolagui.cpp:198
msgid "Cut"
msgstr "Izreži"
#: res/zrcolagui.cpp:198 zrcolagui.cpp:198
msgid "Cut selection"
msgstr "Izreži izbor"
#: res/zrcolagui.cpp:200 zrcolagui.cpp:200
msgid "Copy"
msgstr "Kopiraj"
#: res/zrcolagui.cpp:200 zrcolagui.cpp:200
msgid "Copy selection"
msgstr "Kopiraj izbor"
#: res/zrcolagui.cpp:202 zrcolagui.cpp:202
msgid "Paste"
msgstr "Prilepi"
#: res/zrcolagui.cpp:202 zrcolagui.cpp:202
msgid "Paste selection"
msgstr "Prilepi izbor"
#: res/zrcolagui.cpp:205 zrcolagui.cpp:205
msgid "Edit"
msgstr "Urejanje"
#: res/zrcolagui.cpp:208 zrcolagui.cpp:208
msgid "Find Character"
msgstr "Poišči znak"
#: res/zrcolagui.cpp:210 zrcolagui.cpp:210
msgid "Send Composed"
msgstr "Pošlji sestavljeno"
#: res/zrcolagui.cpp:212 zrcolagui.cpp:212
msgid "Send Decomposed"
msgstr "Pošlji razstavljeno"
#: res/zrcolagui.cpp:214 zrcolagui.cpp:216
msgid "ZRCola (De)composition"
msgstr "(Raz-)Sestavljanje ZRCola"
#: res/zrcolagui.cpp:221 zrcolagui.cpp:223
msgid "Compose"
msgstr "Sestavljanje"
#: res/zrcolagui.cpp:225 zrcolagui.cpp:227
msgid "Character Catalog"
msgstr "Katalog znakov"
#: res/zrcolagui.cpp:229 zrcolagui.cpp:231
msgid "(De)Composer"
msgstr "Razstavljalnik/Sestavljalnik"
#: res/zrcolagui.cpp:270 zrcolagui.cpp:272
msgid "Decomposed Text"
msgstr "Razstavljeno besedilo"
#: res/zrcolagui.cpp:290 zrcolagui.cpp:292
msgid "Decomposed Unicode Dump"
msgstr "Unicode razstavljenega"
#: res/zrcolagui.cpp:317 zrcolagui.cpp:319
msgid "Composed Text"
msgstr "Sestavljeno besedilo"
#: res/zrcolagui.cpp:337 zrcolagui.cpp:339
msgid "Composed Unicode Dump"
msgstr "Unicode sestavljenega"
#: res/zrcolagui.cpp:391 zrcolagui.cpp:393
msgid "Select category to display"
msgstr "Izberi kategorijo za prikaz"
#: res/zrcolagui.cpp:425 zrcolagui.cpp:427
msgid "Show &All"
msgstr "Prik&aži vse"
#: res/zrcolagui.cpp:426 zrcolagui.cpp:428
msgid "Toggle display of less frequent characters"
msgstr "Prikaži/skrij manj pogoste znake"
#: res/zrcolagui.cpp:466 zrcolagui.cpp:468
msgid "&Browse"
msgstr "Pre&brskaj"
#: res/zrcolagui.cpp:473 zrcolagui.cpp:475
msgid ""
"Full or partial terms from Unicode character description (in English) to "
"search for"
msgstr ""
"Polne ali delne besede iz opisa znaka Unicode (v angleščini) za iskanje"
#: res/zrcolagui.cpp:477 zrcolagui.cpp:479
msgid "Search Options"
msgstr "Možnosti iskanja"
#: res/zrcolagui.cpp:478 zrcolagui.cpp:480
msgid "Shows/hides additional search options"
msgstr "Prikaže/skrije dodatne možnosti iskanja"
#: res/zrcolagui.cpp:490 zrcolagui.cpp:492
msgid "List of Unicode character categories to search in"
msgstr "Seznam kategorij znaka Unicode za iskanje"
#: res/zrcolagui.cpp:497 zrcolagui.cpp:499
msgid "All"
msgstr "Vse"
#: res/zrcolagui.cpp:498 zrcolagui.cpp:500
msgid "Select all categories"
msgstr "Izberi vse kategorije"
#: res/zrcolagui.cpp:502 zrcolagui.cpp:504
msgid "None"
msgstr "Nič"
#: res/zrcolagui.cpp:503 zrcolagui.cpp:505
msgid "Clear category selection"
msgstr "Počisti izbor kategorij"
#: res/zrcolagui.cpp:507 zrcolagui.cpp:509
msgid "Invert"
msgstr "Obrni"
#: res/zrcolagui.cpp:508 zrcolagui.cpp:510
msgid "Invert category selection"
msgstr "Obrni izbor kategorij"
#: res/zrcolagui.cpp:547 zrcolagui.cpp:549
msgid "Character search results"
msgstr "Rezultati iskanja znakov"
#: res/zrcolagui.cpp:557 zrcolagui.cpp:559
msgid "Re&cently Used"
msgstr "Nedavno &uporabljeni"
#: res/zrcolagui.cpp:585 zrcolagui.cpp:587
msgid "List of recently inserted characters"
msgstr "Seznam nedavno vstavljenih znakov"
#: res/zrcolagui.cpp:599 zrcolagui.cpp:601
msgid "Preview"
msgstr "Predogled"
#: res/zrcolagui.cpp:604 zrcolagui.cpp:606
msgid "U+"
msgstr "U+"
#: res/zrcolagui.cpp:609 zrcolagui.cpp:611
msgid "Unicode hexadecimal code"
msgstr "Šestnajstiška koda Unicode"
#: res/zrcolagui.cpp:614 zrcolagui.cpp:616
msgid "Keyboard shortcut in Composer window"
msgstr "Bližnjica na tipkovnici v oknu sestavljalnika"
#: res/zrcolagui.cpp:649 zrcolagui.cpp:651
msgid "Character preview"
msgstr "Predogled znaka"
#: res/zrcolagui.cpp:654 zrcolagui.cpp:656
msgid "Unicode character description"
msgstr "Opis znaka Unicode"
#: res/zrcolagui.cpp:659 zrcolagui.cpp:661
msgid "Character tags"
msgstr "Oznake znaka"
#: res/zrcolagui.cpp:664 zrcolagui.cpp:666
msgid "Unicode character category"
msgstr "Kategorija znaka Unicode"
#: res/zrcolagui.cpp:671 zrcolagui.cpp:673
msgid "« Back"
msgstr "« Nazaj"
#: res/zrcolagui.cpp:673 zrcolagui.cpp:675
msgid "To previously viewed character"
msgstr "Na prejšnji prikazan znak"
#: res/zrcolagui.cpp:677 zrcolagui.cpp:679
msgid "Forward »"
msgstr "Naprej »"
#: res/zrcolagui.cpp:679 zrcolagui.cpp:681
msgid "To following viewed character"
msgstr "Na naslednji prikazan znak"
#: res/zrcolagui.cpp:690 zrcolagui.cpp:692
msgid "Re&lated"
msgstr "&Sorodni"
#: res/zrcolagui.cpp:717 zrcolagui.cpp:719
msgid "List of related characters"
msgstr "Seznam sorodnih znakov"
#: res/zrcolagui.cpp:736 zrcolagui.cpp:738
msgid "&Insert"
msgstr "Vstav&i"
#: res/zrcolagui.cpp:740 zrcolagui.cpp:742
msgid "Insert character into decomposed text"
msgstr "Vstavi znak v razstavljeno besedilo"
#: res/zrcolagui.cpp:813 zrcolagui.cpp:818
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 razstavljati.\n"
"Za optimalno razstavljanje izberite pravilni jezik."
#: res/zrcolagui.cpp:817 zrcolagui.cpp:822
msgid "Select language &automatically according to selected keyboard"
msgstr "S&amodejno izberi jezik glede na izbrano tipkovnico"
#: res/zrcolagui.cpp:820 zrcolagui.cpp:825
msgid "&Manually select the language from the list below:"
msgstr "&Ročno izberi jezik s seznama spodaj:"
#: res/zrcolagui.cpp:831 zrcolagui.cpp:836
msgid "Text Language"
msgstr "Jezik besedila"
#: res/zrcolagui.cpp:836 zrcolagui.cpp:841
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 v vrstici za sistemska obvestila ter preko registriranih bližnjic Win+F5 in Win+F6."
#: res/zrcolagui.cpp:840 zrcolagui.cpp:845
msgid "Start ZRCola &automatically on logon"
msgstr "S&amodejno zaženi ZRColo ob prijavi"
#: res/zrcolagui.cpp:846 zrcolagui.cpp:851
msgid "Startup"
msgstr "Zagon"
#: res/zrcolagui.cpp:913 res/zrcolagui.h:113 zrcolaapp.cpp:72
#: zrcolafrm.cpp:128 zrcolagui.cpp:918 zrcolagui.h:113
#: MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Debug.Shortcut-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4
#: MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Debug.Shortcut-2.idtx:4
#: MSIBuild/en_US.x64.Release.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
msgid "ZRCola"
msgstr "ZRCola"
#: res/zrcolagui.cpp:924 zrcolagui.cpp:929
msgid ""
"Program and Website Editor: Janoš Ježovnik\n"
"Development: Amebis, d. o. o., Kamnik\n"
"Translation into English: Janoš Ježovnik\n"
"Translation into Russian language: Domen Krvina, Silvo Torkar, Anastasia Plotnikova\n"
"Development and maintenance of the original program (20042015): Peter Weiss"
msgstr ""
"Urednik programa in spletne strani: Janoš Ježovnik\n"
"Razvoj: Amebis, d. o. o., Kamnik\n"
"Prevod v angleški jezik: Janoš Ježovnik\n"
"Prevod v ruski jezik: Domen Krvina, Silvo Torkar, Anastasija Plotnikova\n"
"Razvoj in vzdrževanje prvotnega programa (20042015): Peter Weiss"
#: res/zrcolagui.cpp:932 zrcolagui.cpp:937
msgid "zrcola.zrc-sazu.si"
msgstr "zrcola.zrc-sazu.si"
#: res/zrcolagui.cpp:938 zrcolagui.cpp:943
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:"
#: res/zrcolagui.cpp:942 zrcolagui.cpp:947
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."
#: res/zrcolagui.cpp:983 zrcolagui.cpp:988
msgid "Log"
msgstr "Dnevnik"
#: res/zrcolagui.cpp:999 zrcolagui.cpp:1004
msgid "Quit and &Update..."
msgstr "Za&ustavi in posodobi ..."
#: res/zrcolagui.cpp:1001 zrcolagui.cpp:1006
msgid "Exit this program and launch product update"
msgstr "Zaustavi program in zaženi posodobitev izdelka"
#: res/zrcolagui.cpp:1005 zrcolagui.cpp:1010
msgid "&Close"
msgstr "&Zapri"
#: res/zrcolagui.cpp:1006 zrcolagui.cpp:1011
msgid "Close this window"
msgstr "Zapri to okno"
#: res/zrcolagui.cpp:1043 zrcolachrreq.cpp:49 zrcolagui.cpp:1048
msgid "Character"
msgstr "Znak"
#: res/zrcolagui.cpp:1045 zrcolagui.cpp:1050
msgid "Enter the &character you would like to request:"
msgstr "Vpišite &znak, ki ga želite zahtevati:"
#: res/zrcolagui.cpp:1059 zrcolagui.cpp:1064
msgid "Decomposed character to request"
msgstr "Zahtevani znak v razstavljeni obliki"
#: res/zrcolagui.cpp:1063 zrcolagui.cpp:1068
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 ""
"Uporabite razstavljeno obliko.\n"
"Za vnos znaka lahko uporabite ZRColine bližnjice na tipkovnici ali ga kopirate in prilepite iz okna z razstavljenim besedilom."
#: res/zrcolagui.cpp:1071 zrcolachrreq.cpp:58 zrcolagui.cpp:1076
msgid "Context"
msgstr "Kontekst"
#: res/zrcolagui.cpp:1073 zrcolagui.cpp:1078
msgid ""
"The &context, examples or description why and where the character is "
"required:"
msgstr "&Kontekst, primeri oziroma opis, zakaj in kje potrebujete novi znak:"
#: res/zrcolagui.cpp:1079 zrcolagui.cpp:1084
msgid "Additional notes for character request"
msgstr "Dodatne opombe za zahtevo znaka"
#: res/zrcolagui.cpp:1086 zrcolagui.cpp:1091
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."
msgstr ""
"Ko boste kliknili gumb V redu, se bo odprl vaš program za e-pošto, s katerim boste lahko oddali zahtevo za nov znak uredniku programa.\n"
"Vsi znaki v sporočilu morda ne bodo prikazani pravilno, vendar jih bo urednik lahko kljub temu razbral."
#: res/zrcolagui.cpp:1128 zrcolagui.cpp:1133
msgid "Translation"
msgstr "Pretvorba"
#: res/zrcolagui.cpp:1130 zrcolagui.cpp:1135
msgid ""
"ZRCola offers multiple text translations that can be arranged in a sequence.\n"
"Please select desired translations 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 potečejo."
#: res/zrcolagui.cpp:1140 zrcolagui.cpp:1145
msgid "A&vailable:"
msgstr "Na &voljo:"
#: res/zrcolagui.cpp:1155 zrcolagui.cpp:1160
msgid ">"
msgstr ">"
#: res/zrcolagui.cpp:1158 zrcolagui.cpp:1163
msgid "<"
msgstr "<"
#: res/zrcolagui.cpp:1167 zrcolagui.cpp:1172
msgid "&Selected:"
msgstr "I&zbrano:"
#: res/zrcolagui.cpp:1185 zrcolagui.cpp:1190
msgid "Up"
msgstr "Gor"
#: res/zrcolagui.cpp:1188 zrcolagui.cpp:1193
msgid "Down"
msgstr "Dol"
#: res/zrcolagui.h:254 zrcolagui.h:254
msgid "Character Search"
msgstr "Poišči znak"
#: res/zrcolagui.h:290 zrcolagui.h:290
msgid "Settings"
msgstr "Nastavitve"
#: res/zrcolagui.h:316 zrcolagui.h:316
msgid "About ZRCola"
msgstr "O ZRColi"
#: res/zrcolagui.h:341 zrcolagui.h:341 zrcolaupdater.cpp:94
msgid "Product Update"
msgstr "Posodabljanje izdelka"
#: res/zrcolagui.h:370 zrcolachrreq.cpp:64 zrcolagui.h:370
msgid "Request a New Character"
msgstr "Zahtevaj nov znak"
#: res/zrcolagui.h:412 zrcolagui.h:412
msgid "Custom Translation Sequence"
msgstr "Zaporedje pretvorb po meri"
#: zrcolaabout.cpp:31
#, c-format
msgid "© 2004-%s ZRC SAZU"
msgstr "© 2004-%s ZRC SAZU"
#: zrcolachrslct.cpp:89
msgid "Too many digits in Unicode."
msgstr "Preveč števk v zapisu Unicode."
#: zrcolachrslct.cpp:89 zrcolachrslct.cpp:107
msgid "Validation conflict"
msgstr "Nesoglasje pri preverjanju"
#: zrcolachrslct.cpp:107
#, c-format
msgid "Invalid character in Unicode found: %c"
msgstr "Napačen znak v zapisu Unicode: %c"
#: zrcolachrslct.cpp:214 zrcolachrslct.cpp:388 zrcolachrslct.cpp:885
msgid "▸ Search Options"
msgstr "▸ Možnosti iskanja"
#: zrcolachrslct.cpp:326
msgid ", "
msgstr ", "
#: zrcolachrslct.cpp:391 zrcolachrslct.cpp:882
msgid "▾ Search Options"
msgstr "▾ Možnosti iskanja"
#: zrcolafrm.cpp:94
msgid "No Translation"
msgstr "Brez transliteracije"
#: zrcolafrm.cpp:107
msgid "Custom Translation..."
msgstr "Pretvorba po meri ..."
#: zrcolafrm.cpp:215
msgid ""
"ZRCola keyboard shortcut Win+F5 could not be registered. Some functionality "
"will not be available."
msgstr ""
"ZRColine bližnjice na tipkovnici Win+F5 ni mogoče registrirati. Nekaj "
"funkcionalnosti ne bo na voljo."
#: zrcolafrm.cpp:215 zrcolafrm.cpp:217
msgid "Warning"
msgstr "Opozorilo"
#: zrcolafrm.cpp:217
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:486
msgid "http://zrcola.zrc-sazu.si/en/info/instructions/"
msgstr "http://zrcola.zrc-sazu.si/info/instructions/"
#: zrcolafrm.cpp:510
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"
#: zrcolakeyhndlr.cpp:44
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: 09, AF), nato izpustite INS."
#: zrcolasettings.cpp:87
msgid "Start ZRCola automatically on logon"
msgstr "Samodejno zaženi ZRColo ob prijavi"
#: zrcolatranseq.cpp:63
#, c-format
msgid "Unknown translation (%u)"
msgstr "Neznana pretvorba (%u)"
#: zrcolaupdater.cpp:94
msgid ""
"This program will now close and the upgrade will be launched.\n"
"Are you sure?"
msgstr ""
"Program se bo zdaj zaprl in zagnala se bo posodobitev.\n"
"Ali ste prepričani, da želite nadaljevati?"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:4
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:10
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:15
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:10
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:15
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:4
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:10
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:15
#: MSIBuild/en_US.x64.Release.Control-2.idtx:4
#: MSIBuild/en_US.x64.Release.Control-2.idtx:10
#: MSIBuild/en_US.x64.Release.Control-2.idtx:15
msgid "binUIHeader.bmp"
msgstr "binUIHeader.bmp"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:5
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:5
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:5
#: MSIBuild/en_US.x64.Release.Control-2.idtx:5
msgid "[DlgTitleFont][SimpleProductName] Tutorial : Starting"
msgstr "[DlgTitleFont]Vadnica [SimpleProductName] : Zagon"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:6
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:6
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:6
#: MSIBuild/en_US.x64.Release.Control-2.idtx:6
msgid "bintutorial1.bmp"
msgstr "bintutorial1.bmp"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:7
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:7
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:7
#: MSIBuild/en_US.x64.Release.Control-2.idtx:7
msgid ""
"When configured, ZRCola starts at system startup and runs in the background."
" If needed, it can be brought up by pressing the combination Win+F5."
msgstr ""
"Če jo tako nastavimo, se ZRCola zažene samodejno in teče v ozadju. V "
"ospredje jo prikličemo s pritiskom na bližnjico Win+F5."
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:8
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:8
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:8
#: MSIBuild/en_US.x64.Release.Control-2.idtx:8
msgid ""
"IMPORTANT: Upon pressing the combination Win+F5 the program memorises the "
"location of the cursor in the text. If ZRCola is brought to the foreground "
"without using the aforementioned combination of keys, the program won't know"
" where to insert the special characters!"
msgstr ""
"POMEMBNO: Ob pritisku na Win+F5 si program zapomni mesto kurzorja v "
"besedilu. Če ZRColo povečamo brez pritiska na ti dve tipki, program ne bo "
"vedel, kam vstaviti želene znake!"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:9
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:14
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:19
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:9
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:14
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:19
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:9
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:14
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:19
#: MSIBuild/en_US.x64.Release.Control-2.idtx:9
#: MSIBuild/en_US.x64.Release.Control-2.idtx:14
#: MSIBuild/en_US.x64.Release.Control-2.idtx:19
msgid "&Continue"
msgstr "&Nadaljuj"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:11
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:11
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:11
#: MSIBuild/en_US.x64.Release.Control-2.idtx:11
msgid "[DlgTitleFont][SimpleProductName] Tutorial : Composition"
msgstr "[DlgTitleFont]Vadnica [SimpleProductName] : Sestavljanje"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:12
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:12
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:12
#: MSIBuild/en_US.x64.Release.Control-2.idtx:12
msgid "bintutorial2.bmp"
msgstr "bintutorial2.bmp"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:13
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:13
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:13
#: MSIBuild/en_US.x64.Release.Control-2.idtx:13
msgid ""
"The string of basic and substitute characters is entered into the upper "
"input window of the program. In the window below the resulted special "
"characters are displayed. To insert them in the text, the F5 key is used."
msgstr ""
"Želeni niz osnovnih in nadomestnih znakov vnesemo v zgornjo vrstico v "
"programu. V spodnji vrstici se prikažejo sestavljeni znaki. V besedilo jih "
"vnesemo s pritiskom na tipko F5."
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:16
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:16
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:16
#: MSIBuild/en_US.x64.Release.Control-2.idtx:16
msgid "[DlgTitleFont][SimpleProductName] Tutorial : Entering Characters"
msgstr "[DlgTitleFont]Vadnica [SimpleProductName] : Vnos znakov"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:17
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:17
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:17
#: MSIBuild/en_US.x64.Release.Control-2.idtx:17
msgid "bintutorial3.bmp"
msgstr "bintutorial3.bmp"
#: MSIBuild/en_US.Win32.Debug.Control-2.idtx:18
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:18
#: MSIBuild/en_US.x64.Debug.Control-2.idtx:18
#: MSIBuild/en_US.x64.Release.Control-2.idtx:18
msgid ""
"Characters can be entered using keyboard shortcuts, the character catalogue "
"(F4) or the character finding tool (F8)."
msgstr ""
"Znake lahko v vnosno vrstico vstavljamo s pomočjo bližnjic na tipkovnici, iz"
" kataloga znakov (F4) ali z iskalnikom znakov (F8)."
#: MSIBuild/en_US.Win32.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Debug.Shortcut-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Feature-2.idtx:4
#: MSIBuild/en_US.Win32.Release.Shortcut-2.idtx:4
#: MSIBuild/en_US.x64.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Debug.Shortcut-2.idtx:4
#: MSIBuild/en_US.x64.Release.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
msgid "Input system for linguistic use"
msgstr "Vnašalni sistem za jezikoslovno rabo"

9064
ZRCola/res/ZRCola.fbp Normal file

File diff suppressed because it is too large Load Diff

BIN
ZRCola/res/char_select.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

1794
ZRCola/res/char_select.pdf Normal file

File diff suppressed because one or more lines are too long

BIN
ZRCola/res/composition.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

2070
ZRCola/res/composition.pdf Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

File diff suppressed because one or more lines are too long

4
ZRCola/res/desktop.ini Normal file
View File

@@ -0,0 +1,4 @@
[ViewState]
Mode=
Vid=
FolderType=Pictures

BIN
ZRCola/res/edit_copy.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

1593
ZRCola/res/edit_copy.pdf Normal file

File diff suppressed because one or more lines are too long

BIN
ZRCola/res/edit_cut.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

1707
ZRCola/res/edit_cut.pdf Normal file

File diff suppressed because one or more lines are too long

BIN
ZRCola/res/edit_paste.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

1727
ZRCola/res/edit_paste.pdf Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

1936
ZRCola/res/navigate_back.pdf Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

BIN
ZRCola/res/send_abort.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

1702
ZRCola/res/send_abort.pdf Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

File diff suppressed because one or more lines are too long

BIN
ZRCola/res/send_source.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

1891
ZRCola/res/send_source.pdf Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1245
ZRCola/res/zrcolagui.cpp Normal file

File diff suppressed because it is too large Load Diff

417
ZRCola/res/zrcolagui.h Normal file
View File

@@ -0,0 +1,417 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Aug 8 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#ifndef __ZRCOLAGUI_H__
#define __ZRCOLAGUI_H__
#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
#include <wx/cshelp.h>
#include <wx/intl.h>
class wxZRColaCharGrid;
#include <wx/string.h>
#include <wx/bitmap.h>
#include <wx/image.h>
#include <wx/icon.h>
#include <wx/menu.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/aui/aui.h>
#include <wx/aui/auibar.h>
#include <wx/choice.h>
class wxZRColaCharacterCatalogPanel;
class wxZRColaComposerPanel;
#include <wx/statusbr.h>
#include <wx/frame.h>
#include <wx/textctrl.h>
#include <wx/sizer.h>
#include <wx/statbox.h>
#include <wx/panel.h>
#include <wx/splitter.h>
#include <wx/timer.h>
#include <wx/grid.h>
#include <wx/checkbox.h>
#include <wx/srchctrl.h>
#include <wx/hyperlink.h>
#include <wx/checklst.h>
#include <wx/stattext.h>
#include <wx/button.h>
#include <wx/dialog.h>
#include <wx/radiobut.h>
#include <wx/listbox.h>
#include <wx/listbook.h>
#include <wx/listctrl.h>
#include <wx/statbmp.h>
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/// Class wxZRColaFrameBase
///////////////////////////////////////////////////////////////////////////////
class wxZRColaFrameBase : public wxFrame
{
private:
protected:
enum
{
wxID_CHARACTER_SELECTOR = 1000,
wxID_SEND_DESTINATION,
wxID_COPY_DESTINATION_AND_RETURN,
wxID_SEND_SOURCE,
wxID_COPY_SOURCE_AND_RETURN,
wxID_SEND_ABORT,
wxID_COMPOSITION_MENU,
wxID_SETTINGS,
wxID_TOOLBAR_EDIT,
wxID_TOOLBAR_TRANSLATE,
wxID_PANEL_CHRGRPS,
wxID_HELP_INSTRUCTIONS,
wxID_HELP_SHORTCUTS,
wxID_HELP_REQCHAR,
wxID_HELP_UPDATE,
wxID_COMPOSITION_TOOLBAR
};
wxMenuBar* m_menubar;
wxMenu* m_menuProgram;
wxMenu* m_menuEdit;
wxMenuItem* m_menuItemComposition;
wxMenu* m_menuTranslationSeq;
wxMenu* m_menuView;
wxMenu* m_menuHelp;
wxAuiToolBar* m_toolbarEdit;
wxAuiToolBarItem* m_toolEditCut;
wxAuiToolBarItem* m_toolEditCopy;
wxAuiToolBarItem* m_toolEditPaste;
wxAuiToolBar* m_toolbarTranslate;
wxAuiToolBarItem* m_toolCharSelect;
wxAuiToolBarItem* m_toolSendDestination;
wxAuiToolBarItem* m_toolSendSource;
wxAuiToolBarItem* m_toolComposition;
wxChoice* m_toolTranslationSeq;
wxZRColaCharacterCatalogPanel* m_panelChrCat;
wxStatusBar* m_statusBar;
// Virtual event handlers, overide them in your derived class
virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
virtual void OnIconize( wxIconizeEvent& event ) { event.Skip(); }
virtual void OnIdle( wxIdleEvent& event ) { event.Skip(); }
virtual void OnTranslationSeqChoice( wxCommandEvent& event ) { event.Skip(); }
public:
wxZRColaComposerPanel* m_panel;
wxZRColaFrameBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("ZRCola"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 600,400 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL, const wxString& name = wxT("ZRCola") );
wxAuiManager m_mgr;
~wxZRColaFrameBase();
};
///////////////////////////////////////////////////////////////////////////////
/// Class wxZRColaComposerPanelBase
///////////////////////////////////////////////////////////////////////////////
class wxZRColaComposerPanelBase : public wxPanel
{
private:
protected:
enum
{
wxID_TIMER_SAVE = 1000
};
wxSplitterWindow* m_splitterSource;
wxPanel* m_panelSourceEdit;
wxPanel* m_panelSourceHex;
wxTextCtrl* m_sourceHex;
wxSplitterWindow* m_splitterDestination;
wxPanel* m_panelDestinationEdit;
wxPanel* m_panelDestinationHex;
wxTextCtrl* m_destinationHex;
wxTimer m_timerSave;
// Virtual event handlers, overide them in your derived class
virtual void OnSourcePaint( wxPaintEvent& event ) { event.Skip(); }
virtual void OnSourceText( wxCommandEvent& event ) { event.Skip(); }
virtual void OnSourceHexPaint( wxPaintEvent& event ) { event.Skip(); }
virtual void OnDestinationPaint( wxPaintEvent& event ) { event.Skip(); }
virtual void OnDestinationText( wxCommandEvent& event ) { event.Skip(); }
virtual void OnDestinationHexPaint( wxPaintEvent& event ) { event.Skip(); }
virtual void OnSaveTimer( wxTimerEvent& event ) { event.Skip(); }
public:
wxTextCtrl* m_source;
wxTextCtrl* m_destination;
wxZRColaComposerPanelBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL, const wxString& name = wxT("ZRColaComposerPanel") );
~wxZRColaComposerPanelBase();
void m_splitterSourceOnIdle( wxIdleEvent& )
{
m_splitterSource->SetSashPosition( -5 );
m_splitterSource->Disconnect( wxEVT_IDLE, wxIdleEventHandler( wxZRColaComposerPanelBase::m_splitterSourceOnIdle ), NULL, this );
}
void m_splitterDestinationOnIdle( wxIdleEvent& )
{
m_splitterDestination->SetSashPosition( -5 );
m_splitterDestination->Disconnect( wxEVT_IDLE, wxIdleEventHandler( wxZRColaComposerPanelBase::m_splitterDestinationOnIdle ), NULL, this );
}
};
///////////////////////////////////////////////////////////////////////////////
/// Class wxZRColaCharacterCatalogPanelBase
///////////////////////////////////////////////////////////////////////////////
class wxZRColaCharacterCatalogPanelBase : public wxPanel
{
private:
protected:
wxChoice* m_choice;
wxZRColaCharGrid* m_grid;
wxCheckBox* m_show_all;
// Virtual event handlers, overide them in your derived class
virtual void OnChoice( wxCommandEvent& event ) { event.Skip(); }
virtual void OnGridClick( wxGridEvent& event ) { event.Skip(); }
virtual void OnGridKeyDown( wxKeyEvent& event ) { event.Skip(); }
virtual void OnShowAll( wxCommandEvent& event ) { event.Skip(); }
public:
wxZRColaCharacterCatalogPanelBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL, const wxString& name = wxT("ZRColaCharacterCatalog") );
~wxZRColaCharacterCatalogPanelBase();
};
///////////////////////////////////////////////////////////////////////////////
/// Class wxZRColaCharSelectBase
///////////////////////////////////////////////////////////////////////////////
class wxZRColaCharSelectBase : public wxDialog
{
private:
protected:
wxSearchCtrl* m_search;
wxHyperlinkCtrl* m_search_more;
wxPanel* m_search_panel;
wxCheckListBox* m_categories;
wxHyperlinkCtrl* m_categoriesAll;
wxHyperlinkCtrl* m_categoriesNone;
wxHyperlinkCtrl* m_categoriesInvert;
wxZRColaCharGrid* m_gridResults;
wxZRColaCharGrid* m_gridRecent;
wxStaticText* m_labelUnicode;
wxTextCtrl* m_unicode;
wxTextCtrl* m_shortcut;
wxGrid* m_gridPreview;
wxTextCtrl* m_description;
wxTextCtrl* m_tags;
wxTextCtrl* m_category;
wxHyperlinkCtrl* m_navigateBack;
wxHyperlinkCtrl* m_navigateForward;
wxZRColaCharGrid* m_gridRelated;
wxButton* m_buttonInsert;
// Virtual event handlers, overide them in your derived class
virtual void OnIdle( wxIdleEvent& event ) { event.Skip(); }
virtual void OnSearchText( wxCommandEvent& event ) { event.Skip(); }
virtual void OnSearchMore( wxHyperlinkEvent& event ) { event.Skip(); }
virtual void OnCategoriesToggle( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCategoriesAll( wxHyperlinkEvent& event ) { event.Skip(); }
virtual void OnCategoriesNone( wxHyperlinkEvent& event ) { event.Skip(); }
virtual void OnCategoriesInvert( wxHyperlinkEvent& event ) { event.Skip(); }
virtual void OnResultCellDClick( wxGridEvent& event ) { event.Skip(); }
virtual void OnResultSelectCell( wxGridEvent& event ) { event.Skip(); }
virtual void OnResultsKeyDown( wxKeyEvent& event ) { event.Skip(); }
virtual void OnRecentCellDClick( wxGridEvent& event ) { event.Skip(); }
virtual void OnRecentSelectCell( wxGridEvent& event ) { event.Skip(); }
virtual void OnRecentKeyDown( wxKeyEvent& event ) { event.Skip(); }
virtual void OnUnicodeText( wxCommandEvent& event ) { event.Skip(); }
virtual void OnPreviewKeyDown( wxKeyEvent& event ) { event.Skip(); }
virtual void OnNavigateBack( wxHyperlinkEvent& event ) { event.Skip(); }
virtual void OnNavigateForward( wxHyperlinkEvent& event ) { event.Skip(); }
virtual void OnRelatedSelectCell( wxGridEvent& event ) { event.Skip(); }
virtual void OnInsert( wxCommandEvent& event ) { event.Skip(); }
virtual void OnInsertUpdateUI( wxUpdateUIEvent& event ) { event.Skip(); }
public:
wxZRColaCharSelectBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Character Search"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = wxT("ZRColaCharSelect") );
~wxZRColaCharSelectBase();
};
///////////////////////////////////////////////////////////////////////////////
/// 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 OnLanguageUpdate( wxUpdateUIEvent& 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();
};
///////////////////////////////////////////////////////////////////////////////
/// Class wxZRColaAboutBase
///////////////////////////////////////////////////////////////////////////////
class wxZRColaAboutBase : public wxDialog
{
private:
protected:
wxStaticBitmap* m_bitmapIcon;
wxStaticText* m_staticTextZRCola;
wxStaticText* m_staticTextVersion;
wxStaticText* m_staticTextColophone;
wxStaticText* m_staticTextCopyright;
wxHyperlinkCtrl* m_hyperlink;
wxStaticText* m_staticTextDeclaration;
wxTextCtrl* m_declaration;
wxStdDialogButtonSizer* m_sdbSizerButtons;
wxButton* m_sdbSizerButtonsOK;
public:
wxZRColaAboutBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About ZRCola"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = wxT("ZRColaAbout") );
~wxZRColaAboutBase();
};
///////////////////////////////////////////////////////////////////////////////
/// Class wxZRColaUpdaterBase
///////////////////////////////////////////////////////////////////////////////
class wxZRColaUpdaterBase : public wxDialog
{
private:
protected:
wxTextCtrl* m_log;
wxButton* m_buttonUpdate;
wxButton* m_buttonClose;
// Virtual event handlers, overide them in your derived class
virtual void OnIdle( wxIdleEvent& event ) { event.Skip(); }
virtual void OnUpdate( wxCommandEvent& event ) { event.Skip(); }
virtual void OnClose( wxCommandEvent& event ) { event.Skip(); }
public:
wxZRColaUpdaterBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Product Update"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = wxT("ZRColaUpdater") );
~wxZRColaUpdaterBase();
};
///////////////////////////////////////////////////////////////////////////////
/// Class wxZRColaCharRequestBase
///////////////////////////////////////////////////////////////////////////////
class wxZRColaCharRequestBase : public wxDialog
{
private:
protected:
wxStaticText* m_characterLbl;
wxTextCtrl* m_character;
wxStaticText* m_characterNote;
wxStaticText* m_contextLbl;
wxTextCtrl* m_context;
wxStaticText* m_note;
wxStdDialogButtonSizer* m_sdbSizerButtons;
wxButton* m_sdbSizerButtonsOK;
wxButton* m_sdbSizerButtonsCancel;
// Virtual event handlers, overide them in your derived class
virtual void OnOKButtonClick( wxCommandEvent& event ) { event.Skip(); }
public:
wxZRColaCharRequestBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Request a New Character"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = wxT("ZRColaCharRequest") );
~wxZRColaCharRequestBase();
};
///////////////////////////////////////////////////////////////////////////////
/// Class wxZRColaTranslationSeqBase
///////////////////////////////////////////////////////////////////////////////
class wxZRColaTranslationSeqBase : public wxDialog
{
private:
protected:
wxStaticText* m_transLbl;
wxStaticText* m_availableLbl;
wxListBox* m_available;
wxButton* m_add;
wxButton* m_remove;
wxStaticText* m_selectedLbl;
wxListBox* m_selected;
wxButton* m_selectedUp;
wxButton* m_selectedDown;
wxStdDialogButtonSizer* m_sdbSizerButtons;
wxButton* m_sdbSizerButtonsOK;
wxButton* m_sdbSizerButtonsCancel;
// Virtual event handlers, overide them in your derived class
virtual void OnInitDialog( wxInitDialogEvent& event ) { event.Skip(); }
virtual void OnUpdate( wxUpdateUIEvent& event ) { event.Skip(); }
virtual void OnAvailableChar( wxKeyEvent& event ) { event.Skip(); }
virtual void OnAvailableDClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnAdd( wxCommandEvent& event ) { event.Skip(); }
virtual void OnRemove( wxCommandEvent& event ) { event.Skip(); }
virtual void OnSelectedChar( wxKeyEvent& event ) { event.Skip(); }
virtual void OnSelectedDClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnSelectedUp( wxCommandEvent& event ) { event.Skip(); }
virtual void OnSelectedDown( wxCommandEvent& event ) { event.Skip(); }
virtual void OnOKButtonClick( wxCommandEvent& event ) { event.Skip(); }
public:
wxZRColaTranslationSeqBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Custom Translation Sequence"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = wxT("ZRColaTranslationSeq") );
~wxZRColaTranslationSeqBase();
};
#endif //__ZRCOLAGUI_H__

View File

@@ -1,5 +1,5 @@
/*
Copyright 2015-2016 Amebis
Copyright 2015-2019 Amebis
This file is part of ZRCola.

View File

@@ -1,5 +1,5 @@
/*
Copyright 2015-2016 Amebis
Copyright 2015-2019 Amebis
This file is part of ZRCola.
@@ -19,16 +19,48 @@
#pragma once
#include "../include/zrcola.h"
#include "../include/version.h"
#include "zrcolaabout.h"
#include "zrcolaapp.h"
#include "zrcolachrcatpnl.h"
#include "zrcolachrgrid.h"
#include "zrcolachrreq.h"
#include "zrcolacomppnl.h"
#include "zrcolafrm.h"
#include "zrcolakeyhndlr.h"
#include "zrcolasettings.h"
#include "zrcolatranseq.h"
#include "zrcolaupdater.h"
#include <zrcola/compose.h>
#include <zrcola/decompose.h>
#include <Updater/chkthread.h>
#include <wx/msgdlg.h>
#include <wxex/common.h>
#include <wxex/url.h>
#include <wxex/persist/auimanager.h>
#include <wxex/persist/toplevel.h>
#include <wx/clipbrd.h>
#include <wx/dcclient.h>
#include <wx/ffile.h>
#include <wx/msgdlg.h>
#include <wx/persist.h>
#include <wx/persist/toplevel.h>
#include <wx/socket.h>
#include <wx/tokenzr.h>
#include <wx/utils.h>
#include <wx/valtext.h>
#include <WinStd/MSI.h>
#include <fstream>
#include <string>
#include <utility>
#include <vector>
#include <stdex/idrec.h>
#if defined(__WXMSW__)
#include <Msi.h>
#include <ShObjIdl.h>
#include <ShlGuid.h>
#endif

32
ZRCola/zrcolaabout.cpp Normal file
View File

@@ -0,0 +1,32 @@
/*
Copyright 2015-2019 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"
//////////////////////////////////////////////////////////////////////////
// wxZRColaAbout
//////////////////////////////////////////////////////////////////////////
wxZRColaAbout::wxZRColaAbout(wxWindow* parent) : wxZRColaAboutBase(parent)
{
m_staticTextVersion->SetLabelText(wxT(PRODUCT_VERSION_STR));
m_staticTextCopyright->SetLabelText(wxString::Format(_("© 2004-%s ZRC SAZU"), wxT(PRODUCT_BUILD_YEAR_STR)));
}

View File

@@ -1,5 +1,5 @@
/*
Copyright 2015-2016 Amebis
Copyright 2015-2019 Amebis
This file is part of ZRCola.
@@ -17,19 +17,22 @@
along with ZRCola. If not, see <http://www.gnu.org/licenses/>.
*/
///
/// Forward declarations
///
class wxZRColaAbout;
#pragma once
#include "common.h"
#include "zrcolagui.h"
namespace ZRCola {
///
/// Normalizes a decomposed string
///
/// \param[in] input Input string (UTF-16)
/// \param[in] inputMax Length of the input string in characters. Can be (size_t)-1 if \p input is zero terminated.
/// \param[out] output Output string (UTF-16)
/// \param[out] map The vector of source to destination index mappings (optional)
///
void ZRCOLA_API Normalize(_In_z_count_(inputMax) const wchar_t* input, _In_ size_t inputMax, _Out_ std::wstring &output, _Out_opt_ std::vector<mapping>* map = NULL);
///
/// About ZRCola dialog
///
class wxZRColaAbout : public wxZRColaAboutBase
{
public:
wxZRColaAbout(wxWindow* parent);
};

View File

@@ -1,5 +1,5 @@
/*
Copyright 2015-2016 Amebis
Copyright 2015-2019 Amebis
This file is part of ZRCola.
@@ -18,6 +18,9 @@
*/
#include "stdafx.h"
#if defined(__WXMSW__)
#pragma comment(lib, "msi.lib")
#endif
//////////////////////////////////////////////////////////////////////////
@@ -27,17 +30,163 @@
wxIMPLEMENT_APP(ZRColaApp);
ZRColaApp::ZRColaApp() :
m_mainWnd(NULL),
m_lang_ui(wxLANGUAGE_DEFAULT),
wxApp()
{
}
bool ZRColaApp::OnInit()
{
if (!wxAppEx::OnInit())
#if defined(__WXMSW__)
// To compensate migration to non-advertised shortcut, do the Microsoft Installer's feature completeness check manually.
// If execution got this far in the first place (EXE and dependent DLLs are present and loadable).
// Furthermore, this increments program usage counter.
if (::MsiQueryFeatureState(_T(PRODUCT_VERSION_GUID), _T("featZRCola")) != INSTALLSTATE_UNKNOWN)
::MsiUseFeature(_T(PRODUCT_VERSION_GUID), _T("featZRCola"));
#endif
// Initialize configuration.
wxConfigBase *cfgPrev = wxConfigBase::Set(new wxConfig(wxT(PRODUCT_CFG_APPLICATION), wxT(PRODUCT_CFG_VENDOR)));
if (cfgPrev) wxDELETE(cfgPrev);
if (!wxApp::OnInit())
return false;
if (wxLocale::IsAvailable(wxLANGUAGE_SLOVENIAN))
// Initialize locale.
if (wxInitializeLocale(m_locale, &m_lang_ui)) {
wxVERIFY(m_locale.AddCatalog(wxT("wxExtend") wxT(wxExtendVersion)));
wxVERIFY(m_locale.AddCatalog(wxT("UpdaterZRCola")));
wxVERIFY(m_locale.AddCatalog(wxT("libZRColaUI")));
wxVERIFY(m_locale.AddCatalog(wxT("ZRCola")));
wxVERIFY(m_locale.AddCatalog(wxT("ZRCola-zrcdb")));
}
wxZRColaFrame* mainFrame = new wxZRColaFrame();
#ifdef __WXMSW__
// Create global event.
m_running.attach(::CreateEvent(NULL, FALSE, FALSE, _T(PRODUCT_CFG_APPLICATION) _T("{BBDE7AAD-29B6-4B83-ADA1-92AFA81A0883}")));
if (::GetLastError() == ERROR_ALREADY_EXISTS) {
// ZRCola is already running. Find its window.
HWND okno = ::FindWindow(_T("wxWindowNR"), _("ZRCola"));
if (okno) {
if (::IsIconic(okno))
::SendMessage(okno, WM_SYSCOMMAND, SC_RESTORE, 0);
::SetActiveWindow(okno);
::SetForegroundWindow(okno);
mainFrame->Show();
// Not an error condition actually; Just nothing else to do...
return false;
}
}
#endif
std::fstream dat((LPCTSTR)GetDatabaseFilePath(), std::ios_base::in | std::ios_base::binary);
if (dat.good()) {
if (stdex::idrec::find<ZRCola::recordid_t, ZRCola::recordsize_t, ZRCOLA_RECORD_ALIGN>(dat, ZRCOLA_DB_ID, sizeof(ZRCola::recordid_t))) {
ZRCola::recordsize_t size;
dat.read((char*)&size, sizeof(ZRCola::recordsize_t));
if (dat.good()) {
bool has_translation_data = false;
for (;;) {
ZRCola::recordid_t id;
if (!stdex::idrec::read_id(dat, id, size)) break;
if (id == ZRCola::translation_rec::id) {
dat >> ZRCola::translation_rec(m_t_db);
if (dat.good()) {
has_translation_data = true;
} else {
wxFAIL_MSG(wxT("Error reading translation data from ZRCola.zrcdb."));
m_t_db.clear();
}
} else if (id == ZRCola::transet_rec::id) {
dat >> ZRCola::transet_rec(m_ts_db);
if (!dat.good()) {
wxFAIL_MSG(wxT("Error reading translation set data from ZRCola.zrcdb."));
m_ts_db.clear();
}
} else if (id == ZRCola::transeq_rec::id) {
dat >> ZRCola::transeq_rec(m_tsq_db);
if (!dat.good()) {
wxFAIL_MSG(wxT("Error reading translation sequence data from ZRCola.zrcdb."));
m_tsq_db.clear();
}
} else if (id == ZRCola::langchar_rec::id) {
dat >> ZRCola::langchar_rec(m_lc_db);
if (!dat.good()) {
wxFAIL_MSG(wxT("Error reading language character data from ZRCola.zrcdb."));
m_lc_db.clear();
}
} else if (id == ZRCola::language_rec::id) {
dat >> ZRCola::language_rec(m_lang_db);
if (!dat.good()) {
wxFAIL_MSG(wxT("Error reading language character data from ZRCola.zrcdb."));
m_lang_db.clear();
}
} else if (id == ZRCola::keyseq_rec::id) {
dat >> ZRCola::keyseq_rec(m_ks_db);
if (!dat.good()) {
wxFAIL_MSG(wxT("Error reading key sequences data from ZRCola.zrcdb."));
m_ks_db.clear();
}
} else if (id == ZRCola::character_rec::id) {
dat >> ZRCola::character_rec(m_chr_db);
if (!dat.good()) {
wxFAIL_MSG(wxT("Error reading character data from ZRCola.zrcdb."));
m_chr_db.clear();
}
} else if (id == ZRCola::chrcat_rec::id) {
dat >> ZRCola::chrcat_rec(m_cc_db);
if (!dat.good()) {
wxFAIL_MSG(wxT("Error reading character category data from ZRCola.zrcdb."));
m_cc_db.clear();
}
} else if (id == ZRCola::chrtag_rec::id) {
dat >> ZRCola::chrtag_rec(m_ct_db);
if (!dat.good()) {
wxFAIL_MSG(wxT("Error reading character tag data from ZRCola.zrcdb."));
m_ct_db.clear();
}
} else if (id == ZRCola::tagname_rec::id) {
dat >> ZRCola::tagname_rec(m_tn_db);
if (!dat.good()) {
wxFAIL_MSG(wxT("Error reading tag name data from ZRCola.zrcdb."));
m_tn_db.clear();
}
} else
stdex::idrec::ignore<ZRCola::recordsize_t, ZRCOLA_RECORD_ALIGN>(dat);
}
if (!has_translation_data)
wxFAIL_MSG(wxT("ZRCola.zrcdb has no translation data."));
}
} else
wxFAIL_MSG(wxT("ZRCola.zrcdb is not a valid ZRCola database."));
} else
wxFAIL_MSG(wxT("ZRCola.zrcdb not found or cannot be opened."));
// Initialize sockets. Otherwise Updater thread will not work.
wxSocketBase::Initialize();
m_mainWnd = new wxZRColaFrame();
m_mainWnd->Show();
return true;
}
int ZRColaApp::OnExit()
{
wxSocketBase::Shutdown();
int res = wxApp::OnExit();
#ifdef __WXMSW__
m_running.free();
#endif
return res;
}

View File

@@ -1,5 +1,5 @@
/*
Copyright 2015-2016 Amebis
Copyright 2015-2019 Amebis
This file is part of ZRCola.
@@ -25,20 +25,95 @@ class ZRColaApp;
#pragma once
#include <wxex/appex.h>
#include "zrcolafrm.h"
#include <WinStd/Win.h>
#include <wx/app.h>
#include <wx/config.h>
#include <wx/intl.h>
#include <zrcola/character.h>
#include <zrcola/language.h>
#include <zrcola/translate.h>
#include <zrcola/tag.h>
#include <zrcolaui/keyboard.h>
///
/// ZRCola application
///
class ZRColaApp : public wxAppEx
class ZRColaApp : public wxApp
{
public:
ZRColaApp();
///
/// Called when application initializes.
///
/// \returns
/// - true if initialization succeeded
/// - false otherwise
/// - \c true if initialization succeeded
/// - \c false otherwise
///
virtual bool OnInit();
///
/// Called when application uninitializes.
///
/// \returns Result code to return to OS
///
virtual int OnExit();
///
/// \returns Path to database files
///
inline wxString GetDatabasePath() const;
///
/// \returns Path to ZRCola.zrcdb file
///
inline wxString GetDatabaseFilePath() const;
public:
ZRCola::translation_db m_t_db; ///< Translation database
ZRCola::transet_db m_ts_db; ///< Translation set database
ZRCola::transeq_db m_tsq_db; ///< Translation sequence database
ZRCola::langchar_db m_lc_db; ///< Language character database
ZRCola::language_db m_lang_db; ///< Language database
ZRCola::keyseq_db m_ks_db; ///< Key sequence database
ZRCola::character_db m_chr_db; ///< Character database
ZRCola::chrcat_db m_cc_db; ///< Characted category database
ZRCola::chrtag_db m_ct_db; ///< Character tag database
ZRCola::tagname_db m_tn_db; ///< Tag name database
wxZRColaFrame *m_mainWnd; ///< Main window
wxLocale m_locale; ///< Current locale
wxLanguage m_lang_ui; ///< Translation language (language of User Interface, wxLANGUAGE_DEFAULT = English)
protected:
#ifdef __WXMSW__
winstd::win_handle<NULL> m_running; ///< Global Win32 event to determine if another instance of ZRCola is already running
#endif
};
wxDECLARE_APP(ZRColaApp);
inline wxString ZRColaApp::GetDatabasePath() const
{
wxString sPath;
if (wxConfigBase::Get()->Read(wxT("DatabasePath"), &sPath)) {
if (!wxEndsWithPathSeparator(sPath))
sPath += wxFILE_SEP_PATH;
} else {
sPath = wxPathOnly(argv[0]);
sPath += wxT("\\..\\data\\");
}
return sPath;
}
inline wxString ZRColaApp::GetDatabaseFilePath() const
{
return GetDatabasePath() + wxT("ZRCola.zrcdb");
}

240
ZRCola/zrcolachrcatpnl.cpp Normal file
View File

@@ -0,0 +1,240 @@
/*
Copyright 2015-2019 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"
//////////////////////////////////////////////////////////////////////////
// wxZRColaCharacterCatalogPanel
//////////////////////////////////////////////////////////////////////////
BEGIN_EVENT_TABLE(wxZRColaCharacterCatalogPanel, wxZRColaCharacterCatalogPanelBase)
EVT_MENU(wxZRColaCharacterCatalogPanel::wxID_FOCUS_SOURCE, wxZRColaCharacterCatalogPanel::OnFocusSource)
END_EVENT_TABLE()
wxZRColaCharacterCatalogPanel::wxZRColaCharacterCatalogPanel(wxWindow* parent) : wxZRColaCharacterCatalogPanelBase(parent)
{
std::fstream dat((LPCTSTR)dynamic_cast<ZRColaApp*>(wxTheApp)->GetDatabaseFilePath(), std::ios_base::in | std::ios_base::binary);
if (dat.good()) {
if (stdex::idrec::find<ZRCola::recordid_t, ZRCola::recordsize_t, ZRCOLA_RECORD_ALIGN>(dat, ZRCOLA_DB_ID, sizeof(ZRCola::recordid_t))) {
ZRCola::recordsize_t size;
dat.read((char*)&size, sizeof(ZRCola::recordsize_t));
if (dat.good()) {
ZRCola::chrgrp_rec rec(m_cg_db);
if (rec.find(dat, size)) {
dat >> rec;
if (!dat.good()) {
wxFAIL_MSG(wxT("Error reading character group data from ZRCola.zrcdb."));
m_cg_db.idxRank.clear();
m_cg_db.data .clear();
}
} else
wxFAIL_MSG(wxT("ZRCola.zrcdb has no character group data."));
}
} else
wxFAIL_MSG(wxT("ZRCola.zrcdb is not a valid ZRCola database."));
} else
wxFAIL_MSG(wxT("ZRCola.zrcdb not found or cannot be opened."));
if (!m_cg_db.idxRank.empty()) {
// Populate character group list.
for (size_t i = 0, n = m_cg_db.idxRank.size(); i < n; i++) {
const ZRCola::chrgrp_db::chrgrp &cg = m_cg_db.idxRank[i];
wxString
label(cg.name(), cg.name_len()),
label_tran2(wxGetTranslation(label, wxT("ZRCola-zrcdb")));
m_choice->Insert(label_tran2, i);
}
m_cg_id = m_cg_db.idxRank[0].grp;
m_choice->Select(0);
Update();
}
// Register frame specific hotkey(s).
{
wxAcceleratorEntry entries[1];
entries[0].Set(wxACCEL_NORMAL, WXK_ESCAPE, wxID_FOCUS_SOURCE);
SetAcceleratorTable(wxAcceleratorTable(_countof(entries), entries));
}
}
wxZRColaCharacterCatalogPanel::~wxZRColaCharacterCatalogPanel()
{
}
void wxZRColaCharacterCatalogPanel::OnChoice(wxCommandEvent& event)
{
const ZRCola::chrgrp_db::chrgrp &cg = m_cg_db.idxRank[event.GetSelection()];
if (m_cg_id != cg.grp) {
m_cg_id = cg.grp;
Update();
}
event.Skip();
}
void wxZRColaCharacterCatalogPanel::OnGridClick(wxGridEvent& event)
{
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
if (app->m_mainWnd) {
app->m_mainWnd->m_panel->m_source->WriteText(m_grid->GetCellValue(event.GetRow(), event.GetCol()));
app->m_mainWnd->m_panel->m_source->SetFocus();
}
event.Skip();
}
void wxZRColaCharacterCatalogPanel::OnGridKeyDown(wxKeyEvent& event)
{
switch (event.GetKeyCode()) {
case WXK_RETURN:
case WXK_NUMPAD_ENTER:
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
if (app->m_mainWnd) {
app->m_mainWnd->m_panel->m_source->WriteText(m_grid->GetCellValue(m_grid->GetGridCursorRow(), m_grid->GetGridCursorCol()));
app->m_mainWnd->m_panel->m_source->SetFocus();
event.StopPropagation();
return;
}
}
event.Skip();
}
void wxZRColaCharacterCatalogPanel::OnShowAll(wxCommandEvent& event)
{
UNREFERENCED_PARAMETER(event);
Update();
event.Skip();
}
void wxZRColaCharacterCatalogPanel::OnFocusSource(wxCommandEvent& event)
{
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
if (app->m_mainWnd) {
app->m_mainWnd->m_panel->m_source->SetFocus();
event.StopPropagation();
return;
}
event.Skip();
}
void wxZRColaCharacterCatalogPanel::Update()
{
const ZRCola::chrgrp_db::chrgrp &cg = m_cg_db.idxRank[m_choice->GetSelection()];
if (m_show_all->GetValue()) {
m_grid->SetCharacters(
wxString(cg.chrlst(), cg.chrlst_end()),
wxArrayShort(reinterpret_cast<const short*>(cg.chrshow()), reinterpret_cast<const short*>(cg.chrshow_end())));
} else {
// Select frequently used characters only.
const wchar_t *src = cg.chrlst();
const unsigned __int16 *shown = cg.chrshow();
wxArrayString chars;
for (size_t i = 0, i_end = cg.chrlst_len(), j = 0; i < i_end; j++) {
for (unsigned __int16 k = 0, mask = shown[j]; k < 16 && i < i_end; k++, mask >>= 1) {
size_t len = wcsnlen(src + i, i_end - i);
if (mask & 1)
chars.Add(wxString(src + i, len));
i += len + 1;
}
}
m_grid->SetCharacters(chars);
}
// As size of the grid might have changed, relayout the panel.
Layout();
}
//////////////////////////////////////////////////////////////////////////
// wxPersistentZRColaCharacterCatalogPanel
//////////////////////////////////////////////////////////////////////////
wxPersistentZRColaCharacterCatalogPanel::wxPersistentZRColaCharacterCatalogPanel(wxZRColaCharacterCatalogPanel *wnd) : wxPersistentWindow<wxZRColaCharacterCatalogPanel>(wnd)
{
}
wxString wxPersistentZRColaCharacterCatalogPanel::GetKind() const
{
return wxT(wxPERSIST_TLW_KIND);
}
void wxPersistentZRColaCharacterCatalogPanel::Save() const
{
auto wnd = static_cast<const wxZRColaCharacterCatalogPanel*>(GetWindow()); // dynamic_cast is not reliable as we are typically called late in the wxTopLevelWindowMSW destructor.
SaveValue(wxT("charGroup"), wnd->m_cg_id);
SaveValue(wxT("showAll" ), wnd->m_show_all->GetValue());
}
bool wxPersistentZRColaCharacterCatalogPanel::Restore()
{
auto wnd = dynamic_cast<wxZRColaCharacterCatalogPanel*>(GetWindow());
bool update = false;
// Restore selected character group.
int cg_id;
if (RestoreValue(wxT("charGroup"), &cg_id)) {
for (size_t i = 0, n = wnd->m_cg_db.idxRank.size(); i < n; i++) {
const ZRCola::chrgrp_db::chrgrp &cg = wnd->m_cg_db.idxRank[i];
if (cg.grp == cg_id) {
if (wnd->m_cg_id != cg.grp) {
wnd->m_cg_id = cg.grp;
wnd->m_choice->Select(i);
update = true;
}
break;
}
}
}
bool show_all;
if (RestoreValue(wxT("showAll"), &show_all)) {
if (wnd->m_show_all->GetValue() != show_all) {
wnd->m_show_all->SetValue(show_all);
update = true;
}
}
if (update)
wnd->Update();
return true;
}

82
ZRCola/zrcolachrcatpnl.h Normal file
View File

@@ -0,0 +1,82 @@
/*
Copyright 2015-2019 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 wxZRColaCharacterCatalogPanel;
#pragma once
#include "zrcolagui.h"
#include <zrcolaui/chargroup.h>
#include <wx/persist/window.h>
///
/// ZRCola character groups panel
///
class wxZRColaCharacterCatalogPanel : public wxZRColaCharacterCatalogPanelBase
{
public:
enum
{
wxID_FOCUS_SOURCE = 6000,
};
wxZRColaCharacterCatalogPanel(wxWindow* parent);
virtual ~wxZRColaCharacterCatalogPanel();
friend class wxPersistentZRColaCharacterCatalogPanel; // Allow saving/restoring window state.
protected:
virtual void OnChoice(wxCommandEvent& event);
virtual void OnGridClick(wxGridEvent& event);
virtual void OnGridKeyDown(wxKeyEvent& event);
virtual void OnShowAll(wxCommandEvent& event);
void OnFocusSource(wxCommandEvent& event);
DECLARE_EVENT_TABLE()
void Update();
protected:
ZRCola::chrgrp_db m_cg_db; ///< Character group database
int m_cg_id; ///< Selected character group ID
};
///
/// Supports saving/restoring wxZRColaCharacterCatalogPanel state
///
class wxPersistentZRColaCharacterCatalogPanel : public wxPersistentWindow<wxZRColaCharacterCatalogPanel>
{
public:
wxPersistentZRColaCharacterCatalogPanel(wxZRColaCharacterCatalogPanel *wnd);
virtual wxString GetKind() const;
virtual void Save() const;
virtual bool Restore();
};
inline wxPersistentObject *wxCreatePersistentObject(wxZRColaCharacterCatalogPanel *wnd)
{
return new wxPersistentZRColaCharacterCatalogPanel(wnd);
}

274
ZRCola/zrcolachrgrid.cpp Normal file
View File

@@ -0,0 +1,274 @@
/*
Copyright 2015-2019 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"
//////////////////////////////////////////////////////////////////////////
// wxZRColaCharGrid
//////////////////////////////////////////////////////////////////////////
BEGIN_EVENT_TABLE(wxZRColaCharGrid, wxGrid)
EVT_SIZE(wxZRColaCharGrid::OnSize)
EVT_KEY_DOWN(wxZRColaCharGrid::OnKeyDown)
EVT_TIMER(wxZRColaCharGrid::wxID_TOOLTIP_TIMER, wxZRColaCharGrid::OnTooltipTimer)
END_EVENT_TABLE()
wxZRColaCharGrid::wxZRColaCharGrid() : wxGrid()
{
Init();
}
wxZRColaCharGrid::wxZRColaCharGrid(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name) : wxGrid(parent, id, pos, size, wxWANTS_CHARS, name)
{
Init();
SetDefaultRowSize(FromDIP(wxZRColaCharacterGridRowHeight));
// Create timer for saving the state.
m_timerToolTip.SetOwner(this, wxID_TOOLTIP_TIMER);
// wxEVT_MOTION event must be connected to the wxGridWindow, not wxGrid itself.
wxWindow *gridWnd = GetGridWindow();
gridWnd->Connect(gridWnd->GetId(), wxEVT_MOTION, wxMouseEventHandler(wxZRColaCharGrid::OnMotion), NULL, this);
}
wxZRColaCharGrid::~wxZRColaCharGrid()
{
wxWindow *gridWnd = GetGridWindow();
gridWnd->Disconnect(gridWnd->GetId(), wxEVT_MOTION, wxMouseEventHandler(wxZRColaCharGrid::OnMotion), NULL, this);
}
void wxZRColaCharGrid::Init()
{
m_regenerate = false;
m_isResizing = false;
m_toolTipIdx = (size_t)-1;
}
void wxZRColaCharGrid::SetCharacters(const wxString &chars)
{
m_chars.Clear();
const wxCStrData chr = chars.GetData();
for (size_t i = 0, i_end = chars.Length(), i_next; i < i_end; i = i_next + 1) {
i_next = i + _tcsnlen(chr + i, i_end - i);
m_chars.Add(wxString(chr + i, chr + i_next));
};
m_relevance.Clear();
m_regenerate = true;
// Invoke OnSize(), which will populate the grid.
wxSizeEvent e(GetSize(), m_windowId);
e.SetEventObject(this);
HandleWindowEvent(e);
}
void wxZRColaCharGrid::SetCharacters(const wxArrayString &chars)
{
m_chars = chars;
m_relevance.Clear();
m_regenerate = true;
// Invoke OnSize(), which will populate the grid.
wxSizeEvent e(GetSize(), m_windowId);
e.SetEventObject(this);
HandleWindowEvent(e);
}
void wxZRColaCharGrid::SetCharacters(const wxString &chars, const wxArrayShort &relevance)
{
m_chars.Clear();
const wxCStrData chr = chars.GetData();
for (size_t i = 0, i_end = chars.Length(), i_next; i < i_end; i = i_next + 1) {
i_next = i + _tcsnlen(chr + i, i_end - i);
m_chars.Add(wxString(chr + i, chr + i_next));
};
m_relevance = relevance;
m_regenerate = true;
// Invoke OnSize(), which will populate the grid.
wxSizeEvent e(GetSize(), m_windowId);
e.SetEventObject(this);
HandleWindowEvent(e);
}
wxString wxZRColaCharGrid::GetToolTipText(int idx)
{
wxASSERT_MSG(idx < (int)m_chars.GetCount(), wxT("index out of bounds"));
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
const auto &chr = m_chars[idx];
// See if this character has a key sequence registered.
std::unique_ptr<ZRCola::keyseq_db::keyseq> ks((ZRCola::keyseq_db::keyseq*)new char[sizeof(ZRCola::keyseq_db::keyseq) + sizeof(wchar_t)*chr.length()]);
ks->ZRCola::keyseq_db::keyseq::keyseq(NULL, 0, chr.data(), chr.length());
ZRCola::keyseq_db::indexKey::size_type start;
if (app->m_ks_db.idxChr.find(*ks, start)) {
ZRCola::keyseq_db::keyseq &seq = app->m_ks_db.idxChr[start];
wxString ks_str;
if (ZRCola::keyseq_db::GetSequenceAsText(seq.seq(), seq.seq_len(), ks_str))
return wxString::Format(wxT("U+%s (%s)"), ZRCola::GetUnicodeDump(chr.data(), chr.length(), _T("+")).c_str(), ks_str.c_str());
}
return wxString::Format(wxT("U+%s"), ZRCola::GetUnicodeDump(chr.data(), chr.length(), _T("+")).c_str());
}
void wxZRColaCharGrid::OnSize(wxSizeEvent& event)
{
event.Skip();
if (m_isResizing)
return;
m_isResizing = true;
// Calculate initial estimate of columns and rows.
wxSize size(event.GetSize());
size_t
char_count = m_chars.GetCount();
int
col_width = FromDIP(wxZRColaCharacterGridColumnWidth),
row_height = FromDIP(wxZRColaCharacterGridRowHeight),
width = size.GetWidth() - m_rowLabelWidth - m_extraWidth,
cols = std::max<int>(width / col_width, 1),
rows = std::max<int>((char_count + cols - 1) / cols, 1);
if (m_colLabelHeight + rows*row_height + m_extraHeight > size.GetHeight()) {
// Vertical scrollbar will be shown. Adjust the width and recalculate layout to avoid horizontal scrollbar.
width = std::max<int>(width - wxSystemSettings::GetMetric(wxSYS_VSCROLL_X, this), 0);
cols = std::max<int>(width / col_width, 1);
rows = std::max<int>((char_count + cols - 1) / cols, 1);
}
BeginBatch();
if (m_regenerate || cols != m_numCols) {
// Build and set new grid data.
wxGridStringTable *table = new wxGridStringTable(rows, cols);
for (int r = 0, i = 0; r < rows; r++)
for (int c = 0; c < cols; c++, i++)
table->SetValue(r, c, i < (int)char_count ? m_chars[i] : wxEmptyString);
SetTable(table, true);
if (!m_relevance.IsEmpty()) {
const wxColour colour_def;
const wxColour colour_irr = wxSystemSettings::GetColour(wxSYS_COLOUR_BTNHIGHLIGHT);
for (int r = 0, i = 0; r < rows; r++)
for (int c = 0; c < cols; c++, i++)
SetCellBackgroundColour(r, c, i >= (int)char_count || ((unsigned short)(m_relevance[i/16]) & (1<<(i%16))) ? colour_def : colour_irr);
} else {
for (int r = 0, i = 0; r < rows; r++)
for (int c = 0; c < cols; c++, i++)
SetAttr(r, c, NULL);
}
m_regenerate = false;
}
for (int c = 0; c < cols; c++)
SetColSize(c, col_width);
//// Set column widths to stretch to full width.
//for (int c = 0, x_l = 0; c < cols; c++) {
// int x_r = (c + 1)*width/cols;
// SetColSize(c, x_r - x_l);
// x_l = x_r;
//}
EndBatch();
m_isResizing = false;
}
void wxZRColaCharGrid::OnKeyDown(wxKeyEvent& event)
{
wxWindow *parentWnd;
int key_code = event.GetKeyCode();
if (key_code == WXK_TAB && (parentWnd = GetParent()) != NULL) {
wxNavigationKeyEvent eventNav;
eventNav.SetDirection(!event.ShiftDown());
eventNav.SetWindowChange(event.ControlDown());
eventNav.SetEventObject(this);
if (parentWnd->HandleWindowEvent(eventNav))
return;
} else if (key_code == WXK_LEFT && m_currentCellCoords.GetCol() == 0 && m_currentCellCoords.GetRow()) {
GoToCell(m_currentCellCoords.GetRow() - 1, m_numCols - 1);
event.StopPropagation();
return;
} else if (key_code == WXK_RIGHT && m_currentCellCoords.GetCol() == m_numCols - 1 && m_currentCellCoords.GetRow() < m_numRows - 1) {
GoToCell(m_currentCellCoords.GetRow() + 1, 0);
event.StopPropagation();
return;
}
event.Skip();
}
void wxZRColaCharGrid::OnMotion(wxMouseEvent& event)
{
event.Skip();
wxPoint ptMouse(CalcUnscrolledPosition(event.GetPosition()));
int
col = XToCol(ptMouse.x - m_rowLabelWidth ),
row = YToRow(ptMouse.y - m_colLabelHeight);
if (col == wxNOT_FOUND || row == wxNOT_FOUND )
return;
size_t toolTipIdx = row*m_numCols + col;
if (toolTipIdx >= m_chars.GetCount()) {
// Index out of range.
m_toolTipIdx = (size_t)-1;
m_timerToolTip.Stop();
return;
} else if (toolTipIdx != m_toolTipIdx) {
// Cell changed.
m_toolTipIdx = toolTipIdx;
wxWindow *gridWnd = GetGridWindow();
if (gridWnd->GetToolTip()) {
// The tooltip is already shown. Update it immediately.
gridWnd->SetToolTip(GetToolTipText(m_toolTipIdx));
} else {
// This must be our initial entry. Schedule tooltip display after 1s.
m_timerToolTip.Start(1000, true);
}
}
}
void wxZRColaCharGrid::OnTooltipTimer(wxTimerEvent& event)
{
event.Skip();
if (m_toolTipIdx >= m_chars.GetCount())
return;
GetGridWindow()->SetToolTip(GetToolTipText(m_toolTipIdx));
}

124
ZRCola/zrcolachrgrid.h Normal file
View File

@@ -0,0 +1,124 @@
/*
Copyright 2015-2019 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 wxZRColaCharGrid;
#pragma once
#include <wx/grid.h>
///
/// Character grid layout
///
#define wxZRColaCharacterGridColumnWidth 35
#define wxZRColaCharacterGridRowHeight 35
///
/// ZRCola character grid
///
class wxZRColaCharGrid : public wxGrid
{
public:
enum
{
wxID_TOOLTIP_TIMER = 2000,
};
wxZRColaCharGrid();
wxZRColaCharGrid(wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxWANTS_CHARS, const wxString& name = wxGridNameStr);
virtual ~wxZRColaCharGrid();
///
/// Sets new array of characters to display
///
/// \param[in] chars The string containing characters to display (zero delimited)
///
void SetCharacters(const wxString &chars);
///
/// Sets new array of characters to display
///
/// \param[in] chars The array of characters to display
///
void SetCharacters(const wxArrayString &chars);
///
/// Sets new array of characters to display
///
/// \param[in] chars The string containing characters to display (zero delimited)
/// \param[in] relevance Bit-array of \p chars relevance (1=more relevant, 0=less relevant)
///
void SetCharacters(const wxString &chars, const wxArrayShort &relevance);
///
/// Returns displayed characters
///
/// \returns The string containing displayed characters
///
inline const wxArrayString& GetCharacters() const
{
return m_chars;
}
///
/// Returns given character coordinates
///
/// \param[in] c Character
///
/// \returns Grid coordinates of selected character or (-1, -1) if character not found.
///
inline wxGridCellCoords GetCharacterCoords(const wxString &c) const
{
for (size_t i = 0, n = m_chars.GetCount(); ; i++) {
if (i >= n)
return wxGridCellCoords(-1, -1);
else if (m_chars[i] == c)
return wxGridCellCoords(i / m_numCols, i % m_numCols);
}
}
protected:
virtual wxString GetToolTipText(int idx);
void OnSize(wxSizeEvent& event);
void OnKeyDown(wxKeyEvent& event);
void OnMotion(wxMouseEvent& event);
void OnTooltipTimer(wxTimerEvent& event);
DECLARE_EVENT_TABLE()
private:
void Init(); // common part of all ctors
protected:
wxArrayString m_chars; ///< Array of Unicode characters to display in the grid
wxArrayShort m_relevance; ///< Bit-array of `m_chars` relevance
private:
bool m_regenerate; ///< Force regenerate grid table
bool m_isResizing; ///< Prevents nesting of OnSize() method.
wxTimer m_timerToolTip; ///< Timer for displaying tooltip
size_t m_toolTipIdx; ///< Index of cell for tooltip display
};

106
ZRCola/zrcolachrreq.cpp Normal file
View File

@@ -0,0 +1,106 @@
/*
Copyright 2015-2019 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"
//////////////////////////////////////////////////////////////////////////
// wxZRColaCharRequest
//////////////////////////////////////////////////////////////////////////
wxZRColaCharRequest::wxZRColaCharRequest(wxWindow* parent) : wxZRColaCharRequestBase(parent)
{
m_character->PushEventHandler(new wxZRColaKeyHandler());
m_context->PushEventHandler(new wxZRColaKeyHandler());
}
wxZRColaCharRequest::~wxZRColaCharRequest()
{
m_context->PopEventHandler(true);
m_character->PopEventHandler(true);
}
void wxZRColaCharRequest::OnOKButtonClick(wxCommandEvent& event)
{
event.Skip();
const wxString chr = m_character->GetValue();
const wxString ctx = m_context->GetValue();
wxString body;
body += _("Character") + wxT(": ");
for (size_t i = 0, i_end = chr.Length(); i < i_end; i++) {
if (chr[i] < 0x7f)
body += chr[i];
else
body += wxString::Format(wxT("(U+%04X)"), chr[i]);
}
body += wxT('\n');
if (!ctx.IsEmpty()) {
body += _("Context") + wxT(": ");
body += ctx;
body += wxT('\n');
}
wxLaunchDefaultBrowser(wxString::Format(wxT("mailto:janos.jezovnik@zrc-sazu.si&subject=%s&body=%s"),
wxURLEncode(wxString((wxString(wxT("[ZRCola] ")) + _("Request a New Character")).ToUTF8())),
wxURLEncode(body.ToUTF8())
));
}
//////////////////////////////////////////////////////////////////////////
// wxPersistentZRColaCharRequest
//////////////////////////////////////////////////////////////////////////
const int wxPersistentZRColaCharRequest::s_guiLevel = 1;
wxPersistentZRColaCharRequest::wxPersistentZRColaCharRequest(wxZRColaCharRequest *wnd) : wxPersistentTLWEx(wnd)
{
}
void wxPersistentZRColaCharRequest::Save() const
{
SaveValue(wxT("guiLevel"), s_guiLevel);
wxPersistentTLWEx::Save();
auto wnd = static_cast<const wxZRColaCharRequest*>(GetWindow()); // dynamic_cast is not reliable as we are typically called late in the wxTopLevelWindowMSW destructor.
SaveValue(wxT("character"), wnd->m_character->GetValue());
SaveValue(wxT("context"), wnd->m_context->GetValue());
}
bool wxPersistentZRColaCharRequest::Restore()
{
auto wnd = dynamic_cast<wxZRColaCharRequest*>(GetWindow());
wxString str;
if (RestoreValue(wxT("character"), &str))
wnd->m_character->SetValue(str);
if (RestoreValue(wxT("context"), &str))
wnd->m_context->SetValue(str);
int guiLevel;
return RestoreValue(wxT("guiLevel"), &guiLevel) && guiLevel == s_guiLevel ? wxPersistentTLWEx::Restore() : true;
}

70
ZRCola/zrcolachrreq.h Normal file
View File

@@ -0,0 +1,70 @@
/*
Copyright 2015-2019 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 wxZRColaCharRequest;
class wxPersistentZRColaCharRequest;
#pragma once
#include "zrcolagui.h"
#include "zrcolakeyhndlr.h"
#include <wxex/persist/toplevel.h>
///
/// ZRCola New Character Request dialog
///
class wxZRColaCharRequest : public wxZRColaCharRequestBase
{
public:
wxZRColaCharRequest(wxWindow* parent);
virtual ~wxZRColaCharRequest();
friend class wxPersistentZRColaCharRequest; // Allow saving/restoring window state.
protected:
virtual void OnOKButtonClick(wxCommandEvent& event);
};
///
/// Supports saving/restoring wxZRColaCharRequest state
///
class wxPersistentZRColaCharRequest : public wxPersistentTLWEx
{
public:
wxPersistentZRColaCharRequest(wxZRColaCharRequest *wnd);
virtual void Save() const;
virtual bool Restore();
protected:
static const int s_guiLevel; ///< Persisted placements/sizing are considered incompatible between different GUI levels
};
inline wxPersistentObject *wxCreatePersistentObject(wxZRColaCharRequest *wnd)
{
return new wxPersistentZRColaCharRequest(wnd);
}

893
ZRCola/zrcolachrslct.cpp Normal file
View File

@@ -0,0 +1,893 @@
/*
Copyright 2015-2019 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"
//////////////////////////////////////////////////////////////////////
// wxZRColaUTF16CharValidator
//////////////////////////////////////////////////////////////////////
wxIMPLEMENT_DYNAMIC_CLASS(wxZRColaUTF16CharValidator, wxValidator);
wxZRColaUTF16CharValidator::wxZRColaUTF16CharValidator(wchar_t *val) :
m_val(val),
wxValidator()
{
}
wxObject* wxZRColaUTF16CharValidator::Clone() const
{
return new wxZRColaUTF16CharValidator(*this);
}
bool wxZRColaUTF16CharValidator::Validate(wxWindow *parent)
{
wxASSERT(GetWindow()->IsKindOf(CLASSINFO(wxTextCtrl)));
wxTextCtrl *ctrl = (wxTextCtrl*)GetWindow();
if (!ctrl->IsEnabled()) return true;
wxString val(ctrl->GetValue());
return Parse(val, 0, val.Length(), ctrl, parent);
}
bool wxZRColaUTF16CharValidator::TransferToWindow()
{
wxASSERT(GetWindow()->IsKindOf(CLASSINFO(wxTextCtrl)));
if (m_val)
((wxTextCtrl*)GetWindow())->SetValue(wxString::Format(wxT("%04X"), *m_val));
return true;
}
bool wxZRColaUTF16CharValidator::TransferFromWindow()
{
wxASSERT(GetWindow()->IsKindOf(CLASSINFO(wxTextCtrl)));
wxTextCtrl *ctrl = (wxTextCtrl*)GetWindow();
wxString val(ctrl->GetValue());
return Parse(val, 0, val.Length(), ctrl, NULL, m_val);
}
bool wxZRColaUTF16CharValidator::Parse(const wxString &val_in, size_t i_start, size_t i_end, wxTextCtrl *ctrl, wxWindow *parent, wchar_t *val_out)
{
const wxStringCharType *buf = val_in;
wchar_t chr = 0;
for (size_t i = i_start;;) {
if (i >= i_end) {
// End of Unicode found.
if (val_out) *val_out = chr;
return true;
} else if (i >= i_start + 4) {
// Maximum characters exceeded.
ctrl->SetFocus();
ctrl->SetSelection(i, i_end);
wxMessageBox(_("Too many digits in Unicode."), _("Validation conflict"), wxOK | wxICON_EXCLAMATION, parent);
return false;
} else if (_T('0') <= buf[i] && buf[i] <= _T('9')) {
// Digit found.
chr = (chr << 4) | (buf[i] - _T('0'));
i++;
} else if (_T('A') <= buf[i] && buf[i] <= _T('F')) {
// Capital letter found.
chr = (chr << 4) | (buf[i] - _T('A') + 10);
i++;
} else if (_T('a') <= buf[i] && buf[i] <= _T('f')) {
// Lower letter found.
chr = (chr << 4) | (buf[i] - _T('a') + 10);
i++;
} else {
// Invalid character found.
ctrl->SetFocus();
ctrl->SetSelection(i, i + 1);
wxMessageBox(wxString::Format(_("Invalid character in Unicode found: %c"), buf[i]), _("Validation conflict"), wxOK | wxICON_EXCLAMATION, parent);
return false;
}
}
}
//////////////////////////////////////////////////////////////////////
// wxZRColaUnicodeDumpValidator
//////////////////////////////////////////////////////////////////////
wxIMPLEMENT_DYNAMIC_CLASS(wxZRColaUnicodeDumpValidator, wxValidator);
wxZRColaUnicodeDumpValidator::wxZRColaUnicodeDumpValidator(wxString *val) :
m_val(val),
wxValidator()
{
}
wxObject* wxZRColaUnicodeDumpValidator::Clone() const
{
return new wxZRColaUnicodeDumpValidator(*this);
}
bool wxZRColaUnicodeDumpValidator::Validate(wxWindow *parent)
{
wxASSERT(GetWindow()->IsKindOf(CLASSINFO(wxTextCtrl)));
wxTextCtrl *ctrl = (wxTextCtrl*)GetWindow();
if (!ctrl->IsEnabled()) return true;
wxString val(ctrl->GetValue());
return Parse(val, 0, val.Length(), ctrl, parent);
}
bool wxZRColaUnicodeDumpValidator::TransferToWindow()
{
wxASSERT(GetWindow()->IsKindOf(CLASSINFO(wxTextCtrl)));
if (m_val)
((wxTextCtrl*)GetWindow())->SetValue(ZRCola::GetUnicodeDumpW(m_val->c_str(), m_val->length(), L"+"));
return true;
}
bool wxZRColaUnicodeDumpValidator::TransferFromWindow()
{
wxASSERT(GetWindow()->IsKindOf(CLASSINFO(wxTextCtrl)));
wxTextCtrl *ctrl = (wxTextCtrl*)GetWindow();
wxString val(ctrl->GetValue());
return Parse(val, 0, val.Length(), ctrl, NULL, m_val);
}
bool wxZRColaUnicodeDumpValidator::Parse(const wxString &val_in, size_t i_start, size_t i_end, wxTextCtrl *ctrl, wxWindow *parent, wxString *val_out)
{
const wxStringCharType *buf = val_in;
wxString str;
for (size_t i = i_start;;) {
const wxStringCharType *buf_next;
wchar_t chr;
if ((buf_next = wmemchr(buf + i, L'+', i_end - i)) != NULL) {
// Unicode dump separator found.
if (!wxZRColaUTF16CharValidator::Parse(val_in, i, buf_next - buf, ctrl, parent, &chr))
return false;
str += chr;
i = buf_next - buf + 1;
} else if (wxZRColaUTF16CharValidator::Parse(val_in, i, i_end, ctrl, parent, &chr)) {
// The rest of the FQDN parsed succesfully.
if (chr) str += chr;
if (val_out) *val_out = str;
return true;
} else
return false;
}
}
//////////////////////////////////////////////////////////////////////////
// wxZRColaCharSelect
//////////////////////////////////////////////////////////////////////////
wxDEFINE_EVENT(wxEVT_SEARCH_COMPLETE, wxThreadEvent);
wxZRColaCharSelect::wxZRColaCharSelect(wxWindow* parent) :
m_searchChanged(false),
m_unicodeChanged(false),
m_searchThread(NULL),
wxZRColaCharSelectBase(parent)
{
// Set tag lookup locale.
wxLanguage language = dynamic_cast<ZRColaApp*>(wxTheApp)->m_lang_ui;
if (wxLANGUAGE_DEFAULT == language ||
wxLANGUAGE_ENGLISH <= language && language <= wxLANGUAGE_ENGLISH_ZIMBABWE) m_locale = MAKELCID(MAKELANGID(LANG_ENGLISH , SUBLANG_DEFAULT), SORT_DEFAULT);
else if (wxLANGUAGE_RUSSIAN <= language && language <= wxLANGUAGE_RUSSIAN_UKRAINE ) m_locale = MAKELCID(MAKELANGID(LANG_RUSSIAN , SUBLANG_DEFAULT), SORT_DEFAULT);
else if (wxLANGUAGE_SLOVENIAN == language ) m_locale = MAKELCID(MAKELANGID(LANG_SLOVENIAN, SUBLANG_DEFAULT), SORT_DEFAULT);
else m_locale = MAKELCID(MAKELANGID(LANG_ENGLISH , SUBLANG_DEFAULT), SORT_DEFAULT);
Connect(wxID_ANY, wxEVT_SEARCH_COMPLETE, wxThreadEventHandler(wxZRColaCharSelect::OnSearchComplete), NULL, this);
m_search_more->SetLabel(_(L"▸ Search Options"));
m_unicode->SetValidator(wxZRColaUnicodeDumpValidator(&m_char));
// Fill categories.
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
for (size_t i = 0, n = app->m_cc_db.idxRank.size(); i < n; i++) {
const auto &cc = app->m_cc_db.idxRank[i];
int idx = m_categories->Insert(wxGetTranslation(wxString(cc.name(), cc.name_len()), wxT("ZRCola-zrcdb")), i);
m_categories->Check(idx);
m_ccOrder.insert(std::make_pair(cc.cat, idx));
}
ResetResults();
NavigationState state;
state.m_char = m_char;
state.m_related.m_selected.SetCol(m_gridRelated->GetGridCursorCol());
state.m_related.m_selected.SetRow(m_gridRelated->GetGridCursorRow());
m_historyCursor = m_history.insert(m_history.end(), state);
}
wxZRColaCharSelect::~wxZRColaCharSelect()
{
if (m_searchThread)
m_searchThread->Delete();
Disconnect(wxID_ANY, wxEVT_SEARCH_COMPLETE, wxThreadEventHandler(wxZRColaCharSelect::OnSearchComplete), NULL, this);
}
void wxZRColaCharSelect::OnIdle(wxIdleEvent& event)
{
event.Skip();
if (m_unicodeChanged) {
if (m_unicode->GetValidator()->TransferFromWindow()) {
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
m_gridPreview->SetCellValue(0, 0, m_char);
std::unique_ptr<ZRCola::character_db::character> ch((ZRCola::character_db::character*)new char[sizeof(ZRCola::character_db::character) + sizeof(wchar_t)*m_char.length()]);
ch->ZRCola::character_db::character::character(m_char.data(), m_char.length());
ZRCola::character_db::indexChr::size_type ch_start;
if (app->m_chr_db.idxChr.find(*ch, ch_start)) {
const auto &chr = app->m_chr_db.idxChr[ch_start];
// Update character description.
m_description->SetValue(wxString(chr.desc(), chr.desc_len()));
{
// See if this character has a key sequence registered.
std::unique_ptr<ZRCola::keyseq_db::keyseq> ks((ZRCola::keyseq_db::keyseq*)new char[sizeof(ZRCola::keyseq_db::keyseq) + sizeof(wchar_t)*m_char.length()]);
ks->ZRCola::keyseq_db::keyseq::keyseq(NULL, 0, m_char.data(), m_char.length());
ZRCola::keyseq_db::indexKey::size_type ks_start;
if (app->m_ks_db.idxChr.find(*ks, ks_start)) {
const auto &seq = app->m_ks_db.idxChr[ks_start];
wxString ks_str;
if (ZRCola::keyseq_db::GetSequenceAsText(seq.seq(), seq.seq_len(), ks_str))
m_shortcut->SetValue(ks_str);
else
m_shortcut->SetValue(wxEmptyString);
} else
m_shortcut->SetValue(wxEmptyString);
}
{
// Update character category.
ZRCola::chrcat_db::indexChrCat::size_type cc_start;
if (app->m_cc_db.idxChrCat.find(ZRCola::chrcat_db::chrcat(chr.cat), cc_start)) {
const auto &cat = app->m_cc_db.idxChrCat[cc_start];
m_category->SetValue(wxGetTranslation(wxString(cat.name(), cat.name_len()), wxT("ZRCola-zrcdb")));
} else
m_category->SetValue(wxEmptyString);
}
// Update related characters.
m_gridRelated->SetCharacters(wxString(chr.rel(), chr.rel_end()));
} else {
m_description->SetValue(wxEmptyString);
m_shortcut->SetValue(wxEmptyString);
m_category->SetValue(wxEmptyString);
m_gridRelated->ClearGrid();
}
// Find character tags.
std::list<std::wstring> tag_names;
std::unique_ptr<ZRCola::chrtag_db::chrtag> ct((ZRCola::chrtag_db::chrtag*)new char[sizeof(ZRCola::chrtag_db::chrtag) + sizeof(wchar_t)*m_char.length()]);
ct->ZRCola::chrtag_db::chrtag::chrtag(m_char.data(), m_char.length());
ZRCola::chrtag_db::indexChr::size_type ct_start, ct_end;
if (app->m_ct_db.idxChr.find(*ct, ct_start, ct_end)) {
for (auto i = ct_start; i < ct_end; i++) {
// Find tag names.
ZRCola::tagname_db::indexTag::size_type tn_start, tn_end;
if (app->m_tn_db.idxTag.find(ZRCola::tagname_db::tagname(app->m_ct_db.idxChr[i].tag, m_locale), tn_start, tn_end)) {
for (auto j = tn_start; j < tn_end; j++) {
const auto &tn = app->m_tn_db.idxTag[j];
// Add tag name to the list (prevent duplicates).
for (auto name = tag_names.cbegin(), name_end = tag_names.cend();; ++name) {
if (name == name_end) {
// Add name to the list.
tag_names.push_back(std::wstring(tn.name(), tn.name_end()));
break;
} else if (ZRCola::tagname_db::tagname::CompareName(m_locale, name->data(), (unsigned __int16)name->length(), tn.name(), tn.name_len()) == 0)
// Name is already on the list.
break;
}
}
}
}
}
wxString tags;
for (auto name = tag_names.cbegin(), name_end = tag_names.cend(); name != name_end; ++name) {
if (!tags.empty())
tags += _(", ");
tags += *name;
}
m_tags->SetValue(tags);
m_gridRelated->GoToCell(m_historyCursor->m_related.m_selected);
wxGridCellCoords coord(m_gridResults->GetCharacterCoords(m_char));
if (coord.GetRow() != -1 && coord.GetCol() != -1) {
m_gridResults->GoToCell(coord);
m_gridResults->SetGridCursor(coord);
} else
m_gridResults->ClearSelection();
}
m_unicodeChanged = false;
} else if (m_searchChanged) {
if (m_searchThread)
m_searchThread->Delete();
wxString val(m_search->GetValue());
if (!val.IsEmpty()) {
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
m_searchThread = new SearchThread(this);
m_searchThread->m_search.assign(val.c_str(), val.Length());
// Select categories.
for (size_t i = 0, n = app->m_cc_db.idxRank.size(); i < n; i++) {
const auto &cc = app->m_cc_db.idxRank[i];
if (m_categories->IsChecked(i))
m_searchThread->m_cats.insert(cc.cat);
}
if (m_searchThread->Run() != wxTHREAD_NO_ERROR) {
wxFAIL_MSG("Can't create the thread!");
delete m_searchThread;
m_searchThread = NULL;
}
} else
ResetResults();
m_searchChanged = false;
}
}
void wxZRColaCharSelect::OnSearchText(wxCommandEvent& event)
{
event.Skip();
m_searchChanged = true;
}
void wxZRColaCharSelect::OnSearchMore(wxHyperlinkEvent& event)
{
event.StopPropagation();
if (m_search_panel->IsShown()) {
m_search_panel->Show(false);
m_search_more->SetLabel(_(L"▸ Search Options"));
} else {
m_search_panel->Show(true);
m_search_more->SetLabel(_(L"▾ Search Options"));
}
this->Layout();
}
void wxZRColaCharSelect::OnCategoriesAll(wxHyperlinkEvent& event)
{
event.StopPropagation();
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
for (size_t i = 0, n = app->m_cc_db.idxRank.size(); i < n; i++)
m_categories->Check(i, true);
m_searchChanged = true;
}
void wxZRColaCharSelect::OnCategoriesNone(wxHyperlinkEvent& event)
{
event.StopPropagation();
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
for (size_t i = 0, n = app->m_cc_db.idxRank.size(); i < n; i++)
m_categories->Check(i, false);
m_searchChanged = true;
}
void wxZRColaCharSelect::OnCategoriesInvert(wxHyperlinkEvent& event)
{
event.StopPropagation();
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
for (size_t i = 0, n = app->m_cc_db.idxRank.size(); i < n; i++)
m_categories->Check(i, !m_categories->IsChecked(i));
m_searchChanged = true;
}
void wxZRColaCharSelect::OnCategoriesToggle(wxCommandEvent& event)
{
event.Skip();
m_searchChanged = true;
}
void wxZRColaCharSelect::OnSearchComplete(wxThreadEvent& event)
{
event.Skip();
if (m_searchThread) {
// Display results.
wxArrayString chars;
chars.reserve(m_searchThread->m_hits.size());
for (auto i = m_searchThread->m_hits.cbegin(), i_end = m_searchThread->m_hits.cend(); i != i_end; ++i)
chars.Add(i->second);
m_gridResults->SetCharacters(chars);
m_searchThread->Delete();
m_searchThread = NULL;
m_gridResults->Scroll(0, 0);
}
}
void wxZRColaCharSelect::OnResultSelectCell(wxGridEvent& event)
{
if (m_unicodeChanged) return;
wxString val(m_gridResults->GetCellValue(event.GetRow(), event.GetCol()));
if (!val.IsEmpty())
NavigateTo(val);
}
void wxZRColaCharSelect::OnResultCellDClick(wxGridEvent& event)
{
event.Skip();
wxString val(m_gridResults->GetCellValue(event.GetRow(), event.GetCol()));
if (!val.IsEmpty()) {
NavigateTo(val);
wxCommandEvent e(wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK);
m_buttonInsert->GetEventHandler()->ProcessEvent(e);
}
}
void wxZRColaCharSelect::OnResultsKeyDown(wxKeyEvent& event)
{
switch (event.GetKeyCode()) {
case WXK_RETURN:
case WXK_NUMPAD_ENTER:
wxString val(m_gridResults->GetCellValue(m_gridResults->GetGridCursorRow(), m_gridResults->GetGridCursorCol()));
if (!val.IsEmpty()) {
NavigateTo(val);
wxCommandEvent e(wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK);
m_buttonInsert->GetEventHandler()->ProcessEvent(e);
event.StopPropagation();
return;
}
}
event.Skip();
}
void wxZRColaCharSelect::OnRecentSelectCell(wxGridEvent& event)
{
if (m_unicodeChanged) return;
wxString val(m_gridRecent->GetCellValue(event.GetRow(), event.GetCol()));
if (!val.IsEmpty())
NavigateTo(val);
}
void wxZRColaCharSelect::OnRecentCellDClick(wxGridEvent& event)
{
event.Skip();
wxString val(m_gridRecent->GetCellValue(event.GetRow(), event.GetCol()));
if (!val.IsEmpty()) {
NavigateTo(val);
wxCommandEvent e(wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK);
m_buttonInsert->GetEventHandler()->ProcessEvent(e);
}
}
void wxZRColaCharSelect::OnRecentKeyDown(wxKeyEvent& event)
{
switch (event.GetKeyCode()) {
case WXK_RETURN:
case WXK_NUMPAD_ENTER:
wxString val(m_gridRecent->GetCellValue(m_gridRecent->GetGridCursorRow(), m_gridRecent->GetGridCursorCol()));
if (!val.IsEmpty()) {
NavigateTo(val);
wxCommandEvent e(wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK);
m_buttonInsert->GetEventHandler()->ProcessEvent(e);
event.StopPropagation();
return;
}
}
event.Skip();
}
void wxZRColaCharSelect::OnUnicodeText(wxCommandEvent& event)
{
event.Skip();
m_unicodeChanged = true;
}
void wxZRColaCharSelect::OnPreviewKeyDown(wxKeyEvent& event)
{
int key_code = event.GetKeyCode();
if (key_code == WXK_TAB != NULL) {
wxNavigationKeyEvent eventNav;
eventNav.SetDirection(!event.ShiftDown());
eventNav.SetWindowChange(event.ControlDown());
eventNav.SetEventObject(this);
if (HandleWindowEvent(eventNav))
return;
}
event.Skip();
}
void wxZRColaCharSelect::OnNavigateBack(wxHyperlinkEvent& event)
{
event.StopPropagation();
NavigateBy(-1);
}
void wxZRColaCharSelect::OnNavigateForward(wxHyperlinkEvent& event)
{
event.StopPropagation();
NavigateBy(+1);
}
void wxZRColaCharSelect::OnRelatedSelectCell(wxGridEvent& event)
{
if (m_unicodeChanged) return;
wxString val(m_gridRelated->GetCellValue(event.GetRow(), event.GetCol()));
if (!val.IsEmpty())
NavigateTo(val);
}
void wxZRColaCharSelect::OnInsertUpdateUI(wxUpdateUIEvent& event)
{
event.Enable(!m_char.empty());
}
void wxZRColaCharSelect::OnInsert(wxCommandEvent& event)
{
event.Skip();
const wxArrayString &recent = m_gridRecent->GetCharacters();
wxArrayString val;
val.reserve(recent.GetCount() + 1);
val.Add(m_char);
for (size_t i = 0, n = recent.GetCount(); i < n; i++) {
const wxString &c = recent[i];
if (c != m_char)
val.Add(c);
}
m_gridRecent->SetCharacters(val);
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
if (app->m_mainWnd) {
app->m_mainWnd->m_panel->m_source->WriteText(m_char);
app->m_mainWnd->m_panel->m_source->SetFocus();
}
Show(false);
}
void wxZRColaCharSelect::ResetResults()
{
// Fill the results.
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
size_t i, n = app->m_chr_db.idxChr.size();
wxArrayString val;
val.reserve(n);
for (i = 0; i < n; i++) {
const auto &chr = app->m_chr_db.idxChr[i];
auto idx = m_ccOrder.find(chr.cat);
if (idx == m_ccOrder.end() || m_categories->IsChecked(idx->second))
val.Add(wxString(chr.chr(), chr.chr_len()));
}
m_gridResults->SetCharacters(val);
}
void wxZRColaCharSelect::NavigateBy(int offset)
{
if (offset != 0) {
// Update history state
m_historyCursor->m_related.m_selected.SetCol(m_gridRelated->GetGridCursorCol());
m_historyCursor->m_related.m_selected.SetRow(m_gridRelated->GetGridCursorRow());
if (offset < 0) {
while (m_historyCursor != m_history.begin() && offset) {
--m_historyCursor; offset++;
m_char = m_historyCursor->m_char;
m_unicodeChanged = true;
}
} else {
while (offset) {
++m_historyCursor;
if (m_historyCursor == m_history.end()) {
// We're past the last history entry.
--m_historyCursor;
break;
}
offset--;
m_char = m_historyCursor->m_char;
m_unicodeChanged = true;
}
}
m_navigateBack->Enable(m_historyCursor != m_history.begin());
auto cursor_next = m_historyCursor;
++cursor_next;
m_navigateForward->Enable(cursor_next != m_history.end());
if (m_unicodeChanged)
m_unicode->GetValidator()->TransferToWindow();
}
}
void wxZRColaCharSelect::NavigateTo(const wxString &c)
{
if (m_char != c) {
// Update history state
m_historyCursor->m_related.m_selected.SetCol(m_gridRelated->GetGridCursorCol());
m_historyCursor->m_related.m_selected.SetRow(m_gridRelated->GetGridCursorRow());
++m_historyCursor;
// Create new state.
NavigationState state;
state.m_char = m_char = c;
state.m_related.m_selected.SetCol(0);
state.m_related.m_selected.SetRow(0);
m_historyCursor = m_history.insert(m_historyCursor, state);
// Purge the history's tail.
auto cursor_next = m_historyCursor;
++cursor_next;
m_history.erase(cursor_next, m_history.end());
m_unicode->GetValidator()->TransferToWindow();
m_navigateBack->Enable(true);
m_navigateForward->Enable(false);
}
}
wxZRColaCharSelect::SearchThread::SearchThread(wxZRColaCharSelect *parent) :
m_parent(parent),
wxThread(wxTHREAD_JOINABLE)
{
//// This is a worker thread. Set priority between minimal and normal.
//SetPriority((wxPRIORITY_MIN + wxPRIORITY_DEFAULT) / 2);
}
wxThread::ExitCode wxZRColaCharSelect::SearchThread::Entry()
{
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
std::map<std::wstring, ZRCola::charrank_t> hits;
if (TestDestroy()) return (wxThread::ExitCode)1;
{
// Search by tags: Get tags with given names. Then, get characters of found tags.
std::map<ZRCola::tagid_t, unsigned __int16> hits_tag;
if (!app->m_tn_db.Search(m_search.c_str(), m_parent->m_locale, hits_tag, TestDestroyS, this)) return (wxThread::ExitCode)1;
if (!app->m_ct_db.Search(hits_tag, app->m_chr_db, m_cats, hits, TestDestroyS, this)) return (wxThread::ExitCode)1;
}
{
// Search by description and merge results.
std::map<std::wstring, ZRCola::charrank_t> hits_sub;
if (!app->m_chr_db.Search(m_search.c_str(), m_cats, hits, hits_sub, TestDestroyS, this)) return (wxThread::ExitCode)1;
for (auto i = hits_sub.cbegin(), i_end = hits_sub.cend(); i != i_end; ++i) {
if (TestDestroy()) return (wxThread::ExitCode)1;
auto idx = hits.find(i->first);
if (idx == hits.end())
hits.insert(std::make_pair(i->first, i->second / 4));
else
idx->second += i->second / 4;
}
}
// Get best rank.
ZRCola::charrank_t rank_ref = 0;
for (auto i = hits.cbegin(), i_end = hits.cend(); i != i_end; ++i) {
if (TestDestroy()) return (wxThread::ExitCode)1;
if (i->second > rank_ref)
rank_ref = i->second;
}
// Now sort the characters by rank (taking only top 3/4 by rank).
ZRCola::charrank_t rank_threshold = rank_ref*3/4;
m_hits.reserve(hits.size());
for (auto i = hits.cbegin(), i_end = hits.cend(); i != i_end; ++i) {
if (TestDestroy()) return (wxThread::ExitCode)1;
if (i->second > rank_threshold)
m_hits.push_back(std::make_pair(i->second, i->first));
}
std::qsort(m_hits.data(), m_hits.size(), sizeof(std::pair<ZRCola::charrank_t, std::wstring>), CompareHits);
// Signal the event handler that this thread is going to be destroyed.
// NOTE: here we assume that using the m_parent pointer is safe,
// (in this case this is assured by the wxZRColaCharSelect destructor)
wxQueueEvent(m_parent, new wxThreadEvent(wxEVT_SEARCH_COMPLETE));
return 0;
}
int __cdecl wxZRColaCharSelect::SearchThread::CompareHits(const void *a, const void *b)
{
const std::pair<ZRCola::charrank_t, wchar_t> *_a = (const std::pair<ZRCola::charrank_t, wchar_t>*)a;
const std::pair<ZRCola::charrank_t, wchar_t> *_b = (const std::pair<ZRCola::charrank_t, wchar_t>*)b;
if (_a->first > _b->first) return -1;
else if (_a->first < _b->first) return 1;
if (_a->second < _b->second) return -1;
else if (_a->second > _b->second) return 1;
return 0;
}
bool __cdecl wxZRColaCharSelect::SearchThread::TestDestroyS(void *cookie)
{
return static_cast<wxZRColaCharSelect::SearchThread*>(cookie)->TestDestroy();
}
//////////////////////////////////////////////////////////////////////////
// wxPersistentZRColaCharSelect
//////////////////////////////////////////////////////////////////////////
const int wxPersistentZRColaCharSelect::s_guiLevel = 1;
wxPersistentZRColaCharSelect::wxPersistentZRColaCharSelect(wxZRColaCharSelect *wnd) : wxPersistentTLWEx(wnd)
{
}
void wxPersistentZRColaCharSelect::Save() const
{
SaveValue(wxT("guiLevel"), s_guiLevel);
wxPersistentTLWEx::Save();
auto wnd = static_cast<const wxZRColaCharSelect*>(GetWindow()); // dynamic_cast is not reliable as we are typically called late in the wxTopLevelWindowMSW destructor.
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
wxString str, str2;
auto &recent = wnd->m_gridRecent->GetCharacters();
for (size_t i = 0, n = recent.GetCount(); i < n; i++) {
if (i) str2 += wxT('|');
auto &chr = recent[i];
for (size_t j = 0, m = chr.Length(); j < m; j++) {
if (j) str2 += wxT('+');
str2 += wxString::Format(wxT("%04X"), chr[j]);
}
if (chr.Length() == 1)
str += chr[0];
}
SaveValue(wxT("recentChars" ), str ); // Save in legacy format for backward compatibility.
SaveValue(wxT("recentChars2"), str2); // Save in native format
for (size_t i = 0, n = app->m_cc_db.idxRank.size(); i < n; i++) {
const auto &cc = app->m_cc_db.idxRank[i];
wxString name(wxT("category"));
name.Append(cc.cat.data, _countof(cc.cat.data));
SaveValue(name, wnd->m_categories->IsChecked(i));
}
SaveValue(wxT("searchPanel"), wnd->m_search_panel->IsShown());
}
bool wxPersistentZRColaCharSelect::Restore()
{
auto wnd = dynamic_cast<wxZRColaCharSelect*>(GetWindow());
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
wxString str;
if (RestoreValue(wxT("recentChars2"), &str)) {
// Native format found.
wxArrayString val;
for (wxStringTokenizer tok(str, wxT("|")); tok.HasMoreTokens(); ) {
wxString chr;
for (wxStringTokenizer tok_chr(tok.GetNextToken(), wxT("+")); tok_chr.HasMoreTokens(); )
chr += (wchar_t)_tcstoul(tok_chr.GetNextToken().c_str(), NULL, 16);
val.Add(chr);
}
wnd->m_gridRecent->SetCharacters(val);
} else if (RestoreValue(wxT("recentChars"), &str)) {
// Legacy value found.
wxArrayString val;
for (size_t i = 0, n = str.Length(); i < n; i++)
val.Add(wxString(1, str[i]));
wnd->m_gridRecent->SetCharacters(val);
}
for (size_t i = 0, n = app->m_cc_db.idxRank.size(); i < n; i++) {
const auto &cc = app->m_cc_db.idxRank[i];
wxString name(wxT("category"));
name.Append(cc.cat.data, _countof(cc.cat.data));
bool val;
if (RestoreValue(name, &val))
wnd->m_categories->Check(i, val);
}
bool search_panel;
if (RestoreValue(wxT("searchPanel"), &search_panel)) {
if (search_panel) {
wnd->m_search_panel->Show(true);
wnd->m_search_more->SetLabel(_(L"▾ Search Options"));
} else {
wnd->m_search_panel->Show(false);
wnd->m_search_more->SetLabel(_(L"▸ Search Options"));
}
}
wnd->ResetResults();
int guiLevel;
return RestoreValue(wxT("guiLevel"), &guiLevel) && guiLevel == s_guiLevel ? wxPersistentTLWEx::Restore() : true;
}

241
ZRCola/zrcolachrslct.h Normal file
View File

@@ -0,0 +1,241 @@
/*
Copyright 2015-2019 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 wxZRColaCharSelect;
class wxPersistentZRColaCharSelect;
#pragma once
#include "zrcolagui.h"
#include <zrcola/character.h>
#include <wxex/persist/toplevel.h>
#include <wx/validate.h>
#include <wx/event.h>
#include <wx/thread.h>
#include <list>
#include <map>
#include <string>
#include <vector>
///
/// Validator for Unicode character
///
class wxZRColaUTF16CharValidator : public wxValidator
{
public:
///
/// Construct the validator with a value to store data
///
wxZRColaUTF16CharValidator(wchar_t *val = NULL);
///
/// Copies this validator
///
virtual wxObject* Clone() const;
///
/// Validates the value
///
virtual bool Validate(wxWindow *parent);
///
/// Transfers the value to the window
///
virtual bool TransferToWindow();
///
/// Transfers the value from the window
///
virtual bool TransferFromWindow();
///
/// Parses FQDN value
///
static bool Parse(const wxString &val_in, size_t i_start, size_t i_end, wxTextCtrl *ctrl, wxWindow *parent, wchar_t *val_out = NULL);
protected:
wchar_t *m_val; ///< Pointer to variable to receive control's parsed value
private:
wxDECLARE_DYNAMIC_CLASS(wxZRColaUTF16CharValidator);
wxDECLARE_NO_ASSIGN_CLASS(wxZRColaUTF16CharValidator);
};
///
/// Validator for Unicode dump
///
class wxZRColaUnicodeDumpValidator : public wxValidator
{
public:
///
/// Construct the validator with a value to store data
///
wxZRColaUnicodeDumpValidator(wxString *val = NULL);
///
/// Copies this validator
///
virtual wxObject* Clone() const;
///
/// Validates the value
///
virtual bool Validate(wxWindow *parent);
///
/// Transfers the value to the window
///
virtual bool TransferToWindow();
///
/// Transfers the value from the window
///
virtual bool TransferFromWindow();
///
/// Parses Unicode dump value
///
static bool Parse(const wxString &val_in, size_t i_start, size_t i_end, wxTextCtrl *ctrl, wxWindow *parent, wxString *val_out = NULL);
protected:
wxString *m_val; ///< Pointer to variable to receive control's parsed value
private:
wxDECLARE_DYNAMIC_CLASS(wxZRColaUnicodeDumpValidator);
wxDECLARE_NO_ASSIGN_CLASS(wxZRColaUnicodeDumpValidator);
};
wxDECLARE_EVENT(wxEVT_SEARCH_COMPLETE, wxThreadEvent);
///
/// ZRCola character select dialog
///
class wxZRColaCharSelect : public wxZRColaCharSelectBase
{
public:
wxZRColaCharSelect(wxWindow* parent);
virtual ~wxZRColaCharSelect();
friend class wxPersistentZRColaCharSelect; // Allow saving/restoring window state.
friend class SearchThread; // For search thread back-notifications
protected:
virtual void OnIdle(wxIdleEvent& event);
virtual void OnSearchText(wxCommandEvent& event);
virtual void OnSearchMore(wxHyperlinkEvent& event);
virtual void OnCategoriesAll(wxHyperlinkEvent& event);
virtual void OnCategoriesNone(wxHyperlinkEvent& event);
virtual void OnCategoriesInvert(wxHyperlinkEvent& event);
virtual void OnCategoriesToggle(wxCommandEvent& event);
void OnSearchComplete(wxThreadEvent& event);
virtual void OnResultSelectCell(wxGridEvent& event);
virtual void OnResultCellDClick(wxGridEvent& event);
virtual void OnResultsKeyDown(wxKeyEvent& event);
virtual void OnRecentSelectCell(wxGridEvent& event);
virtual void OnRecentCellDClick(wxGridEvent& event);
virtual void OnRecentKeyDown(wxKeyEvent& event);
virtual void OnNavigateBack(wxHyperlinkEvent& event);
virtual void OnNavigateForward(wxHyperlinkEvent& event);
virtual void OnUnicodeText(wxCommandEvent& event);
virtual void OnPreviewKeyDown(wxKeyEvent& event);
virtual void OnRelatedSelectCell(wxGridEvent& event);
virtual void OnInsertUpdateUI(wxUpdateUIEvent& event);
virtual void OnInsert(wxCommandEvent& event);
void ResetResults();
void NavigateBy(int offset);
void NavigateTo(const wxString &c);
public:
wxString m_char; ///< Currently selected character (empty when none)
protected:
LCID m_locale; ///< Locale for tag lookup
bool m_searchChanged; ///< Did Search field or category selection change?
std::map<ZRCola::chrcatid_t, int> m_ccOrder; ///< Character category order
bool m_unicodeChanged; ///< Did Unicode field change?
///
/// Search worker thread
///
class SearchThread : public wxThread
{
public:
SearchThread(wxZRColaCharSelect *parent);
protected:
virtual ExitCode Entry();
static int __cdecl CompareHits(const void *a, const void *b);
static bool __cdecl TestDestroyS(void *cookie);
public:
std::wstring m_search; ///< Search phrase
std::set<ZRCola::chrcatid_t> m_cats; ///< Search categories
std::vector<std::pair<ZRCola::charrank_t, std::wstring> > m_hits; ///< Search results
protected:
wxZRColaCharSelect *m_parent; ///< Thread owner
} *m_searchThread; ///< Search thread
///
/// Navigation state
///
struct NavigationState
{
std::wstring m_char;
struct {
wxGridCellCoords m_selected;
} m_related;
};
std::list<NavigationState> m_history; ///< Navigation history
std::list<NavigationState>::iterator m_historyCursor; ///< Navigation history cursor
};
///
/// Supports saving/restoring wxZRColaCharSelect state
///
class wxPersistentZRColaCharSelect : public wxPersistentTLWEx
{
public:
wxPersistentZRColaCharSelect(wxZRColaCharSelect *wnd);
virtual void Save() const;
virtual bool Restore();
protected:
static const int s_guiLevel; ///< Persisted placements/sizing are considered incompatible between different GUI levels
};
inline wxPersistentObject *wxCreatePersistentObject(wxZRColaCharSelect *wnd)
{
return new wxPersistentZRColaCharSelect(wnd);
}

View File

@@ -1,5 +1,5 @@
/*
Copyright 2015-2016 Amebis
Copyright 2015-2019 Amebis
This file is part of ZRCola.
@@ -25,108 +25,434 @@
//////////////////////////////////////////////////////////////////////////
wxZRColaComposerPanel::wxZRColaComposerPanel(wxWindow* parent) :
m_progress(false),
m_selDecomposed(0, 0),
m_selComposed(0, 0),
m_sourceChanged(false),
m_destinationChanged(false),
m_selSource(0, 0),
m_selDestination(0, 0),
wxZRColaComposerPanelBase(parent)
{
m_source->PushEventHandler(&m_keyhandler);
// Restore the previously saved state (if exists).
wxString fileName(GetStateFileName());
if (wxFileExists(fileName)) {
wxFFile file(fileName, wxT("rb"));
if (file.IsOpened()) {
// Load source text.
unsigned __int64 n;
file.Read(&n, sizeof(n));
if (!file.Error()) {
wxString source;
file.Read(wxStringBuffer(source, n), sizeof(wchar_t)*n);
if (!file.Error()) {
// Load destination text.
file.Read(&n, sizeof(n));
if (!file.Error()) {
wxString destination;
file.Read(wxStringBuffer(destination, n), sizeof(wchar_t)*n);
if (!file.Error()) {
// Restore state.
m_source->SetValue(source);
m_source->GetSelection(&m_selSource.first, &m_selSource.second);
SetHexValue(m_sourceHex, m_selSourceHex, m_mappingSourceHex, source.GetData(), source.Length(), m_selSource.first, m_selSource.second);
m_sourceChanged = false;
m_destination->SetValue(destination);
m_destination->GetSelection(&m_selDestination.first, &m_selDestination.second);
SetHexValue(m_destinationHex, m_selDestinationHex, m_mappingDestinationHex, destination.GetData(), destination.Length(), m_selDestination.first, m_selDestination.second);
m_destinationChanged = false;
}
}
}
}
}
}
}
wxZRColaComposerPanel::~wxZRColaComposerPanel()
{
m_source->PopEventHandler();
// This is a controlled exit. Purge saved state.
wxString fileName(GetStateFileName());
if (wxFileExists(fileName))
wxRemoveFile(fileName);
}
void wxZRColaComposerPanel::OnDecomposedPaint(wxPaintEvent& event)
void wxZRColaComposerPanel::SynchronizePanels()
{
if (m_sourceChanged) {
m_timerSave.Stop();
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
wxString src;
size_t len = GetValue(m_source, src);
std::wstring dst(src.data(), len), dst2;
ZRCola::mapping_vector map;
m_mapping.clear();
// Other translations
const ZRCola::transetid_t *sets_begin, *sets_end;
GetTranslationSeq(sets_begin, sets_end);
for (auto s = sets_begin; s != sets_end; ++s) {
app->m_t_db.Translate(*s, dst.data(), dst.size(), dst2, &map);
m_mapping.push_back(std::move(map));
dst = std::move(dst2);
}
if (app->m_mainWnd->m_composition) {
// ZRCola decompose first, then re-compose.
app->m_t_db.TranslateInv(ZRCOLA_TRANSEQID_DEFAULT, dst.data(), dst.size(), dst2, &map);
m_mapping.push_back(std::move(map));
app->m_t_db.Translate(ZRCOLA_TRANSEQID_DEFAULT, dst2.data(), dst2.size(), dst, &map);
m_mapping.push_back(std::move(map));
}
m_source->GetSelection(&m_selSource.first, &m_selSource.second);
// Update source HEX dump.
SetHexValue(m_sourceHex, m_selSourceHex, m_mappingSourceHex, src.data(), len, m_selSource.first, m_selSource.second);
// Update destination text, and its HEX dump.
m_destination->SetValue(dst);
m_destination->SetSelection(
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.
m_timerSave.Start(3000, true);
} else if (m_destinationChanged) {
m_timerSave.Stop();
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
wxString src;
size_t len = GetValue(m_destination, src);
std::wstring dst(src.data(), len), dst2;
ZRCola::mapping_vector map;
m_mapping.clear();
if (app->m_mainWnd->m_composition) {
// ZRCola decompose.
app->m_t_db.TranslateInv(ZRCOLA_TRANSEQID_DEFAULT, dst.data(), dst.size(), &app->m_lc_db, app->m_mainWnd->m_settings->m_lang, dst2, &map);
dst = std::move(dst2);
map.invert();
m_mapping.push_back(std::move(map));
}
// Other translations
const ZRCola::transetid_t *sets_begin, *sets_end;
GetTranslationSeq(sets_begin, sets_end);
for (auto s = sets_end; (s--) != sets_begin;) {
app->m_t_db.TranslateInv(*s, dst.data(), dst.size(), dst2, &map);
dst = std::move(dst2);
map.invert();
m_mapping.push_back(std::move(map));
}
m_destination->GetSelection(&m_selDestination.first, &m_selDestination.second);
// Update destination HEX dump.
SetHexValue(m_destinationHex, m_selDestinationHex, m_mappingDestinationHex, src.data(), len, m_selDestination.first, m_selDestination.second);
// Update source text, and its HEX dump.
m_source->SetValue(dst);
m_source->SetSelection(
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.
m_timerSave.Start(3000, true);
}
m_sourceChanged = false;
m_destinationChanged = false;
}
void wxZRColaComposerPanel::OnSourcePaint(wxPaintEvent& event)
{
event.Skip();
long from, to;
m_decomposed->GetSelection(&from, &to);
m_source->GetSelection(&from, &to);
if (m_selDecomposed.first != from || m_selDecomposed.second != to) {
if (m_selSource.first != from || m_selSource.second != to) {
// Save new selection first, to avoid loop.
m_selDecomposed.first = from;
m_selDecomposed.second = to;
m_composed->SetSelection(m_mapping.to_composed(from), m_mapping.to_composed(to));
m_selSource.first = from;
m_selSource.second = to;
m_sourceHex->SetSelection(
m_selSourceHex.first = m_mappingSourceHex.to_dst(from),
m_selSourceHex.second = m_mappingSourceHex.to_dst(to ));
m_destination->SetSelection(
m_selDestination.first = MapToDestination(from),
m_selDestination.second = MapToDestination(to ));
m_destinationHex->SetSelection(
m_selDestinationHex.first = m_mappingDestinationHex.to_dst(m_selDestination.first ),
m_selDestinationHex.second = m_mappingDestinationHex.to_dst(m_selDestination.second));
}
}
void wxZRColaComposerPanel::OnDecomposedText(wxCommandEvent& event)
{
if (m_progress) {
// We are being updated by wxZRColaComposerPanel::OnComposedText()
event.Skip();
} else {
#ifdef __WINDOWS__
// Use Windows GetWindowText() function to avoid line ending conversion incompletely imposed by wxWidgets.
WXHWND hWnd = m_decomposed->GetHWND();
std::vector<wchar_t> src((std::vector<wchar_t>::size_type)::GetWindowTextLengthW(hWnd) + 1);
::GetWindowTextW(hWnd, src.data(), src.size());
#else
wxString src(m_decomposed->GetValue());
#endif
std::wstring dst;
ZRCola::Compose(src.data(), src.size(), dst, &m_mapping);
long from, to;
m_decomposed->GetSelection(&from, &to);
// Update composed text.
m_progress = true;
m_composed->SetValue(dst);
m_composed->SetSelection(m_mapping.to_composed(from), m_mapping.to_composed(to));
event.Skip();
m_progress = false;
}
}
void wxZRColaComposerPanel::OnComposedPaint(wxPaintEvent& event)
void wxZRColaComposerPanel::OnSourceHexPaint(wxPaintEvent& event)
{
event.Skip();
long from, to;
m_composed->GetSelection(&from, &to);
m_sourceHex->GetSelection(&from, &to);
if (m_selComposed.first != from || m_selComposed.second != to) {
if (m_selSourceHex.first != from || m_selSourceHex.second != to) {
// Save new selection first, to avoid loop.
m_selComposed.first = from;
m_selComposed.second = to;
m_decomposed->SetSelection(m_mapping.to_decomposed(from), m_mapping.to_decomposed(to));
m_selSourceHex.first = from;
m_selSourceHex.second = to;
m_source->SetSelection(
m_selSource.first = m_mappingSourceHex.to_src(from),
m_selSource.second = m_mappingSourceHex.to_src(to ));
m_destination->SetSelection(
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 ),
m_selDestinationHex.second = m_mappingDestinationHex.to_dst(m_selDestination.second));
}
}
void wxZRColaComposerPanel::OnComposedText(wxCommandEvent& event)
void wxZRColaComposerPanel::OnSourceText(wxCommandEvent& event)
{
if (m_progress) {
// We are being updated by wxZRColaComposerPanel::OnDecomposedText()
event.Skip();
} else {
#ifdef __WINDOWS__
// Use Windows GetWindowTextLength() function to avoid line ending conversion incompletely imposed by wxWidgets.
WXHWND hWnd = m_composed->GetHWND();
std::vector<wchar_t> src((std::vector<wchar_t>::size_type)::GetWindowTextLengthW(hWnd) + 1);
::GetWindowTextW(hWnd, src.data(), src.size());
#else
wxString src(m_composed->GetValue());
#endif
event.Skip();
std::wstring dst;
ZRCola::Decompose(src.data(), src.size(), dst, &m_mapping);
// Set the flag the source text changed to trigger idle-time translation.
m_sourceChanged = true;
}
long from, to;
m_composed->GetSelection(&from, &to);
// Update decomposed text.
m_progress = true;
m_decomposed->SetValue(dst);
m_decomposed->SetSelection(m_mapping.to_decomposed(from), m_mapping.to_decomposed(to));
event.Skip();
m_progress = false;
void wxZRColaComposerPanel::OnDestinationPaint(wxPaintEvent& event)
{
event.Skip();
long from, to;
m_destination->GetSelection(&from, &to);
if (m_selDestination.first != from || m_selDestination.second != to) {
// Save new selection first, to avoid loop.
m_selDestination.first = from;
m_selDestination.second = to;
m_destinationHex->SetSelection(
m_selDestinationHex.first = m_mappingDestinationHex.to_dst(from),
m_selDestinationHex.second = m_mappingDestinationHex.to_dst(to ));
m_source->SetSelection(
m_selSource.first = MapToSource(from),
m_selSource.second = MapToSource(to ));
m_sourceHex->SetSelection(
m_selSourceHex.first = m_mappingSourceHex.to_dst(m_selSource.first ),
m_selSourceHex.second = m_mappingSourceHex.to_dst(m_selSource.second));
}
}
void wxZRColaComposerPanel::OnDestinationHexPaint(wxPaintEvent& event)
{
event.Skip();
long from, to;
m_destinationHex->GetSelection(&from, &to);
if (m_selDestinationHex.first != from || m_selDestinationHex.second != to) {
// Save new selection first, to avoid loop.
m_selDestinationHex.first = from;
m_selDestinationHex.second = to;
m_destination->SetSelection(
m_selDestination.first = m_mappingDestinationHex.to_src(from),
m_selDestination.second = m_mappingDestinationHex.to_src(to ));
m_source->SetSelection(
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 ),
m_selSourceHex.second = m_mappingSourceHex.to_dst(m_selSource.second));
}
}
void wxZRColaComposerPanel::OnDestinationText(wxCommandEvent& event)
{
event.Skip();
// Set the flag the destination text changed to trigger idle-time inverse translation.
m_destinationChanged = true;
}
void wxZRColaComposerPanel::OnSaveTimer(wxTimerEvent& event)
{
wxString fileName(GetStateFileName());
wxFFile file(fileName, wxT("wb"));
if (file.IsOpened()) {
wxString text;
size_t len;
// Save source text.
len = GetValue(m_source, text);
file.Write(&len, sizeof(len));
file.Write((const wchar_t*)text, sizeof(wchar_t)*len);
// Save destination text.
len = GetValue(m_destination, text);
file.Write(&len, sizeof(len));
file.Write((const wchar_t*)text, sizeof(wchar_t)*len);
}
event.Skip();
}
wxString wxZRColaComposerPanel::GetStateFileName()
{
wxString path;
path = wxFileName::GetTempDir();
if (!wxEndsWithPathSeparator(path))
path += wxFILE_SEP_PATH;
if (!wxDirExists(path))
wxMkdir(path);
wxString fileName(path);
fileName += wxT("ZRColaComposerPanel-state.tmp");
return fileName;
}
size_t wxZRColaComposerPanel::GetValue(wxTextCtrl *wnd, wxString &text)
{
#ifdef __WINDOWS__
// Use Windows GetWindowText() function to avoid line ending conversion incompletely imposed by wxWidgets.
WXHWND hWnd = wnd->GetHWND();
size_t len = ::GetWindowTextLengthW(hWnd);
if (len < 0x100) {
WCHAR buf[0x100];
::GetWindowTextW(hWnd, buf, len + 1);
text.assign(buf, len);
} else {
LPWSTR buf = new WCHAR[len + 1];
::GetWindowTextW(hWnd, buf, len + 1);
text.assign(buf, len);
delete [] buf;
}
return len;
#else
text = wnd->GetValue();
return text.Length();
#endif
}
void wxZRColaComposerPanel::SetHexValue(wxTextCtrl *wnd, std::pair<long, long> &range, ZRCola::mapping_vector &mapping, const wchar_t *src, size_t len, long from, long to)
{
wxString hex;
bool first = true;
mapping.clear();
for (size_t i = 0; i < len && src[i]; i++) {
wchar_t c = src[i];
if (c == L'\n' || c == '\r') {
hex += c;
first = true;
} else {
hex += wxString::Format(first ? wxT("%04X") : wxT(" %04X"), src[i]);
mapping.push_back(ZRCola::mapping(i + 1, hex.Length()));
first = false;
}
}
wnd->SetValue(hex);
wnd->SetSelection(
range.first = mapping.to_dst(from),
range.second = mapping.to_dst(to ));
}
//////////////////////////////////////////////////////////////////////////
// wxPersistentZRColaComposerPanel
//////////////////////////////////////////////////////////////////////////
const int wxPersistentZRColaComposerPanel::s_guiLevel = 1;
wxPersistentZRColaComposerPanel::wxPersistentZRColaComposerPanel(wxZRColaComposerPanel *wnd) : wxPersistentWindow<wxZRColaComposerPanel>(wnd)
{
}
wxString wxPersistentZRColaComposerPanel::GetKind() const
{
return wxT(wxPERSIST_TLW_KIND);
}
void wxPersistentZRColaComposerPanel::Save() const
{
auto wnd = static_cast<wxZRColaComposerPanel*>(GetWindow()); // dynamic_cast is not reliable as we are typically called late in the wxTopLevelWindowMSW destructor.
SaveValue(wxT("guiLevel" ), s_guiLevel);
SaveValue(wxT("dpiX" ), wxClientDC(wnd).GetPPI().x);
SaveValue(wxT("splitDecomposed"), wnd->m_splitterSource ->GetSashPosition());
SaveValue(wxT("splitComposed" ), wnd->m_splitterDestination->GetSashPosition());
}
bool wxPersistentZRColaComposerPanel::Restore()
{
auto wnd = dynamic_cast<wxZRColaComposerPanel*>(GetWindow());
int guiLevel;
if (!RestoreValue(wxT("guiLevel"), &guiLevel) || guiLevel != s_guiLevel)
return true;
int dpiHorz = wxClientDC(wnd).GetPPI().x;
int dpiHorzVal;
int sashVal;
if (!RestoreValue(wxT("dpiX"), &dpiHorzVal))
dpiHorzVal = 96;
if (RestoreValue(wxT("splitDecomposed"), &sashVal)) {
// wxFormBuilder sets initial splitter stash in idle event handler after GUI settles. Overriding our loaded value. Disconnect it's idle event handler.
wnd->m_splitterSource->Disconnect( wxEVT_IDLE, wxIdleEventHandler( wxZRColaComposerPanelBase::m_splitterSourceOnIdle ), NULL, wnd );
wnd->m_splitterSource->SetSashPosition(wxMulDivInt32(sashVal, dpiHorz, dpiHorzVal));
}
if (RestoreValue(wxT("splitComposed"), &sashVal)) {
// wxFormBuilder sets initial splitter stash in idle event handler after GUI settles. Overriding our loaded value. Disconnect it's idle event handler.
wnd->m_splitterDestination->Disconnect( wxEVT_IDLE, wxIdleEventHandler( wxZRColaComposerPanelBase::m_splitterDestinationOnIdle ), NULL, wnd );
wnd->m_splitterDestination->SetSashPosition(wxMulDivInt32(sashVal, dpiHorz, dpiHorzVal));
}
return true;
}

View File

@@ -1,5 +1,5 @@
/*
Copyright 2015-2016 Amebis
Copyright 2015-2019 Amebis
This file is part of ZRCola.
@@ -26,8 +26,11 @@ class wxZRColaComposerPanel;
#pragma once
#include "zrcolagui.h"
#include <zrcola/common.h>
#include "zrcolakeyhndlr.h"
#include <wx/persist/window.h>
#include <wx/timer.h>
#include <utility>
#include <vector>
///
@@ -39,19 +42,101 @@ public:
wxZRColaComposerPanel(wxWindow* parent);
virtual ~wxZRColaComposerPanel();
// Allow main frame direct access to our members.
friend class wxZRColaFrame;
void SynchronizePanels();
friend class wxPersistentZRColaComposerPanel; // Allow saving/restoring window state.
protected:
virtual void OnDecomposedPaint(wxPaintEvent& event);
virtual void OnDecomposedText(wxCommandEvent& event);
virtual void OnComposedPaint(wxPaintEvent& event);
virtual void OnComposedText(wxCommandEvent& event);
virtual void OnSourcePaint(wxPaintEvent& event);
virtual void OnSourceHexPaint(wxPaintEvent& event);
virtual void OnSourceText(wxCommandEvent& event);
virtual void OnDestinationPaint(wxPaintEvent& event);
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;
inline void GetTranslationSeq(_Out_ const ZRCola::transetid_t *&sets_begin, _Out_ const ZRCola::transetid_t *&sets_end) const;
static wxString GetStateFileName();
static size_t GetValue(wxTextCtrl *wnd, wxString &text);
static void SetHexValue(wxTextCtrl *wnd, std::pair<long, long> &range, ZRCola::mapping_vector &mapping, const wchar_t *src, size_t len, long from, long to);
protected:
bool m_progress; ///< Boolean flag to avoid recursive updates of composed and decomposed text controls
ZRCola::mapping_vector m_mapping; ///< Character index mapping vector between composed and decomposed text
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
std::vector<ZRCola::mapping_vector> m_mapping; ///< Character index mapping vector between source and normalized text
std::pair<long, long>
m_selDecomposed, ///< Character index of selected text in decomposed text control
m_selComposed; ///< Character index of selected text in composed text control
m_selSource, ///< Character index of selected text in source text control
m_selSourceHex, ///< Character index of selected text in source HEX dump text control
m_selDestination, ///< Character index of selected text in destination text control
m_selDestinationHex; ///< Character index of selected text in destination HEX dump text control
wxZRColaKeyHandler m_keyhandler; ///< Key handler for source window
ZRCola::mapping_vector m_mappingSourceHex; ///< Character index mapping vector between source text and its HEX dump
ZRCola::mapping_vector m_mappingDestinationHex; ///< Character index mapping vector between destination text and its HEX dump
};
///
/// Supports saving/restoring wxZRColaComposerPanel state
///
class wxPersistentZRColaComposerPanel : public wxPersistentWindow<wxZRColaComposerPanel>
{
public:
wxPersistentZRColaComposerPanel(wxZRColaComposerPanel *wnd);
virtual wxString GetKind() const;
virtual void Save() const;
virtual bool Restore();
protected:
static const int s_guiLevel; ///< Persisted placements/sizing are considered incompatible between different GUI levels
};
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 void wxZRColaComposerPanel::GetTranslationSeq(_Out_ const ZRCola::transetid_t *&sets_begin, _Out_ const ZRCola::transetid_t *&sets_end) const
{
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
if (app->m_mainWnd->m_transeq_id == ZRCOLA_TRANSEQID_DEFAULT) {
sets_begin = NULL;
sets_end = NULL;
} else if (app->m_mainWnd->m_transeq_id == ZRCOLA_TRANSEQID_CUSTOM) {
sets_begin = app->m_mainWnd->m_transeq->m_transeq.data();
sets_end = sets_begin + app->m_mainWnd->m_transeq->m_transeq.size();
} else {
size_t start;
if (app->m_tsq_db.idxTranSeq.find(ZRCola::transeq_db::transeq(app->m_mainWnd->m_transeq_id), start)) {
const auto &ts = app->m_tsq_db.idxTranSeq[start];
sets_begin = ts.sets();
sets_end = ts.sets_end();
} else {
sets_begin = NULL;
sets_end = NULL;
}
}
}
inline wxPersistentObject *wxCreatePersistentObject(wxZRColaComposerPanel *wnd)
{
return new wxPersistentZRColaComposerPanel(wnd);
}

View File

@@ -1,5 +1,5 @@
/*
Copyright 2015-2016 Amebis
Copyright 2015-2019 Amebis
This file is part of ZRCola.
@@ -25,111 +25,222 @@
//////////////////////////////////////////////////////////////////////////
wxBEGIN_EVENT_TABLE(wxZRColaFrame, wxZRColaFrameBase)
EVT_UPDATE_UI_RANGE(wxZRColaFrame::wxID_SEND, wxZRColaFrame::wxID_SEND_DECOMPOSED, wxZRColaFrame::OnSendUpdate)
EVT_MENU (wxID_EXIT , wxZRColaFrame::OnExit )
EVT_MENU(wxZRColaFrame::wxID_SEND , wxZRColaFrame::OnSend )
EVT_MENU(wxZRColaFrame::wxID_SEND_COMPOSED , wxZRColaFrame::OnSendComposed )
EVT_MENU(wxZRColaFrame::wxID_SEND_DECOMPOSED , wxZRColaFrame::OnSendDecomposed )
EVT_MENU(wxZRColaFrame::wxID_SEND_ABORT , wxZRColaFrame::OnSendAbort )
EVT_MENU( wxID_EXIT , wxZRColaFrame::OnExit )
EVT_MENU( wxID_INSERT_GRAVE , wxZRColaFrame::OnInsertGrave )
EVT_MENU( wxID_INSERT_ACUTE , wxZRColaFrame::OnInsertAcute )
EVT_MENU( wxID_INSERT_CIRCUMFLEX , wxZRColaFrame::OnInsertCircumflex )
EVT_MENU( wxID_INSERT_INV_BREVE_BELOW, wxZRColaFrame::OnInsertInvertedBreveBelow)
EVT_MENU( wxID_ABOUT , wxZRColaFrame::OnAbout )
EVT_UPDATE_UI_RANGE(wxID_CUT , wxID_CLEAR , wxZRColaFrame::OnForwardEventUpdate )
EVT_MENU_RANGE (wxID_CUT , wxID_CLEAR , wxZRColaFrame::OnForwardEvent )
EVT_UPDATE_UI (wxID_SELECTALL , wxZRColaFrame::OnForwardEventUpdate )
EVT_MENU (wxID_SELECTALL , wxZRColaFrame::OnForwardEvent )
EVT_UPDATE_UI (wxID_CHARACTER_SELECTOR , wxZRColaFrame::OnInsertCharacterUpdate )
EVT_MENU (wxID_CHARACTER_SELECTOR , wxZRColaFrame::OnInsertCharacter )
EVT_UPDATE_UI_RANGE(wxID_SEND_DESTINATION , wxID_SEND_ABORT , wxZRColaFrame::OnSendUpdate )
EVT_MENU (wxID_COPY_DESTINATION_AND_RETURN , wxZRColaFrame::OnCopyDestinationAndReturn )
EVT_MENU (wxID_SEND_DESTINATION , wxZRColaFrame::OnSendDestination )
EVT_MENU (wxID_COPY_SOURCE_AND_RETURN , wxZRColaFrame::OnCopySourceAndReturn )
EVT_MENU (wxID_SEND_SOURCE , wxZRColaFrame::OnSendSource )
EVT_MENU (wxID_SEND_ABORT , wxZRColaFrame::OnSendAbort )
EVT_MENU (wxID_COMPOSITION_MENU , wxZRColaFrame::OnCompositionMenu )
EVT_MENU (wxID_COMPOSITION_TOOLBAR , wxZRColaFrame::OnCompositionToolbar )
EVT_MENU_RANGE (wxID_TRANSLATION_SEQ_DEFAULT, wxID_TRANSLATION_SEQ_END, wxZRColaFrame::OnTranslationSeqMenu )
EVT_MENU (wxID_SETTINGS , wxZRColaFrame::OnSettings )
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_PANEL_CHRGRPS , wxZRColaFrame::OnPanelCharacterCatalogUpdate)
EVT_MENU (wxID_PANEL_CHRGRPS , wxZRColaFrame::OnPanelCharacterCatalog )
EVT_MENU (wxID_FOCUS_CHARACTER_CATALOG , wxZRColaFrame::OnPanelCharacterCatalogFocus )
EVT_MENU (wxID_HELP_INSTRUCTIONS , wxZRColaFrame::OnHelpInstructions )
EVT_MENU (wxID_HELP_SHORTCUTS , wxZRColaFrame::OnHelpShortcuts )
EVT_MENU (wxID_HELP_REQCHAR , wxZRColaFrame::OnHelpReqChar )
EVT_MENU (wxID_HELP_UPDATE , wxZRColaFrame::OnHelpUpdate )
EVT_MENU (wxID_ABOUT , wxZRColaFrame::OnHelpAbout )
wxEND_EVENT_TABLE()
const int wxZRColaFrame::s_guiLevel = 1;
wxZRColaFrame::wxZRColaFrame() :
m_hWndSource(NULL),
m_hotkey(-1),
m_wasIconised(false),
m_chrSelect(NULL),
m_settings(NULL),
m_chrReq(NULL),
m_composition(true),
m_transeq_id(ZRCOLA_TRANSEQID_DEFAULT),
m_transeq(NULL),
wxZRColaFrameBase(NULL)
{
{
// wxFrameBuilder 3.5 does not support wxAUI_TB_HORIZONTAL flag. Add it manually.
wxAuiPaneInfo &paneInfo = m_mgr.GetPane(m_toolbarTranslate);
paneInfo.LeftDockable(false);
paneInfo.RightDockable(false);
m_toolbarTranslate->SetWindowStyleFlag(m_toolbarTranslate->GetWindowStyleFlag() | wxAUI_TB_HORIZONTAL);
}
// Populate list of translation sequences.
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
m_toolTranslationSeq->Clear();
{
wxString name_tran(_("No Translation"));
m_menuTranslationSeq->AppendRadioItem(wxID_TRANSLATION_SEQ_DEFAULT, name_tran);
m_toolTranslationSeq->Append(name_tran, reinterpret_cast<void*>(ZRCOLA_TRANSEQID_DEFAULT));
}
for (size_t i = 0, n = app->m_tsq_db.idxRank.size(); ; i++) {
if (i < n) {
const ZRCola::transeq_db::transeq &ts = app->m_tsq_db.idxRank[i];
wxString
name(ts.name(), ts.name_len()),
name_tran(wxGetTranslation(name, wxT("ZRCola-zrcdb")));
m_menuTranslationSeq->AppendRadioItem(wxID_TRANSLATION_SEQ_START + i, name_tran);
m_toolTranslationSeq->Append(name_tran, reinterpret_cast<void*>(ts.seq));
} else {
wxString name_tran(_("Custom Translation..."));
m_menuTranslationSeq->AppendRadioItem(wxID_TRANSLATION_SEQ_START + i, name_tran);
m_toolTranslationSeq->Append(name_tran, reinterpret_cast<void*>(ZRCOLA_TRANSEQID_CUSTOM));
break;
}
}
// Load main window icons.
#ifdef __WINDOWS__
wxIcon icon_small(wxT("00_zrcola.ico"), wxBITMAP_TYPE_ICO_RESOURCE, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON));
wxIconBundle icons;
icons.AddIcon(wxIcon(wxT("00_zrcola.ico"), wxBITMAP_TYPE_ICO_RESOURCE, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON)));
icons.AddIcon(icon_small);
icons.AddIcon(wxIcon(wxT("00_zrcola.ico"), wxBITMAP_TYPE_ICO_RESOURCE, ::GetSystemMetrics(SM_CXICON ), ::GetSystemMetrics(SM_CYICON )));
SetIcons(icons);
#else
SetIcon(wxICON(00_zrcola.ico));
wxIcon icon_small(wxICON(00_zrcola.ico));
SetIcon(icon_small);
#endif
m_panel->m_decomposed->SetFocus();
m_taskBarIcon = new wxTaskBarIcon();
if (m_taskBarIcon->IsOk()) {
m_taskBarIcon->SetIcon(icon_small, _("ZRCola"));
m_taskBarIcon->Connect(wxEVT_TASKBAR_LEFT_DOWN, wxTaskBarIconEventHandler(wxZRColaFrame::OnTaskbarIconClick), NULL, this);
} else {
// Taskbar icon creation failed. Not the end of the world. No taskbar icon then.
delete m_taskBarIcon;
m_taskBarIcon = NULL;
}
// Register global hotkey(s).
if (!RegisterHotKey(wxZRColaHKID_INVOKE_COMPOSE, MOD_WIN, 'Z'))
wxMessageBox(_("ZRCola keyboard shortcut Win+Z could not be registered. Some functionality will not be available."), _("Warning"), wxOK | wxICON_WARNING);
if (!RegisterHotKey(wxZRColaHKID_INVOKE_DECOMPOSE, MOD_WIN | MOD_SHIFT, 'Z'))
wxMessageBox(_("ZRCola keyboard shortcut Win+Shift+Z could not be registered. Some functionality will not be available."), _("Warning"), wxOK | wxICON_WARNING);
wxPersistenceManager &persist_mgr = wxPersistenceManager::Get();
m_settings = new wxZRColaSettings(this);
persist_mgr.RegisterAndRestore(m_settings, new wxPersistentZRColaSettings(m_settings));
m_transeq = new wxZRColaTranslationSeq(this);
persist_mgr.RegisterAndRestore(m_transeq, new wxPersistentZRColaTranslationSeq(m_transeq));
m_chrSelect = new wxZRColaCharSelect(this);
persist_mgr.RegisterAndRestore(m_chrSelect, new wxPersistentZRColaCharSelect(m_chrSelect));
m_chrReq = new wxZRColaCharRequest(this);
persist_mgr.RegisterAndRestore(m_chrReq, new wxPersistentZRColaCharRequest(m_chrReq));
// Set focus.
m_panel->m_source->SetFocus();
#if defined(__WXMSW__)
// Register notification sink for language detection.
m_ulRefCount = 1;
m_tfSource = NULL;
ITfInputProcessorProfiles *pProfiles;
HRESULT hr = CoCreateInstance(CLSID_TF_InputProcessorProfiles, NULL, CLSCTX_INPROC_SERVER, IID_ITfInputProcessorProfiles, (LPVOID*)&pProfiles);
if(SUCCEEDED(hr)) {
hr = pProfiles->QueryInterface(IID_ITfSource, (LPVOID*)&m_tfSource);
if(SUCCEEDED(hr)) {
hr = m_tfSource->AdviseSink(IID_ITfLanguageProfileNotifySink, (ITfLanguageProfileNotifySink*)this, &m_dwCookie);
if (FAILED(hr) || m_dwCookie == -1) {
m_tfSource->Release();
m_tfSource = NULL;
}
}
pProfiles->Release();
}
#endif
// Register frame specific hotkey(s).
{
wxAcceleratorEntry entries[2];
entries[0].Set(wxACCEL_CTRL , WXK_RETURN, wxID_SEND);
entries[1].Set(wxACCEL_NORMAL, WXK_ESCAPE, wxID_SEND_ABORT);
wxAcceleratorEntry entries[1];
entries[0].Set(wxACCEL_NORMAL, WXK_F4, wxID_FOCUS_CHARACTER_CATALOG);
SetAcceleratorTable(wxAcceleratorTable(_countof(entries), entries));
}
int guiLevel;
if (wxConfigBase::Get()->Read(wxT("guiLevel"), &guiLevel) && guiLevel == s_guiLevel) {
// Restore persistent state of wxAuiManager manually, since m_mgr is not a standalone heap object
// and cannot be registered for persistence.
wxPersistentAuiManager(&m_mgr).Restore();
}
persist_mgr.RegisterAndRestore(this, new wxPersistentZRColaFrame(this));
// Update (de)composition selection.
if (m_composition) {
m_menuItemComposition->Check(true);
m_toolComposition->SetState(m_toolComposition->GetState() | wxAUI_BUTTON_STATE_CHECKED);
} else {
m_menuItemComposition->Check(false);
m_toolComposition->SetState(m_toolComposition->GetState() & ~wxAUI_BUTTON_STATE_CHECKED);
}
// Update translation sequence selection.
for (unsigned int i = 0, n = m_toolTranslationSeq->GetCount(); ; i++) {
if (i < n) {
if (static_cast<ZRCola::transeqid_t>((size_t)m_toolTranslationSeq->GetClientData(i)) == m_transeq_id) {
m_menuTranslationSeq->Check(wxID_TRANSLATION_SEQ_DEFAULT + i, true);
m_toolTranslationSeq->SetSelection(i);
break;
}
} else {
m_transeq_id = ZRCOLA_TRANSEQID_DEFAULT;
m_menuTranslationSeq->Check(wxID_TRANSLATION_SEQ_DEFAULT, true);
m_toolTranslationSeq->SetSelection(0);
break;
}
}
// Register global hotkey(s).
if (!RegisterHotKey(wxZRColaHKID_INVOKE_TRANSLATE, 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))
wxMessageBox(_("ZRCola keyboard shortcut Win+F6 could not be registered. Some functionality will not be available."), _("Warning"), wxOK | wxICON_WARNING);
}
wxZRColaFrame::~wxZRColaFrame()
{
// Unregister global hotkey(s).
UnregisterHotKey(wxZRColaHKID_INVOKE_DECOMPOSE);
UnregisterHotKey(wxZRColaHKID_INVOKE_COMPOSE);
}
UnregisterHotKey(wxZRColaHKID_INVOKE_TRANSLATE_INV);
UnregisterHotKey(wxZRColaHKID_INVOKE_TRANSLATE );
// Save wxAuiManager's state before destructor is finished.
// m_mgr is not a standalone heap object and is bound to wxZRColaFrame, which is being destroyed.
wxConfigBase::Get()->Write(wxT("guiLevel"), s_guiLevel);
wxPersistentAuiManager(&m_mgr).Save();
wxPersistenceManager::Get().SaveAndUnregister(this);
void wxZRColaFrame::OnSendUpdate(wxUpdateUIEvent& event)
{
event.Enable(m_hWndSource ? true : false);
}
void wxZRColaFrame::OnSend(wxCommandEvent& event)
{
switch (m_hotkey) {
case wxZRColaHKID_INVOKE_COMPOSE : wxZRColaFrame::OnSendComposed (event); break;
case wxZRColaHKID_INVOKE_DECOMPOSE: wxZRColaFrame::OnSendDecomposed(event); break;
default : event.Skip();
#if defined(__WXMSW__)
if (m_tfSource) {
m_tfSource->UnadviseSink(m_dwCookie);
m_tfSource->Release();
}
}
#endif
void wxZRColaFrame::OnSendComposed(wxCommandEvent& event)
{
if (m_hWndSource)
DoSend(m_panel->m_composed->GetValue());
event.Skip();
}
void wxZRColaFrame::OnSendDecomposed(wxCommandEvent& event)
{
if (m_hWndSource)
DoSend(m_panel->m_decomposed->GetValue());
event.Skip();
}
void wxZRColaFrame::OnSendAbort(wxCommandEvent& event)
{
if (m_hWndSource) {
// Return focus to the source window.
::SetActiveWindow(m_hWndSource);
::SetForegroundWindow(m_hWndSource);
m_hWndSource = NULL;
m_hotkey = -1;
// Select all input in composer to prepare for the overwrite next time.
m_panel->m_decomposed->SelectAll();
m_panel->m_composed->SelectAll();
if (m_taskBarIcon) {
m_taskBarIcon->Disconnect(wxEVT_TASKBAR_LEFT_DOWN, wxTaskBarIconEventHandler(wxZRColaFrame::OnTaskbarIconClick), NULL, this);
delete m_taskBarIcon;
}
event.Skip();
}
@@ -139,81 +250,431 @@ void wxZRColaFrame::OnExit(wxCommandEvent& event)
}
void wxZRColaFrame::OnInsertGrave(wxCommandEvent& event)
void wxZRColaFrame::OnForwardEventUpdate(wxUpdateUIEvent& event)
{
m_panel->m_decomposed->WriteText(L"\xE000");
wxControl *focusWnd = wxDynamicCast(FindFocus(), wxControl);
if (focusWnd && focusWnd->IsKindOf(wxCLASSINFO(wxTextCtrl)))
focusWnd->GetEventHandler()->ProcessEvent(event);
else
event.Enable(false);
}
void wxZRColaFrame::OnInsertAcute(wxCommandEvent& event)
void wxZRColaFrame::OnForwardEvent(wxCommandEvent& event)
{
m_panel->m_decomposed->WriteText(L"\xE001");
wxControl *focusWnd = wxDynamicCast(FindFocus(), wxControl);
if (focusWnd)
focusWnd->GetEventHandler()->ProcessEvent(event);
else
event.Skip();
}
void wxZRColaFrame::OnInsertCircumflex(wxCommandEvent& event)
void wxZRColaFrame::OnInsertCharacterUpdate(wxUpdateUIEvent& event)
{
m_panel->m_decomposed->WriteText(L"\xE002");
event.Check(m_chrSelect->IsVisible());
}
void wxZRColaFrame::OnInsertInvertedBreveBelow(wxCommandEvent& event)
void wxZRColaFrame::OnInsertCharacter(wxCommandEvent& event)
{
m_panel->m_decomposed->WriteText(L"\xE02F");
m_chrSelect->Show(!m_chrSelect->IsVisible());
}
void wxZRColaFrame::OnAbout(wxCommandEvent& event)
void wxZRColaFrame::OnSendUpdate(wxUpdateUIEvent& event)
{
wxMessageBox(wxString::Format(_("ZRCola v%s\nCopyright 2015-%s Amebis"), wxT(ZRCOLA_VERSION_STR), wxT(ZRCOLA_BUILD_YEAR_STR)), _("About ZRCola"), wxOK | wxICON_INFORMATION);
event.Enable(m_hWndSource ? true : false);
}
void wxZRColaFrame::OnSendDestination(wxCommandEvent& event)
{
if (m_hWndSource)
DoSend(m_panel->m_destination->GetValue());
event.Skip();
}
void wxZRColaFrame::OnCopyDestinationAndReturn(wxCommandEvent& event)
{
if (m_hWndSource)
DoCopyAndReturn(m_panel->m_destination->GetValue());
event.Skip();
}
void wxZRColaFrame::OnSendSource(wxCommandEvent& event)
{
if (m_hWndSource)
DoSend(m_panel->m_source->GetValue());
event.Skip();
}
void wxZRColaFrame::OnCopySourceAndReturn(wxCommandEvent& event)
{
if (m_hWndSource)
DoCopyAndReturn(m_panel->m_source->GetValue());
event.Skip();
}
void wxZRColaFrame::OnSendAbort(wxCommandEvent& event)
{
if (m_hWndSource) {
// Return focus to the source window.
if (m_wasIconised) Iconize();
::SetActiveWindow(m_hWndSource);
::SetForegroundWindow(m_hWndSource);
m_hWndSource = NULL;
}
// Select all input in composer to prepare for the overwrite next time.
m_panel->m_source ->SelectAll();
m_panel->m_destination->SelectAll();
event.Skip();
}
void wxZRColaFrame::OnCompositionMenu(wxCommandEvent& event)
{
m_composition = m_menuItemComposition->IsChecked();
m_toolComposition->SetState((m_toolComposition->GetState() & ~wxAUI_BUTTON_STATE_CHECKED) | (m_composition ? wxAUI_BUTTON_STATE_CHECKED : 0));
m_toolbarTranslate->Refresh();
// Notify source text something changed and should re-translate.
wxCommandEvent event2(wxEVT_COMMAND_TEXT_UPDATED);
m_panel->m_source->ProcessWindowEvent(event2);
event.Skip();
}
void wxZRColaFrame::OnCompositionToolbar(wxCommandEvent& event)
{
m_composition = (m_toolComposition->GetState() & wxAUI_BUTTON_STATE_CHECKED) ? true : false;
m_menuItemComposition->Check(m_composition);
// Notify source text something changed and should re-translate.
wxCommandEvent event2(wxEVT_COMMAND_TEXT_UPDATED);
m_panel->m_source->ProcessWindowEvent(event2);
event.Skip();
}
void wxZRColaFrame::OnSettings(wxCommandEvent& event)
{
m_settings->ShowModal();
}
void wxZRColaFrame::OnIdle(wxIdleEvent& event)
{
m_panel->SynchronizePanels();
event.Skip();
}
void wxZRColaFrame::OnTaskbarIconClick(wxTaskBarIconEvent& event)
{
Show(true);
Iconize(false);
Raise();
event.Skip();
}
void wxZRColaFrame::OnIconize(wxIconizeEvent& event)
{
if (m_taskBarIcon)
Show(!event.IsIconized());
event.Skip();
}
void wxZRColaFrame::OnToolbarEditUpdate(wxUpdateUIEvent& event)
{
event.Check(m_mgr.GetPane(m_toolbarEdit).IsShown());
}
void wxZRColaFrame::OnToolbarEdit(wxCommandEvent& event)
{
wxAuiPaneInfo &paneInfo = m_mgr.GetPane(m_toolbarEdit);
paneInfo.Show(!paneInfo.IsShown());
m_mgr.Update();
}
void wxZRColaFrame::OnToolbarTranslateUpdate(wxUpdateUIEvent& event)
{
event.Check(m_mgr.GetPane(m_toolbarTranslate).IsShown());
}
void wxZRColaFrame::OnToolbarTranslate(wxCommandEvent& event)
{
wxAuiPaneInfo &paneInfo = m_mgr.GetPane(m_toolbarTranslate);
paneInfo.Show(!paneInfo.IsShown());
m_mgr.Update();
}
void wxZRColaFrame::OnTranslationSeqMenu(wxCommandEvent& event)
{
int idx = event.GetId() - wxID_TRANSLATION_SEQ_DEFAULT;
ZRCola::transeqid_t transeq_id = static_cast<ZRCola::transeqid_t>((size_t)m_toolTranslationSeq->GetClientData(idx));
DoSetTranslationSeq(idx, transeq_id);
m_toolTranslationSeq->Select(idx);
}
void wxZRColaFrame::OnTranslationSeqChoice(wxCommandEvent& event)
{
int idx = event.GetSelection();
ZRCola::transeqid_t transeq_id = static_cast<ZRCola::transeqid_t>((size_t)event.GetClientData());
DoSetTranslationSeq(idx, transeq_id);
if (m_transeq_id == ZRCOLA_TRANSEQID_DEFAULT)
m_menuTranslationSeq->Check(wxID_TRANSLATION_SEQ_DEFAULT, true);
else
m_menuTranslationSeq->Check(wxID_TRANSLATION_SEQ_DEFAULT + idx, true);
}
void wxZRColaFrame::OnPanelCharacterCatalogUpdate(wxUpdateUIEvent& event)
{
event.Check(m_mgr.GetPane(m_panelChrCat).IsShown());
}
void wxZRColaFrame::OnPanelCharacterCatalog(wxCommandEvent& event)
{
wxAuiPaneInfo &paneInfo = m_mgr.GetPane(m_panelChrCat);
paneInfo.Show(!paneInfo.IsShown());
m_mgr.Update();
}
void wxZRColaFrame::OnPanelCharacterCatalogFocus(wxCommandEvent& event)
{
wxAuiPaneInfo &paneInfo = m_mgr.GetPane(m_panelChrCat);
if (!paneInfo.IsShown()) {
paneInfo.Show(true);
m_mgr.Update();
}
m_panelChrCat->SetFocus();
}
void wxZRColaFrame::OnHelpInstructions(wxCommandEvent& event)
{
wxLaunchDefaultBrowser(_("http://zrcola.zrc-sazu.si/en/info/instructions/"));
}
void wxZRColaFrame::OnHelpShortcuts(wxCommandEvent& event)
{
winstd::tstring pdf_path;
#ifdef __WXMSW__
// Search and try to launch installed PDF.
INSTALLSTATE pdf_is = ::MsiGetComponentPath(_T(PRODUCT_VERSION_GUID), _T("{68AC2C38-10E2-41A3-B92C-844C03FFDF6A}"), pdf_path);
if ((pdf_is == INSTALLSTATE_LOCAL || pdf_is == INSTALLSTATE_SOURCE) &&
wxFileExists(pdf_path) &&
(intptr_t)::ShellExecute(GetHWND(), NULL, pdf_path.c_str(), NULL, NULL, SW_SHOWNORMAL) > 32) return;
#endif
// Search and try to launch local PDF copy.
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
pdf_path = app->GetDatabasePath();
pdf_path += _T("ZRCola_keyboard.pdf");
if (wxFileExists(pdf_path) &&
(intptr_t)::ShellExecute(GetHWND(), NULL, pdf_path.c_str(), NULL, NULL, SW_SHOWNORMAL) > 32) return;
// When everything else fail, try the online version.
wxLaunchDefaultBrowser(_("http://zrcola.zrc-sazu.si/wp-content/uploads/2016/06/ZRCola_tipkovnica_Jun2016.pdf"));
}
void wxZRColaFrame::OnHelpReqChar(wxCommandEvent& event)
{
m_chrReq->ShowModal();
}
void wxZRColaFrame::OnHelpUpdate(wxCommandEvent& event)
{
wxZRColaUpdater dlg(this);
dlg.ShowModal();
}
void wxZRColaFrame::OnHelpAbout(wxCommandEvent& event)
{
wxZRColaAbout dlg(this);
dlg.ShowModal();
}
#if defined(__WXMSW__)
HRESULT STDMETHODCALLTYPE wxZRColaFrame::OnLanguageChange(LANGID langid, __RPC__out BOOL *pfAccept)
{
if (pfAccept) *pfAccept = TRUE;
return S_OK;
}
HRESULT STDMETHODCALLTYPE wxZRColaFrame::OnLanguageChanged()
{
if (m_settings->m_lang_auto) {
// Set keyboard language.
HKL hkl = ::GetKeyboardLayout(0);
ZRCola::LangConvert(LOWORD(hkl), m_settings->m_lang);
}
return S_OK;
}
HRESULT STDMETHODCALLTYPE wxZRColaFrame::QueryInterface(REFIID riid, __RPC__deref_out void __RPC_FAR *__RPC_FAR *ppvObject)
{
if (!ppvObject)
return E_INVALIDARG;
if (riid == IID_IUnknown)
*ppvObject = static_cast<IUnknown*>(this);
else if (riid == IID_ITfLanguageProfileNotifySink)
*ppvObject = static_cast<ITfLanguageProfileNotifySink*>(this);
else {
*ppvObject = NULL;
return E_NOINTERFACE;
}
AddRef();
return NOERROR;
}
ULONG STDMETHODCALLTYPE wxZRColaFrame::AddRef()
{
InterlockedIncrement(&m_ulRefCount);
return m_ulRefCount;
}
ULONG STDMETHODCALLTYPE wxZRColaFrame::Release()
{
// Decrement the object's internal counter.
ULONG ulRefCount = InterlockedDecrement(&m_ulRefCount);
if (m_ulRefCount == 0)
delete this;
return ulRefCount;
}
#endif
void wxZRColaFrame::DoSend(const wxString& str)
{
// Prepare the INPUT table.
wxString::size_type n = str.length();
wxString::const_iterator i_str = str.begin();
std::vector<INPUT> input(n);
auto i_str = str.begin();
std::vector<INPUT> input;
input.reserve(n*2);
for (std::vector<INPUT>::size_type i = 0; i < n; i++, i_str++) {
wxString::char_type c = *i_str;
INPUT &inp = input[i];
inp.type = INPUT_KEYBOARD;
inp.ki.dwFlags = KEYEVENTF_UNICODE;
inp.ki.time = 0;
inp.ki.dwExtraInfo = 0;
if (c == L'\n') {
// Enter (Return) key is sent as CR virtual key code.
inp.ki.wVk = VK_RETURN;
inp.ki.wScan = L'\r';
} else if (L'a' <= c && c <= L'z') {
// Small letters have the same virtual key code as their uppercase counterparts.
inp.ki.wVk = (WORD)c + L'A' - L'a';
inp.ki.wScan = c;
} else if (L'A' <= c && c <= L'Z' || L'0' <= c && c <= L'0' || c == L' ') {
// Letters and symbols with matching virtual key codes.
inp.ki.wVk = c;
inp.ki.wScan = c;
} else {
inp.ki.wVk = 0;
inp.ki.wScan = c;
}
// Add key down event.
INPUT inp = { INPUT_KEYBOARD };
inp.ki.dwFlags = KEYEVENTF_UNICODE;
inp.ki.wScan = c != L'\n' ? c : L'\r'; // Enter (Return) key is sent as CR.
input.push_back(inp);
// Add key up event.
inp.ki.dwFlags |= KEYEVENTF_KEYUP;
input.push_back(inp);
}
// Return focus to the source window and send the input.
if (m_wasIconised) Iconize();
::SetActiveWindow(m_hWndSource);
::SetForegroundWindow(m_hWndSource);
::Sleep(200);
::SendInput(input.size(), input.data(), sizeof(INPUT));
m_hWndSource = NULL;
m_hotkey = -1;
// Select all input in composer and decomposed to prepare for the overwrite next time.
m_panel->m_decomposed->SelectAll();
m_panel->m_composed->SelectAll();
// Select all input in source and destination to prepare for the overwrite next time.
m_panel->m_source ->SelectAll();
m_panel->m_destination->SelectAll();
}
void wxZRColaFrame::DoCopyAndReturn(const wxString& str)
{
if (wxTheClipboard->Open()) {
wxTheClipboard->SetData(new wxTextDataObject(str));
wxTheClipboard->Close();
}
// Return focus to the source window.
if (m_wasIconised) Iconize();
::SetActiveWindow(m_hWndSource);
::SetForegroundWindow(m_hWndSource);
m_hWndSource = NULL;
// Select all input in composer and source to prepare for the overwrite next time.
m_panel->m_source->SelectAll();
m_panel->m_destination->SelectAll();
}
void wxZRColaFrame::DoSetTranslationSeq(int idx, ZRCola::transeqid_t transeq_id)
{
if (transeq_id == ZRCOLA_TRANSEQID_CUSTOM) {
// Prompt user to modify translation.
if (m_transeq->ShowModal() != wxID_OK)
return;
if (m_transeq->m_transeq.empty()) {
// User submitted an empty translation. Revert to "No Translation" case.
m_transeq_id = ZRCOLA_TRANSEQID_DEFAULT;
m_menuTranslationSeq->Check(wxID_TRANSLATION_SEQ_DEFAULT, true);
m_toolTranslationSeq->SetSelection(0);
} else {
m_transeq_id = ZRCOLA_TRANSEQID_CUSTOM;
m_menuTranslationSeq->Check(wxID_TRANSLATION_SEQ_DEFAULT + idx, true);
}
} else if (m_transeq_id != transeq_id) {
// User choose a new translation sequence.
m_transeq_id = transeq_id;
m_menuTranslationSeq->Check(wxID_TRANSLATION_SEQ_DEFAULT + idx, true);
} else
return;
// Notify source text something changed and should re-translate.
wxCommandEvent event2(wxEVT_COMMAND_TEXT_UPDATED);
m_panel->m_source->ProcessWindowEvent(event2);
}
#ifdef __WXMSW__
WXLRESULT wxZRColaFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
{
if (message == WM_HOTKEY) {
@@ -221,8 +682,8 @@ WXLRESULT wxZRColaFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM
WXHWND hWndSource = ::GetForegroundWindow();
switch (wParam) {
case wxZRColaHKID_INVOKE_COMPOSE : m_panel->m_decomposed->SetFocus(); break;
case wxZRColaHKID_INVOKE_DECOMPOSE: m_panel->m_composed ->SetFocus(); break;
case wxZRColaHKID_INVOKE_TRANSLATE: m_panel->m_source->SetFocus(); break;
case wxZRColaHKID_INVOKE_TRANSLATE_INV: m_panel->m_destination->SetFocus(); break;
default:
wxFAIL_MSG(wxT("not our registered shortcut"));
return wxZRColaFrameBase::MSWWindowProc(message, wParam, lParam);
@@ -234,15 +695,13 @@ WXLRESULT wxZRColaFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM
}
m_hWndSource = hWndSource;
m_hotkey = wParam;
m_wasIconised = IsIconized();
//if (m_state == wxABS_FLOAT) {
if (IsIconized()) {
::SendMessage(m_hWnd, WM_SYSCOMMAND, SC_RESTORE, 0);
} else {
::SetActiveWindow(m_hWnd);
::SetForegroundWindow(m_hWnd);
}
Show(true);
Iconize(false);
Raise();
::SetActiveWindow(m_hWnd);
//} else if (wxAppBarIsDocked(m_state)) {
// // ZRCola window is currently docked.
@@ -257,6 +716,58 @@ WXLRESULT wxZRColaFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM
// wxFAIL_MSG(wxT("unsupported application bar state"));
return 0;
} else
}
else
return wxZRColaFrameBase::MSWWindowProc(message, wParam, lParam);
}
#endif
//////////////////////////////////////////////////////////////////////////
// wxPersistentZRColaFrame
//////////////////////////////////////////////////////////////////////////
const int wxPersistentZRColaFrame::s_guiLevel = 1;
wxPersistentZRColaFrame::wxPersistentZRColaFrame(wxZRColaFrame *wnd) : wxPersistentTLWEx(wnd)
{
}
void wxPersistentZRColaFrame::Save() const
{
SaveValue(wxT("guiLevel"), s_guiLevel);
wxPersistentTLWEx::Save();
auto wnd = static_cast<const wxZRColaFrame*>(GetWindow()); // dynamic_cast is not reliable as we are typically called late in the wxTopLevelWindowMSW destructor.
SaveValue(wxT("composition"), wnd->m_composition);
SaveValue(wxT("transeqId"), static_cast<int>(wnd->m_transeq_id));
wxPersistentZRColaComposerPanel(wnd->m_panel).Save();
wxPersistentZRColaCharacterCatalogPanel(wnd->m_panelChrCat).Save();
}
bool wxPersistentZRColaFrame::Restore()
{
auto wnd = dynamic_cast<wxZRColaFrame*>(GetWindow());
wxPersistentZRColaCharacterCatalogPanel(wnd->m_panelChrCat).Restore();
wxPersistentZRColaComposerPanel(wnd->m_panel).Restore();
int num;
if (RestoreValue(wxT("transeqId"), &num))
wnd->m_transeq_id = num;
bool b;
if (RestoreValue(wxT("composition"), &b))
wnd->m_composition = b;
else
wnd->m_composition = wnd->m_transeq_id == ZRCOLA_TRANSEQID_DEFAULT;
int guiLevel;
return RestoreValue(wxT("guiLevel"), &guiLevel) && guiLevel == s_guiLevel ? wxPersistentTLWEx::Restore() : true;
}

View File

@@ -1,5 +1,5 @@
/*
Copyright 2015-2016 Amebis
Copyright 2015-2019 Amebis
This file is part of ZRCola.
@@ -17,63 +17,153 @@
along with ZRCola. If not, see <http://www.gnu.org/licenses/>.
*/
///
/// Forward declarations
///
class wxZRColaFrame;
class wxPersistentZRColaFrame;
#pragma once
#include "zrcolagui.h"
#include "zrcolachrslct.h"
#include "zrcolachrreq.h"
#include "zrcolasettings.h"
#include "zrcolatranseq.h"
#include <zrcola/language.h>
#include <zrcola/translate.h>
#include <wxex/persist/toplevel.h>
#include <wx/taskbar.h>
#if defined(__WXMSW__)
#include <msctf.h>
#endif
///
/// Global hotkey message identifiers
///
#define wxZRColaHKID_INVOKE_COMPOSE 0
#define wxZRColaHKID_INVOKE_DECOMPOSE 1
#define wxZRColaHKID_INVOKE_TRANSLATE 0
#define wxZRColaHKID_INVOKE_TRANSLATE_INV 1
///
/// ZRCola main frame
///
class wxZRColaFrame : public wxZRColaFrameBase
class wxZRColaFrame :
public wxZRColaFrameBase
#if defined(__WXMSW__)
, protected ITfLanguageProfileNotifySink
#endif
{
protected:
enum {
wxID_SEND = wxID_HIGHEST,
wxID_SEND_COMPOSED,
wxID_SEND_DECOMPOSED,
wxID_SEND_ABORT,
public:
enum
{
wxID_FOCUS_CHARACTER_CATALOG = 2000,
wxID_TRANSLATION_SEQ_DEFAULT = 2001,
wxID_TRANSLATION_SEQ_START = 2002,
wxID_TRANSLATION_SEQ_END = 2100,
};
public:
wxZRColaFrame();
virtual ~wxZRColaFrame();
friend class wxPersistentZRColaFrame;
friend class wxZRColaComposerPanel;
protected:
void OnSendUpdate(wxUpdateUIEvent& event);
void OnSend(wxCommandEvent& event);
void OnSendComposed(wxCommandEvent& event);
void OnSendDecomposed(wxCommandEvent& event);
void OnSendAbort(wxCommandEvent& event);
void OnExit(wxCommandEvent& event);
void OnInsertGrave(wxCommandEvent& event);
void OnInsertAcute(wxCommandEvent& event);
void OnInsertCircumflex(wxCommandEvent& event);
void OnInsertInvertedBreveBelow(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
void OnForwardEventUpdate(wxUpdateUIEvent& event);
void OnForwardEvent(wxCommandEvent& event);
void OnInsertCharacterUpdate(wxUpdateUIEvent& event);
void OnInsertCharacter(wxCommandEvent& event);
void OnSendUpdate(wxUpdateUIEvent& event);
void OnSendDestination(wxCommandEvent& event);
void OnCopyDestinationAndReturn(wxCommandEvent& event);
void OnSendSource(wxCommandEvent& event);
void OnCopySourceAndReturn(wxCommandEvent& event);
void OnSendAbort(wxCommandEvent& event);
void OnCompositionMenu(wxCommandEvent& event);
void OnCompositionToolbar(wxCommandEvent& event);
void OnSettings(wxCommandEvent& event);
virtual void OnIdle(wxIdleEvent& event);
void OnTaskbarIconClick(wxTaskBarIconEvent& event);
virtual void OnIconize(wxIconizeEvent& event);
void OnToolbarEditUpdate(wxUpdateUIEvent& event);
void OnToolbarEdit(wxCommandEvent& event);
void OnToolbarTranslateUpdate(wxUpdateUIEvent& event);
void OnToolbarTranslate(wxCommandEvent& event);
void OnTranslationSeqMenu(wxCommandEvent& event);
virtual void OnTranslationSeqChoice(wxCommandEvent& event);
void OnPanelCharacterCatalogUpdate(wxUpdateUIEvent& event);
void OnPanelCharacterCatalog(wxCommandEvent& event);
void OnPanelCharacterCatalogFocus(wxCommandEvent& event);
void OnHelpInstructions(wxCommandEvent& event);
void OnHelpShortcuts(wxCommandEvent& event);
void OnHelpReqChar(wxCommandEvent& event);
void OnHelpUpdate(wxCommandEvent& event);
void OnHelpAbout(wxCommandEvent& event);
wxDECLARE_EVENT_TABLE();
protected:
#if defined(__WXMSW__)
ITfSource *m_tfSource; ///< Text Services install sink helper
DWORD m_dwCookie; ///< Text Services installed sink cookie
// ITfLanguageProfileNotifySink implementation
virtual HRESULT STDMETHODCALLTYPE OnLanguageChange(LANGID langid, __RPC__out BOOL *pfAccept);
virtual HRESULT STDMETHODCALLTYPE OnLanguageChanged();
// IUnknown implementation
virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, __RPC__deref_out void __RPC_FAR *__RPC_FAR *ppvObject);
virtual ULONG STDMETHODCALLTYPE AddRef();
virtual ULONG STDMETHODCALLTYPE Release();
ULONG m_ulRefCount; ///< COM object reference count
#endif
private:
void DoSend(const wxString& str);
void DoCopyAndReturn(const wxString& str);
void DoSetTranslationSeq(int idx, ZRCola::transeqid_t transeq_id);
protected:
#ifdef __WXMSW__
virtual WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam);
#endif
protected:
WXHWND m_hWndSource; ///< handle of the active window, when the ZRCola hotkey was pressed
int m_hotkey; ///< hotkey ID that was pressed
static const int s_guiLevel; ///< Persisted placements/sizing are considered incompatible between different GUI levels
protected:
WXHWND m_hWndSource; ///< Handle of the active window, when the ZRCola hotkey was pressed
bool m_wasIconised; ///< Was the ZRCola window iconized, when the ZRCola hotkey was pressed
wxTaskBarIcon *m_taskBarIcon; ///< Taskbar icon
wxZRColaCharSelect *m_chrSelect; ///< Character selection dialog
wxZRColaCharRequest *m_chrReq; ///< Request a New Character dialog
wxZRColaSettings *m_settings; ///< Configuration dialog
bool m_composition; ///< Is (de)composition enabled?
ZRCola::transeqid_t m_transeq_id; ///< Translation sequence ID
wxZRColaTranslationSeq *m_transeq; ///< Custom translation sequence dialog
};
///
/// Supports saving/restoring wxZRColaFrame GUI state
///
class wxPersistentZRColaFrame : public wxPersistentTLWEx
{
public:
wxPersistentZRColaFrame(wxZRColaFrame *wnd);
virtual void Save() const;
virtual bool Restore();
protected:
static const int s_guiLevel; ///< Persisted placements/sizing are considered incompatible between different GUI levels
};
inline wxPersistentObject *wxCreatePersistentObject(wxZRColaFrame *wnd)
{
return new wxPersistentZRColaFrame(wnd);
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,93 +1,417 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Jun 17 2015)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#ifndef __ZRCOLAGUI_H__
#define __ZRCOLAGUI_H__
#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
#include <wx/cshelp.h>
#include <wx/intl.h>
#include <wx/string.h>
#include <wx/bitmap.h>
#include <wx/image.h>
#include <wx/icon.h>
#include <wx/menu.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include "zrcolacomppnl.h"
#include <wx/sizer.h>
#include <wx/frame.h>
#include <wx/textctrl.h>
#include <wx/panel.h>
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/// Class wxZRColaFrameBase
///////////////////////////////////////////////////////////////////////////////
class wxZRColaFrameBase : public wxFrame
{
private:
protected:
enum
{
wxID_INSERT_GRAVE = 1000,
wxID_INSERT_ACUTE,
wxID_INSERT_CIRCUMFLEX,
wxID_INSERT_INV_BREVE_BELOW
};
wxMenuBar* m_menubar;
wxMenu* m_menuFile;
wxMenu* m_menuAccents;
wxMenu* m_menuHelp;
wxZRColaComposerPanel* m_panel;
public:
wxZRColaFrameBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("ZRCola"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 600,400 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL );
~wxZRColaFrameBase();
};
///////////////////////////////////////////////////////////////////////////////
/// Class wxZRColaComposerPanelBase
///////////////////////////////////////////////////////////////////////////////
class wxZRColaComposerPanelBase : public wxPanel
{
private:
protected:
enum
{
wxID_DECOMPOSED = 1000,
wxID_COMPOSED
};
wxTextCtrl* m_decomposed;
wxTextCtrl* m_composed;
// Virtual event handlers, overide them in your derived class
virtual void OnDecomposedPaint( wxPaintEvent& event ) { event.Skip(); }
virtual void OnDecomposedText( wxCommandEvent& event ) { event.Skip(); }
virtual void OnComposedPaint( wxPaintEvent& event ) { event.Skip(); }
virtual void OnComposedText( wxCommandEvent& event ) { event.Skip(); }
public:
wxZRColaComposerPanelBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL );
~wxZRColaComposerPanelBase();
};
#endif //__ZRCOLAGUI_H__
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Aug 8 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#ifndef __ZRCOLAGUI_H__
#define __ZRCOLAGUI_H__
#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
#include <wx/cshelp.h>
#include <wx/intl.h>
class wxZRColaCharGrid;
#include <wx/string.h>
#include <wx/bitmap.h>
#include <wx/image.h>
#include <wx/icon.h>
#include <wx/menu.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/aui/aui.h>
#include <wx/aui/auibar.h>
#include <wx/choice.h>
class wxZRColaCharacterCatalogPanel;
class wxZRColaComposerPanel;
#include <wx/statusbr.h>
#include <wx/frame.h>
#include <wx/textctrl.h>
#include <wx/sizer.h>
#include <wx/statbox.h>
#include <wx/panel.h>
#include <wx/splitter.h>
#include <wx/timer.h>
#include <wx/grid.h>
#include <wx/checkbox.h>
#include <wx/srchctrl.h>
#include <wx/hyperlink.h>
#include <wx/checklst.h>
#include <wx/stattext.h>
#include <wx/button.h>
#include <wx/dialog.h>
#include <wx/radiobut.h>
#include <wx/listbox.h>
#include <wx/listbook.h>
#include <wx/listctrl.h>
#include <wx/statbmp.h>
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/// Class wxZRColaFrameBase
///////////////////////////////////////////////////////////////////////////////
class wxZRColaFrameBase : public wxFrame
{
private:
protected:
enum
{
wxID_CHARACTER_SELECTOR = 1000,
wxID_SEND_DESTINATION,
wxID_COPY_DESTINATION_AND_RETURN,
wxID_SEND_SOURCE,
wxID_COPY_SOURCE_AND_RETURN,
wxID_SEND_ABORT,
wxID_COMPOSITION_MENU,
wxID_SETTINGS,
wxID_TOOLBAR_EDIT,
wxID_TOOLBAR_TRANSLATE,
wxID_PANEL_CHRGRPS,
wxID_HELP_INSTRUCTIONS,
wxID_HELP_SHORTCUTS,
wxID_HELP_REQCHAR,
wxID_HELP_UPDATE,
wxID_COMPOSITION_TOOLBAR
};
wxMenuBar* m_menubar;
wxMenu* m_menuProgram;
wxMenu* m_menuEdit;
wxMenuItem* m_menuItemComposition;
wxMenu* m_menuTranslationSeq;
wxMenu* m_menuView;
wxMenu* m_menuHelp;
wxAuiToolBar* m_toolbarEdit;
wxAuiToolBarItem* m_toolEditCut;
wxAuiToolBarItem* m_toolEditCopy;
wxAuiToolBarItem* m_toolEditPaste;
wxAuiToolBar* m_toolbarTranslate;
wxAuiToolBarItem* m_toolCharSelect;
wxAuiToolBarItem* m_toolSendDestination;
wxAuiToolBarItem* m_toolSendSource;
wxAuiToolBarItem* m_toolComposition;
wxChoice* m_toolTranslationSeq;
wxZRColaCharacterCatalogPanel* m_panelChrCat;
wxStatusBar* m_statusBar;
// Virtual event handlers, overide them in your derived class
virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
virtual void OnIconize( wxIconizeEvent& event ) { event.Skip(); }
virtual void OnIdle( wxIdleEvent& event ) { event.Skip(); }
virtual void OnTranslationSeqChoice( wxCommandEvent& event ) { event.Skip(); }
public:
wxZRColaComposerPanel* m_panel;
wxZRColaFrameBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("ZRCola"), const wxPoint& pos = wxDefaultPosition, long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL, const wxString& name = wxT("ZRCola") );
wxAuiManager m_mgr;
~wxZRColaFrameBase();
};
///////////////////////////////////////////////////////////////////////////////
/// Class wxZRColaComposerPanelBase
///////////////////////////////////////////////////////////////////////////////
class wxZRColaComposerPanelBase : public wxPanel
{
private:
protected:
enum
{
wxID_TIMER_SAVE = 1000
};
wxSplitterWindow* m_splitterSource;
wxPanel* m_panelSourceEdit;
wxPanel* m_panelSourceHex;
wxTextCtrl* m_sourceHex;
wxSplitterWindow* m_splitterDestination;
wxPanel* m_panelDestinationEdit;
wxPanel* m_panelDestinationHex;
wxTextCtrl* m_destinationHex;
wxTimer m_timerSave;
// Virtual event handlers, overide them in your derived class
virtual void OnSourcePaint( wxPaintEvent& event ) { event.Skip(); }
virtual void OnSourceText( wxCommandEvent& event ) { event.Skip(); }
virtual void OnSourceHexPaint( wxPaintEvent& event ) { event.Skip(); }
virtual void OnDestinationPaint( wxPaintEvent& event ) { event.Skip(); }
virtual void OnDestinationText( wxCommandEvent& event ) { event.Skip(); }
virtual void OnDestinationHexPaint( wxPaintEvent& event ) { event.Skip(); }
virtual void OnSaveTimer( wxTimerEvent& event ) { event.Skip(); }
public:
wxTextCtrl* m_source;
wxTextCtrl* m_destination;
wxZRColaComposerPanelBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL, const wxString& name = wxT("ZRColaComposerPanel") );
~wxZRColaComposerPanelBase();
void m_splitterSourceOnIdle( wxIdleEvent& )
{
m_splitterSource->SetSashPosition( FromDIP(-5) );
m_splitterSource->Disconnect( wxEVT_IDLE, wxIdleEventHandler( wxZRColaComposerPanelBase::m_splitterSourceOnIdle ), NULL, this );
}
void m_splitterDestinationOnIdle( wxIdleEvent& )
{
m_splitterDestination->SetSashPosition( FromDIP(-5) );
m_splitterDestination->Disconnect( wxEVT_IDLE, wxIdleEventHandler( wxZRColaComposerPanelBase::m_splitterDestinationOnIdle ), NULL, this );
}
};
///////////////////////////////////////////////////////////////////////////////
/// Class wxZRColaCharacterCatalogPanelBase
///////////////////////////////////////////////////////////////////////////////
class wxZRColaCharacterCatalogPanelBase : public wxPanel
{
private:
protected:
wxChoice* m_choice;
wxZRColaCharGrid* m_grid;
wxCheckBox* m_show_all;
// Virtual event handlers, overide them in your derived class
virtual void OnChoice( wxCommandEvent& event ) { event.Skip(); }
virtual void OnGridClick( wxGridEvent& event ) { event.Skip(); }
virtual void OnGridKeyDown( wxKeyEvent& event ) { event.Skip(); }
virtual void OnShowAll( wxCommandEvent& event ) { event.Skip(); }
public:
wxZRColaCharacterCatalogPanelBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL, const wxString& name = wxT("ZRColaCharacterCatalog") );
~wxZRColaCharacterCatalogPanelBase();
};
///////////////////////////////////////////////////////////////////////////////
/// Class wxZRColaCharSelectBase
///////////////////////////////////////////////////////////////////////////////
class wxZRColaCharSelectBase : public wxDialog
{
private:
protected:
wxSearchCtrl* m_search;
wxHyperlinkCtrl* m_search_more;
wxPanel* m_search_panel;
wxCheckListBox* m_categories;
wxHyperlinkCtrl* m_categoriesAll;
wxHyperlinkCtrl* m_categoriesNone;
wxHyperlinkCtrl* m_categoriesInvert;
wxZRColaCharGrid* m_gridResults;
wxZRColaCharGrid* m_gridRecent;
wxStaticText* m_labelUnicode;
wxTextCtrl* m_unicode;
wxTextCtrl* m_shortcut;
wxGrid* m_gridPreview;
wxTextCtrl* m_description;
wxTextCtrl* m_tags;
wxTextCtrl* m_category;
wxHyperlinkCtrl* m_navigateBack;
wxHyperlinkCtrl* m_navigateForward;
wxZRColaCharGrid* m_gridRelated;
wxButton* m_buttonInsert;
// Virtual event handlers, overide them in your derived class
virtual void OnIdle( wxIdleEvent& event ) { event.Skip(); }
virtual void OnSearchText( wxCommandEvent& event ) { event.Skip(); }
virtual void OnSearchMore( wxHyperlinkEvent& event ) { event.Skip(); }
virtual void OnCategoriesToggle( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCategoriesAll( wxHyperlinkEvent& event ) { event.Skip(); }
virtual void OnCategoriesNone( wxHyperlinkEvent& event ) { event.Skip(); }
virtual void OnCategoriesInvert( wxHyperlinkEvent& event ) { event.Skip(); }
virtual void OnResultCellDClick( wxGridEvent& event ) { event.Skip(); }
virtual void OnResultSelectCell( wxGridEvent& event ) { event.Skip(); }
virtual void OnResultsKeyDown( wxKeyEvent& event ) { event.Skip(); }
virtual void OnRecentCellDClick( wxGridEvent& event ) { event.Skip(); }
virtual void OnRecentSelectCell( wxGridEvent& event ) { event.Skip(); }
virtual void OnRecentKeyDown( wxKeyEvent& event ) { event.Skip(); }
virtual void OnUnicodeText( wxCommandEvent& event ) { event.Skip(); }
virtual void OnPreviewKeyDown( wxKeyEvent& event ) { event.Skip(); }
virtual void OnNavigateBack( wxHyperlinkEvent& event ) { event.Skip(); }
virtual void OnNavigateForward( wxHyperlinkEvent& event ) { event.Skip(); }
virtual void OnRelatedSelectCell( wxGridEvent& event ) { event.Skip(); }
virtual void OnInsert( wxCommandEvent& event ) { event.Skip(); }
virtual void OnInsertUpdateUI( wxUpdateUIEvent& event ) { event.Skip(); }
public:
wxZRColaCharSelectBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Character Search"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = wxT("ZRColaCharSelect") );
~wxZRColaCharSelectBase();
};
///////////////////////////////////////////////////////////////////////////////
/// 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 OnLanguageUpdate( wxUpdateUIEvent& 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 = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = wxT("ZRColaSettings") );
~wxZRColaSettingsBase();
};
///////////////////////////////////////////////////////////////////////////////
/// Class wxZRColaAboutBase
///////////////////////////////////////////////////////////////////////////////
class wxZRColaAboutBase : public wxDialog
{
private:
protected:
wxStaticBitmap* m_bitmapIcon;
wxStaticText* m_staticTextZRCola;
wxStaticText* m_staticTextVersion;
wxStaticText* m_staticTextColophone;
wxStaticText* m_staticTextCopyright;
wxHyperlinkCtrl* m_hyperlink;
wxStaticText* m_staticTextDeclaration;
wxTextCtrl* m_declaration;
wxStdDialogButtonSizer* m_sdbSizerButtons;
wxButton* m_sdbSizerButtonsOK;
public:
wxZRColaAboutBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About ZRCola"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = wxT("ZRColaAbout") );
~wxZRColaAboutBase();
};
///////////////////////////////////////////////////////////////////////////////
/// Class wxZRColaUpdaterBase
///////////////////////////////////////////////////////////////////////////////
class wxZRColaUpdaterBase : public wxDialog
{
private:
protected:
wxTextCtrl* m_log;
wxButton* m_buttonUpdate;
wxButton* m_buttonClose;
// Virtual event handlers, overide them in your derived class
virtual void OnIdle( wxIdleEvent& event ) { event.Skip(); }
virtual void OnUpdate( wxCommandEvent& event ) { event.Skip(); }
virtual void OnClose( wxCommandEvent& event ) { event.Skip(); }
public:
wxZRColaUpdaterBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Product Update"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = wxT("ZRColaUpdater") );
~wxZRColaUpdaterBase();
};
///////////////////////////////////////////////////////////////////////////////
/// Class wxZRColaCharRequestBase
///////////////////////////////////////////////////////////////////////////////
class wxZRColaCharRequestBase : public wxDialog
{
private:
protected:
wxStaticText* m_characterLbl;
wxTextCtrl* m_character;
wxStaticText* m_characterNote;
wxStaticText* m_contextLbl;
wxTextCtrl* m_context;
wxStaticText* m_note;
wxStdDialogButtonSizer* m_sdbSizerButtons;
wxButton* m_sdbSizerButtonsOK;
wxButton* m_sdbSizerButtonsCancel;
// Virtual event handlers, overide them in your derived class
virtual void OnOKButtonClick( wxCommandEvent& event ) { event.Skip(); }
public:
wxZRColaCharRequestBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Request a New Character"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = wxT("ZRColaCharRequest") );
~wxZRColaCharRequestBase();
};
///////////////////////////////////////////////////////////////////////////////
/// Class wxZRColaTranslationSeqBase
///////////////////////////////////////////////////////////////////////////////
class wxZRColaTranslationSeqBase : public wxDialog
{
private:
protected:
wxStaticText* m_transLbl;
wxStaticText* m_availableLbl;
wxListBox* m_available;
wxButton* m_add;
wxButton* m_remove;
wxStaticText* m_selectedLbl;
wxListBox* m_selected;
wxButton* m_selectedUp;
wxButton* m_selectedDown;
wxStdDialogButtonSizer* m_sdbSizerButtons;
wxButton* m_sdbSizerButtonsOK;
wxButton* m_sdbSizerButtonsCancel;
// Virtual event handlers, overide them in your derived class
virtual void OnInitDialog( wxInitDialogEvent& event ) { event.Skip(); }
virtual void OnUpdate( wxUpdateUIEvent& event ) { event.Skip(); }
virtual void OnAvailableChar( wxKeyEvent& event ) { event.Skip(); }
virtual void OnAvailableDClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnAdd( wxCommandEvent& event ) { event.Skip(); }
virtual void OnRemove( wxCommandEvent& event ) { event.Skip(); }
virtual void OnSelectedChar( wxKeyEvent& event ) { event.Skip(); }
virtual void OnSelectedDClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnSelectedUp( wxCommandEvent& event ) { event.Skip(); }
virtual void OnSelectedDown( wxCommandEvent& event ) { event.Skip(); }
virtual void OnOKButtonClick( wxCommandEvent& event ) { event.Skip(); }
public:
wxZRColaTranslationSeqBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Custom Translation Sequence"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = wxT("ZRColaTranslationSeq") );
~wxZRColaTranslationSeqBase();
};
#endif //__ZRCOLAGUI_H__

171
ZRCola/zrcolakeyhndlr.cpp Normal file
View File

@@ -0,0 +1,171 @@
/*
Copyright 2015-2019 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"
//////////////////////////////////////////////////////////////////////////
// wxZRColaKeyHandler
//////////////////////////////////////////////////////////////////////////
wxZRColaKeyHandler::wxZRColaKeyHandler() :
m_is_insert(false),
wxEvtHandler()
{
}
bool wxZRColaKeyHandler::ProcessEvent(wxEvent& event)
{
if (event.GetEventType() == wxEVT_KEY_DOWN) {
// The character event occured.
wxKeyEvent &e = (wxKeyEvent&)event;
if (e.GetKeyCode() == WXK_INSERT) {
// Insert key has been pressed.
m_is_insert = true;
wxFrame *pFrame = wxDynamicCast(dynamic_cast<ZRColaApp*>(wxTheApp)->m_mainWnd, wxFrame);
if (pFrame && pFrame->GetStatusBar())
pFrame->SetStatusText(_("INS key is pressed. Type the Unicode code of desired character now (up to four hexadecimal digits: 0-9, A-F), then release INS."));
} else if (m_is_insert) {
wxChar chr = e.GetUnicodeKey();
if (!chr) {
int key = e.GetKeyCode();
if (WXK_NUMPAD0 <= key && key <= WXK_NUMPAD9)
chr = '0' + (key - WXK_NUMPAD0);
}
wxFrame *pFrame = wxDynamicCast(dynamic_cast<ZRColaApp*>(wxTheApp)->m_mainWnd, wxFrame);
if (('0' <= chr && chr <= '9' || 'A' <= chr && chr <= 'F') && m_insert_seq.size() < 4) {
// A hex-digit pressed. Save it.
m_insert_seq.push_back((char)chr);
if (pFrame && pFrame->GetStatusBar())
pFrame->SetStatusText(wxString::Format(wxT("U+%s"), (const wxStringCharType*)wxString(m_insert_seq.data(), m_insert_seq.size())));
event.StopPropagation();
return true;
} else {
// Not a hex-digit.
m_is_insert = false;
m_insert_seq.clear();
if (pFrame && pFrame->GetStatusBar())
pFrame->SetStatusText(wxEmptyString);
}
} else if ((e.GetUnicodeKey() || !e.HasAnyModifiers())
#if defined(__WXMSW__)
&& ::GetKeyState(VK_RMENU) >= 0
#endif
)
{
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
ZRCola::keyseq_db::indexKey::size_type start;
bool found;
wxFrame *pFrame = wxDynamicCast(app->m_mainWnd, wxFrame);
{
// Parse key event and save it at the end of the key sequence.
ZRCola::keyseq_db::keyseq::key_t key;
key.key = e.GetRawKeyCode();
#if defined(__WXMSW__)
// Translate from local keyboard to scan code.
key.key = ::MapVirtualKey(key.key, MAPVK_VK_TO_VSC);
// Translate from scan code to U.S. Keyboard.
static const HKL s_hkl = ::LoadKeyboardLayout(_T("00000409"), 0);
key.key = ::MapVirtualKeyEx(key.key, MAPVK_VSC_TO_VK, s_hkl);
#endif
key.modifiers =
(e.ShiftDown() ? ZRCola::keyseq_db::keyseq::SHIFT : 0) |
(e.ControlDown() ? ZRCola::keyseq_db::keyseq::CTRL : 0) |
(e.AltDown() ? ZRCola::keyseq_db::keyseq::ALT : 0);
m_seq.push_back(key);
std::unique_ptr<ZRCola::keyseq_db::keyseq> ks((ZRCola::keyseq_db::keyseq*)new char[sizeof(ZRCola::keyseq_db::keyseq) + sizeof(ZRCola::keyseq_db::keyseq::key_t)*m_seq.size()]);
ks->ZRCola::keyseq_db::keyseq::keyseq(m_seq.data(), m_seq.size());
found = app->m_ks_db.idxKey.find(*ks, start);
}
if (found) {
// The exact key sequence found.
const ZRCola::keyseq_db::keyseq &ks = app->m_ks_db.idxKey[start];
m_seq.clear();
if (pFrame && pFrame->GetStatusBar())
pFrame->SetStatusText(wxEmptyString);
wxObject *obj = event.GetEventObject();
if (obj && obj->IsKindOf(wxCLASSINFO(wxTextCtrl))) {
// Push text to source control.
((wxTextCtrl*)obj)->WriteText(wxString(ks.chr(), ks.chr_len()));
// Event is fully processed now.
event.StopPropagation();
return true;
}
} else if (start < app->m_ks_db.idxKey.size() &&
ZRCola::keyseq_db::keyseq::CompareSequence(m_seq.data(), m_seq.size(), app->m_ks_db.idxKey[start].seq(), std::min<size_t>(app->m_ks_db.idxKey[start].seq_len(), m_seq.size())) == 0)
{
// The sequence is a partial match. Continue watching.
if (pFrame && pFrame->GetStatusBar())
pFrame->SetStatusText(ZRCola::keyseq_db::GetSequenceAsText(m_seq.data(), m_seq.size()));
event.StopPropagation();
return true;
} else {
// The key sequence has no future chance to match. Start all over again.
m_seq.clear();
if (pFrame && pFrame->GetStatusBar())
pFrame->SetStatusText(wxEmptyString);
}
}
} else if (event.GetEventType() == wxEVT_KEY_UP) {
wxKeyEvent &e = (wxKeyEvent&)event;
if (m_is_insert && e.GetKeyCode() == WXK_INSERT) {
// Insert key has been depressed.
wxFrame *pFrame = wxDynamicCast(dynamic_cast<ZRColaApp*>(wxTheApp)->m_mainWnd, wxFrame);
if (pFrame && pFrame->GetStatusBar())
pFrame->SetStatusText(wxEmptyString);
auto count = m_insert_seq.size();
if (count) {
// Zero terminate sequence and parse the Unicode value.
m_insert_seq.push_back(0);
wchar_t chr = strtoul(m_insert_seq.data(), NULL, 16);
if (chr) {
wxObject *obj = event.GetEventObject();
if (obj && obj->IsKindOf(wxCLASSINFO(wxTextCtrl))) {
// Push text to source control.
((wxTextCtrl*)obj)->WriteText(chr);
}
}
m_insert_seq.clear();
}
m_is_insert = false;
event.StopPropagation();
return true;
}
}
return wxEvtHandler::ProcessEvent(event);
}

View File

@@ -1,5 +1,5 @@
/*
Copyright 2015-2016 Amebis
Copyright 2015-2019 Amebis
This file is part of ZRCola.
@@ -17,22 +17,32 @@
along with ZRCola. If not, see <http://www.gnu.org/licenses/>.
*/
///
/// Forward declarations
///
class wxZRColaKeyHandler;
#pragma once
#include "common.h"
#include <zrcolaui/keyboard.h>
#include <string>
#include <wx/event.h>
#include <vector>
namespace ZRCola {
///
/// Composes string
///
/// \param[in] input Input string (UTF-16)
/// \param[in] inputMax Length of the input string in characters. Can be (size_t)-1 if \p input is zero terminated.
/// \param[out] output Output string (UTF-16)
/// \param[out] map The vector of source to destination index mappings (optional)
///
void ZRCOLA_API Compose(_In_z_count_(inputMax) const wchar_t* input, _In_ size_t inputMax, _Out_ std::wstring &output, _Out_opt_ std::vector<mapping>* map = NULL);
///
/// ZRCola keyboard event handler
///
class wxZRColaKeyHandler : public wxEvtHandler
{
public:
wxZRColaKeyHandler();
virtual bool ProcessEvent(wxEvent& event);
protected:
std::vector<ZRCola::keyseq_db::keyseq::key_t> m_seq; ///< Key sequence
bool m_is_insert; ///< Is Insert key pressed?
std::vector<char> m_insert_seq; ///< The Insert char sequence
};

186
ZRCola/zrcolasettings.cpp Normal file
View File

@@ -0,0 +1,186 @@
/*
Copyright 2015-2019 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)
{
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
m_languages->Clear();
for (size_t i = 0, n = app->m_lang_db.idxLang.size(); i < n; i++) {
const auto &lang = app->m_lang_db.idxLang[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);
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
ZRCola::language_db::indexLang::size_type start;
m_languages->Select(app->m_lang_db.idxLang.find(ZRCola::language_db::language(m_lang), start) ? start : -1);
}
void wxZRColaSettings::OnLanguageUpdate(wxUpdateUIEvent& event)
{
m_languages->Enable(m_langManual->GetValue());
wxZRColaSettingsBase::OnLanguageUpdate(event);
}
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;
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
const auto &lang = app->m_lang_db.idxLang[m_languages->GetSelection()];
if (m_lang != lang.lang) {
m_lang = lang.lang;
// Notify destination text something changed and should re-inverse translate.
wxCommandEvent event2(wxEVT_COMMAND_TEXT_UPDATED);
app->m_mainWnd->m_panel->m_destination->ProcessWindowEvent(event2);
}
}
}
void wxZRColaSettings::OnOKButtonClick(wxCommandEvent& event)
{
wxZRColaSettings::OnApplyButtonClick(event);
}
//////////////////////////////////////////////////////////////////////////
// wxPersistentZRColaSettings
//////////////////////////////////////////////////////////////////////////
const int wxPersistentZRColaSettings::s_guiLevel = 1;
wxPersistentZRColaSettings::wxPersistentZRColaSettings(wxZRColaSettings *wnd) : wxPersistentTLWEx(wnd)
{
}
void wxPersistentZRColaSettings::Save() const
{
SaveValue(wxT("guiLevel"), s_guiLevel);
wxPersistentTLWEx::Save();
auto wnd = static_cast<const wxZRColaSettings*>(GetWindow()); // dynamic_cast is not reliable as we are typically called late in the wxTopLevelWindowMSW destructor.
SaveValue(wxT("langAuto"), wnd->m_lang_auto);
SaveValue(wxT("lang" ), wxString::FromAscii(wnd->m_lang.data, _countof(wnd->m_lang.data)));
}
bool wxPersistentZRColaSettings::Restore()
{
auto wnd = dynamic_cast<wxZRColaSettings*>(GetWindow());
auto app = dynamic_cast<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.idxLang.empty()) {
wnd->m_lang = app->m_lang_db.idxLang[0].lang;
} else
wnd->m_lang = ZRCola::langid_t::blank;
int guiLevel;
return RestoreValue(wxT("guiLevel"), &guiLevel) && guiLevel == s_guiLevel ? wxPersistentTLWEx::Restore() : true;
}

75
ZRCola/zrcolasettings.h Normal file
View File

@@ -0,0 +1,75 @@
/*
Copyright 2015-2019 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/toplevel.h>
#include <vector>
///
/// 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 OnLanguageUpdate(wxUpdateUIEvent& 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
};
///
/// Supports saving/restoring wxZRColaSettings state
///
class wxPersistentZRColaSettings : public wxPersistentTLWEx
{
public:
wxPersistentZRColaSettings(wxZRColaSettings *wnd);
virtual void Save() const;
virtual bool Restore();
protected:
static const int s_guiLevel; ///< Persisted placements/sizing are considered incompatible between different GUI levels
};
inline wxPersistentObject *wxCreatePersistentObject(wxZRColaSettings *wnd)
{
return new wxPersistentZRColaSettings(wnd);
}

258
ZRCola/zrcolatranseq.cpp Normal file
View File

@@ -0,0 +1,258 @@
/*
Copyright 2015-2019 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"
//////////////////////////////////////////////////////////////////////////
// wxZRColaTranslationSeq
//////////////////////////////////////////////////////////////////////////
wxZRColaTranslationSeq::wxZRColaTranslationSeq(wxWindow* parent) :
wxZRColaTranslationSeqBase(parent)
{
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
m_available->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_available->Append(label_tran, (void*)ts.set);
}
}
void wxZRColaTranslationSeq::OnInitDialog(wxInitDialogEvent& event)
{
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
m_selected->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_selected->Append(label_tran, (void*)ts.set);
} else {
wxString label_tran(wxString::Format(_("Unknown translation (%u)"), (unsigned int)*s));
m_selected->Append(label_tran, (void*)*s);
}
}
wxZRColaTranslationSeqBase::OnInitDialog(event);
}
void wxZRColaTranslationSeq::OnUpdate(wxUpdateUIEvent& event)
{
m_add->Enable(m_available->GetSelection() != wxNOT_FOUND);
int idx = m_selected->GetSelection();
m_remove ->Enable(idx != wxNOT_FOUND);
m_selectedUp ->Enable(idx != wxNOT_FOUND && (unsigned int)idx > 0);
m_selectedDown->Enable(idx != wxNOT_FOUND && (unsigned int)idx < m_selected->GetCount() - 1);
wxZRColaTranslationSeqBase::OnUpdate(event);
}
void wxZRColaTranslationSeq::OnAvailableChar(wxKeyEvent& event)
{
if (event.GetRawKeyCode() == VK_INSERT) {
int idx = m_available->GetSelection();
if (idx != wxNOT_FOUND) {
m_selected->Append(
m_available->GetString(idx),
m_available->GetClientData(idx));
}
}
wxZRColaTranslationSeqBase::OnAvailableChar(event);
}
void wxZRColaTranslationSeq::OnAvailableDClick(wxCommandEvent& event)
{
int idx = m_available->GetSelection();
if (idx != wxNOT_FOUND) {
m_selected->Append(
m_available->GetString(idx),
m_available->GetClientData(idx));
}
wxZRColaTranslationSeqBase::OnAvailableDClick(event);
}
void wxZRColaTranslationSeq::OnAdd(wxCommandEvent& event)
{
int idx = m_available->GetSelection();
wxASSERT_MSG(idx != wxNOT_FOUND, wxT("no available translation selected"));
m_selected->Append(
m_available->GetString(idx),
m_available->GetClientData(idx));
wxZRColaTranslationSeqBase::OnAdd(event);
}
void wxZRColaTranslationSeq::OnRemove(wxCommandEvent& event)
{
int idx = m_selected->GetSelection();
wxASSERT_MSG(idx != wxNOT_FOUND, wxT("no active translation selected"));
m_selected->Delete(idx);
wxZRColaTranslationSeqBase::OnRemove(event);
}
void wxZRColaTranslationSeq::OnSelectedChar(wxKeyEvent& event)
{
if (event.GetRawKeyCode() == VK_DELETE) {
int idx = m_selected->GetSelection();
if (idx != wxNOT_FOUND)
m_selected->Delete(idx);
}
wxZRColaTranslationSeqBase::OnSelectedChar(event);
}
void wxZRColaTranslationSeq::OnSelectedDClick(wxCommandEvent& event)
{
int idx = m_selected->GetSelection();
if (idx != wxNOT_FOUND)
m_selected->Delete(idx);
wxZRColaTranslationSeqBase::OnSelectedDClick(event);
}
void wxZRColaTranslationSeq::OnSelectedUp(wxCommandEvent& event)
{
int idx = m_selected->GetSelection();
wxASSERT_MSG(idx != wxNOT_FOUND && (unsigned int)idx > 0, wxT("no or first active translation selected"));
wxString label = m_selected->GetString(idx);
void *data = m_selected->GetClientData(idx);
m_selected->Delete(idx);
m_selected->Insert(label, idx - 1, data);
m_selected->Select(idx - 1);
wxZRColaTranslationSeqBase::OnSelectedUp(event);
}
void wxZRColaTranslationSeq::OnSelectedDown(wxCommandEvent& event)
{
int idx = m_selected->GetSelection();
wxASSERT_MSG(idx != wxNOT_FOUND && (unsigned int)idx < m_selected->GetCount() - 1, wxT("no or last active translation selected"));
wxString label = m_selected->GetString(idx);
void *data = m_selected->GetClientData(idx);
m_selected->Delete(idx);
m_selected->Insert(label, idx + 1, data);
m_selected->Select(idx + 1);
wxZRColaTranslationSeqBase::OnSelectedDown(event);
}
void wxZRColaTranslationSeq::OnApplyButtonClick(wxCommandEvent& event)
{
event.Skip();
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
m_transeq.clear();
for (unsigned int i = 0, n = m_selected->GetCount(); i < n; i++)
m_transeq.push_back(static_cast<ZRCola::transetid_t>((size_t)m_selected->GetClientData(i)));
// Notify source text something changed and should re-translate.
wxCommandEvent event2(wxEVT_COMMAND_TEXT_UPDATED);
app->m_mainWnd->m_panel->m_source->ProcessWindowEvent(event2);
}
void wxZRColaTranslationSeq::OnOKButtonClick(wxCommandEvent& event)
{
wxZRColaTranslationSeq::OnApplyButtonClick(event);
}
//////////////////////////////////////////////////////////////////////////
// wxPersistentZRColaTranslationSeq
//////////////////////////////////////////////////////////////////////////
const int wxPersistentZRColaTranslationSeq::s_guiLevel = 1;
wxPersistentZRColaTranslationSeq::wxPersistentZRColaTranslationSeq(wxZRColaTranslationSeq *wnd) : wxPersistentTLWEx(wnd)
{
}
void wxPersistentZRColaTranslationSeq::Save() const
{
SaveValue(wxT("guiLevel"), s_guiLevel);
wxPersistentTLWEx::Save();
auto wnd = static_cast<const wxZRColaTranslationSeq*>(GetWindow()); // dynamic_cast is not reliable as we are typically called late in the wxTopLevelWindowMSW destructor.
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);
}
bool wxPersistentZRColaTranslationSeq::Restore()
{
auto wnd = dynamic_cast<wxZRColaTranslationSeq*>(GetWindow());
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
wxString str;
if (RestoreValue(wxT("transeq"), &str)) {
std::vector<ZRCola::transetid_t> transet;
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) {
transet.push_back(val);
break;
}
}
}
if (!transet.empty())
wnd->m_transeq = std::move(transet);
}
int guiLevel;
return RestoreValue(wxT("guiLevel"), &guiLevel) && guiLevel == s_guiLevel ? wxPersistentTLWEx::Restore() : true;
}

Some files were not shown because too many files have changed in this diff Show More