diff options
Diffstat (limited to 'include/hotkeys_basic.h')
-rw-r--r-- | include/hotkeys_basic.h | 245 |
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 |