Compare commits

..

No commits in common. "master" and "ver/SDP2016" have entirely different histories.

232 changed files with 23868 additions and 74663 deletions

12
.gitignore vendored
View File

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

23
.gitmodules vendored
View File

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

View File

@ -1,21 +0,0 @@
# 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 +0,0 @@
Subproject commit b8364dea81f39b321d726317a9dcbf6b13a455e0

@ -1 +0,0 @@
Subproject commit f989fdc827d8fa731977d1771097cf038a50e145

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

View File

@ -1,5 +0,0 @@
# SPDX-License-Identifier: GPL-3.0-or-later
# Copyright © 1991-2022 Amebis
!INCLUDE "..\..\include\MSIBuildCfg.mak"
!INCLUDE "..\MSIBuild\Makefile"

View File

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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

BIN
Makefile

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,69 +1 @@
# 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://prenos.amebis.si/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 Win32 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 (e.g. `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, e.g. `f61b973226c502a732d24f41aa85e192b009e7c0`).
- `ManifestTimestampRFC3161Url` - set the value to URL used to perform RFC3161 timestamp signature (e.g. `http://time.certum.pl`). 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 (e.g. nmake Unregister Clean). Please, see NMAKE reference for further reading.
## Building and installing ZRCola webservice
ZRCola is also available as a Linux web-service. See [ZRColaWS/README.md](ZRColaWS/README.md) for instructions.
## 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 +0,0 @@
Subproject commit a98ef46c5d38dec796dcb78f48240c17f743e3af

View File

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

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

580
ZRCola/ZRCola.fbp Normal file
View File

@ -0,0 +1,580 @@
<?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>

14
ZRCola/ZRCola.props Normal file
View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<OutDir>..\output\$(Platform).$(Configuration)\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\lib\wxExtend\include;..\lib\libZRCola\include</AdditionalIncludeDirectories>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

Binary file not shown.

View File

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations"> <ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32"> <ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@ -13,10 +9,6 @@
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>x64</Platform> <Platform>x64</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32"> <ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@ -31,118 +23,92 @@
<RootNamespace>ZRCola</RootNamespace> <RootNamespace>ZRCola</RootNamespace>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
</PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Configuration)'=='Debug'">
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Configuration)'=='Release'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Label="Configuration" Condition="'$(Platform)'=='ARM64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings" /> <ImportGroup Label="ExtensionSettings">
<ImportGroup Label="PropertySheets"> </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="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\include\$(Platform).props" /> <Import Project="..\include\Win32.props" />
<Import Project="..\include\$(Configuration).props" /> <Import Project="..\include\Debug.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="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="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="ZRCola.props" />
</ImportGroup> </ImportGroup>
<PropertyGroup Label="UserMacros" /> <PropertyGroup Label="UserMacros" />
<PropertyGroup>
<OutDir>..\output\$(Platform).$(Configuration)\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<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> <ItemGroup>
<ClCompile Include="pch.cpp"> <ClCompile Include="stdafx.cpp">
<PrecompiledHeader>Create</PrecompiledHeader> <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)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile> </ClCompile>
<ClCompile Include="zrcolaabout.cpp" />
<ClCompile Include="zrcolaapp.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="zrcolacomppnl.cpp" />
<ClCompile Include="zrcolafrm.cpp" /> <ClCompile Include="zrcolafrm.cpp" />
<ClCompile Include="zrcolagui.cpp" /> <ClCompile Include="zrcolagui.cpp" />
<ClCompile Include="zrcolakeyhndlr.cpp" />
<ClCompile Include="zrcolasettings.cpp" />
<ClCompile Include="zrcolatranseq.cpp" />
<ClCompile Include="zrcolaupdater.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="pch.h" /> <ClInclude Include="stdafx.h" />
<ClInclude Include="zrcolaabout.h" />
<ClInclude Include="zrcolaapp.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="zrcolacomppnl.h" />
<ClInclude Include="zrcolafrm.h" /> <ClInclude Include="zrcolafrm.h" />
<ClInclude Include="zrcolagui.h" /> <ClInclude Include="zrcolagui.h" />
<ClInclude Include="zrcolakeyhndlr.h" />
<ClInclude Include="zrcolasettings.h" />
<ClInclude Include="zrcolatranseq.h" />
<ClInclude Include="zrcolaupdater.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\lib\libZRColaUI\build\libZRColaUI.vcxproj">
<Project>{c0a84bd2-3870-4cd6-b281-0ab322e3c579}</Project>
</ProjectReference>
<ProjectReference Include="..\lib\libZRCola\build\libZRCola.vcxproj"> <ProjectReference Include="..\lib\libZRCola\build\libZRCola.vcxproj">
<Project>{3c61929e-7289-4101-8d0a-da22d6e1aea8}</Project> <Project>{3c61929e-7289-4101-8d0a-da22d6e1aea8}</Project>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\lib\wxExtend\build\wxExtendLib.vcxproj"> <ProjectReference Include="..\lib\wxExtend\build\wxExtend.vcxproj">
<Project>{D3E29951-D9F5-486D-A167-20AE8E90B1FA}</Project> <Project>{a3a36689-ac35-4026-93da-a3ba0c0e767c}</Project>
</ProjectReference>
<ProjectReference Include="..\Updater\Updater\build\Updater.vcxproj">
<Project>{990d8cf9-4457-4dc0-aa18-4968ef434741}</Project>
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="locale\ZRCola.pot" /> <None Include="res\send.ico" />
<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.ico" />
<None Include="res\ZRCola.fbp">
<SubType>Designer</SubType>
</None>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="ZRCola.rc" /> <ResourceCompile Include="ZRCola.rc" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<POCompile Include="locale\de_DE.po" /> <POCompile Include="locale\sl.po" />
<POCompile Include="locale\ru_RU.po" />
<POCompile Include="locale\sl_SI.po" />
</ItemGroup>
<ItemGroup>
<Image Include="res\composition.ico" />
</ItemGroup> </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">

View File

@ -19,7 +19,7 @@
</Filter> </Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="pch.cpp"> <ClCompile Include="stdafx.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="zrcolaapp.cpp"> <ClCompile Include="zrcolaapp.cpp">
@ -34,36 +34,9 @@
<ClCompile Include="zrcolafrm.cpp"> <ClCompile Include="zrcolafrm.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </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>
<ItemGroup> <ItemGroup>
<ClInclude Include="pch.h"> <ClInclude Include="stdafx.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="zrcolaapp.h"> <ClInclude Include="zrcolaapp.h">
@ -78,77 +51,14 @@
<ClInclude Include="zrcolafrm.h"> <ClInclude Include="zrcolafrm.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </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>
<ItemGroup> <ItemGroup>
<None Include="res\send.ico">
<Filter>Resource Files</Filter>
</None>
<None Include="res\zrcola.ico"> <None Include="res\zrcola.ico">
<Filter>Resource Files</Filter> <Filter>Resource Files</Filter>
</None> </None>
<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> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="ZRCola.rc"> <ResourceCompile Include="ZRCola.rc">
@ -156,19 +66,8 @@
</ResourceCompile> </ResourceCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<POCompile Include="locale\sl_SI.po"> <POCompile Include="locale\sl.po">
<Filter>Resource Files\Localization</Filter> <Filter>Resource Files\Localization</Filter>
</POCompile> </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> </ItemGroup>
</Project> </Project>

View File

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

View File

@ -1,824 +0,0 @@
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: ZRCola\n"
"POT-Creation-Date: 2022-02-17 13:32+0100\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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.4.2\n"
"X-Poedit-Basepath: ..\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: _\n"
"X-Poedit-SearchPath-0: .\n"
"X-Poedit-SearchPathExcluded-0: res/zrcolagui.*\n"
#: zrcolaabout.cpp:17
#, c-format
msgid "© 2004-%s ZRC SAZU"
msgstr ""
#: zrcolaapp.cpp:60 zrcolafrm.cpp:118 zrcolagui.cpp:232 zrcolagui.cpp:943
#: zrcolagui.h:119 MSIBuild/en_US.ARM64.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.ARM64.Debug.Shortcut-2.idtx:4
#: MSIBuild/en_US.ARM64.Release.Feature-2.idtx:4
#: MSIBuild/en_US.ARM64.Release.Shortcut-2.idtx:4
#: 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 ""
#: zrcolachrreq.cpp:35 zrcolagui.cpp:1073
msgid "Character"
msgstr ""
#: zrcolachrreq.cpp:44 zrcolagui.cpp:1101
msgid "Context"
msgstr ""
#: zrcolachrreq.cpp:50 zrcolagui.h:376
msgid "Request a New Character"
msgstr ""
#: zrcolachrslct.cpp:75
msgid "Too many digits in Unicode."
msgstr ""
#: zrcolachrslct.cpp:75 zrcolachrslct.cpp:93
msgid "Validation conflict"
msgstr ""
#: zrcolachrslct.cpp:93
#, c-format
msgid "Invalid character in Unicode found: %c"
msgstr ""
#: zrcolachrslct.cpp:201 zrcolachrslct.cpp:377 zrcolachrslct.cpp:874
msgid "▸ Search Options"
msgstr ""
#: zrcolachrslct.cpp:315
msgid ", "
msgstr ""
#: zrcolachrslct.cpp:380 zrcolachrslct.cpp:871
msgid "▾ Search Options"
msgstr ""
#: zrcolafrm.cpp:84
msgid "No Translation"
msgstr ""
#: zrcolafrm.cpp:97
msgid "Custom Translation..."
msgstr ""
#: zrcolafrm.cpp:217
msgid "ZRCola keyboard shortcut Win+F5 could not be registered. Some functionality will not be available."
msgstr ""
#: zrcolafrm.cpp:217 zrcolafrm.cpp:219
msgid "Warning"
msgstr ""
#: zrcolafrm.cpp:219
msgid "ZRCola keyboard shortcut Win+F6 could not be registered. Some functionality will not be available."
msgstr ""
#: zrcolafrm.cpp:513
msgid "http://zrcola.zrc-sazu.si/en/info/instructions/"
msgstr ""
#: zrcolafrm.cpp:538
msgid "http://zrcola.zrc-sazu.si/wp-content/uploads/2016/06/ZRCola_tipkovnica_Jun2016.pdf"
msgstr ""
#: zrcolagui.cpp:42
msgid "E&xit"
msgstr ""
#: zrcolagui.cpp:42
msgid "Quit this program"
msgstr ""
#: zrcolagui.cpp:45
msgid "&Program"
msgstr ""
#: zrcolagui.cpp:78
msgid "Select &All"
msgstr ""
#: zrcolagui.cpp:78
msgid "Select all text"
msgstr ""
#: zrcolagui.cpp:84
msgid "Find C&haracter..."
msgstr ""
#: zrcolagui.cpp:84 zrcolagui.cpp:224
msgid "Toggle character search to select character to insert into text"
msgstr ""
#: zrcolagui.cpp:90
msgid "&Send Composed"
msgstr ""
#: zrcolagui.cpp:90 zrcolagui.cpp:226
msgid "Send composed text to source window"
msgstr ""
#: zrcolagui.cpp:99
msgid "Copy Composed and &Return"
msgstr ""
#: zrcolagui.cpp:99
msgid "Copy composed text to clipboard and return focus to source window"
msgstr ""
#: zrcolagui.cpp:108
msgid "Send &Decomposed"
msgstr ""
#: zrcolagui.cpp:108 zrcolagui.cpp:228
msgid "Send decomposed text to source window"
msgstr ""
#: zrcolagui.cpp:117
msgid "Copy Decomposed and Re&turn"
msgstr ""
#: zrcolagui.cpp:117
msgid "Copy decomposed text to clipboard and return focus to source window"
msgstr ""
#: zrcolagui.cpp:126
msgid "Abort (De)composition"
msgstr ""
#: zrcolagui.cpp:126
msgid "Abort composition and return focus to source window"
msgstr ""
#: zrcolagui.cpp:138
msgid "(De)&composition"
msgstr ""
#: zrcolagui.cpp:139
msgid "&None"
msgstr ""
#: zrcolagui.cpp:139
msgid "No character (De)composition"
msgstr ""
#: zrcolagui.cpp:142
msgid "&ZRCola"
msgstr ""
#: zrcolagui.cpp:142
msgid "ZRCola character (De)composition"
msgstr ""
#: zrcolagui.cpp:145
msgid "&Unicode"
msgstr ""
#: zrcolagui.cpp:145
msgid "Unicode character (De)composition"
msgstr ""
#: zrcolagui.cpp:151
msgid "Tra&nslation"
msgstr ""
#: zrcolagui.cpp:156
msgid "&PUA Warning"
msgstr ""
#: zrcolagui.cpp:156 zrcolagui.cpp:243
msgid "Highlight Private Use Area Characters"
msgstr ""
#: zrcolagui.cpp:162
msgid "&Settings..."
msgstr ""
#: zrcolagui.cpp:162
msgid "Open program configuration dialog"
msgstr ""
#: zrcolagui.cpp:165
msgid "&Edit"
msgstr ""
#: zrcolagui.cpp:169
msgid "&Edit Toolbar"
msgstr ""
#: zrcolagui.cpp:169
msgid "Toggle edit toolbar"
msgstr ""
#: zrcolagui.cpp:173
msgid "&Compose Toolbar"
msgstr ""
#: zrcolagui.cpp:173
msgid "Toggle compose toolbar"
msgstr ""
#: zrcolagui.cpp:179
msgid "Character Catalo&g"
msgstr ""
#: zrcolagui.cpp:179
msgid "Toggle character catalog panel"
msgstr ""
#: zrcolagui.cpp:182
msgid "&View"
msgstr ""
#: zrcolagui.cpp:186
msgid "&Instructions..."
msgstr ""
#: zrcolagui.cpp:186
msgid "Open a web site with product instructions"
msgstr ""
#: zrcolagui.cpp:190
msgid "Keyboard &Shortcuts..."
msgstr ""
#: zrcolagui.cpp:190
msgid "Open a list of keyboard shortcuts"
msgstr ""
#: zrcolagui.cpp:196
msgid "&Request a new character..."
msgstr ""
#: zrcolagui.cpp:196
msgid "Submit a request to ZRC to add a new character"
msgstr ""
#: zrcolagui.cpp:200
msgid "Check for &Updates..."
msgstr ""
#: zrcolagui.cpp:200
msgid "Check online for product update"
msgstr ""
#: zrcolagui.cpp:206
msgid "&About..."
msgstr ""
#: zrcolagui.cpp:209
msgid "&Help"
msgstr ""
#: zrcolagui.cpp:214
msgid "Cut"
msgstr ""
#: zrcolagui.cpp:214
msgid "Cut selection"
msgstr ""
#: zrcolagui.cpp:216
msgid "Copy"
msgstr ""
#: zrcolagui.cpp:216
msgid "Copy selection"
msgstr ""
#: zrcolagui.cpp:218
msgid "Paste"
msgstr ""
#: zrcolagui.cpp:218
msgid "Paste selection"
msgstr ""
#: zrcolagui.cpp:221
msgid "Edit"
msgstr ""
#: zrcolagui.cpp:224
msgid "Find Character"
msgstr ""
#: zrcolagui.cpp:226
msgid "Send Composed"
msgstr ""
#: zrcolagui.cpp:228
msgid "Send Decomposed"
msgstr ""
#: zrcolagui.cpp:232
msgid "No (De)composition"
msgstr ""
#: zrcolagui.cpp:232
msgid "Unicode"
msgstr ""
#: zrcolagui.cpp:243
msgid "PUA Warning"
msgstr ""
#: zrcolagui.cpp:246
msgid "Compose"
msgstr ""
#: zrcolagui.cpp:250
msgid "Character Catalog"
msgstr ""
#: zrcolagui.cpp:254
msgid "(De)Composer"
msgstr ""
#: zrcolagui.cpp:297
msgid "Decomposed Text"
msgstr ""
#: zrcolagui.cpp:317
msgid "Decomposed Unicode Dump"
msgstr ""
#: zrcolagui.cpp:344
msgid "Composed Text"
msgstr ""
#: zrcolagui.cpp:364
msgid "Composed Unicode Dump"
msgstr ""
#: zrcolagui.cpp:418
msgid "Select category to display"
msgstr ""
#: zrcolagui.cpp:452
msgid "Show &All"
msgstr ""
#: zrcolagui.cpp:453
msgid "Toggle display of less frequent characters"
msgstr ""
#: zrcolagui.cpp:493
msgid "&Browse"
msgstr ""
#: zrcolagui.cpp:500
msgid "Full or partial terms from Unicode character description (in English) to search for"
msgstr ""
#: zrcolagui.cpp:504
msgid "Search Options"
msgstr ""
#: zrcolagui.cpp:505
msgid "Shows/hides additional search options"
msgstr ""
#: zrcolagui.cpp:517
msgid "List of Unicode character categories to search in"
msgstr ""
#: zrcolagui.cpp:524
msgid "All"
msgstr ""
#: zrcolagui.cpp:525
msgid "Select all categories"
msgstr ""
#: zrcolagui.cpp:529
msgid "None"
msgstr ""
#: zrcolagui.cpp:530
msgid "Clear category selection"
msgstr ""
#: zrcolagui.cpp:534
msgid "Invert"
msgstr ""
#: zrcolagui.cpp:535
msgid "Invert category selection"
msgstr ""
#: zrcolagui.cpp:574
msgid "Character search results"
msgstr ""
#: zrcolagui.cpp:584
msgid "Re&cently Used"
msgstr ""
#: zrcolagui.cpp:612
msgid "List of recently inserted characters"
msgstr ""
#: zrcolagui.cpp:626
msgid "Preview"
msgstr ""
#: zrcolagui.cpp:631
msgid "U+"
msgstr ""
#: zrcolagui.cpp:636
msgid "Unicode hexadecimal code"
msgstr ""
#: zrcolagui.cpp:641
msgid "Keyboard shortcut in Composer window"
msgstr ""
#: zrcolagui.cpp:676
msgid "Character preview"
msgstr ""
#: zrcolagui.cpp:681
msgid "Unicode character description"
msgstr ""
#: zrcolagui.cpp:686
msgid "Character tags"
msgstr ""
#: zrcolagui.cpp:691
msgid "Unicode character category"
msgstr ""
#: zrcolagui.cpp:698
msgid "« Back"
msgstr ""
#: zrcolagui.cpp:700
msgid "To previously viewed character"
msgstr ""
#: zrcolagui.cpp:704
msgid "Forward »"
msgstr ""
#: zrcolagui.cpp:706
msgid "To following viewed character"
msgstr ""
#: zrcolagui.cpp:717
msgid "Re&lated"
msgstr ""
#: zrcolagui.cpp:744
msgid "List of related characters"
msgstr ""
#: zrcolagui.cpp:763
msgid "&Insert"
msgstr ""
#: zrcolagui.cpp:767
msgid "Insert character into decomposed text"
msgstr ""
#: zrcolagui.cpp:843
msgid ""
"Some character native to specific language you are working with should not decompose to primitives.\n"
"For optimal decomposition you should set the language correctly."
msgstr ""
#: zrcolagui.cpp:847
msgid "Select language &automatically according to selected keyboard"
msgstr ""
#: zrcolagui.cpp:850
msgid "&Manually select the language from the list below:"
msgstr ""
#: zrcolagui.cpp:861
msgid "Text Language"
msgstr ""
#: zrcolagui.cpp:866
msgid ""
"ZRCola can be launched every time you log in to your computer.\n"
"It will be available on the system tray and via registered shortcuts Win+F5 and Win+F6."
msgstr ""
#: zrcolagui.cpp:870
msgid "Start ZRCola &automatically on logon"
msgstr ""
#: zrcolagui.cpp:876
msgid "Startup"
msgstr ""
#: zrcolagui.cpp:954
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 ""
#: zrcolagui.cpp:962
msgid "zrcola.zrc-sazu.si"
msgstr ""
#: zrcolagui.cpp:968
msgid "Texts made using ZRCola have to include in a footnote or some other appropriate part of the publication the note below:"
msgstr ""
#: zrcolagui.cpp:972
msgid "This text was written using the ZRCola input system (http://zrcola.zrc-sazu.si), developed at the Science and Research Centre of SAZU in Ljubljana (http://www.zrc-sazu.si) by Peter Weiss."
msgstr ""
#: zrcolagui.cpp:1013
msgid "Log"
msgstr ""
#: zrcolagui.cpp:1029
msgid "Quit and &Update..."
msgstr ""
#: zrcolagui.cpp:1031
msgid "Exit this program and launch product update"
msgstr ""
#: zrcolagui.cpp:1035
msgid "&Close"
msgstr ""
#: zrcolagui.cpp:1036
msgid "Close this window"
msgstr ""
#: zrcolagui.cpp:1075
msgid "Enter the &character you would like to request:"
msgstr ""
#: zrcolagui.cpp:1089
msgid "Decomposed character to request"
msgstr ""
#: zrcolagui.cpp:1093
msgid ""
"Please, use the decomposed form.\n"
"You can use ZRCola keyboard shortcuts to enter the character or Copy&&Paste it from the Decomposed window."
msgstr ""
#: zrcolagui.cpp:1103
msgid "The &context, examples or description why and where the character is required:"
msgstr ""
#: zrcolagui.cpp:1109
msgid "Additional notes for character request"
msgstr ""
#: zrcolagui.cpp:1116
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 ""
#: zrcolagui.cpp:1158
msgid "Translation"
msgstr ""
#: zrcolagui.cpp:1160
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 ""
#: zrcolagui.cpp:1170
msgid "A&vailable:"
msgstr ""
#: zrcolagui.cpp:1185
msgid "→"
msgstr ""
#: zrcolagui.cpp:1188
msgid "←"
msgstr ""
#: zrcolagui.cpp:1197
msgid "&Selected:"
msgstr ""
#: zrcolagui.cpp:1215
msgid "↑"
msgstr ""
#: zrcolagui.cpp:1218
msgid "↓"
msgstr ""
#: zrcolagui.h:260
msgid "Character Search"
msgstr ""
#: zrcolagui.h:296
msgid "Settings"
msgstr ""
#: zrcolagui.h:322
msgid "About ZRCola"
msgstr ""
#: zrcolagui.h:347 zrcolaupdater.cpp:81
msgid "Product Update"
msgstr ""
#: zrcolagui.h:418
msgid "Custom Translation Sequence"
msgstr ""
#: zrcolakeyhndlr.cpp:30
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:73
msgid "Start ZRCola automatically on logon"
msgstr ""
#: zrcolatranseq.cpp:49
#, c-format
msgid "Unknown translation (%u)"
msgstr ""
#: zrcolaupdater.cpp:81
msgid ""
"This program will now close and the upgrade will be launched.\n"
"Are you sure?"
msgstr ""
#: MSIBuild/en_US.ARM64.Debug.Control-2.idtx:4
#: MSIBuild/en_US.ARM64.Debug.Control-2.idtx:10
#: MSIBuild/en_US.ARM64.Debug.Control-2.idtx:15
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:4
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:10
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:15
#: 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 "UIHeader.bmp"
msgstr ""
#: MSIBuild/en_US.ARM64.Debug.Control-2.idtx:5
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:5
#: 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.ARM64.Debug.Control-2.idtx:6
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:6
#: 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 "tutorial1.bmp"
msgstr ""
#: MSIBuild/en_US.ARM64.Debug.Control-2.idtx:7
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:7
#: 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.ARM64.Debug.Control-2.idtx:8
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:8
#: 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.ARM64.Debug.Control-2.idtx:9
#: MSIBuild/en_US.ARM64.Debug.Control-2.idtx:14
#: MSIBuild/en_US.ARM64.Debug.Control-2.idtx:19
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:9
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:14
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:19
#: 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.ARM64.Debug.Control-2.idtx:11
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:11
#: 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.ARM64.Debug.Control-2.idtx:12
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:12
#: 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 "tutorial2.bmp"
msgstr ""
#: MSIBuild/en_US.ARM64.Debug.Control-2.idtx:13
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:13
#: 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.ARM64.Debug.Control-2.idtx:16
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:16
#: 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.ARM64.Debug.Control-2.idtx:17
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:17
#: 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 "tutorial3.bmp"
msgstr ""
#: MSIBuild/en_US.ARM64.Debug.Control-2.idtx:18
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:18
#: 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.ARM64.Debug.Feature-2.idtx:4
#: MSIBuild/en_US.ARM64.Debug.Shortcut-2.idtx:4
#: MSIBuild/en_US.ARM64.Release.Feature-2.idtx:4
#: MSIBuild/en_US.ARM64.Release.Shortcut-2.idtx:4
#: 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 ""

