diff --git a/launcher/Application.cpp b/launcher/Application.cpp index 8582528cf..da836fc28 100644 --- a/launcher/Application.cpp +++ b/launcher/Application.cpp @@ -40,6 +40,7 @@ #include "net/PasteUpload.h" #include "ui/MainWindow.h" #include "ui/InstanceWindow.h" +#include "ui/instanceview/InstanceView.h" #include "ui/pages/BasePageProvider.h" #include "ui/pages/global/LauncherPage.h" @@ -609,6 +610,7 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv) // The cat m_settings->registerSetting("TheCat", false); + m_settings->registerSetting("InstanceDisplayMode", InstanceView::TableMode); m_settings->registerSetting("InstSortMode", "Name"); m_settings->registerSetting("SelectedInstance", QString()); diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index 543cd62b7..472c06ef7 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -229,6 +229,8 @@ public: TranslatedAction actionViewSelectedInstFolder; TranslatedAction actionDeleteInstance; TranslatedAction actionCAT; + TranslatedAction actionTableMode; + TranslatedAction actionGridMode; TranslatedAction actionCopyInstance; TranslatedAction actionLaunchInstanceOffline; TranslatedAction actionLaunchInstanceDemo; @@ -408,6 +410,24 @@ public: actionCAT->setPriority(QAction::LowPriority); all_actions.append(&actionCAT); + actionTableMode = TranslatedAction(MainWindow); + actionTableMode->setObjectName(QStringLiteral("actionTableMode")); + actionTableMode->setCheckable(true); + actionTableMode->setIcon(APPLICATION->getThemedIcon("view-list-symbolic")); // FIXME: add custom icon + actionTableMode.setTextId(QT_TRANSLATE_NOOP("MainWindow", "&Table View")); + actionTableMode.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Display instances in a table")); + actionTableMode->setPriority(QAction::LowPriority); + all_actions.append(&actionTableMode); + + actionGridMode = TranslatedAction(MainWindow); + actionGridMode->setObjectName(QStringLiteral("actionGridMode")); + actionGridMode->setCheckable(true); + actionGridMode->setIcon(APPLICATION->getThemedIcon("view-grid-symbolic")); // FIXME: add custom icon + actionGridMode.setTextId(QT_TRANSLATE_NOOP("MainWindow", "&Grid View")); + actionGridMode.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Display instances in a grid")); + actionGridMode->setPriority(QAction::LowPriority); + all_actions.append(&actionGridMode); + // profile menu and its actions actionManageAccounts = TranslatedAction(MainWindow); actionManageAccounts->setObjectName(QStringLiteral("actionManageAccounts")); @@ -484,6 +504,9 @@ public: mainToolBar->addAction(actionCAT); + mainToolBar->addAction(actionTableMode); + mainToolBar->addAction(actionGridMode); + all_toolbars.append(&mainToolBar); MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar); } @@ -518,6 +541,8 @@ public: viewMenu = menuBar->addMenu(tr("&View")); viewMenu->setSeparatorsCollapsible(false); viewMenu->addAction(actionCAT); + viewMenu->addAction(actionTableMode); + viewMenu->addAction(actionGridMode); viewMenu->addSeparator(); menuBar->addMenu(foldersMenu); @@ -861,6 +886,36 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new MainWindow connect(ui->actionCAT.operator->(), SIGNAL(toggled(bool)), SLOT(onCatToggled(bool))); view->setCatDisplayed(cat_enable); } + // Table/Grid mode + { + int displayMode = APPLICATION->settings()->get("InstanceDisplayMode").toInt(); + ui->actionTableMode->setChecked(false); + ui->actionGridMode->setChecked(false); + if (displayMode == InstanceView::TableMode) { + ui->actionTableMode->setChecked(true); + } else { + ui->actionGridMode->setChecked(true); + } + view->switchDisplayMode(displayMode == InstanceView::TableMode ? InstanceView::TableMode : InstanceView::GridMode); + + connect(ui->actionTableMode, &QAction::triggered, this, [this](bool state){ + if (!state) { + ui->actionTableMode->setChecked(true); + } + ui->actionGridMode->setChecked(false); + view->switchDisplayMode(InstanceView::TableMode); + APPLICATION->settings()->set("InstanceDisplayMode", InstanceView::TableMode); + }); + + connect(ui->actionGridMode, &QAction::triggered, this, [this](bool state){ + if (!state) { + ui->actionGridMode->setChecked(true); + } + ui->actionTableMode->setChecked(false); + view->switchDisplayMode(InstanceView::GridMode); + APPLICATION->settings()->set("InstanceDisplayMode", InstanceView::GridMode); + }); + } // start instance when double-clicked connect(view, &InstanceView::instanceActivated, this, &MainWindow::instanceActivated); diff --git a/launcher/ui/instanceview/InstanceView.cpp b/launcher/ui/instanceview/InstanceView.cpp index 5dc704168..ad3b248ab 100644 --- a/launcher/ui/instanceview/InstanceView.cpp +++ b/launcher/ui/instanceview/InstanceView.cpp @@ -41,7 +41,6 @@ InstanceView::InstanceView(QWidget* parent, InstanceList* instances) : QStackedW addWidget(m_table); addWidget(m_grid); - switchDisplayMode(InstanceView::GridMode); } void InstanceView::storeState() diff --git a/launcher/ui/instanceview/InstanceView.h b/launcher/ui/instanceview/InstanceView.h index 0e1903694..0e6d121a0 100644 --- a/launcher/ui/instanceview/InstanceView.h +++ b/launcher/ui/instanceview/InstanceView.h @@ -31,9 +31,9 @@ class InstanceList; class InstanceView : public QStackedWidget { Q_OBJECT + public: enum DisplayMode { TableMode = 0, GridMode }; - public: explicit InstanceView(QWidget* parent = nullptr, InstanceList* instances = nullptr); void switchDisplayMode(DisplayMode mode);