| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 | /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying   file Copyright.txt or https://cmake.org/licensing for details.  */#ifndef QCMakeCacheView_h#define QCMakeCacheView_h#include "QCMake.h"#include <QItemDelegate>#include <QSet>#include <QStandardItemModel>#include <QTreeView>class QSortFilterProxyModel;class QCMakeCacheModel;class QCMakeAdvancedFilter;/// Qt view class for cache propertiesclass QCMakeCacheView : public QTreeView{  Q_OBJECTpublic:  QCMakeCacheView(QWidget* p);  // retrieve the QCMakeCacheModel storing all the pointers  // this isn't necessarily the model one would get from model()  QCMakeCacheModel* cacheModel() const;  // get whether to show advanced entries  bool showAdvanced() const;  QSize sizeHint() const { return QSize(200, 200); }public slots:  // set whether to show advanced entries  void setShowAdvanced(bool);  // set the search filter string.  any property key or value not matching will  // be filtered out  void setSearchFilter(const QString&);protected:  QModelIndex moveCursor(CursorAction, Qt::KeyboardModifiers);  bool event(QEvent* e);  QCMakeCacheModel* CacheModel;  QCMakeAdvancedFilter* AdvancedFilter;  QSortFilterProxyModel* SearchFilter;};/// Qt model class for cache propertiesclass QCMakeCacheModel : public QStandardItemModel{  Q_OBJECTpublic:  QCMakeCacheModel(QObject* parent);  ~QCMakeCacheModel();  // roles used to retrieve extra data such has help strings, types of  // properties, and the advanced flag  enum  {    HelpRole = Qt::ToolTipRole,    TypeRole = Qt::UserRole,    AdvancedRole,    StringsRole,    GroupRole  };  enum ViewType  {    FlatView,    GroupView  };public slots:  // set a list of properties.  This list will be sorted and grouped according  // to prefix.  Any property that existed already and which is found in this  // list of properties to set will become an old property.  All others will  // become new properties and be marked red.  void setProperties(const QCMakePropertyList& props);  // set whether to show new properties in red  void setShowNewProperties(bool);  // clear everything from the model  void clear();  // set flag whether the model can currently be edited.  void setEditEnabled(bool);  // insert a new property at a row specifying all the information about the  // property  bool insertProperty(QCMakeProperty::PropertyType t, const QString& name,                      const QString& description, const QVariant& value,                      bool advanced);  // set the view type  void setViewType(ViewType t);  ViewType viewType() const;public:  // get the properties  QCMakePropertyList properties() const;  // editing enabled  bool editEnabled() const;  // returns how many new properties there are  int newPropertyCount() const;  // return flags (overloaded to modify flag based on EditEnabled flag)  Qt::ItemFlags flags(const QModelIndex& index) const;  QModelIndex buddy(const QModelIndex& idx) const;  // get the data in the model for this property  void getPropertyData(const QModelIndex& idx1, QCMakeProperty& prop) const;protected:  bool EditEnabled;  int NewPropertyCount;  bool ShowNewProperties;  ViewType View;  // set the data in the model for this property  void setPropertyData(const QModelIndex& idx1, const QCMakeProperty& p,                       bool isNew);  // breaks up he property list into groups  // where each group has the same prefix up to the first underscore  static void breakProperties(const QSet<QCMakeProperty>& props,                              QMap<QString, QCMakePropertyList>& result);  // gets the prefix of a string up to the first _  static QString prefix(const QString& s);};/// Qt delegate class for interaction (or other customization)/// with cache propertiesclass QCMakeCacheModelDelegate : public QItemDelegate{  Q_OBJECTpublic:  QCMakeCacheModelDelegate(QObject* p);  /// create our own editors for cache properties  QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option,                        const QModelIndex& index) const;  bool editorEvent(QEvent* event, QAbstractItemModel* model,                   const QStyleOptionViewItem& option,                   const QModelIndex& index);  void setModelData(QWidget* editor, QAbstractItemModel* model,                    const QModelIndex& index) const;  QSize sizeHint(const QStyleOptionViewItem& option,                 const QModelIndex& index) const;  QSet<QCMakeProperty> changes() const;  void clearChanges();protected slots:  void setFileDialogFlag(bool);protected:  bool FileDialogFlag;  // record a change to an item in the model.  // this simply saves the item in the set of changes  void recordChange(QAbstractItemModel* model, const QModelIndex& index);  // properties changed by user via this delegate  QSet<QCMakeProperty> mChanges;};#endif
 |