diff options
| author | TheKodeToad <TheKodeToad@proton.me> | 2023-07-22 11:26:02 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-22 11:26:02 +0100 |
| commit | 57430fd189aed592a170d597de61b3acabaaa43d (patch) | |
| tree | b3727db40fdea31d24541c0c8181c43df13e774c /launcher/ui | |
| parent | ec85266860b7503b24ff3840fb6bf74588acc7c8 (diff) | |
| parent | 6ffcfcd7e9d96ae0a2846d1cf23b27425a838709 (diff) | |
| download | PrismLauncher-57430fd189aed592a170d597de61b3acabaaa43d.tar.gz PrismLauncher-57430fd189aed592a170d597de61b3acabaaa43d.tar.bz2 PrismLauncher-57430fd189aed592a170d597de61b3acabaaa43d.zip | |
Merge branch 'develop' into better-launch
Signed-off-by: TheKodeToad <TheKodeToad@proton.me>
Diffstat (limited to 'launcher/ui')
60 files changed, 1881 insertions, 1112 deletions
diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index a2137dd3..00f40365 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -43,102 +43,100 @@ #include "FileSystem.h" #include "MainWindow.h" +#include "ui/dialogs/ExportToModListDialog.h" #include "ui_MainWindow.h" -#include <QVariant> -#include <QUrl> #include <QDir> #include <QFileInfo> +#include <QUrl> +#include <QVariant> -#include <QKeyEvent> #include <QAction> #include <QActionGroup> #include <QApplication> #include <QButtonGroup> +#include <QFileDialog> #include <QHBoxLayout> #include <QHeaderView> +#include <QInputDialog> +#include <QKeyEvent> +#include <QLabel> #include <QMainWindow> -#include <QStatusBar> -#include <QToolBar> -#include <QWidget> #include <QMenu> #include <QMenuBar> #include <QMessageBox> -#include <QFileDialog> -#include <QInputDialog> -#include <QLabel> -#include <QToolButton> -#include <QWidgetAction> #include <QProgressDialog> #include <QShortcut> +#include <QStatusBar> +#include <QToolBar> +#include <QToolButton> +#include <QWidget> +#include <QWidgetAction> #include <BaseInstance.h> +#include <BuildConfig.h> +#include <DesktopServices.h> #include <InstanceList.h> -#include <minecraft/MinecraftInstance.h> #include <MMCZip.h> +#include <SkinUtils.h> #include <icons/IconList.h> -#include <java/JavaUtils.h> #include <java/JavaInstallList.h> +#include <java/JavaUtils.h> #include <launch/LaunchTask.h> +#include <minecraft/MinecraftInstance.h> #include <minecraft/auth/AccountList.h> -#include <SkinUtils.h> -#include <BuildConfig.h> -#include <net/NetJob.h> #include <net/Download.h> +#include <net/NetJob.h> #include <news/NewsChecker.h> #include <tools/BaseProfiler.h> #include <updater/ExternalUpdater.h> -#include <DesktopServices.h> -#include "InstanceWindow.h" #include "InstancePageProvider.h" +#include "InstanceWindow.h" #include "JavaCommon.h" #include "LaunchController.h" -#include "ui/instanceview/InstanceProxyModel.h" -#include "ui/instanceview/InstanceView.h" -#include "ui/instanceview/InstanceDelegate.h" -#include "ui/widgets/LabeledToolButton.h" -#include "ui/dialogs/NewInstanceDialog.h" -#include "ui/dialogs/NewsDialog.h" -#include "ui/dialogs/ProgressDialog.h" #include "ui/dialogs/AboutDialog.h" -#include "ui/dialogs/CustomMessageBox.h" -#include "ui/dialogs/IconPickerDialog.h" #include "ui/dialogs/CopyInstanceDialog.h" +#include "ui/dialogs/CustomMessageBox.h" #include "ui/dialogs/EditAccountDialog.h" #include "ui/dialogs/ExportInstanceDialog.h" -#include "ui/dialogs/ExportMrPackDialog.h" +#include "ui/dialogs/ExportPackDialog.h" +#include "ui/dialogs/IconPickerDialog.h" #include "ui/dialogs/ImportResourceDialog.h" +#include "ui/dialogs/NewInstanceDialog.h" +#include "ui/dialogs/NewsDialog.h" +#include "ui/dialogs/ProgressDialog.h" +#include "ui/instanceview/InstanceDelegate.h" +#include "ui/instanceview/InstanceProxyModel.h" +#include "ui/instanceview/InstanceView.h" #include "ui/themes/ITheme.h" #include "ui/themes/ThemeManager.h" +#include "ui/widgets/LabeledToolButton.h" -#include "minecraft/mod/tasks/LocalResourceParse.h" +#include "minecraft/WorldList.h" #include "minecraft/mod/ModFolderModel.h" #include "minecraft/mod/ShaderPackFolderModel.h" -#include "minecraft/WorldList.h" +#include "minecraft/mod/tasks/LocalResourceParse.h" #include "KonamiCode.h" -#include "InstanceImportTask.h" #include "InstanceCopyTask.h" +#include "InstanceImportTask.h" #include "MMCTime.h" namespace { -QString profileInUseFilter(const QString & profile, bool used) +QString profileInUseFilter(const QString& profile, bool used) { - if(used) - { + if (used) { return QObject::tr("%1 (in use)").arg(profile); - } - else - { + } else { return profile; } } -} +} // namespace -MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) +MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); @@ -184,7 +182,6 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi ui->instanceToolBar->addContextMenuAction(ui->newsToolBar->toggleViewAction()); ui->instanceToolBar->addContextMenuAction(ui->instanceToolBar->toggleViewAction()); ui->instanceToolBar->addContextMenuAction(ui->actionLockToolbars); - } // set the menu for the folders help, accounts, and export tool buttons @@ -205,6 +202,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi auto exportInstanceMenu = new QMenu(this); exportInstanceMenu->addAction(ui->actionExportInstanceZip); exportInstanceMenu->addAction(ui->actionExportInstanceMrPack); + exportInstanceMenu->addAction(ui->actionExportInstanceFlamePack); + exportInstanceMenu->addAction(ui->actionExportInstanceToModList); ui->actionExportInstance->setMenu(exportInstanceMenu); } @@ -230,7 +229,6 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi if (qgetenv("XDG_CURRENT_DESKTOP") == "gamescope") { ui->mainToolBar->addAction(ui->actionCloseWindow); } - } // add the toolbar toggles to the view menu @@ -300,9 +298,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi connect(proxymodel, &InstanceProxyModel::dataChanged, this, &MainWindow::instanceDataChanged); view->setModel(proxymodel); - view->setSourceOfGroupCollapseStatus([](const QString & groupName)->bool { - return APPLICATION->instances()->isGroupCollapsed(groupName); - }); + view->setSourceOfGroupCollapseStatus( + [](const QString& groupName) -> bool { return APPLICATION->instances()->isGroupCollapsed(groupName); }); connect(view, &InstanceView::groupStateChanged, APPLICATION->instances().get(), &InstanceList::on_GroupStateChanged); ui->horizontalLayout->addWidget(view); } @@ -348,7 +345,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi statusBar()->addPermanentWidget(m_statusCenter, 0); // Add "manage accounts" button, right align - QWidget *spacer = new QWidget(); + QWidget* spacer = new QWidget(); spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); ui->mainToolBar->insertWidget(ui->actionAccountsButton, spacer); @@ -360,21 +357,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi // 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... - connect( - APPLICATION->accounts().get(), - &AccountList::defaultAccountChanged, - [this] { - defaultAccountChanged(); - } - ); - connect( - APPLICATION->accounts().get(), - &AccountList::listChanged, - [this] - { - repopulateAccountsMenu(); - } - ); + connect(APPLICATION->accounts().get(), &AccountList::defaultAccountChanged, [this] { defaultAccountChanged(); }); + connect(APPLICATION->accounts().get(), &AccountList::listChanged, [this] { repopulateAccountsMenu(); }); // Show initial account defaultAccountChanged(); @@ -415,9 +399,9 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi // macOS always has a native menu bar, so these fixes are not applicable // Other systems may or may not have a native menu bar (most do not - it seems like only Ubuntu Unity does) #ifndef Q_OS_MAC -void MainWindow::keyReleaseEvent(QKeyEvent *event) +void MainWindow::keyReleaseEvent(QKeyEvent* event) { - if(event->key()==Qt::Key_Alt && !APPLICATION->settings()->get("MenuBarInsteadOfToolBar").toBool()) + if (event->key() == Qt::Key_Alt && !APPLICATION->settings()->get("MenuBarInsteadOfToolBar").toBool()) ui->menuBar->setVisible(!ui->menuBar->isVisible()); else QMainWindow::keyReleaseEvent(event); @@ -426,7 +410,6 @@ void MainWindow::keyReleaseEvent(QKeyEvent *event) void MainWindow::retranslateUi() { - if (m_selectedInstance) { m_statusLeft->setText(m_selectedInstance->getStatusbarDescription()); } else { @@ -436,7 +419,7 @@ void MainWindow::retranslateUi() ui->retranslateUi(this); MinecraftAccountPtr defaultAccount = APPLICATION->accounts()->defaultAccount(); - if(defaultAccount) { + if (defaultAccount) { auto profileLabel = profileInUseFilter(defaultAccount->profileName(), defaultAccount->isInUse()); ui->actionAccountsButton->setText(profileLabel); } @@ -456,14 +439,12 @@ void MainWindow::retranslateUi() } } -MainWindow::~MainWindow() -{ -} +MainWindow::~MainWindow() {} -QMenu * MainWindow::createPopupMenu() +QMenu* MainWindow::createPopupMenu() { QMenu* filteredMenu = QMainWindow::createPopupMenu(); - filteredMenu->removeAction( ui->mainToolBar->toggleViewAction() ); + filteredMenu->removeAction(ui->mainToolBar->toggleViewAction()); filteredMenu->addAction(ui->actionLockToolbars); @@ -477,10 +458,11 @@ void MainWindow::lockToolbars(bool state) APPLICATION->settings()->set("ToolbarsLocked", state); } - void MainWindow::konamiTriggered() { - QString gradient = " stop:0 rgba(125, 0, 0, 255), stop:0.166 rgba(125, 125, 0, 255), stop:0.333 rgba(0, 125, 0, 255), stop:0.5 rgba(0, 125, 125, 255), stop:0.666 rgba(0, 0, 125, 255), stop:0.833 rgba(125, 0, 125, 255), stop:1 rgba(125, 0, 0, 255));"; + QString gradient = + " stop:0 rgba(125, 0, 0, 255), stop:0.166 rgba(125, 125, 0, 255), stop:0.333 rgba(0, 125, 0, 255), stop:0.5 rgba(0, 125, 125, " + "255), stop:0.666 rgba(0, 0, 125, 255), stop:0.833 rgba(125, 0, 125, 255), stop:1 rgba(125, 0, 0, 255));"; QString stylesheet = "background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0," + gradient; if (ui->mainToolBar->styleSheet() == stylesheet) { ui->mainToolBar->setStyleSheet(""); @@ -499,16 +481,15 @@ void MainWindow::konamiTriggered() } } -void MainWindow::showInstanceContextMenu(const QPoint &pos) +void MainWindow::showInstanceContextMenu(const QPoint& pos) { - QList<QAction *> actions; + QList<QAction*> actions; - QAction *actionSep = new QAction("", this); + QAction* actionSep = new QAction("", this); actionSep->setSeparator(true); bool onInstance = view->indexAt(pos).isValid(); - if (onInstance) - { + if (onInstance) { // reuse the file menu actions actions = ui->fileMenu->actions(); @@ -522,21 +503,18 @@ void MainWindow::showInstanceContextMenu(const QPoint &pos) // add header actions.prepend(actionSep); - QAction *actionVoid = new QAction(m_selectedInstance->name(), this); + QAction* actionVoid = new QAction(m_selectedInstance->name(), this); actionVoid->setEnabled(false); actions.prepend(actionVoid); - } - else - { + } else { auto group = view->groupNameAt(pos); - QAction *actionVoid = new QAction(BuildConfig.LAUNCHER_DISPLAYNAME, this); + QAction* actionVoid = new QAction(BuildConfig.LAUNCHER_DISPLAYNAME, this); actionVoid->setEnabled(false); - QAction *actionCreateInstance = new QAction(tr("Create instance"), this); + QAction* actionCreateInstance = new QAction(tr("Create instance"), this); actionCreateInstance->setToolTip(ui->actionAddInstance->toolTip()); - if(!group.isNull()) - { + if (!group.isNull()) { QVariantMap data; data["group"] = group; actionCreateInstance->setData(data); @@ -547,9 +525,8 @@ void MainWindow::showInstanceContextMenu(const QPoint &pos) actions.prepend(actionSep); actions.prepend(actionVoid); actions.append(actionCreateInstance); - if(!group.isNull()) - { - QAction *actionDeleteGroup = new QAction(tr("Delete group '%1'").arg(group), this); + if (!group.isNull()) { + QAction* actionDeleteGroup = new QAction(tr("Delete group '%1'").arg(group), this); QVariantMap data; data["group"] = group; actionDeleteGroup->setData(data); @@ -585,7 +562,7 @@ void MainWindow::updateLaunchButton() void MainWindow::updateThemeMenu() { - QMenu *themeMenu = ui->actionChangeTheme->menu(); + QMenu* themeMenu = ui->actionChangeTheme->menu(); if (themeMenu) { themeMenu->clear(); @@ -595,10 +572,10 @@ void MainWindow::updateThemeMenu() auto themes = APPLICATION->getValidApplicationThemes(); - QActionGroup* themesGroup = new QActionGroup( this ); + QActionGroup* themesGroup = new QActionGroup(this); for (auto* theme : themes) { - QAction * themeAction = themeMenu->addAction(theme->name()); + QAction* themeAction = themeMenu->addAction(theme->name()); themeAction->setCheckable(true); if (APPLICATION->settings()->get("ApplicationTheme").toString() == theme->id()) { @@ -620,7 +597,7 @@ void MainWindow::repopulateAccountsMenu() ui->accountsMenu->clear(); // NOTE: this is done so the accounts button text is not set to the accounts menu title - QMenu *accountsButtonMenu = ui->actionAccountsButton->menu(); + QMenu* accountsButtonMenu = ui->actionAccountsButton->menu(); if (accountsButtonMenu) { accountsButtonMenu->clear(); } else { @@ -632,11 +609,9 @@ void MainWindow::repopulateAccountsMenu() MinecraftAccountPtr defaultAccount = accounts->defaultAccount(); QString active_profileId = ""; - if (defaultAccount) - { + if (defaultAccount) { // this can be called before accountMenuButton exists - if (ui->actionAccountsButton) - { + if (ui->actionAccountsButton) { auto profileLabel = profileInUseFilter(defaultAccount->profileName(), defaultAccount->isInUse()); ui->actionAccountsButton->setText(profileLabel); } @@ -644,38 +619,31 @@ void MainWindow::repopulateAccountsMenu() QActionGroup* accountsGroup = new QActionGroup(this); - if (accounts->count() <= 0) - { + if (accounts->count() <= 0) { ui->actionNoAccountsAdded->setEnabled(false); ui->accountsMenu->addAction(ui->actionNoAccountsAdded); - } - else - { + } else { // TODO: Nicer way to iterate? - for (int i = 0; i < accounts->count(); i++) - { + for (int i = 0; i < accounts->count(); i++) { MinecraftAccountPtr account = accounts->at(i); auto profileLabel = profileInUseFilter(account->profileName(), account->isInUse()); - QAction *action = new QAction(profileLabel, this); + QAction* action = new QAction(profileLabel, this); action->setData(i); action->setCheckable(true); action->setActionGroup(accountsGroup); - if (defaultAccount == account) - { + if (defaultAccount == account) { action->setChecked(true); } auto face = account->getFace(); - if(!face.isNull()) { + if (!face.isNull()) { action->setIcon(face); - } - else { + } else { action->setIcon(APPLICATION->getThemedIcon("noaccount")); } const int highestNumberKey = 9; - if(i<highestNumberKey) - { + if (i < highestNumberKey) { action->setShortcut(QKeySequence(tr("Ctrl+%1").arg(i + 1))); } @@ -702,8 +670,7 @@ void MainWindow::repopulateAccountsMenu() void MainWindow::updatesAllowedChanged(bool allowed) { - if(!BuildConfig.UPDATER_ENABLED) - { + if (!BuildConfig.UPDATER_ENABLED) { return; } ui->actionCheckUpdate->setEnabled(allowed); @@ -714,7 +681,7 @@ void MainWindow::updatesAllowedChanged(bool allowed) */ void MainWindow::changeActiveAccount() { - QAction *sAction = (QAction *)sender(); + QAction* sAction = (QAction*)sender(); // Profile's associated Mojang username if (sAction->data().type() != QVariant::Type::Int) @@ -723,7 +690,7 @@ void MainWindow::changeActiveAccount() QVariant data = sAction->data(); bool valid = false; int index = data.toInt(&valid); - if(!valid) { + if (!valid) { index = -1; } auto accounts = APPLICATION->accounts(); @@ -738,15 +705,13 @@ void MainWindow::defaultAccountChanged() MinecraftAccountPtr account = APPLICATION->accounts()->defaultAccount(); // FIXME: this needs adjustment for MSA - if (account && account->profileName() != "") - { + if (account && account->profileName() != "") { auto profileLabel = profileInUseFilter(account->profileName(), account->isInUse()); ui->actionAccountsButton->setText(profileLabel); auto face = account->getFace(); - if(face.isNull()) { + if (face.isNull()) { ui->actionAccountsButton->setIcon(APPLICATION->getThemedIcon("noaccount")); - } - else { + } else { ui->actionAccountsButton->setIcon(face); } return; @@ -757,33 +722,30 @@ void MainWindow::defaultAccountChanged() ui->actionAccountsButton->setText(tr("Accounts")); } -bool MainWindow::eventFilter(QObject *obj, QEvent *ev) +bool MainWindow::eventFilter(QObject* obj, QEvent* ev) { - if (obj == view) - { - if (ev->type() == QEvent::KeyPress) - { + if (obj == view) { + if (ev->type() == QEvent::KeyPress) { secretEventFilter->input(ev); - QKeyEvent *keyEvent = static_cast<QKeyEvent *>(ev); - switch (keyEvent->key()) - { - /* - case Qt::Key_Enter: - case Qt::Key_Return: - activateInstance(m_selectedInstance); - return true; - */ - case Qt::Key_Delete: - on_actionDeleteInstance_triggered(); - return true; - case Qt::Key_F5: - refreshInstances(); - return true; - case Qt::Key_F2: - on_actionRenameInstance_triggered(); |
