2022-04-03 02:59:35 +05:30
|
|
|
#pragma once
|
|
|
|
|
2022-04-14 18:57:03 +05:30
|
|
|
#include <QTabWidget>
|
2022-04-03 02:59:35 +05:30
|
|
|
#include <QButtonGroup>
|
|
|
|
|
|
|
|
#include "Version.h"
|
|
|
|
#include "minecraft/MinecraftInstance.h"
|
|
|
|
#include "minecraft/PackProfile.h"
|
|
|
|
|
|
|
|
class MinecraftInstance;
|
|
|
|
|
|
|
|
namespace Ui {
|
2022-04-14 18:57:03 +05:30
|
|
|
class ModFilterWidget;
|
2022-04-03 02:59:35 +05:30
|
|
|
}
|
|
|
|
|
2022-04-14 18:57:03 +05:30
|
|
|
class ModFilterWidget : public QTabWidget
|
2022-04-03 02:59:35 +05:30
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
public:
|
2022-04-03 04:38:37 +05:30
|
|
|
enum VersionButtonID {
|
|
|
|
Strict = 0,
|
|
|
|
Major = 1,
|
|
|
|
All = 2,
|
|
|
|
Between = 3
|
|
|
|
};
|
|
|
|
|
2022-04-03 02:59:35 +05:30
|
|
|
struct Filter {
|
|
|
|
std::list<Version> versions;
|
2022-04-03 18:51:48 +05:30
|
|
|
|
|
|
|
bool operator==(const Filter& other) const { return versions == other.versions; }
|
|
|
|
bool operator!=(const Filter& other) const { return !(*this == other); }
|
2022-04-03 02:59:35 +05:30
|
|
|
};
|
|
|
|
|
|
|
|
std::shared_ptr<Filter> m_filter;
|
|
|
|
|
|
|
|
public:
|
2022-04-14 18:57:03 +05:30
|
|
|
explicit ModFilterWidget(Version def, QWidget* parent = nullptr);
|
|
|
|
~ModFilterWidget();
|
2022-04-03 02:59:35 +05:30
|
|
|
|
2022-04-14 18:57:03 +05:30
|
|
|
void setInstance(MinecraftInstance* instance);
|
2022-04-03 02:59:35 +05:30
|
|
|
|
2022-04-03 04:38:37 +05:30
|
|
|
/// By default all buttons are enabled
|
|
|
|
void disableVersionButton(VersionButtonID);
|
|
|
|
|
2022-04-14 18:57:03 +05:30
|
|
|
auto getFilter() -> std::shared_ptr<Filter>;
|
|
|
|
auto changed() const -> bool { return m_last_version_id != m_version_id; }
|
2022-04-03 02:59:35 +05:30
|
|
|
|
|
|
|
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);
|
|
|
|
|
2022-04-14 19:22:23 +05:30
|
|
|
public: signals:
|
|
|
|
void filterChanged();
|
|
|
|
void filterUnchanged();
|
|
|
|
|
2022-04-03 02:59:35 +05:30
|
|
|
private:
|
2022-04-14 18:57:03 +05:30
|
|
|
Ui::ModFilterWidget* ui;
|
2022-04-03 02:59:35 +05:30
|
|
|
|
|
|
|
MinecraftInstance* m_instance = nullptr;
|
|
|
|
|
|
|
|
QButtonGroup m_mcVersion_buttons;
|
2022-04-14 18:57:03 +05:30
|
|
|
|
|
|
|
/* 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;
|
2022-04-03 02:59:35 +05:30
|
|
|
};
|