Compare commits

...

26 Commits

Author SHA1 Message Date
Simon Rozman
92bbc9a8bf Version set to 2.0-alpha7. 2016-05-06 15:05:43 +02:00
Simon Rozman
b88cafcdfd Missing dependency added 2016-05-06 15:05:26 +02:00
Simon Rozman
994ec6461e Non-working locale-specific key sequences issue fixed 2016-05-06 14:27:12 +02:00
Simon Rozman
1867235007 Key sequences (shortcuts) added to Character Catalog tooltips 2016-05-06 13:42:14 +02:00
Simon Rozman
7545e9dadf Key sequence naming moved to ZRCola to allow localization 2016-05-06 13:40:55 +02:00
Simon Rozman
eb67174bed - Key sequences moved to wxZRCola app for global availability
- Top window retrieval mechanism in wxZRColaKeyHandler more robust now
2016-05-06 12:24:21 +02:00
Simon Rozman
8f33c72ad7 Inline function optimization more aggressive now 2016-05-06 12:11:41 +02:00
Simon Rozman
dbdfa139c4 Sub-module update 2016-05-06 12:11:10 +02:00
Simon Rozman
dd87605ac2 Character grid updated to show wxAui style tool tips 2016-05-06 11:56:41 +02:00
Simon Rozman
5c9a9cab03 INS+Unicode status bar message more descriptive now 2016-05-06 11:32:30 +02:00
Simon Rozman
d86c1d004d Tooltips added to character grid 2016-05-06 11:25:41 +02:00
Simon Rozman
7bd217ec47 Aesthetic modifications 2016-05-06 11:25:12 +02:00
Simon Rozman
01c50ba9e1 wxZRColaCharGrid now forwards Tab key to allow classic dialog control navigation 2016-05-06 08:40:03 +02:00
Simon Rozman
f9ef646f22 On-screen character catalog added 2016-05-05 15:37:44 +02:00
Simon Rozman
2a6212d19d Character group data cleanup 2016-05-05 15:21:25 +02:00
Simon Rozman
1a6dc8b723 AUI initial organization fixed 2016-05-05 08:15:54 +02:00
Simon Rozman
3b6eff0b44 Changed Cut/Copy/Paste event forwarding logic to avoid deadlocks in future 2016-05-04 15:54:07 +02:00
Simon Rozman
9a2bc6b743 Language localization optimization 2016-05-04 15:52:47 +02:00
Simon Rozman
6e4cd60152 Character group database support added 2016-05-04 15:49:51 +02:00
Simon Rozman
f2f0b007c4 wxAui becoming main UI 2016-05-03 13:33:43 +02:00
Simon Rozman
306be13fca GUI switched to wxAui 2016-05-03 13:29:24 +02:00
Simon Rozman
eb75e020e9 Folder icon added 2016-05-03 12:44:58 +02:00
Simon Rozman
bbb09f3779 8.3 file names now unique across module variations 2016-05-03 12:43:10 +02:00
Simon Rozman
99a4b2e6c8 Insert+Unicode keyboard feature added 2016-04-30 15:37:06 +02:00
Simon Rozman
3ff9459198 Slovenian translation update 2016-04-30 15:36:03 +02:00
Simon Rozman
8bdef858a0 Composition recognition improvements 2016-04-30 14:55:52 +02:00
68 changed files with 3232 additions and 457 deletions

View File

@@ -0,0 +1 @@
System Folder\wxmsw30u_adv_vc100.dll

Binary file not shown.

View File

@@ -0,0 +1,24 @@
#
# Copyright 1991-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/>.
#
[splosno]
jezik=0
deli=featZRCola
[parametri]

View File

@@ -0,0 +1 @@
System (64-bit) Folder\wxmsw30u_adv_vc100_x64.dll

Binary file not shown.

View File

@@ -0,0 +1,24 @@
#
# Copyright 1991-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/>.
#
[splosno]
jezik=0
deli=featZRCola
[parametri]

View File

@@ -0,0 +1 @@
System Folder\wxmsw30u_aui_vc100.dll

Binary file not shown.

View File

@@ -0,0 +1,24 @@
#
# Copyright 1991-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/>.
#
[splosno]
jezik=0
deli=featZRCola
[parametri]

View File

@@ -0,0 +1 @@
System (64-bit) Folder\wxmsw30u_aui_vc100_x64.dll

Binary file not shown.

View File

@@ -0,0 +1,24 @@
#
# Copyright 1991-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/>.
#
[splosno]
jezik=0
deli=featZRCola
[parametri]

View File

@@ -0,0 +1 @@
System Folder\wxmsw30ud_adv_vc100.dll

Binary file not shown.

View File

@@ -0,0 +1,24 @@
#
# Copyright 1991-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/>.
#
[splosno]
jezik=0
deli=featZRCola
[parametri]

View File

@@ -0,0 +1 @@
System (64-bit) Folder\wxmsw30ud_adv_vc100_x64.dll

Binary file not shown.

View File

@@ -0,0 +1,24 @@
#
# Copyright 1991-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/>.
#
[splosno]
jezik=0
deli=featZRCola
[parametri]

View File

@@ -0,0 +1 @@
System Folder\wxmsw30ud_aui_vc100.dll

Binary file not shown.

View File

@@ -0,0 +1,24 @@
#
# Copyright 1991-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/>.
#
[splosno]
jezik=0
deli=featZRCola
[parametri]

View File

@@ -0,0 +1 @@
System (64-bit) Folder\wxmsw30ud_aui_vc100_x64.dll

Binary file not shown.

View File

@@ -0,0 +1,24 @@
#
# Copyright 1991-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/>.
#
[splosno]
jezik=0
deli=featZRCola
[parametri]

View File

@@ -27,7 +27,7 @@
<property name="use_enum">1</property>
<property name="use_microsoft_bom">0</property>
<object class="Frame" expanded="0">
<property name="aui_managed">0</property>
<property name="aui_managed">1</property>
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
<property name="bg"></property>
<property name="center">wxBOTH</property>
@@ -153,7 +153,7 @@
<event name="OnUpdateUI"></event>
</object>
<object class="separator" expanded="0">
<property name="name">m_separatorProgram1</property>
<property name="name">separator</property>
<property name="permission">none</property>
</object>
<object class="wxMenuItem" expanded="0">
@@ -222,7 +222,7 @@
<event name="OnUpdateUI"></event>
</object>
<object class="separator" expanded="0">
<property name="name">m_separatorEdit1</property>
<property name="name">separator1</property>
<property name="permission">none</property>
</object>
<object class="wxMenuItem" expanded="0">
@@ -241,7 +241,7 @@
<event name="OnUpdateUI"></event>
</object>
<object class="separator" expanded="0">
<property name="name">m_separatorEdit2</property>
<property name="name">separator2</property>
<property name="permission">none</property>
</object>
<object class="wxMenuItem" expanded="0">
@@ -315,6 +315,60 @@
</object>
</object>
</object>
<object class="wxMenu" expanded="0">
<property name="label">&amp;View</property>
<property name="name">m_menuView</property>
<property name="permission">protected</property>
<object class="wxMenuItem" expanded="0">
<property name="bitmap"></property>
<property name="checked">0</property>
<property name="enabled">1</property>
<property name="help">Toggle edit toolbar</property>
<property name="id">wxID_TOOLBAR_EDIT</property>
<property name="kind">wxITEM_CHECK</property>
<property name="label">&amp;Edit Toolbar</property>
<property name="name">m_menuItemToolbarEdit</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="0">
<property name="bitmap"></property>
<property name="checked">0</property>
<property name="enabled">1</property>
<property name="help">Toggle compose toolbar</property>
<property name="id">wxID_TOOLBAR_COMPOSE</property>
<property name="kind">wxITEM_CHECK</property>
<property name="label">&amp;Compose Toolbar</property>
<property name="name">m_menuItemToolbarCompose</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="0">
<property name="name">separator</property>
<property name="permission">none</property>
</object>
<object class="wxMenuItem" expanded="0">
<property name="bitmap"></property>
<property name="checked">0</property>
<property name="enabled">1</property>
<property name="help">Toggle character catalog panel</property>
<property name="id">wxID_PANEL_CHRGRPS</property>
<property name="kind">wxITEM_CHECK</property>
<property name="label">Character Catalo&amp;g</property>
<property name="name">m_menuItemPanelChrGrps</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="0">
<property name="label">&amp;Help</property>
<property name="name">m_menuHelp</property>
@@ -336,19 +390,19 @@
</object>
</object>
</object>
<object class="wxToolBar" expanded="0">
<object class="wxAuiToolBar" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="LeftDockable">0</property>
<property name="RightDockable">0</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_layer">1</property>
<property name="aui_name">toolbarEdit</property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="aui_row">0</property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="bitmapsize">16,16</property>
<property name="caption"></property>
<property name="bitmapsize">-1,-1</property>
<property name="caption">Edit</property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
@@ -357,7 +411,7 @@
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="docking">Top</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
@@ -365,19 +419,20 @@
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label_visible">0</property>
<property name="margins"></property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="min_size">-1,-1</property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_toolbar</property>
<property name="name">m_toolbarEdit</property>
<property name="packing">1</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="pane_position">-1,-1</property>
<property name="pane_size">-1,-1</property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
@@ -385,10 +440,12 @@
<property name="separation">5</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxTB_HORIZONTAL</property>
<property name="style">wxAUI_TB_HORZ_LAYOUT</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="toolbar_label"></property>
<property name="toolbar_pane">1</property>
<property name="tooltip"></property>
<property name="use_explicit_ids">0</property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
@@ -478,9 +535,89 @@
<event name="OnToolRClicked"></event>
<event name="OnUpdateUI"></event>
</object>
<object class="toolSeparator" expanded="0">
<property name="permission">protected</property>
</object>
</object>
<object class="wxAuiToolBar" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">0</property>
<property name="RightDockable">0</property>
<property name="TopDockable">1</property>
<property name="aui_layer">1</property>
<property name="aui_name">toolbarCompose</property>
<property name="aui_position"></property>
<property name="aui_row">0</property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="bitmapsize">-1,-1</property>
<property name="caption">Compose</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">Top</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label_visible">0</property>
<property name="margins"></property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size">-1,-1</property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_toolbarCompose</property>
<property name="packing">1</property>
<property name="pane_border">1</property>
<property name="pane_position">-1,-1</property>
<property name="pane_size">-1,-1</property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="separation">5</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxAUI_TB_HORZ_LAYOUT</property>
<property name="subclass"></property>
<property name="toolbar_label"></property>
<property name="toolbar_pane">1</property>
<property name="tooltip"></property>
<property name="use_explicit_ids">0</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="tool" expanded="0">
<property name="bitmap">Load From Icon Resource; send_composed.ico; [24; 24]</property>
<property name="context_menu">0</property>
@@ -523,83 +660,8 @@
<event name="OnToolRClicked"></event>
<event name="OnUpdateUI"></event>
</object>
<object class="wxStaticText" 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"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Language:</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_toolDecompLanguageLbl</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<object class="toolSeparator" expanded="0">
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxALIGN_RIGHT</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
<object class="wxChoice" expanded="0">
<property name="BottomDockable">1</property>
@@ -685,96 +747,165 @@
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="wxBoxSizer" expanded="0">
<object class="CustomControl" 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">1</property>
<property name="aui_name">panelChrGrp</property>
<property name="aui_position"></property>
<property name="aui_row">1</property>
<property name="best_size">150,200</property>
<property name="bg"></property>
<property name="caption">Character Catalog</property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="class">wxZRColaCharacterCatalogPanel</property>
<property name="close_button">1</property>
<property name="construction">m_panelChrCat = new wxZRColaCharacterCatalogPanel( this );&#x0A;</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="declaration">wxZRColaCharacterCatalogPanel* m_panelChrCat;</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">class wxZRColaCharacterCatalogPanel;</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size">100,100</property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="name">bSizerMain</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">100</property>
<object class="CustomControl" 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="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>
<property name="moveable">1</property>
<property name="name">m_panelChrCat</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 class="CustomControl" 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">composerPanel</property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption">(De)Composer</property>
<property name="caption_visible">0</property>
<property name="center_pane">0</property>
<property name="class">wxZRColaComposerPanel</property>
<property name="close_button">0</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">Center</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">0</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="include">class wxZRColaComposerPanel;</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">0</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">public</property>
<property name="pin_button">0</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 class="wxStatusBar" expanded="0">
<property name="bg"></property>
@@ -1104,7 +1235,7 @@
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="permission">public</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
@@ -1570,7 +1701,7 @@
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="permission">public</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
@@ -1814,5 +1945,295 @@
</object>
</object>
</object>
<object class="Panel" expanded="0">
<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">wxZRColaCharacterCatalogPanelBase</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">ZRColaCharacterCatalog</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">bSizer</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">0</property>
<object class="wxChoice" 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="choices"></property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_choice</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnChoice">OnChoice</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 class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxGrid" 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="autosize_cols">0</property>
<property name="autosize_rows">0</property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="cell_bg">wxSYS_COLOUR_BTNFACE</property>
<property name="cell_font">00 ZRCola,90,90,20,70,0</property>
<property name="cell_horiz_alignment">wxALIGN_CENTRE</property>
<property name="cell_text"></property>
<property name="cell_vert_alignment">wxALIGN_CENTRE</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="col_label_horiz_alignment">wxALIGN_CENTRE</property>
<property name="col_label_size">0</property>
<property name="col_label_values"></property>
<property name="col_label_vert_alignment">wxALIGN_CENTRE</property>
<property name="cols">0</property>
<property name="column_sizes"></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="drag_col_move">0</property>
<property name="drag_col_size">0</property>
<property name="drag_grid_size">0</property>
<property name="drag_row_size">0</property>
<property name="editing">0</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="grid_line_color"></property>
<property name="grid_lines">0</property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label_bg"></property>
<property name="label_font"></property>
<property name="label_text"></property>
<property name="margin_height">0</property>
<property name="margin_width">0</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">35,35</property>
<property name="moveable">1</property>
<property name="name">m_grid</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="row_label_horiz_alignment">wxALIGN_CENTRE</property>
<property name="row_label_size">0</property>
<property name="row_label_values"></property>
<property name="row_label_vert_alignment">wxALIGN_CENTRE</property>
<property name="row_sizes"></property>
<property name="rows">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="subclass">wxZRColaCharGrid; zrcolachrgrid.h</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="OnGridCellChange"></event>
<event name="OnGridCellLeftClick">OnGridClick</event>
<event name="OnGridCellLeftDClick"></event>
<event name="OnGridCellRightClick"></event>
<event name="OnGridCellRightDClick"></event>
<event name="OnGridCmdCellChange"></event>
<event name="OnGridCmdCellLeftClick"></event>
<event name="OnGridCmdCellLeftDClick"></event>
<event name="OnGridCmdCellRightClick"></event>
<event name="OnGridCmdCellRightDClick"></event>
<event name="OnGridCmdColSize"></event>
<event name="OnGridCmdEditorCreated"></event>
<event name="OnGridCmdEditorHidden"></event>
<event name="OnGridCmdEditorShown"></event>
<event name="OnGridCmdLabelLeftClick"></event>
<event name="OnGridCmdLabelLeftDClick"></event>
<event name="OnGridCmdLabelRightClick"></event>
<event name="OnGridCmdLabelRightDClick"></event>
<event name="OnGridCmdRangeSelect"></event>
<event name="OnGridCmdRowSize"></event>
<event name="OnGridCmdSelectCell"></event>
<event name="OnGridColSize"></event>
<event name="OnGridEditorCreated"></event>
<event name="OnGridEditorHidden"></event>
<event name="OnGridEditorShown"></event>
<event name="OnGridLabelLeftClick"></event>
<event name="OnGridLabelLeftDClick"></event>
<event name="OnGridLabelRightClick"></event>
<event name="OnGridLabelRightDClick"></event>
<event name="OnGridRangeSelect"></event>
<event name="OnGridRowSize"></event>
<event name="OnGridSelectCell"></event>
<event name="OnKeyDown">OnGridKeyDown</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>
</wxFormBuilder_Project>

View File

