|
|
|
|
#include "MainMenu.h"
|
|
|
|
|
#include "MainWindow.h"
|
|
|
|
|
#include <QMenu>
|
|
|
|
|
#include "ActionEventHandler.h"
|
|
|
|
|
|
|
|
|
|
namespace GUI
|
|
|
|
|
{
|
|
|
|
|
MainMenu::MainMenu(MainWindow *mainWindow) : MainMenuBase(mainWindow)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainMenu::addMenu(QString title, QList<MenuActionItem*> actions, QMenu * parent)
|
|
|
|
|
{
|
|
|
|
|
if (m_MenuBar == nullptr) {
|
|
|
|
|
m_MenuBar = new QMenuBar;
|
|
|
|
|
m_MainWindow->setMenuBar(m_MenuBar);
|
|
|
|
|
}
|
|
|
|
|
// 如果父级菜单为空,则添加顶级菜单
|
|
|
|
|
if (parent == nullptr) {
|
|
|
|
|
parent = new QMenu();
|
|
|
|
|
parent->setTitle(title);
|
|
|
|
|
m_MenuBar->addMenu(parent);
|
|
|
|
|
}
|
|
|
|
|
// 遍历actions依次添加
|
|
|
|
|
for (auto actionItem : actions) {
|
|
|
|
|
if (actionItem->getSeparator()) { parent->addSeparator(); continue; }
|
|
|
|
|
// 如果有子级action,则需要添加menu
|
|
|
|
|
if (actionItem->getChilds().size() > 0) {
|
|
|
|
|
auto menu = new QMenu();
|
|
|
|
|
menu->setTitle(actionItem->getTitle());
|
|
|
|
|
addMenu(actionItem->getTitle(), actionItem->getChilds(), menu);
|
|
|
|
|
parent->addMenu(menu);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
// 否则,只需要添加action
|
|
|
|
|
auto action = parent->addAction(actionItem->getIcon(), actionItem->getTitle());
|
|
|
|
|
action->setObjectName(actionItem->getOperAction());
|
|
|
|
|
connect(action, SIGNAL(triggered()), m_MainWindow->getActionEventHandle(), SLOT(execOperator()));
|
|
|
|
|
// 设置action的可选中状态,并进行分组实现只能单选
|
|
|
|
|
action->setCheckable(actionItem->getCheckable());
|
|
|
|
|
auto checkGroup = actionItem->getCheckGroup();
|
|
|
|
|
if (!checkGroup.isEmpty()) {
|
|
|
|
|
if (!m_ActionGroups.contains(checkGroup))
|
|
|
|
|
m_ActionGroups.insert(checkGroup, new QActionGroup(parent));
|
|
|
|
|
m_ActionGroups[checkGroup]->addAction(action);
|
|
|
|
|
}
|
|
|
|
|
// 设置action的快捷键
|
|
|
|
|
if (!actionItem->getKey().isEmpty())
|
|
|
|
|
action->setShortcut(actionItem->getKey());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainMenu::addToolMenu(QString title, QList<MenuActionItem*> actions, Qt::ToolButtonStyle style)
|
|
|
|
|
{
|
|
|
|
|
if (m_MenuToolBars.contains(title)) m_MenuToolBars.remove(title);
|
|
|
|
|
|
|
|
|
|
m_MenuToolBars[title] = new QToolBar;
|
|
|
|
|
m_MenuToolBars[title]->setToolButtonStyle(style);
|
|
|
|
|
|
|
|
|
|
// 遍历actions依次添加
|
|
|
|
|
for (auto actionItem : actions) {
|
|
|
|
|
|
|
|
|
|
if (actionItem->getSeparator()) {
|
|
|
|
|
m_MenuToolBars[title]->addSeparator();
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
auto action = m_MenuToolBars[title]->addAction(actionItem->getIcon(), actionItem->getTitle());
|
|
|
|
|
action->setObjectName(actionItem->getOperAction());
|
|
|
|
|
connect(action, SIGNAL(triggered()), m_MainWindow->getActionEventHandle(), SLOT(execOperator()));
|
|
|
|
|
}
|
|
|
|
|
m_MainWindow->addToolBar(Qt::TopToolBarArea, m_MenuToolBars[title]);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|