MenuBuilder.cpp
58 lines
| 1.5 KiB
| text/x-c
|
CppLexer
Alexandre Leroux
|
r222 | #include "Visualization/operations/MenuBuilder.h" | ||
Q_LOGGING_CATEGORY(LOG_MenuBuilder, "MenuBuilder") | ||||
MenuBuilder::MenuBuilder(QMenu *menu) | ||||
{ | ||||
if (menu) { | ||||
m_Menus.push(menu); | ||||
} | ||||
else { | ||||
qCCritical(LOG_MenuBuilder()) << QObject::tr("No parent menu has been defined"); | ||||
} | ||||
} | ||||
Alexandre Leroux
|
r404 | QMenu *MenuBuilder::addMenu(const QString &name, const QIcon &icon) | ||
Alexandre Leroux
|
r222 | { | ||
if (auto currMenu = currentMenu()) { | ||||
Alexandre Leroux
|
r404 | auto menu = currMenu->addMenu(icon, name); | ||
m_Menus.push(menu); | ||||
return menu; | ||||
Alexandre Leroux
|
r222 | } | ||
else { | ||||
qCCritical(LOG_MenuBuilder()) << QObject::tr("No current menu to attach the new menu"); | ||||
Alexandre Leroux
|
r404 | return nullptr; | ||
Alexandre Leroux
|
r222 | } | ||
} | ||||
void MenuBuilder::addSeparator() | ||||
{ | ||||
if (auto currMenu = currentMenu()) { | ||||
if (!currMenu->isEmpty()) { | ||||
currMenu->addSeparator(); | ||||
} | ||||
} | ||||
else { | ||||
qCCritical(LOG_MenuBuilder()) << QObject::tr("No current menu to attach the separator"); | ||||
} | ||||
} | ||||
void MenuBuilder::closeMenu() | ||||
{ | ||||
if (!m_Menus.isEmpty()) { | ||||
if (auto closedMenu = m_Menus.pop()) { | ||||
// Purge menu : if the closed menu has no entries, we remove it from its parent (the | ||||
// current menu) | ||||
if (auto currMenu = currentMenu()) { | ||||
if (closedMenu->isEmpty()) { | ||||
currMenu->removeAction(closedMenu->menuAction()); | ||||
} | ||||
} | ||||
} | ||||
} | ||||
} | ||||
QMenu *MenuBuilder::currentMenu() const | ||||
{ | ||||
return !m_Menus.isEmpty() ? m_Menus.top() : nullptr; | ||||
} | ||||