KiCad PCB EDA Suite
Loading...
Searching...
No Matches
tool_base.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) 2013 CERN
5 * Copyright (C) 2016-2021 KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * @author Tomasz Wlostowski <[email protected]>
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; either version 2
12 * of the License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, you may find one here:
21 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
22 * or you may search the http://www.gnu.org website for the version 2 license,
23 * or you may write to the Free Software Foundation, Inc.,
24 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
25 */
26
27#ifndef TOOL_BASE_H
28#define TOOL_BASE_H
29
30#include <cassert>
31#include <functional>
32#include <string>
33#include <wx/debug.h>
34
35class EDA_ITEM;
36class TOOL_EVENT;
37class TOOL_MANAGER;
38class TOOLS_HOLDER;
39
40namespace KIGFX
41{
42class VIEW;
43class VIEW_CONTROLS;
44}
45
47{
49 INTERACTIVE = 0x01,
50
52 BATCH = 0x02
53};
54
56typedef int TOOL_ID;
57
58using TOOL_STATE_FUNC = std::function<int(const TOOL_EVENT&)>;
59
60
66{
67public:
68 TOOL_BASE( TOOL_TYPE aType, TOOL_ID aId, const std::string& aName = std::string( "" ) ) :
69 m_type( aType ),
70 m_toolId( aId ),
71 m_toolName( aName ),
72 m_toolMgr( nullptr ) {};
73
74 virtual ~TOOL_BASE() {};
75
78 {
85 };
86
92 virtual bool Init()
93 {
94 return true;
95 }
96
104 virtual void Reset( RESET_REASON aReason ) = 0;
105
112 {
113 return m_type;
114 }
115
124 {
125 return m_toolId;
126 }
127
136 const std::string& GetName() const
137 {
138 return m_toolName;
139 }
140
147 {
148 return m_toolMgr;
149 }
150
151 //TOOL_SETTINGS& GetAdapter();
152
153 bool IsToolActive() const;
154
155protected:
156 friend class TOOL_MANAGER;
157
163 void attachManager( TOOL_MANAGER* aManager );
164
170 KIGFX::VIEW* getView() const;
171
181
185 template <typename T>
186 T* getEditFrame() const
187 {
188#if !defined( QA_TEST ) // Dynamic casts give the linker a seizure in the test framework
189 wxASSERT( dynamic_cast<T*>( getToolHolderInternal() ) );
190#endif
191 return static_cast<T*>( getToolHolderInternal() );
192 }
193
197 template <typename T>
198 T* getModel() const
199 {
201#if !defined( QA_TEST ) // Dynamic casts give the linker a seizure in the test framework
202 wxASSERT( dynamic_cast<T*>( m ) );
203#endif
204 return static_cast<T*>( m );
205 }
206
207private:
208 // hide the implementation to avoid spreading half of kicad and wxWidgets headers to the tools
209 // that may not need them at all!
210 EDA_ITEM* getModelInternal() const;
212
213protected:
216 std::string m_toolName;
219};
220
221#endif // TOOL_BASE_H
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:89
An interface for classes handling user events controlling the view behavior such as zooming,...
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
Definition: view.h:68
Base abstract interface for all kinds of tools.
Definition: tool_base.h:66
TOOL_MANAGER * GetManager() const
Return the instance of TOOL_MANAGER that takes care of the tool.
Definition: tool_base.h:146
T * getEditFrame() const
Return the application window object, casted to requested user type.
Definition: tool_base.h:186
T * getModel() const
Return the model object if it matches the requested type.
Definition: tool_base.h:198
virtual void Reset(RESET_REASON aReason)=0
Bring the tool to a known, initial state.
virtual bool Init()
Init() is called once upon a registration of the tool.
Definition: tool_base.h:92
TOOL_TYPE m_type
Definition: tool_base.h:214
TOOLS_HOLDER * getToolHolderInternal() const
Definition: tool_base.cpp:48
const std::string & GetName() const
Return the name of the tool.
Definition: tool_base.h:136
KIGFX::VIEW_CONTROLS * getViewControls() const
Return the instance of VIEW_CONTROLS object used in the application.
Definition: tool_base.cpp:42
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:218
EDA_ITEM * getModelInternal() const
Definition: tool_base.cpp:54
KIGFX::VIEW * getView() const
Returns the instance of #VIEW object used in the application.
Definition: tool_base.cpp:36
TOOL_TYPE GetType() const
Return the type of the tool.
Definition: tool_base.h:111
bool IsToolActive() const
Definition: tool_base.cpp:31
TOOL_ID m_toolId
Unique id, assigned by a TOOL_MANAGER instance.
Definition: tool_base.h:215
RESET_REASON
Determine the reason of reset for a tool.
Definition: tool_base.h:78
@ REDRAW
Full drawing refresh.
Definition: tool_base.h:83
@ SHUTDOWN
Tool is being shut down.
Definition: tool_base.h:84
@ MODEL_RELOAD
Model changes (the sheet for a schematic)
Definition: tool_base.h:80
@ GAL_SWITCH
Rendering engine changes.
Definition: tool_base.h:82
@ SUPERMODEL_RELOAD
For schematics, the entire schematic changed, not just the sheet.
Definition: tool_base.h:81
@ RUN
Tool is invoked after being inactive.
Definition: tool_base.h:79
virtual ~TOOL_BASE()
Definition: tool_base.h:74
TOOL_ID GetId() const
Return the unique identifier of the tool.
Definition: tool_base.h:123
void attachManager(TOOL_MANAGER *aManager)
Set the TOOL_MANAGER the tool will belong to.
Definition: tool_base.cpp:60
std::string m_toolName
Names are expected to obey the format application.ToolName (eg.
Definition: tool_base.h:216
TOOL_BASE(TOOL_TYPE aType, TOOL_ID aId, const std::string &aName=std::string(""))
Definition: tool_base.h:68
Generic, UI-independent tool event.
Definition: tool_event.h:167
Master controller class:
Definition: tool_manager.h:62
The Cairo implementation of the graphics abstraction layer.
Definition: color4d.cpp:247
std::function< int(const TOOL_EVENT &)> TOOL_STATE_FUNC
Definition: tool_base.h:58
int TOOL_ID
Unique identifier for tools.
Definition: tool_base.h:56
TOOL_TYPE
Definition: tool_base.h:47
@ INTERACTIVE
Tool that interacts with the user.
Definition: tool_base.h:49
@ BATCH
Definition: tool_base.h:52