#pragma once
#include "QCMake.h"
#include "QCMakeSizeType.h"
#include <QItemDelegate>
#include <QSet>
#include <QStandardItemModel>
#include <QTreeView>
class QSortFilterProxyModel;
class QCMakeCacheModel;
class QCMakeAdvancedFilter;
class QCMakeCacheView : public QTreeView
{
Q_OBJECT
public:
QCMakeCacheView(QWidget* p);
QCMakeCacheModel* cacheModel() const;
bool showAdvanced() const;
QSize sizeHint() const { return QSize(200, 200); }
bool setSearchFilter(QString const&);
public slots:
void setShowAdvanced(bool);
protected:
QModelIndex moveCursor(CursorAction, Qt::KeyboardModifiers);
bool event(QEvent* e);
QCMakeCacheModel* CacheModel;
QCMakeAdvancedFilter* AdvancedFilter;
QSortFilterProxyModel* SearchFilter;
};
class QCMakeCacheModel : public QStandardItemModel
{
Q_OBJECT
public:
QCMakeCacheModel(QObject* parent = nullptr);
~QCMakeCacheModel();
enum
{
HelpRole = Qt::ToolTipRole,
TypeRole = Qt::UserRole,
AdvancedRole,
StringsRole,
GroupRole
};
enum ViewType
{
FlatView,
GroupView
};
public slots:
void setProperties(QCMakePropertyList const& props);
void setShowNewProperties(bool);
void clear();
void setEditEnabled(bool);
bool insertProperty(QCMakeProperty::PropertyType t, QString const& name,
QString const& description, QVariant const& value,
bool advanced);
public:
QCMakePropertyList properties() const;
bool editEnabled() const;
cm_qsizetype newPropertyCount() const;
Qt::ItemFlags flags(QModelIndex const& index) const;
QModelIndex buddy(QModelIndex const& idx) const;
void getPropertyData(QModelIndex const& idx1, QCMakeProperty& prop) const;
void setViewType(ViewType t);
ViewType viewType() const;
protected:
bool EditEnabled;
cm_qsizetype NewPropertyCount;
bool ShowNewProperties;
ViewType View;
void setPropertyData(QModelIndex const& idx1, QCMakeProperty const& p,
bool isNew);
static void breakProperties(QSet<QCMakeProperty> const& props,
QMap<QString, QCMakePropertyList>& result);
static QString prefix(QString const& s);
};
class QCMakeCacheModelDelegate : public QItemDelegate
{
Q_OBJECT
public:
QCMakeCacheModelDelegate(QObject* p);
QWidget* createEditor(QWidget* parent, QStyleOptionViewItem const& option,
QModelIndex const& index) const;
bool editorEvent(QEvent* event, QAbstractItemModel* model,
QStyleOptionViewItem const& option,
QModelIndex const& index);
bool eventFilter(QObject* object, QEvent* event);
void setModelData(QWidget* editor, QAbstractItemModel* model,
QModelIndex const& index) const;
QSize sizeHint(QStyleOptionViewItem const& option,
QModelIndex const& index) const;
QSet<QCMakeProperty> changes() const;
void clearChanges();
protected slots:
void setFileDialogFlag(bool);
protected:
bool FileDialogFlag;
void recordChange(QAbstractItemModel* model, QModelIndex const& index);
QSet<QCMakeProperty> mChanges;
};