KiCad PCB EDA Suite
Loading...
Searching...
No Matches
tools_holder.h
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2020-2024 KiCad Developers, see AUTHORS.txt for contributors.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, you may find one here:
18 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
19 * or you may search the http://www.gnu.org website for the version 2 license,
20 * or you may write to the Free Software Foundation, Inc.,
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
22 */
23
24#ifndef TOOL_HOLDER_H
25#define TOOL_HOLDER_H
26
27#include <vector>
28#include <tool/selection.h>
30
32
33class ACTIONS;
34class TOOL_ACTION;
35class TOOL_DISPATCHER;
36class TOOL_EVENT;
37class TOOL_MANAGER;
38
39/*
40 * A mix-in class which allows its owner to hold a set of tools from the tool framework.
41 *
42 * This is just the framework; the owner is responsible for registering individual tools,
43 * creating the dispatcher, etc.
44 */
46{
47public:
49
50 virtual ~TOOLS_HOLDER() { }
51
56
58
66 virtual void RegisterUIUpdateHandler( const TOOL_ACTION& aAction,
67 const ACTION_CONDITIONS& aConditions );
68
75 virtual void RegisterUIUpdateHandler( int aID, const ACTION_CONDITIONS& aConditions )
76 {}
77
83 virtual void UnregisterUIUpdateHandler( const TOOL_ACTION& aAction );
84
90 virtual void UnregisterUIUpdateHandler( int aID )
91 {}
92
99 {
100 return m_dummySelection;
101 }
102
116 virtual void PushTool( const TOOL_EVENT& aEvent );
117
123 virtual void PopTool( const TOOL_EVENT& aEvent );
124
125 bool ToolStackIsEmpty() { return m_toolStack.empty(); }
126
127 std::string CurrentToolName() const;
128 bool IsCurrentTool( const TOOL_ACTION& aAction ) const;
129
130 virtual void DisplayToolMsg( const wxString& msg ) {};
131
132 virtual void ShowChangedLanguage();
133
139
145
150 bool GetMoveWarpsCursor() const { return m_moveWarpsCursor; }
151
156 virtual void CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVarsChanged );
157
161 virtual wxWindow* GetToolCanvas() const = 0;
162 virtual void RefreshCanvas() { }
163
164 virtual wxString ConfigBaseName() { return wxEmptyString; }
165
166protected:
170
171 SELECTION m_dummySelection; // Empty dummy selection
172
173 std::vector<std::string> m_toolStack; // Stack of user-level "tools". This is NOT a
174 // stack of TOOL instances, because somewhat
175 // confusingly most TOOLs implement more than one
176 // user-level tool. A user-level tool actually
177 // equates to an ACTION handler, so this stack
178 // stores ACTION names.
179
180 bool m_immediateActions; // Preference for immediate actions. If false,
181 // the first invocation of a hotkey will just
182 // select the relevant tool rather than executing
183 // the tool's action.
184 MOUSE_DRAG_ACTION m_dragAction; // DRAG_ANY/DRAG_SELECTED/SELECT.
185
186 bool m_moveWarpsCursor; // cursor is warped to move/drag origin
187};
188
189#endif // TOOL_HOLDER_H
Gather all the actions that are shared by tools.
Definition: actions.h:41
virtual wxWindow * GetToolCanvas() const =0
Canvas access.
TOOL_DISPATCHER * GetToolDispatcher() const
Definition: tools_holder.h:57
TOOL_MANAGER * m_toolManager
Definition: tools_holder.h:167
bool m_immediateActions
Definition: tools_holder.h:180
virtual void RegisterUIUpdateHandler(int aID, const ACTION_CONDITIONS &aConditions)
Register a UI update handler for the control with ID aID.
Definition: tools_holder.h:75
virtual void UnregisterUIUpdateHandler(int aID)
Unregister a UI handler for a given ID that was registered using RegisterUIUpdateHandler.
Definition: tools_holder.h:90
std::string CurrentToolName() const
bool m_moveWarpsCursor
Definition: tools_holder.h:186
virtual void ShowChangedLanguage()
MOUSE_DRAG_ACTION GetDragAction() const
Indicates whether a drag should draw a selection rectangle or drag selected (or unselected) objects.
Definition: tools_holder.h:144
SELECTION m_dummySelection
Definition: tools_holder.h:171
virtual void PopTool(const TOOL_EVENT &aEvent)
Pops a tool from the stack.
TOOL_DISPATCHER * m_toolDispatcher
Definition: tools_holder.h:169
virtual ~TOOLS_HOLDER()
Definition: tools_holder.h:50
MOUSE_DRAG_ACTION m_dragAction
Definition: tools_holder.h:184
bool GetMoveWarpsCursor() const
Indicate that a move operation should warp the mouse pointer to the origin of the move object.
Definition: tools_holder.h:150
virtual void PushTool(const TOOL_EVENT &aEvent)
NB: the definition of "tool" is different at the user level.
virtual wxString ConfigBaseName()
Definition: tools_holder.h:164
bool ToolStackIsEmpty()
Definition: tools_holder.h:125
virtual void RegisterUIUpdateHandler(const TOOL_ACTION &aAction, const ACTION_CONDITIONS &aConditions)
Register an action's update conditions with the UI layer to allow the UI to appropriately display the...
bool GetDoImmediateActions() const
Indicate that hotkeys should perform an immediate action even if another tool is currently active.
Definition: tools_holder.h:138
TOOL_MANAGER * GetToolManager() const
Return the MVC controller.
Definition: tools_holder.h:55
std::vector< std::string > m_toolStack
Definition: tools_holder.h:173
virtual SELECTION & GetCurrentSelection()
Get the current selection from the canvas area.
Definition: tools_holder.h:98
virtual void UnregisterUIUpdateHandler(const TOOL_ACTION &aAction)
Unregister a UI handler for an action that was registered using RegisterUIUpdateHandler.
virtual void CommonSettingsChanged(bool aEnvVarsChanged, bool aTextVarsChanged)
Notification event that some of the common (suite-wide) settings have changed.
virtual void RefreshCanvas()
Definition: tools_holder.h:162
ACTIONS * m_actions
Definition: tools_holder.h:168
bool IsCurrentTool(const TOOL_ACTION &aAction) const
virtual void DisplayToolMsg(const wxString &msg)
Definition: tools_holder.h:130
Represent a single user action.
Definition: tool_action.h:269
Generic, UI-independent tool event.
Definition: tool_event.h:167
Master controller class:
Definition: tool_manager.h:62
MOUSE_DRAG_ACTION
Functors that can be used to figure out how the action controls should be displayed in the UI and if ...