feat: add table/grid toggle

Signed-off-by: Sefa Eyeoglu <contact@scrumplex.net>
This commit is contained in:
Sefa Eyeoglu 2022-10-02 12:07:42 +02:00
parent 4ea038cb4b
commit 3f23ec4bf9
No known key found for this signature in database
GPG Key ID: C10411294912A422
4 changed files with 58 additions and 2 deletions

View File

@ -40,6 +40,7 @@
#include "net/PasteUpload.h" #include "net/PasteUpload.h"
#include "ui/MainWindow.h" #include "ui/MainWindow.h"
#include "ui/InstanceWindow.h" #include "ui/InstanceWindow.h"
#include "ui/instanceview/InstanceView.h"
#include "ui/pages/BasePageProvider.h" #include "ui/pages/BasePageProvider.h"
#include "ui/pages/global/LauncherPage.h" #include "ui/pages/global/LauncherPage.h"
@ -609,6 +610,7 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
// The cat // The cat
m_settings->registerSetting("TheCat", false); m_settings->registerSetting("TheCat", false);
m_settings->registerSetting("InstanceDisplayMode", InstanceView::TableMode);
m_settings->registerSetting("InstSortMode", "Name"); m_settings->registerSetting("InstSortMode", "Name");
m_settings->registerSetting("SelectedInstance", QString()); m_settings->registerSetting("SelectedInstance", QString());

View File

@ -229,6 +229,8 @@ public:
TranslatedAction actionViewSelectedInstFolder; TranslatedAction actionViewSelectedInstFolder;
TranslatedAction actionDeleteInstance; TranslatedAction actionDeleteInstance;
TranslatedAction actionCAT; TranslatedAction actionCAT;
TranslatedAction actionTableMode;
TranslatedAction actionGridMode;
TranslatedAction actionCopyInstance; TranslatedAction actionCopyInstance;
TranslatedAction actionLaunchInstanceOffline; TranslatedAction actionLaunchInstanceOffline;
TranslatedAction actionLaunchInstanceDemo; TranslatedAction actionLaunchInstanceDemo;
@ -408,6 +410,24 @@ public:
actionCAT->setPriority(QAction::LowPriority); actionCAT->setPriority(QAction::LowPriority);
all_actions.append(&actionCAT); 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 // profile menu and its actions
actionManageAccounts = TranslatedAction(MainWindow); actionManageAccounts = TranslatedAction(MainWindow);
actionManageAccounts->setObjectName(QStringLiteral("actionManageAccounts")); actionManageAccounts->setObjectName(QStringLiteral("actionManageAccounts"));
@ -484,6 +504,9 @@ public:
mainToolBar->addAction(actionCAT); mainToolBar->addAction(actionCAT);
mainToolBar->addAction(actionTableMode);
mainToolBar->addAction(actionGridMode);
all_toolbars.append(&mainToolBar); all_toolbars.append(&mainToolBar);
MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar); MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);
} }
@ -518,6 +541,8 @@ public:
viewMenu = menuBar->addMenu(tr("&View")); viewMenu = menuBar->addMenu(tr("&View"));
viewMenu->setSeparatorsCollapsible(false); viewMenu->setSeparatorsCollapsible(false);
viewMenu->addAction(actionCAT); viewMenu->addAction(actionCAT);
viewMenu->addAction(actionTableMode);
viewMenu->addAction(actionGridMode);
viewMenu->addSeparator(); viewMenu->addSeparator();
menuBar->addMenu(foldersMenu); 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))); connect(ui->actionCAT.operator->(), SIGNAL(toggled(bool)), SLOT(onCatToggled(bool)));
view->setCatDisplayed(cat_enable); 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 // start instance when double-clicked
connect(view, &InstanceView::instanceActivated, this, &MainWindow::instanceActivated); connect(view, &InstanceView::instanceActivated, this, &MainWindow::instanceActivated);

View File

@ -41,7 +41,6 @@ InstanceView::InstanceView(QWidget* parent, InstanceList* instances) : QStackedW
addWidget(m_table); addWidget(m_table);
addWidget(m_grid); addWidget(m_grid);
switchDisplayMode(InstanceView::GridMode);
} }
void InstanceView::storeState() void InstanceView::storeState()

View File

@ -31,9 +31,9 @@ class InstanceList;
class InstanceView : public QStackedWidget { class InstanceView : public QStackedWidget {
Q_OBJECT Q_OBJECT
public:
enum DisplayMode { TableMode = 0, GridMode }; enum DisplayMode { TableMode = 0, GridMode };
public:
explicit InstanceView(QWidget* parent = nullptr, InstanceList* instances = nullptr); explicit InstanceView(QWidget* parent = nullptr, InstanceList* instances = nullptr);
void switchDisplayMode(DisplayMode mode); void switchDisplayMode(DisplayMode mode);