38 m_toolMgr( aToolManager )
45 if( action->m_id == -1 )
49 std::string groupName =
"none";
51 std::optional<TOOL_ACTION_GROUP>
group = action->GetActionGroup();
53 if(
group.has_value() )
55 groupID =
group.value().GetGroupID();
56 groupName =
group.value().GetName();
60 "ACTION_MANAGER::ACTION_MANAGER: Registering action %s with ID %d, UI ID %d, "
62 action->m_name, action->m_id, action->GetUIId(), groupName, groupID );
78 wxASSERT( aAction->
GetName().find(
'.', 0 ) != std::string::npos );
101 wxS(
"ACTION_MANAGER::SetConditions: Registering conditions for ID %d - %s" ),
124 static int currentActionId = 1;
126 return currentActionId++;
132 std::map<std::string, TOOL_ACTION*>::const_iterator it =
m_actionNameIndex.find( aActionName );
143 int key = aHotKey & ~MD_MODIFIER_MASK;
146 if( key >=
'a' && key <=
'z' )
147 key = std::toupper( key );
162 wxS(
"ACTION_MANAGER::RunHotKey No actions found, searching with key: %s" ),
172 const std::list<TOOL_ACTION*>& actions = it->second;
176 int highestPriority = -1, priority = -1;
178 std::vector<const TOOL_ACTION*> global;
186 global.emplace_back( action );
198 if( priority >= 0 && priority > highestPriority )
200 highestPriority = priority;
211 bool runAction =
true;
214 runAction = aCond->enableCondition( sel );
217 wxS(
"ACTION_MANAGER::RunHotKey %s context action: %s for hotkey %s" ),
218 runAction ? wxS(
"Running" ) : wxS(
"Not running" ),
225 else if( !global.empty() )
229 bool runAction =
true;
232 runAction = aCond->enableCondition( sel );
235 wxS(
"ACTION_MANAGER::RunHotKey %s global action: %s for hotkey %s" ),
236 runAction ? wxS(
"Running" ) : wxS(
"Not running" ),
246 wxS(
"ACTION_MANAGER::RunHotKey No action found for key %s" ),
274 std::map<int, int>::const_iterator it =
m_hotkeys.find( aAction.
GetId() );
285 static std::map<std::string, int> legacyHotKeyMap;
286 static std::map<std::string, std::pair<int, int>> userHotKeyMap;
287 static bool mapsInitialized =
false;
296 mapsInitialized =
true;
323 const std::map<std::string, int>& aLegacyMap,
324 const std::map<std::string, std::pair<int, int>>& aHotKeyMap )
331 if( aHotKeyMap.count( aAction->
m_name ) )
333 std::pair<int, int> keys = aHotKeyMap.at( aAction->
m_name );
334 aAction->
SetHotKey( keys.first, keys.second );
~ACTION_MANAGER()
Unregister every registered action.
HOTKEY_LIST m_actionHotKeys
Quick action<->hot key lookup.
const ACTION_CONDITIONS * GetCondition(const TOOL_ACTION &aAction) const
Get the conditions to use for a specific tool action.
std::map< int, TOOL_ACTION * > m_customUIIdIndex
Map for indexing actions by their hotkeys.
TOOL_MANAGER * m_toolMgr
Map for indexing actions by their names.
void processHotKey(TOOL_ACTION *aAction, const std::map< std::string, int > &aLegacyMap, const std::map< std::string, std::pair< int, int > > &aHotKeyMap)
Tool manager needed to run actions.
const std::map< std::string, TOOL_ACTION * > & GetActions() const
Get a list of currently-registered actions mapped by their name.
std::map< std::string, TOOL_ACTION * > m_actionNameIndex
Map for recording actions that have custom UI IDs.
std::map< int, int > m_hotkeys
bool RunHotKey(int aHotKey) const
Run an action associated with a hotkey (if there is one available).
void SetConditions(const TOOL_ACTION &aAction, const ACTION_CONDITIONS &aConditions)
Set the conditions the UI elements for activating a specific tool action should use for determining t...
void RegisterAction(TOOL_ACTION *aAction)
Add a tool action to the manager and sets it up.
TOOL_ACTION * FindAction(const std::string &aActionName) const
Find an action with a given name (if there is one available).
static std::list< TOOL_ACTION * > & GetActionList()
Return list of TOOL_ACTIONs.
bool IsActionUIId(int aId) const
Test if a UI ID corresponds to an action ID in our system.
int GetHotKey(const TOOL_ACTION &aAction) const
Return the hot key associated with a given action or 0 if there is none.
static int MakeActionId(const std::string &aActionName)
Generate an unique ID from for an action with given name.
std::map< int, ACTION_CONDITIONS > m_uiConditions
Map the command ID that wx uses for the action to the UI conditions for the menu/toolbar items.
void UpdateHotKeys(bool aFullUpdate)
Optionally read the hotkey config files and then rebuilds the internal hotkey maps.
ACTION_MANAGER(TOOL_MANAGER *aToolManager)
const wxChar *const kicadTraceToolStack
Flag to enable tracing of the tool handling stack.
void ReadHotKeyConfig(const wxString &aFileName, std::map< std::string, std::pair< int, int > > &aHotKeys)
Read a hotkey config file into a map.
int ReadLegacyHotkeyConfig(const wxString &aAppname, std::map< std::string, int > &aMap)
Read configuration data and fill the current hotkey list with hotkeys.
wxString KeyNameFromKeyCode(int aKeycode, bool *aIsFound)
Return the key name from the key code.
Functors that can be used to figure out how the action controls should be displayed in the UI and if ...
wxLogTrace helper definitions.