View File

@ -1,800 +0,0 @@
#
# Translators:
# Simon Rozman <simon@rozman.si>, 2021
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: ZRCola\n"
"POT-Creation-Date: 2021-12-21 14:45+0100\n"
"PO-Revision-Date: 2018-09-19 07:18+0000\n"
"Last-Translator: Simon Rozman <simon@rozman.si>, 2021\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.4.2\n"
"X-Poedit-Basepath: ..\n"
"X-Poedit-KeywordsList: _\n"
"X-Poedit-SearchPath-0: .\n"
"X-Poedit-SearchPathExcluded-0: res/zrcolagui.*\n"
"X-Poedit-SourceCharset: UTF-8\n"
#: zrcolaabout.cpp:17
#, c-format
msgid "© 2004-%s ZRC SAZU"
msgstr ""
#: zrcolaapp.cpp:60 zrcolafrm.cpp:118 zrcolagui.cpp:232 zrcolagui.cpp:943
#: zrcolagui.h:119 MSIBuild/en_US.ARM64.Release.Feature-2.idtx:4
#: MSIBuild/en_US.ARM64.Release.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.Release.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
msgid "ZRCola"
msgstr "ZRCola"
#: zrcolachrreq.cpp:35 zrcolagui.cpp:1073
msgid "Character"
msgstr ""
#: zrcolachrreq.cpp:44 zrcolagui.cpp:1101
msgid "Context"
msgstr ""
#: zrcolachrreq.cpp:50 zrcolagui.h:376
msgid "Request a New Character"
msgstr ""
#: zrcolachrslct.cpp:75
msgid "Too many digits in Unicode."
msgstr ""
#: zrcolachrslct.cpp:75 zrcolachrslct.cpp:93
msgid "Validation conflict"
msgstr "Fehler bei der Validierung"
#: zrcolachrslct.cpp:93
#, c-format
msgid "Invalid character in Unicode found: %c"
msgstr ""
#: zrcolachrslct.cpp:201 zrcolachrslct.cpp:377 zrcolachrslct.cpp:874
msgid "▸ Search Options"
msgstr ""
#: zrcolachrslct.cpp:315
msgid ", "
msgstr ", "
#: zrcolachrslct.cpp:380 zrcolachrslct.cpp:871
msgid "▾ Search Options"
msgstr ""
#: zrcolafrm.cpp:84
msgid "No Translation"
msgstr ""
#: zrcolafrm.cpp:97
msgid "Custom Translation..."
msgstr ""
#: zrcolafrm.cpp:217
msgid ""
"ZRCola keyboard shortcut Win+F5 could not be registered. Some functionality "
"will not be available."
msgstr ""
#: zrcolafrm.cpp:217 zrcolafrm.cpp:219
msgid "Warning"
msgstr ""
#: zrcolafrm.cpp:219
msgid ""
"ZRCola keyboard shortcut Win+F6 could not be registered. Some functionality "
"will not be available."
msgstr ""
#: zrcolafrm.cpp:513
msgid "http://zrcola.zrc-sazu.si/en/info/instructions/"
msgstr "http://zrcola.zrc-sazu.si/de/info/instructions/"
#: zrcolafrm.cpp:538
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"
#: zrcolagui.cpp:42
msgid "E&xit"
msgstr ""
#: zrcolagui.cpp:42
msgid "Quit this program"
msgstr ""
#: zrcolagui.cpp:45
msgid "&Program"
msgstr ""
#: zrcolagui.cpp:78
msgid "Select &All"
msgstr ""
#: zrcolagui.cpp:78
msgid "Select all text"
msgstr ""
#: zrcolagui.cpp:84
msgid "Find C&haracter..."
msgstr ""
#: zrcolagui.cpp:84 zrcolagui.cpp:224
msgid "Toggle character search to select character to insert into text"
msgstr ""
#: zrcolagui.cpp:90
msgid "&Send Composed"
msgstr ""
#: zrcolagui.cpp:90 zrcolagui.cpp:226
msgid "Send composed text to source window"
msgstr ""
#: zrcolagui.cpp:99
msgid "Copy Composed and &Return"
msgstr ""
#: zrcolagui.cpp:99
msgid "Copy composed text to clipboard and return focus to source window"
msgstr ""
#: zrcolagui.cpp:108
msgid "Send &Decomposed"
msgstr ""
#: zrcolagui.cpp:108 zrcolagui.cpp:228
msgid "Send decomposed text to source window"
msgstr ""
#: zrcolagui.cpp:117
msgid "Copy Decomposed and Re&turn"
msgstr ""
#: zrcolagui.cpp:117
msgid "Copy decomposed text to clipboard and return focus to source window"
msgstr ""
#: zrcolagui.cpp:126
msgid "Abort (De)composition"
msgstr ""
#: zrcolagui.cpp:126
msgid "Abort composition and return focus to source window"
msgstr ""
#: zrcolagui.cpp:138
msgid "(De)&composition"
msgstr ""
#: zrcolagui.cpp:139
msgid "&None"
msgstr ""
#: zrcolagui.cpp:139
msgid "No character (De)composition"
msgstr ""
#: zrcolagui.cpp:142
msgid "&ZRCola"
msgstr "&ZRCola"
#: zrcolagui.cpp:142
msgid "ZRCola character (De)composition"
msgstr ""
#: zrcolagui.cpp:145
msgid "&Unicode"
msgstr "&Unicode"
#: zrcolagui.cpp:145
msgid "Unicode character (De)composition"
msgstr ""
#: zrcolagui.cpp:151
msgid "Tra&nslation"
msgstr ""
#: zrcolagui.cpp:156
msgid "&PUA Warning"
msgstr ""
#: zrcolagui.cpp:156 zrcolagui.cpp:243
msgid "Highlight Private Use Area Characters"
msgstr ""
#: zrcolagui.cpp:162
msgid "&Settings..."
msgstr ""
#: zrcolagui.cpp:162
msgid "Open program configuration dialog"
msgstr ""
#: zrcolagui.cpp:165
msgid "&Edit"
msgstr ""
#: zrcolagui.cpp:169
msgid "&Edit Toolbar"
msgstr ""
#: zrcolagui.cpp:169
msgid "Toggle edit toolbar"
msgstr ""
#: zrcolagui.cpp:173
msgid "&Compose Toolbar"
msgstr ""
#: zrcolagui.cpp:173
msgid "Toggle compose toolbar"
msgstr ""
#: zrcolagui.cpp:179
msgid "Character Catalo&g"
msgstr ""
#: zrcolagui.cpp:179
msgid "Toggle character catalog panel"
msgstr ""
#: zrcolagui.cpp:182
msgid "&View"
msgstr ""
#: zrcolagui.cpp:186
msgid "&Instructions..."
msgstr ""
#: zrcolagui.cpp:186
msgid "Open a web site with product instructions"
msgstr ""
#: zrcolagui.cpp:190
msgid "Keyboard &Shortcuts..."
msgstr ""
#: zrcolagui.cpp:190
msgid "Open a list of keyboard shortcuts"
msgstr ""
#: zrcolagui.cpp:196
msgid "&Request a new character..."
msgstr ""
#: zrcolagui.cpp:196
msgid "Submit a request to ZRC to add a new character"
msgstr ""
#: zrcolagui.cpp:200
msgid "Check for &Updates..."
msgstr ""
#: zrcolagui.cpp:200
msgid "Check online for product update"
msgstr ""
#: zrcolagui.cpp:206
msgid "&About..."
msgstr ""
#: zrcolagui.cpp:209
msgid "&Help"
msgstr ""
#: zrcolagui.cpp:214
msgid "Cut"
msgstr ""
#: zrcolagui.cpp:214
msgid "Cut selection"
msgstr ""
#: zrcolagui.cpp:216
msgid "Copy"
msgstr ""
#: zrcolagui.cpp:216
msgid "Copy selection"
msgstr ""
#: zrcolagui.cpp:218
msgid "Paste"
msgstr ""
#: zrcolagui.cpp:218
msgid "Paste selection"
msgstr ""
#: zrcolagui.cpp:221
msgid "Edit"
msgstr ""
#: zrcolagui.cpp:224
msgid "Find Character"
msgstr ""
#: zrcolagui.cpp:226
msgid "Send Composed"
msgstr ""
#: zrcolagui.cpp:228
msgid "Send Decomposed"
msgstr ""
#: zrcolagui.cpp:232
msgid "No (De)composition"
msgstr ""
#: zrcolagui.cpp:232
msgid "Unicode"
msgstr "Unicode"
#: zrcolagui.cpp:243
msgid "PUA Warning"
msgstr ""
#: zrcolagui.cpp:246
msgid "Compose"
msgstr ""
#: zrcolagui.cpp:250
msgid "Character Catalog"
msgstr ""
#: zrcolagui.cpp:254
msgid "(De)Composer"
msgstr ""
#: zrcolagui.cpp:297
msgid "Decomposed Text"
msgstr ""
#: zrcolagui.cpp:317
msgid "Decomposed Unicode Dump"
msgstr ""
#: zrcolagui.cpp:344
msgid "Composed Text"
msgstr ""
#: zrcolagui.cpp:364
msgid "Composed Unicode Dump"
msgstr ""
#: zrcolagui.cpp:418
msgid "Select category to display"
msgstr ""
#: zrcolagui.cpp:452
msgid "Show &All"
msgstr ""
#: zrcolagui.cpp:453
msgid "Toggle display of less frequent characters"
msgstr ""
#: zrcolagui.cpp:493
msgid "&Browse"
msgstr ""
#: zrcolagui.cpp:500
msgid ""
"Full or partial terms from Unicode character description (in English) to "
"search for"
msgstr ""
#: zrcolagui.cpp:504
msgid "Search Options"
msgstr ""
#: zrcolagui.cpp:505
msgid "Shows/hides additional search options"
msgstr ""
#: zrcolagui.cpp:517
msgid "List of Unicode character categories to search in"
msgstr ""
#: zrcolagui.cpp:524
msgid "All"
msgstr ""
#: zrcolagui.cpp:525
msgid "Select all categories"
msgstr ""
#: zrcolagui.cpp:529
msgid "None"
msgstr ""
#: zrcolagui.cpp:530
msgid "Clear category selection"
msgstr ""
#: zrcolagui.cpp:534
msgid "Invert"
msgstr ""
#: zrcolagui.cpp:535
msgid "Invert category selection"
msgstr ""
#: zrcolagui.cpp:574
msgid "Character search results"
msgstr ""
#: zrcolagui.cpp:584
msgid "Re&cently Used"
msgstr ""
#: zrcolagui.cpp:612
msgid "List of recently inserted characters"
msgstr ""
#: zrcolagui.cpp:626
msgid "Preview"
msgstr ""
#: zrcolagui.cpp:631
msgid "U+"
msgstr "U+"
#: zrcolagui.cpp:636
msgid "Unicode hexadecimal code"
msgstr ""
#: zrcolagui.cpp:641
msgid "Keyboard shortcut in Composer window"
msgstr ""
#: zrcolagui.cpp:676
msgid "Character preview"
msgstr ""
#: zrcolagui.cpp:681
msgid "Unicode character description"
msgstr ""
#: zrcolagui.cpp:686
msgid "Character tags"
msgstr ""
#: zrcolagui.cpp:691
msgid "Unicode character category"
msgstr ""
#: zrcolagui.cpp:698
msgid "« Back"
msgstr ""
#: zrcolagui.cpp:700
msgid "To previously viewed character"
msgstr ""
#: zrcolagui.cpp:704
msgid "Forward »"
msgstr ""
#: zrcolagui.cpp:706
msgid "To following viewed character"
msgstr ""
#: zrcolagui.cpp:717
msgid "Re&lated"
msgstr ""
#: zrcolagui.cpp:744
msgid "List of related characters"
msgstr ""
#: zrcolagui.cpp:763
msgid "&Insert"
msgstr ""
#: zrcolagui.cpp:767
msgid "Insert character into decomposed text"
msgstr ""
#: zrcolagui.cpp:843
msgid ""
"Some character native to specific language you are working with should not decompose to primitives.\n"
"For optimal decomposition you should set the language correctly."
msgstr ""
#: zrcolagui.cpp:847
msgid "Select language &automatically according to selected keyboard"
msgstr ""
#: zrcolagui.cpp:850
msgid "&Manually select the language from the list below:"
msgstr ""
#: zrcolagui.cpp:861
msgid "Text Language"
msgstr ""
#: zrcolagui.cpp:866
msgid ""
"ZRCola can be launched every time you log in to your computer.\n"
"It will be available on the system tray and via registered shortcuts Win+F5 and Win+F6."
msgstr ""
#: zrcolagui.cpp:870
msgid "Start ZRCola &automatically on logon"
msgstr ""
#: zrcolagui.cpp:876
msgid "Startup"
msgstr ""
#: zrcolagui.cpp:954
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 ""
#: zrcolagui.cpp:962
msgid "zrcola.zrc-sazu.si"
msgstr "zrcola.zrc-sazu.si"
#: zrcolagui.cpp:968
msgid ""
"Texts made using ZRCola have to include in a footnote or some other "
"appropriate part of the publication the note below:"
msgstr ""
#: zrcolagui.cpp:972
msgid ""
"This text was written using the ZRCola input system (http://zrcola.zrc-"
"sazu.si), developed at the Science and Research Centre of SAZU in Ljubljana "
"(http://www.zrc-sazu.si) by Peter Weiss."
msgstr ""
#: zrcolagui.cpp:1013
msgid "Log"
msgstr ""
#: zrcolagui.cpp:1029
msgid "Quit and &Update..."
msgstr ""
#: zrcolagui.cpp:1031
msgid "Exit this program and launch product update"
msgstr ""
#: zrcolagui.cpp:1035
msgid "&Close"
msgstr ""
#: zrcolagui.cpp:1036
msgid "Close this window"
msgstr ""
#: zrcolagui.cpp:1075
msgid "Enter the &character you would like to request:"
msgstr ""
#: zrcolagui.cpp:1089
msgid "Decomposed character to request"
msgstr ""
#: zrcolagui.cpp:1093
msgid ""
"Please, use the decomposed form.\n"
"You can use ZRCola keyboard shortcuts to enter the character or Copy&&Paste it from the Decomposed window."
msgstr ""
#: zrcolagui.cpp:1103
msgid ""
"The &context, examples or description why and where the character is "
"required:"
msgstr ""
#: zrcolagui.cpp:1109
msgid "Additional notes for character request"
msgstr ""
#: zrcolagui.cpp:1116
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 ""
#: zrcolagui.cpp:1158
msgid "Translation"
msgstr ""
#: zrcolagui.cpp:1160
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 ""
#: zrcolagui.cpp:1170
msgid "A&vailable:"
msgstr ""
#: zrcolagui.cpp:1185
msgid "→"
msgstr "→"
#: zrcolagui.cpp:1188
msgid "←"
msgstr "←"
#: zrcolagui.cpp:1197
msgid "&Selected:"
msgstr ""
#: zrcolagui.cpp:1215
msgid "↑"
msgstr "↑"
#: zrcolagui.cpp:1218
msgid "↓"
msgstr "↓"
#: zrcolagui.h:260
msgid "Character Search"
msgstr ""
#: zrcolagui.h:296
msgid "Settings"
msgstr ""
#: zrcolagui.h:322
msgid "About ZRCola"
msgstr ""
#: zrcolagui.h:347 zrcolaupdater.cpp:81
msgid "Product Update"
msgstr ""
#: zrcolagui.h:418
msgid "Custom Translation Sequence"
msgstr ""
#: zrcolakeyhndlr.cpp:30
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:73
msgid "Start ZRCola automatically on logon"
msgstr ""
#: zrcolatranseq.cpp:49
#, c-format
msgid "Unknown translation (%u)"
msgstr ""
#: zrcolaupdater.cpp:81
msgid ""
"This program will now close and the upgrade will be launched.\n"
"Are you sure?"
msgstr ""
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:4
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:10
#: MSIBuild/en_US.ARM64.Release.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.Release.Control-2.idtx:4
#: MSIBuild/en_US.x64.Release.Control-2.idtx:10
#: MSIBuild/en_US.x64.Release.Control-2.idtx:15
msgid "UIHeader.bmp"
msgstr "UIHeader.bmp"
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:5
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:5
#: MSIBuild/en_US.x64.Release.Control-2.idtx:5
msgid "[DlgTitleFont][SimpleProductName] Tutorial : Starting"
msgstr ""
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:6
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:6
#: MSIBuild/en_US.x64.Release.Control-2.idtx:6
msgid "tutorial1.bmp"
msgstr "tutorial1.bmp"
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:7
#: MSIBuild/en_US.Win32.Release.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.ARM64.Release.Control-2.idtx:8
#: MSIBuild/en_US.Win32.Release.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.ARM64.Release.Control-2.idtx:9
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:14
#: MSIBuild/en_US.ARM64.Release.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.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.ARM64.Release.Control-2.idtx:11
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:11
#: MSIBuild/en_US.x64.Release.Control-2.idtx:11
msgid "[DlgTitleFont][SimpleProductName] Tutorial : Composition"
msgstr ""
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:12
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:12
#: MSIBuild/en_US.x64.Release.Control-2.idtx:12
msgid "tutorial2.bmp"
msgstr "tutorial2.bmp"
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:13
#: MSIBuild/en_US.Win32.Release.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.ARM64.Release.Control-2.idtx:16
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:16
#: MSIBuild/en_US.x64.Release.Control-2.idtx:16
msgid "[DlgTitleFont][SimpleProductName] Tutorial : Entering Characters"
msgstr ""
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:17
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:17
#: MSIBuild/en_US.x64.Release.Control-2.idtx:17
msgid "tutorial3.bmp"
msgstr "tutorial3.bmp"
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:18
#: MSIBuild/en_US.Win32.Release.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.ARM64.Release.Feature-2.idtx:4
#: MSIBuild/en_US.ARM64.Release.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.Release.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
msgid "Input system for linguistic use"
msgstr ""

