KiCad PCB EDA Suite
HOTKEY_STORE Class Reference

A class that contains a set of hotkeys, arranged into "sections" and provides some book-keeping functions for them. More...

#include <hotkey_store.h>

Public Member Functions

 HOTKEY_STORE ()
 Construct a HOTKEY_STORE from a list of hotkey sections. More...
 
void Init (std::vector< TOOL_ACTION * > aActionsList, bool aIncludeReadOnlyCmds)
 
std::vector< HOTKEY_SECTION > & GetSections ()
 Get the list of sections managed by this store. More...
 
void SaveAllHotkeys ()
 Persist all changes to hotkeys in the store to the underlying data structures. More...
 
void ResetAllHotkeysToDefault ()
 Reset every hotkey in the store to the default values. More...
 
void ResetAllHotkeysToOriginal ()
 Resets every hotkey to the original values. More...
 
bool CheckKeyConflicts (TOOL_ACTION *aAction, long aKey, HOTKEY **aConflict)
 Check whether the given key conflicts with anything in this store. More...
 

Static Public Member Functions

static wxString GetAppName (TOOL_ACTION *aAction)
 
static wxString GetSectionName (TOOL_ACTION *aAction)
 

Private Attributes

std::vector< TOOL_MANAGER * > m_toolManagers
 
std::vector< HOTKEY_SECTIONm_hk_sections
 

Detailed Description

A class that contains a set of hotkeys, arranged into "sections" and provides some book-keeping functions for them.

Definition at line 62 of file hotkey_store.h.

Constructor & Destructor Documentation

◆ HOTKEY_STORE()

HOTKEY_STORE::HOTKEY_STORE ( )

Construct a HOTKEY_STORE from a list of hotkey sections.

Parameters
aHotkeysthe hotkey configs that will be managed by this store.

Definition at line 89 of file hotkey_store.cpp.

90{
91}

Member Function Documentation

◆ CheckKeyConflicts()

bool HOTKEY_STORE::CheckKeyConflicts ( TOOL_ACTION aAction,
long  aKey,
HOTKEY **  aConflict 
)

Check whether the given key conflicts with anything in this store.

Parameters
aAction- the action the key is proposed to be assigned to. Only conflicts within the same section will be flagged.
aKey- key to check
aConflict- outparam getting the section this one conflicts with

Definition at line 199 of file hotkey_store.cpp.

200{
201 wxString sectionName = GetSectionName( aAction );
202
203 // Create a fake "TOOL_ACTION" so we can get the section name for "Common" through the API.
204 // Simply declaring a wxString with the value "Common" works, but the goal is to futureproof
205 // the code here as much as possible.
206 TOOL_ACTION commonAction( "common.Control.Fake", AS_GLOBAL, 0, "", "", "" );
207 wxString commonName = GetSectionName( &commonAction );
208
209 for( HOTKEY_SECTION& section : m_hk_sections )
210 {
211 // We can have the same hotkey in multiple sections (i.e. Kicad programs), but if a hotkey
212 // is in "Common" it can't be in any other section and vice versa.
213
214 if( !( section.m_SectionName == sectionName || section.m_SectionName == commonName ) )
215 continue;
216
217 for( HOTKEY& hotkey : section.m_HotKeys )
218 {
219 if( hotkey.m_Actions[0] == aAction )
220 continue;
221
222 if( hotkey.m_EditKeycode == aKey )
223 {
224 // We can use the same key for a different action if both actions are contextual and
225 // for different tools.
226 if( hotkey.m_Actions[0]->GetScope() == AS_CONTEXT &&
227 aAction->GetScope() == AS_CONTEXT &&
228 hotkey.m_Actions[0]->GetToolName() != aAction->GetToolName() )
229 {
230 continue;
231 }
232
233 *aConflict = &hotkey;
234 return true;
235 }
236 }
237 }
238
239 return false;
240}
std::vector< HOTKEY_SECTION > m_hk_sections
Definition: hotkey_store.h:111
static wxString GetSectionName(TOOL_ACTION *aAction)
Represent a single user action.
Definition: tool_action.h:68
TOOL_ACTION_SCOPE GetScope() const
Definition: tool_action.h:160
std::string GetToolName() const
Return name of the tool associated with the action.
int m_EditKeycode
Definition: hotkey_store.h:37
std::vector< TOOL_ACTION * > m_Actions
Definition: hotkey_store.h:36
@ AS_GLOBAL
Global action (toolbar/main menu event, global shortcut)
Definition: tool_action.h:45
@ AS_CONTEXT
Action belongs to a particular tool (i.e. a part of a pop-up menu)
Definition: tool_action.h:43

