KiCad PCB EDA Suite
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 {
82 };
83
89 virtual bool Init()
90 {
91 return true;
92 }
93
101 virtual void Reset( RESET_REASON aReason ) = 0;
102
109 {
110 return m_type;
111 }
112
121 {
122 return m_toolId;
123 }
124
133 const std::string& GetName() const
134 {
135 return m_toolName;
136 }
137
144 {
145 return m_toolMgr;
146 }
147
148 //TOOL_SETTINGS& GetAdapter();
149
150 bool IsToolActive() const;
151
152protected:
153 friend class TOOL_MANAGER;
154 friend class TOOL_SETTINGS;
155
161 void attachManager( TOOL_MANAGER* aManager );
162
168 KIGFX::VIEW* getView() const;
169
179
183 template <typename T>
184 T* getEditFrame() const
185 {
186#if !defined( QA_TEST ) // Dynamic casts give the linker a seizure in the test framework
187 wxASSERT( dynamic_cast<T*>( getToolHolderInt() ) );
188#endif
189 return static_cast<T*>( getToolHolderInt() );
190 }
191
195 template <typename T>
196 T* getModel() const
197 {
198 EDA_ITEM* m = getModelInt();
199#if !defined( QA_TEST ) // Dynamic casts give the linker a seizure in the test framework
200 wxASSERT( dynamic_cast<T*>( m ) );
201#endif
202 return static_cast<T*>( m );
203 }
204
207
210
213 std::string m_toolName;
215 //TOOL_SETTINGS m_toolSettings;
216
217private:
218 // hide the implementation to avoid spreading half of
219 // kicad and wxWidgets headers to the tools that may not need them at all!
220 EDA_ITEM* getModelInt() const;
222};
223
224#endif
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:85
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:69
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:143
T * getEditFrame() const
Return the application window object, casted to requested user type.
Definition: tool_base.h:184
T * getModel() const
Return the model object if it matches the requested type.
Definition: tool_base.h:196
virtual void Reset(RESET_REASON aReason)=0
Bring the tool to a known, initial state.
TOOLS_HOLDER * getToolHolderInt() const
Definition: tool_base.cpp:48
EDA_ITEM * getModelInt() const
Definition: tool_base.cpp:54
virtual bool Init()
Init() is called once upon a registration of the tool.
Definition: tool_base.h:89
TOOL_TYPE m_type
Unique identifier for the tool, assigned by a TOOL_MANAGER instance.
Definition: tool_base.h:206
friend class TOOL_SETTINGS
Definition: tool_base.h:154
const std::string & GetName() const
Return the name of the tool.
Definition: tool_base.h:133
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:214
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:108
bool IsToolActive() const
Definition: tool_base.cpp:31
TOOL_ID m_toolId
Name of the tool.
Definition: tool_base.h:209
RESET_REASON
Determine the reason of reset for a tool.
Definition: tool_base.h:78
@ MODEL_RELOAD
Model changes (required full reload)
Definition: tool_base.h:80
@ GAL_SWITCH
Rendering engine changes.
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:120
void attachManager(TOOL_MANAGER *aManager)
Set the TOOL_MANAGER the tool will belong to.
Definition: tool_base.cpp:60
std::string m_toolName
Definition: tool_base.h:213
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:156
Master controller class:
Definition: tool_manager.h:55
The Cairo implementation of the graphics abstraction layer.
Definition: color4d.cpp:243
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