View File

@ -1,848 +0,0 @@
#
# Translators:
# Janoš Ježovnik, 2019
# Simon Rozman <simon@rozman.si>, 2021
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: ZRCola\n"
"POT-Creation-Date: 2021-12-21 14:45+0100\n"
"PO-Revision-Date: 2018-09-19 07:18+0000\n"
"Last-Translator: Simon Rozman <simon@rozman.si>, 2021\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.4.2\n"
"X-Poedit-Basepath: ..\n"
"X-Poedit-KeywordsList: _\n"
"X-Poedit-SearchPath-0: .\n"
"X-Poedit-SearchPathExcluded-0: res/zrcolagui.*\n"
"X-Poedit-SourceCharset: UTF-8\n"
#: zrcolaabout.cpp:17
#, c-format
msgid "© 2004-%s ZRC SAZU"
msgstr "© 2004%s ZRC SAZU"
#: zrcolaapp.cpp:60 zrcolafrm.cpp:118 zrcolagui.cpp:232 zrcolagui.cpp:943
#: zrcolagui.h:119 MSIBuild/en_US.ARM64.Release.Feature-2.idtx:4
#: MSIBuild/en_US.ARM64.Release.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.Release.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
msgid "ZRCola"
msgstr "ZRCola"
#: zrcolachrreq.cpp:35 zrcolagui.cpp:1073
msgid "Character"
msgstr "Знак"
#: zrcolachrreq.cpp:44 zrcolagui.cpp:1101
msgid "Context"
msgstr "Контекст"
#: zrcolachrreq.cpp:50 zrcolagui.h:376
msgid "Request a New Character"
msgstr "Запрос нового знака"
#: zrcolachrslct.cpp:75
msgid "Too many digits in Unicode."
msgstr "Слишком много цифр в записи Unicode."
#: zrcolachrslct.cpp:75 zrcolachrslct.cpp:93
msgid "Validation conflict"
msgstr "Конфликт проверки"
#: zrcolachrslct.cpp:93
#, c-format
msgid "Invalid character in Unicode found: %c"
msgstr "Недействительный знак в записи Unicode: %c"
#: zrcolachrslct.cpp:201 zrcolachrslct.cpp:377 zrcolachrslct.cpp:874
msgid "▸ Search Options"
msgstr "▸ Опции поиска"
#: zrcolachrslct.cpp:315
msgid ", "
msgstr ", "
#: zrcolachrslct.cpp:380 zrcolachrslct.cpp:871
msgid "▾ Search Options"
msgstr "▾ Опции поиска"
#: zrcolafrm.cpp:84
msgid "No Translation"
msgstr "Без транслитерации"
#: zrcolafrm.cpp:97
msgid "Custom Translation..."
msgstr "Настраиваемое преобразование ..."
#: zrcolafrm.cpp:217
msgid ""
"ZRCola keyboard shortcut Win+F5 could not be registered. Some functionality "
"will not be available."
msgstr ""
"Сочетание клавиш Win+F5 регистрировать. Некоторые функциональности не будут "
"доступны."
#: zrcolafrm.cpp:217 zrcolafrm.cpp:219
msgid "Warning"
msgstr "Предупреждение"
#: zrcolafrm.cpp:219
msgid ""
"ZRCola keyboard shortcut Win+F6 could not be registered. Some functionality "
"will not be available."
msgstr ""
"Сочетание клавиш Win+F6 невозможно регистрировать. Некоторые "
"функциональности не будут доступны."
#: zrcolafrm.cpp:513
msgid "http://zrcola.zrc-sazu.si/en/info/instructions/"
msgstr "http://zrcola.zrc-sazu.si/ru/info/instructions/"
#: zrcolafrm.cpp:538
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"
#: zrcolagui.cpp:42
msgid "E&xit"
msgstr "Вы&ход"
#: zrcolagui.cpp:42
msgid "Quit this program"
msgstr "Выйти из программы"
#: zrcolagui.cpp:45
msgid "&Program"
msgstr "П&рограмма"
#: zrcolagui.cpp:78
msgid "Select &All"
msgstr "Выделить в&се"
#: zrcolagui.cpp:78
msgid "Select all text"
msgstr "Выделить весь текст"
#: zrcolagui.cpp:84
msgid "Find C&haracter..."
msgstr "Поиск &знака ..."
#: zrcolagui.cpp:84 zrcolagui.cpp:224
msgid "Toggle character search to select character to insert into text"
msgstr "Переключить поиск знаков для вставки выбранного знака в текст"
#: zrcolagui.cpp:90
msgid "&Send Composed"
msgstr "&Послать составленное"
#: zrcolagui.cpp:90 zrcolagui.cpp:226
msgid "Send composed text to source window"
msgstr "Послать составленный текст в исходное окно"
#: zrcolagui.cpp:99
msgid "Copy Composed and &Return"
msgstr "Копировать составленное и &возвратиться"
#: zrcolagui.cpp:99
msgid "Copy composed text to clipboard and return focus to source window"
msgstr ""
"Копировать составленный текст в буфер обмена и возвратить фокус в исходное "
"окно"
#: zrcolagui.cpp:108
msgid "Send &Decomposed"
msgstr "Послать &разобранное"
#: zrcolagui.cpp:108 zrcolagui.cpp:228
msgid "Send decomposed text to source window"
msgstr "Послать разобранный текст в исходное окно"
#: zrcolagui.cpp:117
msgid "Copy Decomposed and Re&turn"
msgstr "Копировать разобранное и возв&ратиться"
#: zrcolagui.cpp:117
msgid "Copy decomposed text to clipboard and return focus to source window"
msgstr ""
"Копировать разобранный текст в буфер обмена и возвратить фокус в исходное "
"окно"
#: zrcolagui.cpp:126
msgid "Abort (De)composition"
msgstr "Прервать составление/разборку"
#: zrcolagui.cpp:126
msgid "Abort composition and return focus to source window"
msgstr "Прервать составление и возвратить фокус в исходное окно"
#: zrcolagui.cpp:138
msgid "(De)&composition"
msgstr ""
#: zrcolagui.cpp:139
msgid "&None"
msgstr ""
#: zrcolagui.cpp:139
msgid "No character (De)composition"
msgstr ""
#: zrcolagui.cpp:142
msgid "&ZRCola"
msgstr "&ZRCola"
#: zrcolagui.cpp:142
msgid "ZRCola character (De)composition"
msgstr ""
#: zrcolagui.cpp:145
msgid "&Unicode"
msgstr "&Юникод"
#: zrcolagui.cpp:145
msgid "Unicode character (De)composition"
msgstr ""
#: zrcolagui.cpp:151
msgid "Tra&nslation"
msgstr "Тра&нслитерация"
#: zrcolagui.cpp:156
msgid "&PUA Warning"
msgstr ""
#: zrcolagui.cpp:156 zrcolagui.cpp:243
msgid "Highlight Private Use Area Characters"
msgstr ""
#: zrcolagui.cpp:162
msgid "&Settings..."
msgstr "&Настройки ..."
#: zrcolagui.cpp:162
msgid "Open program configuration dialog"
msgstr "Открыть диалог конфигурации программы"
#: zrcolagui.cpp:165
msgid "&Edit"
msgstr "&Правка"
#: zrcolagui.cpp:169
msgid "&Edit Toolbar"
msgstr "Панель инструментов для &правки"
#: zrcolagui.cpp:169
msgid "Toggle edit toolbar"
msgstr "Переключить панель инструментов для правки"
#: zrcolagui.cpp:173
msgid "&Compose Toolbar"
msgstr "Панель инструментов для &составления"
#: zrcolagui.cpp:173
msgid "Toggle compose toolbar"
msgstr "Переключить панель инструментов для составления"
#: zrcolagui.cpp:179
msgid "Character Catalo&g"
msgstr "Список &знаков"
#: zrcolagui.cpp:179
msgid "Toggle character catalog panel"
msgstr "Переключить список знаков"
#: zrcolagui.cpp:182
msgid "&View"
msgstr "&Вид"
#: zrcolagui.cpp:186
msgid "&Instructions..."
msgstr "&Инструкции ..."
#: zrcolagui.cpp:186
msgid "Open a web site with product instructions"
msgstr "Открыть сайт с инструкциями по продукту"
#: zrcolagui.cpp:190
msgid "Keyboard &Shortcuts..."
msgstr "Сочетания &клавиш ..."
#: zrcolagui.cpp:190
msgid "Open a list of keyboard shortcuts"
msgstr "Открыть список сочетаний клавиш"
#: zrcolagui.cpp:196
msgid "&Request a new character..."
msgstr "&Запрос нового знака ..."
#: zrcolagui.cpp:196
msgid "Submit a request to ZRC to add a new character"
msgstr "Отправить запрос нового знака"
#: zrcolagui.cpp:200
msgid "Check for &Updates..."
msgstr "Проверить наличие &обновлений ..."
#: zrcolagui.cpp:200
msgid "Check online for product update"
msgstr "Проверить наличие обновлений онлайн"
#: zrcolagui.cpp:206
msgid "&About..."
msgstr "О прогр&амме ..."
#: zrcolagui.cpp:209
msgid "&Help"
msgstr "&Справка"
#: zrcolagui.cpp:214
msgid "Cut"
msgstr "Вырезать"
#: zrcolagui.cpp:214
msgid "Cut selection"
msgstr "Вырезать выбор"
#: zrcolagui.cpp:216
msgid "Copy"
msgstr "Копировать"
#: zrcolagui.cpp:216
msgid "Copy selection"
msgstr "Копировать выбор"
#: zrcolagui.cpp:218
msgid "Paste"
msgstr "Вставить"
#: zrcolagui.cpp:218
msgid "Paste selection"
msgstr "Вставить выбор"
#: zrcolagui.cpp:221
msgid "Edit"
msgstr "Правка"
#: zrcolagui.cpp:224
msgid "Find Character"
msgstr "Поиск знака"
#: zrcolagui.cpp:226
msgid "Send Composed"
msgstr "Послать составленное (F5)"
#: zrcolagui.cpp:228
msgid "Send Decomposed"
msgstr "Послать разобранное (F6)"
#: zrcolagui.cpp:232
msgid "No (De)composition"
msgstr ""
#: zrcolagui.cpp:232
msgid "Unicode"
msgstr "Юникод"
#: zrcolagui.cpp:243
msgid "PUA Warning"
msgstr ""
#: zrcolagui.cpp:246
msgid "Compose"
msgstr "Составить"
#: zrcolagui.cpp:250
msgid "Character Catalog"
msgstr "Список знаков"
#: zrcolagui.cpp:254
msgid "(De)Composer"
msgstr "(Де)Композитор"
#: zrcolagui.cpp:297
msgid "Decomposed Text"
msgstr "Разобранний текст"
#: zrcolagui.cpp:317
msgid "Decomposed Unicode Dump"
msgstr "Дамп разобранного Юнукода"
#: zrcolagui.cpp:344
msgid "Composed Text"
msgstr "Составленный текст"
#: zrcolagui.cpp:364
msgid "Composed Unicode Dump"
msgstr "Дамп составленного Юникода"
#: zrcolagui.cpp:418
msgid "Select category to display"
msgstr "Выделить категории для отображения"
#: zrcolagui.cpp:452
msgid "Show &All"
msgstr "Показать &все"
#: zrcolagui.cpp:453
msgid "Toggle display of less frequent characters"
msgstr "Переключить отображение редко использованных знаков"
#: zrcolagui.cpp:493
msgid "&Browse"
msgstr "&Обзор"
#: zrcolagui.cpp:500
msgid ""
"Full or partial terms from Unicode character description (in English) to "
"search for"
msgstr ""
"Полное либо частичное описание знака Юникод (на английском) для поиска"
#: zrcolagui.cpp:504
msgid "Search Options"
msgstr "Опции поиска"
#: zrcolagui.cpp:505
msgid "Shows/hides additional search options"
msgstr "Показать/скрыть дополнительные опции поиска"
#: zrcolagui.cpp:517
msgid "List of Unicode character categories to search in"
msgstr "Список категории Юникод для проведения поиска"
#: zrcolagui.cpp:524
msgid "All"
msgstr "Все"
#: zrcolagui.cpp:525
msgid "Select all categories"
msgstr "Выбрать все категории"
#: zrcolagui.cpp:529
msgid "None"
msgstr "Ничего"
#: zrcolagui.cpp:530
msgid "Clear category selection"
msgstr "Очистить выбор категории"
#: zrcolagui.cpp:534
msgid "Invert"
msgstr "Обратить"
#: zrcolagui.cpp:535
msgid "Invert category selection"
msgstr "Обратить выбор категории"
#: zrcolagui.cpp:574
msgid "Character search results"
msgstr "Результаты поиска знаков"
#: zrcolagui.cpp:584
msgid "Re&cently Used"
msgstr "&Недавно использованное"
#: zrcolagui.cpp:612
msgid "List of recently inserted characters"
msgstr "Список недавно вставленных знаков"
#: zrcolagui.cpp:626
msgid "Preview"
msgstr "Просмотр"
#: zrcolagui.cpp:631
msgid "U+"
msgstr "U+"
#: zrcolagui.cpp:636
msgid "Unicode hexadecimal code"
msgstr "Шестнадцатеричный код Юникод"
#: zrcolagui.cpp:641
msgid "Keyboard shortcut in Composer window"
msgstr "Сочетание клавиш в окне композитора"
#: zrcolagui.cpp:676
msgid "Character preview"
msgstr "Просмотр знака"
#: zrcolagui.cpp:681
msgid "Unicode character description"
msgstr "Описание знака Юникод"
#: zrcolagui.cpp:686
msgid "Character tags"
msgstr "Ключевые слова"
#: zrcolagui.cpp:691
msgid "Unicode character category"
msgstr "Категория знака Юникод"
#: zrcolagui.cpp:698
msgid "« Back"
msgstr "« Назад"
#: zrcolagui.cpp:700
msgid "To previously viewed character"
msgstr "К предыдущему знаку"
#: zrcolagui.cpp:704
msgid "Forward »"
msgstr "Далее »"
#: zrcolagui.cpp:706
msgid "To following viewed character"
msgstr "К следующему знаку"
#: zrcolagui.cpp:717
msgid "Re&lated"
msgstr "&Связанное"
#: zrcolagui.cpp:744
msgid "List of related characters"
msgstr "Список связанных знаков"
#: zrcolagui.cpp:763
msgid "&Insert"
msgstr "&Вставить"
#: zrcolagui.cpp:767
msgid "Insert character into decomposed text"
msgstr "Вставка знака в разобранный текст"
#: zrcolagui.cpp:843
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"
"Для оптимальной разборки вы должны настроить правильный язык."
#: zrcolagui.cpp:847
msgid "Select language &automatically according to selected keyboard"
msgstr "&Автоматически установить язык на основе выбранной клавиатуры"
#: zrcolagui.cpp:850
msgid "&Manually select the language from the list below:"
msgstr "&Вручную выбрать язык со списка:"
#: zrcolagui.cpp:861
msgid "Text Language"
msgstr "Язык текста"
#: zrcolagui.cpp:866
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."
#: zrcolagui.cpp:870
msgid "Start ZRCola &automatically on logon"
msgstr "&Автоматически запустить систему ZRCola при запуске компьютера"
#: zrcolagui.cpp:876
msgid "Startup"
msgstr "Запуск"
#: zrcolagui.cpp:954
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)"
#: zrcolagui.cpp:962
msgid "zrcola.zrc-sazu.si"
msgstr "zrcola.zrc-sazu.si"
#: zrcolagui.cpp:968
msgid ""
"Texts made using ZRCola have to include in a footnote or some other "
"appropriate part of the publication the note below:"
msgstr ""
"Текст, созданный с помощью системы ZRCola, должен в примечании или другом "
"соответствующем месте в публикации сопровождаться следующей записью:"
#: zrcolagui.cpp:972
msgid ""
"This text was written using the ZRCola input system (http://zrcola.zrc-"
"sazu.si), developed at the Science and Research Centre of SAZU in Ljubljana "
"(http://www.zrc-sazu.si) by Peter Weiss."
msgstr ""
"Текст подготовлен с помощью системы ввода ZRCola (http://zrcola.zrc-"
"sazu.si), разработанной в Научно-исследовательском центре Словенской "
"академии наук и искусств в Любляне (http://www.zrc-sazu.si) Петром Вейссoм."
#: zrcolagui.cpp:1013
msgid "Log"
msgstr "Журнал"
#: zrcolagui.cpp:1029
msgid "Quit and &Update..."
msgstr "Выйти и &обновить ..."
#: zrcolagui.cpp:1031
msgid "Exit this program and launch product update"
msgstr "Выйти из программы и запустить обновление"
#: zrcolagui.cpp:1035
msgid "&Close"
msgstr "&Закрыть"
#: zrcolagui.cpp:1036
msgid "Close this window"
msgstr "Закрыть это окно"
#: zrcolagui.cpp:1075
msgid "Enter the &character you would like to request:"
msgstr "Ввести запрашиваемый &знак:"
#: zrcolagui.cpp:1089
msgid "Decomposed character to request"
msgstr "Запрашиваемый разобранный знак"
#: zrcolagui.cpp:1093
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 либо копировать и вставить знаки из окна для разборки."
#: zrcolagui.cpp:1103
msgid ""
"The &context, examples or description why and where the character is "
"required:"
msgstr ""
"&Контекст, примеры либо описание запрашиваемого знака или объяснение, зачем "
"он нужен:"
#: zrcolagui.cpp:1109
msgid "Additional notes for character request"
msgstr "Дополнительные примечания"
#: zrcolagui.cpp:1116
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"
"Возможно, не все знаки будут отображены правильно, но все информации будут закодированны таким образом, что администратор сможет их правильно прочитать."
#: zrcolagui.cpp:1158
msgid "Translation"
msgstr "Преобразование"
#: zrcolagui.cpp:1160
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"
"Пожалуйста, выбрать желаемые преобразования и порядок их применения."
#: zrcolagui.cpp:1170
msgid "A&vailable:"
msgstr "&Доступное:"
#: zrcolagui.cpp:1185
msgid "→"
msgstr "→"
#: zrcolagui.cpp:1188
msgid "←"
msgstr "←"
#: zrcolagui.cpp:1197
msgid "&Selected:"
msgstr "&Выбранное:"
#: zrcolagui.cpp:1215
msgid "↑"
msgstr "↑"
#: zrcolagui.cpp:1218
msgid "↓"
msgstr "↓"
#: zrcolagui.h:260
msgid "Character Search"
msgstr "Поиск знака"
#: zrcolagui.h:296
msgid "Settings"
msgstr "Настройки"
#: zrcolagui.h:322
msgid "About ZRCola"
msgstr "О системе ZRCola"
#: zrcolagui.h:347 zrcolaupdater.cpp:81
msgid "Product Update"
msgstr "Обновление продукта"
#: zrcolagui.h:418
msgid "Custom Translation Sequence"
msgstr "Настраиваемая последовательность преобразований"
#: zrcolakeyhndlr.cpp:30
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:73
msgid "Start ZRCola automatically on logon"
msgstr "Автоматически запустить систему ZRCola при запуске компьютера"
#: zrcolatranseq.cpp:49
#, c-format
msgid "Unknown translation (%u)"
msgstr "Неизвестное преобразование (%u)"
#: zrcolaupdater.cpp:81
msgid ""
"This program will now close and the upgrade will be launched.\n"
"Are you sure?"
msgstr ""
"Программа будет закрыта и обновлена.\n"
"Вы уверены?"
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:4
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:10
#: MSIBuild/en_US.ARM64.Release.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.Release.Control-2.idtx:4
#: MSIBuild/en_US.x64.Release.Control-2.idtx:10
#: MSIBuild/en_US.x64.Release.Control-2.idtx:15
msgid "UIHeader.bmp"
msgstr "UIHeader.bmp"
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:5
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:5
#: MSIBuild/en_US.x64.Release.Control-2.idtx:5
msgid "[DlgTitleFont][SimpleProductName] Tutorial : Starting"
msgstr "[DlgTitleFont][SimpleProductName] Руководство по запуску системы"
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:6
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:6
#: MSIBuild/en_US.x64.Release.Control-2.idtx:6
msgid "tutorial1.bmp"
msgstr "tutorial1.bmp"
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:7
#: MSIBuild/en_US.Win32.Release.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.ARM64.Release.Control-2.idtx:8
#: MSIBuild/en_US.Win32.Release.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.ARM64.Release.Control-2.idtx:9
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:14
#: MSIBuild/en_US.ARM64.Release.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.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.ARM64.Release.Control-2.idtx:11
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:11
#: MSIBuild/en_US.x64.Release.Control-2.idtx:11
msgid "[DlgTitleFont][SimpleProductName] Tutorial : Composition"
msgstr "[DlgTitleFont][SimpleProductName] Руководство по составлению"
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:12
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:12
#: MSIBuild/en_US.x64.Release.Control-2.idtx:12
msgid "tutorial2.bmp"
msgstr "tutorial2.bmp"
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:13
#: MSIBuild/en_US.Win32.Release.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.ARM64.Release.Control-2.idtx:16
#: MSIBuild/en_US.Win32.Release.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.ARM64.Release.Control-2.idtx:17
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:17
#: MSIBuild/en_US.x64.Release.Control-2.idtx:17
msgid "tutorial3.bmp"
msgstr "tutorial3.bmp"
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:18
#: MSIBuild/en_US.Win32.Release.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.ARM64.Release.Feature-2.idtx:4
#: MSIBuild/en_US.ARM64.Release.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.Release.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
msgid "Input system for linguistic use"
msgstr "Система ввода ZRCola для лингвистического применения"

