summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-06-02 13:14:21 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-06-02 13:14:21 -0400
commit860eb49b45703d939196e92ba6e6d99f54ed3088 (patch)
tree74eb7ceecdc31cfc83c9529831c06422068abd9a /src
parent3c7b232361d01f79a1d48ae3d8200cb6a68bbf32 (diff)
removed actionToToolButton(), which was replacing QAction's in the toolbar with QToolButton's, making it very difficult to have an equivalent in the main menu. QAction's can have a menu, so use that instead.
the only place this doesn't work is with the nexus button, which can be replaced by a menu if there are IPluginModPage plugins adding items to it; registerModPage() works fine with the toolbar, but doesn't handle the main menu yet
Diffstat (limited to 'src')
-rw-r--r--src/mainwindow.cpp117
-rw-r--r--src/mainwindow.h9
-rw-r--r--src/mainwindow.ui29
3 files changed, 59 insertions, 96 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index ff62e05e..462eb5e0 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -206,6 +206,7 @@ MainWindow::MainWindow(QSettings &initSettings
, m_ContextItem(nullptr)
, m_ContextAction(nullptr)
, m_ContextRow(-1)
+ , m_browseModPage(nullptr)
, m_CurrentSaveView(nullptr)
, m_OrganizerCore(organizerCore)
, m_PluginContainer(pluginContainer)
@@ -248,17 +249,12 @@ MainWindow::MainWindow(QSettings &initSettings
// Setup toolbar
QWidget *spacer = new QWidget(ui->toolBar);
spacer->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
- QWidget *widget = ui->toolBar->widgetForAction(ui->actionTool);
- QToolButton *toolBtn = qobject_cast<QToolButton*>(widget);
- if (toolBtn->menu() == nullptr) {
- actionToToolButton(ui->actionTool);
- }
-
- actionToToolButton(ui->actionHelp);
- createHelpWidget();
+ setupActionMenu(ui->actionTool);
+ setupActionMenu(ui->actionHelp);
+ setupActionMenu(ui->actionEndorseMO);
- actionToToolButton(ui->actionEndorseMO);
+ createHelpMenu();
createEndorseWidget();
toggleMO2EndorseState();
@@ -611,28 +607,13 @@ static QModelIndex mapToModel(const QAbstractItemModel *targetModel, QModelIndex
return result;
}
-
-void MainWindow::actionToToolButton(QAction *&sourceAction)
+void MainWindow::setupActionMenu(QAction* a)
{
- QToolButton *button = new QToolButton(ui->toolBar);
- button->setObjectName(sourceAction->objectName());
- button->setIcon(sourceAction->icon());
- button->setText(sourceAction->text());
- button->setPopupMode(QToolButton::InstantPopup);
- button->setToolButtonStyle(ui->toolBar->toolButtonStyle());
- button->setToolTip(sourceAction->toolTip());
- button->setShortcut(sourceAction->shortcut());
- QMenu *buttonMenu = new QMenu(sourceAction->text(), button);
- button->setMenu(buttonMenu);
- QAction *newAction = ui->toolBar->insertWidget(sourceAction, button);
- newAction->setObjectName(sourceAction->objectName());
- newAction->setIcon(sourceAction->icon());
- newAction->setText(sourceAction->text());
- newAction->setToolTip(sourceAction->toolTip());
- newAction->setShortcut(sourceAction->shortcut());
- ui->toolBar->removeAction(sourceAction);
- sourceAction->deleteLater();
- sourceAction = newAction;
+ a->setMenu(new QMenu(this));
+
+ auto* w = ui->toolBar->widgetForAction(a);
+ if (auto* tb=dynamic_cast<QToolButton*>(w))
+ tb->setPopupMode(QToolButton::InstantPopup);
}
void MainWindow::updateToolBar()
@@ -760,32 +741,34 @@ void MainWindow::createEndorseWidget()
}
-void MainWindow::createHelpWidget()
+void MainWindow::createHelpMenu()
{
- QToolButton *toolBtn = qobject_cast<QToolButton*>(ui->toolBar->widgetForAction(ui->actionHelp));
- QMenu *buttonMenu = toolBtn->menu();
- if (buttonMenu == nullptr) {
+ auto* menu = ui->actionHelp->menu();
+ if (!menu) {
+ // this happens on startup because languageChanged() (which calls this) is
+ // called before the menus are actually created
return;
}
- buttonMenu->clear();
- QAction *helpAction = new QAction(tr("Help on UI"), buttonMenu);
+ menu->clear();
+
+ QAction *helpAction = new QAction(tr("Help on UI"), menu);
connect(helpAction, SIGNAL(triggered()), this, SLOT(helpTriggered()));
- buttonMenu->addAction(helpAction);
+ menu->addAction(helpAction);
- QAction *wikiAction = new QAction(tr("Documentation"), buttonMenu);
+ QAction *wikiAction = new QAction(tr("Documentation"), menu);
connect(wikiAction, SIGNAL(triggered()), this, SLOT(wikiTriggered()));
- buttonMenu->addAction(wikiAction);
+ menu->addAction(wikiAction);
- QAction *discordAction = new QAction(tr("Chat on Discord"), buttonMenu);
+ QAction *discordAction = new QAction(tr("Chat on Discord"), menu);
connect(discordAction, SIGNAL(triggered()), this, SLOT(discordTriggered()));
- buttonMenu->addAction(discordAction);
+ menu->addAction(discordAction);
- QAction *issueAction = new QAction(tr("Report Issue"), buttonMenu);
+ QAction *issueAction = new QAction(tr("Report Issue"), menu);
connect(issueAction, SIGNAL(triggered()), this, SLOT(issueTriggered()));
- buttonMenu->addAction(issueAction);
+ menu->addAction(issueAction);
- QMenu *tutorialMenu = new QMenu(tr("Tutorials"), buttonMenu);
+ QMenu *tutorialMenu = new QMenu(tr("Tutorials"), menu);
typedef std::vector<std::pair<int, QAction*> > ActionList;
@@ -823,9 +806,9 @@ void MainWindow::createHelpWidget()
tutorialMenu->addAction(iter->second);
}
- buttonMenu->addMenu(tutorialMenu);
- buttonMenu->addAction(tr("About"), this, SLOT(about()));
- buttonMenu->addAction(tr("About Qt"), qApp, SLOT(aboutQt()));
+ menu->addMenu(tutorialMenu);
+ menu->addAction(tr("About"), this, SLOT(about()));
+ menu->addAction(tr("About Qt"), qApp, SLOT(aboutQt()));
}
void MainWindow::modFilterActive(bool filterActive)
@@ -1128,21 +1111,20 @@ void MainWindow::modPagePluginInvoke()
void MainWindow::registerPluginTool(IPluginTool *tool, QString name, QMenu *menu)
{
+ if (!menu) {
+ menu = ui->actionTool->menu();
+ }
+
if (name.isEmpty())
name = tool->displayName();
- QAction *action = new QAction(tool->icon(), name, ui->toolBar);
+ QAction *action = new QAction(tool->icon(), name, menu);
action->setToolTip(tool->tooltip());
tool->setParentWidget(this);
action->setData(qVariantFromValue((QObject*)tool));
connect(action, SIGNAL(triggered()), this, SLOT(toolPluginInvoke()), Qt::QueuedConnection);
- if (menu == nullptr) {
- QToolButton *toolBtn = qobject_cast<QToolButton*>(ui->toolBar->widgetForAction(ui->actionTool));
- toolBtn->menu()->addAction(action);
- } else {
- menu->addAction(action);
- }
+ menu->addAction(action);
}
void MainWindow::registerPluginTools(std::vector<IPluginTool *> toolPlugins)
@@ -1176,8 +1158,7 @@ void MainWindow::registerPluginTools(std::vector<IPluginTool *> toolPlugins)
for (auto info : submenuMap[submenuKey]) {
registerPluginTool(info.second, info.first, submenu);
}
- QToolButton *toolBtn = qobject_cast<QToolButton*>(ui->toolBar->widgetForAction(ui->actionTool));
- toolBtn->menu()->addMenu(submenu);
+ ui->actionTool->menu()->addMenu(submenu);
}
else {
registerPluginTool(submenuMap[submenuKey].front().second);
@@ -1188,25 +1169,23 @@ void MainWindow::registerPluginTools(std::vector<IPluginTool *> toolPlugins)
void MainWindow::registerModPage(IPluginModPage *modPage)
{
// turn the browser action into a drop-down menu if necessary
- if (ui->actionNexus->menu() == nullptr) {
- QAction *nexusAction = ui->actionNexus;
- // TODO: use a different icon for nexus!
- ui->actionNexus = new QAction(nexusAction->icon(), tr("Browse Mod Page"), ui->toolBar);
- ui->toolBar->insertAction(nexusAction, ui->actionNexus);
- ui->toolBar->removeAction(nexusAction);
- actionToToolButton(ui->actionNexus);
+ if (!m_browseModPage) {
+ m_browseModPage = new QAction(ui->actionNexus->icon(), tr("Browse Mod Page"), this);
+ setupActionMenu(m_browseModPage);
- QToolButton *browserBtn = qobject_cast<QToolButton*>(ui->toolBar->widgetForAction(ui->actionNexus));
- browserBtn->menu()->addAction(nexusAction);
+ m_browseModPage->menu()->addAction(ui->actionNexus);
+
+ ui->toolBar->insertAction(ui->actionNexus, m_browseModPage);
+ ui->toolBar->removeAction(ui->actionNexus);
}
- QAction *action = new QAction(modPage->icon(), modPage->displayName(), ui->toolBar);
+ QAction *action = new QAction(modPage->icon(), modPage->displayName(), this);
modPage->setParentWidget(this);
action->setData(qVariantFromValue(reinterpret_cast<QObject*>(modPage)));
connect(action, SIGNAL(triggered()), this, SLOT(modPagePluginInvoke()), Qt::QueuedConnection);
- QToolButton *toolBtn = qobject_cast<QToolButton*>(ui->toolBar->widgetForAction(ui->actionNexus));
- toolBtn->menu()->addAction(action);
+
+ m_browseModPage->menu()->addAction(action);
}
@@ -5096,7 +5075,7 @@ void MainWindow::languageChange(const QString &newLanguage)
ui->profileBox->setItemText(0, QObject::tr("<Manage...>"));
- createHelpWidget();
+ createHelpMenu();
updateDownloadView();
updateProblemsButton();
diff --git a/src/mainwindow.h b/src/mainwindow.h
index 1f0dd5ff..7281aab7 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -206,7 +206,9 @@ private:
void cleanup();
- void actionToToolButton(QAction *&sourceAction);
+ void setupActionMenu(QAction* a);
+ void createHelpMenu();
+ void createEndorseWidget();
void updateToolBar();
void activateSelectedProfile();
@@ -255,9 +257,6 @@ private:
// remove invalid category-references from mods
void fixCategories();
- void createEndorseWidget();
- void createHelpWidget();
-
bool extractProgress(QProgressDialog &extractProgress, int percentage, std::string fileName);
size_t checkForProblems();
@@ -343,6 +342,8 @@ private:
QTreeWidgetItem *m_ContextItem;
QAction *m_ContextAction;
+ QAction* m_browseModPage;
+
CategoryFactory &m_CategoryFactory;
bool m_LoginAttempted;
diff --git a/src/mainwindow.ui b/src/mainwindow.ui
index 84d3c9e4..a3eb8504 100644
--- a/src/mainwindow.ui
+++ b/src/mainwindow.ui
@@ -1418,14 +1418,14 @@ p, li { white-space: pre-wrap; }
</property>
<addaction name="actionNexus"/>
<addaction name="actionModify_Executables"/>
- <addaction name="actionToolMenu"/>
+ <addaction name="actionTool"/>
<addaction name="actionSettings"/>
</widget>
<widget class="QMenu" name="menu_Help">
<property name="title">
<string>&amp;Help</string>
</property>
- <addaction name="actionHelpMenu"/>
+ <addaction name="actionHelp"/>
<addaction name="actionUpdate"/>
<addaction name="actionEndorseMOMenu"/>
</widget>
@@ -1621,7 +1621,10 @@ p, li { white-space: pre-wrap; }
<string>&amp;Help</string>
</property>
<property name="toolTip">
- <string>Help</string>
+ <string>Show help options</string>
+ </property>
+ <property name="statusTip">
+ <string>Show help options</string>
</property>
<property name="shortcut">
<string>Ctrl+H</string>
@@ -1691,26 +1694,6 @@ p, li { white-space: pre-wrap; }
<string>Exits Mod Organizer</string>
</property>
</action>
- <action name="actionToolMenu">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/MO/gui/plugins</normaloff>:/MO/gui/plugins</iconset>
- </property>
- <property name="text">
- <string>&amp;Tools</string>
- </property>
- </action>
- <action name="actionHelpMenu">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>&amp;Help menu</string>
- </property>
- </action>
<action name="actionEndorseMOMenu">
<property name="enabled">
<bool>false</bool>