aboutsummaryrefslogtreecommitdiff
path: root/launcher/ui/pages
diff options
context:
space:
mode:
Diffstat (limited to 'launcher/ui/pages')
-rw-r--r--launcher/ui/pages/modplatform/ModModel.cpp9
-rw-r--r--launcher/ui/pages/modplatform/ModModel.h2
-rw-r--r--launcher/ui/pages/modplatform/ModPage.cpp30
-rw-r--r--launcher/ui/pages/modplatform/ModPage.h8
-rw-r--r--launcher/ui/pages/modplatform/ModPage.ui27
-rw-r--r--launcher/ui/pages/modplatform/flame/FlameModPage.cpp19
-rw-r--r--launcher/ui/pages/modplatform/flame/FlameModPage.h2
7 files changed, 46 insertions, 51 deletions
diff --git a/launcher/ui/pages/modplatform/ModModel.cpp b/launcher/ui/pages/modplatform/ModModel.cpp
index 0ff784db..da0331b5 100644
--- a/launcher/ui/pages/modplatform/ModModel.cpp
+++ b/launcher/ui/pages/modplatform/ModModel.cpp
@@ -91,9 +91,14 @@ void ListModel::refresh()
performPaginatedSearch();
}
-void ListModel::searchWithTerm(const QString& term, const int sort)
+void ListModel::searchWithTerm(const QString& term, const int sort, const bool filter_changed)
{
- if (currentSearchTerm == term && currentSearchTerm.isNull() == term.isNull() && currentSort == sort) { return; }
+ if (currentSearchTerm == term
+ && currentSearchTerm.isNull() == term.isNull()
+ && currentSort == sort
+ && !filter_changed)
+ { return; }
+
currentSearchTerm = term;
currentSort = sort;
diff --git a/launcher/ui/pages/modplatform/ModModel.h b/launcher/ui/pages/modplatform/ModModel.h
index d4dc872d..d460cff2 100644
--- a/launcher/ui/pages/modplatform/ModModel.h
+++ b/launcher/ui/pages/modplatform/ModModel.h
@@ -35,7 +35,7 @@ class ListModel : public QAbstractListModel {
/* Ask the API for more information */
void fetchMore(const QModelIndex& parent) override;
void refresh();
- void searchWithTerm(const QString& term, const int sort);
+ void searchWithTerm(const QString& term, const int sort, const bool filter_changed);
void requestModVersions(const ModPlatform::IndexedPack& current);
virtual void loadIndexedPack(ModPlatform::IndexedPack& m, QJsonObject& obj) = 0;
diff --git a/launcher/ui/pages/modplatform/ModPage.cpp b/launcher/ui/pages/modplatform/ModPage.cpp
index 37f68291..57c2e45d 100644
--- a/launcher/ui/pages/modplatform/ModPage.cpp
+++ b/launcher/ui/pages/modplatform/ModPage.cpp
@@ -13,7 +13,7 @@ ModPage::ModPage(ModDownloadDialog* dialog, BaseInstance* instance, ModAPI* api)
, m_instance(instance)
, ui(new Ui::ModPage)
, dialog(dialog)
- , filter_dialog(static_cast<MinecraftInstance*>(instance)->getPackProfile()->getComponentVersion("net.minecraft"), this)
+ , filter_widget(static_cast<MinecraftInstance*>(instance)->getPackProfile()->getComponentVersion("net.minecraft"), this)
, api(api)
{
ui->setupUi(this);
@@ -24,7 +24,10 @@ ModPage::ModPage(ModDownloadDialog* dialog, BaseInstance* instance, ModAPI* api)
ui->versionSelectionBox->view()->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
ui->versionSelectionBox->view()->parentWidget()->setMaximumHeight(300);
- m_filter = filter_dialog.getFilter();
+ ui->gridLayout_3->addWidget(&filter_widget, 0, 0, 1, ui->gridLayout_3->columnCount());
+
+ filter_widget.setInstance(static_cast<MinecraftInstance*>(m_instance));
+ m_filter = filter_widget.getFilter();
}
ModPage::~ModPage()
@@ -59,21 +62,22 @@ auto ModPage::eventFilter(QObject* watched, QEvent* event) -> bool
void ModPage::filterMods()
{
- auto ret = filter_dialog.execWithInstance(static_cast<MinecraftInstance*>(m_instance));
- m_filter = filter_dialog.getFilter();
-
- if(ret == QDialog::DialogCode::Accepted){
- listModel->refresh();
-
- int prev_count = ui->versionSelectionBox->count();
- ui->versionSelectionBox->clear();
- updateModVersions(prev_count);
- }
+ filter_widget.setHidden(!filter_widget.isHidden());
}
void ModPage::triggerSearch()
{
- listModel->searchWithTerm(ui->searchEdit->text(), ui->sortByBox->currentIndex());
+ auto changed = filter_widget.changed();
+ m_filter = filter_widget.getFilter();
+
+ if(changed){
+ ui->packView->clearSelection();
+ ui->packDescription->clear();
+ ui->versionSelectionBox->clear();
+ updateSelectionButton();
+ }
+
+ listModel->searchWithTerm(ui->searchEdit->text(), ui->sortByBox->currentIndex(), changed);
}
void ModPage::onSelectionChanged(QModelIndex first, QModelIndex second)
diff --git a/launcher/ui/pages/modplatform/ModPage.h b/launcher/ui/pages/modplatform/ModPage.h
index 06581ab2..85aaede9 100644
--- a/launcher/ui/pages/modplatform/ModPage.h
+++ b/launcher/ui/pages/modplatform/ModPage.h
@@ -5,9 +5,9 @@
#include "Application.h"
#include "modplatform/ModAPI.h"
#include "modplatform/ModIndex.h"
-#include "ui/dialogs/FilterModsDialog.h"
#include "ui/pages/BasePage.h"
#include "ui/pages/modplatform/ModModel.h"
+#include "ui/widgets/ModFilterWidget.h"
class ModDownloadDialog;
@@ -40,7 +40,7 @@ class ModPage : public QWidget, public BasePage {
virtual auto validateVersion(ModPlatform::IndexedVersion& ver, QString mineVer, QString loaderVer = "") const -> bool = 0;
auto apiProvider() const -> const ModAPI* { return api.get(); };
- auto getFilter() const -> const std::shared_ptr<FilterModsDialog::Filter> { return m_filter; }
+ auto getFilter() const -> const std::shared_ptr<ModFilterWidget::Filter> { return m_filter; }
auto getCurrent() -> ModPlatform::IndexedPack& { return current; }
void updateModVersions(int prev_count = -1);
@@ -64,8 +64,8 @@ class ModPage : public QWidget, public BasePage {
Ui::ModPage* ui = nullptr;
ModDownloadDialog* dialog = nullptr;
- FilterModsDialog filter_dialog;
- std::shared_ptr<FilterModsDialog::Filter> m_filter;
+ ModFilterWidget filter_widget;
+ std::shared_ptr<ModFilterWidget::Filter> m_filter;
ModPlatform::ListModel* listModel = nullptr;
ModPlatform::IndexedPack current;
diff --git a/launcher/ui/pages/modplatform/ModPage.ui b/launcher/ui/pages/modplatform/ModPage.ui
index 4444583e..afcd9bb7 100644
--- a/launcher/ui/pages/modplatform/ModPage.ui
+++ b/launcher/ui/pages/modplatform/ModPage.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<layout class="QGridLayout" name="gridLayout">
- <item row="1" column="0" colspan="2">
+ <item row="1" column="0" colspan="4">
<layout class="QGridLayout" name="gridLayout_3">
<item row="1" column="2">
<widget class="QTextBrowser" name="packDescription">
@@ -41,7 +41,7 @@
</item>
</layout>
</item>
- <item row="0" column="1">
+ <item row="0" column="3">
<widget class="QPushButton" name="searchButton">
<property name="text">
<string>Search</string>
@@ -55,7 +55,7 @@
</property>
</widget>
</item>
- <item row="2" column="0" colspan="2">
+ <item row="2" column="0" colspan="4">
<layout class="QGridLayout" name="gridLayout_4" columnstretch="0,0,0">
<item row="0" column="2">
<widget class="QComboBox" name="versionSelectionBox"/>
@@ -80,15 +80,22 @@
</property>
</widget>
</item>
- <item row="1" column="0">
- <widget class="QPushButton" name="modFilterButton">
- <property name="text">
- <string>Filter options</string>
- </property>
- </widget>
- </item>
</layout>
</item>
+ <item row="0" column="1">
+ <widget class="QPushButton" name="modFilterButton">
+ <property name="text">
+ <string>Filter options</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="Line" name="line">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
<tabstops>
diff --git a/launcher/ui/pages/modplatform/flame/FlameModPage.cpp b/launcher/ui/pages/modplatform/flame/FlameModPage.cpp
index 6e666c4c..864ae8e6 100644
--- a/launcher/ui/pages/modplatform/flame/FlameModPage.cpp
+++ b/launcher/ui/pages/modplatform/flame/FlameModPage.cpp
@@ -67,25 +67,6 @@ auto FlameModPage::validateVersion(ModPlatform::IndexedVersion& ver, QString min
return ver.mcVersion.contains(mineVer);
}
-// We override this so that it refreshes correctly, otherwise it would show
-// invalid mods on the mod list, because the API would return mods for the
-// wrong mod loader :(
-void FlameModPage::filterMods()
-{
- auto ret = filter_dialog.execWithInstance(static_cast<MinecraftInstance*>(m_instance));
- m_filter = filter_dialog.getFilter();
-
- if(ret == QDialog::DialogCode::Accepted){
- // CF API can't handle well this
- if(!m_filter->versions.empty())
- listModel->refresh();
-
- int prev_count = ui->versionSelectionBox->count();
- ui->versionSelectionBox->clear();
- updateModVersions(prev_count);
- }
-}
-
// 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 7078e889..dc58fd7f 100644
--- a/launcher/ui/pages/modplatform/flame/FlameModPage.h
+++ b/launcher/ui/pages/modplatform/flame/FlameModPage.h
@@ -56,7 +56,5 @@ class FlameModPage : public ModPage {
auto validateVersion(ModPlatform::IndexedVersion& ver, QString mineVer, QString loaderVer = "") const -> bool override;
- void filterMods() override;
-
auto shouldDisplay() const -> bool override;
};