121
ZRCola/locale/sl.po Normal file
View File

@ -0,0 +1,121 @@
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!"

View File

@ -1,843 +0,0 @@
#
# Translators:
# Simon Rozman <simon@rozman.si>, 2021
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: ZRCola\n"
"POT-Creation-Date: 2021-12-21 14:45+0100\n"
"PO-Revision-Date: 2018-09-19 07:18+0000\n"
"Last-Translator: Simon Rozman <simon@rozman.si>, 2021\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.4.2\n"
"X-Poedit-Basepath: ..\n"
"X-Poedit-KeywordsList: _\n"
"X-Poedit-SearchPath-0: .\n"
"X-Poedit-SearchPathExcluded-0: res/zrcolagui.*\n"
"X-Poedit-SourceCharset: UTF-8\n"
#: zrcolaabout.cpp:17
#, c-format
msgid "© 2004-%s ZRC SAZU"
msgstr "© 2004-%s ZRC SAZU"
#: zrcolaapp.cpp:60 zrcolafrm.cpp:118 zrcolagui.cpp:232 zrcolagui.cpp:943
#: zrcolagui.h:119 MSIBuild/en_US.ARM64.Release.Feature-2.idtx:4
#: MSIBuild/en_US.ARM64.Release.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.Release.Feature-2.idtx:4
#: MSIBuild/en_US.x64.Release.Shortcut-2.idtx:4
msgid "ZRCola"
msgstr "ZRCola"
#: zrcolachrreq.cpp:35 zrcolagui.cpp:1073
msgid "Character"
msgstr "Znak"
#: zrcolachrreq.cpp:44 zrcolagui.cpp:1101
msgid "Context"
msgstr "Kontekst"
#: zrcolachrreq.cpp:50 zrcolagui.h:376
msgid "Request a New Character"
msgstr "Zahtevaj nov znak"
#: zrcolachrslct.cpp:75
msgid "Too many digits in Unicode."
msgstr "Preveč števk v zapisu Unicode."
#: zrcolachrslct.cpp:75 zrcolachrslct.cpp:93
msgid "Validation conflict"
msgstr "Nesoglasje pri preverjanju"
#: zrcolachrslct.cpp:93
#, c-format
msgid "Invalid character in Unicode found: %c"
msgstr "Napačen znak v zapisu Unicode: %c"
#: zrcolachrslct.cpp:201 zrcolachrslct.cpp:377 zrcolachrslct.cpp:874
msgid "▸ Search Options"
msgstr "▸ Možnosti iskanja"
#: zrcolachrslct.cpp:315
msgid ", "
msgstr ", "
#: zrcolachrslct.cpp:380 zrcolachrslct.cpp:871
msgid "▾ Search Options"
msgstr "▾ Možnosti iskanja"
#: zrcolafrm.cpp:84
msgid "No Translation"
msgstr "Brez transliteracije"
#: zrcolafrm.cpp:97
msgid "Custom Translation..."
msgstr "Pretvorba po meri ..."
#: zrcolafrm.cpp:217
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:217 zrcolafrm.cpp:219
msgid "Warning"
msgstr "Opozorilo"
#: zrcolafrm.cpp:219
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:513
msgid "http://zrcola.zrc-sazu.si/en/info/instructions/"
msgstr "http://zrcola.zrc-sazu.si/info/instructions/"
#: zrcolafrm.cpp:538
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"
#: zrcolagui.cpp:42
msgid "E&xit"
msgstr "I&zhod"
#: zrcolagui.cpp:42
msgid "Quit this program"
msgstr "Zapri ta program"
#: zrcolagui.cpp:45
msgid "&Program"
msgstr "&Program"
#: zrcolagui.cpp:78
msgid "Select &All"
msgstr "Izberi &vse"
#: zrcolagui.cpp:78
msgid "Select all text"
msgstr "Izberi celotno besedilo"
#: zrcolagui.cpp:84
msgid "Find C&haracter..."
msgstr "Poišči &znak ..."
#: zrcolagui.cpp:84 zrcolagui.cpp:224
msgid "Toggle character search to select character to insert into text"
msgstr ""
"Prikaži/skrij iskalnik znakov za izbor znaka za vstavljanje v besedilo"
#: zrcolagui.cpp:90
msgid "&Send Composed"
msgstr "Pošlji &sestavljeno"
#: zrcolagui.cpp:90 zrcolagui.cpp:226
msgid "Send composed text to source window"
msgstr "Pošlji sestavljeno besedilo izvornemu oknu"
#: zrcolagui.cpp:99
msgid "Copy Composed and &Return"
msgstr "Kopi&raj sestavljeno in se vrni"
#: 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"
#: zrcolagui.cpp:108
msgid "Send &Decomposed"
msgstr "Pošlji &razstavljeno"
#: zrcolagui.cpp:108 zrcolagui.cpp:228
msgid "Send decomposed text to source window"
msgstr "Pošlji razstavljeno besedilo izvornemu oknu"
#: zrcolagui.cpp:117
msgid "Copy Decomposed and Re&turn"
msgstr "Kopi&raj razstavljeno in se vrni"
#: 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"
#: zrcolagui.cpp:126
msgid "Abort (De)composition"
msgstr "Prekini raz/sestavljanje"
#: zrcolagui.cpp:126
msgid "Abort composition and return focus to source window"
msgstr "Prekini sestavljanje in vrni fokus nazaj izvornemu oknu"
#: zrcolagui.cpp:138
msgid "(De)&composition"
msgstr "(&Raz-)sestavljanje"
#: zrcolagui.cpp:139
msgid "&None"
msgstr "&Brez"
#: zrcolagui.cpp:139
msgid "No character (De)composition"
msgstr "Brez (raz-)sestavljanja znakov"
#: zrcolagui.cpp:142
msgid "&ZRCola"
msgstr "&ZRCola"
#: zrcolagui.cpp:142
msgid "ZRCola character (De)composition"
msgstr "(Raz-)sestavljanje znakov ZRCola"
#: zrcolagui.cpp:145
msgid "&Unicode"
msgstr "&Unicode"
#: zrcolagui.cpp:145
msgid "Unicode character (De)composition"
msgstr "(Raz-)sestavljanje znakov Unicode"
#: zrcolagui.cpp:151
msgid "Tra&nslation"
msgstr "Tra&nsliteracija"
#: zrcolagui.cpp:156
msgid "&PUA Warning"
msgstr "O&pozorilo OZU"
#: zrcolagui.cpp:156 zrcolagui.cpp:243
msgid "Highlight Private Use Area Characters"
msgstr "Obarvaj znake iz območja zasebne uporabe"
#: zrcolagui.cpp:162
msgid "&Settings..."
msgstr "Na&stavitve ..."
#: zrcolagui.cpp:162
msgid "Open program configuration dialog"
msgstr "Odpri nastavitveni dialog programa"
#: zrcolagui.cpp:165
msgid "&Edit"
msgstr "Ur&edi"
#: zrcolagui.cpp:169
msgid "&Edit Toolbar"
msgstr "Orodna vrstica za ur&ejanje"
#: zrcolagui.cpp:169
msgid "Toggle edit toolbar"
msgstr "Prikaži/skrij orodno vrstico za urejanje"
#: zrcolagui.cpp:173
msgid "&Compose Toolbar"
msgstr "Orodna vrsti&ca za sestavljanje"
#: zrcolagui.cpp:173
msgid "Toggle compose toolbar"
msgstr "Prikaži/skrij orodno vrstico za sestavljanje"
#: zrcolagui.cpp:179
msgid "Character Catalo&g"
msgstr "Katalo&g znakov"
#: zrcolagui.cpp:179
msgid "Toggle character catalog panel"
msgstr "Prikaži/skrij katalog znakov"
#: zrcolagui.cpp:182
msgid "&View"
msgstr "Po&gled"
#: zrcolagui.cpp:186
msgid "&Instructions..."
msgstr "Navod&ila ..."
#: zrcolagui.cpp:186
msgid "Open a web site with product instructions"
msgstr "Odpri spletno stran z navodili izdelka"
#: zrcolagui.cpp:190
msgid "Keyboard &Shortcuts..."
msgstr "&Bližnjice na tipkovnici ..."
#: zrcolagui.cpp:190
msgid "Open a list of keyboard shortcuts"
msgstr "Odpri seznam bližnjic na tipkovnici"
#: zrcolagui.cpp:196
msgid "&Request a new character..."
msgstr "&Zahtevaj nov znak ..."
#: zrcolagui.cpp:196
msgid "Submit a request to ZRC to add a new character"
msgstr "Oddaj prošnjo za dodajanje novega znaka"
#: zrcolagui.cpp:200
msgid "Check for &Updates..."
msgstr "Preveri &posodobitve ..."
#: zrcolagui.cpp:200
msgid "Check online for product update"
msgstr "Preveri na spletu za posodobitev izdelka"
#: zrcolagui.cpp:206
msgid "&About..."
msgstr "O progr&amu ..."
#: zrcolagui.cpp:209
msgid "&Help"
msgstr "Po&moč"
#: zrcolagui.cpp:214
msgid "Cut"
msgstr "Izreži"
#: zrcolagui.cpp:214
msgid "Cut selection"
msgstr "Izreži izbor"
#: zrcolagui.cpp:216
msgid "Copy"
msgstr "Kopiraj"
#: zrcolagui.cpp:216
msgid "Copy selection"
msgstr "Kopiraj izbor"
#: zrcolagui.cpp:218
msgid "Paste"
msgstr "Prilepi"
#: zrcolagui.cpp:218
msgid "Paste selection"
msgstr "Prilepi izbor"
#: zrcolagui.cpp:221
msgid "Edit"
msgstr "Urejanje"
#: zrcolagui.cpp:224
msgid "Find Character"
msgstr "Poišči znak"
#: zrcolagui.cpp:226
msgid "Send Composed"
msgstr "Pošlji sestavljeno"
#: zrcolagui.cpp:228
msgid "Send Decomposed"
msgstr "Pošlji razstavljeno"
#: zrcolagui.cpp:232
msgid "No (De)composition"
msgstr "Brez (raz-)sestavljanja"
#: zrcolagui.cpp:232
msgid "Unicode"
msgstr "Unicode"
#: zrcolagui.cpp:243
msgid "PUA Warning"
msgstr "Opozorilo OZU"
#: zrcolagui.cpp:246
msgid "Compose"
msgstr "Sestavljanje"
#: zrcolagui.cpp:250
msgid "Character Catalog"
msgstr "Katalog znakov"
#: zrcolagui.cpp:254
msgid "(De)Composer"
msgstr "Razstavljalnik/Sestavljalnik"
#: zrcolagui.cpp:297
msgid "Decomposed Text"
msgstr "Razstavljeno besedilo"
#: zrcolagui.cpp:317
msgid "Decomposed Unicode Dump"
msgstr "Unicode razstavljenega"
#: zrcolagui.cpp:344
msgid "Composed Text"
msgstr "Sestavljeno besedilo"
#: zrcolagui.cpp:364
msgid "Composed Unicode Dump"
msgstr "Unicode sestavljenega"
#: zrcolagui.cpp:418
msgid "Select category to display"
msgstr "Izberi kategorijo za prikaz"
#: zrcolagui.cpp:452
msgid "Show &All"
msgstr "Prik&aži vse"
#: zrcolagui.cpp:453
msgid "Toggle display of less frequent characters"
msgstr "Prikaži/skrij manj pogoste znake"
#: zrcolagui.cpp:493
msgid "&Browse"
msgstr "Pre&brskaj"
#: zrcolagui.cpp:500
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"
#: zrcolagui.cpp:504
msgid "Search Options"
msgstr "Možnosti iskanja"
#: zrcolagui.cpp:505
msgid "Shows/hides additional search options"
msgstr "Prikaže/skrije dodatne možnosti iskanja"
#: zrcolagui.cpp:517
msgid "List of Unicode character categories to search in"
msgstr "Seznam kategorij znaka Unicode za iskanje"
#: zrcolagui.cpp:524
msgid "All"
msgstr "Vse"
#: zrcolagui.cpp:525
msgid "Select all categories"
msgstr "Izberi vse kategorije"
#: zrcolagui.cpp:529
msgid "None"
msgstr "Nič"
#: zrcolagui.cpp:530
msgid "Clear category selection"
msgstr "Počisti izbor kategorij"
#: zrcolagui.cpp:534
msgid "Invert"
msgstr "Obrni"
#: zrcolagui.cpp:535
msgid "Invert category selection"
msgstr "Obrni izbor kategorij"
#: zrcolagui.cpp:574
msgid "Character search results"
msgstr "Rezultati iskanja znakov"
#: zrcolagui.cpp:584
msgid "Re&cently Used"
msgstr "Nedavno &uporabljeni"
#: zrcolagui.cpp:612
msgid "List of recently inserted characters"
msgstr "Seznam nedavno vstavljenih znakov"
#: zrcolagui.cpp:626
msgid "Preview"
msgstr "Predogled"
#: zrcolagui.cpp:631
msgid "U+"
msgstr "U+"
#: zrcolagui.cpp:636
msgid "Unicode hexadecimal code"
msgstr "Šestnajstiška koda Unicode"
#: zrcolagui.cpp:641
msgid "Keyboard shortcut in Composer window"
msgstr "Bližnjica na tipkovnici v oknu sestavljalnika"
#: zrcolagui.cpp:676
msgid "Character preview"
msgstr "Predogled znaka"
#: zrcolagui.cpp:681
msgid "Unicode character description"
msgstr "Opis znaka Unicode"
#: zrcolagui.cpp:686
msgid "Character tags"
msgstr "Oznake znaka"
#: zrcolagui.cpp:691
msgid "Unicode character category"
msgstr "Kategorija znaka Unicode"
#: zrcolagui.cpp:698
msgid "« Back"
msgstr "« Nazaj"
#: zrcolagui.cpp:700
msgid "To previously viewed character"
msgstr "Na prejšnji prikazan znak"
#: zrcolagui.cpp:704
msgid "Forward »"
msgstr "Naprej »"
#: zrcolagui.cpp:706
msgid "To following viewed character"
msgstr "Na naslednji prikazan znak"
#: zrcolagui.cpp:717
msgid "Re&lated"
msgstr "&Sorodni"
#: zrcolagui.cpp:744
msgid "List of related characters"
msgstr "Seznam sorodnih znakov"
#: zrcolagui.cpp:763
msgid "&Insert"
msgstr "Vstav&i"
#: zrcolagui.cpp:767
msgid "Insert character into decomposed text"
msgstr "Vstavi znak v razstavljeno besedilo"
#: zrcolagui.cpp:843
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."
#: zrcolagui.cpp:847
msgid "Select language &automatically according to selected keyboard"
msgstr "S&amodejno izberi jezik glede na izbrano tipkovnico"
#: zrcolagui.cpp:850
msgid "&Manually select the language from the list below:"
msgstr "&Ročno izberi jezik s seznama spodaj:"
#: zrcolagui.cpp:861
msgid "Text Language"
msgstr "Jezik besedila"
#: zrcolagui.cpp:866
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."
#: zrcolagui.cpp:870
msgid "Start ZRCola &automatically on logon"
msgstr "S&amodejno zaženi ZRColo ob prijavi"
#: zrcolagui.cpp:876
msgid "Startup"
msgstr "Zagon"
#: zrcolagui.cpp:954
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"
#: zrcolagui.cpp:962
msgid "zrcola.zrc-sazu.si"
msgstr "zrcola.zrc-sazu.si"
#: zrcolagui.cpp:968
msgid ""
"Texts made using ZRCola have to include in a footnote or some other "
"appropriate part of the publication the note below:"
msgstr ""
"Besedilo, nastalo z uporabo ZRCole, mora biti v opombi ali na drugem "
"ustreznem mestu v publikaciji opremljeno z naslednjim zapisom:"
#: zrcolagui.cpp:972
msgid ""
"This text was written using the ZRCola input system (http://zrcola.zrc-"
"sazu.si), developed at the Science and Research Centre of SAZU in Ljubljana "
"(http://www.zrc-sazu.si) by Peter Weiss."
msgstr ""
"Besedilo je bilo pripravljeno z vnašalnim sistemom ZRCola "
"(http://zrcola.zrc-sazu.si), ki ga je na Znanstvenoraziskovalnem centru SAZU"
" v Ljubljani (http://www.zrc-sazu.si) razvil Peter Weiss."
#: zrcolagui.cpp:1013
msgid "Log"
msgstr "Dnevnik"
#: zrcolagui.cpp:1029
msgid "Quit and &Update..."
msgstr "Za&ustavi in posodobi ..."
#: zrcolagui.cpp:1031
msgid "Exit this program and launch product update"
msgstr "Zaustavi program in zaženi posodobitev izdelka"
#: zrcolagui.cpp:1035
msgid "&Close"
msgstr "&Zapri"
#: zrcolagui.cpp:1036
msgid "Close this window"
msgstr "Zapri to okno"
#: zrcolagui.cpp:1075
msgid "Enter the &character you would like to request:"
msgstr "Vpišite &znak, ki ga želite zahtevati:"
#: zrcolagui.cpp:1089
msgid "Decomposed character to request"
msgstr "Zahtevani znak v razstavljeni obliki"
#: zrcolagui.cpp:1093
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."
#: zrcolagui.cpp:1103
msgid ""
"The &context, examples or description why and where the character is "
"required:"
msgstr "&Kontekst, primeri oziroma opis, zakaj in kje potrebujete novi znak:"
#: zrcolagui.cpp:1109
msgid "Additional notes for character request"
msgstr "Dodatne opombe za zahtevo znaka"
#: zrcolagui.cpp:1116
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."
#: zrcolagui.cpp:1158
msgid "Translation"
msgstr "Pretvorba"
#: zrcolagui.cpp:1160
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."
#: zrcolagui.cpp:1170
msgid "A&vailable:"
msgstr "Na &voljo:"
#: zrcolagui.cpp:1185
msgid "→"
msgstr "→"
#: zrcolagui.cpp:1188
msgid "←"
msgstr "←"
#: zrcolagui.cpp:1197
msgid "&Selected:"
msgstr "I&zbrano:"
#: zrcolagui.cpp:1215
msgid "↑"
msgstr "↑"
#: zrcolagui.cpp:1218
msgid "↓"
msgstr "↓"
#: zrcolagui.h:260
msgid "Character Search"
msgstr "Poišči znak"
#: zrcolagui.h:296
msgid "Settings"
msgstr "Nastavitve"
#: zrcolagui.h:322
msgid "About ZRCola"
msgstr "O ZRColi"
#: zrcolagui.h:347 zrcolaupdater.cpp:81
msgid "Product Update"
msgstr "Posodabljanje izdelka"
#: zrcolagui.h:418
msgid "Custom Translation Sequence"
msgstr "Zaporedje pretvorb po meri"
#: zrcolakeyhndlr.cpp:30
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:73
msgid "Start ZRCola automatically on logon"
msgstr "Samodejno zaženi ZRColo ob prijavi"
#: zrcolatranseq.cpp:49
#, c-format
msgid "Unknown translation (%u)"
msgstr "Neznana pretvorba (%u)"
#: zrcolaupdater.cpp:81
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.ARM64.Release.Control-2.idtx:4
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:10
#: MSIBuild/en_US.ARM64.Release.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.Release.Control-2.idtx:4
#: MSIBuild/en_US.x64.Release.Control-2.idtx:10
#: MSIBuild/en_US.x64.Release.Control-2.idtx:15
msgid "UIHeader.bmp"
msgstr "UIHeader.bmp"
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:5
#: MSIBuild/en_US.Win32.Release.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.ARM64.Release.Control-2.idtx:6
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:6
#: MSIBuild/en_US.x64.Release.Control-2.idtx:6
msgid "tutorial1.bmp"
msgstr "tutorial1.bmp"
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:7
#: MSIBuild/en_US.Win32.Release.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.ARM64.Release.Control-2.idtx:8
#: MSIBuild/en_US.Win32.Release.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.ARM64.Release.Control-2.idtx:9
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:14
#: MSIBuild/en_US.ARM64.Release.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.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.ARM64.Release.Control-2.idtx:11
#: MSIBuild/en_US.Win32.Release.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.ARM64.Release.Control-2.idtx:12
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:12
#: MSIBuild/en_US.x64.Release.Control-2.idtx:12
msgid "tutorial2.bmp"
msgstr "tutorial2.bmp"
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:13
#: MSIBuild/en_US.Win32.Release.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.ARM64.Release.Control-2.idtx:16
#: MSIBuild/en_US.Win32.Release.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.ARM64.Release.Control-2.idtx:17
#: MSIBuild/en_US.Win32.Release.Control-2.idtx:17
#: MSIBuild/en_US.x64.Release.Control-2.idtx:17
msgid "tutorial3.bmp"
msgstr "tutorial3.bmp"
#: MSIBuild/en_US.ARM64.Release.Control-2.idtx:18
#: MSIBuild/en_US.Win32.Release.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.ARM64.Release.Feature-2.idtx:4
#: MSIBuild/en_US.ARM64.Release.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.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"

