KiCad PCB EDA Suite
TOOL_MENU Class Reference

Class TOOL_MENU. More...

#include <tool_menu.h>

Public Member Functions

 TOOL_MENU (TOOL_INTERACTIVE &aTool)
 Function TOOL_MENU. More...
 
 ~TOOL_MENU ()
 Destructor, also destructs any submenus created with TOOL_MENU::CreateSubMenu(). More...
 
CONDITIONAL_MENUGetMenu ()
 Function GetMenu. More...
 
void AddSubMenu (std::shared_ptr< ACTION_MENU > aSubMenu)
 Function CreateSubMenu. More...
 
void ShowContextMenu (SELECTION &aSelection)
 Function ShowContextMenu. More...
 
void ShowContextMenu ()
 Function ShowContextMenu. More...
 
void CloseContextMenu (OPT_TOOL_EVENT &evt)
 Function CloseContextMenu. More...
 
void AddStandardSubMenus (EDA_DRAW_FRAME *aFrame)
 Function CreateBasicMenu. More...
 

Private Member Functions

template<typename T , typename ... Args>
std::shared_ptr< T > createOwnSubMenu (Args &&... args)
 

Private Attributes

CONDITIONAL_MENU m_menu
 The conditional menu displayed by the tool. More...
 
TOOL_INTERACTIVEm_tool
 The tool that owns this menu. More...
 
std::vector< std::shared_ptr< ACTION_MENU > > m_subMenus
 Lifetime-managing container of submenus. More...
 

Detailed Description

Class TOOL_MENU.

Manages a CONDITIONAL_MENU and some number of CONTEXT_MENUs as sub-menus

Each "top-level" interactive tool can have one of these, and other tools can contribute CONTEXT_MENUS to it.

There are also helper functions for adding common sets of menu items, for example zoom and grid controls.

Definition at line 47 of file tool_menu.h.

Constructor & Destructor Documentation

◆ TOOL_MENU()

TOOL_MENU::TOOL_MENU ( TOOL_INTERACTIVE aTool)

Function TOOL_MENU.

Construct a new TOOL_MENU for a specific tool. This menu will be empty - it's up to the caller to add the relevant items. This can be done directy, using the reference returned by TOOL_MENU::GetMenu(), or the helpers for common command sets can be used, or a combination of the two.

Definition at line 34 of file tool_menu.cpp.

34  :
35  m_menu( true, &aTool ),
36  m_tool( aTool )
37 {
38 }
TOOL_INTERACTIVE & m_tool
The tool that owns this menu.
Definition: tool_menu.h:159
CONDITIONAL_MENU m_menu
The conditional menu displayed by the tool.
Definition: tool_menu.h:154

◆ ~TOOL_MENU()

TOOL_MENU::~TOOL_MENU ( )

Destructor, also destructs any submenus created with TOOL_MENU::CreateSubMenu().

Definition at line 41 of file tool_menu.cpp.

42 {
43 }

Member Function Documentation

◆ AddStandardSubMenus()

void TOOL_MENU::AddStandardSubMenus ( EDA_DRAW_FRAME aFrame)

Function CreateBasicMenu.

Construct a "basic" menu for a tool, containing only items that apply to all tools (e.g. zoom and grid)

Definition at line 83 of file tool_menu.cpp.

84 {
89 
91 
92  if( aFrame )
93  {
94  m_menu.AddMenu( createOwnSubMenu<ZOOM_MENU>( aFrame ).get(), S_C::ShowAlways, 1000 );
95  m_menu.AddMenu( createOwnSubMenu<GRID_MENU>( aFrame ).get(), S_C::ShowAlways, 1000 );
96  }
97 }
static bool ShowAlways(const SELECTION &aSelection)
Function ShowAlways The default condition function (always returns true).
void AddMenu(ACTION_MENU *aMenu, const SELECTION_CONDITION &aCondition=SELECTION_CONDITIONS::ShowAlways, int aOrder=ANY_ORDER)
Function AddMenu()
void AddSeparator(const SELECTION_CONDITION &aCondition=SELECTION_CONDITIONS::ShowAlways, int aOrder=ANY_ORDER)
Function AddSeparator()
static TOOL_ACTION zoomFitScreen
Definition: actions.h:63
CONDITIONAL_MENU m_menu
The conditional menu displayed by the tool.
Definition: tool_menu.h:154
static TOOL_ACTION zoomCenter
Definition: actions.h:62
static TOOL_ACTION zoomIn
Definition: actions.h:58
static TOOL_ACTION zoomOut
Definition: actions.h:59
void AddItem(const TOOL_ACTION &aAction, const SELECTION_CONDITION &aCondition, int aOrder=ANY_ORDER)
Function AddItem()

