mirror of https://github.com/mgba-emu/mgba.git
Qt: Use MenuRole with QActions
This commit is contained in:
parent
24a41d8453
commit
e3ea64ad65
|
@ -17,6 +17,12 @@ Q_OBJECT
|
||||||
public:
|
public:
|
||||||
typedef std::function<void ()> Function;
|
typedef std::function<void ()> Function;
|
||||||
typedef std::function<void (bool)> BooleanFunction;
|
typedef std::function<void (bool)> BooleanFunction;
|
||||||
|
enum class Role {
|
||||||
|
NO_ROLE = 0,
|
||||||
|
ABOUT,
|
||||||
|
SETTINGS,
|
||||||
|
QUIT,
|
||||||
|
};
|
||||||
|
|
||||||
Action(Function, const QString& name, const QString& visibleName, QObject* parent = nullptr);
|
Action(Function, const QString& name, const QString& visibleName, QObject* parent = nullptr);
|
||||||
Action(BooleanFunction, const QString& name, const QString& visibleName, QObject* parent = nullptr);
|
Action(BooleanFunction, const QString& name, const QString& visibleName, QObject* parent = nullptr);
|
||||||
|
@ -44,8 +50,10 @@ public:
|
||||||
bool isEnabled() const { return m_enabled; }
|
bool isEnabled() const { return m_enabled; }
|
||||||
bool isActive() const { return m_active; }
|
bool isActive() const { return m_active; }
|
||||||
bool isExclusive() const { return m_exclusive; }
|
bool isExclusive() const { return m_exclusive; }
|
||||||
|
Role role() const { return m_role; }
|
||||||
|
|
||||||
void setExclusive(bool exclusive = true) { m_exclusive = exclusive; }
|
void setExclusive(bool exclusive = true) { m_exclusive = exclusive; }
|
||||||
|
void setRole(Role role) { m_role = role; }
|
||||||
|
|
||||||
Action& operator=(const Action&);
|
Action& operator=(const Action&);
|
||||||
|
|
||||||
|
@ -62,6 +70,7 @@ private:
|
||||||
bool m_enabled = true;
|
bool m_enabled = true;
|
||||||
bool m_active = false;
|
bool m_active = false;
|
||||||
bool m_exclusive = false;
|
bool m_exclusive = false;
|
||||||
|
Role m_role = Role::NO_ROLE;
|
||||||
|
|
||||||
Function m_function;
|
Function m_function;
|
||||||
BooleanFunction m_booleanFunction;
|
BooleanFunction m_booleanFunction;
|
||||||
|
|
|
@ -79,6 +79,20 @@ void ActionMapper::rebuildMenu(const QString& menu, QMenu* qmenu, QWidget* conte
|
||||||
} else if (!m_defaultShortcuts[actionName].isEmpty()) {
|
} else if (!m_defaultShortcuts[actionName].isEmpty()) {
|
||||||
qaction->setShortcut(m_defaultShortcuts[actionName][0]);
|
qaction->setShortcut(m_defaultShortcuts[actionName][0]);
|
||||||
}
|
}
|
||||||
|
switch (action->role()) {
|
||||||
|
case Action::Role::NO_ROLE:
|
||||||
|
qaction->setMenuRole(QAction::NoRole);
|
||||||
|
break;
|
||||||
|
case Action::Role::SETTINGS:
|
||||||
|
qaction->setMenuRole(QAction::PreferencesRole);
|
||||||
|
break;
|
||||||
|
case Action::Role::ABOUT:
|
||||||
|
qaction->setMenuRole(QAction::AboutRole);
|
||||||
|
break;
|
||||||
|
case Action::Role::QUIT:
|
||||||
|
qaction->setMenuRole(QAction::QuitRole);
|
||||||
|
break;
|
||||||
|
}
|
||||||
QObject::connect(qaction, &QAction::triggered, [qaction, action](bool enabled) {
|
QObject::connect(qaction, &QAction::triggered, [qaction, action](bool enabled) {
|
||||||
if (qaction->isCheckable()) {
|
if (qaction->isCheckable()) {
|
||||||
action->trigger(enabled);
|
action->trigger(enabled);
|
||||||
|
@ -172,4 +186,4 @@ Action* ActionMapper::getAction(const QString& itemName) {
|
||||||
|
|
||||||
QKeySequence ActionMapper::defaultShortcut(const QString& itemName) {
|
QKeySequence ActionMapper::defaultShortcut(const QString& itemName) {
|
||||||
return m_defaultShortcuts[itemName];
|
return m_defaultShortcuts[itemName];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1311,11 +1311,8 @@ void Window::setupMenu(QMenuBar* menubar) {
|
||||||
m_actions.addSeparator("file");
|
m_actions.addSeparator("file");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
m_actions.addAction(tr("About..."), "about", openTView<AboutScreen>(), "file");
|
m_actions.addAction(tr("About..."), "about", openTView<AboutScreen>(), "file")->setRole(Action::Role::ABOUT);
|
||||||
|
m_actions.addAction(tr("E&xit"), "quit", static_cast<QWidget*>(this), &QWidget::close, "file", QKeySequence::Quit)->setRole(Action::Role::SETTINGS);
|
||||||
#ifndef Q_OS_MAC
|
|
||||||
m_actions.addAction(tr("E&xit"), "quit", static_cast<QWidget*>(this), &QWidget::close, "file", QKeySequence::Quit);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
m_actions.addMenu(tr("&Emulation"), "emu");
|
m_actions.addMenu(tr("&Emulation"), "emu");
|
||||||
addGameAction(tr("&Reset"), "reset", &CoreController::reset, "emu", QKeySequence("Ctrl+R"));
|
addGameAction(tr("&Reset"), "reset", &CoreController::reset, "emu", QKeySequence("Ctrl+R"));
|
||||||
|
@ -1579,7 +1576,7 @@ void Window::setupMenu(QMenuBar* menubar) {
|
||||||
addGameAction(tr("&Cheats..."), "cheatsWindow", openControllerTView<CheatsView>(), "tools");
|
addGameAction(tr("&Cheats..."), "cheatsWindow", openControllerTView<CheatsView>(), "tools");
|
||||||
|
|
||||||
m_actions.addSeparator("tools");
|
m_actions.addSeparator("tools");
|
||||||
m_actions.addAction(tr("Settings..."), "settings", this, &Window::openSettingsWindow, "tools");
|
m_actions.addAction(tr("Settings..."), "settings", this, &Window::openSettingsWindow, "tools")->setRole(Action::Role::SETTINGS);
|
||||||
m_actions.addAction(tr("Make portable"), "makePortable", this, &Window::tryMakePortable, "tools");
|
m_actions.addAction(tr("Make portable"), "makePortable", this, &Window::tryMakePortable, "tools");
|
||||||
|
|
||||||
#ifdef USE_DEBUGGERS
|
#ifdef USE_DEBUGGERS
|
||||||
|
|
Loading…
Reference in New Issue