View File

@ -1,6 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
*/
#include "pch.h"

View File

@ -1,55 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
*/
#pragma once
#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 <Updater/chkthread.h>
#include <wxex/common.h>
#include <wxex/url.h>
#include <wxex/persist/auimanager.h>
#include <wxex/persist/toplevel.h>
#pragma warning(push)
#pragma warning(disable: WXWIDGETS_CODE_ANALYSIS_WARNINGS)
#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>
#pragma warning(pop)
#include <WinStd/MSI.h>
#include <fstream>
#include <string>
#include <utility>
#include <vector>
#include <zrcola/idrec.h>
#if defined(__WXMSW__)
#include <Msi.h>
#include <ShObjIdl.h>
#include <ShlGuid.h>
#endif

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

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

File diff suppressed because one or more lines are too long

View File

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

Binary file not shown.

Before

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

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

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

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

File diff suppressed because one or more lines are too long

BIN
ZRCola/res/send.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

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

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -1,422 +0,0 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Oct 26 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#pragma once
#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_NONE,
wxID_COMPOSITION_ZRCOLA,
wxID_COMPOSITION_UNICODE,
wxID_WARN_PUA,
wxID_SETTINGS,
wxID_TOOLBAR_EDIT,
wxID_TOOLBAR_TRANSLATE,
wxID_PANEL_CHRGRPS,
wxID_HELP_INSTRUCTIONS,
wxID_HELP_SHORTCUTS,
wxID_HELP_REQCHAR,
wxID_HELP_UPDATE
};
wxMenuBar* m_menubar;
wxMenu* m_menuProgram;
wxMenu* m_menuEdit;
wxMenuItem* m_menuItemCompositionNone;
wxMenuItem* m_menuItemCompositionZRCola;
wxMenuItem* m_menuItemCompositionUnicode;
wxMenu* m_menuTranslationSeq;
wxMenuItem* m_menuItemWarnPUA;
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;
wxChoice* m_toolComposition;
wxChoice* m_toolTranslationSeq;
wxAuiToolBarItem* m_toolWarnPUA;
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 OnCompositionChoice( wxCommandEvent& 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();
};

20
ZRCola/stdafx.cpp Normal file
View File

@ -0,0 +1,20 @@
/*
Copyright 2015-2016 Amebis
This file is part of ZRCola.
ZRCola is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
ZRCola is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with ZRCola. If not, see <http://www.gnu.org/licenses/>.
*/
#include "stdafx.h"

34
ZRCola/stdafx.h Normal file
View File

@ -0,0 +1,34 @@
/*
Copyright 2015-2016 Amebis
This file is part of ZRCola.
ZRCola is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
ZRCola is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with ZRCola. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "../include/zrcola.h"
#include "zrcolaapp.h"
#include "zrcolacomppnl.h"
#include "zrcolafrm.h"
#include <zrcola/compose.h>
#include <zrcola/decompose.h>
#include <wx/msgdlg.h>
#include <wxex/common.h>
#include <string>
#include <vector>

View File

@ -1,18 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
*/
#include "pch.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,28 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
*/
///
/// Forward declarations
///
class wxZRColaAbout;
#pragma once
#include <wxex/common.h>
#pragma warning(push)
#pragma warning(disable: WXWIDGETS_CODE_ANALYSIS_WARNINGS)
#include "zrcolagui.h"
#pragma warning(pop)
///
/// About ZRCola dialog
///
class wxZRColaAbout : public wxZRColaAboutBase
{
public:
wxZRColaAbout(wxWindow* parent);
};