@@ -81,6 +81,8 @@
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="zrcolaapp.cpp" />
<ClCompile Include="zrcolachrcatpnl.cpp" />
<ClCompile Include="zrcolachrgrid.cpp" />
<ClCompile Include="zrcolacomppnl.cpp" />
<ClCompile Include="zrcolafrm.cpp" />
<ClCompile Include="zrcolagui.cpp" />
@@ -89,6 +91,8 @@
<ItemGroup>
<ClInclude Include="stdafx.h" />
<ClInclude Include="zrcolaapp.h" />
<ClInclude Include="zrcolachrcatpnl.h" />
<ClInclude Include="zrcolachrgrid.h" />
<ClInclude Include="zrcolacomppnl.h" />
<ClInclude Include="zrcolafrm.h" />
<ClInclude Include="zrcolagui.h" />

View File

@@ -37,6 +37,12 @@
<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>
</ItemGroup>
<ItemGroup>
<ClInclude Include="stdafx.h">
@@ -57,6 +63,12 @@
<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>
</ItemGroup>
<ItemGroup>
<None Include="res\zrcola.ico">

View File

@@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: ZRCola\n"
"POT-Creation-Date: 2016-04-29 12:50+0200\n"
"PO-Revision-Date: 2016-04-29 12:50+0200\n"
"POT-Creation-Date: 2016-05-06 14:24+0200\n"
"PO-Revision-Date: 2016-05-06 14:24+0200\n"
"Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n"
"Language-Team: Amebis, d. o. o., Kamnik <info@amebis.si>\n"
"Language: sl_SI\n"
@@ -17,12 +17,156 @@ msgstr ""
"X-Poedit-KeywordsList: _\n"
"X-Poedit-SearchPath-0: .\n"
#: zrcolafrm.cpp:76
#: zrcolaapp.cpp:155
msgid "Esc"
msgstr "Esc"
#: zrcolaapp.cpp:157
msgid "F1"
msgstr "F1"
#: zrcolaapp.cpp:158
msgid "F2"
msgstr "F2"
#: zrcolaapp.cpp:159
msgid "F3"
msgstr "F3"
#: zrcolaapp.cpp:160
msgid "F4"
msgstr "F4"
#: zrcolaapp.cpp:161
msgid "F5"
msgstr "F5"
#: zrcolaapp.cpp:162
msgid "F6"
msgstr "F6"
#: zrcolaapp.cpp:163
msgid "F7"
msgstr "F7"
#: zrcolaapp.cpp:164
msgid "F8"
msgstr "F8"
#: zrcolaapp.cpp:165
msgid "F9"
msgstr "F9"
#: zrcolaapp.cpp:166
msgid "F10"
msgstr "F10"
#: zrcolaapp.cpp:167
msgid "F11"
msgstr "F11"
#: zrcolaapp.cpp:168
msgid "F12"
msgstr "F12"
#: zrcolaapp.cpp:170
msgid "Print Screen"
msgstr "Print Screen"
#: zrcolaapp.cpp:171
msgid "Scroll Lock"
msgstr "Scroll Lock"
#: zrcolaapp.cpp:172
msgid "Pause"
msgstr "Pause"
#: zrcolaapp.cpp:174
msgid "Backspace"
msgstr "Backspace"
#: zrcolaapp.cpp:175
msgid "Tab"
msgstr "Tab"
#: zrcolaapp.cpp:176
msgid "Caps Lock"
msgstr "Caps Lock"
#: zrcolaapp.cpp:177
msgid "Return"
msgstr "Return"
#: zrcolaapp.cpp:178
msgid "Space"
msgstr "preslednica"
#: zrcolaapp.cpp:180
msgid "Shift"
msgstr "Shift"
#: zrcolaapp.cpp:181
msgid "Alt"
msgstr "Alt"
#: zrcolaapp.cpp:182
msgid "Ctrl"
msgstr "Ctrl"
#: zrcolaapp.cpp:183
msgid "Menu"
msgstr "Menu"
#: zrcolaapp.cpp:185
msgid "Insert"
msgstr "Insert"
#: zrcolaapp.cpp:186
msgid "Delete"
msgstr "Delete"
#: zrcolaapp.cpp:187
msgid "Page Up"
msgstr "Page Up"
#: zrcolaapp.cpp:188
msgid "Page Down"
msgstr "Page Down"
#: zrcolaapp.cpp:189
msgid "Home"
msgstr "Home"
#: zrcolaapp.cpp:190
msgid "End"
msgstr "End"
#: zrcolaapp.cpp:192
msgid "Left"
msgstr "Left"
#: zrcolaapp.cpp:193
msgid "Up"
msgstr "Up"
#: zrcolaapp.cpp:194
msgid "Right"
msgstr "Right"
#: zrcolaapp.cpp:195
msgid "Down"
msgstr "Down"
#: zrcolaapp.cpp:197
msgid "Num Lock"
msgstr "Num Lock"
#: zrcolafrm.cpp:91
#, c-format
msgid "Select %s language for decomposition"
msgstr "Izberi jezik %s za razstavljanje"
#: zrcolafrm.cpp:87
#: zrcolafrm.cpp:110
msgid ""
"ZRCola keyboard shortcut Win+F5 could not be registered. Some functionality "
"will not be available."
@@ -30,11 +174,11 @@ msgstr ""
"ZRColine bližnjice na tipkovnici Win+F5 ni mogoče registrirati. Nekaj "
"funkcionalnosti ne bo na voljo."
#: zrcolafrm.cpp:87 zrcolafrm.cpp:89
#: zrcolafrm.cpp:110 zrcolafrm.cpp:112
msgid "Warning"
msgstr "Opozorilo"
#: zrcolafrm.cpp:89
#: zrcolafrm.cpp:112
msgid ""
"ZRCola keyboard shortcut Win+F6 could not be registered. Some functionality "
"will not be available."
@@ -42,11 +186,11 @@ msgstr ""
"ZRColine bližnjice na tipkovnici Win+F6 ni mogoče registrirati. Nekaj "
"funkcionalnosti ne bo na voljo."
#: zrcolafrm.cpp:151
#: zrcolafrm.cpp:187
msgid "Start ZRCola automatically on logon"
msgstr "Samodejno zaženi ZRColo ob prijavi"
#: zrcolafrm.cpp:309
#: zrcolafrm.cpp:399
#, c-format
msgid ""
"ZRCola v%s\n"
@@ -55,156 +199,246 @@ msgstr ""
"ZRCola v%s\n"
"Vse pravice pridržane 2015-%s Amebis"
#: zrcolafrm.cpp:309
#: zrcolafrm.cpp:399
msgid "About ZRCola"
msgstr "O ZRColi"
#: zrcolagui.cpp:32
#: zrcolagui.cpp:36
msgid "&Start on Logon"
msgstr "Z&aženi ob prijavi"
#: zrcolagui.cpp:32
#: zrcolagui.cpp:36
msgid "Start this program automatically on logon"
msgstr "Samodejno zaženi ta program ob prijavi"
#: zrcolagui.cpp:38
#: zrcolagui.cpp:42
msgid "E&xit"
msgstr "I&zhod"
#: zrcolagui.cpp:38
#: zrcolagui.cpp:42
msgid "Quit this program"
msgstr "Zapri ta program"
#: zrcolagui.cpp:41
#: zrcolagui.cpp:45
msgid "&Program"
msgstr "&Program"
#: zrcolagui.cpp:74
#: zrcolagui.cpp:78
msgid "Select &All"
msgstr "Izberi &vse"
#: zrcolagui.cpp:74
#: zrcolagui.cpp:78
msgid "Select all text"
msgstr "Izberi celotno besedilo"
#: zrcolagui.cpp:80
#: zrcolagui.cpp:84
msgid "&Send Composed"
msgstr "Pošlji &sestavljeno"
#: zrcolagui.cpp:80 zrcolagui.cpp:137
#: zrcolagui.cpp:84 zrcolagui.cpp:159
msgid "Send composed text to source window"
msgstr "Pošlji sestavljeno besedilo izvornemu oknu"
#: zrcolagui.cpp:89
#: zrcolagui.cpp:93
msgid "Send &Decomposed"
msgstr "Pošlji &razstavljeno"
#: zrcolagui.cpp:89 zrcolagui.cpp:139
#: zrcolagui.cpp:93 zrcolagui.cpp:161
msgid "Send decomposed text to source window"
msgstr "Pošlji razstavljeno besedilo izvornemu oknu"
#: zrcolagui.cpp:98
#: zrcolagui.cpp:102
msgid "Abort (De)composition"
msgstr "Prekini raz/sestavljanje"
#: zrcolagui.cpp:98
#: zrcolagui.cpp:102
msgid "Abort composition and return focus to source window"
msgstr "Prekini sestavljanje in vrni fokus nazaj izvornemu oknu"
#: zrcolagui.cpp:107
#: zrcolagui.cpp:111
msgid "&Language"
msgstr "&Jezik"
#: zrcolagui.cpp:109
#: zrcolagui.cpp:113
msgid "&Automatic"
msgstr "S&amodejno"
#: zrcolagui.cpp:109
#: zrcolagui.cpp:113
msgid "Set language according to keyboard layout automatically"
msgstr "Samodejno nastavi jezik glede na izbrano tipkovnico"
#: zrcolagui.cpp:116
#: zrcolagui.cpp:120
msgid "&Edit"
msgstr "Ur&edi"
#: zrcolagui.cpp:123
msgid "&Help"
msgstr "&Pomoč"
#: zrcolagui.cpp:124
msgid "&Edit Toolbar"
msgstr "Orodna vrstica za ur&ejanje"
#: zrcolagui.cpp:129
#: zrcolagui.cpp:124
msgid "Toggle edit toolbar"
msgstr "Prikaži/skrij orodno vrstico za urejanje"
#: zrcolagui.cpp:128
msgid "&Compose Toolbar"
msgstr "Orodna vrsti&ca za sestavljanje"
#: zrcolagui.cpp:128
msgid "Toggle compose toolbar"
msgstr "Prikaži/skrij orodno vrstico za sestavljanje"
#: zrcolagui.cpp:134
msgid "Character Catalo&g"
msgstr "Katalo&g znakov"
#: zrcolagui.cpp:134
msgid "Toggle character catalog panel"
msgstr "Prikaži/skrij katalog znakov"
#: zrcolagui.cpp:137
msgid "&View"
msgstr "Po&gled"
#: zrcolagui.cpp:144
msgid "&Help"
msgstr "Po&moč"
#: zrcolagui.cpp:149
msgid "Cut"
msgstr "Izreži"
#: zrcolagui.cpp:129
#: zrcolagui.cpp:149
msgid "Cut selection"
msgstr "Izreži izbor"
#: zrcolagui.cpp:131
#: zrcolagui.cpp:151
msgid "Copy"
msgstr "Kopiraj"
#: zrcolagui.cpp:131
#: zrcolagui.cpp:151
msgid "Copy selection"
msgstr "Kopiraj izbor"
#: zrcolagui.cpp:133
#: zrcolagui.cpp:153
msgid "Paste"
msgstr "Prilepi"
#: zrcolagui.cpp:133
#: zrcolagui.cpp:153
msgid "Paste selection"
msgstr "Prilepi izbor"
#: zrcolagui.cpp:137
#: zrcolagui.cpp:156
msgid "Edit"
msgstr "Urejanje"
#: zrcolagui.cpp:159
msgid "Send Composed"
msgstr "Pošlji sestavljeno"
#: zrcolagui.cpp:139
#: zrcolagui.cpp:161
msgid "Send Decomposed"
msgstr "Pošlji razstavljeno"
#: zrcolagui.cpp:141
msgid "Language:"
msgstr "Jezik:"
#: zrcolagui.cpp:170
msgid "Compose"
msgstr "Sestavljanje"
#: zrcolagui.cpp:190
#: zrcolagui.cpp:174
msgid "Character Catalog"
msgstr "Katalog znakov"
#: zrcolagui.cpp:178
msgid "(De)Composer"
msgstr "Raz/Sestavljalnik"
#: zrcolagui.cpp:213
msgid "Decomposed Text"
msgstr "Razstavljeno besedilo"
#: zrcolagui.cpp:210
#: zrcolagui.cpp:233
msgid "Decomposed Unicode Dump"
msgstr "Unicode razstavljenega"
#: zrcolagui.cpp:237
#: zrcolagui.cpp:260
msgid "Composed Text"
msgstr "Sestavljeno besedilo"
#: zrcolagui.cpp:257
#: zrcolagui.cpp:280
msgid "Composed Unicode Dump"
msgstr "Unicode sestavljenega"
#: zrcolagui.h:77 MSIBuild/En.Win32.Release.Feature-2.idtx:4
#: MSIBuild/En.Win32.Release.Shortcut-2.idtx:4
#: MSIBuild/En.x64.Release.Feature-2.idtx:4
#: MSIBuild/En.x64.Release.Shortcut-2.idtx:4
#: zrcolakeyhndlr.cpp:44
msgid ""
"INS key is pressed. Type the Unicode code of desired character now (up to "
"four hexadecimal digits: 0-9, A-F), then release INS."
msgstr ""
"Pritisnjena tipka INS. Zdaj vtpikajte kodo Unicode želenega znaka (do štiri "
"šestnajstiške števke: 0-9, A-F), nato izpustite INS."
#: zrcolagui.h:86 MSIBuild/En.Win32.Debug.Feature-2.idtx:4
#: MSIBuild/En.Win32.Debug.Shortcut-2.idtx:4
#: MSIBuild/En.x64.Debug.Feature-2.idtx:4
#: MSIBuild/En.x64.Debug.Shortcut-2.idtx:4
msgid "ZRCola"
msgstr "ZRCola"
# Windows charset for this language (decimal)
#: MSIBuild/En.Win32.Release.Feature-2.idtx:3
#: MSIBuild/En.Win32.Release.Shortcut-2.idtx:3
#: MSIBuild/En.x64.Release.Feature-2.idtx:3
#: MSIBuild/En.x64.Release.Shortcut-2.idtx:3
#: MSIBuild/En.Win32.Debug.Feature-2.idtx:3
#: MSIBuild/En.Win32.Debug.Shortcut-2.idtx:3
#: MSIBuild/En.x64.Debug.Feature-2.idtx:3
#: MSIBuild/En.x64.Debug.Shortcut-2.idtx:3
msgid "1252"
msgstr "1250"
#: MSIBuild/En.Win32.Release.Feature-2.idtx:4
#: MSIBuild/En.Win32.Release.Shortcut-2.idtx:4
#: MSIBuild/En.x64.Release.Feature-2.idtx:4
#: MSIBuild/En.x64.Release.Shortcut-2.idtx:4
#: MSIBuild/En.Win32.Debug.Feature-2.idtx:4
#: MSIBuild/En.Win32.Debug.Shortcut-2.idtx:4
#: MSIBuild/En.x64.Debug.Feature-2.idtx:4
#: MSIBuild/En.x64.Debug.Shortcut-2.idtx:4
msgid "Input system for linguistic use"
msgstr "Vnašalni sistem za jezikoslovno rabo"
#~ msgid "`"
#~ msgstr "`"
#~ msgid "-"
#~ msgstr "-"
#~ msgid "+"
#~ msgstr "+"
#~ msgid "["
#~ msgstr "["
#~ msgid "]"
#~ msgstr "]"
#~ msgid ":"
#~ msgstr ":"
#~ msgid "'"
#~ msgstr "'"
#~ msgid "\\"
#~ msgstr "\\"
#~ msgid ","
#~ msgstr ","
#~ msgid "."
#~ msgstr "."
#~ msgid "/"
#~ msgstr "/"
#~ msgid "INS"
#~ msgstr "INS"
#~ msgid "Character &Groups"
#~ msgstr "Skupine &znakov"
#~ msgid "Language:"
#~ msgstr "Jezik:"
#~ msgid "&About"
#~ msgstr "O progr&amu"

View File

@@ -19,17 +19,12 @@
#pragma once
#include "../include/zrcola.h"
#include "zrcolaapp.h"
#include "zrcolacomppnl.h"
#include "zrcolafrm.h"
#include "zrcolakeyhndlr.h"
#include <wx/ffile.h>
#include <wx/msgdlg.h>
#include <wx/persist.h>
#include <wx/persist/toplevel.h>
#include <wxex/common.h>
#include <wxex/persist/auimanager.h>
#include <fstream>
#include <string>
@@ -42,3 +37,11 @@
#include <ShObjIdl.h>
#include <ShlGuid.h>
#endif
#include "../include/zrcola.h"
#include "zrcolaapp.h"
#include "zrcolachrgrid.h"
#include "zrcolachrcatpnl.h"
#include "zrcolacomppnl.h"
#include "zrcolafrm.h"
#include "zrcolakeyhndlr.h"

