KiCad PCB EDA Suite
Loading...
Searching...
No Matches
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
35
class
ACTION_MENU
;
36
37
38
struct
REENTRANCY_GUARD
39
{
40
REENTRANCY_GUARD
(
bool
* aFlag ) :
41
m_flag
( aFlag )
42
{
43
*
m_flag
=
true
;
44
}
45
46
~REENTRANCY_GUARD
()
47
{
48
*
m_flag
=
false
;
49
}
50
51
private
:
52
bool
*
m_flag
;
53
};
54
55
56
class
TOOL_INTERACTIVE
:
public
TOOL_BASE
57
{
58
public
:
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
77
TOOL_MENU
&
GetToolMenu
();
78
85
void
SetContextMenu
(
ACTION_MENU
* aMenu,
CONTEXT_MENU_TRIGGER
aTrigger =
CMENU_BUTTON
);
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
124
protected
:
125
std::unique_ptr<TOOL_MENU>
m_menu
;
126
127
private
:
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
146
template
<
class
T>
147
void
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
ACTION_MENU
Defines the structure of a menu based on ACTIONs.
Definition:
action_menu.h:49
TOOL_BASE
Base abstract interface for all kinds of tools.
Definition:
tool_base.h:66
TOOL_EVENT_LIST
A list of TOOL_EVENTs, with overloaded || operators allowing for concatenating TOOL_EVENTs with littl...
Definition:
tool_event.h:636
TOOL_EVENT
Generic, UI-independent tool event.
Definition:
tool_event.h:167
TOOL_INTERACTIVE
Definition:
tool_interactive.h:57
TOOL_INTERACTIVE::SetContextMenu
void SetContextMenu(ACTION_MENU *aMenu, CONTEXT_MENU_TRIGGER aTrigger=CMENU_BUTTON)
Assign a context menu and tells when it should be activated.
Definition:
tool_interactive.cpp:93
TOOL_INTERACTIVE::RunMainStack
void RunMainStack(std::function< void()> aFunc)
Call a function using the main stack.
Definition:
tool_interactive.cpp:104
TOOL_INTERACTIVE::Go
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).
Definition:
tool_interactive.h:147
TOOL_INTERACTIVE::GetToolMenu
TOOL_MENU & GetToolMenu()
Definition:
tool_interactive.cpp:110
TOOL_INTERACTIVE::setTransitions
virtual void setTransitions()=0
This method is meant to be overridden in order to specify handlers for events.
TOOL_INTERACTIVE::goInternal
void goInternal(TOOL_STATE_FUNC &aState, const TOOL_EVENT_LIST &aConditions)
Definition:
tool_interactive.cpp:83
TOOL_INTERACTIVE::m_menu
std::unique_ptr< TOOL_MENU > m_menu
The functions below are not yet implemented - their interface may change.
Definition:
tool_interactive.h:125
TOOL_INTERACTIVE::~TOOL_INTERACTIVE
virtual ~TOOL_INTERACTIVE()
Definition:
tool_interactive.cpp:59
TOOL_INTERACTIVE::Wait
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.
Definition:
tool_interactive.cpp:70
TOOL_INTERACTIVE::resetTransitions
void resetTransitions()
Clear the current transition map and restores the default one created by setTransitions().
Definition:
tool_interactive.cpp:76
TOOL_INTERACTIVE::Activate
void Activate()
Run the tool.
Definition:
tool_interactive.cpp:64
TOOL_MANAGER
Master controller class:
Definition:
tool_manager.h:62
TOOL_MENU
Manage a CONDITIONAL_MENU and some number of CONTEXT_MENUs as sub-menus.
Definition:
tool_menu.h:43
REENTRANCY_GUARD
Definition:
tool_interactive.h:39
REENTRANCY_GUARD::REENTRANCY_GUARD
REENTRANCY_GUARD(bool *aFlag)
Definition:
tool_interactive.h:40
REENTRANCY_GUARD::~REENTRANCY_GUARD
~REENTRANCY_GUARD()
Definition:
tool_interactive.h:46
REENTRANCY_GUARD::m_flag
bool * m_flag
Definition:
tool_interactive.h:52
tool_base.h
TOOL_STATE_FUNC
std::function< int(const TOOL_EVENT &)> TOOL_STATE_FUNC
Definition:
tool_base.h:58
TOOL_ID
int TOOL_ID
Unique identifier for tools.
Definition:
tool_base.h:56
tool_event.h
CONTEXT_MENU_TRIGGER
CONTEXT_MENU_TRIGGER
Defines when a context menu is opened.
Definition:
tool_event.h:150
CMENU_BUTTON
@ CMENU_BUTTON
Definition:
tool_event.h:151
TA_ANY
@ TA_ANY
Definition:
tool_event.h:125
TC_ANY
@ TC_ANY
Definition:
tool_event.h:59
tool_menu.h
src
include
tool
tool_interactive.h
Generated on Wed Oct 30 2024 00:04:51 for KiCad PCB EDA Suite by
1.9.6