View File

@ -1,187 +1,43 @@
/* /*
SPDX-License-Identifier: GPL-3.0-or-later Copyright 2015-2016 Amebis
Copyright © 2015-2022 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 "pch.h" #include "stdafx.h"
#if defined(__WXMSW__)
#pragma comment(lib, "msi.lib")
#endif
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// ZRColaApp // ZRColaApp
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
#pragma warning(suppress: 28251) // wxWidgets implement WinMain without code analysis annotations.
wxIMPLEMENT_APP(ZRColaApp); wxIMPLEMENT_APP(ZRColaApp);
ZRColaApp::ZRColaApp() :
m_mainWnd(NULL),
#pragma warning(suppress: 26812) // wxLanguage is unscoped
m_lang_ui(wxLANGUAGE_DEFAULT),
wxApp()
{
}
bool ZRColaApp::OnInit() bool ZRColaApp::OnInit()
{ {
#if defined(__WXMSW__) if (!wxAppEx::OnInit())
// 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; return false;
// Initialize locale. if (wxLocale::IsAvailable(wxLANGUAGE_SLOVENIAN))
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")));
wxVERIFY(m_locale.AddCatalog(wxT("ZRCola-zrcdb")));
}
#ifdef __WXMSW__ wxZRColaFrame* mainFrame = new wxZRColaFrame();
// 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);
// Not an error condition actually; Just nothing else to do... mainFrame->Show();
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 if (id == ZRCola::highlight_rec::id()) {
dat >> ZRCola::highlight_rec(m_h_db);
if (!dat.good()) {
wxFAIL_MSG(wxT("Error reading highlight data from ZRCola.zrcdb."));
m_h_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->m_panel->RestoreFromStateFile();
m_mainWnd->Show();
return true; return true;
} }
int ZRColaApp::OnExit()
{
wxSocketBase::Shutdown();
int res = wxApp::OnExit();
#ifdef __WXMSW__
m_running.free();
#endif
return res;
}

View File

@ -1,6 +1,20 @@
/* /*
SPDX-License-Identifier: GPL-3.0-or-later Copyright 2015-2016 Amebis
Copyright © 2015-2022 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/>.
*/ */
/// ///
@ -11,101 +25,20 @@ class ZRColaApp;
#pragma once #pragma once
#include "zrcolafrm.h" #include <wxex/appex.h>
#include <WinStd/Win.h>
#include <wxex/common.h>
#pragma warning(push)
#pragma warning(disable: WXWIDGETS_CODE_ANALYSIS_WARNINGS)
#include <wx/app.h>
#include <wx/config.h>
#include <wx/intl.h>
#pragma warning(pop)
#include <zrcola/character.h>
#include <zrcola/highlight.h>
#include <zrcola/language.h>
#include <zrcola/translate.h>
#include <zrcola/tag.h>
#include <zrcolaui/keyboard.h>
/// ///
/// ZRCola application /// ZRCola application
/// ///
class ZRColaApp : public wxApp class ZRColaApp : public wxAppEx
{ {
public: public:
ZRColaApp();
/// ///
/// Called when application initializes. /// Called when application initializes.
/// ///
/// \returns /// \returns
/// - \c true if initialization succeeded /// - true if initialization succeeded
/// - \c false otherwise /// - false otherwise
///
virtual bool OnInit(); 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
ZRCola::highlight_db m_h_db; ///< Highlight 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::event 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");
}

View File

@ -1,228 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
*/
#include "pch.h"
//////////////////////////////////////////////////////////////////////////
// wxZRColaCharacterCatalogPanel
//////////////////////////////////////////////////////////////////////////
BEGIN_EVENT_TABLE(wxZRColaCharacterCatalogPanel, wxZRColaCharacterCatalogPanelBase)
EVT_MENU(wxZRColaCharacterCatalogPanel::wxID_FOCUS_SOURCE, wxZRColaCharacterCatalogPanel::OnFocusSource)
END_EVENT_TABLE()
wxZRColaCharacterCatalogPanel::wxZRColaCharacterCatalogPanel(wxWindow* parent) :
m_cg_id(0),
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, (unsigned int)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 auto *src = cg.chrlst();
const uint16_t *shown = cg.chrshow();
wxArrayString chars;
for (size_t i = 0, i_end = cg.chrlst_len(), j = 0; i < i_end; j++) {
for (uint16_t 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((int)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;
}

View File

@ -1,75 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
*/
///
/// Forward declarations
///
class wxZRColaCharacterCatalogPanel;
#pragma once
#include <wxex/common.h>
#pragma warning(push)
#pragma warning(disable: WXWIDGETS_CODE_ANALYSIS_WARNINGS)
#include "zrcolagui.h"
#pragma warning(pop)
#include <zrcolaui/chargroup.h>
#pragma warning(push)
#pragma warning(disable: WXWIDGETS_CODE_ANALYSIS_WARNINGS)
#include <wx/persist/window.h>
#pragma warning(pop)
///
/// 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);
}

View File

@ -1,260 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
*/
#include "pch.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(ZRCola::char_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>((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>((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 = (size_t)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((int)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((int)m_toolTipIdx));
}

View File

@ -1,114 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
*/
///
/// Forward declarations
///
class wxZRColaCharGrid;
#pragma once
#include <wxex/common.h>
#pragma warning(push)
#pragma warning(disable: WXWIDGETS_CODE_ANALYSIS_WARNINGS)
#include <wx/grid.h>
#pragma warning(pop)
///
/// 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((int)(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
};

View File

@ -1,92 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
*/
#include "pch.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;
}

View File

@ -1,60 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
*/
///
/// Forward declarations
///
class wxZRColaCharRequest;
class wxPersistentZRColaCharRequest;
#pragma once
#include <wxex/common.h>
#pragma warning(push)
#pragma warning(disable: WXWIDGETS_CODE_ANALYSIS_WARNINGS)
#include "zrcolagui.h"
#pragma warning(pop)
#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);
}

View File

