Pith - whittle
#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 {
		Q_OBJECT
	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;

		signals:
		void changed();

	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;
	};

}