diff options
Diffstat (limited to 'launcher')
-rw-r--r-- | launcher/CMakeLists.txt | 3 | ||||
-rw-r--r-- | launcher/ui/dialogs/FilterModsDialog.cpp | 75 | ||||
-rw-r--r-- | launcher/ui/dialogs/FilterModsDialog.h | 54 | ||||
-rw-r--r-- | launcher/ui/dialogs/FilterModsDialog.ui | 181 |
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> |