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 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
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
64 virtual void RegisterUIUpdateHandler( const TOOL_ACTION& aAction,
65 const ACTION_CONDITIONS& aConditions );
66
73 virtual void RegisterUIUpdateHandler( int aID, const ACTION_CONDITIONS& aConditions )
74 {}
75
81 virtual void UnregisterUIUpdateHandler( const TOOL_ACTION& aAction );
82
88 virtual void UnregisterUIUpdateHandler( int aID )
89 {}
90
97 {
98 return m_dummySelection;
99 }
100
114 virtual void PushTool( const TOOL_EVENT& aEvent );
115
121 virtual void PopTool( const TOOL_EVENT& aEvent );
122
123 bool ToolStackIsEmpty() { return m_toolStack.empty(); }
124
125 std::string CurrentToolName() const;
126 bool IsCurrentTool( const TOOL_ACTION& aAction ) const;
127
128 virtual void DisplayToolMsg( const wxString& msg ) {};
129
130 virtual void ShowChangedLanguage();
131
137
143
148 bool GetMoveWarpsCursor() const { return m_moveWarpsCursor; }
149
154 virtual void CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVarsChanged );
155
159 virtual wxWindow* GetToolCanvas() const = 0;
160 virtual void RefreshCanvas() { }
161
162 virtual wxString ConfigBaseName() { return wxEmptyString; }
163
164protected:
168
169 SELECTION m_dummySelection; // Empty dummy selection
170
171 std::vector<std::string> m_toolStack; // Stack of user-level "tools". This is NOT a
172 // stack of TOOL instances, because somewhat
173 // confusingly most TOOLs implement more than one
174 // user-level tool. A user-level tool actually
175 // equates to an ACTION handler, so this stack
176 // stores ACTION names.
177
178 bool m_immediateActions; // Preference for immediate actions. If false,
179 // the first invocation of a hotkey will just
180 // select the relevant tool rather than executing
181 // the tool's action.
182 MOUSE_DRAG_ACTION m_dragAction; // DRAG_ANY/DRAG_SELECTED/SELECT.
183
184 bool m_moveWarpsCursor; // cursor is warped to move/drag origin
185};
186
187#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:165
bool m_immediateActions
Definition: tools_holder.h:178
virtual void RegisterUIUpdateHandler(int aID, const ACTION_CONDITIONS &aConditions)
Register a UI update handler for the control with ID aID.
Definition: tools_holder.h:73
virtual void UnregisterUIUpdateHandler(int aID)
Unregister a UI handler for a given ID that was registered using RegisterUIUpdateHandler.
Definition: tools_holder.h:88
std::string CurrentToolName() const
bool m_moveWarpsCursor
Definition: tools_holder.h:184
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:142
SELECTION m_dummySelection
Definition: tools_holder.h:169
virtual void PopTool(const TOOL_EVENT &aEvent)
Pops a tool from the stack.
TOOL_DISPATCHER * m_toolDispatcher
Definition: tools_holder.h:167
virtual ~TOOLS_HOLDER()
Definition: tools_holder.h:50
MOUSE_DRAG_ACTION m_dragAction
Definition: tools_holder.h:182
bool GetMoveWarpsCursor() const
Indicate that a move operation should warp the mouse pointer to the origin of the move object.
Definition: tools_holder.h:148
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:162
bool ToolStackIsEmpty()
Definition: tools_holder.h:123
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:136
TOOL_MANAGER * GetToolManager() const
Return the MVC controller.
Definition: tools_holder.h:55
std::vector< std::string > m_toolStack
Definition: tools_holder.h:171
virtual SELECTION & GetCurrentSelection()
Get the current selection from the canvas area.
Definition: tools_holder.h:96
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:160
ACTIONS * m_actions
Definition: tools_holder.h:166
bool IsCurrentTool(const TOOL_ACTION &aAction) const
virtual void DisplayToolMsg(const wxString &msg)
Definition: tools_holder.h:128
Represent a single user action.
Definition: tool_action.h:219
Generic, UI-independent tool event.
Definition: tool_event.h:167
Master controller class:
Definition: tool_manager.h:57
MOUSE_DRAG_ACTION
Functors that can be used to figure out how the action controls should be displayed in the UI and if ...