@ -1,882 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
*/
#include "pch.h"
//////////////////////////////////////////////////////////////////////
// wxZRColaUTF16CharValidator
//////////////////////////////////////////////////////////////////////
wxIMPLEMENT_DYNAMIC_CLASS(wxZRColaUTF16CharValidator, wxValidator);
wxZRColaUTF16CharValidator::wxZRColaUTF16CharValidator(ZRCola::char_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, ZRCola::char_t *val_out)
{
const wxStringCharType *buf = val_in;
ZRCola::char_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((int)i, (int)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((long)i, (long)(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;
ZRCola::char_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.
#pragma warning(suppress: 26812) // wxLanguage is unscoped
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")), (unsigned int)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) {
#pragma warning(suppress: 26812) // wxThreadError is unscoped.
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(ZRCola::char_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(ZRCola::char_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(ZRCola::char_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(), (uint16_t)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((unsigned int)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((unsigned int)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((unsigned int)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((unsigned int)i, !m_categories->IsChecked((unsigned int)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, uint16_t> 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, ZRCola::char_t> *_a = (const std::pair<ZRCola::charrank_t, ZRCola::char_t>*)a;
const std::pair<ZRCola::charrank_t, ZRCola::char_t> *_b = (const std::pair<ZRCola::charrank_t, ZRCola::char_t>*)b;
if (_a->first > _b->first) return -1;
if (_a->first < _b->first) return 1;
if (_a->second < _b->second) return -1;
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((unsigned int)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 += (ZRCola::char_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((unsigned int)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;
}

View File

@ -1,234 +0,0 @@
/*
SPDX-License-Identifier: GPL-3.0-or-later
Copyright © 2015-2022 Amebis
*/
///
/// Forward declarations
///
class wxZRColaCharSelect;
class wxPersistentZRColaCharSelect;
#pragma once
#include <wxex/common.h>
#pragma warning(push)
#pragma warning(disable: WXWIDGETS_CODE_ANALYSIS_WARNINGS)
#include "zrcolagui.h"
#pragma warning(pop)
#include <zrcola/character.h>
#include <wxex/persist/toplevel.h>
#pragma warning(push)
#pragma warning(disable: WXWIDGETS_CODE_ANALYSIS_WARNINGS)
#include <wx/validate.h>
#include <wx/event.h>
#include <wx/thread.h>
#pragma warning(pop)
#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(ZRCola::char_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,9 +1,23 @@
/* /*
SPDX-License-Identifier: GPL-3.0-or-later Copyright 2015-2016 Amebis
Copyright © 2015-2022 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 "pch.h" #include "stdafx.h"
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
@ -11,473 +25,108 @@
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
wxZRColaComposerPanel::wxZRColaComposerPanel(wxWindow* parent) : wxZRColaComposerPanel::wxZRColaComposerPanel(wxWindow* parent) :
m_sourceChanged(false), m_progress(false),
m_destinationChanged(false), m_selDecomposed(0, 0),
m_sourceRestyled(false), m_selComposed(0, 0),
m_destinationRestyled(false),
m_styleNormal(*wxBLACK, *wxWHITE, wxFont(20, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxT("ZRCola"))),
m_stylePUA(*wxBLUE, *wxWHITE, wxFont(20, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxT("ZRCola"))),
m_styleZRColaUnicodeComposedIssues(*wxRED, *wxWHITE, wxFont(20, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxT("ZRCola"))),
m_selSource(0, 0),
m_selDestination(0, 0),
wxZRColaComposerPanelBase(parent) wxZRColaComposerPanelBase(parent)
{ {
// RichEdit control has no inner margins by default.
m_source->SetMargins(FromDIP(wxPoint(5, 2)));
m_destination->SetMargins(FromDIP(wxPoint(5, 2)));
m_source->PushEventHandler(&m_keyhandler);
} }
wxZRColaComposerPanel::~wxZRColaComposerPanel() wxZRColaComposerPanel::~wxZRColaComposerPanel()
{ {
m_source->PopEventHandler();
// This is a controlled exit. Purge saved state.
wxString fileName(GetStateFileName());
if (wxFileExists(fileName))
wxRemoveFile(fileName);
} }
void wxZRColaComposerPanel::RestoreFromStateFile() void wxZRColaComposerPanel::OnDecomposedPaint(wxPaintEvent& event)
{
// Restore the previously saved state (if exists).
wxString fileName(GetStateFileName());
if (wxFileExists(fileName)) {
wxFFile file(fileName, wxT("rb"));
if (file.IsOpened()) {
// Load source text.
uint64_t n;
file.Read(&n, sizeof(n));
if (!file.Error()) {
wxString source;
file.Read(wxStringBuffer(source, (size_t)n), sizeof(wchar_t)*(size_t)n);
if (!file.Error()) {
// Load destination text.
file.Read(&n, sizeof(n));
if (!file.Error()) {
wxString destination;
file.Read(wxStringBuffer(destination, (size_t)n), sizeof(wchar_t)*(size_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;
}
}
}
}
}
}
}
void wxZRColaComposerPanel::SynchronizePanels()
{
if (m_sourceChanged) {
m_timerSave.Stop();
auto app = dynamic_cast<ZRColaApp*>(wxTheApp);
wxString src = m_source->GetValue();
size_t len = src.Length();
std::wstring dst(src.data(), len), dst2;
ZRCola::mapping_vector map;
m_mapping.clear();
if (app->m_mainWnd->m_composition) {
// ZRCola decompose first, then re-compose.
app->m_t_db.TranslateInv(app->m_mainWnd->m_composition_id, dst.data(), dst.size(), dst2, &map);
m_mapping.push_back(std::move(map));
map.clear();
app->m_t_db.Translate(app->m_mainWnd->m_composition_id, dst2.data(), dst2.size(), dst, &map);
m_mapping.push_back(std::move(map));
map.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));
map.clear();
dst = std::move(dst2);
dst2.clear();
}
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 = (long)MapToDestination(m_selSource.first ),
m_selDestination.second = (long)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 = m_destination->GetValue();
size_t len = src.Length();
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_end; (s--) != sets_begin;) {
app->m_t_db.TranslateInv(*s, dst.data(), dst.size(), dst2, &map);
dst = std::move(dst2);
dst2.clear();
for (auto& m : map)
m.invert();
m_mapping.push_back(std::move(map));
map.clear();
}
if (app->m_mainWnd->m_composition) {
// ZRCola decompose.
app->m_t_db.TranslateInv(app->m_mainWnd->m_composition_id, dst.data(), dst.size(), &app->m_lc_db, app->m_mainWnd->m_settings->m_lang, dst2, &map);
dst = std::move(dst2);
dst2.clear();
for (auto& m : map)
m.invert();
m_mapping.push_back(std::move(map));
map.clear();
}
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 = (long)MapToSource(m_selDestination.first ),
m_selSource.second = (long)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();
if (m_sourceRestyled)
return;
long from, to;
m_source->GetSelection(&from, &to);
if (m_selSource.first != from || m_selSource.second != to) {
// Save new selection first, to avoid loop.
m_selSource.first = from;
m_selSource.second = to;
m_sourceHex->SetSelection(
m_selSourceHex.first = (long)stdex::src2dst<size_t>(m_mappingSourceHex, from),
m_selSourceHex.second = (long)stdex::src2dst<size_t>(m_mappingSourceHex, to ));
m_destination->SetSelection(
m_selDestination.first = (long)MapToDestination(from),
m_selDestination.second = (long)MapToDestination(to ));
m_destinationHex->SetSelection(
m_selDestinationHex.first = (long)stdex::src2dst<size_t>(m_mappingDestinationHex, m_selDestination.first ),
m_selDestinationHex.second = (long)stdex::src2dst<size_t>(m_mappingDestinationHex, m_selDestination.second));
}
}
void wxZRColaComposerPanel::OnSourceHexPaint(wxPaintEvent& event)
{ {
event.Skip(); event.Skip();
long from, to; long from, to;
m_sourceHex->GetSelection(&from, &to); m_decomposed->GetSelection(&from, &to);
if (m_selSourceHex.first != from || m_selSourceHex.second != to) { if (m_selDecomposed.first != from || m_selDecomposed.second != to) {
// Save new selection first, to avoid loop. // Save new selection first, to avoid loop.
m_selSourceHex.first = from; m_selDecomposed.first = from;
m_selSourceHex.second = to; m_selDecomposed.second = to;
m_composed->SetSelection(m_mapping.to_composed(from), m_mapping.to_composed(to));
m_source->SetSelection(
m_selSource.first = (long)stdex::dst2src<size_t>(m_mappingSourceHex, from),
m_selSource.second = (long)stdex::dst2src<size_t>(m_mappingSourceHex, to ));
m_destination->SetSelection(
m_selDestination.first = (long)MapToDestination(m_selSource.first ),
m_selDestination.second = (long)MapToDestination(m_selSource.second));
m_destinationHex->SetSelection(
m_selDestinationHex.first = (long)stdex::src2dst<size_t>(m_mappingDestinationHex, m_selDestination.first ),
m_selDestinationHex.second = (long)stdex::src2dst<size_t>(m_mappingDestinationHex, m_selDestination.second));
} }
} }
void wxZRColaComposerPanel::OnSourceText(wxCommandEvent& event) void wxZRColaComposerPanel::OnDecomposedText(wxCommandEvent& event)
{ {
event.Skip(); 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
if (m_sourceRestyled) std::wstring dst;
return; ZRCola::Compose(src.data(), src.size(), dst, &m_mapping);
// Set the flag the source text changed to trigger idle-time translation. long from, to;
m_sourceChanged = true; m_decomposed->GetSelection(&from, &to);
m_sourceRestyled = true; // Update composed text.
m_source->SetStyle(0, GetWindowTextLength(m_source->GetHWND()), m_styleNormal); m_progress = true;
m_sourceRestyled = false; m_composed->SetValue(dst);
} m_composed->SetSelection(m_mapping.to_composed(from), m_mapping.to_composed(to));
event.Skip();
m_progress = false;
void wxZRColaComposerPanel::OnDestinationPaint(wxPaintEvent& event)
{
event.Skip();
if (m_destinationRestyled)
return;
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 = (long)stdex::src2dst<size_t>(m_mappingDestinationHex, from),
m_selDestinationHex.second = (long)stdex::src2dst<size_t>(m_mappingDestinationHex, to ));
m_source->SetSelection(
m_selSource.first = (long)MapToSource(from),
m_selSource.second = (long)MapToSource(to ));
m_sourceHex->SetSelection(
m_selSourceHex.first = (long)stdex::src2dst<size_t>(m_mappingSourceHex, m_selSource.first ),
m_selSourceHex.second = (long)stdex::src2dst<size_t>(m_mappingSourceHex, m_selSource.second));
} }
} }
void wxZRColaComposerPanel::OnDestinationHexPaint(wxPaintEvent& event) void wxZRColaComposerPanel::OnComposedPaint(wxPaintEvent& event)
{ {
event.Skip(); event.Skip();
long from, to; long from, to;
m_destinationHex->GetSelection(&from, &to); m_composed->GetSelection(&from, &to);
if (m_selDestinationHex.first != from || m_selDestinationHex.second != to) { if (m_selComposed.first != from || m_selComposed.second != to) {
// Save new selection first, to avoid loop. // Save new selection first, to avoid loop.
m_selDestinationHex.first = from; m_selComposed.first = from;
m_selDestinationHex.second = to; m_selComposed.second = to;
m_decomposed->SetSelection(m_mapping.to_decomposed(from), m_mapping.to_decomposed(to));
m_destination->SetSelection(
m_selDestination.first = (long)stdex::dst2src<size_t>(m_mappingDestinationHex, from),
m_selDestination.second = (long)stdex::dst2src<size_t>(m_mappingDestinationHex, to ));
m_source->SetSelection(
m_selSource.first = (long)MapToSource(m_selDestination.first ),
m_selSource.second = (long)MapToSource(m_selDestination.second));
m_sourceHex->SetSelection(
m_selSourceHex.first = (long)stdex::src2dst<size_t>(m_mappingSourceHex, m_selSource.first ),
m_selSourceHex.second = (long)stdex::src2dst<size_t>(m_mappingSourceHex, m_selSource.second));
} }
} }
void wxZRColaComposerPanel::OnDestinationText(wxCommandEvent& event) void wxZRColaComposerPanel::OnComposedText(wxCommandEvent& event)
{ {
event.Skip(); 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
if (m_destinationRestyled) std::wstring dst;
return; ZRCola::Decompose(src.data(), src.size(), dst, &m_mapping);
// Set the flag the destination text changed to trigger idle-time inverse translation. long from, to;
m_destinationChanged = true; m_composed->GetSelection(&from, &to);
auto app = dynamic_cast<ZRColaApp*>(wxTheApp); // Update decomposed text.
m_destinationRestyled = true; m_progress = true;
wxString src = m_destination->GetValue(); m_decomposed->SetValue(dst);
app->m_h_db.Highlight(src, src.Length(), [this, app, src](ZRCola::hlghtsetid_t set, size_t start, size_t end) { m_decomposed->SetSelection(m_mapping.to_decomposed(from), m_mapping.to_decomposed(to));
switch (set) { event.Skip();
case ZRCOLA_HLGHTSETID_ZRCOLA_UNICODE_COMPOSED_ISSUES: m_progress = false;
m_destination->SetStyle((long)start, (long)end, m_styleZRColaUnicodeComposedIssues);
break;
default:
if (app->m_mainWnd->m_warnPUA) {
for (size_t i = start, j; i < end;) {
bool pua_i = ZRCola::ispua(src[i]);
for (j = i + 1; j < end && pua_i == ZRCola::ispua(src[j]); j++);
m_destination->SetStyle((long)i, (long)j, pua_i ? m_stylePUA : m_styleNormal);
i = j;
}
} else
m_destination->SetStyle((long)start, (long)end, m_styleNormal);
}
});
m_destinationRestyled = false;
}
void wxZRColaComposerPanel::OnSaveTimer(wxTimerEvent& event)
{
wxString fileName(GetStateFileName());
wxFFile file(fileName, wxT("wb"));
if (file.IsOpened()) {
{
// Save source text.
wxString text = m_source->GetValue();
size_t len = text.Length();
file.Write(&len, sizeof(len));
file.Write((const wchar_t*)text, sizeof(wchar_t)*len);
}
{
// Save destination text.
wxString text = m_destination->GetValue();
size_t len = text.Length();
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;
}
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') {
hex += L"\r\n";
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 = (long)stdex::src2dst<size_t>(mapping, from),
range.second = (long)stdex::src2dst<size_t>(mapping, 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,6 +1,20 @@
/* /*
SPDX-License-Identifier: GPL-3.0-or-later Copyright 2015-2016 Amebis
Copyright © 2015-2022 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/>.
*/ */
/// ///
@ -11,19 +25,9 @@ class wxZRColaComposerPanel;
#pragma once #pragma once
#include <wxex/common.h>
#pragma warning(push)
#pragma warning(disable: WXWIDGETS_CODE_ANALYSIS_WARNINGS)
#include "zrcolagui.h" #include "zrcolagui.h"
#pragma warning(pop) #include <zrcola/common.h>
#include "zrcolakeyhndlr.h"
#pragma warning(push)
#pragma warning(disable: WXWIDGETS_CODE_ANALYSIS_WARNINGS)
#include <wx/persist/window.h>
#include <wx/timer.h>
#pragma warning(pop)
#include <utility> #include <utility>
#include <vector>
/// ///
@ -35,108 +39,19 @@ public:
wxZRColaComposerPanel(wxWindow* parent); wxZRColaComposerPanel(wxWindow* parent);
virtual ~wxZRColaComposerPanel(); virtual ~wxZRColaComposerPanel();
void RestoreFromStateFile(); // Allow main frame direct access to our members.
void SynchronizePanels(); friend class wxZRColaFrame;
friend class wxPersistentZRColaComposerPanel; // Allow saving/restoring window state.
protected: protected:
virtual void OnSourcePaint(wxPaintEvent& event); virtual void OnDecomposedPaint(wxPaintEvent& event);
virtual void OnSourceHexPaint(wxPaintEvent& event); virtual void OnDecomposedText(wxCommandEvent& event);
virtual void OnSourceText(wxCommandEvent& event); virtual void OnComposedPaint(wxPaintEvent& event);
virtual void OnDestinationPaint(wxPaintEvent& event); virtual void OnComposedText(wxCommandEvent& 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 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: protected:
bool m_sourceChanged; ///< Boolean flag to mark source text "dirty" to trigger translation bool m_progress; ///< Boolean flag to avoid recursive updates of composed and decomposed text controls
bool m_destinationChanged; ///< Boolean flag to mark destination text "dirty" to trigger inverse translation ZRCola::mapping_vector m_mapping; ///< Character index mapping vector between composed and decomposed text
volatile bool
m_sourceRestyled, ///< Boolean flag to mark source text is being restyled
m_destinationRestyled; ///< Boolean flag to mark destination text is being restyled
wxTextAttr
m_styleNormal, ///< Normal text style
m_stylePUA, ///< PUA character text style
m_styleZRColaUnicodeComposedIssues; ///< ZRCola Unicode Composed issues character text style
std::vector<ZRCola::mapping_vector> m_mapping; ///< Character index mapping vector between source and normalized text
std::pair<long, long> std::pair<long, long>
m_selSource, ///< Character index of selected text in source text control m_selDecomposed, ///< Character index of selected text in decomposed text control
m_selSourceHex, ///< Character index of selected text in source HEX dump text control m_selComposed; ///< Character index of selected text in composed 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 = stdex::src2dst(*m, 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 = stdex::dst2src(*m, 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,9 +1,23 @@
/* /*
SPDX-License-Identifier: GPL-3.0-or-later Copyright 2015-2016 Amebis
Copyright © 2015-2022 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 "pch.h" #include "stdafx.h"
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
@ -11,276 +25,59 @@
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
wxBEGIN_EVENT_TABLE(wxZRColaFrame, wxZRColaFrameBase) wxBEGIN_EVENT_TABLE(wxZRColaFrame, wxZRColaFrameBase)
EVT_MENU (wxID_EXIT , wxZRColaFrame::OnExit ) EVT_UPDATE_UI_RANGE(wxZRColaFrame::wxID_SEND, wxZRColaFrame::wxID_SEND_DECOMPOSED, wxZRColaFrame::OnSendUpdate)
EVT_UPDATE_UI_RANGE(wxID_CUT , wxID_CLEAR , wxZRColaFrame::OnForwardEventUpdate ) EVT_MENU(wxZRColaFrame::wxID_SEND , wxZRColaFrame::OnSend )
EVT_MENU_RANGE (wxID_CUT , wxID_CLEAR , wxZRColaFrame::OnForwardEvent ) EVT_MENU(wxZRColaFrame::wxID_SEND_COMPOSED , wxZRColaFrame::OnSendComposed )
EVT_UPDATE_UI (wxID_SELECTALL , wxZRColaFrame::OnForwardEventUpdate ) EVT_MENU(wxZRColaFrame::wxID_SEND_DECOMPOSED , wxZRColaFrame::OnSendDecomposed )
EVT_MENU (wxID_SELECTALL , wxZRColaFrame::OnForwardEvent ) EVT_MENU(wxZRColaFrame::wxID_SEND_ABORT , wxZRColaFrame::OnSendAbort )
EVT_MENU( wxID_EXIT , wxZRColaFrame::OnExit )
EVT_UPDATE_UI (wxID_CHARACTER_SELECTOR , wxZRColaFrame::OnInsertCharacterUpdate ) EVT_MENU( wxID_INSERT_GRAVE , wxZRColaFrame::OnInsertGrave )
EVT_MENU (wxID_CHARACTER_SELECTOR , wxZRColaFrame::OnInsertCharacter ) EVT_MENU( wxID_INSERT_ACUTE , wxZRColaFrame::OnInsertAcute )
EVT_MENU( wxID_INSERT_CIRCUMFLEX , wxZRColaFrame::OnInsertCircumflex )
EVT_UPDATE_UI_RANGE(wxID_SEND_DESTINATION , wxID_SEND_ABORT , wxZRColaFrame::OnSendUpdate ) EVT_MENU( wxID_INSERT_INV_BREVE_BELOW, wxZRColaFrame::OnInsertInvertedBreveBelow)
EVT_MENU (wxID_COPY_DESTINATION_AND_RETURN , wxZRColaFrame::OnCopyDestinationAndReturn ) EVT_MENU( wxID_ABOUT , wxZRColaFrame::OnAbout )
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_NONE , wxZRColaFrame::OnCompositionNone )
EVT_MENU (wxID_COMPOSITION_ZRCOLA , wxZRColaFrame::OnCompositionZRCola )
EVT_MENU (wxID_COMPOSITION_UNICODE , wxZRColaFrame::OnCompositionUnicode )
EVT_MENU (wxID_WARN_PUA , wxZRColaFrame::OnWarnPUA )
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() wxEND_EVENT_TABLE()
const int wxZRColaFrame::s_guiLevel = 1;
wxZRColaFrame::wxZRColaFrame() : wxZRColaFrame::wxZRColaFrame() :
m_hWndSource(NULL), m_hWndSource(NULL),
m_wasIconised(false), m_hotkey(-1),
m_chrSelect(NULL),
m_settings(NULL),
m_chrReq(NULL),
m_composition(true),
m_composition_id(ZRCOLA_TRANSETID_DEFAULT),
m_warnPUA(false),
m_transeq_id(ZRCOLA_TRANSEQID_DEFAULT),
m_transeq(NULL),
wxZRColaFrameBase(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((int)(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((int)(wxID_TRANSLATION_SEQ_START + i), name_tran);
m_toolTranslationSeq->Append(name_tran, reinterpret_cast<void*>(ZRCOLA_TRANSEQID_CUSTOM));
break;
}
}
// Load main window icons. // Load main window icons.
#ifdef __WINDOWS__ #ifdef __WINDOWS__
wxIcon icon_small(wxT("00_zrcola.ico"), wxBITMAP_TYPE_ICO_RESOURCE, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON));
wxIconBundle icons; wxIconBundle icons;
icons.AddIcon(icon_small); icons.AddIcon(wxIcon(wxT("00_zrcola.ico"), wxBITMAP_TYPE_ICO_RESOURCE, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON)));
icons.AddIcon(wxIcon(wxT("00_zrcola.ico"), wxBITMAP_TYPE_ICO_RESOURCE, ::GetSystemMetrics(SM_CXICON ), ::GetSystemMetrics(SM_CYICON ))); icons.AddIcon(wxIcon(wxT("00_zrcola.ico"), wxBITMAP_TYPE_ICO_RESOURCE, ::GetSystemMetrics(SM_CXICON ), ::GetSystemMetrics(SM_CYICON )));
SetIcons(icons); SetIcons(icons);
#else #else
wxIcon icon_small(wxICON(00_zrcola.ico)); SetIcon(wxICON(00_zrcola.ico));
SetIcon(icon_small);
#endif #endif
m_taskBarIcon = new wxTaskBarIcon(); m_panel->m_decomposed->SetFocus();
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;
}
wxPersistenceManager &persist_mgr = wxPersistenceManager::Get(); // Register global hotkey(s).
if (!RegisterHotKey(wxZRColaHKID_INVOKE_COMPOSE, MOD_WIN, 'Z'))
m_settings = new wxZRColaSettings(this); wxMessageBox(_("ZRCola keyboard shortcut Win+Z could not be registered. Some functionality will not be available."), _("Warning"), wxOK | wxICON_WARNING);
persist_mgr.RegisterAndRestore(m_settings, new wxPersistentZRColaSettings(m_settings)); 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);
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;
m_dwCookie = MAXDWORD;
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 == MAXDWORD) {
m_tfSource->Release();
m_tfSource = NULL;
}
}
pProfiles->Release();
}
#endif
// Register frame specific hotkey(s). // Register frame specific hotkey(s).
{ {
wxAcceleratorEntry entries[1]; wxAcceleratorEntry entries[2];
entries[0].Set(wxACCEL_NORMAL, WXK_F4, wxID_FOCUS_CHARACTER_CATALOG); entries[0].Set(wxACCEL_CTRL , WXK_RETURN, wxID_SEND);
entries[1].Set(wxACCEL_NORMAL, WXK_ESCAPE, wxID_SEND_ABORT);
SetAcceleratorTable(wxAcceleratorTable(_countof(entries), entries)); 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_composition_id == ZRCOLA_TRANSETID_DEFAULT) {
m_menuItemCompositionZRCola->Check(true);
m_toolComposition->Select(1);
} else if (m_composition && m_composition_id == ZRCOLA_TRANSETID_UNICODE) {
m_menuItemCompositionUnicode->Check(true);
m_toolComposition->Select(2);
} else {
m_menuItemCompositionNone->Check(true);
m_toolComposition->Select(0);
}
if (m_warnPUA) {
m_menuItemWarnPUA->Check(true);
m_toolWarnPUA->SetState(m_toolWarnPUA->GetState() | wxAUI_BUTTON_STATE_CHECKED);
} else {
m_menuItemWarnPUA->Check(false);
m_toolWarnPUA->SetState(m_toolWarnPUA->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() wxZRColaFrame::~wxZRColaFrame()
{ {
// Unregister global hotkey(s). // Unregister global hotkey(s).
UnregisterHotKey(wxZRColaHKID_INVOKE_TRANSLATE_INV); UnregisterHotKey(wxZRColaHKID_INVOKE_DECOMPOSE);
UnregisterHotKey(wxZRColaHKID_INVOKE_TRANSLATE ); UnregisterHotKey(wxZRColaHKID_INVOKE_COMPOSE);
// 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);
#if defined(__WXMSW__)
if (m_tfSource) {
m_tfSource->UnadviseSink(m_dwCookie);
m_tfSource->Release();
}
#endif
if (m_taskBarIcon) {
m_taskBarIcon->Disconnect(wxEVT_TASKBAR_LEFT_DOWN, wxTaskBarIconEventHandler(wxZRColaFrame::OnTaskbarIconClick), NULL, this);
delete m_taskBarIcon;
}
}
void wxZRColaFrame::OnExit(wxCommandEvent& event)
{
Close();
}
void wxZRColaFrame::OnForwardEventUpdate(wxUpdateUIEvent& event)
{
wxControl *focusWnd = wxDynamicCast(FindFocus(), wxControl);
if (focusWnd && focusWnd->IsKindOf(wxCLASSINFO(wxTextCtrl)))
focusWnd->GetEventHandler()->ProcessEvent(event);
else
event.Enable(false);
}
void wxZRColaFrame::OnForwardEvent(wxCommandEvent& event)
{
wxControl *focusWnd = wxDynamicCast(FindFocus(), wxControl);
if (focusWnd)
focusWnd->GetEventHandler()->ProcessEvent(event);
else
event.Skip();
}
void wxZRColaFrame::OnInsertCharacterUpdate(wxUpdateUIEvent& event)
{
event.Check(m_chrSelect->IsVisible());
}
void wxZRColaFrame::OnInsertCharacter(wxCommandEvent& event)
{
m_chrSelect->Show(!m_chrSelect->IsVisible());
} }
@ -290,37 +87,29 @@ void wxZRColaFrame::OnSendUpdate(wxUpdateUIEvent& event)
} }
void wxZRColaFrame::OnSendDestination(wxCommandEvent& event) 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();
}
}
void wxZRColaFrame::OnSendComposed(wxCommandEvent& event)
{ {
if (m_hWndSource) if (m_hWndSource)
DoSend(m_panel->m_destination->GetValue()); DoSend(m_panel->m_composed->GetValue());
event.Skip(); event.Skip();
} }
void wxZRColaFrame::OnCopyDestinationAndReturn(wxCommandEvent& event) void wxZRColaFrame::OnSendDecomposed(wxCommandEvent& event)
{ {
if (m_hWndSource) if (m_hWndSource)
DoCopyAndReturn(m_panel->m_destination->GetValue()); DoSend(m_panel->m_decomposed->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(); event.Skip();
} }
@ -330,403 +119,101 @@ void wxZRColaFrame::OnSendAbort(wxCommandEvent& event)
{ {
if (m_hWndSource) { if (m_hWndSource) {
// Return focus to the source window. // Return focus to the source window.
if (m_wasIconised) Iconize();
::SetActiveWindow(m_hWndSource); ::SetActiveWindow(m_hWndSource);
::SetForegroundWindow(m_hWndSource); ::SetForegroundWindow(m_hWndSource);
m_hWndSource = NULL; 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();
} }
// Select all input in composer to prepare for the overwrite next time.
m_panel->m_source ->SelectAll();
m_panel->m_destination->SelectAll();
event.Skip(); event.Skip();
} }
void wxZRColaFrame::OnCompositionNone(wxCommandEvent& event) void wxZRColaFrame::OnExit(wxCommandEvent& event)
{ {
DoSetComposition(false, ZRCOLA_TRANSETID_DEFAULT); Close();
m_toolbarTranslate->Refresh();
event.Skip();
} }
void wxZRColaFrame::OnCompositionZRCola(wxCommandEvent& event) void wxZRColaFrame::OnInsertGrave(wxCommandEvent& event)
{ {
DoSetComposition(true, ZRCOLA_TRANSETID_DEFAULT); m_panel->m_decomposed->WriteText(L"\xE000");
m_toolbarTranslate->Refresh();
event.Skip();
} }
void wxZRColaFrame::OnCompositionUnicode(wxCommandEvent& event) void wxZRColaFrame::OnInsertAcute(wxCommandEvent& event)
{ {
DoSetComposition(true, ZRCOLA_TRANSETID_UNICODE); m_panel->m_decomposed->WriteText(L"\xE001");
m_toolbarTranslate->Refresh();
event.Skip();
} }
void wxZRColaFrame::OnCompositionChoice(wxCommandEvent& event) void wxZRColaFrame::OnInsertCircumflex(wxCommandEvent& event)
{ {
switch (event.GetSelection()) { m_panel->m_decomposed->WriteText(L"\xE002");
case 0: DoSetComposition(false, ZRCOLA_TRANSETID_DEFAULT); break;
case 1: DoSetComposition(true, ZRCOLA_TRANSETID_DEFAULT); break;
case 2: DoSetComposition(true, ZRCOLA_TRANSETID_UNICODE); break;
}
} }
void wxZRColaFrame::OnWarnPUA(wxCommandEvent& event) void wxZRColaFrame::OnInsertInvertedBreveBelow(wxCommandEvent& event)
{ {
m_warnPUA = !m_warnPUA; m_panel->m_decomposed->WriteText(L"\xE02F");
m_menuItemWarnPUA->Check(m_warnPUA);
m_toolWarnPUA->SetState((m_toolWarnPUA->GetState() & ~wxAUI_BUTTON_STATE_CHECKED) | (m_warnPUA ? wxAUI_BUTTON_STATE_CHECKED : 0));
m_toolbarTranslate->Refresh();
// Notify destination text something changed and should re-paint.
wxCommandEvent event2(wxEVT_COMMAND_TEXT_UPDATED);
m_panel->m_destination->ProcessWindowEvent(event2);
event.Skip();
} }
void wxZRColaFrame::OnSettings(wxCommandEvent& event) void wxZRColaFrame::OnAbout(wxCommandEvent& event)
{ {
m_settings->ShowModal(); wxMessageBox(wxString::Format(_("ZRCola v%s\nCopyright 2015-%s Amebis"), wxT(ZRCOLA_VERSION_STR), wxT(ZRCOLA_BUILD_YEAR_STR)), _("About ZRCola"), wxOK | wxICON_INFORMATION);
} }
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.
#pragma warning(suppress: 26812) // INSTALLSTATE is unscoped.
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) void wxZRColaFrame::DoSend(const wxString& str)
{ {
// Prepare the INPUT table. // Prepare the INPUT table.
wxString::size_type n = str.length(); wxString::size_type n = str.length();
wxString::const_iterator i_str = str.begin(); wxString::const_iterator i_str = str.begin();
std::vector<INPUT> input; std::vector<INPUT> input(n);
input.reserve(n*2); for (std::vector<INPUT>::size_type i = 0; i < n; i++, i_str++) {
for (std::vector<INPUT>::size_type i = 0; i < n; i++, ++i_str) {
wxString::char_type c = *i_str; wxString::char_type c = *i_str;
INPUT &inp = input[i];
// Add key down event. inp.type = INPUT_KEYBOARD;
INPUT inp = { INPUT_KEYBOARD }; inp.ki.dwFlags = KEYEVENTF_UNICODE;
inp.ki.dwFlags = KEYEVENTF_UNICODE; inp.ki.time = 0;
inp.ki.wScan = c != L'\n' ? c : L'\r'; // Enter (Return) key is sent as CR. inp.ki.dwExtraInfo = 0;
input.push_back(inp); if (c == L'\n') {
// Enter (Return) key is sent as CR virtual key code.
// Add key up event. inp.ki.wVk = VK_RETURN;
inp.ki.dwFlags |= KEYEVENTF_KEYUP; inp.ki.wScan = L'\r';
input.push_back(inp); } 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;
}
} }
// Return focus to the source window and send the input. // Return focus to the source window and send the input.
if (m_wasIconised) Iconize();
::SetActiveWindow(m_hWndSource); ::SetActiveWindow(m_hWndSource);
::SetForegroundWindow(m_hWndSource); ::SetForegroundWindow(m_hWndSource);
::Sleep(200); ::Sleep(200);
::SendInput((UINT)input.size(), input.data(), sizeof(INPUT)); ::SendInput(input.size(), input.data(), sizeof(INPUT));
m_hWndSource = NULL; m_hWndSource = NULL;
m_hotkey = -1;
// Select all input in source and destination to prepare for the overwrite next time. // Select all input in composer and decomposed to prepare for the overwrite next time.
m_panel->m_source ->SelectAll(); m_panel->m_decomposed->SelectAll();
m_panel->m_destination->SelectAll(); m_panel->m_composed->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::DoSetComposition(bool enable, ZRCola::transetid_t transet_id)
{
if (enable && transet_id == ZRCOLA_TRANSETID_DEFAULT) {
m_composition = true;
m_composition_id = ZRCOLA_TRANSETID_DEFAULT;
m_menuItemCompositionZRCola->Check(true);
m_toolComposition->Select(1);
} else if (enable && transet_id == ZRCOLA_TRANSETID_UNICODE) {
m_composition = true;
m_composition_id = ZRCOLA_TRANSETID_UNICODE;
m_menuItemCompositionUnicode->Check(true);
m_toolComposition->Select(2);
} else {
m_composition = false;
m_menuItemCompositionNone->Check(true);
m_toolComposition->Select(0);
}
// Notify source text something changed and should re-translate.
wxCommandEvent event2(wxEVT_COMMAND_TEXT_UPDATED);
m_panel->m_source->ProcessWindowEvent(event2);
}
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) WXLRESULT wxZRColaFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
{ {
if (message == WM_HOTKEY) { if (message == WM_HOTKEY) {
@ -734,8 +221,8 @@ WXLRESULT wxZRColaFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM
WXHWND hWndSource = ::GetForegroundWindow(); WXHWND hWndSource = ::GetForegroundWindow();
switch (wParam) { switch (wParam) {
case wxZRColaHKID_INVOKE_TRANSLATE: m_panel->m_source->SetFocus(); break; case wxZRColaHKID_INVOKE_COMPOSE : m_panel->m_decomposed->SetFocus(); break;
case wxZRColaHKID_INVOKE_TRANSLATE_INV: m_panel->m_destination->SetFocus(); break; case wxZRColaHKID_INVOKE_DECOMPOSE: m_panel->m_composed ->SetFocus(); break;
default: default:
wxFAIL_MSG(wxT("not our registered shortcut")); wxFAIL_MSG(wxT("not our registered shortcut"));
return wxZRColaFrameBase::MSWWindowProc(message, wParam, lParam); return wxZRColaFrameBase::MSWWindowProc(message, wParam, lParam);
@ -747,13 +234,15 @@ WXLRESULT wxZRColaFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM
} }
m_hWndSource = hWndSource; m_hWndSource = hWndSource;
m_wasIconised = IsIconized(); m_hotkey = wParam;
//if (m_state == wxABS_FLOAT) { //if (m_state == wxABS_FLOAT) {
Show(true); if (IsIconized()) {
Iconize(false); ::SendMessage(m_hWnd, WM_SYSCOMMAND, SC_RESTORE, 0);
Raise(); } else {
::SetActiveWindow(m_hWnd); ::SetActiveWindow(m_hWnd);
::SetForegroundWindow(m_hWnd);
}
//} else if (wxAppBarIsDocked(m_state)) { //} else if (wxAppBarIsDocked(m_state)) {
// // ZRCola window is currently docked. // // ZRCola window is currently docked.
@ -768,66 +257,6 @@ WXLRESULT wxZRColaFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM
// wxFAIL_MSG(wxT("unsupported application bar state")); // wxFAIL_MSG(wxT("unsupported application bar state"));
return 0; return 0;
} } else
else
return wxZRColaFrameBase::MSWWindowProc(message, wParam, lParam); 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("compositionId"), static_cast<int>(wnd->m_composition_id));
SaveValue(wxT("warnPUA"), wnd->m_warnPUA);
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 = (ZRCola::transeqid_t)num;
bool b;
if (RestoreValue(wxT("composition"), &b))
wnd->m_composition = b;
else
wnd->m_composition = wnd->m_transeq_id == ZRCOLA_TRANSEQID_DEFAULT;
if (RestoreValue(wxT("compositionId"), &num))
wnd->m_composition_id = (ZRCola::transetid_t)num;
if (RestoreValue(wxT("warnPUA"), &b))
wnd->m_warnPUA = b;
else
wnd->m_warnPUA = false;
int guiLevel;
return RestoreValue(wxT("guiLevel"), &guiLevel) && guiLevel == s_guiLevel ? wxPersistentTLWEx::Restore() : true;
}

View File

@ -1,168 +1,79 @@
/* /*
SPDX-License-Identifier: GPL-3.0-or-later Copyright 2015-2016 Amebis
Copyright © 2015-2022 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 /// Forward declarations
/// ///
class wxZRColaFrame; class wxZRColaFrame;
class wxPersistentZRColaFrame;
#pragma once #pragma once
#include <wxex/common.h>
#pragma warning(push)
#pragma warning(disable: WXWIDGETS_CODE_ANALYSIS_WARNINGS)
#include "zrcolagui.h" #include "zrcolagui.h"
#pragma warning(pop)
#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>
#pragma warning(push)
#pragma warning(disable: WXWIDGETS_CODE_ANALYSIS_WARNINGS)
#include <wx/taskbar.h>
#pragma warning(pop)
#if defined(__WXMSW__)
#include <msctf.h>
#endif
/// ///
/// Global hotkey message identifiers /// Global hotkey message identifiers
/// ///
#define wxZRColaHKID_INVOKE_TRANSLATE 0 #define wxZRColaHKID_INVOKE_COMPOSE 0
#define wxZRColaHKID_INVOKE_TRANSLATE_INV 1 #define wxZRColaHKID_INVOKE_DECOMPOSE 1
/// ///
/// ZRCola main frame /// ZRCola main frame
/// ///
class wxZRColaFrame : class wxZRColaFrame : public wxZRColaFrameBase
public wxZRColaFrameBase
#if defined(__WXMSW__)
, protected ITfLanguageProfileNotifySink
#endif
{ {
public: protected:
enum enum {
{ wxID_SEND = wxID_HIGHEST,
wxID_FOCUS_CHARACTER_CATALOG = 2000, wxID_SEND_COMPOSED,
wxID_TRANSLATION_SEQ_DEFAULT = 2001, wxID_SEND_DECOMPOSED,
wxID_TRANSLATION_SEQ_START = 2002, wxID_SEND_ABORT,
wxID_TRANSLATION_SEQ_END = 2100,
}; };
public:
wxZRColaFrame(); wxZRColaFrame();
virtual ~wxZRColaFrame(); virtual ~wxZRColaFrame();
friend class wxPersistentZRColaFrame;
friend class wxZRColaComposerPanel;
protected: protected:
void OnExit(wxCommandEvent& event);
void OnForwardEventUpdate(wxUpdateUIEvent& event);
void OnForwardEvent(wxCommandEvent& event);
void OnInsertCharacterUpdate(wxUpdateUIEvent& event);
void OnInsertCharacter(wxCommandEvent& event);
void OnSendUpdate(wxUpdateUIEvent& event); void OnSendUpdate(wxUpdateUIEvent& event);
void OnSendDestination(wxCommandEvent& event); void OnSend(wxCommandEvent& event);
void OnCopyDestinationAndReturn(wxCommandEvent& event); void OnSendComposed(wxCommandEvent& event);
void OnSendSource(wxCommandEvent& event); void OnSendDecomposed(wxCommandEvent& event);
void OnCopySourceAndReturn(wxCommandEvent& event);
void OnSendAbort(wxCommandEvent& event); void OnSendAbort(wxCommandEvent& event);
void OnCompositionNone(wxCommandEvent& event); void OnExit(wxCommandEvent& event);
void OnCompositionZRCola(wxCommandEvent& event); void OnInsertGrave(wxCommandEvent& event);
void OnCompositionUnicode(wxCommandEvent& event); void OnInsertAcute(wxCommandEvent& event);
virtual void OnCompositionChoice(wxCommandEvent& event); void OnInsertCircumflex(wxCommandEvent& event);
void OnWarnPUA(wxCommandEvent& event); void OnInsertInvertedBreveBelow(wxCommandEvent& event);
void OnSettings(wxCommandEvent& event); void OnAbout(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(); 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: private:
void DoSend(const wxString& str); void DoSend(const wxString& str);
void DoCopyAndReturn(const wxString& str);
void DoSetComposition(bool enable, ZRCola::transetid_t transet_id);
void DoSetTranslationSeq(int idx, ZRCola::transeqid_t transeq_id);
protected: protected:
#ifdef __WXMSW__
virtual WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam); virtual WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam);
#endif
protected: protected:
static const int s_guiLevel; ///< Persisted placements/sizing are considered incompatible between different GUI levels WXHWND m_hWndSource; ///< handle of the active window, when the ZRCola hotkey was pressed
int m_hotkey; ///< hotkey ID that was pressed
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::transetid_t m_composition_id; ///< Which (de)composition is enabled
bool m_warnPUA; ///< Mark Private-Use-Area characters in destination text
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,18 +1,17 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Oct 26 2018) // C++ code generated with wxFormBuilder (version Jun 17 2015)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO *NOT* EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
#pragma once #ifndef __ZRCOLAGUI_H__
#define __ZRCOLAGUI_H__
#include <wx/artprov.h> #include <wx/artprov.h>
#include <wx/xrc/xmlres.h> #include <wx/xrc/xmlres.h>
#include <wx/cshelp.h> #include <wx/cshelp.h>
#include <wx/intl.h> #include <wx/intl.h>
class wxZRColaCharGrid;
#include <wx/string.h> #include <wx/string.h>
#include <wx/bitmap.h> #include <wx/bitmap.h>
#include <wx/image.h> #include <wx/image.h>
@ -22,32 +21,11 @@ class wxZRColaCharGrid;
#include <wx/font.h> #include <wx/font.h>
#include <wx/colour.h> #include <wx/colour.h>
#include <wx/settings.h> #include <wx/settings.h>
#include <wx/aui/aui.h> #include "zrcolacomppnl.h"
#include <wx/aui/auibar.h> #include <wx/sizer.h>
#include <wx/choice.h>
class wxZRColaCharacterCatalogPanel;
class wxZRColaComposerPanel;
#include <wx/statusbr.h>
#include <wx/frame.h> #include <wx/frame.h>
#include <wx/textctrl.h> #include <wx/textctrl.h>
#include <wx/sizer.h>
#include <wx/statbox.h>
#include <wx/panel.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>
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
@ -61,63 +39,21 @@ class wxZRColaFrameBase : public wxFrame
protected: protected:
enum enum
{ {
wxID_CHARACTER_SELECTOR = 1000, wxID_INSERT_GRAVE = 1000,
wxID_SEND_DESTINATION, wxID_INSERT_ACUTE,
wxID_COPY_DESTINATION_AND_RETURN, wxID_INSERT_CIRCUMFLEX,
wxID_SEND_SOURCE, wxID_INSERT_INV_BREVE_BELOW
wxID_COPY_SOURCE_AND_RETURN,
wxID_SEND_ABORT,
wxID_COMPOSITION_NONE,
wxID_COMPOSITION_ZRCOLA,
wxID_COMPOSITION_UNICODE,
wxID_WARN_PUA,
wxID_SETTINGS,
wxID_TOOLBAR_EDIT,
wxID_TOOLBAR_TRANSLATE,
wxID_PANEL_CHRGRPS,
wxID_HELP_INSTRUCTIONS,
wxID_HELP_SHORTCUTS,
wxID_HELP_REQCHAR,
wxID_HELP_UPDATE
}; };
wxMenuBar* m_menubar; wxMenuBar* m_menubar;
wxMenu* m_menuProgram; wxMenu* m_menuFile;
wxMenu* m_menuEdit; wxMenu* m_menuAccents;
wxMenuItem* m_menuItemCompositionNone;
wxMenuItem* m_menuItemCompositionZRCola;
wxMenuItem* m_menuItemCompositionUnicode;
wxMenu* m_menuTranslationSeq;
wxMenuItem* m_menuItemWarnPUA;
wxMenu* m_menuView;
wxMenu* m_menuHelp; 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;
wxChoice* m_toolComposition;
wxChoice* m_toolTranslationSeq;
wxAuiToolBarItem* m_toolWarnPUA;
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 OnCompositionChoice( wxCommandEvent& event ) { event.Skip(); }
virtual void OnTranslationSeqChoice( wxCommandEvent& event ) { event.Skip(); }
public:
wxZRColaComposerPanel* m_panel; 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") ); public:
wxAuiManager m_mgr;
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(); ~wxZRColaFrameBase();
@ -133,290 +69,25 @@ class wxZRColaComposerPanelBase : public wxPanel
protected: protected:
enum enum
{ {
wxID_TIMER_SAVE = 1000 wxID_DECOMPOSED = 1000,
wxID_COMPOSED
}; };
wxSplitterWindow* m_splitterSource; wxTextCtrl* m_decomposed;
wxPanel* m_panelSourceEdit; wxTextCtrl* m_composed;
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 event handlers, overide them in your derived class
virtual void OnSourcePaint( wxPaintEvent& event ) { event.Skip(); } virtual void OnDecomposedPaint( wxPaintEvent& event ) { event.Skip(); }
virtual void OnSourceText( wxCommandEvent& event ) { event.Skip(); } virtual void OnDecomposedText( wxCommandEvent& event ) { event.Skip(); }
virtual void OnSourceHexPaint( wxPaintEvent& event ) { event.Skip(); } virtual void OnComposedPaint( wxPaintEvent& event ) { event.Skip(); }
virtual void OnDestinationPaint( wxPaintEvent& event ) { event.Skip(); } virtual void OnComposedText( wxCommandEvent& 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: 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( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL );
~wxZRColaComposerPanelBase(); ~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 = 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__

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