35#include <wx/clipbrd.h>
161 auto state = std::make_unique<TOOL_STATE>( *
this );
212 m_viewControls( nullptr ),
214 m_settings( nullptr ),
215 m_warpMouseAfterContextMenu( true ),
216 m_menuActive( false ),
218 m_activeState( nullptr ),
219 m_shuttingDown( false )
227 std::map<TOOL_BASE*, TOOL_STATE*>::iterator it, it_end;
231 delete it->second->cofunc;
243 wxT(
"Adding two tools with the same name may result in unexpected behavior.") );
245 wxT(
"Adding two tools with the same ID may result in unexpected behavior.") );
247 wxT(
"Adding two tools of the same type may result in unexpected behavior.") );
249 wxLogTrace(
kicadTraceToolStack, wxS(
"TOOL_MANAGER::RegisterTool: Registering tool %s with ID %d" ),
300 wxASSERT_MSG(
false, wxString::Format(
"Could not find action %s.", aActionName ) );
339 std::atomic<SYNCRONOUS_TOOL_STATE> synchronousControl =
STS_FINISHED;
345 if( aParam.has_value() )
346 event.SetParameter( aParam );
351 event.SetSynchronous( &synchronousControl );
352 event.SetCommit( aCommit );
435 wxASSERT( aTool !=
nullptr );
450 wxASSERT( aTool !=
nullptr );
454 wxASSERT_MSG(
false, wxT(
"You cannot run unregistered tools" ) );
503 for(
auto id : tmpList )
511 for(
auto id : tmpList )
537 wxLogTrace(
kicadTraceToolStack, wxS(
"TOOL_MANAGER::ShutdownTool - no tool with name %s" ),
544 wxASSERT( aTool !=
nullptr );
550 TOOL_MANAGER::ID_LIST::iterator it = std::find(
m_activeTools.begin(),
566 wxS(
"TOOL_MANAGER::ShutdownTool - Shutting down tool %s" ),
582 std::map<TOOL_ID, TOOL_STATE*>::const_iterator it =
m_toolIdIndex.find( aId );
585 return it->second->theTool;
593 std::map<std::string, TOOL_STATE*>::const_iterator it =
m_toolNameIndex.find( aName );
596 return it->second->theTool;
623 tool->
Reset( aReason );
670 if( tool == aToolId )
715 wxCHECK( st->
cofunc,
nullptr );
730 bool handled =
false;
732 wxLogTrace(
kicadTraceToolStack, wxS(
"TOOL_MANAGER::dispatchInternal - received event: %s" ),
741 bool increment =
true;
768 wxS(
"TOOL_MANAGER::dispatchInternal - Waking tool %s for event: %s" ),
784 wxS(
"TOOL_MANAGER::dispatchInternal - tool %s stopped passing event: %s" ),
798 bool finished =
false;
806 if( tr.first.Matches( aEvent ) )
808 auto func_copy = tr.second;
819 st->
vcSettings = std::move( viewControlSettings );
825 wxS(
"TOOL_MANAGER::dispatchInternal - Running tool %s for event: %s" ),
851 wxLogTrace(
kicadTraceToolStack, wxS(
"TOOL_MANAGER::dispatchInternal - %s handle event: %s" ),
852 ( handled ? wxS(
"Did" ) : wxS(
"Did not" ) ), aEvent.
Format() );
869 wxLogTrace(
kicadTraceToolStack, wxS(
"TOOL_MANAGER::dispatchActivation - Received event: %s" ),
879 wxS(
"TOOL_MANAGER::dispatchActivation - Running tool %s for event: %s" ),
880 tool->second->theTool->GetName(), aEvent.
Format() );
882 runTool( tool->second->theTool );
922 for(
const std::pair<const TOOL_ID, TOOL_STATE*>& idState :
m_toolIdIndex )
927 if( vc.m_forceCursorPosition )
937 std::unique_ptr<ACTION_MENU> menu( m->
Clone() );
942 if( wxWindow* frame =
dynamic_cast<wxWindow*
>(
m_frame ) )
943 frame->PopupMenu( menu.get() );
946 if( menu->GetSelected() >= 0 )
1002 aState->
idle =
true;
1028#if defined( __WXMAC__ )
1029 wxTheApp->ProcessPendingEvents();
1053 if( wxTheClipboard->Open() )
1056 wxTheClipboard->SetData(
new wxTextDataObject( wxString( aTextUTF8.c_str(),
1059 wxTheClipboard->Flush();
1060 wxTheClipboard->Close();
1075 if( wxTheClipboard->Open() )
1077 if( wxTheClipboard->IsSupported( wxDF_TEXT )
1078 || wxTheClipboard->IsSupported( wxDF_UNICODETEXT ) )
1080 wxTextDataObject data;
1081 wxTheClipboard->GetData( data );
1085 result = data.GetText().utf8_str();
1088 wxTheClipboard->Close();
1098 return active->vcSettings;
1106 static int currentId;
1151 it->second = std::nullopt;
1157 std::optional<VECTOR2D>
cursor = it->second;
1220 wxLogTrace(
kicadTraceToolStack, wxS(
"TOOL_MANAGER::processEvent - %s handle event: %s" ),
1221 ( handled ?
"Did" :
"Did not" ), aEvent.
Format() );
1245 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)