35#include <wx/clipbrd.h>
160 auto state = std::make_unique<TOOL_STATE>( *
this );
211 m_viewControls( nullptr ),
213 m_settings( nullptr ),
214 m_warpMouseAfterContextMenu( true ),
215 m_menuActive( false ),
217 m_activeState( nullptr ),
218 m_shuttingDown( false )
226 std::map<TOOL_BASE*, TOOL_STATE*>::iterator it, it_end;
230 delete it->second->cofunc;
242 wxT(
"Adding two tools with the same name may result in unexpected behavior.") );
244 wxT(
"Adding two tools with the same ID may result in unexpected behavior.") );
246 wxT(
"Adding two tools of the same type may result in unexpected behavior.") );
296 wxASSERT_MSG(
false, wxString::Format(
"Could not find action %s.", aActionName ) );
335 std::atomic<SYNCRONOUS_TOOL_STATE> synchronousControl =
STS_FINISHED;
341 if( aParam.has_value() )
342 event.SetParameter( aParam );
347 event.SetSynchronous( &synchronousControl );
348 event.SetCommit( aCommit );
432 wxASSERT( aTool !=
nullptr );
447 wxASSERT( aTool !=
nullptr );
451 wxASSERT_MSG(
false, wxT(
"You cannot run unregistered tools" ) );
500 for(
auto id : tmpList )
508 for(
auto id : tmpList )
534 wxLogTrace(
kicadTraceToolStack, wxS(
"TOOL_MANAGER::ShutdownTool - no tool with name %s" ),
541 wxASSERT( aTool !=
nullptr );
547 TOOL_MANAGER::ID_LIST::iterator it = std::find(
m_activeTools.begin(),
563 wxS(
"TOOL_MANAGER::ShutdownTool - Shutting down tool %s" ),
579 std::map<TOOL_ID, TOOL_STATE*>::const_iterator it =
m_toolIdIndex.find( aId );
582 return it->second->theTool;
590 std::map<std::string, TOOL_STATE*>::const_iterator it =
m_toolNameIndex.find( aName );
593 return it->second->theTool;
616 tool->
Reset( aReason );
663 if( tool == aToolId )
708 wxCHECK( st->
cofunc,
nullptr );
723 bool handled =
false;
725 wxLogTrace(
kicadTraceToolStack, wxS(
"TOOL_MANAGER::dispatchInternal - received event: %s" ),
734 bool increment =
true;
761 wxS(
"TOOL_MANAGER::dispatchInternal - Waking tool %s for event: %s" ),
777 wxS(
"TOOL_MANAGER::dispatchInternal - tool %s stopped passing event: %s" ),
791 bool finished =
false;
799 if( tr.first.Matches( aEvent ) )
801 auto func_copy = tr.second;
821 wxS(
"TOOL_MANAGER::dispatchInternal - Running tool %s for event: %s" ),
847 wxLogTrace(
kicadTraceToolStack, wxS(
"TOOL_MANAGER::dispatchInternal - %s handle event: %s" ),
848 ( handled ? wxS(
"Did" ) : wxS(
"Did not" ) ), aEvent.
Format() );
865 wxLogTrace(
kicadTraceToolStack, wxS(
"TOOL_MANAGER::dispatchActivation - Received event: %s" ),
875 wxS(
"TOOL_MANAGER::dispatchActivation - Running tool %s for event: %s" ),
876 tool->second->theTool->GetName(), aEvent.
Format() );
878 runTool( tool->second->theTool );
918 for(
const std::pair<const TOOL_ID, TOOL_STATE*>& idState :
m_toolIdIndex )
923 if( vc.m_forceCursorPosition )
933 std::unique_ptr<ACTION_MENU> menu( m->
Clone() );
938 if( wxWindow* frame =
dynamic_cast<wxWindow*
>(
m_frame ) )
939 frame->PopupMenu( menu.get() );
942 if( menu->GetSelected() < 0 )
1024#if defined( __WXMAC__ )
1025 wxTheApp->ProcessPendingEvents();
1049 if( wxTheClipboard->Open() )
1052 wxTheClipboard->SetData(
new wxTextDataObject( wxString( aTextUTF8.c_str(),
1055 wxTheClipboard->Flush();
1056 wxTheClipboard->Close();
1071 if( wxTheClipboard->Open() )
1073 if( wxTheClipboard->IsSupported( wxDF_TEXT )
1074 || wxTheClipboard->IsSupported( wxDF_UNICODETEXT ) )
1076 wxTextDataObject data;
1077 wxTheClipboard->GetData( data );
1081 result = data.GetText().utf8_str();
1084 wxTheClipboard->Close();
1094 return active->vcSettings;
1102 static int currentId;
1147 it->second = std::nullopt;
1153 std::optional<VECTOR2D>
cursor = it->second;
1216 wxLogTrace(
kicadTraceToolStack, wxS(
"TOOL_MANAGER::processEvent - %s handle event: %s" ),
1217 ( handled ?
"Did" :
"Did not" ), aEvent.
Format() );
1241 return !it->second->idle;
Manage TOOL_ACTION objects.
bool RunHotKey(int aHotKey) const
Run an action associated with a hotkey (if there is one available).
TOOL_ACTION * FindAction(const std::string &aActionName) const
Find an action with a given name (if there is one available).
int GetHotKey(const TOOL_ACTION &aAction) const
Return the hot key associated with a given action or 0 if there is none.
void UpdateHotKeys(bool aFullUpdate)
Optionally read the hotkey config files and then rebuilds the internal hotkey maps.
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,...
virtual void ForceCursorPosition(bool aEnabled, const VECTOR2D &aPosition=VECTOR2D(0, 0))
Place the cursor immediately at a given point.
VECTOR2D GetCursorPosition() const
Return the current cursor position in world coordinates.
virtual VECTOR2D GetMousePosition(bool aWorldCoordinates=true) const =0
Return the current mouse pointer position.
void ApplySettings(const VC_SETTINGS &aSettings)
Load new settings from program common settings.
const VC_SETTINGS & GetSettings() const
Apply VIEW_CONTROLS settings from an object.
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
bool IsDirty() const
Return true if any of the VIEW layers needs to be refreshened.
Base window classes and related definitions.
const wxChar *const kicadTraceToolStack
Flag to enable tracing of the tool handling stack.
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
Is the forced cursor position enabled.
void Reset()
Flag determining the cursor visibility.
bool m_forceCursorPosition
Should the cursor be locked within the parent window area.
wxLogTrace helper definitions.
VECTOR2D ToVECTOR2D(const wxPoint &aPoint)