ActionsMenuBuilder.cpp
Go to the documentation of this file.
1 #include "ActionsMenuBuilder.h"
2 
4 
6 {
9  QWidget* parent,
10  std::function<void(const MemoryID&, const actions::ActionPath&)> func) :
11  memoryID(std::move(memoryID)), parent(parent), func(std::move(func))
12  {
13  }
14 
15  QMenu*
16  ActionsMenuBuilder::buildActionsMenu(actions::data::GetActionsOutput& actionsOutput)
17  {
18  auto* menu = new QMenu("Actions", parent);
19 
20  for (const auto& entry : actions::Menu::fromIce(actionsOutput.menu).entries)
21  {
22  addMenuEntry(menu, {}, entry);
23  }
24 
25  return menu;
26  }
27 
28  void
29  ActionsMenuBuilder::addMenuEntry( // NOLINT (clangd complains about the recursion here)
30  QMenu* menu,
31  actions::ActionPath path,
32  const actions::MenuEntry& entry)
33  {
34  path.push_back(entry.id);
35  if (entry.entries.empty())
36  {
37  menu->addAction(QString::fromStdString(entry.text),
38  parent,
39  [this, path]() { func(memoryID, path); });
40  }
41  else
42  {
43  QMenu* qSubmenu = menu->addMenu(QString::fromStdString(entry.text));
44  for (const auto& subEntry : entry.entries)
45  {
46  addMenuEntry(qSubmenu, path, subEntry);
47  }
48  }
49  }
50 
51 } // namespace armarx::armem::gui
ActionsMenuBuilder.h
armarx::armem::actions::MenuEntry::text
std::string text
Definition: actions.h:29
armarx::armem::actions::MenuEntry
Definition: actions.h:13
armarx::armem::actions::Menu::entries
std::vector< MenuEntry > entries
Definition: actions.h:66
armarx::armem::gui::ActionsMenuBuilder::buildActionsMenu
QMenu * buildActionsMenu(actions::data::GetActionsOutput &actionsOutput)
Definition: ActionsMenuBuilder.cpp:16
armarx::armem::actions::MenuEntry::entries
std::vector< MenuEntry > entries
Definition: actions.h:30
armarx::armem::MemoryID
A memory ID.
Definition: MemoryID.h:47
armarx::armem::actions::Menu::fromIce
static Menu fromIce(const data::MenuPtr &ice)
Definition: actions.cpp:101
std
Definition: Application.h:66
armarx::armem::gui
Definition: ActionsMenuBuilder.cpp:5
armarx::armem::index::memoryID
const MemoryID memoryID
Definition: memory_ids.cpp:28
armarx::armem::gui::ActionsMenuBuilder::ActionsMenuBuilder
ActionsMenuBuilder(MemoryID memoryID, QWidget *parent, std::function< void(const MemoryID &, const actions::ActionPath &)> func)
Definition: ActionsMenuBuilder.cpp:7
armarx::armem::actions::MenuEntry::id
std::string id
Definition: actions.h:28
ice_conversions.h