References AS_CONTEXT, AS_GLOBAL, TOOL_ACTION::GetScope(), GetSectionName(), TOOL_ACTION::GetToolName(), HOTKEY::m_Actions, HOTKEY::m_EditKeycode, and m_hk_sections.

Referenced by WIDGET_HOTKEY_LIST::resolveKeyConflicts().

◆ GetAppName()

wxString HOTKEY_STORE::GetAppName ( TOOL_ACTION aAction)
static

Definition at line 61 of file hotkey_store.cpp.

62{
63 wxString name( aAction->GetName() );
64 return name.BeforeFirst( '.' );
65}
const char * name
Definition: DXF_plotter.cpp:56
const std::string & GetName() const
Return name of the action.
Definition: tool_action.h:101

References TOOL_ACTION::GetName(), and name.

Referenced by GetSectionName(), and Init().

◆ GetSectionName()

wxString HOTKEY_STORE::GetSectionName ( TOOL_ACTION aAction)
static

Definition at line 68 of file hotkey_store.cpp.

69{
70 std::map<wxString, wxString> s_AppNames = {
71 { wxT( "common" ), _( "Common" ) },
72 { wxT( "kicad" ), _( "Project Manager" ) },
73 { wxT( "eeschema" ), _( "Schematic Editor" ) },
74 { wxT( "pcbnew" ), _( "PCB Editor" ) },
75 { wxT( "plEditor" ), _( "Drawing Sheet Editor" ), },
76 { wxT( "3DViewer" ), _( "3D Viewer" ) },
77 { wxT( "gerbview" ), _( "Gerber Viewer" ) }
78 };
79
80 wxString appName = GetAppName( aAction );
81
82 if( s_AppNames.count( appName ) )
83 return s_AppNames[ appName ];
84 else
85 return appName;
86}
static wxString GetAppName(TOOL_ACTION *aAction)
#define _(s)

References _, and GetAppName().

Referenced by CheckKeyConflicts(), Init(), and WIDGET_HOTKEY_LIST::resolveKeyConflicts().

◆ GetSections()

std::vector< HOTKEY_SECTION > & HOTKEY_STORE::GetSections ( )

Get the list of sections managed by this store.

Definition at line 160 of file hotkey_store.cpp.

161{
162 return m_hk_sections;
163}

References m_hk_sections.

Referenced by PANEL_HOTKEYS_EDITOR::dumpHotkeys(), PANEL_HOTKEYS_EDITOR::ImportHotKeys(), and WIDGET_HOTKEY_LIST::updateShownItems().

◆ Init()

void HOTKEY_STORE::Init ( std::vector< TOOL_ACTION * >  aActionsList,
bool  aIncludeReadOnlyCmds 
)

Definition at line 94 of file hotkey_store.cpp.

