GH-1053 split settings dialog creation to its own namespace

This commit is contained in:
Petr Mrázek 2015-07-05 02:29:41 +02:00
parent 7f1320390c
commit 5f41886d76
8 changed files with 76 additions and 48 deletions

View File

@ -136,6 +136,10 @@ SET(MULTIMC_SOURCES
ConsoleWindow.h ConsoleWindow.h
ConsoleWindow.cpp ConsoleWindow.cpp
# GUI - settings-specific wrappers for paged dialog
SettingsUI.h
SettingsUI.cpp
# Processes # Processes
LaunchController.h LaunchController.h
LaunchController.cpp LaunchController.cpp

View File

@ -8,6 +8,7 @@
#include "ConsoleWindow.h" #include "ConsoleWindow.h"
#include "BuildConfig.h" #include "BuildConfig.h"
#include "JavaCommon.h" #include "JavaCommon.h"
#include "SettingsUI.h"
#include <QLineEdit> #include <QLineEdit>
#include <QInputDialog> #include <QInputDialog>
#include <tasks/Task.h> #include <tasks/Task.h>
@ -45,7 +46,7 @@ void LaunchController::login()
if (reply == QMessageBox::Yes) if (reply == QMessageBox::Yes)
{ {
// Open the account manager. // Open the account manager.
//on_actionManageAccounts_triggered(); SettingsUI::ShowPageDialog(MMC->globalSettingsPages(), m_parentWidget, "accounts");
} }
} }
else if (account.get() == nullptr) else if (account.get() == nullptr)

View File