View File

@@ -30,7 +30,9 @@
wxIMPLEMENT_APP(ZRColaApp);
ZRColaApp::ZRColaApp() : wxApp()
ZRColaApp::ZRColaApp() :
m_mainWnd(NULL),
wxApp()
{
}
@@ -102,6 +104,14 @@ bool ZRColaApp::OnInit()
m_lang_db.idxLng.clear();
m_lang_db.data .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.idxChr.clear();
m_ks_db.idxKey.clear();
m_ks_db.data .clear();
}
}
}
@@ -112,9 +122,87 @@ bool ZRColaApp::OnInit()
wxFAIL_MSG(wxT("ZRCola.zrcdb is not a valid ZRCola database."));
}
wxZRColaFrame* mainFrame = new wxZRColaFrame();
wxPersistentRegisterAndRestore<wxZRColaFrame>(mainFrame);
mainFrame->Show();
m_mainWnd = new wxZRColaFrame();
wxPersistentRegisterAndRestore<wxZRColaFrame>(m_mainWnd);
m_mainWnd->Show();
return true;
}
bool ZRColaApp::GetKeySequenceAsText(_In_count_(seq_len) const ZRCola::keyseq_db::keyseq::key_t *seq, _In_ size_t seq_len, _Out_ wxString& str)
{
assert(seq || !seq_len);
str.Clear();
for (size_t i = 0; i < seq_len; i++) {
if (i) str += L", ";
if (seq[i].modifiers & ZRCola::keyseq_db::keyseq::CTRL ) str += L"Ctrl+";
if (seq[i].modifiers & ZRCola::keyseq_db::keyseq::ALT ) str += L"Alt+";
if (seq[i].modifiers & ZRCola::keyseq_db::keyseq::SHIFT) str += L"Shift+";
wchar_t k = seq[i].key;
#if defined(__WXMSW__)
// Translate from U.S. Keyboard to scan code.
static const HKL s_hkl = ::LoadKeyboardLayout(_T("00000409"), 0);
k = ::MapVirtualKeyEx(k, MAPVK_VK_TO_VSC, s_hkl);
// Translate from scan code to local keyboard.
k = ::MapVirtualKey(k, MAPVK_VSC_TO_VK);
#endif
switch (k) {
case 0 : return false;
case WXK_ESCAPE : str += _("Esc" ); break;
case WXK_F1 : str += _("F1" ); break;
case WXK_F2 : str += _("F2" ); break;
case WXK_F3 : str += _("F3" ); break;
case WXK_F4 : str += _("F4" ); break;
case WXK_F5 : str += _("F5" ); break;
case WXK_F6 : str += _("F6" ); break;
case WXK_F7 : str += _("F7" ); break;
case WXK_F8 : str += _("F8" ); break;
case WXK_F9 : str += _("F9" ); break;
case WXK_F10 : str += _("F10" ); break;
case WXK_F11 : str += _("F11" ); break;
case WXK_F12 : str += _("F12" ); break;
case WXK_PRINT : str += _("Print Screen"); break;
case WXK_SCROLL : str += _("Scroll Lock" ); break;
case WXK_PAUSE : str += _("Pause" ); break;
case WXK_BACK : str += _("Backspace" ); break;
case WXK_TAB : str += _("Tab" ); break;
case WXK_CAPITAL : str += _("Caps Lock" ); break;
case WXK_RETURN : str += _("Return" ); break;
case WXK_SPACE : str += _("Space" ); break;
case WXK_SHIFT : str += _("Shift" ); break;
case WXK_ALT : str += _("Alt" ); break;
case WXK_CONTROL : str += _("Ctrl" ); break;
case WXK_MENU : str += _("Menu" ); break;
case WXK_INSERT : str += _("Insert" ); break;
case WXK_DELETE : str += _("Delete" ); break;
case WXK_PAGEUP : str += _("Page Up" ); break;
case WXK_PAGEDOWN : str += _("Page Down" ); break;
case WXK_HOME : str += _("Home" ); break;
case WXK_END : str += _("End" ); break;
case WXK_LEFT : str += _("Left" ); break;
case WXK_UP : str += _("Up" ); break;
case WXK_RIGHT : str += _("Right" ); break;
case WXK_DOWN : str += _("Down" ); break;
case WXK_NUMLOCK : str += _("Num Lock" ); break;
default:
#if defined(__WXMSW__)
k = ::MapVirtualKey(k, MAPVK_VK_TO_CHAR);
#endif
str += k;
}
}
return true;
}

View File

@@ -25,11 +25,13 @@ class ZRColaApp;
#pragma once
#include "zrcolafrm.h"
#include <wx/app.h>
#include <wx/config.h>
#include <wx/intl.h>
#include <zrcola/language.h>
#include <zrcola/translate.h>
#include <zrcolaui/keyboard.h>
///
@@ -56,10 +58,40 @@ public:
inline wxString GetDatabasePath() const;
///
/// Get text representation of a given key sequence
///
/// \param[in] seq Key sequence
/// \param[in] seq_len Number of elements in \p seq
/// \param[out] str Text representation of a \p seq key sequence
///
/// \returns
/// - \c true if conversion succeeded
/// - \c false otherwise
///
static bool GetKeySequenceAsText(_In_count_(seq_len) const ZRCola::keyseq_db::keyseq::key_t *seq, _In_ size_t seq_len, _Out_ wxString& str);
///
/// Get text representation of a given key sequence
///
/// \param[in] seq Key sequence
/// \param[in] seq_len Number of elements in \p seq
///
/// \returns Text representation of a \p seq key sequence
///
static inline wxString GetKeySequenceAsText(_In_count_(seq_len) const ZRCola::keyseq_db::keyseq::key_t *seq, _In_ size_t seq_len)
{
wxString str;
return GetKeySequenceAsText(seq, seq_len, str) ? str : wxEmptyString;
}
public:
ZRCola::translation_db m_t_db; ///< Translation database
ZRCola::langchar_db m_lc_db; ///< Language character database
ZRCola::language_db m_lang_db; ///< Language database
ZRCola::keyseq_db m_ks_db; ///< Key sequence database
wxZRColaFrame *m_mainWnd; ///< Main window
protected:
wxLocale m_locale; ///< Current locale

191
ZRCola/zrcolachrcatpnl.cpp Normal file
View File

@@ -0,0 +1,191 @@
/*
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"
//////////////////////////////////////////////////////////////////////////
// wxZRColaCharacterCatalogPanel
//////////////////////////////////////////////////////////////////////////
BEGIN_EVENT_TABLE(wxZRColaCharacterCatalogPanel, wxZRColaCharacterCatalogPanelBase)
EVT_MENU(wxZRColaCharacterCatalogPanel::wxID_FOCUS_DECOMPOSED, wxZRColaCharacterCatalogPanel::OnFocusDecomposed)
END_EVENT_TABLE()
wxZRColaCharacterCatalogPanel::wxZRColaCharacterCatalogPanel(wxWindow* parent) : wxZRColaCharacterCatalogPanelBase(parent)
{
std::fstream dat((LPCTSTR)((ZRColaApp*)wxTheApp)->GetDatabasePath(), 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.idxRnk.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."));
}
if (!m_cg_db.idxRnk.empty()) {
// Populate character group list.
for (size_t i = 0, n = m_cg_db.idxRnk.size(); i < n; i++) {
const ZRCola::chrgrp_db::chrgrp &cg = m_cg_db.idxRnk[i];
wxString
label(cg.data, cg.name_len),
label_tran2(wxGetTranslation(label, wxT("ZRCola-zrcdb")));
m_choice->Insert(label_tran2, i);
}
m_cg_id = m_cg_db.idxRnk[0].id;
m_choice->Select(0);
// Update grid by simulating wxEVT_COMMAND_CHOICE_SELECTED event.
wxCommandEvent e(wxEVT_COMMAND_CHOICE_SELECTED, m_grid->GetId());
e.SetInt(0);
OnChoice(e);
}
// Register frame specific hotkey(s).
{
wxAcceleratorEntry entries[1];
entries[0].Set(wxACCEL_NORMAL, WXK_ESCAPE, wxID_FOCUS_DECOMPOSED);
SetAcceleratorTable(wxAcceleratorTable(_countof(entries), entries));
}
}
wxZRColaCharacterCatalogPanel::~wxZRColaCharacterCatalogPanel()
{
}
void wxZRColaCharacterCatalogPanel::OnChoice(wxCommandEvent& event)
{
ZRCola::chrgrp_db::chrgrp &cg = m_cg_db.idxRnk[event.GetSelection()];
m_cg_id = cg.id;
m_grid->SetCharacters(wxString(cg.data + cg.name_len, cg.char_len));
// As size of the grid might have changed, relayout the panel.
Layout();
event.Skip();
}
void wxZRColaCharacterCatalogPanel::OnGridClick(wxGridEvent& event)
{
ZRColaApp *app = (ZRColaApp*)wxTheApp;
if (app->m_mainWnd) {
app->m_mainWnd->m_panel->m_decomposed->WriteText(m_grid->GetCellValue(event.GetRow(), event.GetCol()));
app->m_mainWnd->m_panel->m_decomposed->SetFocus();
}
event.Skip();
}
void wxZRColaCharacterCatalogPanel::OnGridKeyDown(wxKeyEvent& event)
{
if (event.GetKeyCode() == WXK_RETURN) {
ZRColaApp *app = (ZRColaApp*)wxTheApp;
if (app->m_mainWnd) {
app->m_mainWnd->m_panel->m_decomposed->WriteText(m_grid->GetCellValue(m_grid->GetCursorRow(), m_grid->GetCursorColumn()));
app->m_mainWnd->m_panel->m_decomposed->SetFocus();
event.StopPropagation();
return;
}
}
event.Skip();
}
void wxZRColaCharacterCatalogPanel::OnFocusDecomposed(wxCommandEvent& event)
{
ZRColaApp *app = (ZRColaApp*)wxTheApp;
if (app->m_mainWnd) {
app->m_mainWnd->m_panel->m_decomposed->SetFocus();
event.StopPropagation();
return;
}
event.Skip();
}
//////////////////////////////////////////////////////////////////////////
// wxPersistentZRColaCharacterCatalogPanel
//////////////////////////////////////////////////////////////////////////
wxPersistentZRColaCharacterCatalogPanel::wxPersistentZRColaCharacterCatalogPanel(wxZRColaCharacterCatalogPanel *wnd) : wxPersistentWindow<wxZRColaCharacterCatalogPanel>(wnd)
{
}
wxString wxPersistentZRColaCharacterCatalogPanel::GetKind() const
{
return wxT(wxPERSIST_TLW_KIND);
}
void wxPersistentZRColaCharacterCatalogPanel::Save() const
{
const wxZRColaCharacterCatalogPanel * const wnd = static_cast<const wxZRColaCharacterCatalogPanel*>(GetWindow());
SaveValue(wxT("charGroup"), wnd->m_cg_id);
}
bool wxPersistentZRColaCharacterCatalogPanel::Restore()
{
wxZRColaCharacterCatalogPanel * const wnd = static_cast<wxZRColaCharacterCatalogPanel*>(GetWindow());
// Restore selected character group.
int cg_id;
if (RestoreValue(wxT("charGroup"), &cg_id)) {
for (size_t i = 0, n = wnd->m_cg_db.idxRnk.size(); i < n; i++) {
const ZRCola::chrgrp_db::chrgrp &cg = wnd->m_cg_db.idxRnk[i];
if (cg.id == cg_id) {
wnd->m_cg_id = cg.id;
wnd->m_choice->Select(i);
// Update grid by simulating wxEVT_COMMAND_CHOICE_SELECTED event.
wxCommandEvent e(wxEVT_COMMAND_CHOICE_SELECTED, wnd->m_grid->GetId());
e.SetInt(i);
wnd->OnChoice(e);
break;
}
}
}
return true;
}

79
ZRCola/zrcolachrcatpnl.h Normal file
View File

@@ -0,0 +1,79 @@
/*
Copyright 2015-2016 Amebis
This file is part of ZRCola.
ZRCola is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
ZRCola is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with ZRCola. If not, see <http://www.gnu.org/licenses/>.
*/
///
/// Forward declarations
///
class wxZRColaCharacterCatalogPanel;
#pragma once
#include "zrcolagui.h"
#include <zrcolaui/chargroup.h>
#include <wx/persist/window.h>
///
/// ZRCola character groups panel
///
class wxZRColaCharacterCatalogPanel : public wxZRColaCharacterCatalogPanelBase
{
public:
enum
{
wxID_FOCUS_DECOMPOSED = 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);
void OnFocusDecomposed(wxCommandEvent& event);
DECLARE_EVENT_TABLE()
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);
}

221
ZRCola/zrcolachrgrid.cpp Normal file
View File

@@ -0,0 +1,221 @@
/*
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"
//////////////////////////////////////////////////////////////////////////
// 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(wxZRColaCharacterGridRowHeight);
// Create timer for saving the state.
m_toolTipTimer = new wxTimer(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);
if (m_toolTipTimer)
delete m_toolTipTimer;
}
void wxZRColaCharGrid::Init()
{
m_isResizing = false;
m_toolTipTimer = NULL;
m_toolTipIdx = (size_t)-1;
}
void wxZRColaCharGrid::SetCharacters(const wxString &chars)
{
m_chars = chars;
// Build and set new grid data.
size_t char_len = m_chars.Length();
int rows = std::max<int>((char_len + m_numCols - 1) / m_numCols, 1);
wxGridStringTable *table = new wxGridStringTable(rows, m_numCols);
for (int r = 0, i = 0; r < rows; r++)
for (int c = 0; c < m_numCols; c++, i++)
table->SetValue(r, c, i < char_len ? wxString(1, m_chars[i]) : wxEmptyString);
SetTable(table, true);
}
wxString wxZRColaCharGrid::GetToolTipText(int idx)
{
wxASSERT_MSG(idx < m_chars.Length(), wxT("index out of bounds"));
ZRColaApp *app = (ZRColaApp*)wxTheApp;
// See if this character has a key sequence registered.
ZRCola::keyseq_db::indexKey::size_type start, end;
bool found;
ZRCola::keyseq_db::keyseq *ks = (ZRCola::keyseq_db::keyseq*)new char[sizeof(ZRCola::keyseq_db::keyseq)];
ks->chr = m_chars[idx];
ks->seq_len = 0;
found = app->m_ks_db.idxChr.find(*ks, start, end);
delete ks;
if (found) {
ZRCola::keyseq_db::keyseq &seq = app->m_ks_db.idxChr[start];
wxString ks_str;
if (ZRColaApp::GetKeySequenceAsText(seq.seq, seq.seq_len, ks_str))
return wxString::Format(wxT("U+%04X (%s)"), (int)m_chars[idx], ks_str.c_str());
}
return wxString::Format(wxT("U+%04X"), (int)m_chars[idx]);
}
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_len = m_chars.Length();
int
width = size.GetWidth() - m_rowLabelWidth - m_extraWidth,
cols = std::max<int>(width / wxZRColaCharacterGridColumnWidth, 1),
rows = std::max<int>((char_len + cols - 1) / cols, 1);
if (m_colLabelHeight + rows*wxZRColaCharacterGridRowHeight + 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 / wxZRColaCharacterGridColumnWidth, 1);
rows = std::max<int>((char_len + cols - 1) / cols, 1);
}
BeginBatch();
if (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 < char_len ? wxString(1, m_chars[i]) : wxEmptyString);
SetTable(table, true);
}
// 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;
if (event.GetKeyCode() == WXK_TAB && (parentWnd = GetParent()) != NULL) {
wxNavigationKeyEvent eventNav;
eventNav.SetDirection(!event.ShiftDown());
eventNav.SetWindowChange(event.ControlDown());
eventNav.SetEventObject(this);
if (parentWnd->HandleWindowEvent(eventNav))
return;
}
event.Skip();
}
void wxZRColaCharGrid::OnMotion(wxMouseEvent& event)
{
event.Skip();
wxPoint ptMouse(CalcUnscrolledPosition(event.GetPosition()));
int
col = XToCol(ptMouse.x - m_rowLabelWidth ),
row = YToRow(ptMouse.y - m_colLabelHeight);
if (col == wxNOT_FOUND || row == wxNOT_FOUND )
return;
size_t toolTipIdx = row*m_numCols + col;
if (toolTipIdx >= m_chars.Length()) {
// Index out of range.
m_toolTipIdx = (size_t)-1;
m_toolTipTimer->Stop();
return;
} else if (toolTipIdx != m_toolTipIdx) {
// Cell changed.
m_toolTipIdx = toolTipIdx;
wxWindow *gridWnd = GetGridWindow();
if (gridWnd->GetToolTip()) {
// The tooltip is already shown. Update it immediately.
gridWnd->SetToolTip(GetToolTipText(m_toolTipIdx));
} else {
// This must be our initial entry. Schedule tooltip display after 1s.
m_toolTipTimer->Start(1000, true);
}
}
}
void wxZRColaCharGrid::OnTooltipTimer(wxTimerEvent& event)
{
event.Skip();
if (m_toolTipIdx >= m_chars.Length())
return;
GetGridWindow()->SetToolTip(GetToolTipText(m_toolTipIdx));
}

80
ZRCola/zrcolachrgrid.h Normal file
View File

@@ -0,0 +1,80 @@
/*
Copyright 2015-2016 Amebis
This file is part of ZRCola.
ZRCola is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
ZRCola is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with ZRCola. If not, see <http://www.gnu.org/licenses/>.
*/
///
/// Forward declarations
///
class wxZRColaCharGrid;
#pragma once
#include <wx/grid.h>
///
/// Character grid layout
///
#define wxZRColaCharacterGridColumnWidth 35
#define wxZRColaCharacterGridRowHeight 35
///
/// ZRCola character grid
///
class wxZRColaCharGrid : public wxGrid
{
public:
enum
{
wxID_TOOLTIP_TIMER = 2000,
};
wxZRColaCharGrid();
wxZRColaCharGrid(wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxWANTS_CHARS, const wxString& name = wxGridNameStr);
virtual ~wxZRColaCharGrid();
///
/// Sets new array of characters to display
///
/// \param[in] chars The string containing characters to display
///
void SetCharacters(const wxString &chars);
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:
wxString m_chars; ///< Array of Unicode characters to display in the grid
private:
bool m_isResizing; ///< Prevents nesting of OnSize() method.
wxTimer *m_toolTipTimer;///< Timer for displaying tooltip
size_t m_toolTipIdx; ///< Index of cell for tooltip display
};

