|
|
#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");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
QMenu *MenuBuilder::addMenu(const QString &name, const QIcon &icon)
|
|
|
{
|
|
|
if (auto currMenu = currentMenu()) {
|
|
|
auto menu = currMenu->addMenu(icon, name);
|
|
|
m_Menus.push(menu);
|
|
|
return menu;
|
|
|
}
|
|
|
else {
|
|
|
qCCritical(LOG_MenuBuilder()) << QObject::tr("No current menu to attach the new menu");
|
|
|
return nullptr;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
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;
|
|
|
}
|
|
|
|