aboutsummaryrefslogtreecommitdiff
path: root/launcher
diff options
context:
space:
mode:
Diffstat (limited to 'launcher')
-rw-r--r--launcher/CMakeLists.txt3
-rw-r--r--launcher/ui/dialogs/FilterModsDialog.cpp75
-rw-r--r--launcher/ui/dialogs/FilterModsDialog.h54
-rw-r--r--launcher/ui/dialogs/FilterModsDialog.ui181
4 files changed, 313 insertions, 0 deletions
diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt
index 42348792..8579071a 100644
--- a/launcher/CMakeLists.txt
+++ b/launcher/CMakeLists.txt
@@ -824,6 +824,8 @@ SET(LAUNCHER_SOURCES
ui/dialogs/SkinUploadDialog.h
ui/dialogs/ModDownloadDialog.cpp
ui/dialogs/ModDownloadDialog.h
+ ui/dialogs/FilterModsDialog.cpp
+ ui/dialogs/FilterModsDialog.h
# GUI - widgets
@@ -923,6 +925,7 @@ qt5_wrap_ui(LAUNCHER_UI
ui/dialogs/LoginDialog.ui
ui/dialogs/EditAccountDialog.ui
ui/dialogs/ReviewMessageBox.ui
+ ui/dialogs/FilterModsDialog.ui
)
qt5_add_resources(LAUNCHER_RESOURCES
diff --git a/launcher/ui/dialogs/FilterModsDialog.cpp b/launcher/ui/dialogs/FilterModsDialog.cpp
new file mode 100644
index 00000000..a36f4ba4
--- /dev/null
+++ b/launcher/ui/dialogs/FilterModsDialog.cpp
@@ -0,0 +1,75 @@
+#include "FilterModsDialog.h"
+#include "ui_FilterModsDialog.h"
+
+FilterModsDialog::FilterModsDialog(Version def, QWidget* parent)
+ : QDialog(parent), m_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_filter->versions.push_front(def);
+}
+
+int FilterModsDialog::execWithInstance(MinecraftInstance* instance)
+{
+ m_instance = instance;
+
+ // Fix first openening behaviour
+ onVersionFilterChanged(0);
+
+ auto mcVersionSplit = mcVersionStr().split(".");
+
+ ui->strictVersionButton->setText(
+ tr("Strict match (= %1)").arg(mcVersionStr()));
+ ui->majorVersionButton->setText(
+ 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"));
+
+ int ret = QDialog::exec();
+ m_instance = nullptr;
+ return ret;
+}
+
+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_filter->versions.clear();
+
+ switch(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):
+ 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
new file mode 100644
index 00000000..b119e8e5
--- /dev/null
+++ b/launcher/ui/dialogs/FilterModsDialog.h
@@ -0,0 +1,54 @@
+#pragma once
+
+#include <QDialog>
+#include <QButtonGroup>
+
+#include "Version.h"
+#include "minecraft/MinecraftInstance.h"
+#include "minecraft/PackProfile.h"
+
+class MinecraftInstance;
+
+namespace Ui {
+class FilterModsDialog;
+}
+
+class FilterModsDialog : public QDialog
+{
+ Q_OBJECT
+public:
+ struct Filter {
+ std::list<Version> versions;
+ };
+
+ std::shared_ptr<Filter> m_filter;
+
+public:
+ explicit FilterModsDialog(Version def, QWidget* parent = nullptr);
+ ~FilterModsDialog();
+
+ int execWithInstance(MinecraftInstance* instance);
+
+ 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() }; }
+
+private slots:
+ void onVersionFilterChanged(int id);
+
+private:
+ Ui::FilterModsDialog* ui;
+
+ MinecraftInstance* m_instance = nullptr;
+
+ QButtonGroup m_mcVersion_buttons;
+};
diff --git a/launcher/ui/dialogs/FilterModsDialog.ui b/launcher/ui/dialogs/FilterModsDialog.ui
new file mode 100644
index 00000000..da368aac
--- /dev/null
+++ b/launcher/ui/dialogs/FilterModsDialog.ui
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>FilterModsDialog</class>
+ <widget class="QDialog" name="FilterModsDialog">
+ <property name="windowModality">
+ <enum>Qt::ApplicationModal</enum>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>345</width>
+ <height>323</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Copy Instance</string>
+ </property>
+ <property name="windowIcon">
+ <iconset>
+ <normaloff>:/icons/toolbar/copy</normaloff>:/icons/toolbar/copy</iconset>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <property name="modal">
+ <bool>true</bool>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Minecraft versions</string>
+ </property>
+ <property name="flat">
+ <bool>false</bool>
+ </property>
+ <property name="checkable">
+ <bool>false</bool>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_4">
+ <item>
+ <layout class="QFormLayout" name="formLayout_2">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetDefaultConstraint</enum>
+ </property>
+ <item row="0" column="0">
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="QRadioButton" name="strictVersionButton">
+ <property name="text">
+ <string>StrictVersion</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="majorVersionButton">
+ <property name="text">
+ <string>MajorVersion</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="allVersionsButton">
+ <property name="text">
+ <string>AllVersions</string>
+ </property>
+ </widget>
+ </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>
+ </property>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>accepted()</signal>
+ <receiver>FilterModsDialog</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>248</x>
+ <y>254</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>157</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>FilterModsDialog</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>316</x>
+ <y>260</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>286</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>