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.") );
248 wxLogTrace(
kicadTraceToolStack, wxS(
"TOOL_MANAGER::RegisterTool: Registering tool %s with ID %d" ),
299 wxASSERT_MSG(
false, wxString::Format(
"Could not find action %s.", aActionName ) );
338 std::atomic<SYNCRONOUS_TOOL_STATE> synchronousControl =
STS_FINISHED;
344 if( aParam.has_value() )
345 event.SetParameter( aParam );
350 event.SetSynchronous( &synchronousControl );
351 event.SetCommit( aCommit );
434 wxASSERT( aTool !=
nullptr );
449 wxASSERT( aTool !=
nullptr );
453 wxASSERT_MSG(
false, wxT(
"You cannot run unregistered tools" ) );
502 for(
auto id : tmpList )
510 for(
auto id : tmpList )
536 wxLogTrace(
kicadTraceToolStack, wxS(
"TOOL_MANAGER::ShutdownTool - no tool with name %s" ),
543 wxASSERT( aTool !=
nullptr );
549 TOOL_MANAGER::ID_LIST::iterator it = std::find(
m_activeTools.begin(),
565 wxS(
"TOOL_MANAGER::ShutdownTool - Shutting down tool %s" ),
581 std::map<TOOL_ID, TOOL_STATE*>::const_iterator it =
m_toolIdIndex.find( aId );
584 return it->second->theTool;
592 std::map<std::string, TOOL_STATE*>::const_iterator it =
m_toolNameIndex.find( aName );
595 return it->second->theTool;
622 tool->
Reset( aReason );
669 if( tool == aToolId )
714 wxCHECK( st->
cofunc,
nullptr );
729 bool handled =
false;
731 wxLogTrace(
kicadTraceToolStack, wxS(
"TOOL_MANAGER::dispatchInternal - received event: %s" ),
740 bool increment =
true;
767 wxS(
"TOOL_MANAGER::dispatchInternal - Waking tool %s for event: %s" ),
783 wxS(
"TOOL_MANAGER::dispatchInternal - tool %s stopped passing event: %s" ),
797 bool finished =
false;
805 if( tr.first.Matches( aEvent ) )
807 auto func_copy = tr.second;
818 st->
vcSettings = std::move( viewControlSettings );
824 wxS(
"TOOL_MANAGER::dispatchInternal - Running tool %s for event: %s" ),
850 wxLogTrace(
kicadTraceToolStack, wxS(
"TOOL_MANAGER::dispatchInternal - %s handle event: %s" ),
851 ( handled ? wxS(
"Did" ) : wxS(
"Did not" ) ), aEvent.
Format() );
868 wxLogTrace(
kicadTraceToolStack, wxS(
"TOOL_MANAGER::dispatchActivation - Received event: %s" ),
878 wxS(
"TOOL_MANAGER::dispatchActivation - Running tool %s for event: %s" ),
879 tool->second->theTool->GetName(), aEvent.
Format() );
881 runTool( tool->second->theTool );
921 for(
const std::pair<const TOOL_ID, TOOL_STATE*>& idState :
m_toolIdIndex )
926 if( vc.m_forceCursorPosition )
936 std::unique_ptr<ACTION_MENU> menu( m->
Clone() );
941 if( wxWindow* frame =
dynamic_cast<wxWindow*
>(
m_frame ) )
942 frame->PopupMenu( menu.get() );
945 if( menu->GetSelected() >= 0 )
1001 aState->
idle =
true;
1027#if defined( __WXMAC__ )
1028 wxTheApp->ProcessPendingEvents();
1052 if( wxTheClipboard->Open() )
1055 wxTheClipboard->SetData(
new wxTextDataObject( wxString( aTextUTF8.c_str(),
1058 wxTheClipboard->Flush();
1059 wxTheClipboard->Close();
1074 if( wxTheClipboard->Open() )
1076 if( wxTheClipboard->IsSupported( wxDF_TEXT )
1077 || wxTheClipboard->IsSupported( wxDF_UNICODETEXT ) )
1079 wxTextDataObject data;
1080 wxTheClipboard->GetData( data );
1084 result = data.GetText().utf8_str();
1087 wxTheClipboard->Close();
1097 return active->vcSettings;
1105 static int currentId;
1150 it->second = std::nullopt;
1156 std::optional<VECTOR2D>
cursor = it->second;
1219 wxLogTrace(
kicadTraceToolStack, wxS(
"TOOL_MANAGER::processEvent - %s handle event: %s" ),
1220 ( handled ?
"Did" :
"Did not" ), aEvent.
Format() );
1244 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.
virtual void WarpMouseCursor(const VECTOR2D &aPosition, bool aWorldCoordinates=false, bool aWarpView=false)=0
If enabled (.
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)