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 {
83 REDRAW
84 };
85
91 virtual bool Init()
92 {
93 return true;
94 }
95
103 virtual void Reset( RESET_REASON aReason ) = 0;
104
111 {
112 return m_type;
113 }
114
123 {
124 return m_toolId;
125 }
126
135 const std::string& GetName() const
136 {
137 return m_toolName;
138 }
139
146 {
147 return m_toolMgr;
148 }
149
150 //TOOL_SETTINGS& GetAdapter();
151
152 bool IsToolActive() const;
153
154protected:
155 friend class TOOL_MANAGER;
156 friend class TOOL_SETTINGS;
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*>( getToolHolderInt() ) );
190#endif
191 return static_cast<T*>( getToolHolderInt() );
192 }
193
197 template <typename T>
198 T* getModel() const
199 {
200 EDA_ITEM* m = getModelInt();
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
209
212
215 std::string m_toolName;
217 //TOOL_SETTINGS m_toolSettings;
218
219private:
220 // hide the implementation to avoid spreading half of
221 // kicad and wxWidgets headers to the tools that may not need them at all!
222 EDA_ITEM* getModelInt() const;
224};
225
226#endif
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:88
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:145
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.
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:91
TOOL_TYPE m_type
Unique identifier for the tool, assigned by a TOOL_MANAGER instance.
Definition: tool_base.h:208
friend class TOOL_SETTINGS
Definition: tool_base.h:156
const std::string & GetName() const
Return the name of the tool.
Definition: tool_base.h:135
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:216
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:110
bool IsToolActive() const
Definition: tool_base.cpp:31
TOOL_ID m_toolId
Name of the tool.
Definition: tool_base.h:211
RESET_REASON
Determine the reason of reset for a tool.
Definition: tool_base.h:78
@ REDRAW
Full drawing refresh.
Definition: tool_base.h:83
@ 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:122
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:215
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:57
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