summaryrefslogtreecommitdiff
path: root/include/hotkeys_basic.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/hotkeys_basic.h')
-rw-r--r--include/hotkeys_basic.h245
1 files changed, 245 insertions, 0 deletions
diff --git a/include/hotkeys_basic.h b/include/hotkeys_basic.h
new file mode 100644
index 0000000..a402f5a
--- /dev/null
+++ b/include/hotkeys_basic.h
@@ -0,0 +1,245 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program 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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program 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 this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file hotkeys_basic.h
+ * @brief Some functions to handle hotkeys in KiCad
+ */
+
+#ifndef HOTKEYS_BASIC_H
+#define HOTKEYS_BASIC_H
+
+#define DEFAULT_HOTKEY_FILENAME_EXT wxT( "hotkeys" )
+
+// A define to allow translation of Hot Key message Info in hotkey help menu
+// We do not want to use the _( x ) usual macro from wxWidgets, which calls wxGetTranslation(),
+// because the English string is used in key file configuration
+// The translated string is used only when displaying the help window.
+// Therefore translation tools have to use the "_" and the "_HKI" prefix to extract
+// strings to translate
+#include <i18n_utility.h> // _HKI definition
+
+class EDA_BASE_FRAME;
+
+
+/* Identifiers (tags) in key code configuration file (or section names)
+ * .m_SectionTag member of a EDA_HOTKEY_CONFIG
+ */
+extern wxString g_CommonSectionTag;
+
+/**
+ * class EDA_HOTKEY
+ * is a class to handle hot key commands. Hot keys have a default value.
+ * This class allows the real key code changed by user(from a key code list file)
+ */
+class EDA_HOTKEY
+{
+public:
+ int m_KeyCode; // Key code (ascii value for ascii keys or wxWidgets code for function key
+ wxString m_InfoMsg; // info message.
+ int m_Idcommand; // internal id for the corresponding command (see hotkey_id_commnand list)
+ int m_IdMenuEvent; // id to call the corresponding event (if any) (see id.h)
+
+public:
+ EDA_HOTKEY( const wxChar* infomsg, int idcommand, int keycode, int idmenuevent = 0 );
+ EDA_HOTKEY( const EDA_HOTKEY* base);
+};
+
+
+/**
+ * Structure EDA_HOTKEY_CONFIG
+ * contains the information required to save hot key information to a configuration file.
+ * a Section name and the corresponding list of hotkeys (EDA_HOTKEY list)
+ * hotkeys are grouped by section.
+ * a section is a list of hotkey infos ( a EDA_HOTKEY list).
+ * A full list of hotkeys can used one or many sections
+ * for instance:
+ * the schematic editor uses a common section (zoom hotkeys list ..) and a specific section
+ * the library editor uses the same common section and a specific section
+ * this feature avoid duplications and made hotkey file config easier to understand and edit
+ */
+struct EDA_HOTKEY_CONFIG
+{
+public:
+ wxString* m_SectionTag; // The configuration file section name.
+ EDA_HOTKEY** m_HK_InfoList; // List of EDA_HOTKEY pointers
+ wxString* m_Title; // Title displayed in hotkey editor and used as comment in file
+};
+
+
+/**
+ * Class EDA_HOTKEY_CLIENT_DATA
+ * provides client data member for hotkeys to include in command events generated
+ * by the hot key.
+ */
+class EDA_HOTKEY_CLIENT_DATA : public wxClientData
+{
+ //< Logical position of the mouse cursor when the hot key was pressed.
+ wxPoint m_position;
+
+public:
+ EDA_HOTKEY_CLIENT_DATA( const wxPoint& aPosition = wxDefaultPosition ) :
+ m_position( aPosition ) {}
+
+ ~EDA_HOTKEY_CLIENT_DATA();
+
+ void SetPosition( const wxPoint& aPosition ) { m_position = aPosition; }
+
+ wxPoint GetPosition() { return m_position; }
+};
+
+
+/* Functions:
+ */
+void AddHotkeyConfigMenu( wxMenu* menu );
+void HandleHotkeyConfigMenuSelection( EDA_BASE_FRAME* frame, int id );
+
+/**
+ * Function KeyNameFromKeyCode
+ * return the key name from the key code
+ * * Only some wxWidgets key values are handled for function key ( see
+ * s_Hotkey_Name_List[] )
+ * @param aKeycode = key code (ascii value, or wxWidgets value for function keys)
+ * @param aIsFound = a pointer to a bool to return true if found, or false. an be NULL default)
+ * @return the key name in a wxString
+ */
+wxString KeyNameFromKeyCode( int aKeycode, bool * aIsFound = NULL );
+
+/**
+ * Function KeyNameFromCommandId
+ * return the key name from the Command id value ( m_Idcommand member value)
+ * @param aList = pointer to a EDA_HOTKEY list of commands
+ * @param aCommandId = Command Id value
+ * @return the key name in a wxString
+ */
+wxString KeyNameFromCommandId( EDA_HOTKEY** aList, int aCommandId );
+
+/**
+
+ * Function KeyCodeFromKeyName
+ * return the key code from its key name
+ * Only some wxWidgets key values are handled for function key
+ * @param keyname = wxString key name to find in s_Hotkey_Name_List[],
+ * like F2 or space or an usual (ascii) char.
+ * @return the key code
+ */
+int KeyCodeFromKeyName( const wxString& keyname );
+
+/**
+ * An helper enum for AddHotkeyName function
+ * In menus we can add a hot key, or an accelerator , or sometimes just a comment
+ * Hot keys can perform actions using the current mouse cursor position
+ * Accelerators perform the same action as the associated menu
+ * A comment is used in tool tips for some tools (zoom ..)
+ * to show the hot key that performs this action
+ */
+enum HOTKEY_ACTION_TYPE
+{
+ IS_HOTKEY,
+ IS_ACCELERATOR,
+ IS_COMMENT
+};
+
+/**
+ * Function AddHotkeyName
+ * Add the key name from the Command id value ( m_Idcommand member value)
+ * @param aText = a wxString. returns aText + key name
+ * @param aList = pointer to a EDA_HOTKEY list of commands
+ * @param aCommandId = Command Id value
+ * @param aShortCutType The #HOTKEY_ACTION_TYPE of the shortcut.
+ * @return a wxString (aTest + key name) if key found or aText without modification
+ */
+wxString AddHotkeyName( const wxString& aText, EDA_HOTKEY** aList, int aCommandId,
+ HOTKEY_ACTION_TYPE aShortCutType = IS_HOTKEY);
+
+/**
+ * Function AddHotkeyName
+ * Add the key name from the Command id value ( m_Idcommand member value)
+ * @param aText = a wxString. returns aText + key name
+ * @param aDescrList = pointer to a EDA_HOTKEY_CONFIG DescrList of commands
+ * @param aCommandId = Command Id value
+ * @param aShortCutType The #HOTKEY_ACTION_TYPE of the shortcut.
+ * @return a wxString (aTest + key name) if key found or aText without modification
+ */
+wxString AddHotkeyName( const wxString& aText,
+ struct EDA_HOTKEY_CONFIG* aDescrList,
+ int aCommandId,
+ HOTKEY_ACTION_TYPE aShortCutType = IS_HOTKEY );
+
+/**
+ * Function DisplayHotkeyList
+ * Displays the current hotkey list
+ * @param aFrame = current active frame
+ * @param aList = pointer to a EDA_HOTKEY_CONFIG list (Null terminated)
+ */
+void DisplayHotkeyList( EDA_BASE_FRAME* aFrame, struct EDA_HOTKEY_CONFIG* aList );
+
+/**
+ * Function GetDescriptorFromHotkey
+ * Returns a EDA_HOTKEY* pointer from a key code for OnHotKey() function
+ * @param aKey = key code (ascii value, or wxWidgets value for function keys
+ * @param aList = pointer to a EDA_HOTKEY list of commands
+ * @return the corresponding EDA_HOTKEY pointer from the EDA_HOTKEY List
+ */
+EDA_HOTKEY* GetDescriptorFromHotkey( int aKey, EDA_HOTKEY** aList );
+
+/**
+ * Function GetDescriptorFromCommand
+ * Returns a EDA_HOTKEY* pointer from a hot key identifier.
+ * @param aCommand = hot key identifier (@see hotkeys.h)
+ * @param aList = pointer to a EDA_HOTKEY list of commands
+ * @return the corresponding EDA_HOTKEY pointer from the EDA_HOTKEY List
+ */
+EDA_HOTKEY* GetDescriptorFromCommand( int aCommand, EDA_HOTKEY** aList );
+
+/**
+ * Function ReadHotkeyConfig
+ * Read hotkey configuration for a given app,
+ * possibly before the frame for that app has been created
+ * @param Appname = the value of the app's m_FrameName
+ * @param aDescList = the hotkey data
+*/
+void ReadHotkeyConfig( const wxString& Appname, struct EDA_HOTKEY_CONFIG* aDescList );
+
+void ParseHotkeyConfig( const wxString& data, struct EDA_HOTKEY_CONFIG* aDescList );
+
+
+// common hotkeys event id
+// these hotkey ID are used in many files, so they are define here only once.
+enum common_hotkey_id_commnand {
+ HK_NOT_FOUND = 0,
+ HK_RESET_LOCAL_COORD,
+ HK_SET_GRID_ORIGIN,
+ HK_RESET_GRID_ORIGIN,
+ HK_HELP,
+ HK_ZOOM_IN,
+ HK_ZOOM_OUT,
+ HK_ZOOM_REDRAW,
+ HK_ZOOM_CENTER,
+ HK_ZOOM_AUTO,
+ HK_UNDO,
+ HK_REDO,
+ HK_COMMON_END
+};
+
+#endif // HOTKEYS_BASIC_H