95{
96 std::map<std::string, HOTKEY> masterMap;
97
98 for( TOOL_ACTION* action : aActionsList )
99 {
100 // Internal actions probably shouldn't be allowed hotkeys
101 if( action->GetLabel().IsEmpty() )
102 continue;
103
104 if( !ADVANCED_CFG::GetCfg().m_ExtraZoneDisplayModes )
105 {
106 if( action->GetName() == "pcbnew.Control.zoneDisplayOutlines"
107 || action->GetName() == "pcbnew.Control.zoneDisplayTesselation" )
108 {
109 continue;
110 }
111 }
112
113 HOTKEY& hotkey = masterMap[ action->GetName() ];
114 hotkey.m_Actions.push_back( action );
115
116 if( !hotkey.m_EditKeycode )
117 hotkey.m_EditKeycode = action->GetHotKey();
118 }
119
120 wxString currentApp;
121 HOTKEY_SECTION* currentSection = nullptr;
122
123 // If a previous list was built, ensure this previous list is cleared:
124 m_hk_sections.clear();
125
126 for( const std::pair<const std::string, HOTKEY>& entry : masterMap )
127 {
128 TOOL_ACTION* entryAction = entry.second.m_Actions[ 0 ];
129 wxString entryApp = GetAppName( entryAction );
130
131 if( !currentSection || entryApp != currentApp )
132 {
133 m_hk_sections.emplace_back( HOTKEY_SECTION() );
134 currentApp = entryApp;
135 currentSection = &m_hk_sections.back();
136 currentSection->m_SectionName = GetSectionName( entryAction );
137
138 if( aIncludeReadOnlyCmds && currentApp == "common" )
139 {
141 currentSection->m_HotKeys.emplace_back( HOTKEY( command ) );
142 }
143 }
144
145 currentSection->m_HotKeys.emplace_back( HOTKEY( entry.second ) );
146 }
147
148 if( aIncludeReadOnlyCmds )
149 {
150 m_hk_sections.emplace_back( HOTKEY_SECTION() );
151 currentSection = &m_hk_sections.back();
152 currentSection->m_SectionName = _( "Gestures" );
153
154 for( TOOL_ACTION* gesture : g_gesturePseudoActions )
155 currentSection->m_HotKeys.emplace_back( HOTKEY( gesture ) );
156 }
157}
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
static PSEUDO_ACTION * g_gesturePseudoActions[]
static PSEUDO_ACTION * g_standardPlatformCommands[]
std::vector< HOTKEY > m_HotKeys
Definition: hotkey_store.h:54
wxString m_SectionName
Definition: hotkey_store.h:53

References _, g_gesturePseudoActions, g_standardPlatformCommands, GetAppName(), ADVANCED_CFG::GetCfg(), GetSectionName(), HOTKEY::m_Actions, HOTKEY::m_EditKeycode, m_hk_sections, HOTKEY_SECTION::m_HotKeys, and HOTKEY_SECTION::m_SectionName.

Referenced by PANEL_HOTKEYS_EDITOR::TransferDataToWindow().

◆ ResetAllHotkeysToDefault()

void HOTKEY_STORE::ResetAllHotkeysToDefault ( )

Reset every hotkey in the store to the default values.

Definition at line 179 of file hotkey_store.cpp.

180{
181 for( HOTKEY_SECTION& section : m_hk_sections )
182 {
183 for( HOTKEY& hotkey : section.m_HotKeys )
184 hotkey.m_EditKeycode = hotkey.m_Actions[ 0 ]->GetDefaultHotKey();
185 }
186}

References HOTKEY::m_Actions, HOTKEY::m_EditKeycode, and m_hk_sections.

Referenced by WIDGET_HOTKEY_LIST::ResetAllHotkeys().

◆ ResetAllHotkeysToOriginal()

void HOTKEY_STORE::ResetAllHotkeysToOriginal ( )

Resets every hotkey to the original values.

Definition at line 189 of file hotkey_store.cpp.

190{
191 for( HOTKEY_SECTION& section : m_hk_sections )
192 {
193 for( HOTKEY& hotkey : section.m_HotKeys )
194 hotkey.m_EditKeycode = hotkey.m_Actions[ 0 ]->GetHotKey();
195 }
196}

References HOTKEY::m_Actions, HOTKEY::m_EditKeycode, and m_hk_sections.

Referenced by WIDGET_HOTKEY_LIST::ResetAllHotkeys().

◆ SaveAllHotkeys()

void HOTKEY_STORE::SaveAllHotkeys ( )

Persist all changes to hotkeys in the store to the underlying data structures.

Definition at line 166 of file hotkey_store.cpp.

167{
168 for( HOTKEY_SECTION& section : m_hk_sections )
169 {
170 for( HOTKEY& hotkey : section.m_HotKeys )
171 {
172 for( TOOL_ACTION* action : hotkey.m_Actions )
173 action->SetHotKey( hotkey.m_EditKeycode );
174 }
175 }
176}
void SetHotKey(int aKeycode)

References HOTKEY::m_Actions, HOTKEY::m_EditKeycode, m_hk_sections, and TOOL_ACTION::SetHotKey().

Referenced by WIDGET_HOTKEY_LIST::TransferDataFromControl().

Member Data Documentation

◆ m_hk_sections

std::vector<HOTKEY_SECTION> HOTKEY_STORE::m_hk_sections
private

◆ m_toolManagers

std::vector<TOOL_MANAGER*> HOTKEY_STORE::m_toolManagers
private

Definition at line 110 of file hotkey_store.h.


The documentation for this class was generated from the following files: