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, " 
   61                    "group %s(%d), toolbar state %s",
 
   62                    action->m_name, action->m_id, action->GetUIId(), groupName, groupID,
 
   63                    action->m_toolbarState.to_string() );
 
 
   79    wxASSERT( aAction->
GetName().find( 
'.', 0 ) != std::string::npos );
 
   83                  wxString::Format( 
"Action '%s' already registered", aAction->
m_name ) );
 
 
   98        m_toolMgr->GetToolHolder()->UnregisterUIUpdateHandler( aAction );
 
  103                wxS( 
"ACTION_MANAGER::SetConditions: Registering conditions for ID %d - %s" ),
 
  108        m_toolMgr->GetToolHolder()->RegisterUIUpdateHandler( aAction, aConditions );
 
 
  126    static int currentActionId = 1;
 
  128    return currentActionId++;
 
 
  134    std::map<std::string, TOOL_ACTION*>::const_iterator it = 
m_actionNameIndex.find( aActionName );
 
 
  148    if( key >= 
'a' && key <= 
'z' )
 
  149        key = std::toupper( key );
 
  164                    wxS( 
"ACTION_MANAGER::RunHotKey No actions found, searching with key: %s" ),
 
  174    const std::list<TOOL_ACTION*>& actions = it->second;
 
  178    int highestPriority = -1, priority = -1;
 
  180    std::vector<const TOOL_ACTION*> global; 
 
  188            global.emplace_back( action );
 
  200            if( priority >= 0 && priority > highestPriority )
 
  202                highestPriority = priority;
 
  213        bool runAction = 
true;
 
  216            runAction = aCond->enableCondition( sel );
 
  219                    wxS( 
"ACTION_MANAGER::RunHotKey %s context action: %s for hotkey %s" ),
 
  220                    runAction ? wxS( 
"Running" ) : wxS( 
"Not running" ),
 
  227    else if( !global.empty() )
 
  231            bool runAction = 
true;
 
  234                runAction = aCond->enableCondition( sel );
 
  237                        wxS( 
"ACTION_MANAGER::RunHotKey %s global action: %s for hotkey %s" ),
 
  238                        runAction ? wxS( 
"Running" ) : wxS( 
"Not running" ),
 
  242            if( runAction && 
m_toolMgr->RunAction( *act ) )
 
  248                wxS( 
"ACTION_MANAGER::RunHotKey No action found for key %s" ),
 
 
  276    std::map<int, int>::const_iterator it = 
m_hotkeys.find( aAction.
GetId() );
 
 
  287    static std::map<std::string, int>                 legacyHotKeyMap;
 
  288    static std::map<std::string, std::pair<int, int>> userHotKeyMap;
 
  289    static bool                                       mapsInitialized = 
false;
 
  294    if( 
m_toolMgr->GetToolHolder() && ( aFullUpdate || !mapsInitialized ) )
 
  298        mapsInitialized = 
true;
 
 
  325                                    const std::map<std::string, int>&                 aLegacyMap,
 
  326                                    const std::map<std::string, std::pair<int, int>>& aHotKeyMap )
 
  333    if( aHotKeyMap.count( aAction->
m_name ) )
 
  335        std::pair<int, int> keys = aHotKeyMap.at( aAction->
m_name );
 
  336        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.