KiCad PCB EDA Suite
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 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 <view/view_controls.h>
29#include <tool/selection.h>
30#include <tool/tool_action.h>
31
33
34class ACTIONS;
35class TOOL_DISPATCHER;
36class TOOL_MANAGER;
37
38/*
39 * A mix-in class which allows its owner to hold a set of tools from the tool framework.
40 *
41 * This is just the framework; the owner is responsible for registering individual tools,
42 * creating the dispatcher, etc.
43 */
45{
46public:
48
49 virtual ~TOOLS_HOLDER() { }
50
55
63 virtual void RegisterUIUpdateHandler( const TOOL_ACTION& aAction,
64 const ACTION_CONDITIONS& aConditions )
65 {
66 RegisterUIUpdateHandler( aAction.GetUIId(), aConditions );
67 }
68
75 virtual void RegisterUIUpdateHandler( int aID, const ACTION_CONDITIONS& aConditions )
76 {}
77
83 virtual void UnregisterUIUpdateHandler( const TOOL_ACTION& aAction )
84 {
86 }
87
93 virtual void UnregisterUIUpdateHandler( int aID )
94 {}
95
102 {
103 return m_dummySelection;
104 }
105
119 virtual void PushTool( const TOOL_EVENT& aEvent );
120
126 virtual void PopTool( const TOOL_EVENT& aEvent );
127
128 bool ToolStackIsEmpty() { return m_toolStack.empty(); }
129
130 std::string CurrentToolName() const;
131 bool IsCurrentTool( const TOOL_ACTION& aAction ) const;
132
133 virtual void DisplayToolMsg( const wxString& msg ) {};
134
135 virtual void ShowChangedLanguage();
136
142
148
153 bool GetMoveWarpsCursor() const { return m_moveWarpsCursor; }
154
159 virtual void CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVarsChanged );
160
164 virtual wxWindow* GetToolCanvas() const = 0;
165 virtual void RefreshCanvas() { }
166
167 virtual wxString ConfigBaseName() { return wxEmptyString; }
168
169protected:
173
174 SELECTION m_dummySelection; // Empty dummy selection
175
176 std::vector<std::string> m_toolStack; // Stack of user-level "tools". This is NOT a
177 // stack of TOOL instances, because somewhat
178 // confusingly most TOOLs implement more than one
179 // user-level tool. A user-level tool actually
180 // equates to an ACTION handler, so this stack
181 // stores ACTION names.
182
183 bool m_immediateActions; // Preference for immediate actions. If false,
184 // the first invocation of a hotkey will just
185 // select the relevant tool rather than executing
186 // the tool's action.
187 MOUSE_DRAG_ACTION m_dragAction; // DRAG_ANY/DRAG_SELECTED/SELECT.
188
189 bool m_moveWarpsCursor; // cursor is warped to move/drag origin
190};
191
192#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_MANAGER * m_toolManager
Definition: tools_holder.h:170
bool m_immediateActions
Definition: tools_holder.h:183
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:93
std::string CurrentToolName() const
virtual void UnregisterUIUpdateHandler(const TOOL_ACTION &aAction)
Unregister a UI handler for an action that was registered using RegisterUIUpdateHandler.
Definition: tools_holder.h:83
bool m_moveWarpsCursor
Definition: tools_holder.h:189
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:147
SELECTION m_dummySelection
Definition: tools_holder.h:174
virtual void PopTool(const TOOL_EVENT &aEvent)
Pops a tool from the stack.
TOOL_DISPATCHER * m_toolDispatcher
Definition: tools_holder.h:172
virtual ~TOOLS_HOLDER()
Definition: tools_holder.h:49
MOUSE_DRAG_ACTION m_dragAction
Definition: tools_holder.h:187
bool GetMoveWarpsCursor() const
Indicate that a move operation should warp the mouse pointer to the origin of the move object.
Definition: tools_holder.h:153
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:167
bool ToolStackIsEmpty()
Definition: tools_holder.h:128
bool GetDoImmediateActions() const
Indicate that hotkeys should perform an immediate action even if another tool is currently active.
Definition: tools_holder.h:141
TOOL_MANAGER * GetToolManager() const
Return the MVC controller.
Definition: tools_holder.h:54
std::vector< std::string > m_toolStack
Definition: tools_holder.h:176
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...
Definition: tools_holder.h:63
virtual SELECTION & GetCurrentSelection()
Get the current selection from the canvas area.
Definition: tools_holder.h:101
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:165
ACTIONS * m_actions
Definition: tools_holder.h:171
bool IsCurrentTool(const TOOL_ACTION &aAction) const
virtual void DisplayToolMsg(const wxString &msg)
Definition: tools_holder.h:133
Represent a single user action.
Definition: tool_action.h:68
int GetUIId() const
Definition: tool_action.h:130
Generic, UI-independent tool event.
Definition: tool_event.h:156
Master controller class:
Definition: tool_manager.h:55
MOUSE_DRAG_ACTION
Functors that can be used to figure out how the action controls should be displayed in the UI and if ...