ActionsMenuBuilder.cpp
Go to the documentation of this file.
2
4
5namespace armarx::armem::gui
6{
8 MemoryID memoryID,
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
static Menu fromIce(const data::MenuPtr &ice)
Definition actions.cpp:101
QMenu * buildActionsMenu(actions::data::GetActionsOutput &actionsOutput)
ActionsMenuBuilder(MemoryID memoryID, QWidget *parent, std::function< void(const MemoryID &, const actions::ActionPath &)> func)
std::vector< MenuEntry > entries
Definition actions.h:30