View File

@@ -25,7 +25,7 @@
//////////////////////////////////////////////////////////////////////////
BEGIN_EVENT_TABLE(wxZRColaComposerPanel, wxZRColaComposerPanelBase)
EVT_TIMER(wxZRColaComposerPanel::wxID_TIMER, wxZRColaComposerPanel::OnTimerTimeout)
EVT_TIMER(wxZRColaComposerPanel::wxID_CHECKPOINT_TIMER, wxZRColaComposerPanel::OnTimerTimeout)
END_EVENT_TABLE()
@@ -38,7 +38,7 @@ wxZRColaComposerPanel::wxZRColaComposerPanel(wxWindow* parent) :
m_decomposed->PushEventHandler(&m_keyhandler);
// Create timer for saving the state.
m_timer = new wxTimer(this, wxID_TIMER);
m_timer = new wxTimer(this, wxID_CHECKPOINT_TIMER);
// Restore the previously saved state (if exists).
wxString fileName(GetStateFileName());

View File

@@ -40,13 +40,12 @@ class wxZRColaComposerPanel : public wxZRColaComposerPanelBase
public:
enum
{
wxID_TIMER = 1,
wxID_CHECKPOINT_TIMER = 2000,
};
wxZRColaComposerPanel(wxWindow* parent);
virtual ~wxZRColaComposerPanel();
friend class wxZRColaFrame; // Allow main frame direct access to our members.
friend class wxPersistentZRColaComposerPanel; // Allow saving/restoring window state.
protected:

View File

@@ -29,12 +29,12 @@ wxBEGIN_EVENT_TABLE(wxZRColaFrame, wxZRColaFrameBase)
EVT_MENU (wxID_AUTOSTART , wxZRColaFrame::OnAutostart )
EVT_MENU (wxID_EXIT , wxZRColaFrame::OnExit )
EVT_UPDATE_UI_RANGE(wxID_CUT, wxID_CLEAR , wxZRColaFrame::OnForwardEventUpdate )
EVT_MENU_RANGE (wxID_CUT, wxID_CLEAR , wxZRColaFrame::OnForwardEvent )
EVT_UPDATE_UI_RANGE(wxID_CUT , wxID_CLEAR , wxZRColaFrame::OnForwardEventUpdate )
EVT_MENU_RANGE (wxID_CUT , wxID_CLEAR , wxZRColaFrame::OnForwardEvent )
EVT_UPDATE_UI (wxID_SELECTALL , wxZRColaFrame::OnForwardEventUpdate )
EVT_MENU (wxID_SELECTALL , wxZRColaFrame::OnForwardEvent )
EVT_UPDATE_UI_RANGE(wxID_SEND_COMPOSED, wxID_SEND_ABORT , wxZRColaFrame::OnSendUpdate )
EVT_UPDATE_UI_RANGE(wxID_SEND_COMPOSED , wxID_SEND_ABORT , wxZRColaFrame::OnSendUpdate )
EVT_MENU (wxID_SEND_COMPOSED , wxZRColaFrame::OnSendComposed )
EVT_MENU (wxID_SEND_DECOMPOSED , wxZRColaFrame::OnSendDecomposed )
EVT_MENU (wxID_SEND_ABORT , wxZRColaFrame::OnSendAbort )
@@ -44,6 +44,14 @@ wxBEGIN_EVENT_TABLE(wxZRColaFrame, wxZRColaFrameBase)
EVT_UPDATE_UI_RANGE(wxID_DECOMP_LANGUAGE_START, wxID_DECOMP_LANGUAGE_END, wxZRColaFrame::OnDecomposedLanguageUpdate )
EVT_MENU_RANGE (wxID_DECOMP_LANGUAGE_START, wxID_DECOMP_LANGUAGE_END, wxZRColaFrame::OnDecomposedLanguage )
EVT_UPDATE_UI (wxID_TOOLBAR_EDIT , wxZRColaFrame::OnToolbarEditUpdate )
EVT_MENU (wxID_TOOLBAR_EDIT , wxZRColaFrame::OnToolbarEdit )
EVT_UPDATE_UI (wxID_TOOLBAR_COMPOSE , wxZRColaFrame::OnToolbarComposeUpdate )
EVT_MENU (wxID_TOOLBAR_COMPOSE , wxZRColaFrame::OnToolbarCompose )
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_ABOUT , wxZRColaFrame::OnAbout )
wxEND_EVENT_TABLE()
@@ -53,6 +61,18 @@ wxZRColaFrame::wxZRColaFrame() :
m_hWndSource(NULL),
wxZRColaFrameBase(NULL)
{
{
// wxFrameBuilder 3.5 does not support wxAUI_TB_HORIZONTAL flag. Add it manually.
wxAuiPaneInfo &paneInfo = m_mgr.GetPane(m_toolbarCompose);
paneInfo.LeftDockable(false);
paneInfo.RightDockable(false);
m_toolbarCompose->SetWindowStyleFlag(m_toolbarCompose->GetWindowStyleFlag() | wxAUI_TB_HORIZONTAL);
}
// Restore the wxAuiManager's state here to keep symmetric with save in the destructor below.
// See the comment in destructor why.
wxPersistentAuiManager(&m_mgr).Restore();
// Load main window icons.
#ifdef __WINDOWS__
wxIconBundle icons;
@@ -63,20 +83,23 @@ wxZRColaFrame::wxZRColaFrame() :
SetIcon(wxICON(00_zrcola.ico));
#endif
// Populate language lists.
memcpy(m_lang, ZRCOLA_LANG_VOID, sizeof(m_lang));
ZRColaApp *app = ((ZRColaApp*)wxTheApp);
m_toolDecompLanguage->Clear();
for (size_t i = 0, n = app->m_lang_db.idxLng.size(); i < n; i++) {
const ZRCola::language_db::language &lang = app->m_lang_db.idxLng[i];
wxString
label(lang.name, lang.name_len),
label_tran(wxGetTranslation(label));
if (i < wxID_DECOMP_LANGUAGE_END - wxID_DECOMP_LANGUAGE_START + 1)
m_menuDecompLanguage->AppendRadioItem(wxID_DECOMP_LANGUAGE_START + i, label_tran, wxString::Format(_("Select %s language for decomposition"), (const wxStringCharType*)label_tran));
m_toolDecompLanguage->Insert(label_tran, i);
if (memcmp(m_lang, lang.id, sizeof(m_lang)) == 0)
m_toolDecompLanguage->Select(i);
{
// Populate language lists.
memcpy(m_lang, ZRCOLA_LANG_VOID, sizeof(m_lang));
ZRColaApp *app = ((ZRColaApp*)wxTheApp);
m_toolDecompLanguage->Clear();
wxString label1_tran(_("Select %s language for decomposition"));
for (size_t i = 0, n = app->m_lang_db.idxLng.size(); i < n; i++) {
const ZRCola::language_db::language &lang = app->m_lang_db.idxLng[i];
wxString
label(lang.name, lang.name_len),
label_tran2(wxGetTranslation(label, wxT("ZRCola-zrcdb")));
if (i < wxID_DECOMP_LANGUAGE_END - wxID_DECOMP_LANGUAGE_START + 1)
m_menuDecompLanguage->AppendRadioItem(wxID_DECOMP_LANGUAGE_START + i, label_tran2, wxString::Format(label1_tran, (const wxStringCharType*)label_tran2));
m_toolDecompLanguage->Insert(label_tran2, i);
if (memcmp(m_lang, lang.id, sizeof(m_lang)) == 0)
m_toolDecompLanguage->Select(i);
}
}
// Set focus.
@@ -107,6 +130,13 @@ wxZRColaFrame::wxZRColaFrame() :
pProfiles->Release();
}
#endif
// Register frame specific hotkey(s).
{
wxAcceleratorEntry entries[1];
entries[0].Set(wxACCEL_NORMAL, WXK_F4, wxID_FOCUS_CHARACTER_CATALOG);
SetAcceleratorTable(wxAcceleratorTable(_countof(entries), entries));
}
}
@@ -122,6 +152,10 @@ wxZRColaFrame::~wxZRColaFrame()
// Unregister global hotkey(s).
UnregisterHotKey(wxZRColaHKID_INVOKE_DECOMPOSE);
UnregisterHotKey(wxZRColaHKID_INVOKE_COMPOSE);
// Save wxAuiManager's state before return to parent's destructor.
// Since the later calls m_mgr.UnInit() the regular persistence mechanism is useless to save wxAuiManager's state.
wxPersistentAuiManager((wxAuiManager*)&m_mgr).Save();
}
@@ -179,7 +213,7 @@ void wxZRColaFrame::OnExit(wxCommandEvent& event)
void wxZRColaFrame::OnForwardEventUpdate(wxUpdateUIEvent& event)
{
wxControl *focusWnd = wxDynamicCast(FindFocus(), wxControl);
if (focusWnd && !m_toolbar->IsDescendant(focusWnd))
if (focusWnd && focusWnd->IsKindOf(wxCLASSINFO(wxTextCtrl)))
focusWnd->GetEventHandler()->ProcessEvent(event);
else
event.Enable(false);
@@ -306,6 +340,60 @@ void wxZRColaFrame::OnDecompLanguageChoice(wxCommandEvent& event)
}
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::OnToolbarComposeUpdate(wxUpdateUIEvent& event)
{
event.Check(m_mgr.GetPane(m_toolbarCompose).IsShown());
}
void wxZRColaFrame::OnToolbarCompose(wxCommandEvent& event)
{
wxAuiPaneInfo &paneInfo = m_mgr.GetPane(m_toolbarCompose);
paneInfo.Show(!paneInfo.IsShown());
m_mgr.Update();
}
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::OnAbout(wxCommandEvent& event)
{
wxMessageBox(wxString::Format(_("ZRCola v%s\nCopyright 2015-%s Amebis"), wxT(ZRCOLA_VERSION_STR), wxT(ZRCOLA_BUILD_YEAR_STR)), _("About ZRCola"), wxOK | wxICON_INFORMATION);
@@ -485,8 +573,10 @@ void wxPersistentZRColaFrame::Save() const
const wxZRColaFrame * const wnd = static_cast<const wxZRColaFrame*>(GetWindow());
wxPersistentZRColaComposerPanel(wnd->m_panel).Save();
SaveValue(wxT("langAuto"), wnd->m_lang_auto);
SaveValue(wxT("lang" ), wxString::FromAscii(wnd->m_lang, sizeof(wnd->m_lang)));
wxPersistentZRColaCharacterCatalogPanel(wnd->m_panelChrCat).Save();
SaveValue(wxT("langAuto" ), wnd->m_lang_auto);
SaveValue(wxT("lang" ), wxString::FromAscii(wnd->m_lang, sizeof(wnd->m_lang)));
wxPersistentTLW::Save();
}
@@ -518,6 +608,7 @@ bool wxPersistentZRColaFrame::Restore()
memcpy(wnd->m_lang, ZRCOLA_LANG_VOID, sizeof(wnd->m_lang));
wnd->UpdateDecomposedLanguage();
wxPersistentZRColaCharacterCatalogPanel(wnd->m_panelChrCat).Restore();
wxPersistentZRColaComposerPanel(wnd->m_panel).Restore();
return r;

View File