References CONDITIONAL_MENU::AddItem(), CONDITIONAL_MENU::AddMenu(), CONDITIONAL_MENU::AddSeparator(), m_menu, SELECTION_CONDITIONS::ShowAlways(), ACTIONS::zoomCenter, ACTIONS::zoomFitScreen, ACTIONS::zoomIn, and ACTIONS::zoomOut.

Referenced by PCB_EDITOR_CONTROL::Init(), CVPCB_SELECTION_TOOL::Init(), DRAWING_TOOL::Init(), GERBVIEW_SELECTION_TOOL::Init(), EE_SELECTION_TOOL::Init(), EE_TOOL_BASE< SCH_BASE_FRAME >::Init(), SELECTION_TOOL::Init(), and PCB_TOOL_BASE::Init().

◆ AddSubMenu()

void TOOL_MENU::AddSubMenu ( std::shared_ptr< ACTION_MENU aSubMenu)

Function CreateSubMenu.

Store a submenu of this menu model. This can be shared with other menu models.

It is the callers responsibility to add the submenu to m_menu (via GetMenu() ) in the right way, as well as to set the tool with SetTool(), since it's not a given that the menu's tool is the tool that directly owns this TOOL_MENU

Parameters
aSubMenua sub menu to add

Definition at line 52 of file tool_menu.cpp.

53 {
54  // store a copy of the menu (keeps a reference)
55  m_subMenus.push_back( std::move( aSubMenu ) );
56 }
std::vector< std::shared_ptr< ACTION_MENU > > m_subMenus
Lifetime-managing container of submenus.
Definition: tool_menu.h:164

References m_subMenus.

Referenced by createOwnSubMenu(), SCH_EDIT_TOOL::Init(), GERBVIEW_SELECTION_TOOL::Init(), SCH_WIRE_BUS_TOOL::Init(), and SELECTION_TOOL::Init().

◆ CloseContextMenu()

void TOOL_MENU::CloseContextMenu ( OPT_TOOL_EVENT evt)

Function CloseContextMenu.

Helper function to close a menu previously opened with ShowContextMenu(), if a suitable event is received

Definition at line 75 of file tool_menu.cpp.

76 {
77 }

Referenced by CVPCB_SELECTION_TOOL::Main(), GERBVIEW_SELECTION_TOOL::Main(), EE_SELECTION_TOOL::Main(), and SELECTION_TOOL::Main().

◆ createOwnSubMenu()

template<typename T , typename ... Args>
std::shared_ptr<T> TOOL_MENU::createOwnSubMenu ( Args &&...  args)
inlineprivate

Helper function for factories to abe able to easily add their own new sub menus. This sets the tool to the TOOL_MENUs owner and adds to the store.

Note, this won't share the menu between multiple invocations of the factory. But if different top-level tools are using the same factory, which one would be used for SetTool()?

Definition at line 141 of file tool_menu.h.

142  {
143  auto subMenuPtr = std::make_shared<T>( args ... );
144 
145  subMenuPtr->SetTool( &m_tool );
146  AddSubMenu( subMenuPtr );
147 
148  return subMenuPtr;
149  }
TOOL_INTERACTIVE & m_tool
The tool that owns this menu.
Definition: tool_menu.h:159
void AddSubMenu(std::shared_ptr< ACTION_MENU > aSubMenu)
Function CreateSubMenu.
Definition: tool_menu.cpp:52

References AddSubMenu(), and m_tool.

◆ GetMenu()

◆ ShowContextMenu() [1/2]

void TOOL_MENU::ShowContextMenu ( SELECTION aSelection)

Function ShowContextMenu.

Helper function to set and immediately show a CONDITIONAL_MENU in concert with the given SELECTION

