You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

283 lines
10 KiB

* KIWAY Milestone A): Make major modules into DLL/DSOs. ! The initial testing of this commit should be done using a Debug build so that all the wxASSERT()s are enabled. Also, be sure and keep enabled the USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it off is senseless anyways. If you want stable code, go back to a prior version, the one tagged with "stable". * Relocate all functionality out of the wxApp derivative into more finely targeted purposes: a) DLL/DSO specific b) PROJECT specific c) EXE or process specific d) configuration file specific data e) configuration file manipulations functions. All of this functionality was blended into an extremely large wxApp derivative and that was incompatible with the desire to support multiple concurrently loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects. An amazing amount of organization come from simply sorting each bit of functionality into the proper box. * Switch to wxConfigBase from wxConfig everywhere except instantiation. * Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD, PGM_SINGLE_TOP, * Remove "Return" prefix on many function names. * Remove obvious comments from CMakeLists.txt files, and from else() and endif()s. * Fix building boost for use in a DSO on linux. * Remove some of the assumptions in the CMakeLists.txt files that windows had to be the host platform when building windows binaries. * Reduce the number of wxStrings being constructed at program load time via static construction. * Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that these functions are useful even when the wxConfigBase comes from another source, as is the case in the KICAD_MANAGER_FRAME. * Move the setting of the KIPRJMOD environment variable into class PROJECT, so that it can be moved into a project variable soon, and out of FP_LIB_TABLE. * Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all its child wxFrames and wxDialogs now have a Kiway() member function which returns a KIWAY& that that window tree branch is in support of. This is like wxWindows DNA in that child windows get this member with proper value at time of construction. * Anticipate some of the needs for milestones B) and C) and make code adjustments now in an effort to reduce work in those milestones. * No testing has been done for python scripting, since milestone C) has that being largely reworked and re-thought-out.
12 years ago
* KIWAY Milestone A): Make major modules into DLL/DSOs. ! The initial testing of this commit should be done using a Debug build so that all the wxASSERT()s are enabled. Also, be sure and keep enabled the USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it off is senseless anyways. If you want stable code, go back to a prior version, the one tagged with "stable". * Relocate all functionality out of the wxApp derivative into more finely targeted purposes: a) DLL/DSO specific b) PROJECT specific c) EXE or process specific d) configuration file specific data e) configuration file manipulations functions. All of this functionality was blended into an extremely large wxApp derivative and that was incompatible with the desire to support multiple concurrently loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects. An amazing amount of organization come from simply sorting each bit of functionality into the proper box. * Switch to wxConfigBase from wxConfig everywhere except instantiation. * Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD, PGM_SINGLE_TOP, * Remove "Return" prefix on many function names. * Remove obvious comments from CMakeLists.txt files, and from else() and endif()s. * Fix building boost for use in a DSO on linux. * Remove some of the assumptions in the CMakeLists.txt files that windows had to be the host platform when building windows binaries. * Reduce the number of wxStrings being constructed at program load time via static construction. * Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that these functions are useful even when the wxConfigBase comes from another source, as is the case in the KICAD_MANAGER_FRAME. * Move the setting of the KIPRJMOD environment variable into class PROJECT, so that it can be moved into a project variable soon, and out of FP_LIB_TABLE. * Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all its child wxFrames and wxDialogs now have a Kiway() member function which returns a KIWAY& that that window tree branch is in support of. This is like wxWindows DNA in that child windows get this member with proper value at time of construction. * Anticipate some of the needs for milestones B) and C) and make code adjustments now in an effort to reduce work in those milestones. * No testing has been done for python scripting, since milestone C) has that being largely reworked and re-thought-out.
12 years ago
* KIWAY Milestone A): Make major modules into DLL/DSOs. ! The initial testing of this commit should be done using a Debug build so that all the wxASSERT()s are enabled. Also, be sure and keep enabled the USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it off is senseless anyways. If you want stable code, go back to a prior version, the one tagged with "stable". * Relocate all functionality out of the wxApp derivative into more finely targeted purposes: a) DLL/DSO specific b) PROJECT specific c) EXE or process specific d) configuration file specific data e) configuration file manipulations functions. All of this functionality was blended into an extremely large wxApp derivative and that was incompatible with the desire to support multiple concurrently loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects. An amazing amount of organization come from simply sorting each bit of functionality into the proper box. * Switch to wxConfigBase from wxConfig everywhere except instantiation. * Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD, PGM_SINGLE_TOP, * Remove "Return" prefix on many function names. * Remove obvious comments from CMakeLists.txt files, and from else() and endif()s. * Fix building boost for use in a DSO on linux. * Remove some of the assumptions in the CMakeLists.txt files that windows had to be the host platform when building windows binaries. * Reduce the number of wxStrings being constructed at program load time via static construction. * Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that these functions are useful even when the wxConfigBase comes from another source, as is the case in the KICAD_MANAGER_FRAME. * Move the setting of the KIPRJMOD environment variable into class PROJECT, so that it can be moved into a project variable soon, and out of FP_LIB_TABLE. * Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all its child wxFrames and wxDialogs now have a Kiway() member function which returns a KIWAY& that that window tree branch is in support of. This is like wxWindows DNA in that child windows get this member with proper value at time of construction. * Anticipate some of the needs for milestones B) and C) and make code adjustments now in an effort to reduce work in those milestones. * No testing has been done for python scripting, since milestone C) has that being largely reworked and re-thought-out.
12 years ago
* KIWAY Milestone A): Make major modules into DLL/DSOs. ! The initial testing of this commit should be done using a Debug build so that all the wxASSERT()s are enabled. Also, be sure and keep enabled the USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it off is senseless anyways. If you want stable code, go back to a prior version, the one tagged with "stable". * Relocate all functionality out of the wxApp derivative into more finely targeted purposes: a) DLL/DSO specific b) PROJECT specific c) EXE or process specific d) configuration file specific data e) configuration file manipulations functions. All of this functionality was blended into an extremely large wxApp derivative and that was incompatible with the desire to support multiple concurrently loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects. An amazing amount of organization come from simply sorting each bit of functionality into the proper box. * Switch to wxConfigBase from wxConfig everywhere except instantiation. * Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD, PGM_SINGLE_TOP, * Remove "Return" prefix on many function names. * Remove obvious comments from CMakeLists.txt files, and from else() and endif()s. * Fix building boost for use in a DSO on linux. * Remove some of the assumptions in the CMakeLists.txt files that windows had to be the host platform when building windows binaries. * Reduce the number of wxStrings being constructed at program load time via static construction. * Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that these functions are useful even when the wxConfigBase comes from another source, as is the case in the KICAD_MANAGER_FRAME. * Move the setting of the KIPRJMOD environment variable into class PROJECT, so that it can be moved into a project variable soon, and out of FP_LIB_TABLE. * Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all its child wxFrames and wxDialogs now have a Kiway() member function which returns a KIWAY& that that window tree branch is in support of. This is like wxWindows DNA in that child windows get this member with proper value at time of construction. * Anticipate some of the needs for milestones B) and C) and make code adjustments now in an effort to reduce work in those milestones. * No testing has been done for python scripting, since milestone C) has that being largely reworked and re-thought-out.
12 years ago
* KIWAY Milestone A): Make major modules into DLL/DSOs. ! The initial testing of this commit should be done using a Debug build so that all the wxASSERT()s are enabled. Also, be sure and keep enabled the USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it off is senseless anyways. If you want stable code, go back to a prior version, the one tagged with "stable". * Relocate all functionality out of the wxApp derivative into more finely targeted purposes: a) DLL/DSO specific b) PROJECT specific c) EXE or process specific d) configuration file specific data e) configuration file manipulations functions. All of this functionality was blended into an extremely large wxApp derivative and that was incompatible with the desire to support multiple concurrently loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects. An amazing amount of organization come from simply sorting each bit of functionality into the proper box. * Switch to wxConfigBase from wxConfig everywhere except instantiation. * Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD, PGM_SINGLE_TOP, * Remove "Return" prefix on many function names. * Remove obvious comments from CMakeLists.txt files, and from else() and endif()s. * Fix building boost for use in a DSO on linux. * Remove some of the assumptions in the CMakeLists.txt files that windows had to be the host platform when building windows binaries. * Reduce the number of wxStrings being constructed at program load time via static construction. * Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that these functions are useful even when the wxConfigBase comes from another source, as is the case in the KICAD_MANAGER_FRAME. * Move the setting of the KIPRJMOD environment variable into class PROJECT, so that it can be moved into a project variable soon, and out of FP_LIB_TABLE. * Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all its child wxFrames and wxDialogs now have a Kiway() member function which returns a KIWAY& that that window tree branch is in support of. This is like wxWindows DNA in that child windows get this member with proper value at time of construction. * Anticipate some of the needs for milestones B) and C) and make code adjustments now in an effort to reduce work in those milestones. * No testing has been done for python scripting, since milestone C) has that being largely reworked and re-thought-out.
12 years ago
* KIWAY Milestone A): Make major modules into DLL/DSOs. ! The initial testing of this commit should be done using a Debug build so that all the wxASSERT()s are enabled. Also, be sure and keep enabled the USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it off is senseless anyways. If you want stable code, go back to a prior version, the one tagged with "stable". * Relocate all functionality out of the wxApp derivative into more finely targeted purposes: a) DLL/DSO specific b) PROJECT specific c) EXE or process specific d) configuration file specific data e) configuration file manipulations functions. All of this functionality was blended into an extremely large wxApp derivative and that was incompatible with the desire to support multiple concurrently loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects. An amazing amount of organization come from simply sorting each bit of functionality into the proper box. * Switch to wxConfigBase from wxConfig everywhere except instantiation. * Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD, PGM_SINGLE_TOP, * Remove "Return" prefix on many function names. * Remove obvious comments from CMakeLists.txt files, and from else() and endif()s. * Fix building boost for use in a DSO on linux. * Remove some of the assumptions in the CMakeLists.txt files that windows had to be the host platform when building windows binaries. * Reduce the number of wxStrings being constructed at program load time via static construction. * Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that these functions are useful even when the wxConfigBase comes from another source, as is the case in the KICAD_MANAGER_FRAME. * Move the setting of the KIPRJMOD environment variable into class PROJECT, so that it can be moved into a project variable soon, and out of FP_LIB_TABLE. * Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all its child wxFrames and wxDialogs now have a Kiway() member function which returns a KIWAY& that that window tree branch is in support of. This is like wxWindows DNA in that child windows get this member with proper value at time of construction. * Anticipate some of the needs for milestones B) and C) and make code adjustments now in an effort to reduce work in those milestones. * No testing has been done for python scripting, since milestone C) has that being largely reworked and re-thought-out.
12 years ago
  1. /*
  2. * This program source code file is part of KiCad, a free EDA CAD application.
  3. *
  4. * Copyright (C) 2004-2016 KiCad Developers, see AUTHORS.txt for contributors.
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU General Public License
  8. * as published by the Free Software Foundation; either version 2
  9. * of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program; if not, you may find one here:
  18. * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
  19. * or you may search the http://www.gnu.org website for the version 2 license,
  20. * or you may write to the Free Software Foundation, Inc.,
  21. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
  22. */
  23. /**
  24. * @file hotkeys_basic.h
  25. * @brief Some functions to handle hotkeys in KiCad
  26. */
  27. #ifndef HOTKEYS_BASIC_H
  28. #define HOTKEYS_BASIC_H
  29. #include <common.h>
  30. #define DEFAULT_HOTKEY_FILENAME_EXT wxT( "hotkeys" )
  31. #define EESCHEMA_HOTKEY_NAME wxT( "Eeschema" )
  32. #define PCBNEW_HOTKEY_NAME wxT( "PcbNew" )
  33. // A define to allow translation of Hot Key message Info in hotkey help menu
  34. // We do not want to use the _( x ) usual macro from wxWidgets, which calls wxGetTranslation(),
  35. // because the English string is used in key file configuration
  36. // The translated string is used only when displaying the help window.
  37. // Therefore translation tools have to use the "_" and the "_HKI" prefix to extract
  38. // strings to translate
  39. #include <i18n_utility.h> // _HKI definition
  40. class EDA_BASE_FRAME;
  41. /* Identifiers (tags) in key code configuration file (or section names)
  42. * .m_SectionTag member of a EDA_HOTKEY_CONFIG
  43. */
  44. extern wxString g_CommonSectionTag;
  45. /**
  46. * class EDA_HOTKEY
  47. * is a class to handle hot key commands. Hot keys have a default value.
  48. * This class allows the real key code changed by user(from a key code list file)
  49. */
  50. class EDA_HOTKEY
  51. {
  52. private:
  53. int m_defaultKeyCode; // Key code assigned upon object construction, to be used as default value
  54. public:
  55. int m_KeyCode; // Key code (ascii value for ascii keys or wxWidgets code for function key
  56. wxString m_InfoMsg; // info message.
  57. int m_Idcommand; // internal id for the corresponding command (see hotkey_id_commnand list)
  58. int m_IdMenuEvent; // id to call the corresponding event (if any) (see id.h)
  59. public:
  60. EDA_HOTKEY( const wxChar* infomsg, int idcommand, int keycode, int idmenuevent = 0 );
  61. EDA_HOTKEY( const EDA_HOTKEY* base);
  62. void ResetKeyCodeToDefault() { m_KeyCode = m_defaultKeyCode; }
  63. };
  64. /**
  65. * Structure EDA_HOTKEY_CONFIG
  66. * contains the information required to save hot key information to a configuration file.
  67. * a Section name and the corresponding list of hotkeys (EDA_HOTKEY list)
  68. * hotkeys are grouped by section.
  69. * a section is a list of hotkey infos ( a EDA_HOTKEY list).
  70. * A full list of hotkeys can used one or many sections
  71. * for instance:
  72. * the schematic editor uses a common section (zoom hotkeys list ..) and a specific section
  73. * the library editor uses the same common section and a specific section
  74. * this feature avoid duplications and made hotkey file config easier to understand and edit
  75. */
  76. struct EDA_HOTKEY_CONFIG
  77. {
  78. public:
  79. wxString* m_SectionTag; // The configuration file section name.
  80. EDA_HOTKEY** m_HK_InfoList; // List of EDA_HOTKEY pointers
  81. wxString* m_Title; // Title displayed in hotkey editor and used as comment in file
  82. };
  83. /**
  84. * Class EDA_HOTKEY_CLIENT_DATA
  85. * provides client data member for hotkeys to include in command events generated
  86. * by the hot key.
  87. */
  88. class EDA_HOTKEY_CLIENT_DATA : public wxClientData
  89. {
  90. //< Logical position of the mouse cursor when the hot key was pressed.
  91. wxPoint m_position;
  92. public:
  93. EDA_HOTKEY_CLIENT_DATA( const wxPoint& aPosition = wxDefaultPosition ) :
  94. m_position( aPosition ) {}
  95. ~EDA_HOTKEY_CLIENT_DATA();
  96. void SetPosition( const wxPoint& aPosition ) { m_position = aPosition; }
  97. wxPoint GetPosition() { return m_position; }
  98. };
  99. /* Functions:
  100. */
  101. void AddHotkeyConfigMenu( wxMenu* menu );
  102. void HandleHotkeyConfigMenuSelection( EDA_BASE_FRAME* frame, int id );
  103. /**
  104. * Function KeyNameFromKeyCode
  105. * return the key name from the key code
  106. * * Only some wxWidgets key values are handled for function key ( see
  107. * s_Hotkey_Name_List[] )
  108. * @param aKeycode = key code (ascii value, or wxWidgets value for function keys)
  109. * @param aIsFound = a pointer to a bool to return true if found, or false. an be NULL default)
  110. * @return the key name in a wxString
  111. */
  112. wxString KeyNameFromKeyCode( int aKeycode, bool * aIsFound = NULL );
  113. /**
  114. * Function KeyNameFromCommandId
  115. * return the key name from the Command id value ( m_Idcommand member value)
  116. * @param aList = pointer to a EDA_HOTKEY list of commands
  117. * @param aCommandId = Command Id value
  118. * @return the key name in a wxString
  119. */
  120. wxString KeyNameFromCommandId( EDA_HOTKEY** aList, int aCommandId );
  121. /**
  122. * Function KeyCodeFromKeyName
  123. * return the key code from its key name
  124. * Only some wxWidgets key values are handled for function key
  125. * @param keyname = wxString key name to find in s_Hotkey_Name_List[],
  126. * like F2 or space or an usual (ascii) char.
  127. * @return the key code
  128. */
  129. int KeyCodeFromKeyName( const wxString& keyname );
  130. /**
  131. * An helper enum for AddHotkeyName function
  132. * In menus we can add a hot key, or an accelerator , or sometimes just a comment
  133. * Hot keys can perform actions using the current mouse cursor position
  134. * Accelerators perform the same action as the associated menu
  135. * A comment is used in tool tips for some tools (zoom ..)
  136. * to show the hot key that performs this action
  137. */
  138. enum HOTKEY_ACTION_TYPE
  139. {
  140. IS_HOTKEY,
  141. IS_ACCELERATOR,
  142. IS_COMMENT
  143. };
  144. /**
  145. * Function AddHotkeyName
  146. * Add the key name from the Command id value ( m_Idcommand member value)
  147. * @param aText = a wxString. returns aText + key name
  148. * @param aList = pointer to a EDA_HOTKEY list of commands
  149. * @param aCommandId = Command Id value
  150. * @param aShortCutType The #HOTKEY_ACTION_TYPE of the shortcut.
  151. * @return a wxString (aTest + key name) if key found or aText without modification
  152. */
  153. wxString AddHotkeyName( const wxString& aText, EDA_HOTKEY** aList, int aCommandId,
  154. HOTKEY_ACTION_TYPE aShortCutType = IS_HOTKEY);
  155. /**
  156. * Function AddHotkeyName
  157. * Add the key name from the Command id value ( m_Idcommand member value)
  158. * @param aText = a wxString. returns aText + key name
  159. * @param aDescrList = pointer to a EDA_HOTKEY_CONFIG DescrList of commands
  160. * @param aCommandId = Command Id value
  161. * @param aShortCutType The #HOTKEY_ACTION_TYPE of the shortcut.
  162. * @return a wxString (aTest + key name) if key found or aText without modification
  163. */
  164. wxString AddHotkeyName( const wxString& aText,
  165. struct EDA_HOTKEY_CONFIG* aDescrList,
  166. int aCommandId,
  167. HOTKEY_ACTION_TYPE aShortCutType = IS_HOTKEY );
  168. /**
  169. * Function DisplayHotkeyList
  170. * Displays the current hotkey list
  171. * @param aFrame = current active frame
  172. * @param aList = pointer to a EDA_HOTKEY_CONFIG list (Null terminated)
  173. */
  174. void DisplayHotkeyList( EDA_BASE_FRAME* aFrame, struct EDA_HOTKEY_CONFIG* aList );
  175. /**
  176. * Function GetDescriptorFromHotkey
  177. * Returns a EDA_HOTKEY* pointer from a key code for OnHotKey() function
  178. * @param aKey = key code (ascii value, or wxWidgets value for function keys
  179. * @param aList = pointer to a EDA_HOTKEY list of commands
  180. * @return the corresponding EDA_HOTKEY pointer from the EDA_HOTKEY List
  181. */
  182. EDA_HOTKEY* GetDescriptorFromHotkey( int aKey, EDA_HOTKEY** aList );
  183. /**
  184. * Function GetDescriptorFromCommand
  185. * Returns a EDA_HOTKEY* pointer from a hot key identifier.
  186. * @param aCommand = hot key identifier (@see hotkeys.h)
  187. * @param aList = pointer to a EDA_HOTKEY list of commands
  188. * @return the corresponding EDA_HOTKEY pointer from the EDA_HOTKEY List
  189. */
  190. EDA_HOTKEY* GetDescriptorFromCommand( int aCommand, EDA_HOTKEY** aList );
  191. /**
  192. * Function ReadHotkeyConfig
  193. * Read hotkey configuration for a given app,
  194. * possibly before the frame for that app has been created
  195. * @param aFilename = the filename to save the hotkeys as
  196. * @param aDescList = the hotkey data
  197. * @param aDefaultLocation = if true, add hotkey path and extension to aFilename
  198. * @return 1 on success, 0 on failure
  199. */
  200. int ReadHotkeyConfigFile( const wxString& aFilename, struct EDA_HOTKEY_CONFIG* aDescList,
  201. const bool aDefaultLocation = true );
  202. /**
  203. * Function ReadHotkeyConfig
  204. * Read configuration data and fill the current hotkey list with hotkeys
  205. * @param aAppname = the value of the app's m_FrameName
  206. * @param aDescList = current hotkey list descr. to initialize.
  207. */
  208. int ReadHotkeyConfig( const wxString& aAppname, struct EDA_HOTKEY_CONFIG* aDescList );
  209. /**
  210. * Function ParseHotkeyConfig
  211. * Translates hotkey string data into application hotkeys
  212. * @param data The string of data read from the configuration files
  213. * @param aDescList The list of hotkeys to update
  214. * @param aAppname The application interface requesting hotkey updates or empty for all
  215. */
  216. void ParseHotkeyConfig( const wxString& data, struct EDA_HOTKEY_CONFIG* aDescList,
  217. const wxString& aAppname );
  218. // common hotkeys event id
  219. // these hotkey ID are used in many files, so they are define here only once.
  220. enum common_hotkey_id_commnand {
  221. HK_NOT_FOUND = 0,
  222. HK_NEW,
  223. HK_OPEN,
  224. HK_SAVE,
  225. HK_SAVEAS,
  226. HK_PRINT,
  227. HK_UNDO,
  228. HK_REDO,
  229. HK_EDIT_CUT,
  230. HK_EDIT_COPY,
  231. HK_EDIT_PASTE,
  232. HK_RESET_LOCAL_COORD,
  233. HK_SET_GRID_ORIGIN,
  234. HK_RESET_GRID_ORIGIN,
  235. HK_HELP,
  236. HK_ZOOM_IN,
  237. HK_ZOOM_OUT,
  238. HK_ZOOM_REDRAW,
  239. HK_ZOOM_CENTER,
  240. HK_ZOOM_AUTO,
  241. HK_ZOOM_SELECTION,
  242. HK_TOGGLE_CURSOR,
  243. HK_MEASURE_TOOL,
  244. HK_COMMON_END
  245. };
  246. #endif // HOTKEYS_BASIC_H