@@ -17,7 +17,6 @@
along with ZRCola. If not, see <http://www.gnu.org/licenses/>.
*/
///
/// Forward declarations
///
@@ -53,8 +52,9 @@ class wxZRColaFrame :
public:
enum
{
wxID_DECOMP_LANGUAGE_START = 6000,
wxID_DECOMP_LANGUAGE_END = 6099,
wxID_DECOMP_LANGUAGE_START = 6000,
wxID_DECOMP_LANGUAGE_END = 6099,
wxID_FOCUS_CHARACTER_CATALOG,
};
wxZRColaFrame();
@@ -78,6 +78,13 @@ protected:
void OnDecomposedLanguageUpdate(wxUpdateUIEvent& event);
void OnDecomposedLanguage(wxCommandEvent& event);
virtual void OnDecompLanguageChoice(wxCommandEvent& event);
void OnToolbarEditUpdate(wxUpdateUIEvent& event);
void OnToolbarEdit(wxCommandEvent& event);
void OnToolbarComposeUpdate(wxUpdateUIEvent& event);
void OnToolbarCompose(wxCommandEvent& event);
void OnPanelCharacterCatalogUpdate(wxUpdateUIEvent& event);
void OnPanelCharacterCatalog(wxCommandEvent& event);
void OnPanelCharacterCatalogFocus(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
wxDECLARE_EVENT_TABLE();

View File

@@ -7,6 +7,8 @@
#include "stdafx.h"
#include "zrcolachrgrid.h"
#include "zrcolagui.h"
// Using the construction of a static object to ensure that the help provider is set
@@ -25,6 +27,8 @@ static wxFBContextSensitiveHelpSetter s_wxFBSetTheHelpProvider;
wxZRColaFrameBase::wxZRColaFrameBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxFrame( parent, id, title, pos, size, style, name )
{
this->SetSizeHints( wxSize( 150,150 ), wxDefaultSize );
m_mgr.SetManagedWindow(this);
m_mgr.SetFlags(wxAUI_MGR_DEFAULT);
m_menubar = new wxMenuBar( 0 );
m_menuProgram = new wxMenu();
@@ -115,6 +119,23 @@ wxZRColaFrameBase::wxZRColaFrameBase( wxWindow* parent, wxWindowID id, const wxS
m_menubar->Append( m_menuEdit, _("&Edit") );
m_menuView = new wxMenu();
wxMenuItem* m_menuItemToolbarEdit;
m_menuItemToolbarEdit = new wxMenuItem( m_menuView, wxID_TOOLBAR_EDIT, wxString( _("&Edit Toolbar") ) , _("Toggle edit toolbar"), wxITEM_CHECK );
m_menuView->Append( m_menuItemToolbarEdit );
wxMenuItem* m_menuItemToolbarCompose;
m_menuItemToolbarCompose = new wxMenuItem( m_menuView, wxID_TOOLBAR_COMPOSE, wxString( _("&Compose Toolbar") ) , _("Toggle compose toolbar"), wxITEM_CHECK );
m_menuView->Append( m_menuItemToolbarCompose );
m_menuView->AppendSeparator();
wxMenuItem* m_menuItemPanelChrGrps;
m_menuItemPanelChrGrps = new wxMenuItem( m_menuView, wxID_PANEL_CHRGRPS, wxString( _("Character Catalo&g") ) , _("Toggle character catalog panel"), wxITEM_CHECK );
m_menuView->Append( m_menuItemPanelChrGrps );
m_menubar->Append( m_menuView, _("&View") );
m_menuHelp = new wxMenu();
wxMenuItem* m_menuItemAbout;
m_menuItemAbout = new wxMenuItem( m_menuHelp, wxID_ABOUT, wxString( wxEmptyString ) , wxEmptyString, wxITEM_NORMAL );
@@ -124,41 +145,41 @@ wxZRColaFrameBase::wxZRColaFrameBase( wxWindow* parent, wxWindowID id, const wxS
this->SetMenuBar( m_menubar );
m_toolbar = this->CreateToolBar( wxTB_HORIZONTAL, wxID_ANY );
m_toolbar->SetToolBitmapSize( wxSize( 16,16 ) );
m_toolEditCut = m_toolbar->AddTool( wxID_CUT, _("Cut"), wxIcon( wxT("edit_cut.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Cut"), _("Cut selection"), NULL );
m_toolbarEdit = new wxAuiToolBar( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxAUI_TB_HORZ_LAYOUT );
m_toolEditCut = m_toolbarEdit->AddTool( wxID_CUT, _("Cut"), wxIcon( wxT("edit_cut.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Cut"), _("Cut selection"), NULL );
m_toolEditCopy = m_toolbar->AddTool( wxID_COPY, _("Copy"), wxIcon( wxT("edit_copy.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Copy"), _("Copy selection"), NULL );
m_toolEditCopy = m_toolbarEdit->AddTool( wxID_COPY, _("Copy"), wxIcon( wxT("edit_copy.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Copy"), _("Copy selection"), NULL );
m_toolEditPaste = m_toolbar->AddTool( wxID_PASTE, _("Paste"), wxIcon( wxT("edit_paste.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Paste"), _("Paste selection"), NULL );
m_toolEditPaste = m_toolbarEdit->AddTool( wxID_PASTE, _("Paste"), wxIcon( wxT("edit_paste.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Paste"), _("Paste selection"), NULL );
m_toolbar->AddSeparator();
m_toolbarEdit->Realize();
m_mgr.AddPane( m_toolbarEdit, wxAuiPaneInfo().Name( wxT("toolbarEdit") ).Top().Caption( _("Edit") ).PinButton( true ).Dock().Resizable().FloatingSize( wxSize( -1,-1 ) ).LeftDockable( false ).RightDockable( false ).Row( 0 ).Layer( 1 ).ToolbarPane() );
m_toolSendComposed = m_toolbar->AddTool( wxID_SEND_COMPOSED, _("Send Composed"), wxIcon( wxT("send_composed.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Send Composed"), _("Send composed text to source window"), NULL );
m_toolbarCompose = new wxAuiToolBar( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxAUI_TB_HORZ_LAYOUT );
m_toolSendComposed = m_toolbarCompose->AddTool( wxID_SEND_COMPOSED, _("Send Composed"), wxIcon( wxT("send_composed.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Send Composed"), _("Send composed text to source window"), NULL );
m_toolSendDecomposed = m_toolbar->AddTool( wxID_SEND_DECOMPOSED, _("Send Decomposed"), wxIcon( wxT("send_decomposed.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Send Decomposed"), _("Send decomposed text to source window"), NULL );
m_toolSendDecomposed = m_toolbarCompose->AddTool( wxID_SEND_DECOMPOSED, _("Send Decomposed"), wxIcon( wxT("send_decomposed.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Send Decomposed"), _("Send decomposed text to source window"), NULL );
m_toolbarCompose->AddSeparator();
m_toolDecompLanguageLbl = new wxStaticText( m_toolbar, wxID_ANY, _("Language:"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
m_toolDecompLanguageLbl->Wrap( -1 );
m_toolbar->AddControl( m_toolDecompLanguageLbl );
wxArrayString m_toolDecompLanguageChoices;
m_toolDecompLanguage = new wxChoice( m_toolbar, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_toolDecompLanguageChoices, 0 );
m_toolDecompLanguage = new wxChoice( m_toolbarCompose, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_toolDecompLanguageChoices, 0 );
m_toolDecompLanguage->SetSelection( 0 );
m_toolbar->AddControl( m_toolDecompLanguage );
m_toolbar->Realize();
m_toolbarCompose->AddControl( m_toolDecompLanguage );
m_toolbarCompose->Realize();
m_mgr.AddPane( m_toolbarCompose, wxAuiPaneInfo().Name( wxT("toolbarCompose") ).Top().Caption( _("Compose") ).PinButton( true ).Dock().Resizable().FloatingSize( wxSize( -1,-1 ) ).LeftDockable( false ).RightDockable( false ).Row( 0 ).Layer( 1 ).ToolbarPane() );
wxBoxSizer* bSizerMain;
bSizerMain = new wxBoxSizer( wxVERTICAL );
m_panelChrCat = new wxZRColaCharacterCatalogPanel( this );
m_mgr.AddPane( m_panelChrCat, wxAuiPaneInfo() .Name( wxT("panelChrGrp") ).Left() .Caption( _("Character Catalog") ).PinButton( true ).Dock().Resizable().FloatingSize( wxDefaultSize ).Row( 1 ).BestSize( wxSize( 150,200 ) ).MinSize( wxSize( 100,100 ) ).Layer( 1 ) );
m_panel = new wxZRColaComposerPanel( this );
bSizerMain->Add( m_panel, 100, wxEXPAND, 5 );
m_mgr.AddPane( m_panel, wxAuiPaneInfo() .Name( wxT("composerPanel") ).Center() .Caption( _("(De)Composer") ).CaptionVisible( false ).CloseButton( false ).PaneBorder( false ).Dock().Resizable().FloatingSize( wxDefaultSize ).Floatable( false ) );
this->SetSizer( bSizerMain );
this->Layout();
m_statusBar = this->CreateStatusBar( 1, wxST_SIZEGRIP, wxID_ANY );
m_mgr.Update();
this->Centre( wxBOTH );
// Connect Events
@@ -170,6 +191,8 @@ wxZRColaFrameBase::~wxZRColaFrameBase()
// Disconnect Events
m_toolDecompLanguage->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( wxZRColaFrameBase::OnDecompLanguageChoice ), NULL, this );
m_mgr.UnInit();
}
wxZRColaComposerPanelBase::wxZRColaComposerPanelBase( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxPanel( parent, id, pos, size, style, name )
@@ -296,3 +319,63 @@ wxZRColaComposerPanelBase::~wxZRColaComposerPanelBase()
m_composedHex->Disconnect( wxEVT_PAINT, wxPaintEventHandler( wxZRColaComposerPanelBase::OnComposedHexPaint ), NULL, this );
}
wxZRColaCharacterCatalogPanelBase::wxZRColaCharacterCatalogPanelBase( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxPanel( parent, id, pos, size, style, name )
{
wxBoxSizer* bSizer;
bSizer = new wxBoxSizer( wxVERTICAL );
wxArrayString m_choiceChoices;
m_choice = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceChoices, 0 );
m_choice->SetSelection( 0 );
bSizer->Add( m_choice, 0, wxALL|wxEXPAND, 5 );
m_grid = new wxZRColaCharGrid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
// Grid
m_grid->CreateGrid( 0, 0 );
m_grid->EnableEditing( false );
m_grid->EnableGridLines( false );
m_grid->EnableDragGridSize( false );
m_grid->SetMargins( 0, 0 );
// Columns
m_grid->EnableDragColMove( false );
m_grid->EnableDragColSize( false );
m_grid->SetColLabelSize( 0 );
m_grid->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
// Rows
m_grid->EnableDragRowSize( false );
m_grid->SetRowLabelSize( 0 );
m_grid->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
// Label Appearance
// Cell Defaults
m_grid->SetDefaultCellBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
m_grid->SetDefaultCellFont( wxFont( 20, 70, 90, 90, false, wxT("00 ZRCola") ) );
m_grid->SetDefaultCellAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
m_grid->SetMinSize( wxSize( 35,35 ) );
bSizer->Add( m_grid, 1, wxALL|wxEXPAND, 5 );
this->SetSizer( bSizer );
this->Layout();
bSizer->Fit( this );
// Connect Events
m_choice->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( wxZRColaCharacterCatalogPanelBase::OnChoice ), NULL, this );
m_grid->Connect( wxEVT_GRID_CELL_LEFT_CLICK, wxGridEventHandler( wxZRColaCharacterCatalogPanelBase::OnGridClick ), NULL, this );
m_grid->Connect( wxEVT_KEY_DOWN, wxKeyEventHandler( wxZRColaCharacterCatalogPanelBase::OnGridKeyDown ), NULL, this );
}
wxZRColaCharacterCatalogPanelBase::~wxZRColaCharacterCatalogPanelBase()
{
// Disconnect Events
m_choice->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( wxZRColaCharacterCatalogPanelBase::OnChoice ), NULL, this );
m_grid->Disconnect( wxEVT_GRID_CELL_LEFT_CLICK, wxGridEventHandler( wxZRColaCharacterCatalogPanelBase::OnGridClick ), NULL, this );
m_grid->Disconnect( wxEVT_KEY_DOWN, wxKeyEventHandler( wxZRColaCharacterCatalogPanelBase::OnGridKeyDown ), NULL, this );
}

View File

@@ -12,6 +12,8 @@
#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>
@@ -21,17 +23,19 @@
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/stattext.h>
#include <wx/aui/aui.h>
#include <wx/aui/auibar.h>
#include <wx/choice.h>
#include <wx/toolbar.h>
#include "zrcolacomppnl.h"
#include <wx/sizer.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/grid.h>
///////////////////////////////////////////////////////////////////////////
@@ -49,23 +53,27 @@ class wxZRColaFrameBase : public wxFrame
wxID_SEND_COMPOSED,
wxID_SEND_DECOMPOSED,
wxID_SEND_ABORT,
wxID_DECOMP_LANG_AUTO
wxID_DECOMP_LANG_AUTO,
wxID_TOOLBAR_EDIT,
wxID_TOOLBAR_COMPOSE,
wxID_PANEL_CHRGRPS
};
wxMenuBar* m_menubar;
wxMenu* m_menuProgram;
wxMenu* m_menuEdit;
wxMenu* m_menuDecompLanguage;
wxMenu* m_menuView;
wxMenu* m_menuHelp;
wxToolBar* m_toolbar;
wxToolBarToolBase* m_toolEditCut;
wxToolBarToolBase* m_toolEditCopy;
wxToolBarToolBase* m_toolEditPaste;
wxToolBarToolBase* m_toolSendComposed;
wxToolBarToolBase* m_toolSendDecomposed;
wxStaticText* m_toolDecompLanguageLbl;
wxAuiToolBar* m_toolbarEdit;
wxAuiToolBarItem* m_toolEditCut;
wxAuiToolBarItem* m_toolEditCopy;
wxAuiToolBarItem* m_toolEditPaste;
wxAuiToolBar* m_toolbarCompose;
wxAuiToolBarItem* m_toolSendComposed;
wxAuiToolBarItem* m_toolSendDecomposed;
wxChoice* m_toolDecompLanguage;
wxZRColaComposerPanel* m_panel;
wxZRColaCharacterCatalogPanel* m_panelChrCat;
wxStatusBar* m_statusBar;
// Virtual event handlers, overide them in your derived class
@@ -73,8 +81,10 @@ class wxZRColaFrameBase : public wxFrame
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();
@@ -90,12 +100,10 @@ class wxZRColaComposerPanelBase : public wxPanel
protected:
wxSplitterWindow* m_splitterDecomposed;
wxPanel* m_panelDecomposedEdit;
wxTextCtrl* m_decomposed;
wxPanel* m_panelDecomposedHex;
wxTextCtrl* m_decomposedHex;
wxSplitterWindow* m_splitterComposed;
wxPanel* m_panelComposedEdit;
wxTextCtrl* m_composed;
wxPanel* m_panelComposedHex;
wxTextCtrl* m_composedHex;
@@ -109,6 +117,8 @@ class wxZRColaComposerPanelBase : public wxPanel
public:
wxTextCtrl* m_decomposed;
wxTextCtrl* m_composed;
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();
@@ -127,4 +137,28 @@ class wxZRColaComposerPanelBase : public wxPanel
};
///////////////////////////////////////////////////////////////////////////////
/// Class wxZRColaCharacterCatalogPanelBase
///////////////////////////////////////////////////////////////////////////////
class wxZRColaCharacterCatalogPanelBase : public wxPanel
{
private:
protected:
wxChoice* m_choice;
wxZRColaCharGrid* m_grid;
// 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(); }
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();
};
#endif //__ZRCOLAGUI_H__

View File

@@ -24,29 +24,10 @@
// wxZRColaKeyHandler
//////////////////////////////////////////////////////////////////////////
wxZRColaKeyHandler::wxZRColaKeyHandler() : wxEvtHandler()
wxZRColaKeyHandler::wxZRColaKeyHandler() :
m_is_insert(false),
wxEvtHandler()
{
std::fstream dat((LPCTSTR)((ZRColaApp*)wxTheApp)->GetDatabasePath(), 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::keyseq_rec rec(m_ks_db);
if (rec.find(dat, size)) {
dat >> rec;
if (!dat.good()) {
wxFAIL_MSG(wxT("Error reading translation data from ZRCola.zrcdb."));
m_ks_db.idxChr.clear();
m_ks_db.idxKey.clear();
m_ks_db.data .clear();
}
} else
wxFAIL_MSG(wxT("ZRCola.zrcdb has no translation data."));
}
} else
wxFAIL_MSG(wxT("ZRCola.zrcdb is not a valid ZRCola database."));
}
}
@@ -55,15 +36,50 @@ bool wxZRColaKeyHandler::ProcessEvent(wxEvent& event)
if (event.GetEventType() == wxEVT_KEY_DOWN) {
// The character event occured.
wxKeyEvent &e = (wxKeyEvent&)event;
if (e.GetUnicodeKey() || !e.HasAnyModifiers()) {
if (e.GetKeyCode() == WXK_INSERT) {
// Insert key has been pressed.
m_is_insert = true;
wxFrame *pFrame = wxDynamicCast(((ZRColaApp*)wxTheApp)->m_mainWnd, wxFrame);
if (pFrame && pFrame->GetStatusBar())
pFrame->SetStatusText(_("INS key is pressed. Type the Unicode code of desired character now (up to four hexadecimal digits: 0-9, A-F), then release INS."));
} else if (m_is_insert) {
wxChar chr = e.GetUnicodeKey();
wxFrame *pFrame = wxDynamicCast(((ZRColaApp*)wxTheApp)->m_mainWnd, wxFrame);
if (('0' <= chr && chr <= '9' || 'A' <= chr && chr <= 'F') && m_insert_seq.size() < 4) {
// A hex-digit pressed. Save it.
m_insert_seq.push_back((char)chr);
if (pFrame && pFrame->GetStatusBar())
pFrame->SetStatusText(wxString::Format(wxT("U+%s"), (const wxStringCharType*)wxString(m_insert_seq.data(), m_insert_seq.size())));
event.StopPropagation();
return true;
} else {
// Not a hex-digit.
m_is_insert = false;
m_insert_seq.clear();
if (pFrame && pFrame->GetStatusBar())
pFrame->SetStatusText(wxEmptyString);
}
} else if (e.GetUnicodeKey() || !e.HasAnyModifiers()) {
ZRColaApp *app = (ZRColaApp*)wxTheApp;
ZRCola::keyseq_db::indexKey::size_type start, end;
bool found;
wxFrame *pFrame = wxDynamicCast(wxTheApp->GetTopWindow(), wxFrame);
wxFrame *pFrame = wxDynamicCast(app->m_mainWnd, wxFrame);
{
// Parse key event and save it at the end of the key sequence.
ZRCola::keyseq_db::keyseq::key_t key;
key.key = e.GetRawKeyCode();
#if defined(__WXMSW__)
// Translate from local keyboard to scan code.
key.key = ::MapVirtualKey(key.key, MAPVK_VK_TO_VSC);
// Translate from scan code to U.S. Keyboard.
static const HKL s_hkl = ::LoadKeyboardLayout(_T("00000409"), 0);
key.key = ::MapVirtualKeyEx(key.key, MAPVK_VSC_TO_VK, s_hkl);
#endif
key.modifiers =
(e.ShiftDown() ? ZRCola::keyseq_db::keyseq::SHIFT : 0) |
(e.ControlDown() ? ZRCola::keyseq_db::keyseq::CTRL : 0) |
@@ -75,13 +91,13 @@ bool wxZRColaKeyHandler::ProcessEvent(wxEvent& event)
ks->chr = 0;
ks->seq_len = n;
memcpy(ks->seq, m_seq.data(), sizeof(ZRCola::keyseq_db::keyseq::key_t)*n);
found = m_ks_db.idxKey.find(*ks, start, end);
found = app->m_ks_db.idxKey.find(*ks, start, end);
delete ks;
}
if (found) {
// The exact key sequence found.
const ZRCola::keyseq_db::keyseq &ks = m_ks_db.idxKey[start];
const ZRCola::keyseq_db::keyseq &ks = app->m_ks_db.idxKey[start];
m_seq.clear();
if (pFrame && pFrame->GetStatusBar())
@@ -96,12 +112,12 @@ bool wxZRColaKeyHandler::ProcessEvent(wxEvent& event)
event.StopPropagation();
return true;
}
} else if (start < m_ks_db.idxKey.size() &&
ZRCola::keyseq_db::keyseq::CompareSequence(m_seq.data(), m_seq.size(), m_ks_db.idxKey[start].seq, std::min<unsigned __int16>(m_ks_db.idxKey[start].seq_len, m_seq.size())) == 0)
} else if (start < app->m_ks_db.idxKey.size() &&
ZRCola::keyseq_db::keyseq::CompareSequence(m_seq.data(), m_seq.size(), app->m_ks_db.idxKey[start].seq, std::min<unsigned __int16>(app->m_ks_db.idxKey[start].seq_len, m_seq.size())) == 0)
{
// The sequence is a partial match. Continue watching.
if (pFrame && pFrame->GetStatusBar())
pFrame->SetStatusText(ZRCola::keyseq_db::GetSequenceAsText(m_seq.data(), m_seq.size()));
pFrame->SetStatusText(ZRColaApp::GetKeySequenceAsText(m_seq.data(), m_seq.size()));
event.StopPropagation();
return true;
@@ -113,6 +129,36 @@ bool wxZRColaKeyHandler::ProcessEvent(wxEvent& event)
pFrame->SetStatusText(wxEmptyString);
}
}
} else if (event.GetEventType() == wxEVT_KEY_UP) {
wxKeyEvent &e = (wxKeyEvent&)event;
if (e.GetKeyCode() == WXK_INSERT && m_is_insert) {
// Insert key has been depressed.
wxFrame *pFrame = wxDynamicCast(((ZRColaApp*)wxTheApp)->m_mainWnd, wxFrame);
if (pFrame && pFrame->GetStatusBar())
pFrame->SetStatusText(wxEmptyString);
std::vector<char>::size_type count = m_insert_seq.size();
if (count) {
// Zero terminate sequence and parse the Unicode value.
m_insert_seq.push_back(0);
wchar_t chr = strtoul(m_insert_seq.data(), NULL, 16);
if (chr) {
wxObject *obj = event.GetEventObject();
if (obj && obj->IsKindOf(wxCLASSINFO(wxTextCtrl))) {
// Push text to source control.
((wxTextCtrl*)obj)->WriteText(chr);
}
}
m_insert_seq.clear();
}
m_is_insert = false;
event.StopPropagation();
return true;
}
}
return wxEvtHandler::ProcessEvent(event);

View File

@@ -25,7 +25,6 @@ class wxZRColaKeyHandler;
#pragma once
#include <zrcolaui/keyboard.h>
#include <wx/event.h>
#include <vector>
@@ -41,6 +40,7 @@ public:
virtual bool ProcessEvent(wxEvent& event);
protected:
ZRCola::keyseq_db m_ks_db; ///< Key sequence database
std::vector<ZRCola::keyseq_db::keyseq::key_t> m_seq; ///< Key sequence
bool m_is_insert; ///< Is Insert key pressed?
std::vector<char> m_insert_seq; ///< The Insert char sequence
};

View File

@@ -27,6 +27,12 @@ ZRCola::DBSource::DBSource()
ZRCola::DBSource::~DBSource()
{
if (m_pCharacterGroup1)
m_pCharacterGroup1.Release();
if (m_comCharacterGroup)
m_comCharacterGroup.Release();
if (m_db)
m_db->Close();
@@ -53,6 +59,23 @@ bool ZRCola::DBSource::Open(LPCTSTR filename)
// Database open and ready.
m_filename = filename;
m_locale = _create_locale(LC_ALL, "Slovenian_Slovenia.1250");
wxASSERT_MSG(!m_comCharacterGroup, wxT("ADO command already created"));
// Create ADO command(s).
wxVERIFY(SUCCEEDED(::CoCreateInstance(CLSID_CADOCommand, NULL, CLSCTX_ALL, IID_IADOCommand, (LPVOID*)&m_comCharacterGroup)));
wxVERIFY(SUCCEEDED(m_comCharacterGroup->put_ActiveConnection(ATL::CComVariant(m_db))));
wxVERIFY(SUCCEEDED(m_comCharacterGroup->put_CommandType(adCmdText)));
wxVERIFY(SUCCEEDED(m_comCharacterGroup->put_CommandText(ATL::CComBSTR(L"SELECT [Znak] FROM [VRS_SkupineZnakov] WHERE [Skupina]=? ORDER BY [Rang] ASC, [Znak] ASC"))));
{
// Create and add command parameters.
ATL::CComPtr<ADOParameters> params;
wxVERIFY(SUCCEEDED(m_comCharacterGroup->get_Parameters(&params)));
wxASSERT_MSG(!m_pCharacterGroup1, wxT("ADO command parameter already created"));
wxVERIFY(SUCCEEDED(m_comCharacterGroup->CreateParameter(ATL::CComBSTR(L"@Skupina"), adVarWChar, adParamInput, 50, ATL::CComVariant(DISP_E_PARAMNOTFOUND, VT_ERROR), &m_pCharacterGroup1)));
wxVERIFY(SUCCEEDED(params->Append(m_pCharacterGroup1)));
}
return true;
} else {
_ftprintf(stderr, wxT("%s: error ZCC0011: Could not open database (0x%x).\n"), (LPCTSTR)filename, hr);
@@ -504,3 +527,86 @@ bool ZRCola::DBSource::GetLanguageCharacter(const ATL::CComPtr<ADORecordset>& rs
return true;
}
bool ZRCola::DBSource::SelectCharacterGroups(ATL::CComPtr<ADORecordset>& rs) const
{
// Create a new recordset.
if (rs) rs.Release();
wxCHECK(SUCCEEDED(::CoCreateInstance(CLSID_CADORecordset, NULL, CLSCTX_ALL, IID_IADORecordset, (LPVOID*)&rs)), false);
// Open it.
if (FAILED(rs->Open(ATL::CComVariant(
L"SELECT DISTINCT [id], [Skupina], [opis_en], [Rang] "
L"FROM [VRS_SkupinaZnakov] "
L"ORDER BY [Rang], [opis_en]"), ATL::CComVariant(m_db), adOpenStatic, adLockReadOnly, adCmdText)))
{
_ftprintf(stderr, wxT("%s: error ZCC0090: Error loading character groups from database. Please make sure the file is ZRCola.zrc compatible.\n"), m_filename.c_str());
LogErrors();
return false;
}
return true;
}
bool ZRCola::DBSource::GetCharacterGroup(const ATL::CComPtr<ADORecordset>& rs, chrgrp& cg) const
{
wxASSERT_MSG(rs, wxT("recordset is empty"));
ATL::CComPtr<ADOFields> flds;
wxVERIFY(SUCCEEDED(rs->get_Fields(&flds)));
std::wstring id;
{
ATL::CComPtr<ADOField> f;
wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"id"), &f)));
wxCHECK(GetValue(f, cg.id), false);
}
{
ATL::CComPtr<ADOField> f;
wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"Skupina"), &f)));
wxCHECK(GetValue(f, id), false);
}
{
ATL::CComPtr<ADOField> f;
wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"Rang"), &f)));
wxCHECK(GetValue(f, cg.rank), false);
}
{
ATL::CComPtr<ADOField> f;
wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"opis_en"), &f)));
wxCHECK(GetValue(f, cg.name), false);
}
// Read character list from database.
wxVERIFY(SUCCEEDED(m_pCharacterGroup1->put_Value(ATL::CComVariant(id.c_str()))));
ATL::CComPtr<ADORecordset> rs_chars;
wxVERIFY(SUCCEEDED(::CoCreateInstance(CLSID_CADORecordset, NULL, CLSCTX_ALL, IID_IADORecordset, (LPVOID*)&rs_chars)));
wxVERIFY(SUCCEEDED(rs_chars->put_CursorLocation(adUseClient)));
wxVERIFY(SUCCEEDED(rs_chars->put_CursorType(adOpenForwardOnly)));
wxVERIFY(SUCCEEDED(rs_chars->put_LockType(adLockReadOnly)));
if (FAILED(rs_chars->Open(ATL::CComVariant(m_comCharacterGroup), ATL::CComVariant(DISP_E_PARAMNOTFOUND, VT_ERROR)))) {
_ftprintf(stderr, wxT("%s: error ZCC0100: Error loading character group characters from database. Please make sure the file is ZRCola.zrc compatible.\n"), m_filename.c_str());
LogErrors();
return false;
}
{
cg.chars.clear();
ATL::CComPtr<ADOFields> flds;
wxVERIFY(SUCCEEDED(rs_chars->get_Fields(&flds)));
ATL::CComPtr<ADOField> f;
wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"Znak"), &f)));
for (VARIANT_BOOL eof = VARIANT_TRUE; SUCCEEDED(rs_chars->get_EOF(&eof)) && !eof; rs_chars->MoveNext()) {
wchar_t c;
wxCHECK(GetUnicodeCharacter(f, c), false);
cg.chars += c;
}
}
return true;
}

