aboutsummaryrefslogtreecommitdiff
path: root/launcher/ui/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'launcher/ui/widgets')
-rw-r--r--launcher/ui/widgets/ModFilterWidget.cpp109
-rw-r--r--launcher/ui/widgets/ModFilterWidget.h69
-rw-r--r--launcher/ui/widgets/ModFilterWidget.ui54
-rw-r--r--launcher/ui/widgets/VersionSelectWidget.cpp6
-rw-r--r--launcher/ui/widgets/VersionSelectWidget.h2
5 files changed, 239 insertions, 1 deletions
diff --git a/launcher/ui/widgets/ModFilterWidget.cpp b/launcher/ui/widgets/ModFilterWidget.cpp
new file mode 100644
index 00000000..ffc8d05d
--- /dev/null
+++ b/launcher/ui/widgets/ModFilterWidget.cpp
@@ -0,0 +1,109 @@
+#include "ModFilterWidget.h"
+#include "ui_ModFilterWidget.h"
+
+ModFilterWidget::ModFilterWidget(Version def, QWidget* parent)
+ : QTabWidget(parent), m_filter(new Filter()), ui(new Ui::ModFilterWidget)
+{
+ ui->setupUi(this);
+
+ m_mcVersion_buttons.addButton(ui->strictVersionButton, VersionButtonID::Strict);
+ ui->strictVersionButton->click();
+ 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_filter->versions.push_front(def);
+
+ setHidden(true);
+}
+
+void ModFilterWidget::setInstance(MinecraftInstance* instance)
+{
+ m_instance = instance;
+
+ 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"));
+}
+
+auto ModFilterWidget::getFilter() -> std::shared_ptr<Filter>
+{
+ m_last_version_id = m_version_id;
+ emit filterUnchanged();
+ return m_filter;
+}
+
+void ModFilterWidget::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 ModFilterWidget::onVersionFilterChanged(int id)
+{
+ //ui->lowerVersionComboBox->setEnabled(id == VersionButtonID::Between);
+ //ui->upperVersionComboBox->setEnabled(id == VersionButtonID::Between);
+
+ auto versionSplit = mcVersionStr().split(".");
+ int index = 0;
+
+ auto cast_id = (VersionButtonID) id;
+ if (cast_id != m_version_id) {
+ m_version_id = cast_id;
+ } else {
+ return;
+ }
+
+ m_filter->versions.clear();
+
+ switch(cast_id){
+ case(VersionButtonID::Strict):
+ m_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_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;
+ }
+
+ if(changed())
+ emit filterChanged();
+ else
+ emit filterUnchanged();
+}
+
+ModFilterWidget::~ModFilterWidget()
+{
+ delete ui;
+}
diff --git a/launcher/ui/widgets/ModFilterWidget.h b/launcher/ui/widgets/ModFilterWidget.h
new file mode 100644
index 00000000..334fc672
--- /dev/null
+++ b/launcher/ui/widgets/ModFilterWidget.h
@@ -0,0 +1,69 @@
+#pragma once
+
+#include <QTabWidget>
+#include <QButtonGroup>
+
+#include "Version.h"
+#include "minecraft/MinecraftInstance.h"
+#include "minecraft/PackProfile.h"
+
+class MinecraftInstance;
+
+namespace Ui {
+class ModFilterWidget;
+}
+
+class ModFilterWidget : public QTabWidget
+{
+ Q_OBJECT
+public:
+ enum VersionButtonID {
+ Strict = 0,
+ Major = 1,
+ All = 2,
+ Between = 3
+ };
+
+ struct Filter {
+ std::list<Version> versions;
+
+ bool operator==(const Filter& other) const { return versions == other.versions; }
+ bool operator!=(const Filter& other) const { return !(*this == other); }
+ };
+
+ std::shared_ptr<Filter> m_filter;
+
+public:
+ explicit ModFilterWidget(Version def, QWidget* parent = nullptr);
+ ~ModFilterWidget();
+
+ void setInstance(MinecraftInstance* instance);
+
+ /// By default all buttons are enabled
+ void disableVersionButton(VersionButtonID);
+
+ auto getFilter() -> std::shared_ptr<Filter>;
+ auto changed() const -> bool { return m_last_version_id != m_version_id; }
+
+private:
+ inline auto mcVersionStr() const -> QString { return m_instance ? m_instance->getPackProfile()->getComponentVersion("net.minecraft") : ""; }
+ inline auto mcVersion() const -> Version { return { mcVersionStr() }; }
+
+private slots:
+ void onVersionFilterChanged(int id);
+
+public: signals:
+ void filterChanged();
+ void filterUnchanged();
+
+private:
+ Ui::ModFilterWidget* ui;
+
+ MinecraftInstance* m_instance = nullptr;
+
+ QButtonGroup m_mcVersion_buttons;
+
+ /* Used to tell if the filter was changed since the last getFilter() call */
+ VersionButtonID m_last_version_id = VersionButtonID::Strict;
+ VersionButtonID m_version_id = VersionButtonID::Strict;
+};
diff --git a/launcher/ui/widgets/ModFilterWidget.ui b/launcher/ui/widgets/ModFilterWidget.ui
new file mode 100644
index 00000000..ad1090e2
--- /dev/null
+++ b/launcher/ui/widgets/ModFilterWidget.ui
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ModFilterWidget</class>
+ <widget class="QTabWidget" name="ModFilterWidget">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>300</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Minimum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <widget class="QWidget" name="VersionPage">
+ <attribute name="title">
+ <string>Minecraft versions</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <layout class="QFormLayout" name="formLayout">
+ <item row="2" column="0">
+ <widget class="QRadioButton" name="allVersionsButton">
+ <property name="text">
+ <string>allVersions</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QRadioButton" name="strictVersionButton">
+ <property name="text">
+ <string>strictVersion</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QRadioButton" name="majorVersionButton">
+ <property name="text">
+ <string>majorVersion</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/launcher/ui/widgets/VersionSelectWidget.cpp b/launcher/ui/widgets/VersionSelectWidget.cpp
index 1209f118..cc4fc6a2 100644
--- a/launcher/ui/widgets/VersionSelectWidget.cpp
+++ b/launcher/ui/widgets/VersionSelectWidget.cpp
@@ -4,7 +4,6 @@
#include <QVBoxLayout>
#include <QHeaderView>
-#include "VersionListView.h"
#include "VersionProxyModel.h"
#include "ui/dialogs/CustomMessageBox.h"
@@ -57,6 +56,11 @@ void VersionSelectWidget::setEmptyErrorString(QString emptyErrorString)
listView->setEmptyErrorString(emptyErrorString);
}
+void VersionSelectWidget::setEmptyMode(VersionListView::EmptyMode mode)
+{
+ listView->setEmptyMode(mode);
+}
+
VersionSelectWidget::~VersionSelectWidget()
{
}
diff --git a/launcher/ui/widgets/VersionSelectWidget.h b/launcher/ui/widgets/VersionSelectWidget.h
index 0a649408..f56daa8a 100644
--- a/launcher/ui/widgets/VersionSelectWidget.h
+++ b/launcher/ui/widgets/VersionSelectWidget.h
@@ -18,6 +18,7 @@
#include <QWidget>
#include <QSortFilterProxyModel>
#include "BaseVersionList.h"
+#include "VersionListView.h"
class VersionProxyModel;
class VersionListView;
@@ -49,6 +50,7 @@ public:
void setFilter(BaseVersionList::ModelRoles role, Filter *filter);
void setEmptyString(QString emptyString);
void setEmptyErrorString(QString emptyErrorString);
+ void setEmptyMode(VersionListView::EmptyMode mode);
void setResizeOn(int column);
signals: