#pragma once
#include "ui_VariationsDialog.h"
#include "FractoriumSettings.h"
///
/// FractoriumVariationsDialog class.
///
///
/// The variations filter dialog displays several columns
/// with the different types of variations shown as checkboxes.
/// This is used to filter the variations that are shown in the main window
/// because the list is very long.
/// The results are stored in a map and returned.
/// These are used in conjunction with the filter edit box to filter what's shown.
///
class FractoriumVariationsDialog : public QDialog
{
Q_OBJECT
public:
FractoriumVariationsDialog(FractoriumSettings* settings, QWidget* p = nullptr, Qt::WindowFlags f = nullptr);
void ForEachCell(std::function func);
void ForEachSelectedCell(std::function func);
void SyncSettings();
const QMap& Map();
public slots:
void OnSelectAllButtonClicked(bool checked);
void OnInvertSelectionButtonClicked(bool checked);
void OnSelectNoneButtonClicked(bool checked);
void OnVariationsTableItemChanged(QTableWidgetItem* item);
virtual void accept() override;
virtual void reject() override;
protected:
virtual void showEvent(QShowEvent* e) override;
private:
void DataToGui();
void GuiToData();
void Populate();
void SetCheckFromMap(QTableWidgetItem* cb, const Variation* var);
VariationList m_VariationList;
QMap m_Vars;
FractoriumSettings* m_Settings;
Ui::VariationsDialog ui;
};