From 8e44ab2338f4ca63d58de4b3329c384df9d6c053 Mon Sep 17 00:00:00 2001 From: Petr Mrázek Date: Mon, 19 Mar 2018 02:36:12 +0100 Subject: NOISSUE redo new instance dialog --- application/CMakeLists.txt | 85 +-- application/FtbListModel.cpp | 2 + application/InstancePageProvider.h | 22 +- application/InstanceWindow.cpp | 2 +- application/MainWindow.cpp | 44 +- application/MainWindow.h | 5 +- application/MultiMC.cpp | 2 + application/SettingsUI.h | 2 +- application/VersionProxyModel.cpp | 71 +-- application/VersionProxyModel.h | 19 +- application/dialogs/ChooseFtbPackDialog.cpp | 88 ---- application/dialogs/ChooseFtbPackDialog.h | 34 -- application/dialogs/ChooseFtbPackDialog.ui | 119 ----- application/dialogs/NewInstanceDialog.cpp | 263 +++------- application/dialogs/NewInstanceDialog.h | 43 +- application/dialogs/NewInstanceDialog.ui | 346 +------------ application/dialogs/VersionSelectDialog.cpp | 4 +- application/pagedialog/PageDialog.cpp | 11 +- application/pagedialog/PageDialog.h | 3 +- application/pages/BasePage.h | 15 +- application/pages/BasePageProvider.h | 4 +- application/pages/InstanceSettingsPage.cpp | 251 --------- application/pages/InstanceSettingsPage.h | 74 --- application/pages/InstanceSettingsPage.ui | 393 -------------- application/pages/LegacyUpgradePage.cpp | 45 -- application/pages/LegacyUpgradePage.h | 64 --- application/pages/LegacyUpgradePage.ui | 47 -- application/pages/LogPage.cpp | 312 ----------- application/pages/LogPage.h | 86 ---- application/pages/LogPage.ui | 182 ------- application/pages/ModFolderPage.cpp | 210 -------- application/pages/ModFolderPage.h | 108 ---- application/pages/ModFolderPage.ui | 180 ------- application/pages/NotesPage.cpp | 21 - application/pages/NotesPage.h | 60 --- application/pages/NotesPage.ui | 57 --- application/pages/OtherLogsPage.cpp | 313 ----------- application/pages/OtherLogsPage.h | 81 --- application/pages/OtherLogsPage.ui | 150 ------ application/pages/ResourcePackPage.h | 21 - application/pages/ScreenshotsPage.cpp | 372 -------------- application/pages/ScreenshotsPage.h | 84 --- application/pages/ScreenshotsPage.ui | 106 ---- application/pages/TexturePackPage.h | 19 - application/pages/VersionPage.cpp | 570 --------------------- application/pages/VersionPage.h | 95 ---- application/pages/VersionPage.ui | 318 ------------ application/pages/WorldListPage.cpp | 330 ------------ application/pages/WorldListPage.h | 96 ---- application/pages/WorldListPage.ui | 168 ------ application/pages/global/PackagesPage.cpp | 2 +- application/pages/global/PackagesPage.h | 2 +- .../pages/instance/InstanceSettingsPage.cpp | 251 +++++++++ application/pages/instance/InstanceSettingsPage.h | 74 +++ application/pages/instance/InstanceSettingsPage.ui | 393 ++++++++++++++ application/pages/instance/LegacyUpgradePage.cpp | 50 ++ application/pages/instance/LegacyUpgradePage.h | 64 +++ application/pages/instance/LegacyUpgradePage.ui | 47 ++ application/pages/instance/LogPage.cpp | 312 +++++++++++ application/pages/instance/LogPage.h | 86 ++++ application/pages/instance/LogPage.ui | 182 +++++++ application/pages/instance/ModFolderPage.cpp | 210 ++++++++ application/pages/instance/ModFolderPage.h | 108 ++++ application/pages/instance/ModFolderPage.ui | 180 +++++++ application/pages/instance/NotesPage.cpp | 21 + application/pages/instance/NotesPage.h | 60 +++ application/pages/instance/NotesPage.ui | 57 +++ application/pages/instance/OtherLogsPage.cpp | 313 +++++++++++ application/pages/instance/OtherLogsPage.h | 81 +++ application/pages/instance/OtherLogsPage.ui | 150 ++++++ application/pages/instance/ResourcePackPage.h | 21 + application/pages/instance/ScreenshotsPage.cpp | 372 ++++++++++++++ application/pages/instance/ScreenshotsPage.h | 84 +++ application/pages/instance/ScreenshotsPage.ui | 106 ++++ application/pages/instance/TexturePackPage.h | 19 + application/pages/instance/VersionPage.cpp | 570 +++++++++++++++++++++ application/pages/instance/VersionPage.h | 95 ++++ application/pages/instance/VersionPage.ui | 318 ++++++++++++ application/pages/instance/WorldListPage.cpp | 330 ++++++++++++ application/pages/instance/WorldListPage.h | 96 ++++ application/pages/instance/WorldListPage.ui | 168 ++++++ application/pages/modplatform/FTBPage.cpp | 152 ++++++ application/pages/modplatform/FTBPage.h | 86 ++++ application/pages/modplatform/FTBPage.ui | 61 +++ application/pages/modplatform/ImportPage.cpp | 125 +++++ application/pages/modplatform/ImportPage.h | 70 +++ application/pages/modplatform/ImportPage.ui | 52 ++ application/pages/modplatform/TechnicPage.cpp | 29 ++ application/pages/modplatform/TechnicPage.h | 61 +++ application/pages/modplatform/TechnicPage.ui | 48 ++ application/pages/modplatform/TwitchPage.cpp | 29 ++ application/pages/modplatform/TwitchPage.h | 61 +++ application/pages/modplatform/TwitchPage.ui | 48 ++ application/pages/modplatform/VanillaPage.cpp | 114 +++++ application/pages/modplatform/VanillaPage.h | 75 +++ application/pages/modplatform/VanillaPage.ui | 149 ++++++ application/resources/multimc/multimc.qrc | 6 + application/resources/multimc/scalable/technic.svg | 1 + application/resources/multimc/scalable/twitch.svg | 63 +++ application/widgets/InstanceCardWidget.ui | 61 +++ application/widgets/JavaSettingsWidget.cpp | 4 +- application/widgets/PageContainer.cpp | 3 +- application/widgets/PageContainer.h | 10 +- application/widgets/VersionSelectWidget.cpp | 23 +- application/widgets/VersionSelectWidget.h | 6 +- 105 files changed, 6401 insertions(+), 5755 deletions(-) delete mode 100644 application/dialogs/ChooseFtbPackDialog.cpp delete mode 100644 application/dialogs/ChooseFtbPackDialog.h delete mode 100644 application/dialogs/ChooseFtbPackDialog.ui delete mode 100644 application/pages/InstanceSettingsPage.cpp delete mode 100644 application/pages/InstanceSettingsPage.h delete mode 100644 application/pages/InstanceSettingsPage.ui delete mode 100644 application/pages/LegacyUpgradePage.cpp delete mode 100644 application/pages/LegacyUpgradePage.h delete mode 100644 application/pages/LegacyUpgradePage.ui delete mode 100644 application/pages/LogPage.cpp delete mode 100644 application/pages/LogPage.h delete mode 100644 application/pages/LogPage.ui delete mode 100644 application/pages/ModFolderPage.cpp delete mode 100644 application/pages/ModFolderPage.h delete mode 100644 application/pages/ModFolderPage.ui delete mode 100644 application/pages/NotesPage.cpp delete mode 100644 application/pages/NotesPage.h delete mode 100644 application/pages/NotesPage.ui delete mode 100644 application/pages/OtherLogsPage.cpp delete mode 100644 application/pages/OtherLogsPage.h delete mode 100644 application/pages/OtherLogsPage.ui delete mode 100644 application/pages/ResourcePackPage.h delete mode 100644 application/pages/ScreenshotsPage.cpp delete mode 100644 application/pages/ScreenshotsPage.h delete mode 100644 application/pages/ScreenshotsPage.ui delete mode 100644 application/pages/TexturePackPage.h delete mode 100644 application/pages/VersionPage.cpp delete mode 100644 application/pages/VersionPage.h delete mode 100644 application/pages/VersionPage.ui delete mode 100644 application/pages/WorldListPage.cpp delete mode 100644 application/pages/WorldListPage.h delete mode 100644 application/pages/WorldListPage.ui create mode 100644 application/pages/instance/InstanceSettingsPage.cpp create mode 100644 application/pages/instance/InstanceSettingsPage.h create mode 100644 application/pages/instance/InstanceSettingsPage.ui create mode 100644 application/pages/instance/LegacyUpgradePage.cpp create mode 100644 application/pages/instance/LegacyUpgradePage.h create mode 100644 application/pages/instance/LegacyUpgradePage.ui create mode 100644 application/pages/instance/LogPage.cpp create mode 100644 application/pages/instance/LogPage.h create mode 100644 application/pages/instance/LogPage.ui create mode 100644 application/pages/instance/ModFolderPage.cpp create mode 100644 application/pages/instance/ModFolderPage.h create mode 100644 application/pages/instance/ModFolderPage.ui create mode 100644 application/pages/instance/NotesPage.cpp create mode 100644 application/pages/instance/NotesPage.h create mode 100644 application/pages/instance/NotesPage.ui create mode 100644 application/pages/instance/OtherLogsPage.cpp create mode 100644 application/pages/instance/OtherLogsPage.h create mode 100644 application/pages/instance/OtherLogsPage.ui create mode 100644 application/pages/instance/ResourcePackPage.h create mode 100644 application/pages/instance/ScreenshotsPage.cpp create mode 100644 application/pages/instance/ScreenshotsPage.h create mode 100644 application/pages/instance/ScreenshotsPage.ui create mode 100644 application/pages/instance/TexturePackPage.h create mode 100644 application/pages/instance/VersionPage.cpp create mode 100644 application/pages/instance/VersionPage.h create mode 100644 application/pages/instance/VersionPage.ui create mode 100644 application/pages/instance/WorldListPage.cpp create mode 100644 application/pages/instance/WorldListPage.h create mode 100644 application/pages/instance/WorldListPage.ui create mode 100644 application/pages/modplatform/FTBPage.cpp create mode 100644 application/pages/modplatform/FTBPage.h create mode 100644 application/pages/modplatform/FTBPage.ui create mode 100644 application/pages/modplatform/ImportPage.cpp create mode 100644 application/pages/modplatform/ImportPage.h create mode 100644 application/pages/modplatform/ImportPage.ui create mode 100644 application/pages/modplatform/TechnicPage.cpp create mode 100644 application/pages/modplatform/TechnicPage.h create mode 100644 application/pages/modplatform/TechnicPage.ui create mode 100644 application/pages/modplatform/TwitchPage.cpp create mode 100644 application/pages/modplatform/TwitchPage.h create mode 100644 application/pages/modplatform/TwitchPage.ui create mode 100644 application/pages/modplatform/VanillaPage.cpp create mode 100644 application/pages/modplatform/VanillaPage.h create mode 100644 application/pages/modplatform/VanillaPage.ui create mode 100644 application/resources/multimc/scalable/technic.svg create mode 100644 application/resources/multimc/scalable/twitch.svg create mode 100644 application/widgets/InstanceCardWidget.ui (limited to 'application') diff --git a/application/CMakeLists.txt b/application/CMakeLists.txt index 48c1a359..5eeca240 100644 --- a/application/CMakeLists.txt +++ b/application/CMakeLists.txt @@ -80,29 +80,32 @@ SET(MULTIMC_SOURCES JavaCommon.h JavaCommon.cpp - # GUI - page dialog pages + # GUI - paged dialog base pages/BasePage.h pages/BasePageContainer.h - pages/VersionPage.cpp - pages/VersionPage.h - pages/TexturePackPage.h - pages/ResourcePackPage.h - pages/ModFolderPage.cpp - pages/ModFolderPage.h - pages/NotesPage.cpp - pages/NotesPage.h - pages/LogPage.cpp - pages/LogPage.h - pages/InstanceSettingsPage.cpp - pages/InstanceSettingsPage.h - pages/ScreenshotsPage.cpp - pages/ScreenshotsPage.h - pages/OtherLogsPage.cpp - pages/OtherLogsPage.h - pages/LegacyUpgradePage.cpp - pages/LegacyUpgradePage.h - pages/WorldListPage.cpp - pages/WorldListPage.h + pages/BasePageProvider.h + + # GUI - instance pages + pages/instance/VersionPage.cpp + pages/instance/VersionPage.h + pages/instance/TexturePackPage.h + pages/instance/ResourcePackPage.h + pages/instance/ModFolderPage.cpp + pages/instance/ModFolderPage.h + pages/instance/NotesPage.cpp + pages/instance/NotesPage.h + pages/instance/LogPage.cpp + pages/instance/LogPage.h + pages/instance/InstanceSettingsPage.cpp + pages/instance/InstanceSettingsPage.h + pages/instance/ScreenshotsPage.cpp + pages/instance/ScreenshotsPage.h + pages/instance/OtherLogsPage.cpp + pages/instance/OtherLogsPage.h + pages/instance/LegacyUpgradePage.cpp + pages/instance/LegacyUpgradePage.h + pages/instance/WorldListPage.cpp + pages/instance/WorldListPage.h # GUI - global settings pages pages/global/AccountListPage.cpp @@ -124,6 +127,18 @@ SET(MULTIMC_SOURCES pages/global/PackagesPage.cpp pages/global/PackagesPage.h + # GUI - platform pages + pages/modplatform/VanillaPage.cpp + pages/modplatform/VanillaPage.h + pages/modplatform/FTBPage.cpp + pages/modplatform/FTBPage.h + pages/modplatform/TwitchPage.cpp + pages/modplatform/TwitchPage.h + pages/modplatform/TechnicPage.cpp + pages/modplatform/TechnicPage.h + pages/modplatform/ImportPage.cpp + pages/modplatform/ImportPage.h + # GUI - dialogs dialogs/AboutDialog.cpp dialogs/AboutDialog.h @@ -159,8 +174,6 @@ SET(MULTIMC_SOURCES dialogs/VersionSelectDialog.h dialogs/SkinUploadDialog.cpp dialogs/SkinUploadDialog.h - dialogs/ChooseFtbPackDialog.cpp - dialogs/ChooseFtbPackDialog.h # GUI - widgets @@ -210,15 +223,15 @@ SET(MULTIMC_SOURCES ######## UIs ######## SET(MULTIMC_UIS # Instance pages - pages/VersionPage.ui - pages/ModFolderPage.ui - pages/LogPage.ui - pages/InstanceSettingsPage.ui - pages/NotesPage.ui - pages/ScreenshotsPage.ui - pages/OtherLogsPage.ui - pages/LegacyUpgradePage.ui - pages/WorldListPage.ui + pages/instance/VersionPage.ui + pages/instance/ModFolderPage.ui + pages/instance/LogPage.ui + pages/instance/InstanceSettingsPage.ui + pages/instance/NotesPage.ui + pages/instance/ScreenshotsPage.ui + pages/instance/OtherLogsPage.ui + pages/instance/LegacyUpgradePage.ui + pages/instance/WorldListPage.ui # Global settings pages pages/global/AccountListPage.ui @@ -230,6 +243,13 @@ SET(MULTIMC_UIS pages/global/PasteEEPage.ui pages/global/PackagesPage.ui + # Platform pages + pages/modplatform/VanillaPage.ui + pages/modplatform/FTBPage.ui + pages/modplatform/TwitchPage.ui + pages/modplatform/TechnicPage.ui + pages/modplatform/ImportPage.ui + # Dialogs dialogs/CopyInstanceDialog.ui dialogs/NewComponentDialog.ui @@ -244,7 +264,6 @@ SET(MULTIMC_UIS dialogs/UpdateDialog.ui dialogs/NotificationDialog.ui dialogs/SkinUploadDialog.ui - dialogs/ChooseFtbPackDialog.ui # Widgets/other widgets/CustomCommands.ui diff --git a/application/FtbListModel.cpp b/application/FtbListModel.cpp index 68a68794..d79bcac0 100644 --- a/application/FtbListModel.cpp +++ b/application/FtbListModel.cpp @@ -108,7 +108,9 @@ QVariant FtbListModel::data(const QModelIndex &index, int role) const void FtbListModel::fill(FtbModpackList modpacks) { + beginResetModel(); this->modpacks = modpacks; + endResetModel(); } FtbModpack FtbListModel::at(int row) diff --git a/application/InstancePageProvider.h b/application/InstancePageProvider.h index b13ce93d..9dda7859 100644 --- a/application/InstancePageProvider.h +++ b/application/InstancePageProvider.h @@ -3,18 +3,18 @@ #include "minecraft/legacy/LegacyInstance.h" #include #include "pages/BasePage.h" -#include "pages/LogPage.h" -#include "pages/VersionPage.h" -#include "pages/ModFolderPage.h" -#include "pages/ResourcePackPage.h" -#include "pages/TexturePackPage.h" -#include "pages/NotesPage.h" -#include "pages/ScreenshotsPage.h" -#include "pages/InstanceSettingsPage.h" -#include "pages/OtherLogsPage.h" #include "pages/BasePageProvider.h" -#include "pages/LegacyUpgradePage.h" -#include "pages/WorldListPage.h" +#include "pages/instance/LogPage.h" +#include "pages/instance/VersionPage.h" +#include "pages/instance/ModFolderPage.h" +#include "pages/instance/ResourcePackPage.h" +#include "pages/instance/TexturePackPage.h" +#include "pages/instance/NotesPage.h" +#include "pages/instance/ScreenshotsPage.h" +#include "pages/instance/InstanceSettingsPage.h" +#include "pages/instance/OtherLogsPage.h" +#include "pages/instance/LegacyUpgradePage.h" +#include "pages/instance/WorldListPage.h" class InstancePageProvider : public QObject, public BasePageProvider diff --git a/application/InstanceWindow.cpp b/application/InstanceWindow.cpp index 2e876fea..5895ca3a 100644 --- a/application/InstanceWindow.cpp +++ b/application/InstanceWindow.cpp @@ -47,7 +47,7 @@ InstanceWindow::InstanceWindow(InstancePtr instance, QWidget *parent) // Add page container { auto provider = std::make_shared(m_instance); - m_container = new PageContainer(provider, "console", this); + m_container = new PageContainer(provider.get(), "console", this); m_container->setParentContainer(this); setCentralWidget(m_container); } diff --git a/application/MainWindow.cpp b/application/MainWindow.cpp index 542d1da6..60742412 100644 --- a/application/MainWindow.cpp +++ b/application/MainWindow.cpp @@ -90,6 +90,7 @@ #include #include "UpdateController.h" #include "KonamiCode.h" +#include // WHY: to hold the pre-translation strings together with the T pointer, so it can be retranslated without a lot of ugly code template @@ -1267,26 +1268,9 @@ void MainWindow::runModalTask(Task *task) loadDialog.execWithTask(task); } -void MainWindow::instanceFromZipPack(QString instName, QString instGroup, QString instIcon, QUrl url) +void MainWindow::instanceFromInstanceTask(InstanceTask *rawTask) { - std::unique_ptr task(MMC->folderProvider()->zipImportTask(url, instName, instGroup, instIcon)); - runModalTask(task.get()); - - // FIXME: handle instance selection after creation - // finalizeInstance(newInstance); -} - -void MainWindow::instanceFromVersion(QString instName, QString instGroup, QString instIcon, BaseVersionPtr version) -{ - std::unique_ptr task(MMC->folderProvider()->creationTask(version, instName, instGroup, instIcon)); - runModalTask(task.get()); - - // FIXME: handle instance selection after creation - // finalizeInstance(newInstance); -} - -void MainWindow::instanceFromFtbPack(FtbPackDownloader *downloader, QString instName, QString instGroup, QString instIcon) { - std::unique_ptr task(MMC->folderProvider()->ftbCreationTask(downloader, instName, instGroup, instIcon)); + std::unique_ptr task(MMC->folderProvider()->wrapInstanceTask(rawTask)); runModalTask(task.get()); // FIXME: handle instance selection after creation @@ -1302,8 +1286,11 @@ void MainWindow::on_actionCopyInstance_triggered() if (!copyInstDlg.exec()) return; - std::unique_ptr task(MMC->folderProvider()->copyTask(m_selectedInstance, copyInstDlg.instName(), copyInstDlg.instGroup(), - copyInstDlg.iconKey(), copyInstDlg.shouldCopySaves())); + auto copyTask = new InstanceCopyTask(m_selectedInstance, copyInstDlg.shouldCopySaves()); + copyTask->setName(copyInstDlg.instName()); + copyTask->setGroup(copyInstDlg.instGroup()); + copyTask->setIcon(copyInstDlg.iconKey()); + std::unique_ptr task(MMC->folderProvider()->wrapInstanceTask(copyTask)); runModalTask(task.get()); // FIXME: handle instance selection after creation @@ -1366,19 +1353,10 @@ void MainWindow::addInstance(QString url) MMC->settings()->set("LastUsedGroupForNewInstance", newInstDlg.instGroup()); - const QUrl modpackUrl = newInstDlg.modpackUrl(); - - if(newInstDlg.isFtbModpackRequested()) - { - instanceFromFtbPack(newInstDlg.getFtbPackDownloader(), newInstDlg.instName(), newInstDlg.instGroup(), newInstDlg.iconKey()); - } - else if (modpackUrl.isValid()) - { - instanceFromZipPack(newInstDlg.instName(), newInstDlg.instGroup(), newInstDlg.iconKey(), modpackUrl); - } - else + InstanceTask * creationTask = newInstDlg.extractTask(); + if(creationTask) { - instanceFromVersion(newInstDlg.instName(), newInstDlg.instGroup(), newInstDlg.iconKey(), newInstDlg.selectedVersion()); + instanceFromInstanceTask(creationTask); } } diff --git a/application/MainWindow.h b/application/MainWindow.h index e9897606..609df4ca 100644 --- a/application/MainWindow.h +++ b/application/MainWindow.h @@ -39,6 +39,7 @@ class BaseProfilerFactory; class GroupView; class ServerStatus; class KonamiCode; +class InstanceTask; class MainWindow : public QMainWindow { @@ -187,9 +188,7 @@ private: void setSelectedInstanceById(const QString &id); void runModalTask(Task *task); - void instanceFromVersion(QString instName, QString instGroup, QString instIcon, BaseVersionPtr version); - void instanceFromZipPack(QString instName, QString instGroup, QString instIcon, QUrl url); - void instanceFromFtbPack(FtbPackDownloader *downloader, QString instName, QString instGroup, QString instIcon); + void instanceFromInstanceTask(InstanceTask *task); void finalizeInstance(InstancePtr inst); private: diff --git a/application/MultiMC.cpp b/application/MultiMC.cpp index 230d757f..4236fbcf 100644 --- a/application/MultiMC.cpp +++ b/application/MultiMC.cpp @@ -497,6 +497,8 @@ MultiMC::MultiMC(int &argc, char **argv) : QApplication(argc, argv) m_settings->registerSetting("PagedGeometry", ""); + m_settings->registerSetting("NewInstanceGeometry", ""); + m_settings->registerSetting("UpdateDialogGeometry", ""); // paste.ee API key diff --git a/application/SettingsUI.h b/application/SettingsUI.h index 5b8badf2..0d14fbee 100644 --- a/application/SettingsUI.h +++ b/application/SettingsUI.h @@ -19,7 +19,7 @@ void ShowPageDialog(T raw_provider, QWidget * parent, QString open_page = QStrin return; { SettingsObject::Lock lock(MMC->settings()); - PageDialog dlg(provider, open_page, parent); + PageDialog dlg(provider.get(), open_page, parent); dlg.exec(); } } diff --git a/application/VersionProxyModel.cpp b/application/VersionProxyModel.cpp index 0dbc4ef6..c180adf2 100644 --- a/application/VersionProxyModel.cpp +++ b/application/VersionProxyModel.cpp @@ -20,34 +20,21 @@ public: const auto &filters = m_parent->filters(); for (auto it = filters.begin(); it != filters.end(); ++it) { - auto role = it.key(); auto idx = sourceModel()->index(source_row, 0, source_parent); - auto data = sourceModel()->data(idx, role); - - switch(role) + auto data = sourceModel()->data(idx, it.key()); + auto match = data.toString(); + if(!it.value()->accepts(match)) { - case BaseVersionList::ParentVersionRole: - case BaseVersionList::VersionIdRole: - // TODO: work with metadata here. Previous implementation based on the Version class is not sufficient - default: - { - auto match = data.toString(); - if(it.value().exact) - { - if (match != it.value().string) - { - return false; - } - } - else if (match.contains(it.value().string)) - { - return false; - } - } + return false; } } return true; } + + void filterChanged() + { + invalidateFilter(); + } private: VersionProxyModel *m_parent; }; @@ -56,12 +43,12 @@ VersionProxyModel::VersionProxyModel(QObject *parent) : QAbstractProxyModel(pare { filterModel = new VersionFilterModel(this); connect(filterModel, &QAbstractItemModel::dataChanged, this, &VersionProxyModel::sourceDataChanged); + connect(filterModel, &QAbstractItemModel::rowsAboutToBeInserted, this, &VersionProxyModel::sourceRowsAboutToBeInserted); + connect(filterModel, &QAbstractItemModel::rowsInserted, this, &VersionProxyModel::sourceRowsInserted); + connect(filterModel, &QAbstractItemModel::rowsAboutToBeRemoved, this, &VersionProxyModel::sourceRowsAboutToBeRemoved); + connect(filterModel, &QAbstractItemModel::rowsRemoved, this, &VersionProxyModel::sourceRowsRemoved); // FIXME: implement when needed /* - connect(replacing, &QAbstractItemModel::rowsAboutToBeInserted, this, &VersionProxyModel::sourceRowsAboutToBeInserted); - connect(replacing, &QAbstractItemModel::rowsInserted, this, &VersionProxyModel::sourceRowsInserted); - connect(replacing, &QAbstractItemModel::rowsAboutToBeRemoved, this, &VersionProxyModel::sourceRowsAboutToBeRemoved); - connect(replacing, &QAbstractItemModel::rowsRemoved, this, &VersionProxyModel::sourceRowsRemoved); connect(replacing, &QAbstractItemModel::rowsAboutToBeMoved, this, &VersionProxyModel::sourceRowsAboutToBeMoved); connect(replacing, &QAbstractItemModel::rowsMoved, this, &VersionProxyModel::sourceRowsMoved); connect(replacing, &QAbstractItemModel::layoutAboutToBeChanged, this, &VersionProxyModel::sourceLayoutAboutToBeChanged); @@ -390,16 +377,13 @@ QModelIndex VersionProxyModel::getVersion(const QString& version) const void VersionProxyModel::clearFilters() { m_filters.clear(); - filterModel->invalidate(); + filterModel->filterChanged(); } -void VersionProxyModel::setFilter(const BaseVersionList::ModelRoles column, const QString &filter, const bool exact) +void VersionProxyModel::setFilter(const BaseVersionList::ModelRoles column, Filter * f) { - Filter f; - f.string = filter; - f.exact = exact; - m_filters[column] = f; - filterModel->invalidate(); + m_filters[column].reset(f); + filterModel->filterChanged(); } const VersionProxyModel::FilterMap &VersionProxyModel::filters() const @@ -417,4 +401,25 @@ void VersionProxyModel::sourceReset() endResetModel(); } +void VersionProxyModel::sourceRowsAboutToBeInserted(const QModelIndex& parent, int first, int last) +{ + beginInsertRows(parent, first, last); +} + +void VersionProxyModel::sourceRowsInserted(const QModelIndex& parent, int first, int last) +{ + endInsertRows(); +} + +void VersionProxyModel::sourceRowsAboutToBeRemoved(const QModelIndex& parent, int first, int last) +{ + beginRemoveRows(parent, first, last); +} + +void VersionProxyModel::sourceRowsRemoved(const QModelIndex& parent, int first, int last) +{ + endRemoveRows(); +} + + #include "VersionProxyModel.moc" diff --git a/application/VersionProxyModel.h b/application/VersionProxyModel.h index 4441ea6b..33a0d1ea 100644 --- a/application/VersionProxyModel.h +++ b/application/VersionProxyModel.h @@ -2,17 +2,15 @@ #include #include "BaseVersionList.h" +#include + class VersionFilterModel; class VersionProxyModel: public QAbstractProxyModel { Q_OBJECT public: - struct Filter - { - QString string; - bool exact = false; - }; + enum Column { Name, @@ -22,7 +20,7 @@ public: Architecture, Path }; - typedef QHash FilterMap; + typedef QHash> FilterMap; public: VersionProxyModel ( QObject* parent = 0 ); @@ -39,16 +37,23 @@ public: virtual void setSourceModel(QAbstractItemModel *sourceModel) override; const FilterMap &filters() const; - void setFilter(const BaseVersionList::ModelRoles column, const QString &filter, const bool exact); + void setFilter(const BaseVersionList::ModelRoles column, Filter * filter); void clearFilters(); QModelIndex getRecommended() const; QModelIndex getVersion(const QString & version) const; private slots: void sourceDataChanged(const QModelIndex &source_top_left,const QModelIndex &source_bottom_right); + void sourceAboutToBeReset(); void sourceReset(); + void sourceRowsAboutToBeInserted(const QModelIndex &parent, int first, int last); + void sourceRowsInserted(const QModelIndex &parent, int first, int last); + + void sourceRowsAboutToBeRemoved(const QModelIndex &parent, int first, int last); + void sourceRowsRemoved(const QModelIndex &parent, int first, int last); + private: QList m_columns; FilterMap m_filters; diff --git a/application/dialogs/ChooseFtbPackDialog.cpp b/application/dialogs/ChooseFtbPackDialog.cpp deleted file mode 100644 index b1deae6e..00000000 --- a/application/dialogs/ChooseFtbPackDialog.cpp +++ /dev/null @@ -1,88 +0,0 @@ -#include "ChooseFtbPackDialog.h" -#include - -ChooseFtbPackDialog::ChooseFtbPackDialog(FtbModpackList modpacks) : ui(new Ui::ChooseFtbPackDialog) -{ - ui->setupUi(this); - - filterModel = new FtbFilterModel(this); - listModel = new FtbListModel(this); - filterModel->setSourceModel(listModel); - listModel->fill(modpacks); - - ui->packList->setModel(filterModel); - ui->packList->setSortingEnabled(true); - ui->packList->header()->hide(); - ui->packList->setIndentation(0); - - filterModel->setSorting(FtbFilterModel::Sorting::ByName); - - for(int i = 0; i < filterModel->getAvailableSortings().size(); i++){ - ui->sortByBox->addItem(filterModel->getAvailableSortings().keys().at(i)); - } - - ui->sortByBox->setCurrentText(filterModel->getAvailableSortings().key(filterModel->getCurrentSorting())); - - connect(ui->sortByBox, &QComboBox::currentTextChanged, this, &ChooseFtbPackDialog::onSortingSelectionChanged); - connect(ui->packVersionSelection, &QComboBox::currentTextChanged, this, &ChooseFtbPackDialog::onVersionSelectionItemChanged); - connect(ui->packList->selectionModel(), &QItemSelectionModel::currentChanged, this, &ChooseFtbPackDialog::onPackSelectionChanged); - - ui->modpackInfo->setOpenExternalLinks(true); - - ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); -} - -ChooseFtbPackDialog::~ChooseFtbPackDialog() -{ - delete ui; -} - -void ChooseFtbPackDialog::onPackSelectionChanged(QModelIndex now, QModelIndex prev) -{ - ui->packVersionSelection->clear(); - FtbModpack selectedPack = filterModel->data(now, Qt::UserRole).value(); - - ui->modpackInfo->setHtml("Pack by " + selectedPack.author + "" + "
Minecraft " + selectedPack.mcVersion + "
" - "
" + selectedPack.description + "
  • " + selectedPack.mods.replace(";", "
  • ") + "
"); - - bool currentAdded = false; - - for(int i = 0; i < selectedPack.oldVersions.size(); i++) { - if(selectedPack.currentVersion == selectedPack.oldVersions.at(i)) { - currentAdded = true; - } - ui->packVersionSelection->addItem(selectedPack.oldVersions.at(i)); - } - - if(!currentAdded) { - ui->packVersionSelection->addItem(selectedPack.currentVersion); - } - - selected = selectedPack; - ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(!selected.broken); -} - -void ChooseFtbPackDialog::onVersionSelectionItemChanged(QString data) -{ - if(data.isNull() || data.isEmpty()) { - selectedVersion = ""; - return; - } - - selectedVersion = data; -} - -FtbModpack ChooseFtbPackDialog::getSelectedModpack() -{ - return selected; -} - -QString ChooseFtbPackDialog::getSelectedVersion() -{ - return selectedVersion; -} - -void ChooseFtbPackDialog::onSortingSelectionChanged(QString data) -{ - filterModel->setSorting(filterModel->getAvailableSortings().value(data)); -} diff --git a/application/dialogs/ChooseFtbPackDialog.h b/application/dialogs/ChooseFtbPackDialog.h deleted file mode 100644 index f9f3dd08..00000000 --- a/application/dialogs/ChooseFtbPackDialog.h +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once - -#include -#include -#include -#include "ui_ChooseFtbPackDialog.h" -#include "FtbListModel.h" - -namespace Ui { - class ChooseFtbPackDialog; -} - -class ChooseFtbPackDialog : public QDialog { - - Q_OBJECT - -private: - Ui::ChooseFtbPackDialog *ui; - FtbModpack selected; - QString selectedVersion; - FtbListModel* listModel; - FtbFilterModel* filterModel; - -private slots: - void onSortingSelectionChanged(QString data); - void onVersionSelectionItemChanged(QString data); - void onPackSelectionChanged(QModelIndex first, QModelIndex second); -public: - ChooseFtbPackDialog(FtbModpackList packs); - ~ChooseFtbPackDialog(); - - FtbModpack getSelectedModpack(); - QString getSelectedVersion(); -}; diff --git a/application/dialogs/ChooseFtbPackDialog.ui b/application/dialogs/ChooseFtbPackDialog.ui deleted file mode 100644 index f590a4cd..00000000 --- a/application/dialogs/ChooseFtbPackDialog.ui +++ /dev/null @@ -1,119 +0,0 @@ - - - ChooseFtbPackDialog - - - - 0 - 0 - 700 - 437 - - - - - 0 - 0 - - - - false - - - - - - Version selected: - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - - - - - 0 - 0 - - - - - - - - true - - - false - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - false - - - - - - - - 0 - 0 - - - - - - - - - - - - - buttonBox - accepted() - ChooseFtbPackDialog - accept() - - - 211 - 173 - - - 889 - 501 - - - - - buttonBox - rejected() - ChooseFtbPackDialog - reject() - - - 225 - 162 - - - 524 - 458 - - - - - diff --git a/application/dialogs/NewInstanceDialog.cpp b/application/dialogs/NewInstanceDialog.cpp index eee3991c..f0783603 100644 --- a/application/dialogs/NewInstanceDialog.cpp +++ b/application/dialogs/NewInstanceDialog.cpp @@ -25,80 +25,30 @@ #include "VersionSelectDialog.h" #include "ProgressDialog.h" #include "IconPickerDialog.h" -#include "ChooseFtbPackDialog.h" #include #include #include #include +#include -#include -#include - -class UrlValidator : public QValidator -{ -public: - using QValidator::QValidator; - - State validate(QString &in, int &pos) const - { - const QUrl url(in); - if (url.isValid() && !url.isRelative() && !url.isEmpty()) - { - return Acceptable; - } - else if (QFile::exists(in)) - { - return Acceptable; - } - else - { - return Intermediate; - } - } -}; +#include "widgets/PageContainer.h" +#include +#include +#include +#include +#include NewInstanceDialog::NewInstanceDialog(const QString & initialGroup, const QString & url, QWidget *parent) : QDialog(parent), ui(new Ui::NewInstanceDialog) { ui->setupUi(this); - resize(minimumSizeHint()); - layout()->setSizeConstraint(QLayout::SetFixedSize); - auto vlist = ENV.metadataIndex()->get("net.minecraft"); - if(vlist->isLoaded()) - { - setSelectedVersion(vlist->getRecommended()); - } - else - { - vlist->load(Net::Mode::Online); - auto task = vlist->getLoadTask(); - if(vlist->isLoaded()) - { - setSelectedVersion(vlist->getRecommended()); - } - if(task) - { - connect(task.get(), &Task::succeeded, this, &NewInstanceDialog::versionListUpdated); - } - } + setWindowIcon(MMC->getThemedIcon("new")); InstIconKey = "default"; ui->iconButton->setIcon(MMC->icons()->getIcon(InstIconKey)); - ui->modpackEdit->setValidator(new UrlValidator(ui->modpackEdit)); - - ui->instNameTextBox->setAlignment(Qt::AlignHCenter); - - connect(ui->modpackEdit, &QLineEdit::textChanged, this, &NewInstanceDialog::updateDialogState); - connect(ui->modpackBox, &QRadioButton::clicked, this, &NewInstanceDialog::updateDialogState); - - connect(ui->versionBox, &QRadioButton::clicked, this, &NewInstanceDialog::updateDialogState); - connect(ui->versionTextBox, &QLineEdit::textChanged, this, &NewInstanceDialog::updateDialogState); - - connect(ui->ftbBox, &QRadioButton::clicked, this, &NewInstanceDialog::updateDialogState); - auto groups = MMC->instances()->getGroups().toSet(); auto groupList = QStringList(groups.toList()); groupList.sort(Qt::CaseInsensitive); @@ -113,32 +63,47 @@ NewInstanceDialog::NewInstanceDialog(const QString & initialGroup, const QString } ui->groupBox->setCurrentIndex(index); ui->groupBox->lineEdit()->setPlaceholderText(tr("No group")); - ui->buttonBox->setFocus(); - originalPlaceholderText = ui->instNameTextBox->placeholderText(); - if(!url.isEmpty()) - { - ui->modpackBox->setChecked(true); - ui->modpackEdit->setText(url); - } + m_buttons = new QDialogButtonBox(QDialogButtonBox::Help | QDialogButtonBox::Ok); + m_buttons->button(QDialogButtonBox::Ok)->setDefault(true); - ftbPackDownloader = new FtbPackDownloader(); + connect(m_buttons->button(QDialogButtonBox::Ok), &QPushButton::clicked, this, &QDialog::accept); + connect(m_buttons->button(QDialogButtonBox::Help), &QPushButton::clicked, m_container, &PageContainer::help); - connect(ftbPackDownloader, &FtbPackDownloader::ready, this, &NewInstanceDialog::ftbPackDataDownloadSuccessfully); - connect(ftbPackDownloader, &FtbPackDownloader::packFetchFailed, this, &NewInstanceDialog::ftbPackDataDownloadFailed); + m_container = new PageContainer(this); + m_container->setSizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Expanding); + ui->verticalLayout->insertWidget(2, m_container); - ftbPackDownloader->fetchModpacks(false); + m_container->addButtons(m_buttons); + m_buttons->setFocus(); + + if(!url.isEmpty()) + { + m_container->selectPage("import"); + importPage->setUrl(url); + } updateDialogState(); + + restoreGeometry(QByteArray::fromBase64(MMC->settings()->get("NewInstanceGeometry").toByteArray())); } -void NewInstanceDialog::versionListUpdated() +QList NewInstanceDialog::getPages() { - if(!m_versionSetByUser) + importPage = new ImportPage(this); + return { - auto vlist = ENV.metadataIndex()->get("net.minecraft"); - setSelectedVersion(vlist->getRecommended()); - } + new VanillaPage(this), + new FTBPage(this), + importPage, + new TwitchPage(this), + new TechnicPage(this) + }; +} + +QString NewInstanceDialog::dialogTitle() +{ + return tr("New Instance"); } NewInstanceDialog::~NewInstanceDialog() @@ -146,58 +111,29 @@ NewInstanceDialog::~NewInstanceDialog() delete ui; } -void NewInstanceDialog::updateDialogState() +void NewInstanceDialog::setSuggestedPack(const QString& name, InstanceTask* task) { - QString suggestedName; - if(ui->versionBox->isChecked()) - { - suggestedName = ui->versionTextBox->text(); - } - else if (ui->modpackBox->isChecked()) - { - auto url = QUrl::fromUserInput(ui->modpackEdit->text()); - QFileInfo fi(url.fileName()); - suggestedName = fi.completeBaseName(); - } - else if (ui->ftbBox->isChecked()) - { - if(ftbPackDownloader->isValidPackSelected()) { - suggestedName = ftbPackDownloader->getSuggestedInstanceName(); - ui->labelFtbPack->setText(selectedPack.name); - } + creationTask.reset(task); + ui->instNameTextBox->setPlaceholderText(name); - } - - ftbModpackRequested = ui->ftbBox->isChecked(); - - if(suggestedName.isEmpty()) - { - ui->instNameTextBox->setPlaceholderText(originalPlaceholderText); - } - else - { - ui->instNameTextBox->setPlaceholderText(suggestedName); - } - bool allowOK = !instName().isEmpty() && ( - (ui->versionBox->isChecked() && m_selectedVersion) || - (ui->modpackBox->isChecked() && ui->modpackEdit->hasAcceptableInput()) || - (ui->ftbBox->isChecked() && ftbPackDownloader && ftbPackDownloader->isValidPackSelected() ) - ); - ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(allowOK); + auto allowOK = task && !instName().isEmpty(); + m_buttons->button(QDialogButtonBox::Ok)->setEnabled(allowOK); } -void NewInstanceDialog::setSelectedVersion(BaseVersionPtr version) +InstanceTask * NewInstanceDialog::extractTask() { - m_selectedVersion = version; + InstanceTask * extracted = creationTask.get(); + creationTask.release(); + extracted->setName(instName()); + extracted->setGroup(instGroup()); + extracted->setIcon(iconKey()); + return extracted; +} - if (m_selectedVersion) - { - ui->versionTextBox->setText(version->descriptor()); - } - else - { - ui->versionTextBox->setText(""); - } +void NewInstanceDialog::updateDialogState() +{ + auto allowOK = creationTask && !instName().isEmpty(); + m_buttons->button(QDialogButtonBox::Ok)->setEnabled(allowOK); } QString NewInstanceDialog::instName() const @@ -208,7 +144,7 @@ QString NewInstanceDialog::instName() const return result.trimmed(); } result = ui->instNameTextBox->placeholderText(); - if(result.size() && result != originalPlaceholderText) + if(result.size()) { return result.trimmed(); } @@ -223,45 +159,6 @@ QString NewInstanceDialog::iconKey() const { return InstIconKey; } -QUrl NewInstanceDialog::modpackUrl() const -{ - if (ui->modpackBox->isChecked()) - { - const QUrl url(ui->modpackEdit->text()); - if (url.isValid() && !url.isRelative() && !url.host().isEmpty()) - { - return url; - } - else - { - return QUrl::fromLocalFile(ui->modpackEdit->text()); - } - } - else - { - return QUrl(); - } -} - -BaseVersionPtr NewInstanceDialog::selectedVersion() const -{ - return m_selectedVersion; -} - -void NewInstanceDialog::on_btnChangeVersion_clicked() -{ - VersionSelectDialog vselect(ENV.metadataIndex()->get("net.minecraft").get(), tr("Change Minecraft version"), this); - vselect.exec(); - if (vselect.result() == QDialog::Accepted) - { - BaseVersionPtr version = vselect.selectedVersion(); - if (version) - { - m_versionSetByUser = true; - setSelectedVersion(version); - } - } -} void NewInstanceDialog::on_iconButton_clicked() { @@ -280,46 +177,14 @@ void NewInstanceDialog::on_instNameTextBox_textChanged(const QString &arg1) updateDialogState(); } -void NewInstanceDialog::on_modpackBtn_clicked() +void NewInstanceDialog::closeEvent(QCloseEvent* event) { - const QUrl url = QFileDialog::getOpenFileUrl(this, tr("Choose modpack"), modpackUrl(), tr("Zip (*.zip)")); - if (url.isValid()) + qDebug() << "New instance dialog close requested"; + if (m_container->prepareToClose()) { - if (url.isLocalFile()) - { - ui->modpackEdit->setText(url.toLocalFile()); - } - else - { - ui->modpackEdit->setText(url.toString()); - } - } -} - -bool NewInstanceDialog::isFtbModpackRequested() { - return ftbModpackRequested; -} - -FtbPackDownloader *NewInstanceDialog::getFtbPackDownloader() { - return ftbPackDownloader; -} - -void NewInstanceDialog::on_btnChooseFtbPack_clicked() { - ChooseFtbPackDialog dl(ftbPackDownloader->getModpacks()); - dl.exec(); - if(dl.result() == QDialog::Accepted) { - selectedPack = dl.getSelectedModpack(); - ftbPackDownloader->selectPack(selectedPack, dl.getSelectedVersion()); + qDebug() << "New instance dialog close approved"; + MMC->settings()->set("NewInstanceGeometry", saveGeometry().toBase64()); + qDebug() << "New instance dialog geometry saved"; + QDialog::closeEvent(event); } - updateDialogState(); } - -void NewInstanceDialog::ftbPackDataDownloadSuccessfully() { - ui->packDataDownloadStatus->setText(tr("(Data download complete)")); - ui->ftbBox->setEnabled(true); -} - -void NewInstanceDialog::ftbPackDataDownloadFailed() { - ui->packDataDownloadStatus->setText(tr("(Data download failed)")); -} - diff --git a/application/dialogs/NewInstanceDialog.h b/application/dialogs/NewInstanceDialog.h index f1fe26f4..ca134d32 100644 --- a/application/dialogs/NewInstanceDialog.h +++ b/application/dialogs/NewInstanceDialog.h @@ -18,15 +18,19 @@ #include #include "BaseVersion.h" -#include "modplatform/ftb/FtbPackDownloader.h" -#include "modplatform/ftb/PackHelpers.h" +#include "pages/BasePageProvider.h" +#include "InstanceTask.h" namespace Ui { class NewInstanceDialog; } -class NewInstanceDialog : public QDialog +class PageContainer; +class QDialogButtonBox; +class ImportPage; + +class NewInstanceDialog : public QDialog, public BasePageProvider { Q_OBJECT @@ -36,39 +40,28 @@ public: void updateDialogState(); - void setSelectedVersion(BaseVersionPtr version); + void setSuggestedPack(const QString & name = QString(), InstanceTask * task = nullptr); + InstanceTask * extractTask(); + + QString dialogTitle() override; + QList getPages() override; QString instName() const; QString instGroup() const; QString iconKey() const; - QUrl modpackUrl() const; - BaseVersionPtr selectedVersion() const; - - bool isFtbModpackRequested(); - FtbPackDownloader* getFtbPackDownloader(); private slots: - void on_btnChangeVersion_clicked(); void on_iconButton_clicked(); - void on_modpackBtn_clicked(); - void on_btnChooseFtbPack_clicked(); void on_instNameTextBox_textChanged(const QString &arg1); - void versionListUpdated(); - - void ftbPackDataDownloadSuccessfully(); - void ftbPackDataDownloadFailed(); + virtual void closeEvent(QCloseEvent *event); private: - Ui::NewInstanceDialog *ui; - - bool m_versionSetByUser = false; - bool ftbModpackRequested = false; + Ui::NewInstanceDialog *ui = nullptr; + PageContainer * m_container = nullptr; + QDialogButtonBox * m_buttons = nullptr; - BaseVersionPtr m_selectedVersion; QString InstIconKey; - QString originalPlaceholderText; - - FtbPackDownloader* ftbPackDownloader; - FtbModpack selectedPack; + ImportPage *importPage = nullptr; + std::unique_ptr creationTask; }; diff --git a/application/dialogs/NewInstanceDialog.ui b/application/dialogs/NewInstanceDialog.ui index 428b9c57..7fb19ff5 100644 --- a/application/dialogs/NewInstanceDialog.ui +++ b/application/dialogs/NewInstanceDialog.ui @@ -9,8 +9,8 @@ 0 0 - 281 - 407 + 730 + 127 @@ -25,357 +25,63 @@ - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 80 - 80 - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Name - - - - - - - Qt::Horizontal - - - - - - - - - &Group: - - - groupBox - - - - + + - - - 0 - 0 - - true - - - - - - - - false - + + - Install FTB Pack - - - - - - - ... - - - - - - - false - - - ... - - - - - - - false - - - ... - - - - - - - false + &Group: - - No Pack choosen + + groupBox - - - - Impor&t Modpack (local file or link): - - + + - - + + - Vani&lla Minecraft (select version): - - - true + &Name: - - - - - - true - - - - - - - false - - - http:// + + instNameTextBox - - - - (Loading Pack data...) + + + + + 80 + 80 + - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Qt::Horizontal - - - - - + Qt::Horizontal - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - FocusLineEdit - QLineEdit -
widgets/FocusLineEdit.h
-
-
+ iconButton instNameTextBox groupBox - versionBox - versionTextBox - btnChangeVersion - modpackBox - modpackEdit - modpackBtn - iconButton - - - buttonBox - accepted() - NewInstanceDialog - accept() - - - 266 - 378 - - - 157 - 274 - - - - - buttonBox - rejected() - NewInstanceDialog - reject() - - - 271 - 378 - - - 280 - 274 - - - - - modpackBox - toggled(bool) - modpackEdit - setEnabled(bool) - - - 91 - 251 - - - 240 - 278 - - - - - modpackBox - toggled(bool) - modpackBtn - setEnabled(bool) - - - 139 - 251 - - - 270 - 278 - - - - - versionBox - toggled(bool) - versionTextBox - setEnabled(bool) - - - 93 - 195 - - - 223 - 224 - - - - - versionBox - toggled(bool) - btnChangeVersion - setEnabled(bool) - - - 104 - 198 - - - 270 - 224 - - - - - ftbBox - toggled(bool) - btnChooseFtbPack - setEnabled(bool) - - - 67 - 301 - - - 254 - 327 - - - - - ftbBox - toggled(bool) - labelFtbPack - setEnabled(bool) - - - 81 - 310 - - - 73 - 334 - - - - + diff --git a/application/dialogs/VersionSelectDialog.cpp b/application/dialogs/VersionSelectDialog.cpp index a44572cc..1ed81e79 100644 --- a/application/dialogs/VersionSelectDialog.cpp +++ b/application/dialogs/VersionSelectDialog.cpp @@ -40,7 +40,7 @@ VersionSelectDialog::VersionSelectDialog(BaseVersionList *vlist, QString title, m_verticalLayout = new QVBoxLayout(this); m_verticalLayout->setObjectName(QStringLiteral("verticalLayout")); - m_versionWidget = new VersionSelectWidget(vlist, parent); + m_versionWidget = new VersionSelectWidget(parent); m_verticalLayout->addWidget(m_versionWidget); m_horizontalLayout = new QHBoxLayout(); @@ -107,7 +107,7 @@ void VersionSelectDialog::setResizeOn(int column) int VersionSelectDialog::exec() { QDialog::open(); - m_versionWidget->initialize(); + m_versionWidget->initialize(m_vlist); return QDialog::exec(); } diff --git a/application/pagedialog/PageDialog.cpp b/application/pagedialog/PageDialog.cpp index b201de85..1b5284d2 100644 --- a/application/pagedialog/PageDialog.cpp +++ b/application/pagedialog/PageDialog.cpp @@ -25,7 +25,7 @@ #include "widgets/IconLabel.h" #include "widgets/PageContainer.h" -PageDialog::PageDialog(BasePageProviderPtr pageProvider, QString defaultId, QWidget *parent) +PageDialog::PageDialog(BasePageProvider *pageProvider, QString defaultId, QWidget *parent) : QDialog(parent) { setWindowTitle(pageProvider->dialogTitle()); @@ -37,17 +37,14 @@ PageDialog::PageDialog(BasePageProviderPtr pageProvider, QString defaultId, QWid mainLayout->setContentsMargins(0, 0, 0, 0); setLayout(mainLayout); - QDialogButtonBox *buttons = - new QDialogButtonBox(QDialogButtonBox::Help | QDialogButtonBox::Close); + QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Help | QDialogButtonBox::Close); buttons->button(QDialogButtonBox::Close)->setDefault(true); m_container->addButtons(buttons); connect(buttons->button(QDialogButtonBox::Close), SIGNAL(clicked()), this, SLOT(close())); - connect(buttons->button(QDialogButtonBox::Help), SIGNAL(clicked()), m_container, - SLOT(help())); + connect(buttons->button(QDialogButtonBox::Help), SIGNAL(clicked()), m_container, SLOT(help())); - restoreGeometry( - QByteArray::fromBase64(MMC->settings()->get("PagedGeometry").toByteArray())); + restoreGeometry(QByteArray::fromBase64(MMC->settings()->get("PagedGeometry").toByteArray())); } void PageDialog::closeEvent(QCloseEvent *event) diff --git a/application/pagedialog/PageDialog.h b/application/pagedialog/PageDialog.h index 67cd290e..a287f9c9 100644 --- a/application/pagedialog/PageDialog.h +++ b/application/pagedialog/PageDialog.h @@ -23,8 +23,7 @@ class PageDialog : public QDialog { Q_OBJECT public: - explicit PageDialog(BasePageProviderPtr pageProvider, QString defaultId = QString(), - QWidget *parent = 0); + explicit PageDialog(BasePageProvider *pageProvider, QString defaultId = QString(), QWidget *parent = 0); virtual ~PageDialog() {} private diff --git a/application/pages/BasePage.h b/application/pages/BasePage.h index 63a26239..d4547770 100644 --- a/application/pages/BasePage.h +++ b/application/pages/BasePage.h @@ -31,8 +31,18 @@ public: virtual bool apply() { return true; } virtual bool shouldDisplay() const { return true; } virtual QString helpPage() const { return QString(); } - virtual void opened() {} - virtual void closed() {} + void opened() + { + isOpened = true; + openedImpl(); + } + void closed() + { + isOpened = false; + closedImpl(); + } + virtual void openedImpl() {} + virtual void closedImpl() {} virtual void setParentContainer(BasePageContainer * container) { m_container = container; @@ -42,6 +52,7 @@ public: int listIndex = -1; protected: BasePageContainer * m_container = nullptr; + bool isOpened = false; }; typedef std::shared_ptr BasePagePtr; diff --git a/application/pages/BasePageProvider.h b/application/pages/BasePageProvider.h index 0ebcff7a..1cc7458a 100644 --- a/application/pages/BasePageProvider.h +++ b/application/pages/BasePageProvider.h @@ -15,7 +15,7 @@ #pragma once -#include "BasePage.h" +#include "pages/BasePage.h" #include #include @@ -65,5 +65,3 @@ private: QList m_creators; QString m_dialogTitle; }; - -typedef std::shared_ptr BasePageProviderPtr; diff --git a/application/pages/InstanceSettingsPage.cpp b/application/pages/InstanceSettingsPage.cpp deleted file mode 100644 index 71e90a32..00000000 --- a/application/pages/InstanceSettingsPage.cpp +++ /dev/null @@ -1,251 +0,0 @@ -#include "InstanceSettingsPage.h" -#include "ui_InstanceSettingsPage.h" - -#include -#include -#include - -#include "dialogs/VersionSelectDialog.h" -#include "JavaCommon.h" -#include "MultiMC.h" - -#include -#include -#include -#include - -InstanceSettingsPage::InstanceSettingsPage(BaseInstance *inst, QWidget *parent) - : QWidget(parent), ui(new Ui::InstanceSettingsPage), m_instance(inst) -{ - m_settings = inst->settings(); - ui->setupUi(this); - auto sysMB = Sys::getSystemRam() / Sys::megabyte; - ui->maxMemSpinBox->setMaximum(sysMB); - loadSettings(); -} - -bool InstanceSettingsPage::shouldDisplay() const -{ - return !m_instance->isRunning(); -} - -InstanceSettingsPage::~InstanceSettingsPage() -{ - delete ui; -} - -bool InstanceSettingsPage::apply() -{ - applySettings(); - return true; -} - -void InstanceSettingsPage::applySettings() -{ - SettingsObject::Lock lock(m_settings); - - // Console - bool console = ui->consoleSettingsBox->isChecked(); - m_settings->set("OverrideConsole", console); - if (console) - { - m_settings->set("ShowConsole", ui->showConsoleCheck->isChecked()); - m_settings->set("AutoCloseConsole", ui->autoCloseConsoleCheck->isChecked()); - m_settings->set("ShowConsoleOnError", ui->showConsoleErrorCheck->isChecked()); - } - else - { - m_settings->reset("ShowConsole"); - m_settings->reset("AutoCloseConsole"); - m_settings->reset("ShowConsoleOnError"); - } - - // Window Size - bool window = ui->windowSizeGroupBox->isChecked(); - m_settings->set("OverrideWindow", window); - if (window) - { - m_settings->set("LaunchMaximized", ui->maximizedCheckBox->isChecked()); - m_settings->set("MinecraftWinWidth", ui->windowWidthSpinBox->value()); - m_settings->set("MinecraftWinHeight", ui->windowHeightSpinBox->val