View File

@@ -39,9 +39,9 @@ namespace ZRCola {
///
class translation {
public:
wchar_t chr; ///< Composed character
std::wstring str; ///< Decomposed string
int rank; ///< Decomposition rank
wchar_t chr; ///< Composed character
std::wstring str; ///< Decomposed string
int rank; ///< Decomposition rank
};
@@ -85,6 +85,19 @@ namespace ZRCola {
ZRCola::langid_t lang; ///< Language ID
};
///
/// Character group
///
class chrgrp {
public:
int id; ///< Character group ID
int rank; ///< Character group rank
std::wstring name; ///< Character group name
std::wstring chars; ///< Character group characters
};
public:
DBSource();
virtual ~DBSource();
@@ -328,9 +341,37 @@ namespace ZRCola {
///
bool GetLanguageCharacter(const ATL::CComPtr<ADORecordset>& rs, langchar& lc) const;
///
/// Returns character groups
///
/// \param[out] rs Recordset with results
///
/// \returns
/// - true when query succeeds
/// - false otherwise
///
bool SelectCharacterGroups(ATL::CComPtr<ADORecordset>& rs) const;
///
/// Returns character group data
///
/// \param[in] rs Recordset with results
/// \param[out] cg Character group
///
/// \returns
/// - true when succeeded
/// - false otherwise
///
bool GetCharacterGroup(const ATL::CComPtr<ADORecordset>& rs, chrgrp& cg) const;
protected:
std::basic_string<TCHAR> m_filename; ///< Database filename
ATL::CComPtr<ADOConnection> m_db; ///< Database
_locale_t m_locale; ///< Database locale
ATL::CComPtr<ADOCommand> m_comCharacterGroup; ///< ADO Command for GetCharacterGroup subquery
ATL::CComPtr<ADOParameter> m_pCharacterGroup1; ///< \c m_comCharacterGroup parameter
};
};

View File

