refactor: clean up some MainWindow stuff
this makes the accounts button and menubar item share the same QMenu and also refactors some code Signed-off-by: leo78913 <leo3758@riseup.net>
This commit is contained in:
		| @@ -189,15 +189,19 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi | ||||
|  | ||||
|     } | ||||
|  | ||||
|     // set the menu for the folders and help tool buttons | ||||
|     // set the menu for the folders help, and accounts tool buttons | ||||
|     { | ||||
|         auto foldersMenuButton = dynamic_cast<QToolButton*>(ui->mainToolBar->widgetForAction(ui->actionFoldersButton)); | ||||
|         foldersMenuButton->setMenu(ui->foldersMenu); | ||||
|         ui->actionFoldersButton->setMenu(ui->foldersMenu); | ||||
|         foldersMenuButton->setPopupMode(QToolButton::InstantPopup); | ||||
|  | ||||
|         helpMenuButton = dynamic_cast<QToolButton*>(ui->mainToolBar->widgetForAction(ui->actionHelpButton)); | ||||
|         helpMenuButton->setMenu(ui->helpMenu); | ||||
|         ui->actionHelpButton->setMenu(ui->helpMenu); | ||||
|         helpMenuButton->setPopupMode(QToolButton::InstantPopup); | ||||
|  | ||||
|         auto accountMenuButton = dynamic_cast<QToolButton*>(ui->mainToolBar->widgetForAction(ui->actionAccountsButton)); | ||||
|         ui->actionAccountsButton->setMenu(ui->accountsMenu); | ||||
|         accountMenuButton->setPopupMode(QToolButton::InstantPopup); | ||||
|     } | ||||
|  | ||||
|     // hide, disable and show stuff | ||||
| @@ -209,9 +213,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi | ||||
|  | ||||
|         ui->actionCheckUpdate->setVisible(BuildConfig.UPDATER_ENABLED); | ||||
|  | ||||
| #ifndef Q_OS_MAC | ||||
|         ui->actionAddToPATH->setVisible(false); | ||||
| #ifdef Q_OS_MAC | ||||
|         ui->actionAddToPATH->setVisible(true); | ||||
| #endif | ||||
|  | ||||
|         // disabled until we have an instance selected | ||||
| @@ -338,16 +341,11 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi | ||||
|     spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); | ||||
|     ui->mainToolBar->insertWidget(ui->actionAccountsButton, spacer); | ||||
|  | ||||
|     accountMenu = new QMenu(this); | ||||
|     // Use undocumented property... https://stackoverflow.com/questions/7121718/create-a-scrollbar-in-a-submenu-qt | ||||
|     accountMenu->setStyleSheet("QMenu { menu-scrollable: 1; }"); | ||||
|     ui->accountsMenu->setStyleSheet("QMenu { menu-scrollable: 1; }"); | ||||
|  | ||||
|     repopulateAccountsMenu(); | ||||
|  | ||||
|     accountMenuButton = dynamic_cast<QToolButton *>(ui->mainToolBar->widgetForAction(ui->actionAccountsButton)); | ||||
|     accountMenuButton->setMenu(accountMenu); | ||||
|     accountMenuButton->setPopupMode(QToolButton::InstantPopup); | ||||
|  | ||||
|     // Update the menu when the active account changes. | ||||
|     // Shouldn't have to use lambdas here like this, but if I don't, the compiler throws a fit. | ||||
|     // Template hell sucks... | ||||
| @@ -434,10 +432,10 @@ void MainWindow::retranslateUi() | ||||
|     MinecraftAccountPtr defaultAccount = accounts->defaultAccount(); | ||||
|     if(defaultAccount) { | ||||
|         auto profileLabel = profileInUseFilter(defaultAccount->profileName(), defaultAccount->isInUse()); | ||||
|         accountMenuButton->setText(profileLabel); | ||||
|         ui->actionAccountsButton->setText(profileLabel); | ||||
|     } | ||||
|     else { | ||||
|         accountMenuButton->setText(tr("Accounts")); | ||||
|         ui->actionAccountsButton->setText(tr("Accounts")); | ||||
|     } | ||||
|  | ||||
|     if (m_selectedInstance) { | ||||
| @@ -687,7 +685,6 @@ void MainWindow::updateThemeMenu() | ||||
|  | ||||
| void MainWindow::repopulateAccountsMenu() | ||||
| { | ||||
|     accountMenu->clear(); | ||||
|     ui->accountsMenu->clear(); | ||||
|  | ||||
|     auto accounts = APPLICATION->accounts(); | ||||
| @@ -697,18 +694,16 @@ void MainWindow::repopulateAccountsMenu() | ||||
|     if (defaultAccount) | ||||
|     { | ||||
|         // this can be called before accountMenuButton exists | ||||
|         if (accountMenuButton) | ||||
|         if (ui->actionAccountsButton) | ||||
|         { | ||||
|             auto profileLabel = profileInUseFilter(defaultAccount->profileName(), defaultAccount->isInUse()); | ||||
|             accountMenuButton->setText(profileLabel); | ||||
|             ui->actionAccountsButton->setText(profileLabel); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     if (accounts->count() <= 0) | ||||
|     { | ||||
|         ui->actionNoAccountsAdded->setText(tr("No accounts added!")); | ||||
|         ui->actionNoAccountsAdded->setEnabled(false); | ||||
|         accountMenu->addAction(ui->actionNoAccountsAdded); | ||||
|         ui->accountsMenu->addAction(ui->actionNoAccountsAdded); | ||||
|     } | ||||
|     else | ||||
| @@ -740,33 +735,21 @@ void MainWindow::repopulateAccountsMenu() | ||||
|                 action->setShortcut(QKeySequence(tr("Ctrl+%1").arg(i + 1))); | ||||
|             } | ||||
|  | ||||
|             accountMenu->addAction(action); | ||||
|             ui->accountsMenu->addAction(action); | ||||
|             connect(action, SIGNAL(triggered(bool)), SLOT(changeActiveAccount())); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     accountMenu->addSeparator(); | ||||
|     ui->accountsMenu->addSeparator(); | ||||
|  | ||||
|     ui->actionNoDefaultAccount = new QAction(this); | ||||
|     ui->actionNoDefaultAccount->setObjectName(QStringLiteral("actionNoDefaultAccount")); | ||||
|     ui->actionNoDefaultAccount->setText(tr("No Default Account")); | ||||
|     ui->actionNoDefaultAccount->setCheckable(true); | ||||
|     ui->actionNoDefaultAccount->setIcon(APPLICATION->getThemedIcon("noaccount")); | ||||
|     ui->actionNoDefaultAccount->setData(-1); | ||||
|     ui->actionNoDefaultAccount->setShortcut(QKeySequence(tr("Ctrl+0"))); | ||||
|     if (!defaultAccount) { | ||||
|         ui->actionNoDefaultAccount->setChecked(true); | ||||
|     } | ||||
|     ui->actionNoDefaultAccount->setChecked(!defaultAccount); | ||||
|  | ||||
|     accountMenu->addAction(ui->actionNoDefaultAccount); | ||||
|     ui->accountsMenu->addAction(ui->actionNoDefaultAccount); | ||||
|  | ||||
|     connect(ui->actionNoDefaultAccount, SIGNAL(triggered(bool)), SLOT(changeActiveAccount())); | ||||
|  | ||||
|     accountMenu->addSeparator(); | ||||
|     ui->accountsMenu->addSeparator(); | ||||
|     accountMenu->addAction(ui->actionManageAccounts); | ||||
|     ui->accountsMenu->addAction(ui->actionManageAccounts); | ||||
| } | ||||
|  | ||||
| @@ -811,20 +794,20 @@ void MainWindow::defaultAccountChanged() | ||||
|     if (account && account->profileName() != "") | ||||
|     { | ||||
|         auto profileLabel = profileInUseFilter(account->profileName(), account->isInUse()); | ||||
|         accountMenuButton->setText(profileLabel); | ||||
|         ui->actionAccountsButton->setText(profileLabel); | ||||
|         auto face = account->getFace(); | ||||
|         if(face.isNull()) { | ||||
|             accountMenuButton->setIcon(APPLICATION->getThemedIcon("noaccount")); | ||||
|             ui->actionAccountsButton->setIcon(APPLICATION->getThemedIcon("noaccount")); | ||||
|         } | ||||
|         else { | ||||
|             accountMenuButton->setIcon(face); | ||||
|             ui->actionAccountsButton->setIcon(face); | ||||
|         } | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     // Set the icon to the "no account" icon. | ||||
|     accountMenuButton->setIcon(APPLICATION->getThemedIcon("noaccount")); | ||||
|     accountMenuButton->setText(tr("Accounts")); | ||||
|     ui->actionAccountsButton->setIcon(APPLICATION->getThemedIcon("noaccount")); | ||||
|     ui->actionAccountsButton->setText(tr("Accounts")); | ||||
| } | ||||
|  | ||||
| bool MainWindow::eventFilter(QObject *obj, QEvent *ev) | ||||
|   | ||||
| @@ -239,10 +239,8 @@ private: | ||||
|     QToolButton *newsLabel = nullptr; | ||||
|     QLabel *m_statusLeft = nullptr; | ||||
|     QLabel *m_statusCenter = nullptr; | ||||
|     QMenu *accountMenu = nullptr; | ||||
|     LabeledToolButton *changeIconButton = nullptr; | ||||
|     LabeledToolButton *renameButton = nullptr; | ||||
|     QToolButton *accountMenuButton = nullptr; | ||||
|     QToolButton *helpMenuButton = nullptr; | ||||
|     KonamiCode * secretEventFilter = nullptr; | ||||
|  | ||||
|   | ||||
| @@ -487,6 +487,9 @@ | ||||
|    </property> | ||||
|   </action> | ||||
|   <action name="actionNoDefaultAccount"> | ||||
|    <property name="checkable"> | ||||
|     <bool>true</bool> | ||||
|    </property> | ||||
|    <property name="icon"> | ||||
|     <iconset theme="noaccount"> | ||||
|      <normaloff>.</normaloff>.</iconset> | ||||
| @@ -494,6 +497,9 @@ | ||||
|    <property name="text"> | ||||
|     <string>No Default Account</string> | ||||
|    </property> | ||||
|    <property name="shortcut"> | ||||
|     <string>Ctrl+0</string> | ||||
|    </property> | ||||
|   </action> | ||||
|   <action name="actionCloseWindow"> | ||||
|    <property name="icon"> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 leo78913
					leo78913