@ -350,15 +350,6 @@ namespace Ui {
#include "dialogs/NotificationDialog.h" #include "dialogs/NotificationDialog.h"
#include "dialogs/ExportInstanceDialog.h" #include "dialogs/ExportInstanceDialog.h"
#include "pages/global/MultiMCPage.h"
#include "pages/global/ExternalToolsPage.h"
#include "pages/global/AccountListPage.h"
#include "pages/global/ProxyPage.h"
#include "pages/global/JavaPage.h"
#include "pages/global/MinecraftPage.h"
#include "pagedialog/PageDialog.h"
#include "InstanceList.h" #include "InstanceList.h"
#include "minecraft/MinecraftVersionList.h" #include "minecraft/MinecraftVersionList.h"
#include "minecraft/LwjglVersionList.h" #include "minecraft/LwjglVersionList.h"
@ -382,6 +373,7 @@ namespace Ui {
#include "JavaCommon.h" #include "JavaCommon.h"
#include "InstancePageProvider.h" #include "InstancePageProvider.h"
#include "LaunchController.h" #include "LaunchController.h"
#include "SettingsUI.h"
#include "minecraft/SkinUtils.h" #include "minecraft/SkinUtils.h"
#include "resources/Resource.h" #include "resources/Resource.h"
@ -541,17 +533,6 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
ui->mainToolBar->addAction(accountMenuButtonAction); ui->mainToolBar->addAction(accountMenuButtonAction);
// set up global pages dialog
{
m_globalSettingsProvider = std::make_shared<GenericPageProvider>(tr("Settings"));
m_globalSettingsProvider->addPage<MultiMCPage>();
m_globalSettingsProvider->addPage<MinecraftPage>();
m_globalSettingsProvider->addPage<JavaPage>();
m_globalSettingsProvider->addPage<ProxyPage>();
m_globalSettingsProvider->addPage<ExternalToolsPage>();
m_globalSettingsProvider->addPage<AccountListPage>();
}
// Update the menu when the active account changes. // 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. // Shouldn't have to use lambdas here like this, but if I don't, the compiler throws a fit.
// Template hell sucks... // Template hell sucks...
@ -1388,28 +1369,9 @@ void MainWindow::on_actionCheckUpdate_triggered()
updater->checkForUpdate(MMC->settings()->get("UpdateChannel").toString(), true); updater->checkForUpdate(MMC->settings()->get("UpdateChannel").toString(), true);
} }
template <typename T>
void ShowPageDialog(T raw_provider, QWidget * parent, QString open_page = QString())
{
auto provider = std::dynamic_pointer_cast<BasePageProvider>(raw_provider);
if(!provider)
return;
{
SettingsObject::Lock lock(MMC->settings());
PageDialog dlg(provider, open_page, parent);
dlg.exec();
}
}
void ShowInstancePageDialog(InstancePtr instance, QWidget * parent, QString open_page = QString())
{
auto provider = std::make_shared<InstancePageProvider>(instance);
ShowPageDialog(provider, parent, open_page);
}
void MainWindow::on_actionSettings_triggered() void MainWindow::on_actionSettings_triggered()
{ {
ShowPageDialog(m_globalSettingsProvider, this, "global-settings"); SettingsUI::ShowPageDialog(MMC->globalSettingsPages(), this, "global-settings");
// FIXME: quick HACK to make this work. improve, optimize. // FIXME: quick HACK to make this work. improve, optimize.
proxymodel->invalidate(); proxymodel->invalidate();
proxymodel->sort(0); proxymodel->sort(0);
@ -1419,28 +1381,28 @@ void MainWindow::on_actionSettings_triggered()
void MainWindow::on_actionInstanceSettings_triggered() void MainWindow::on_actionInstanceSettings_triggered()
{ {
ShowInstancePageDialog(m_selectedInstance, this, "settings"); SettingsUI::ShowInstancePageDialog(m_selectedInstance, this, "settings");
} }
void MainWindow::on_actionEditInstNotes_triggered() void MainWindow::on_actionEditInstNotes_triggered()
{ {
ShowInstancePageDialog(m_selectedInstance, this, "notes"); SettingsUI::ShowInstancePageDialog(m_selectedInstance, this, "notes");
} }
void MainWindow::on_actionEditInstance_triggered() void MainWindow::on_actionEditInstance_triggered()
{ {
ShowInstancePageDialog(m_selectedInstance, this); SettingsUI::ShowInstancePageDialog(m_selectedInstance, this);
} }
void MainWindow::on_actionScreenshots_triggered() void MainWindow::on_actionScreenshots_triggered()
{ {
ShowInstancePageDialog(m_selectedInstance, this, "screenshots"); SettingsUI::ShowInstancePageDialog(m_selectedInstance, this, "screenshots");
} }
void MainWindow::on_actionManageAccounts_triggered() void MainWindow::on_actionManageAccounts_triggered()
{ {
ShowPageDialog(m_globalSettingsProvider, this, "accounts"); SettingsUI::ShowPageDialog(MMC->globalSettingsPages(), this, "accounts");
} }
void MainWindow::on_actionReportBug_triggered() void MainWindow::on_actionReportBug_triggered()

View File

@ -33,7 +33,6 @@ class LabeledToolButton;
class QLabel; class QLabel;
class MinecraftLauncher; class MinecraftLauncher;
class BaseProfilerFactory; class BaseProfilerFactory;
class GenericPageProvider;
namespace Ui namespace Ui
{ {
@ -180,7 +179,6 @@ private:
QToolButton *changeIconButton; QToolButton *changeIconButton;
QToolButton *newsLabel; QToolButton *newsLabel;
std::shared_ptr<GenericPageProvider> m_globalSettingsProvider;
std::shared_ptr<NewsChecker> m_newsChecker; std::shared_ptr<NewsChecker> m_newsChecker;
std::shared_ptr<NotificationChecker> m_notificationChecker; std::shared_ptr<NotificationChecker> m_notificationChecker;
std::shared_ptr<LaunchController> m_launchController; std::shared_ptr<LaunchController> m_launchController;

View File

@ -1,5 +1,12 @@
#include "MultiMC.h" #include "MultiMC.h"
#include "BuildConfig.h" #include "BuildConfig.h"
#include "pages/BasePageProvider.h"
#include "pages/global/MultiMCPage.h"
#include "pages/global/MinecraftPage.h"
#include "pages/global/JavaPage.h"
#include "pages/global/ProxyPage.h"
#include "pages/global/ExternalToolsPage.h"
#include "pages/global/AccountListPage.h"
#include <iostream> #include <iostream>
#include <QDir> #include <QDir>
@ -533,6 +540,18 @@ void MultiMC::initGlobalSettings(bool test_mode)
// Jar mod nag dialog in version page // Jar mod nag dialog in version page
m_settings->registerSetting("JarModNagSeen", false); m_settings->registerSetting("JarModNagSeen", false);
// Init page provider
{
m_globalSettingsProvider = std::make_shared<GenericPageProvider>(tr("Settings"));
m_globalSettingsProvider->addPage<MultiMCPage>();
m_globalSettingsProvider->addPage<MinecraftPage>();
m_globalSettingsProvider->addPage<JavaPage>();
m_globalSettingsProvider->addPage<ProxyPage>();
m_globalSettingsProvider->addPage<ExternalToolsPage>();
m_globalSettingsProvider->addPage<AccountListPage>();
}
} }
std::shared_ptr<LWJGLVersionList> MultiMC::lwjgllist() std::shared_ptr<LWJGLVersionList> MultiMC::lwjgllist()

View File

@ -8,6 +8,7 @@
#include <QDateTime> #include <QDateTime>
#include <updater/GoUpdate.h> #include <updater/GoUpdate.h>
class GenericPageProvider;
class QFile; class QFile;
class MinecraftVersionList; class MinecraftVersionList;
class LWJGLVersionList; class LWJGLVersionList;
@ -54,6 +55,11 @@ public:
return m_settings; return m_settings;
} }
std::shared_ptr<GenericPageProvider> globalSettingsPages()
{
return m_globalSettingsProvider;
}
qint64 timeSinceStart() const qint64 timeSinceStart() const
{ {
return startTime.msecsTo(QDateTime::currentDateTime()); return startTime.msecsTo(QDateTime::currentDateTime());
@ -163,6 +169,7 @@ private:
std::shared_ptr<MinecraftVersionList> m_minecraftlist; std::shared_ptr<MinecraftVersionList> m_minecraftlist;
std::shared_ptr<JavaVersionList> m_javalist; std::shared_ptr<JavaVersionList> m_javalist;
std::shared_ptr<TranslationDownloader> m_translationChecker; std::shared_ptr<TranslationDownloader> m_translationChecker;
std::shared_ptr<GenericPageProvider> m_globalSettingsProvider;
QMap<QString, std::shared_ptr<BaseProfilerFactory>> m_profilers; QMap<QString, std::shared_ptr<BaseProfilerFactory>> m_profilers;
QMap<QString, std::shared_ptr<BaseDetachedToolFactory>> m_tools; QMap<QString, std::shared_ptr<BaseDetachedToolFactory>> m_tools;

View File

@ -0,0 +1,9 @@
#include "SettingsUI.h"
namespace SettingsUI
{
void ShowInstancePageDialog(InstancePtr instance, QWidget * parent, QString open_page)
{
auto provider = std::make_shared<InstancePageProvider>(instance);
ShowPageDialog(provider, parent, open_page);
}
}

28
application/SettingsUI.h Normal file
View File

@ -0,0 +1,28 @@
#pragma once
#include "pages/BasePageProvider.h"
#include "MultiMC.h"
#include "pagedialog/PageDialog.h"
#include "InstancePageProvider.h"
#include <settings/SettingsObject.h>
#include <BaseInstance.h>
/*
* FIXME: this is a fragment. find a better place for it.
*/
namespace SettingsUI
{
template <typename T>
void ShowPageDialog(T raw_provider, QWidget * parent, QString open_page = QString())
{
auto provider = std::dynamic_pointer_cast<BasePageProvider>(raw_provider);
if(!provider)
return;
{
SettingsObject::Lock lock(MMC->settings());
PageDialog dlg(provider, open_page, parent);
dlg.exec();
}
}
void ShowInstancePageDialog(InstancePtr instance, QWidget * parent, QString open_page = QString());
}