KiCad PCB EDA Suite
Loading...
Searching...
No Matches
cvpcb_fpviewer_selection_tool.cpp
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 The KiCad Developers, see AUTHORS.txt for contributors.
5 *
6 * This program is free software: you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation, either version 3 of the License, or (at your
9 * option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License along
17 * with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#include <functional>
21using namespace std::placeholders;
22
23#include <tool/tool_event.h>
24#include <tool/tool_manager.h>
25#include <tools/cvpcb_actions.h>
27
28
30 TOOL_INTERACTIVE( "cvpcb.FootprintViewerInteractiveSelection" ),
31 m_frame( nullptr )
32{
33}
34
35
37{
38 getEditFrame<DISPLAY_FOOTPRINTS_FRAME>()->AddStandardSubMenus( *m_menu.get() );
39 return true;
40}
41
42
44{
45 m_frame = getEditFrame<DISPLAY_FOOTPRINTS_FRAME>();
46}
47
48
50{
51 // Main loop: keep receiving events
52 while( TOOL_EVENT* evt = Wait() )
53 {
55 m_frame->GetCanvas()->SetCurrentCursor( KICURSOR::ARROW );
56
57 if( evt->IsClick( BUT_LEFT ) )
58 {
60 }
61 else if( evt->IsClick( BUT_RIGHT ) )
62 {
63 m_menu->ShowContextMenu( m_selection );
64 }
65 else if( evt->IsDblClick( BUT_MIDDLE ) )
66 {
68 }
69 else if( evt->IsCancel() || evt->Action() == TA_UNDO_REDO_PRE )
70 {
72 }
73 else
74 {
75 evt->SetPassEvent();
76 }
77 }
78
79 return 0;
80}
81
82
84{
85 ACTION_MENU* actionMenu = aEvent.Parameter<ACTION_MENU*>();
86 CONDITIONAL_MENU* conditionalMenu = dynamic_cast<CONDITIONAL_MENU*>( actionMenu );
87
88 if( conditionalMenu )
89 conditionalMenu->Evaluate( m_selection );
90
91 if( actionMenu )
92 actionMenu->UpdateAll();
93
94 return 0;
95}
96
97
99{
103}
static TOOL_ACTION updateMenu
Definition: actions.h:220
static TOOL_ACTION zoomFitScreen
Definition: actions.h:134
Define the structure of a menu based on ACTIONs.
Definition: action_menu.h:49
void UpdateAll()
Run update handlers for the menu and its submenus.
void Evaluate(const SELECTION &aSelection)
Update the contents of the menu based on the supplied conditions.
static TOOL_ACTION selectionActivate
Activation actions.
Definition: cvpcb_actions.h:41
DISPLAY_FOOTPRINTS_FRAME * m_frame
Pointer to the parent frame.
void setTransitions() override
Set up handlers for various events.
bool Init() override
Init() is called once upon a registration of the tool.
void Reset(RESET_REASON aReason) override
Bring the tool to a known, initial state.
SELECTION m_selection
Current state of selection (not really used: no selection in display footprints frame).
int UpdateMenu(const TOOL_EVENT &aEvent)
Update the menu to reflect the current tool states.
int Main(const TOOL_EVENT &aEvent)
The main loop.
void SetCurrentCursor(KICURSOR aCursor)
Set the current cursor shape for this panel.
PCB_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
bool ToolStackIsEmpty()
Definition: tools_holder.h:125
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:220
RESET_REASON
Determine the reason of reset for a tool.
Definition: tool_base.h:78
Generic, UI-independent tool event.
Definition: tool_event.h:168
T Parameter() const
Return a parameter assigned to the event.
Definition: tool_event.h:465
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).
std::unique_ptr< TOOL_MENU > m_menu
The functions below are not yet implemented - their interface may change.
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.
bool RunAction(const std::string &aActionName, T aParam)
Run the specified action immediately, pausing the current action to run the new one.
Definition: tool_manager.h:150
@ TA_UNDO_REDO_PRE
This event is sent before undo/redo command is performed.
Definition: tool_event.h:106
@ BUT_MIDDLE
Definition: tool_event.h:134
@ BUT_LEFT
Definition: tool_event.h:132
@ BUT_RIGHT
Definition: tool_event.h:133