You don't have to use this function, if the caller has a different way to show the menu, it can create one from the reference returned by TOOL_MENU::GetMenu(), but it will have to be managed externally to this class.

Definition at line 59 of file tool_menu.cpp.

60 {
61  m_menu.Evaluate( aSelection );
62  m_menu.UpdateAll();
63  m_menu.m_Dirty = false;
65 }
TOOL_INTERACTIVE & m_tool
The tool that owns this menu.
Definition: tool_menu.h:159
void UpdateAll()
Function UpdateAll() Runs update handlers for the menu and its submenus.
void SetContextMenu(ACTION_MENU *aMenu, CONTEXT_MENU_TRIGGER aTrigger=CMENU_BUTTON)
Function SetContextMenu()
CONDITIONAL_MENU m_menu
The conditional menu displayed by the tool.
Definition: tool_menu.h:154
void Evaluate(SELECTION &aSelection)
Function Evaluate()
bool m_Dirty
Menu requires updating before display.
Definition: action_menu.h:146

References CMENU_NOW, CONDITIONAL_MENU::Evaluate(), ACTION_MENU::m_Dirty, m_menu, m_tool, TOOL_INTERACTIVE::SetContextMenu(), and ACTION_MENU::UpdateAll().

Referenced by SCH_WIRE_BUS_TOOL::doDrawSegments(), PCB_TOOL_BASE::doInteractiveItemPlacement(), SCH_DRAWING_TOOLS::doPlaceComponent(), SCH_DRAWING_TOOLS::doSingleClickPlace(), LIB_DRAWING_TOOLS::doTwoClickPlace(), SCH_DRAWING_TOOLS::doTwoClickPlace(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::drawSegment(), LIB_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), DRAWING_TOOL::drawZone(), MODULE_EDITOR_TOOLS::EnumeratePads(), SCH_MOVE_TOOL::Main(), LIB_MOVE_TOOL::Main(), PICKER_TOOL::Main(), CVPCB_SELECTION_TOOL::Main(), GERBVIEW_SELECTION_TOOL::Main(), EE_SELECTION_TOOL::Main(), SELECTION_TOOL::Main(), CVPCB_SELECTION_TOOL::MeasureTool(), GERBVIEW_SELECTION_TOOL::MeasureTool(), EDIT_TOOL::MeasureTool(), LIB_DRAWING_TOOLS::PlaceAnchor(), SCH_DRAWING_TOOLS::PlaceImage(), DRAWING_TOOL::PlaceImportedGraphics(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), and DRAWING_TOOL::SetAnchor().

◆ ShowContextMenu() [2/2]

void TOOL_MENU::ShowContextMenu ( )

Function ShowContextMenu.

Helper function to show a context menu without any selection for tools that can't make selections.

Definition at line 68 of file tool_menu.cpp.

69 {
70  m_menu.m_Dirty = true;
72 }
TOOL_INTERACTIVE & m_tool
The tool that owns this menu.
Definition: tool_menu.h:159
void SetContextMenu(ACTION_MENU *aMenu, CONTEXT_MENU_TRIGGER aTrigger=CMENU_BUTTON)
Function SetContextMenu()
CONDITIONAL_MENU m_menu
The conditional menu displayed by the tool.
Definition: tool_menu.h:154
bool m_Dirty
Menu requires updating before display.
Definition: action_menu.h:146

References CMENU_NOW, ACTION_MENU::m_Dirty, m_menu, m_tool, and TOOL_INTERACTIVE::SetContextMenu().

Member Data Documentation

◆ m_menu

CONDITIONAL_MENU TOOL_MENU::m_menu
private

The conditional menu displayed by the tool.

Definition at line 154 of file tool_menu.h.

Referenced by AddStandardSubMenus(), GetMenu(), and ShowContextMenu().

◆ m_subMenus

std::vector<std::shared_ptr<ACTION_MENU> > TOOL_MENU::m_subMenus
private

Lifetime-managing container of submenus.

Definition at line 164 of file tool_menu.h.

Referenced by AddSubMenu().

◆ m_tool

TOOL_INTERACTIVE& TOOL_MENU::m_tool
private

The tool that owns this menu.

Definition at line 159 of file tool_menu.h.

Referenced by createOwnSubMenu(), and ShowContextMenu().


The documentation for this class was generated from the following files: