From 277de4120052b2630850a18969a56ee92e8c2c63 Mon Sep 17 00:00:00 2001 From: flow Date: Thu, 14 Apr 2022 10:27:03 -0300 Subject: rework: make the filter as a tabbed widget in the dialog itself Still needs a clear indication that the filter only applies after you click the search button... --- launcher/ui/dialogs/FilterModsDialog.cpp | 122 ---------------------------- launcher/ui/dialogs/FilterModsDialog.h | 65 --------------- launcher/ui/dialogs/FilterModsDialog.ui | 135 ------------------------------- 3 files changed, 322 deletions(-) delete mode 100644 launcher/ui/dialogs/FilterModsDialog.cpp delete mode 100644 launcher/ui/dialogs/FilterModsDialog.h delete mode 100644 launcher/ui/dialogs/FilterModsDialog.ui (limited to 'launcher/ui/dialogs') diff --git a/launcher/ui/dialogs/FilterModsDialog.cpp b/launcher/ui/dialogs/FilterModsDialog.cpp deleted file mode 100644 index 9440d897..00000000 --- a/launcher/ui/dialogs/FilterModsDialog.cpp +++ /dev/null @@ -1,122 +0,0 @@ -#include "FilterModsDialog.h" -#include "ui_FilterModsDialog.h" - -FilterModsDialog::FilterModsDialog(Version def, QWidget* parent) - : QDialog(parent), m_filter(new Filter()), m_internal_filter(new Filter()), ui(new Ui::FilterModsDialog) -{ - ui->setupUi(this); - - m_mcVersion_buttons.addButton(ui->strictVersionButton, VersionButtonID::Strict); - m_mcVersion_buttons.addButton(ui->majorVersionButton, VersionButtonID::Major); - m_mcVersion_buttons.addButton(ui->allVersionsButton, VersionButtonID::All); - //m_mcVersion_buttons.addButton(ui->betweenVersionsButton, VersionButtonID::Between); - - connect(&m_mcVersion_buttons, SIGNAL(idClicked(int)), this, SLOT(onVersionFilterChanged(int))); - - m_internal_filter->versions.push_front(def); - commitChanges(); -} - -int FilterModsDialog::execWithInstance(MinecraftInstance* instance) -{ - m_instance = instance; - - auto* pressed_button = m_mcVersion_buttons.checkedButton(); - - // Fix first openening behaviour - onVersionFilterChanged(m_previous_mcVersion_id); - - auto mcVersionSplit = mcVersionStr().split("."); - - ui->strictVersionButton->setText( - tr("Strict match (= %1)").arg(mcVersionStr())); - ui->majorVersionButton->setText( - tr("Major version match (= %1.%2.x)").arg(mcVersionSplit[0], mcVersionSplit[1])); - ui->allVersionsButton->setText( - tr("Any version")); - //ui->betweenVersionsButton->setText( - // tr("Between two versions")); - - int ret = QDialog::exec(); - - if(ret == QDialog::DialogCode::Accepted){ - // If there's no change, let's sey it's a cancel to the caller - if(*m_internal_filter.get() == *m_filter.get()) - return QDialog::DialogCode::Rejected; - - m_previous_mcVersion_id = (VersionButtonID) m_mcVersion_buttons.checkedId(); - commitChanges(); - } else { - pressed_button->click(); - revertChanges(); - } - - m_instance = nullptr; - return ret; -} - -void FilterModsDialog::disableVersionButton(VersionButtonID id) -{ - switch(id){ - case(VersionButtonID::Strict): - ui->strictVersionButton->setEnabled(false); - break; - case(VersionButtonID::Major): - ui->majorVersionButton->setEnabled(false); - break; - case(VersionButtonID::All): - ui->allVersionsButton->setEnabled(false); - break; - case(VersionButtonID::Between): - // ui->betweenVersionsButton->setEnabled(false); - break; - default: - break; - } -} - -// Do deep copy -void FilterModsDialog::commitChanges() -{ - m_filter->versions = m_internal_filter->versions; -} -void FilterModsDialog::revertChanges() -{ - m_internal_filter->versions = m_filter->versions; -} - -void FilterModsDialog::onVersionFilterChanged(int id) -{ - //ui->lowerVersionComboBox->setEnabled(id == VersionButtonID::Between); - //ui->upperVersionComboBox->setEnabled(id == VersionButtonID::Between); - - auto versionSplit = mcVersionStr().split("."); - int index = 0; - - m_internal_filter->versions.clear(); - - switch(id){ - case(VersionButtonID::Strict): - m_internal_filter->versions.push_front(mcVersion()); - break; - case(VersionButtonID::Major): - for(auto i = Version(QString("%1.%2").arg(versionSplit[0], versionSplit[1])); i <= mcVersion(); index++){ - m_internal_filter->versions.push_front(i); - i = Version(QString("%1.%2.%3").arg(versionSplit[0], versionSplit[1], QString("%1").arg(index))); - } - break; - case(VersionButtonID::All): - // Empty list to avoid enumerating all versions :P - break; - case(VersionButtonID::Between): - // TODO - break; - default: - break; - } -} - -FilterModsDialog::~FilterModsDialog() -{ - delete ui; -} diff --git a/launcher/ui/dialogs/FilterModsDialog.h b/launcher/ui/dialogs/FilterModsDialog.h deleted file mode 100644 index fac28ca4..00000000 --- a/launcher/ui/dialogs/FilterModsDialog.h +++ /dev/null @@ -1,65 +0,0 @@ -#pragma once - -#include -#include - -#include "Version.h" -#include "minecraft/MinecraftInstance.h" -#include "minecraft/PackProfile.h" - -class MinecraftInstance; - -namespace Ui { -class FilterModsDialog; -} - -class FilterModsDialog : public QDialog -{ - Q_OBJECT -public: - enum VersionButtonID { - Strict = 0, - Major = 1, - All = 2, - Between = 3 - }; - - struct Filter { - std::list versions; - - bool operator==(const Filter& other) const { return versions == other.versions; } - bool operator!=(const Filter& other) const { return !(*this == other); } - }; - - std::shared_ptr m_filter; - std::shared_ptr m_internal_filter; - -public: - explicit FilterModsDialog(Version def, QWidget* parent = nullptr); - ~FilterModsDialog(); - - int execWithInstance(MinecraftInstance* instance); - - /// By default all buttons are enabled - void disableVersionButton(VersionButtonID); - - auto getFilter() -> std::shared_ptr { return m_filter; } - -private: - inline auto mcVersionStr() const -> QString { return m_instance ? m_instance->getPackProfile()->getComponentVersion("net.minecraft") : ""; } - inline auto mcVersion() const -> Version { return { mcVersionStr() }; } - - void commitChanges(); - void revertChanges(); - -private slots: - void onVersionFilterChanged(int id); - -private: - Ui::FilterModsDialog* ui; - - MinecraftInstance* m_instance = nullptr; - - QButtonGroup m_mcVersion_buttons; - VersionButtonID m_previous_mcVersion_id = VersionButtonID::Strict; -}; diff --git a/launcher/ui/dialogs/FilterModsDialog.ui b/launcher/ui/dialogs/FilterModsDialog.ui deleted file mode 100644 index 67a63bfd..00000000 --- a/launcher/ui/dialogs/FilterModsDialog.ui +++ /dev/null @@ -1,135 +0,0 @@ - - - FilterModsDialog - - - Qt::ApplicationModal - - - - 0 - 0 - 345 - 169 - - - - - 0 - 0 - - - - Filter options - - - true - - - true - - - - - - - 0 - 0 - - - - Minecraft versions - - - false - - - false - - - - - - QLayout::SetDefaultConstraint - - - - - - - StrictVersion - - - true - - - - - - - MajorVersion - - - - - - - AllVersions - - - - - - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - - buttonBox - accepted() - FilterModsDialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - FilterModsDialog - reject() - - - 316 - 260 - - - 286 - 274 - - - - - -- cgit