KiCad PCB EDA Suite
tool_interactive.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-2020 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_INTERACTIVE_H
28#define __TOOL_INTERACTIVE_H
29
30#include <string>
31#include <tool/tool_menu.h>
32#include <tool/tool_event.h> // Needed for CONTEXT_MENU_TRIGGER
33#include <tool/tool_base.h>
34
35class ACTION_MENU;
36
37
39{
40 REENTRANCY_GUARD( bool* aFlag ) :
41 m_flag( aFlag )
42 {
43 *m_flag = true;
44 }
45
47 {
48 *m_flag = false;
49 }
50
51private:
52 bool* m_flag;
53};
54
55
57{
58public:
62 TOOL_INTERACTIVE( TOOL_ID aId, const std::string& aName );
63
67 TOOL_INTERACTIVE( const std::string& aName );
68 virtual ~TOOL_INTERACTIVE();
69
75 void Activate();
76
78
86
92 void RunMainStack( std::function<void()> aFunc );
93
99 template <class T>
100 void Go( int (T::* aStateFunc)( const TOOL_EVENT& ),
101 const TOOL_EVENT_LIST& aConditions = TOOL_EVENT( TC_ANY, TA_ANY ) );
102
108 TOOL_EVENT* Wait( const TOOL_EVENT_LIST& aEventList = TOOL_EVENT( TC_ANY, TA_ANY ) );
109
113 /*template <class Parameters, class ReturnValue>
114 bool InvokeTool( const std::string& aToolName, const Parameters& parameters,
115 ReturnValue& returnValue );
116
117 template <class Parameters, class ReturnValue>
118 bool InvokeWindow( const std::string& aWindowName, const Parameters& parameters,
119 ReturnValue& returnValue );
120
121 template <class T>
122 void Yield( const T& returnValue );*/
123
124protected:
126
127private:
133 virtual void setTransitions() = 0;
134
138 void resetTransitions();
139
140 void goInternal( TOOL_STATE_FUNC& aState, const TOOL_EVENT_LIST& aConditions );
141
142 friend class TOOL_MANAGER;
143};
144
145// hide TOOL_MANAGER implementation
146template <class T>
147void TOOL_INTERACTIVE::Go( int (T::* aStateFunc)( const TOOL_EVENT& ),
148 const TOOL_EVENT_LIST& aConditions )
149{
150 TOOL_STATE_FUNC sptr = std::bind( aStateFunc, static_cast<T*>( this ), std::placeholders::_1 );
151
152 goInternal( sptr, aConditions );
153}
154
155#endif
Defines the structure of a menu based on ACTIONs.
Definition: action_menu.h:49
Base abstract interface for all kinds of tools.
Definition: tool_base.h:66
A list of TOOL_EVENTs, with overloaded || operators allowing for concatenating TOOL_EVENTs with littl...
Definition: tool_event.h:564
Generic, UI-independent tool event.
Definition: tool_event.h:156
void SetContextMenu(ACTION_MENU *aMenu, CONTEXT_MENU_TRIGGER aTrigger=CMENU_BUTTON)
Assign a context menu and tells when it should be activated.
void RunMainStack(std::function< void()> aFunc)
Call a function using the main stack.
void Go(int(T::*aStateFunc)(const TOOL_EVENT &), const TOOL_EVENT_LIST &aConditions=TOOL_EVENT(TC_ANY, TA_ANY))
Define which state (aStateFunc) to go when a certain event arrives (aConditions).
TOOL_MENU & GetToolMenu()
virtual void setTransitions()=0
This method is meant to be overridden in order to specify handlers for events.
void goInternal(TOOL_STATE_FUNC &aState, const TOOL_EVENT_LIST &aConditions)
TOOL_MENU m_menu
The functions below are not yet implemented - their interface may change.
virtual ~TOOL_INTERACTIVE()
TOOL_INTERACTIVE(TOOL_ID aId, const std::string &aName)
Create a tool with given id & name.
TOOL_EVENT * Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Suspend execution of the tool until an event specified in aEventList arrives.
void resetTransitions()
Clear the current transition map and restores the default one created by setTransitions().
void Activate()
Run the tool.
Master controller class:
Definition: tool_manager.h:55
Manage a CONDITIONAL_MENU and some number of CONTEXT_MENUs as sub-menus.
Definition: tool_menu.h:43
REENTRANCY_GUARD(bool *aFlag)
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
CONTEXT_MENU_TRIGGER
Defines when a context menu is opened.
Definition: tool_event.h:146
@ CMENU_BUTTON
Definition: tool_event.h:147
@ TA_ANY
Definition: tool_event.h:121
@ TC_ANY
Definition: tool_event.h:55