aboutsummaryrefslogtreecommitdiff
path: root/launcher/ui
diff options
context:
space:
mode:
authorflow <thiagodonato300@gmail.com>2022-04-02 20:08:37 -0300
committerflow <thiagodonato300@gmail.com>2022-04-15 08:49:43 -0300
commit76dfb7825ade6554095ac3a09b3accdbd4db5138 (patch)
treefbe03978afee836e377f159e196183c28a88fb8e /launcher/ui
parent5cb0e750936f09513b98a8b0fd57746ca18dc8bc (diff)
downloadPrismLauncher-76dfb7825ade6554095ac3a09b3accdbd4db5138.tar.gz
PrismLauncher-76dfb7825ade6554095ac3a09b3accdbd4db5138.tar.bz2
PrismLauncher-76dfb7825ade6554095ac3a09b3accdbd4db5138.zip
fix: 'All' filter working and get around CF API capabilities
Diffstat (limited to 'launcher/ui')
-rw-r--r--launcher/ui/dialogs/FilterModsDialog.cpp31
-rw-r--r--launcher/ui/dialogs/FilterModsDialog.h17
-rw-r--r--launcher/ui/dialogs/FilterModsDialog.ui62
-rw-r--r--launcher/ui/pages/modplatform/ModPage.cpp5
-rw-r--r--launcher/ui/pages/modplatform/ModPage.h2
-rw-r--r--launcher/ui/pages/modplatform/flame/FlameModPage.cpp19
-rw-r--r--launcher/ui/pages/modplatform/flame/FlameModPage.h2
7 files changed, 68 insertions, 70 deletions
diff --git a/launcher/ui/dialogs/FilterModsDialog.cpp b/launcher/ui/dialogs/FilterModsDialog.cpp
index a36f4ba4..bf4999e0 100644
--- a/launcher/ui/dialogs/FilterModsDialog.cpp
+++ b/launcher/ui/dialogs/FilterModsDialog.cpp
@@ -9,7 +9,7 @@ FilterModsDialog::FilterModsDialog(Version def, QWidget* parent)
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);
+ //m_mcVersion_buttons.addButton(ui->betweenVersionsButton, VersionButtonID::Between);
connect(&m_mcVersion_buttons, SIGNAL(idClicked(int)), this, SLOT(onVersionFilterChanged(int)));
@@ -31,18 +31,38 @@ int FilterModsDialog::execWithInstance(MinecraftInstance* instance)
tr("Major varsion match (= %1.%2.x)").arg(mcVersionSplit[0], mcVersionSplit[1]));
ui->allVersionsButton->setText(
tr("Any version match"));
- ui->betweenVersionsButton->setText(
- tr("Between two versions"));
+ //ui->betweenVersionsButton->setText(
+ // tr("Between two versions"));
int ret = QDialog::exec();
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;
+ }
+}
+
void FilterModsDialog::onVersionFilterChanged(int id)
{
- ui->lowerVersionComboBox->setEnabled(id == VersionButtonID::Between);
- ui->upperVersionComboBox->setEnabled(id == VersionButtonID::Between);
+ //ui->lowerVersionComboBox->setEnabled(id == VersionButtonID::Between);
+ //ui->upperVersionComboBox->setEnabled(id == VersionButtonID::Between);
auto versionSplit = mcVersionStr().split(".");
int index = 0;
@@ -60,6 +80,7 @@ void FilterModsDialog::onVersionFilterChanged(int id)
}
break;
case(VersionButtonID::All):
+ // Empty list to avoid enumerating all versions :P
break;
case(VersionButtonID::Between):
// TODO
diff --git a/launcher/ui/dialogs/FilterModsDialog.h b/launcher/ui/dialogs/FilterModsDialog.h
index b119e8e5..3684b03c 100644
--- a/launcher/ui/dialogs/FilterModsDialog.h
+++ b/launcher/ui/dialogs/FilterModsDialog.h
@@ -17,6 +17,13 @@ class FilterModsDialog : public QDialog
{
Q_OBJECT
public:
+ enum VersionButtonID {
+ Strict = 0,
+ Major = 1,
+ All = 2,
+ Between = 3
+ };
+
struct Filter {
std::list<Version> versions;
};
@@ -29,16 +36,12 @@ public:
int execWithInstance(MinecraftInstance* instance);
+ /// By default all buttons are enabled
+ void disableVersionButton(VersionButtonID);
+
auto getFilter() -> std::shared_ptr<Filter> { return m_filter; }
private:
- enum VersionButtonID {
- Strict = 0,
- Major = 1,
- All = 2,
- Between = 3
- };
-
inline auto mcVersionStr() const -> QString { return m_instance ? m_instance->getPackProfile()->getComponentVersion("net.minecraft") : ""; }
inline auto mcVersion() const -> Version { return { mcVersionStr() }; }
diff --git a/launcher/ui/dialogs/FilterModsDialog.ui b/launcher/ui/dialogs/FilterModsDialog.ui
index da368aac..67a63bfd 100644
--- a/launcher/ui/dialogs/FilterModsDialog.ui
+++ b/launcher/ui/dialogs/FilterModsDialog.ui
@@ -10,15 +10,17 @@
<x>0</x>
<y>0</y>
<width>345</width>
- <height>323</height>
+ <height>169</height>
</rect>
</property>
- <property name="windowTitle">
- <string>Copy Instance</string>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
</property>
- <property name="windowIcon">
- <iconset>
- <normaloff>:/icons/toolbar/copy</normaloff>:/icons/toolbar/copy</iconset>
+ <property name="windowTitle">
+ <string>Filter options</string>
</property>
<property name="sizeGripEnabled">
<bool>true</bool>
@@ -78,60 +80,12 @@
</item>
</layout>
</item>
- <item row="0" column="1">
- <layout class="QVBoxLayout" name="verticalLayout_3">
- <item>
- <layout class="QFormLayout" name="formLayout">
- <item row="0" column="0" colspan="2">
- <widget class="QRadioButton" name="betweenVersionsButton">
- <property name="text">
- <string>BetweenVersions</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="fromLabel">
- <property name="text">
- <string>From</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QComboBox" name="lowerVersionComboBox"/>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="toLabel">
- <property name="text">
- <string>To</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QComboBox" name="upperVersionComboBox"/>
- </item>
- </layout>
- </item>
- </layout>
- </item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
diff --git a/launcher/ui/pages/modplatform/ModPage.cpp b/launcher/ui/pages/modplatform/ModPage.cpp
index ece97ef2..ba56c3b8 100644
--- a/launcher/ui/pages/modplatform/ModPage.cpp
+++ b/launcher/ui/pages/modplatform/ModPage.cpp
@@ -64,7 +64,6 @@ void ModPage::filterMods()
m_filter = filter_dialog.getFilter();
listModel->refresh();
-
if(ui->versionSelectionBox->count() > 0){
ui->versionSelectionBox->clear();
updateModVersions();
@@ -164,14 +163,14 @@ void ModPage::updateModVersions()
for (int i = 0; i < current.versions.size(); i++) {
auto version = current.versions[i];
bool valid = false;
- //NOTE: Flame doesn't care about loaderString, so passing it changes nothing.
for(auto& mcVer : m_filter->versions){
+ //NOTE: Flame doesn't care about loaderString, so passing it changes nothing.
if (validateVersion(version, mcVer.toString(), loaderString)) {
valid = true;
break;
}
}
- if(valid)
+ if(valid || m_filter->versions.size() == 0)
ui->versionSelectionBox->addItem(version.version, QVariant(i));
}
if (ui->versionSelectionBox->count() == 0) { ui->versionSelectionBox->addItem(tr("No valid version found!"), QVariant(-1)); }
diff --git a/launcher/ui/pages/modplatform/ModPage.h b/launcher/ui/pages/modplatform/ModPage.h
index 3c71e6fe..0befc7c3 100644
--- a/launcher/ui/pages/modplatform/ModPage.h
+++ b/launcher/ui/pages/modplatform/ModPage.h
@@ -54,7 +54,7 @@ class ModPage : public QWidget, public BasePage {
void updateSelectionButton();
protected slots:
- void filterMods();
+ virtual void filterMods();
void triggerSearch();
void onSelectionChanged(QModelIndex first, QModelIndex second);
void onVersionSelectionChanged(QString data);
diff --git a/launcher/ui/pages/modplatform/flame/FlameModPage.cpp b/launcher/ui/pages/modplatform/flame/FlameModPage.cpp
index 864ae8e6..5398bda3 100644
--- a/launcher/ui/pages/modplatform/flame/FlameModPage.cpp
+++ b/launcher/ui/pages/modplatform/flame/FlameModPage.cpp
@@ -67,6 +67,25 @@ auto FlameModPage::validateVersion(ModPlatform::IndexedVersion& ver, QString min
return ver.mcVersion.contains(mineVer);
}
+// We override this so that it refreshes correctly, otherwise it wouldn't show
+// any mod on the mod list, because the CF API does not support it :(
+void FlameModPage::filterMods()
+{
+ filter_dialog.execWithInstance(static_cast<MinecraftInstance*>(m_instance));
+
+ int prev_size = m_filter->versions.size();
+ m_filter = filter_dialog.getFilter();
+ int new_size = m_filter->versions.size();
+
+ if(new_size <= 1 && new_size != prev_size)
+ listModel->refresh();
+
+ if(ui->versionSelectionBox->count() > 0){
+ ui->versionSelectionBox->clear();
+ updateModVersions();
+ }
+}
+
// I don't know why, but doing this on the parent class makes it so that
// other mod providers start loading before being selected, at least with
// my Qt, so we need to implement this in every derived class...
diff --git a/launcher/ui/pages/modplatform/flame/FlameModPage.h b/launcher/ui/pages/modplatform/flame/FlameModPage.h
index dc58fd7f..7078e889 100644
--- a/launcher/ui/pages/modplatform/flame/FlameModPage.h
+++ b/launcher/ui/pages/modplatform/flame/FlameModPage.h
@@ -56,5 +56,7 @@ class FlameModPage : public ModPage {
auto validateVersion(ModPlatform::IndexedVersion& ver, QString mineVer, QString loaderVer = "") const -> bool override;
+ void filterMods() override;
+
auto shouldDisplay() const -> bool override;
};