#pragma once
#include "core/FilterSettings.h"
#include <QDialog>
#include <QList>
#include <QPair>
#include <QSet>
#include <QString>
#include <QWidget>
namespace whittle {
using PillItem = QPair<QString, qint64>;
class PillRow : public QWidget {
public:
PillRow(const QList<PillItem>& items, bool exclusive,
QWidget* parent = nullptr);
void check(qint64 v);
bool isChecked(qint64 v) const;
qint64 checkedValue(qint64 fallback) const;
int checkedCount() const;
protected:
void paintEvent(QPaintEvent*) override;
void mousePressEvent(QMouseEvent*) override;
void mouseMoveEvent(QMouseEvent*) override;
void leaveEvent(QEvent*) override;
private:
int hitTest(const QPoint& p) const;
QList<PillItem> m_items;
QList<int> m_x;
QSet<qint64> m_checked;
bool m_exclusive;
int m_hover = -1;
};
class SettingsDialog : public QDialog {
Q_OBJECT
public:
explicit SettingsDialog(const FilterSettings& initial, QWidget* parent = nullptr);
FilterSettings settings() const;
private:
PillRow* m_metric = nullptr;
PillRow* m_tol = nullptr;
PillRow* m_display = nullptr;
PillRow* m_recursive = nullptr;
PillRow* m_loadLast = nullptr;
};
}