File indexing completed on 2024-12-08 10:15:36
0001 /* This file is part of the KDE project 0002 Copyright (C) 2008-2018 Jarosław Staniek <staniek@kde.org> 0003 0004 This library is free software; you can redistribute it and/or 0005 modify it under the terms of the GNU Library General Public 0006 License as published by the Free Software Foundation; either 0007 version 2 of the License, or (at your option) any later version. 0008 0009 This library is distributed in the hope that it will be useful, 0010 but WITHOUT ANY WARRANTY; without even the implied warranty of 0011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 0012 Library General Public License for more details. 0013 0014 You should have received a copy of the GNU Library General Public License 0015 along with this library; see the file COPYING.LIB. If not, write to 0016 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 0017 * Boston, MA 02110-1301, USA. 0018 */ 0019 0020 #ifndef KPROPERTY_EDITORDATAMODEL_H 0021 #define KPROPERTY_EDITORDATAMODEL_H 0022 0023 #include "kpropertywidgets_export.h" 0024 #include "KPropertySet.h" 0025 0026 #include <QAbstractItemModel> 0027 #include <QModelIndex> 0028 0029 class KProperty; 0030 class KPropertyEditorView; 0031 0032 /*! @short A data model that integrates a KPropertySet object with the Qt's model/view API. 0033 @see KPropertyEditorView 0034 @internal 0035 */ 0036 class KPropertyEditorDataModel : public QAbstractItemModel 0037 { 0038 Q_OBJECT 0039 public: 0040 //! Creates a new model. @a view and view->propertySet() are required. 0041 explicit KPropertyEditorDataModel(KPropertyEditorView *view, 0042 KPropertySetIterator::Order order = KPropertySetIterator::Order::Insertion); 0043 ~KPropertyEditorDataModel() override; 0044 0045 enum Role { 0046 PropertyModifiedRole = Qt::UserRole + 0, 0047 PropertyGroupRole = Qt::UserRole + 1 0048 }; 0049 QVariant data(const QModelIndex &index, int role) const override; 0050 QVariant headerData(int section, Qt::Orientation orientation, 0051 int role = Qt::DisplayRole) const override; 0052 0053 QModelIndex index(int row, int column, 0054 const QModelIndex &parent = QModelIndex()) const override; 0055 QModelIndex parent(const QModelIndex &index) const override; 0056 0057 int rowCount(const QModelIndex &parent = QModelIndex()) const override; 0058 int columnCount(const QModelIndex &parent = QModelIndex()) const override; 0059 0060 Qt::ItemFlags flags(const QModelIndex &index) const override; 0061 bool setData(const QModelIndex &index, const QVariant &value, 0062 int role = Qt::EditRole) override; 0063 bool setHeaderData(int section, Qt::Orientation orientation, 0064 const QVariant &value, int role = Qt::EditRole) override; 0065 0066 QModelIndex buddy(const QModelIndex &index) const override; 0067 0068 //! @return property set object for this model. It is never @c nullptr. 0069 KPropertySet* propertySet() const; 0070 0071 //! @return property object for model index @a index 0072 //! or @c nullptr for invalid index or index without a property assigned. 0073 KProperty *propertyForIndex(const QModelIndex& index) const; 0074 0075 //! @return model index for property named @a propertyName 0076 //! or invalid index if such property could not be found. 0077 QModelIndex indexForPropertyName(const QByteArray& propertyName) const; 0078 0079 //! @return a sibling for model index @a index and column @a column 0080 QModelIndex indexForColumn(const QModelIndex& index, int column) const; 0081 0082 //! @return order for properties. 0083 KPropertySetIterator::Order order() const; 0084 0085 //! Reimplemented for optimization. 0086 bool hasChildren(const QModelIndex &parent = QModelIndex()) const override; 0087 0088 public Q_SLOTS: 0089 //! Sets order for properties. 0090 void setOrder(KPropertySetIterator::Order order); 0091 0092 /*! Updates visibility of property groups. 0093 @see KPropertyEditorView::setGroupsVisible(bool) 0094 @since 3.1 */ 0095 void updateGroupsVisibility(); 0096 0097 private: 0098 //! Collects persistent indices for the model. They are dependent on groupping and sorting. 0099 void collectIndices() const; 0100 0101 Q_DISABLE_COPY(KPropertyEditorDataModel) 0102 class Private; 0103 Private * const d; 0104 0105 friend class KPropertyEditorView; 0106 }; 0107 0108 #endif