@@ -243,6 +243,56 @@ inline std::ostream& operator <<(std::ostream& stream, const ZRCola::langchar_db
}
///
/// Writes character group database to a stream
///
/// \param[in] stream Output stream
/// \param[in] db Character group database
///
/// \returns The stream \p stream
///
inline std::ostream& operator <<(std::ostream& stream, const ZRCola::chrgrp_db &db)
{
unsigned __int32 count;
// Write index count.
ZRCola::keyseq_db::indexChr::size_type ks_count = db.idxRnk.size();
#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__)
// 4G check
if (ks_count > 0xffffffff) {
stream.setstate(std::ios_base::failbit);
return stream;
}
#endif
if (stream.fail()) return stream;
count = (unsigned __int32)ks_count;
stream.write((const char*)&count, sizeof(count));
// Write rank index.
if (stream.fail()) return stream;
stream.write((const char*)db.idxRnk.data(), sizeof(unsigned __int32)*count);
// Write data count.
std::vector<unsigned __int16>::size_type data_count = db.data.size();
#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__)
// 4G check
if (data_count > 0xffffffff) {
stream.setstate(std::ios_base::failbit);
return stream;
}
#endif
if (stream.fail()) return stream;
count = (unsigned __int32)data_count;
stream.write((const char*)&count, sizeof(count));
// Write data.
if (stream.fail()) return stream;
stream.write((const char*)db.data.data(), sizeof(unsigned __int16)*count);
return stream;
}
///
/// Main function
///
@@ -549,6 +599,63 @@ int _tmain(int argc, _TCHAR *argv[])
}
}
{
// Get character groups.
ATL::CComPtr<ADORecordset> rs;
if (src.SelectCharacterGroups(rs)) {
size_t count = src.GetRecordsetCount(rs);
if (count < 0xffffffff) { // 4G check (-1 is reserved for error condition)
ZRCola::DBSource::chrgrp cg;
ZRCola::chrgrp_db db;
// Preallocate memory.
db.idxRnk.reserve(count);
db.data .reserve(count*4);
// Parse character groups and build index and data.
while (!ZRCola::DBSource::IsEOF(rs)) {
// Read character group from the database.
if (src.GetCharacterGroup(rs, cg)) {
// Add character group to index and data.
unsigned __int32 idx = db.data.size();
wxASSERT_MSG((int)0xffff8000 <= cg.id && cg.id <= (int)0x00007fff, wxT("character group ID out of bounds"));
db.data.push_back((unsigned __int16)cg.id);
wxASSERT_MSG((int)0xffff8000 <= cg.rank && cg.rank <= (int)0x00007fff, wxT("character group rank out of bounds"));
db.data.push_back((unsigned __int16)cg.rank);
std::wstring::size_type n_name = cg.name.length();
wxASSERT_MSG(n_name <= 0xffff, wxT("character group name too long"));
db.data.push_back((unsigned __int16)n_name);
std::wstring::size_type n_char = cg.chars.length();
wxASSERT_MSG(n_char <= 0xffff, wxT("too many character group characters"));
db.data.push_back((unsigned __int16)n_char);
for (std::wstring::size_type i = 0; i < n_name; i++)
db.data.push_back(cg.name[i]);
for (std::wstring::size_type i = 0; i < n_char; i++)
db.data.push_back(cg.chars[i]);
db.idxRnk.push_back(idx);
if (build_pot)
pot.insert(cg.name);
} else
has_errors = true;
wxVERIFY(SUCCEEDED(rs->MoveNext()));
}
// Sort indices.
db.idxRnk.sort();
// Write character groups to file.
dst << ZRCola::chrgrp_rec(db);
} else {
_ftprintf(stderr, wxT("%s: error ZCC0015: Error getting character group count from database or too many character groups.\n"), (LPCTSTR)filenameIn.c_str());
has_errors = true;
}
} else {
_ftprintf(stderr, wxT("%s: error ZCC0014: Error getting character groups from database. Please make sure the file is ZRCola.zrc compatible.\n"), (LPCTSTR)filenameIn.c_str());
has_errors = true;
}
}
stdex::idrec::close<ZRCola::recordid_t, ZRCola::recordsize_t, ZRCOLA_RECORD_ALIGN>(dst, dst_start);
if (dst.fail()) {

View File

@@ -26,6 +26,7 @@
#include <zrcola/language.h>
#include <zrcola/translate.h>
#include <zrcolaui/chargroup.h>
#include <zrcolaui/keyboard.h>
#include <wx/app.h>
@@ -41,6 +42,7 @@
#include <initguid.h> // GUID helper to prevent LNK2001 errors (unresolved external symbol IID_IADO...)
#include <adoint.h>
#include <adoid.h>
#include <atlcomcli.h>
#include <tchar.h>

View File

@@ -223,6 +223,7 @@
this.sym >= "E000" && this.sym <= "E05B" || // 1st Set of Modifiers
this.sym >= "E063" && this.sym <= "E0BB" || // 2nd Set of Modifiers
this.sym == "003A" || // Colon
this.sym == "02DE" || // Rhotic Hook
this.sym == "2019") // Right Single Quotation Mark
{
desc += (desc.length ? " AND " : "") + this.desc;
@@ -244,9 +245,12 @@
var desc = "";
for (;;) {
if (
this.sym == "E0C0" || // Circle
this.sym == "E0C2" || // Square
this.sym == "E0CA") // Diamond
this.sym == "E0C0" || // Circle
//this.sym == "E0C1" || // Two Characters in Circle
this.sym == "E0C2" || // Square
//this.sym == "E0C3" || // Two Characters in Square
this.sym == "E0CA" || // Diamond
this.sym == "E0CD") // Not Circle
{
desc += (desc.length ? " AND " : "") + this.desc;
this.nextChar();
@@ -278,6 +282,9 @@
if (desc = this.parentheses("E0C5", "E0C6", "SUPERSCRIPTED")) {
// Superscript
return desc;
} else if (desc = this.parentheses("E0CE", "E0CF", "SUBSCRIPTED")) {
// Subscript
return desc;
} else if (desc = this.parentheses("E2E0", "E2E1", "EVA DOUBLED")) {
// EVA Double
return desc;
@@ -346,35 +353,41 @@
ZRColaDecompositionParser.prototype.expression = function()
{
var desc = "";
if (this.sym >= "E0F0" && this.sym <= "E0FC") {
// Prefix modifier
desc += this.desc + " ";
if (this.sym >= "E0F0" && this.sym <= "E0F3" || this.sym >= "E0F8" && this.sym <= "E0FC") {
// Prefix modifier (with prefix description)
var desc = this.desc;
this.nextChar();
}
desc += this.term();
while (
this.sym >= "E05C" && this.sym <= "E062" ||
this.sym == "E0C1" || this.sym == "E0C3" || this.sym == "E0C7" || this.sym == "E0CB" || this.sym == "E0D0" || this.sym == "E0D1")
{
// Joiner
desc += " " + this.desc + " WITH ";
return desc + " " + this.expression();
} else if (this.sym == "E0F6") {
// Prefix modifier (with postfix description)
var desc = this.desc;
this.nextChar();
var desc2 = "";
for (;;) {
var desc3;
if (desc3 = this.modifiers())
desc2 += (desc2.length ? " AND " : " WITH ") + desc3;
else if (desc3 = this.envelopes())
desc2 += " IN " + desc3;
else
break;
return this.expression() + " " + desc;
} else {
var desc = this.term();
while (
this.sym >= "E05C" && this.sym <= "E062" ||
this.sym == "E0C7" || this.sym == "E0CB" || this.sym >= "E0D0" && this.sym <= "E0D5")
{
// Joiner
desc += " " + this.desc + " WITH ";
this.nextChar();
var desc2 = "";
for (;;) {
var desc3;
if (desc3 = this.modifiers())
desc2 += (desc2.length ? " AND " : " WITH ") + desc3;
else if (desc3 = this.envelopes())
desc2 += " IN " + desc3;
else
break;
}
desc += this.term();
desc += desc2;
}
desc += this.term();
desc += desc2;
}
return desc;
return desc;
}
}
ZRColaDecompositionParser.prototype.parse = function(decomposed)
@@ -470,8 +483,8 @@
** SIG ** MIIXmAYJKoZIhvcNAQcCoIIXiTCCF4UCAQExCzAJBgUr
** SIG ** DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
** SIG ** gjcCAR4wJAIBAQQQcAVhGs441BGiowAQS9NQkAIBAAIB
** SIG ** AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFPhq7XksMSKn
** SIG ** 4Rdbedv+eKDdjJ50oIISyDCCA+4wggNXoAMCAQICEH6T
** SIG ** AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFNaLZyoVIc+t
** SIG ** sxdD6hEodLtsntTAoIISyDCCA+4wggNXoAMCAQICEH6T
** SIG ** 6/t8xk5Z6kuad9QG/DswDQYJKoZIhvcNAQEFBQAwgYsx
** SIG ** CzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENh
** SIG ** cGUxFDASBgNVBAcTC0R1cmJhbnZpbGxlMQ8wDQYDVQQK
@@ -625,31 +638,31 @@
** SIG ** OWQwCQYFKw4DAhoFAKBwMBAGCisGAQQBgjcCAQwxAjAA
** SIG ** MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG
** SIG ** AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3
** SIG ** DQEJBDEWBBTtnq9nJTyuGwPUm/NL7IROjIWVujANBgkq
** SIG ** hkiG9w0BAQEFAASCAQBFZwe6d/h0FY6FPwyAJvEIjoFa
** SIG ** QzBNIjLHoMLr+qLIqOvAOj07kwp4+eb19gKa4V3ePaH+
** SIG ** g8ZXDLRIMWZEtpEuqKYxW5RnOd/iHg4h+PfVhtU4cixr
** SIG ** NK731fhhcYeDWrzPiAKVWqkdHcHFMSRdFNXrGtbpKWMR
** SIG ** 38T9CeAoC7whXK/N61WhBZOs2WqBn2e2bxsCMLPJzpez
** SIG ** 57mYjk8Zlk1d8DkaxiamkmDkpnzL+eFuKiEZSuvgZ7il
** SIG ** UDmtbdOvpUHTQqdZpNksZSUTGX87TvqGh7wxV5xPV0Bj
** SIG ** kRHYIbDoncD99xleC4H7En7aAS1CPOwsGi6ydHjYr6Mk
** SIG ** XKIxeI6ioYICCzCCAgcGCSqGSIb3DQEJBjGCAfgwggH0
** SIG ** DQEJBDEWBBTw/5NU88DZc1q0NRNEX/ex3ZH8kTANBgkq
** SIG ** hkiG9w0BAQEFAASCAQAWqfI4RLtBRhqUJ1mx60ulXzEy
** SIG ** Bp2RJ0lh7PU5LJ9gnqpYjCWRbU7XjPeZlokwJ834QHQa
** SIG ** wTCSC5aY6YTxXaQlzdYRo3MgBy9YfCer3HVsKvGlnBcb
** SIG ** ZfS/13vLIECiLZ4wyRwoNuOGIrnGChhFeSBuB0471TyV
** SIG ** rOyn/2oL6kUGvdRDUe7vozwogspEB1zm7hJBLEsr0fbq
** SIG ** NzaL4C8h42tjbeZSrYsMhRlZfi5jyZwY5a7Ajtww+5tV
** SIG ** ZjO/Zm9y/CkhaF7ABMhAR8bLVruTPKIYCzDtuXovz1kL
** SIG ** DpWlDfAPxRUF48j4SHY2PCwkW253jVD2bNb45A+xz3nn
** SIG ** rupT/PrToYICCzCCAgcGCSqGSIb3DQEJBjGCAfgwggH0
** SIG ** AgEBMHIwXjELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5
** SIG ** bWFudGVjIENvcnBvcmF0aW9uMTAwLgYDVQQDEydTeW1h
** SIG ** bnRlYyBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBIC0g
** SIG ** RzICEA7P9DjI/r81bgTYapgbGlAwCQYFKw4DAhoFAKBd
** SIG ** MBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZI
** SIG ** hvcNAQkFMQ8XDTE2MDQyNjEzMjQ1MlowIwYJKoZIhvcN
** SIG ** AQkEMRYEFOCXzSMTEghkr0AunGczGHuQzCc+MA0GCSqG
** SIG ** SIb3DQEBAQUABIIBAJHp1Wtc6YKicRqFnBN/mw7NsTNB
** SIG ** fYvf1CYHBhl6JX6aRlvehLeXJO4rF46tXV0lSAVONEMs
** SIG ** Cjxc8j2AqEPlHbmL+uiZEwuHquZv+nS1yM1ulNDEiwou
** SIG ** FxUtdRSg3y1KuQ1aTKUhHQ//mxiLhIGzvw8lZcJDqayo
** SIG ** a/0AEkgc8LPbFs5wp+jrNEAxDvTU38ERPjSm6LeCrCeR
** SIG ** pLRkbCAyayCyE+S0Y8dP2Yv1TS0dbPeL5pnBEsr/ym7F
** SIG ** 5DP1tBIm2Rbjl0pxGwTq502wqKGGdJakoxu4wr5xuUXk
** SIG ** BCZCD4OPmggdTYANy+fdmDfv/d0VxgOBmXJKE4nHBGtz
** SIG ** KWx/g/Q=
** SIG ** hvcNAQkFMQ8XDTE2MDQzMDEyNTUxNFowIwYJKoZIhvcN
** SIG ** AQkEMRYEFLyuXHqtrvRBTc1FKNCGvsgH18wHMA0GCSqG
** SIG ** SIb3DQEBAQUABIIBAEIKtkLAxMugTbzm7q7S0koc3Z0V
** SIG ** SL9Dv3YB5pMBo6v/ELUldEl+I3Oa2hDFacC1UXvh1wS8
** SIG ** 9utLmVxkT/NpRgnCGRF8Qo46NwXi2z8z8kAuzp05RQlg
** SIG ** e1vDmCDMHAA8WZh9AK90ne/XDHsQIdPdnndS3xxNiRBy
** SIG ** G1wu2VSPHOseCNjIGFJUNP/jOvuOMzC0SLKJBcDV+0Yk
** SIG ** ucb9XXF064kWW00Ve/jOi9kAvO23CzZaW/B8pTgfVx6V
** SIG ** BgW9xX9OkFuU/0KD9KxIcLzez6lJ4YRb8HkrfEub0qSd
** SIG ** doGBzSCBvcNq1RIjIn7FVcJGWJ8VOSmJ3AbDF2w5qYEr
** SIG ** 5ALpFdk=
</signature>
</package>

2
desktop.ini Normal file
View File

@@ -0,0 +1,2 @@
[.ShellClassInfo]
IconResource=ZRCola\res\zrcola.ico,0

Binary file not shown.

View File

@@ -30,7 +30,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup>
<ClCompile>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup>

View File

@@ -23,7 +23,7 @@
// Product version as a single DWORD
// Note: Used for version comparison within C/C++ code.
//
#define ZRCOLA_VERSION 0x01ff0600
#define ZRCOLA_VERSION 0x01ff0700
//
// Product version by components
@@ -33,26 +33,26 @@
//
#define ZRCOLA_VERSION_MAJ 1
#define ZRCOLA_VERSION_MIN 255
#define ZRCOLA_VERSION_REV 6
#define ZRCOLA_VERSION_REV 7
#define ZRCOLA_VERSION_BUILD 0
//
// Human readable product version and build year for UI
//
#define ZRCOLA_VERSION_STR "2.0-alpha6"
#define ZRCOLA_VERSION_STR "2.0-alpha7"
#define ZRCOLA_BUILD_YEAR_STR "2016"
//
// Numerical version presentation for ProductVersion propery in
// MSI packages (syntax: N.N[.N[.N]])
//
#define ZRCOLA_VERSION_INST "1.255.6"
#define ZRCOLA_VERSION_INST "1.255.7"
//
// The product code for ProductCode property in MSI packages
// Replace with new on every version change, regardless how minor it is.
//
#define ZRCOLA_VERSION_GUID "{D1BCE36B-C032-476A-8129-5F284C1CB405}"
#define ZRCOLA_VERSION_GUID "{E83CDC77-6348-4C0B-8BD5-0BD812FEA52E}"
//
// The product vendor and application name for configuration keeping.

View File

@@ -28,6 +28,7 @@
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\include\zrcolaui\chargroup.h" />
<ClInclude Include="..\include\zrcolaui\common.h" />
<ClInclude Include="..\include\zrcolaui\keyboard.h" />
<ClInclude Include="..\src\stdafx.h" />

View File

@@ -32,6 +32,9 @@
<ClInclude Include="..\include\zrcolaui\keyboard.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\include\zrcolaui\chargroup.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\res\libZRColaUI.rc">

View File

@@ -0,0 +1,161 @@
/*
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 "common.h"
#include <zrcola/common.h>
#include <stdex/idrec.h>
#include <istream>
#include <vector>
#pragma warning(push)
#pragma warning(disable: 4200)
#pragma warning(disable: 4251)
#pragma warning(disable: 4512)
namespace ZRCola {
///
/// Character group database
///
class ZRCOLAUI_API chrgrp_db {
public:
#pragma pack(push)
#pragma pack(2)
///
/// Character group data
///
struct chrgrp {
unsigned __int16 id; ///< Character group id
unsigned __int16 rank; ///< Character group rank
unsigned __int16 name_len; ///< Character group name length in \c data
unsigned __int16 char_len; ///< Character list length in \c data
wchar_t data[]; ///< Character group name and character list
};
#pragma pack(pop)
///
/// Rank index
///
class indexRnk : public index<unsigned __int16, unsigned __int32, chrgrp>
{
public:
///
/// Constructs the index
///
/// \param[in] h Reference to vector holding the data
///
indexRnk(_In_ std::vector<unsigned __int16> &h) : index<unsigned __int16, unsigned __int32, chrgrp>(h) {}
///
/// Compares two character groups by rank (for searching)
///
/// \param[in] a Pointer to character group
/// \param[in] b Pointer to second character group
///
/// \returns
/// - <0 when a < b
/// - =0 when a == b
/// - >0 when a > b
///
virtual int compare(_In_ const chrgrp &a, _In_ const chrgrp &b) const
{
if (a.rank < b.rank) return -1;
else if (a.rank > b.rank) return +1;
return 0;
}
///
/// Compares two character groups by rank (for sorting)
///
/// \param[in] a Pointer to character group
/// \param[in] b Pointer to second character group
///
/// \returns
/// - <0 when a < b
/// - =0 when a == b
/// - >0 when a > b
///
virtual int compare_sort(_In_ const chrgrp &a, _In_ const chrgrp &b) const
{
if (a.rank < b.rank) return -1;
else if (a.rank > b.rank) return +1;
int r = _wcsncoll(a.data, b.data, std::min<unsigned __int16>(a.name_len, b.name_len));
if (r != 0) return r;
if (a.name_len < b.name_len) return -1;
else if (a.name_len > b.name_len) return +1;
return 0;
}
} idxRnk; ///< Rank index
std::vector<unsigned __int16> data; ///< Character groups data
public:
///
/// Constructs the database
///
inline chrgrp_db() : idxRnk(data) {}
};
typedef ZRCOLAUI_API stdex::idrec::record<chrgrp_db, recordid_t, recordsize_t, ZRCOLA_RECORD_ALIGN> chrgrp_rec;
};
const ZRCola::recordid_t stdex::idrec::record<ZRCola::chrgrp_db, ZRCola::recordid_t, ZRCola::recordsize_t, ZRCOLA_RECORD_ALIGN>::id = *(ZRCola::recordid_t*)"CGR";
///
/// Reads character group database from a stream
///
/// \param[in] stream Input stream
/// \param[out] db Character group database
///
/// \returns The stream \p stream
///
inline std::istream& operator >>(_In_ std::istream& stream, _Out_ ZRCola::chrgrp_db &db)
{
unsigned __int32 count;
// Read index count.
stream.read((char*)&count, sizeof(count));
if (!stream.good()) return stream;
// Read rank index.
db.idxRnk.resize(count);
stream.read((char*)db.idxRnk.data(), sizeof(unsigned __int32)*count);
if (!stream.good()) return stream;
// Read data count.
stream.read((char*)&count, sizeof(count));
if (!stream.good()) return stream;
// Read data.
db.data.resize(count);
stream.read((char*)db.data.data(), sizeof(unsigned __int16)*count);
return stream;
}
#pragma warning(pop)

View File

@@ -45,9 +45,9 @@ namespace ZRCola {
///
struct keyseq {
enum modifiers_t {
SHIFT = 1<<0, ///< SHIFT key was pressed
CTRL = 1<<1, ///< CTRL key was pressed
ALT = 1<<2, ///< ALT key was pressed
SHIFT = 1<<0, ///< SHIFT key was pressed
CTRL = 1<<1, ///< CTRL key was pressed
ALT = 1<<2, ///< ALT key was pressed
};
wchar_t chr; ///< Character
@@ -204,30 +204,6 @@ namespace ZRCola {
/// Constructs the database
///
inline keyseq_db() : idxChr(data), idxKey(data) {}
///
/// Get text representation of a given key sequence
///
/// \param[in] seq Key sequence
/// \param[in] seq_len Number of elements in \p seq
/// \param[out] str Text representation of a \p seq key sequence
///
static void GetSequenceAsText(_In_count_(seq_len) const keyseq::key_t *seq, _In_ size_t seq_len, _Out_ std::wstring& str);
///
/// Get text representation of a given key sequence
///
/// \param[in] seq Key sequence
/// \param[in] seq_len Number of elements in \p seq
///
/// \returns Text representation of a \p seq key sequence
///
static inline std::wstring GetSequenceAsText(_In_count_(seq_len) const keyseq::key_t *seq, _In_ size_t seq_len)
{
std::wstring str;
GetSequenceAsText(seq, seq_len, str);
return str;
}
};

View File

@@ -18,18 +18,3 @@
*/
#include "stdafx.h"
void ZRCola::keyseq_db::GetSequenceAsText(_In_count_(seq_len) const ZRCola::keyseq_db::keyseq::key_t *seq, _In_ size_t seq_len, _Out_ std::wstring& str)
{
assert(seq || !seq_len);
str.clear();
for (size_t i = 0; i < seq_len; i++) {
if (i) str += L", ";
if (seq[i].modifiers & keyseq::CTRL ) str += L"Ctrl+";
if (seq[i].modifiers & keyseq::ALT ) str += L"Alt+";
if (seq[i].modifiers & keyseq::SHIFT) str += L"Shift+";
str += seq[i].key;
}
}

View File

@@ -20,6 +20,7 @@
#pragma once
#include "../../../include/zrcola.h"
#include "../include/zrcolaui/chargroup.h"
#include "../include/zrcolaui/keyboard.h"
#include <assert.h>

Binary file not shown.

View File

@@ -5,11 +5,14 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: ZRColaCompile 2.0-alpha5\n"
"X-Generator: ZRColaCompile 2.0-alpha6\n"
msgid "Albanian"
msgstr ""
msgid "Arrows"
msgstr ""
msgid "Belarusian"
msgstr ""
@@ -19,9 +22,24 @@ msgstr ""
msgid "Bosnian Latinic"
msgstr ""
msgid "Combine"
msgstr ""
msgid "Combine Above"
msgstr ""
msgid "Combine Below"
msgstr ""
msgid "Combine Over"
msgstr ""
msgid "Croatian"
msgstr ""
msgid "Currencies"
msgstr ""
msgid "Czech"
msgstr ""
@@ -34,6 +52,9 @@ msgstr ""
msgid "Estonian"
msgstr ""
msgid "Eva"
msgstr ""
msgid "French"
msgstr ""
@@ -49,6 +70,9 @@ msgstr ""
msgid "Irish Gaelic"
msgstr ""
msgid "Joined"
msgstr ""
msgid "Kashubian"
msgstr ""
@@ -58,6 +82,165 @@ msgstr ""
msgid "Latvian"
msgstr ""
msgid "Letter A"
msgstr ""
msgid "Letter B"
msgstr ""
msgid "Letter C"
msgstr ""
msgid "Letter D"
msgstr ""
msgid "Letter E"
msgstr ""
msgid "Letter F"
msgstr ""
msgid "Letter G"
msgstr ""
msgid "Letter H"
msgstr ""
msgid "Letter I"
msgstr ""
msgid "Letter J"
msgstr ""
msgid "Letter K"
msgstr ""
msgid "Letter L"
msgstr ""
msgid "Letter M"
msgstr ""
msgid "Letter N"
msgstr ""
msgid "Letter O"
msgstr ""
msgid "Letter P"
msgstr ""
msgid "Letter Q"
msgstr ""
msgid "Letter R"
msgstr ""
msgid "Letter S"
msgstr ""
msgid "Letter T"
msgstr ""
msgid "Letter U"
msgstr ""
msgid "Letter V"
msgstr ""
msgid "Letter W"
msgstr ""
msgid "Letter X"
msgstr ""
msgid "Letter Y"
msgstr ""
msgid "Letter Z"
msgstr ""
msgid "Letter a"
msgstr ""
msgid "Letter b"
msgstr ""
msgid "Letter c"
msgstr ""
msgid "Letter d"
msgstr ""
msgid "Letter e"
msgstr ""
msgid "Letter f"
msgstr ""
msgid "Letter g"
msgstr ""
msgid "Letter h"
msgstr ""
msgid "Letter i"
msgstr ""
msgid "Letter j"
msgstr ""
msgid "Letter k"
msgstr ""
msgid "Letter l"
msgstr ""
msgid "Letter m"
msgstr ""
msgid "Letter n"
msgstr ""
msgid "Letter o"
msgstr ""
msgid "Letter p"
msgstr ""
msgid "Letter q"
msgstr ""
msgid "Letter r"
msgstr ""
msgid "Letter s"
msgstr ""
msgid "Letter t"
msgstr ""
msgid "Letter u"
msgstr ""
msgid "Letter v"
msgstr ""
msgid "Letter w"
msgstr ""
msgid "Letter x"
msgstr ""
msgid "Letter y"
msgstr ""
msgid "Letter z"
msgstr ""
msgid "Ligatures"
msgstr ""
msgid "Lithuanian"
msgstr ""
@@ -67,6 +250,12 @@ msgstr ""
msgid "Maltese"
msgstr ""
msgid "Metric"
msgstr ""
msgid "Modified"
msgstr ""
msgid "Moldavian Cyrillic"
msgstr ""
@@ -76,12 +265,54 @@ msgstr ""
msgid "Norwegian"
msgstr ""
msgid "Number 0"
msgstr ""
msgid "Number 1"
msgstr ""
msgid "Number 2"
msgstr ""
msgid "Number 3"
msgstr ""
msgid "Number 4"
msgstr ""
msgid "Number 5"
msgstr ""
msgid "Number 6"
msgstr ""
msgid "Number 7"
msgstr ""
msgid "Number 8"
msgstr ""
msgid "Number 9"
msgstr ""
msgid "Numbers"
msgstr ""
msgid "Numbers - Circled"
msgstr ""
msgid "Parentheses"
msgstr ""
msgid "Polish"
msgstr ""
msgid "Portuguese"
msgstr ""
msgid "Quotes"
msgstr ""
msgid "Romanian"
msgstr ""
@@ -106,9 +337,54 @@ msgstr ""
msgid "Spanish"
msgstr ""
msgid "Special Characters"
msgstr ""
msgid "Strokes"
msgstr ""
msgid "Surrounded"
msgstr ""
msgid "Swedish"
msgstr ""
msgid "Symbol !"
msgstr ""
msgid "Symbol ("
msgstr ""
msgid "Symbol )"
msgstr ""
msgid "Symbol +"
msgstr ""
msgid "Symbol ,"
msgstr ""
msgid "Symbol -"
msgstr ""
msgid "Symbol :"
msgstr ""
msgid "Symbol ;"
msgstr ""
msgid "Symbol <"
msgstr ""
msgid "Symbol ="
msgstr ""
msgid "Symbol >"
msgstr ""
msgid "Symbol ?"
msgstr ""
msgid "Turkish"
msgstr ""

Binary file not shown.

View File

@@ -17,6 +17,9 @@ msgstr ""
msgid "Albanian"
msgstr "albanščina"
msgid "Arrows"
msgstr "Puščice"
msgid "Belarusian"
msgstr "beloruščina"
@@ -26,9 +29,24 @@ msgstr "bosanščina cirilica"
msgid "Bosnian Latinic"
msgstr "bosanščina latinica"
msgid "Combine"
msgstr "Kombinirano"
msgid "Combine Above"
msgstr "Kombinirano zgoraj"
msgid "Combine Below"
msgstr "Kombinirano spodaj"
msgid "Combine Over"
msgstr "Kombinirano prečrtano"
msgid "Croatian"
msgstr "hrvaščina"
msgid "Currencies"
msgstr "Valute"
msgid "Czech"
msgstr "češčina"
@@ -41,6 +59,9 @@ msgstr "angleščina"
msgid "Estonian"
msgstr "estonščina"
msgid "Eva"
msgstr "Eva"
msgid "French"
msgstr "francoščina"
@@ -56,6 +77,9 @@ msgstr "madžarščina"
msgid "Irish Gaelic"
msgstr "irščina"
msgid "Joined"
msgstr "Povezano"
msgid "Kashubian"
msgstr "kašubščina"
@@ -65,6 +89,165 @@ msgstr "latinščina"
msgid "Latvian"
msgstr "letonščina"
msgid "Letter A"
msgstr "Črka A"
msgid "Letter B"
msgstr "Črka B"
msgid "Letter C"
msgstr "Črka C"
msgid "Letter D"
msgstr "Črka D"
msgid "Letter E"
msgstr "Črka E"
msgid "Letter F"
msgstr "Črka f"
msgid "Letter G"
msgstr "Črka G"
msgid "Letter H"
msgstr "Črka H"
msgid "Letter I"
msgstr "Črka I"
msgid "Letter J"
msgstr "Črka J"
msgid "Letter K"
msgstr "Črka K"
msgid "Letter L"
msgstr "Črka L"
msgid "Letter M"
msgstr "Črka M"
msgid "Letter N"
msgstr "Črka N"
msgid "Letter O"
msgstr "Črka O"
msgid "Letter P"
msgstr "Črka P"
msgid "Letter Q"
msgstr "Črka Q"
msgid "Letter R"
msgstr "Črka R"
msgid "Letter S"
msgstr "Črka S"
msgid "Letter T"
msgstr "Črka T"
msgid "Letter U"
msgstr "Črka U"
msgid "Letter V"
msgstr "Črka V"
msgid "Letter W"
msgstr "Črka W"
msgid "Letter X"
msgstr "Črka X"
msgid "Letter Y"
msgstr "Črka Y"
msgid "Letter Z"
msgstr "Črka Z"
msgid "Letter a"
msgstr "Črka a"
msgid "Letter b"
msgstr "Črka b"
msgid "Letter c"
msgstr "Črka c"
msgid "Letter d"
msgstr "Črka d"
msgid "Letter e"
msgstr "Črka e"
msgid "Letter f"
msgstr "Črka f"
msgid "Letter g"
msgstr "Črka g"
msgid "Letter h"
msgstr "Črka h"
msgid "Letter i"
msgstr "Črka i"
msgid "Letter j"
msgstr "Črka j"
msgid "Letter k"
msgstr "Črka k"
msgid "Letter l"
msgstr "Črka l"
msgid "Letter m"
msgstr "Črka m"
msgid "Letter n"
msgstr "Črka n"
msgid "Letter o"
msgstr "Črka o"
msgid "Letter p"
msgstr "Črka p"
msgid "Letter q"
msgstr "Črka q"
msgid "Letter r"
msgstr "Črka r"
msgid "Letter s"
msgstr "Črka s"
msgid "Letter t"
msgstr "Črka t"
msgid "Letter u"
msgstr "Črka u"
msgid "Letter v"
msgstr "Črka v"
msgid "Letter w"
msgstr "Črka w"
msgid "Letter x"
msgstr "Črka x"
msgid "Letter y"
msgstr "Črka y"
msgid "Letter z"
msgstr "Črka z"
msgid "Ligatures"
msgstr "Ligature"
msgid "Lithuanian"
msgstr "litovščina"
@@ -74,6 +257,12 @@ msgstr "makedonščina"
msgid "Maltese"
msgstr "malteščina"
msgid "Metric"
msgstr "Metrično"
msgid "Modified"
msgstr "Spremenjeno"
msgid "Moldavian Cyrillic"
msgstr "moldavščina cirilica"
@@ -83,12 +272,54 @@ msgstr "moldavščina latinica"
msgid "Norwegian"
msgstr "norveščina"
msgid "Number 0"
msgstr "Številka 0"
msgid "Number 1"
msgstr "Številka 1"
msgid "Number 2"
msgstr "Številka 2"
msgid "Number 3"
msgstr "Številka 3"
msgid "Number 4"
msgstr "Številka 4"
msgid "Number 5"
msgstr "Številka 5"
msgid "Number 6"
msgstr "Številka 6"
msgid "Number 7"
msgstr "Številka 7"
msgid "Number 8"
msgstr "Številka 8"
msgid "Number 9"
msgstr "Številka 9"
msgid "Numbers"
msgstr "Številke"
msgid "Numbers - Circled"
msgstr "Številke - obkroženo"
msgid "Parentheses"
msgstr "Oklepaji"
msgid "Polish"
msgstr "poljščina"
msgid "Portuguese"
msgstr "portugalščina"
msgid "Quotes"
msgstr "Narekovaji"
msgid "Romanian"
msgstr "romunščina"
@@ -113,9 +344,54 @@ msgstr "lužiščini"
msgid "Spanish"
msgstr "španščina"
msgid "Special Characters"
msgstr "Posebni znaki"
msgid "Strokes"
msgstr "Poševnica"
msgid "Surrounded"
msgstr "Obkroženi"
msgid "Swedish"
msgstr "švedščina"
msgid "Symbol !"
msgstr "Simbol !"
msgid "Symbol ("
msgstr "Simbol ("
msgid "Symbol )"
msgstr "Simbol )"
msgid "Symbol +"
msgstr "Simbol +"
msgid "Symbol ,"
msgstr "Simbol ,"
msgid "Symbol -"
msgstr "Simbol -"
msgid "Symbol :"
msgstr "Simbol :"
msgid "Symbol ;"
msgstr "Simbol ;"
msgid "Symbol <"
msgstr "Simbol <"
msgid "Symbol ="
msgstr "Simbol ="
msgid "Symbol >"
msgstr "Simbol >"
msgid "Symbol ?"
msgstr "Simbol ?"
msgid "Turkish"
msgstr "turščina"

Binary file not shown.

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: wxWidgets 3.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-02-02 15:21+0100\n"
"PO-Revision-Date: 2016-04-08 13:05+0200\n"
"PO-Revision-Date: 2016-04-30 15:13+0200\n"
"Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n"
"Language-Team: Simon Rozman <simon.rozman@amebis.si>\n"
"Language: sl_SI\n"
@@ -2977,11 +2977,11 @@ msgstr "DECIMALNO"
#: ../src/common/accelcmn.cpp:47
msgid "DEL"
msgstr "BRI"
msgstr "DEL"
#: ../src/common/accelcmn.cpp:48
msgid "DELETE"
msgstr "BRISALKA"
msgstr "DELETE"
# common/imagbmp.cpp:257
#: ../src/common/imagbmp.cpp:1096
@@ -4717,11 +4717,11 @@ msgstr "IFF: neznana napaka!!!"
#: ../src/common/accelcmn.cpp:50
msgid "INS"
msgstr "VST"
msgstr "INS"
#: ../src/common/accelcmn.cpp:51
msgid "INSERT"
msgstr "VSTAVI"
msgstr "INSERT"
#: ../src/common/fmapbase.cpp:197
msgid "ISO-2022-JP"