#pragma once
#include "model/FileRecord.h"
#include <QAbstractTableModel>
#include <QHash>
#include <QList>
#include <QSet>
namespace whittle {
class DiffTableModel : public QAbstractTableModel {
Q_OBJECT
public:
enum Column { Name = 0, Size, Modified, TimeDiff, ColumnCount };
explicit DiffTableModel(bool checkable, QObject* parent = nullptr);
void setRows(QList<FileRecord> rows, QHash<QString, FileRecord> peer);
QSet<QString> checkedPaths() const { return m_checked; }
const FileRecord* recordAt(int row) const;
void removeRecord(const QString& relPath);
void setSkipped(const QSet<QString>& relPaths);
int rowCount(const QModelIndex& = {}) const override;
int columnCount(const QModelIndex& = {}) const override;
QVariant data(const QModelIndex&, int role) const override;
QVariant headerData(int, Qt::Orientation, int) const override;
Qt::ItemFlags flags(const QModelIndex&) const override;
bool setData(const QModelIndex&, const QVariant&, int role) override;
void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
private:
void applySort();
bool m_checkable;
QList<FileRecord> m_rows;
QHash<QString, FileRecord> m_peer;
QSet<QString> m_checked;
QSet<QString> m_skipped;
int m_sortColumn = Name;
Qt::SortOrder m_sortOrder = Qt::AscendingOrder;
};
}