From 0e5c37768084cf0772ca2598b4554bf262cb581b Mon Sep 17 00:00:00 2001 From: TheKodeToad Date: Mon, 3 Jul 2023 17:32:59 +0100 Subject: [PATCH] Various tweaks Signed-off-by: TheKodeToad --- .../multimc/128x128/instances/forge.png | Bin 0 -> 3229 bytes launcher/resources/multimc/multimc.qrc | 2 +- .../multimc/scalable/instances/forge.svg | 43 ---------- launcher/ui/dialogs/InstallLoaderDialog.cpp | 78 +++++++++++------- launcher/ui/dialogs/InstallLoaderDialog.h | 7 +- launcher/ui/widgets/PageContainer.cpp | 2 +- launcher/ui/widgets/PageContainer.h | 2 +- 7 files changed, 53 insertions(+), 81 deletions(-) create mode 100644 launcher/resources/multimc/128x128/instances/forge.png delete mode 100644 launcher/resources/multimc/scalable/instances/forge.svg diff --git a/launcher/resources/multimc/128x128/instances/forge.png b/launcher/resources/multimc/128x128/instances/forge.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ff79a537bedb9b16ed0f2824580cd8037f5847 GIT binary patch literal 3229 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 literal 0 HcmV?d00001 diff --git a/launcher/resources/multimc/multimc.qrc b/launcher/resources/multimc/multimc.qrc index 907fbb5d3..4a407d95a 100644 --- a/launcher/resources/multimc/multimc.qrc +++ b/launcher/resources/multimc/multimc.qrc @@ -348,9 +348,9 @@ scalable/launch.svg scalable/server.svg - scalable/instances/forge.svg scalable/instances/quiltmc.svg 22x22/fabricmc-small.png + 128x128/instances/forge.png 128x128/instances/fabricmc.png 128x128/instances/liteloader.png diff --git a/launcher/resources/multimc/scalable/instances/forge.svg b/launcher/resources/multimc/scalable/instances/forge.svg deleted file mode 100644 index ea402c5b2..000000000 --- a/launcher/resources/multimc/scalable/instances/forge.svg +++ /dev/null @@ -1,43 +0,0 @@ - - diff --git a/launcher/ui/dialogs/InstallLoaderDialog.cpp b/launcher/ui/dialogs/InstallLoaderDialog.cpp index acef60c69..31d6f9ab5 100644 --- a/launcher/ui/dialogs/InstallLoaderDialog.cpp +++ b/launcher/ui/dialogs/InstallLoaderDialog.cpp @@ -38,7 +38,7 @@ class InstallLoaderPage : public VersionSelectWidget, public BasePage { // "lightweight" loaders are independent to any game version const bool lightweight, const std::shared_ptr profile) - : VersionSelectWidget(nullptr), m_id(id), m_icon(icon), m_name(name) + : VersionSelectWidget(nullptr), uid(id), iconName(icon), name(name) { const QString minecraftVersion = profile->getComponentVersion("net.minecraft"); setEmptyString(tr("No versions are currently available for Minecraft %1").arg(minecraftVersion)); @@ -49,21 +49,21 @@ class InstallLoaderPage : public VersionSelectWidget, public BasePage { setCurrentVersion(currentVersion); } - QString id() const override { return m_id; } - QString displayName() const override { return m_name; } - QIcon icon() const override { return APPLICATION->getThemedIcon(m_icon); } + QString id() const override { return uid; } + QString displayName() const override { return name; } + QIcon icon() const override { return APPLICATION->getThemedIcon(iconName); } void openedImpl() override { - if (m_loaded) + if (loaded) return; - const auto versions = APPLICATION->metadataIndex()->get(m_id); + const auto versions = APPLICATION->metadataIndex()->get(uid); if (!versions) return; initialize(versions.get()); - m_loaded = true; + loaded = true; } void setParentContainer(BasePageContainer* container) override @@ -73,13 +73,13 @@ class InstallLoaderPage : public VersionSelectWidget, public BasePage { } private: - const QString m_id; - const QString m_icon; - const QString m_name; - bool m_loaded = false; + const QString uid; + const QString iconName; + const QString name; + bool loaded = false; }; -InstallLoaderPage* pageCast(BasePage* page) +static InstallLoaderPage* pageCast(BasePage* page) { auto result = dynamic_cast(page); Q_ASSERT(result != nullptr); @@ -87,46 +87,55 @@ InstallLoaderPage* pageCast(BasePage* page) } InstallLoaderDialog::InstallLoaderDialog(std::shared_ptr profile, const QString& uid, QWidget* parent) - : QDialog(parent), m_profile(profile), m_container(new PageContainer(this, QString(), this)), m_buttons(new QDialogButtonBox(this)) + : QDialog(parent), profile(std::move(profile)), container(new PageContainer(this, QString(), this)), buttons(new QDialogButtonBox(this)) { auto layout = new QVBoxLayout(this); - m_container->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); - layout->addWidget(m_container); + container->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); + layout->addWidget(container); auto buttonLayout = new QHBoxLayout(this); auto refreshButton = new QPushButton(tr("&Refresh"), this); - connect(refreshButton, &QPushButton::pressed, this, [this] { pageCast(m_container->selectedPage())->loadList(); }); + connect(refreshButton, &QPushButton::pressed, this, [this] { pageCast(container->selectedPage())->loadList(); }); buttonLayout->addWidget(refreshButton); - m_buttons->setOrientation(Qt::Horizontal); - m_buttons->setStandardButtons(QDialogButtonBox::Cancel | QDialogButtonBox::Ok); - connect(m_buttons, &QDialogButtonBox::accepted, this, &QDialog::accept); - connect(m_buttons, &QDialogButtonBox::rejected, this, &QDialog::reject); - buttonLayout->addWidget(m_buttons); + buttons->setOrientation(Qt::Horizontal); + buttons->setStandardButtons(QDialogButtonBox::Cancel | QDialogButtonBox::Ok); + connect(buttons, &QDialogButtonBox::accepted, this, &QDialog::accept); + connect(buttons, &QDialogButtonBox::rejected, this, &QDialog::reject); + buttonLayout->addWidget(buttons); layout->addLayout(buttonLayout); setWindowTitle(dialogTitle()); - resize(650, 400); + setWindowModality(Qt::WindowModal); + resize(520, 347); - pageCast(m_container->selectedPage())->selectSearch(); - for (BasePage* page : m_container->getPages()) + for (BasePage* page : container->getPages()) { if (page->id() == uid) - m_container->selectPage(page->id()); + container->selectPage(page->id()); + + connect(pageCast(page), &VersionSelectWidget::selectedVersionChanged, this, [this, page] { + if (page->id() == container->selectedPage()->id()) + validate(container->selectedPage()); + }); + } + connect(container, &PageContainer::selectedPageChanged, this, [this](BasePage* previous, BasePage* current) { validate(current); }); + pageCast(container->selectedPage())->selectSearch(); + validate(container->selectedPage()); } QList InstallLoaderDialog::getPages() { return { // Forge - new InstallLoaderPage("net.minecraftforge", "forge", tr("Forge"), false, m_profile), + new InstallLoaderPage("net.minecraftforge", "forge", tr("Forge"), false, profile), // Fabric - new InstallLoaderPage("net.fabricmc.fabric-loader", "fabricmc-small", tr("Fabric"), true, m_profile), + new InstallLoaderPage("net.fabricmc.fabric-loader", "fabricmc-small", tr("Fabric"), true, profile), // Quilt - new InstallLoaderPage("org.quiltmc.quilt-loader", "quiltmc", tr("Quilt"), true, m_profile), + new InstallLoaderPage("org.quiltmc.quilt-loader", "quiltmc", tr("Quilt"), true, profile), // LiteLoader - new InstallLoaderPage("com.mumfrey.liteloader", "liteloader", tr("LiteLoader"), false, m_profile) + new InstallLoaderPage("com.mumfrey.liteloader", "liteloader", tr("LiteLoader"), false, profile) }; } @@ -135,13 +144,18 @@ QString InstallLoaderDialog::dialogTitle() return tr("Install Loader"); } +void InstallLoaderDialog::validate(BasePage* page) +{ + buttons->button(QDialogButtonBox::Ok)->setEnabled(pageCast(page)->selectedVersion() != nullptr); +} + void InstallLoaderDialog::done(int result) { if (result == Accepted) { - auto* page = pageCast(m_container->selectedPage()); + auto* page = pageCast(container->selectedPage()); if (page->selectedVersion()) { - m_profile->setComponentVersion(page->id(), page->selectedVersion()->descriptor()); - m_profile->resolve(Net::Mode::Online); + profile->setComponentVersion(page->id(), page->selectedVersion()->descriptor()); + profile->resolve(Net::Mode::Online); } } diff --git a/launcher/ui/dialogs/InstallLoaderDialog.h b/launcher/ui/dialogs/InstallLoaderDialog.h index 09d847778..cdcba2b96 100644 --- a/launcher/ui/dialogs/InstallLoaderDialog.h +++ b/launcher/ui/dialogs/InstallLoaderDialog.h @@ -35,10 +35,11 @@ class InstallLoaderDialog final : public QDialog, public BasePageProvider { QList getPages() override; QString dialogTitle() override; + void validate(BasePage* page); void done(int result) override; private: - std::shared_ptr m_profile; - PageContainer* m_container; - QDialogButtonBox* m_buttons; + std::shared_ptr profile; + PageContainer* container; + QDialogButtonBox* buttons; }; diff --git a/launcher/ui/widgets/PageContainer.cpp b/launcher/ui/widgets/PageContainer.cpp index 0a8a0544c..dbbed36a7 100644 --- a/launcher/ui/widgets/PageContainer.cpp +++ b/launcher/ui/widgets/PageContainer.cpp @@ -147,7 +147,7 @@ BasePage* PageContainer::selectedPage() const return m_currentPage; } -const QList PageContainer::getPages() const +const QList& PageContainer::getPages() const { return m_model->pages(); } diff --git a/launcher/ui/widgets/PageContainer.h b/launcher/ui/widgets/PageContainer.h index bb365c826..eac597232 100644 --- a/launcher/ui/widgets/PageContainer.h +++ b/launcher/ui/widgets/PageContainer.h @@ -82,7 +82,7 @@ public: bool selectPage(QString pageId) override; BasePage* selectedPage() const override; BasePage* getPage(QString pageId) override; - const QList getPages() const; + const QList& getPages() const; void refreshContainer() override; virtual void setParentContainer(BasePageContainer * container)