36#include <wx/clipbrd.h> 
   82        wxASSERT_MSG( 
stateStack.empty(), wxT( 
"StateStack not empty!" ) );
 
 
  162        auto state = std::make_unique<TOOL_STATE>( *
this );
 
 
 
  228    std::map<TOOL_BASE*, TOOL_STATE*>::iterator it, it_end;
 
  232        delete it->second->cofunc;  
 
 
  244                  wxT( 
"Adding two tools with the same name may result in unexpected behavior.") );
 
  246                  wxT( 
"Adding two tools with the same ID may result in unexpected behavior.") );
 
  248                  wxT( 
"Adding two tools of the same type may result in unexpected behavior.") );
 
  251                wxS( 
"TOOL_MANAGER::RegisterTool: Registering tool %s with ID %d" ),
 
 
  302        wxASSERT_MSG( 
false, wxString::Format( 
"Could not find action %s.", aActionName ) );
 
 
  331                                COMMIT* aCommit, 
bool aFromAPI )
 
  344        event.SetParameter( aParam );
 
  355            std::atomic<SYNCRONOUS_TOOL_STATE> synchronousControl = 
STS_FINISHED;
 
  357            event.SetSynchronous( &synchronousControl );
 
  358            event.SetCommit( aCommit );
 
  389            wxASSERT_MSG( aFromAPI, wxT( 
"Deferred actions have no way of guaranteeing the " 
  390                                         "lifetime of the COMMIT object" ) );
 
  391            event.SetCommit( aCommit );
 
 
  448    wxASSERT( aTool != 
nullptr );
 
 
  463    wxASSERT( aTool != 
nullptr );
 
  465    wxString msg = wxString::Format( wxS( 
"TOOL_MANAGER::runTool - running tool %s" ), aTool->
GetName() );
 
  470        wxASSERT_MSG( 
false, wxT( 
"You cannot run unregistered tools" ) );
 
 
  519    for( 
auto id : tmpList )
 
  527    for( 
auto id : tmpList )
 
 
  553    wxLogTrace( 
kicadTraceToolStack, wxS( 
"TOOL_MANAGER::ShutdownTool - no tool with name %s" ),
 
 
  560    wxASSERT( aTool != 
nullptr );
 
  566        TOOL_MANAGER::ID_LIST::iterator it = std::find( 
m_activeTools.begin(),
 
  582                            wxS( 
"TOOL_MANAGER::ShutdownTool - Shutting down tool %s" ),
 
 
  598    std::map<TOOL_ID, TOOL_STATE*>::const_iterator it = 
m_toolIdIndex.find( aId );
 
  601        return it->second->theTool;
 
 
  609    std::map<std::string, TOOL_STATE*>::const_iterator it = 
m_toolNameIndex.find( aName );
 
  612        return it->second->theTool;
 
 
  639        tool->
Reset( aReason );
 
 
  660                        wxS( 
"TOOL_MANAGER initialization of tool '%s' failed" ),
 
 
  687        if( tool == aToolId )
 
 
  732    wxCHECK( st->
cofunc, 
nullptr );
 
 
  747    bool handled = 
false;
 
  749    wxLogTrace( 
kicadTraceToolStack, wxS( 
"TOOL_MANAGER::dispatchInternal - received event: %s" ),
 
  758        bool increment = 
true;
 
  785                        wxS( 
"TOOL_MANAGER::dispatchInternal - Waking tool %s for event: %s" ),
 
  801                            wxS( 
"TOOL_MANAGER::dispatchInternal - tool %s stopped passing " 
  816        bool finished = 
false;
 
  824                if( tr.first.Matches( aEvent ) )
 
  826                    auto func_copy = tr.second;
 
  837                        st->
vcSettings = std::move( viewControlSettings );
 
  843                                wxS( 
"TOOL_MANAGER::dispatchInternal - Running tool %s for " 
  870    wxLogTrace( 
kicadTraceToolStack, wxS( 
"TOOL_MANAGER::dispatchInternal - %s handle event: %s" ),
 
  871                ( handled ? wxS( 
"Did" ) : wxS( 
"Did not" ) ), aEvent.
Format() );
 
 
  888    wxLogTrace( 
kicadTraceToolStack, wxS( 
"TOOL_MANAGER::dispatchActivation - Received event: %s" ),
 
  898                        wxS( 
"TOOL_MANAGER::dispatchActivation - Running tool %s for event: %s" ),
 
  899                        tool->second->theTool->GetName(), aEvent.
Format() );
 
  901            runTool( tool->second->theTool );
 
 
  942        for( 
const std::pair<const TOOL_ID, TOOL_STATE*>& idState : 
m_toolIdIndex )
 
  947            if( vc.m_forceCursorPosition )
 
  957        std::unique_ptr<ACTION_MENU> menu( m->
Clone() );
 
  962        if( wxWindow* frame = 
dynamic_cast<wxWindow*
>( 
m_frame ) )
 
  963            frame->PopupMenu( menu.get() );
 
  966        if( menu->GetSelected() >= 0 )
 
  993        for( 
const std::pair<
const TOOL_ID,
 
 
 1027    if( !aState->
Pop() )
 
 1033        aState->
idle = 
true;
 
 
 1059#if defined( __WXMAC__ ) 
 1060        wxTheApp->ProcessPendingEvents(); 
 
 
 1083        return active->vcSettings;
 
 
 1091    static int currentId;
 
 
 1136                    it->second = std::nullopt;
 
 1142                std::optional<VECTOR2D> 
cursor = it->second;
 
 
 1205    wxLogTrace( 
kicadTraceToolStack, wxS( 
"TOOL_MANAGER::processEvent - %s handle event: %s" ),
 
 1206                                     ( handled ? 
"Did" : 
"Did not" ), aEvent.
Format() );
 
 
 1231    return !it->second->idle;
 
 
Manage TOOL_ACTION objects.
 
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
 
Represent a set of changes (additions, deletions or modifications) of a data model (e....
 
bool Call(ArgType aArg)
Start execution of a coroutine, passing args as its arguments.
 
void KiYield()
Stop execution of the coroutine and returns control to the caller.
 
bool Resume()
Resume execution of a previously yielded coroutine.
 
void RunMainStack(std::function< void()> func)
Run a functor inside the application main stack context.
 
The base frame for deriving all KiCad main window classes.
 
virtual void UpdateStatusBar()
Update the status bar information.
 
A base class for most all the KiCad significant classes used in schematics and boards.
 
An interface for classes handling user events controlling the view behavior such as zooming,...
 
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
 
A type-safe container of any type.
 
bool has_value() const noexcept
Report whether there is a contained object or not.
 
Base window classes and related definitions.
 
const wxChar *const kicadTraceToolStack
Flag to enable tracing of the tool handling stack.
 
void AddTransactionBreadcrumb(const wxString &aMsg, const wxString &aCategory)
Add a transaction breadcrumb.
 
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
 
Structure to keep VIEW_CONTROLS settings for easy store/restore operations.
 
VECTOR2D m_forcedPosition
Forced cursor position (world coordinates).
 
bool m_forceCursorPosition
Is the forced cursor position enabled.
 
wxLogTrace helper definitions.
 
VECTOR2< double > VECTOR2D
 
VECTOR2D ToVECTOR2D(const wxPoint &aPoint)