summaryrefslogtreecommitdiff
path: root/src/backend/bookshelfmodel/btbookshelftreemodel.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/bookshelfmodel/btbookshelftreemodel.h')
-rw-r--r--src/backend/bookshelfmodel/btbookshelftreemodel.h308
1 files changed, 166 insertions, 142 deletions
diff --git a/src/backend/bookshelfmodel/btbookshelftreemodel.h b/src/backend/bookshelfmodel/btbookshelftreemodel.h
index 085095d..14c3289 100644
--- a/src/backend/bookshelfmodel/btbookshelftreemodel.h
+++ b/src/backend/bookshelfmodel/btbookshelftreemodel.h
@@ -4,7 +4,7 @@
*
* This file is part of BibleTime's source code, http://www.bibletime.info/.
*
-* Copyright 1999-2011 by the BibleTime developers.
+* Copyright 1999-2014 by the BibleTime developers.
* The BibleTime source code is licensed under the GNU General Public License
* version 2.0.
*
@@ -23,157 +23,181 @@
#include "backend/bookshelfmodel/item.h"
-namespace BookshelfModel {
-class ModuleItem;
-}
+namespace BookshelfModel { class ModuleItem; }
class CSwordModuleInfo;
class QDataStream;
class BtBookshelfTreeModel: public QAbstractItemModel {
- Q_OBJECT
- Q_ENUMS(Group)
-
- typedef QMap<CSwordModuleInfo*, BookshelfModel::ModuleItem*> ModuleItemMap;
- typedef QMap<CSwordModuleInfo*, QPersistentModelIndex> SourceIndexMap;
-
- public: /* Types: */
- enum ModuleRole {
- CheckStateRole = BtBookshelfModel::UserRole,
- UserRole = BtBookshelfModel::UserRole + 100
- };
- enum Group {
- GROUP_CATEGORY = 0,
- GROUP_LANGUAGE = 1,
- GROUP_INDEXING
- };
- enum CheckedBehavior {
- CHECKED, /**< Check all added modules by default. */
- UNCHECKED, /**< Uncheck all added modules by default. */
- MODULE_HIDDEN, /**< By default, check only added modules that are not hidden. */
- MODULE_INDEXED /**< By default, check only added modules that are indexed. */
- };
-
- class Grouping: public QList<Group> {
- public:
- /**
- \warning Be careful using this constructor!
- */
- explicit inline Grouping(bool empty = false) {
- if (empty)
- return;
- push_back(GROUP_CATEGORY);
- push_back(GROUP_LANGUAGE);
- }
- explicit inline Grouping(Group group) { push_back(group); }
- explicit inline Grouping(const QString &configKey) {
- if (loadFrom(configKey))
- return;
- push_back(GROUP_CATEGORY);
- push_back(GROUP_LANGUAGE);
- }
- inline Grouping(const Grouping &copy)
- : QList<Group>(copy) {}
-
- bool loadFrom(const QString &configKey);
- void saveTo(const QString &configKey) const;
- };
-
- public: /* Methods: */
- BtBookshelfTreeModel(QObject *parent = 0);
- BtBookshelfTreeModel(const QString &configKey, QObject *parent = 0);
- BtBookshelfTreeModel(const Grouping &grouping, QObject *parent = 0);
- virtual ~BtBookshelfTreeModel();
-
- virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
- virtual int columnCount(const QModelIndex &parent = QModelIndex())
- const;
- virtual bool hasChildren(const QModelIndex &parent = QModelIndex())
- const;
- virtual QModelIndex index(int row, int column,
- const QModelIndex &parent = QModelIndex())
- const;
- virtual QModelIndex parent(const QModelIndex &index) const;
- virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
- QVariant data(CSwordModuleInfo *module, int role = Qt::DisplayRole) const;
- virtual Qt::ItemFlags flags(const QModelIndex &index) const;
- virtual QVariant headerData(int section, Qt::Orientation orientation,
- int role = Qt::DisplayRole) const;
- virtual bool setData(const QModelIndex &index, const QVariant &value,
- int role);
-
- inline QAbstractItemModel *sourceModel() const { return m_sourceModel; }
- inline const Grouping &groupingOrder() const { return m_groupingOrder; }
- inline bool checkable() const { return m_checkable; }
- inline CheckedBehavior defaultChecked() const { return m_defaultChecked; }
- inline QList<CSwordModuleInfo*> modules() const { return m_modules.keys(); }
- inline const QSet<CSwordModuleInfo*> &checkedModules() const {
- return m_checkedModulesCache;
- }
- public slots:
- void setSourceModel(QAbstractItemModel *sourceModel);
- void setGroupingOrder(const BtBookshelfTreeModel::Grouping &groupingOrder,
- bool emitSignal = true);
- void setCheckable(bool checkable);
- inline void setDefaultChecked(CheckedBehavior b) {
- m_defaultChecked = b;
- }
- void setCheckedModules(const QSet<CSwordModuleInfo*> &modules);
-
- signals:
- void groupingOrderChanged(BtBookshelfTreeModel::Grouping newGrouping);
- void moduleChecked(CSwordModuleInfo *module, bool checked);
-
- protected:
- void resetData();
- QVariant parentData(BookshelfModel::ModuleItem *item, int role) const;
- void addModule(CSwordModuleInfo *module, bool checked);
- void addModule(CSwordModuleInfo *module, QModelIndex parentIndex,
- Grouping &intermediateGrouping, bool checked);
- void removeModule(CSwordModuleInfo *module);
-
- BookshelfModel::Item *getItem(const QModelIndex &index) const;
- QModelIndex getIndex(const BookshelfModel::Item *item);
- void resetParentCheckStates(QModelIndex parentIndex);
-
- template <class T>
- QModelIndex getGroup(CSwordModuleInfo *module,
- QModelIndex parentIndex) {
- BookshelfModel::Item *parentItem(getItem(parentIndex));
- int groupIndex;
- T *groupItem(parentItem->getGroupItem<T>(module, groupIndex));
-
- if (groupItem == 0) {
- groupItem = new T(module);
- groupIndex = parentItem->indexFor(groupItem);
- beginInsertRows(parentIndex, groupIndex, groupIndex);
- parentItem->insertChild(groupIndex, groupItem);
- endInsertRows();
+ Q_OBJECT
+ Q_ENUMS(Group)
+
+private: /* Types: */
+
+ typedef QMap<CSwordModuleInfo *, BookshelfModel::ModuleItem *> ModuleItemMap;
+ typedef QMap<CSwordModuleInfo *, QPersistentModelIndex> SourceIndexMap;
+
+public: /* Types: */
+
+ enum ModuleRole {
+ CheckStateRole = BtBookshelfModel::UserRole,
+ UserRole = BtBookshelfModel::UserRole + 100
+ };
+
+ enum Group {
+ GROUP_CATEGORY = 0,
+ GROUP_LANGUAGE = 1,
+ GROUP_INDEXING
+ };
+
+ enum CheckedBehavior {
+ CHECKED, /**< Check all added modules by default. */
+ UNCHECKED, /**< Uncheck all added modules by default. */
+ MODULE_HIDDEN, /**< By default, check only added modules that are not hidden. */
+ MODULE_INDEXED /**< By default, check only added modules that are indexed. */
+ };
+
+ class Grouping: public QList<Group> {
+
+ public: /* Methods: */
+
+ /**
+ \warning Be careful using this constructor!
+ */
+ explicit inline Grouping(bool empty = false) {
+ if (empty)
+ return;
+ push_back(GROUP_CATEGORY);
+ push_back(GROUP_LANGUAGE);
+ }
+
+ explicit inline Grouping(Group group) { push_back(group); }
+
+ explicit inline Grouping(const QString & configKey) {
+ if (loadFrom(configKey))
+ return;
+ push_back(GROUP_CATEGORY);
+ push_back(GROUP_LANGUAGE);
}
- return index(groupIndex, 0, parentIndex);
+
+ inline Grouping(const Grouping & copy)
+ : QList<Group>(copy) {}
+
+ bool loadFrom(const QString & configKey);
+ void saveTo(const QString & configKey) const;
+
+ };
+
+public: /* Methods: */
+
+ BtBookshelfTreeModel(QObject * parent = 0);
+ BtBookshelfTreeModel(const QString & configKey, QObject * parent = 0);
+ BtBookshelfTreeModel(const Grouping & grouping, QObject * parent = 0);
+ virtual ~BtBookshelfTreeModel();
+
+ virtual int rowCount(const QModelIndex & parent = QModelIndex()) const;
+ virtual int columnCount(const QModelIndex & parent = QModelIndex())
+ const;
+ virtual bool hasChildren(const QModelIndex & parent = QModelIndex())
+ const;
+ virtual QModelIndex index(int row,
+ int column,
+ const QModelIndex & parent = QModelIndex())
+ const;
+ virtual QModelIndex parent(const QModelIndex & index) const;
+ virtual QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
+ QVariant data(CSwordModuleInfo & module, int role = Qt::DisplayRole) const;
+ virtual Qt::ItemFlags flags(const QModelIndex & index) const;
+ virtual QVariant headerData(int section, Qt::Orientation orientation,
+ int role = Qt::DisplayRole) const;
+ virtual bool setData(const QModelIndex & index,
+ const QVariant & value,
+ int role);
+
+ inline QAbstractItemModel * sourceModel() const { return m_sourceModel; }
+ inline const Grouping & groupingOrder() const { return m_groupingOrder; }
+ inline bool checkable() const { return m_checkable; }
+ inline CheckedBehavior defaultChecked() const { return m_defaultChecked; }
+ inline QList<CSwordModuleInfo *> modules() const { return m_modules.keys(); }
+ inline const QSet<CSwordModuleInfo *> & checkedModules() const {
+ return m_checkedModulesCache;
+ }
+
+public slots:
+
+ void setSourceModel(QAbstractItemModel * sourceModel);
+ void setGroupingOrder(const BtBookshelfTreeModel::Grouping & groupingOrder,
+ bool emitSignal = true);
+ void setCheckable(bool checkable);
+ inline void setDefaultChecked(CheckedBehavior b) {
+ m_defaultChecked = b;
+ }
+ void setCheckedModules(const QSet<CSwordModuleInfo *> & modules);
+
+signals:
+
+ void groupingOrderChanged(BtBookshelfTreeModel::Grouping newGrouping);
+ void moduleChecked(CSwordModuleInfo * module, bool checked);
+
+protected: /* Methods: */
+
+ void resetData();
+
+protected slots:
+
+ void moduleDataChanged(const QModelIndex & topLeft,
+ const QModelIndex & bottomRight);
+ void moduleInserted(const QModelIndex & parent, int start, int end);
+ void moduleRemoved(const QModelIndex & parent, int start, int end);
+
+private: /* Methods: */
+
+ void addModule(CSwordModuleInfo & module, bool checked);
+ void addModule(CSwordModuleInfo & module,
+ QModelIndex parentIndex,
+ Grouping & intermediateGrouping,
+ bool checked);
+ void removeModule(CSwordModuleInfo & module);
+
+ BookshelfModel::Item & getItem(const QModelIndex & index) const;
+ QModelIndex getIndex(const BookshelfModel::Item & item);
+ void resetParentCheckStates(QModelIndex parentIndex);
+
+ template <class T>
+ QModelIndex getGroup(CSwordModuleInfo & module,
+ QModelIndex parentIndex)
+ {
+ BookshelfModel::Item & parentItem = getItem(parentIndex);
+ int groupIndex;
+ T * groupItem = parentItem.getGroupItem<T>(module, groupIndex);
+
+ if (!groupItem) {
+ groupItem = new T(module);
+ groupIndex = parentItem.indexFor(groupItem);
+ beginInsertRows(parentIndex, groupIndex, groupIndex);
+ parentItem.insertChild(groupIndex, groupItem);
+ endInsertRows();
}
+ return index(groupIndex, 0, parentIndex);
+ }
+
+private: /* Fields: */
+
+ QAbstractItemModel * m_sourceModel;
+ BookshelfModel::Item * m_rootItem;
+ ModuleItemMap m_modules;
+ SourceIndexMap m_sourceIndexMap;
+ Grouping m_groupingOrder;
+ CheckedBehavior m_defaultChecked;
+ bool m_checkable;
+
+ QSet<CSwordModuleInfo *> m_checkedModulesCache;
- protected slots:
- void moduleDataChanged(const QModelIndex &topLeft,
- const QModelIndex &bottomRight);
- void moduleInserted(const QModelIndex &parent, int start, int end);
- void moduleRemoved(const QModelIndex &parent, int start, int end);
-
- protected:
- QAbstractItemModel *m_sourceModel;
- BookshelfModel::Item *m_rootItem;
- ModuleItemMap m_modules;
- SourceIndexMap m_sourceIndexMap;
- Grouping m_groupingOrder;
- CheckedBehavior m_defaultChecked;
- bool m_checkable;
-
- QSet<CSwordModuleInfo*> m_checkedModulesCache;
};
-QDataStream &operator<<(QDataStream &os, const BtBookshelfTreeModel::Grouping &o);
-QDataStream &operator>>(QDataStream &is, BtBookshelfTreeModel::Grouping &o);
+QDataStream & operator <<(QDataStream & os, const BtBookshelfTreeModel::Grouping & o);
+QDataStream & operator >>(QDataStream & is, BtBookshelfTreeModel::Grouping & o);
-Q_DECLARE_METATYPE(BtBookshelfTreeModel::Grouping);
+Q_DECLARE_METATYPE(BtBookshelfTreeModel::Grouping)
#endif // BTBOOKSHELFTREEMODEL_H