File indexing completed on 2024-04-21 05:45:46
0001 /*************************************************************************** 0002 * Copyright (C) 2008 by Pino Toscano <pino@kde.org> * 0003 * * 0004 * This program is free software; you can redistribute it and/or modify * 0005 * it under the terms of the GNU General Public License as published by * 0006 * the Free Software Foundation; either version 2 of the License, or * 0007 * (at your option) any later version. * 0008 ***************************************************************************/ 0009 0010 #ifndef _ALTERNATIVEMODELS_H_ 0011 #define _ALTERNATIVEMODELS_H_ 0012 0013 #include <QSortFilterProxyModel> 0014 #include <QVariant> 0015 0016 class Alternative; 0017 class AltFilesManager; 0018 class Item; 0019 class AlternativesBaseModelPrivate; 0020 class AlternativeItemsModelPrivate; 0021 class AlternativeAltModelPrivate; 0022 0023 enum 0024 { 0025 AltItemRole = 0x00ff0001, 0026 AltAlternativeRole = 0x00ff0002 0027 }; 0028 0029 class AlternativesBaseModel : public QAbstractItemModel 0030 { 0031 Q_OBJECT 0032 public: 0033 ~AlternativesBaseModel() Q_DECL_OVERRIDE; 0034 0035 // QAbstractItemModel interface 0036 bool hasChildren(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE; 0037 QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE; 0038 QModelIndex parent(const QModelIndex &index) const Q_DECL_OVERRIDE; 0039 int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE; 0040 0041 protected: 0042 AlternativesBaseModel(AlternativesBaseModelPrivate &dd, QObject *parent); 0043 Q_DECLARE_PRIVATE(AlternativesBaseModel) 0044 AlternativesBaseModelPrivate *d_ptr; 0045 }; 0046 0047 0048 class AlternativeItemsModel : public AlternativesBaseModel 0049 { 0050 Q_OBJECT 0051 0052 friend class AlternativeAltModelPrivate; 0053 public: 0054 AlternativeItemsModel(const QString &appName, QObject *parent = Q_NULLPTR); 0055 ~AlternativeItemsModel() Q_DECL_OVERRIDE; 0056 0057 // QAbstractItemModel interface 0058 int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE; 0059 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; 0060 Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE; 0061 bool hasChildren(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE; 0062 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; 0063 QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE; 0064 int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE; 0065 0066 void save(); 0067 bool isSupported() const; 0068 0069 private: 0070 Q_DECLARE_PRIVATE(AlternativeItemsModel) 0071 }; 0072 0073 0074 class AlternativeAltModel : public AlternativesBaseModel 0075 { 0076 Q_OBJECT 0077 public: 0078 AlternativeAltModel(AlternativeItemsModel *itemModel, bool readOnly, QObject *parent = Q_NULLPTR); 0079 ~AlternativeAltModel() Q_DECL_OVERRIDE; 0080 0081 // QAbstractItemModel interface 0082 int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE; 0083 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; 0084 Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE; 0085 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; 0086 QModelIndex parent(const QModelIndex &index) const Q_DECL_OVERRIDE; 0087 bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE; 0088 0089 void setItem(Item *item); 0090 void addAlternative(Alternative *alt); 0091 void removeAlternative(Alternative *alt); 0092 0093 private: 0094 Q_DECLARE_PRIVATE(AlternativeAltModel) 0095 Q_PRIVATE_SLOT(d_func(), void statusChanged(int)) 0096 }; 0097 0098 0099 class AlternativeItemProxyModel : public QSortFilterProxyModel 0100 { 0101 Q_OBJECT 0102 public: 0103 AlternativeItemProxyModel(QObject *parent = Q_NULLPTR); 0104 ~AlternativeItemProxyModel() Q_DECL_OVERRIDE; 0105 0106 void setShowSingleAlternative(bool show); 0107 0108 protected: 0109 bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const Q_DECL_OVERRIDE; 0110 0111 private: 0112 bool m_showSingle; 0113 }; 0114 0115 Q_DECLARE_METATYPE(Alternative*) 0116 Q_DECLARE_METATYPE(Item*) 0117 0118 #endif