X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Ftreemodel.h;h=3c6ce912d240d98a2d61c3720f644095958ac5bd;hp=574dc6a532ebf663cad4d69f91bf995c6b40fd45;hb=a700bd999215313b075ced5a1e3ba4ea8917fbbc;hpb=76db8cdfbeffaaba359c8e80cf2146da9e9e7f8a diff --git a/src/client/treemodel.h b/src/client/treemodel.h index 574dc6a5..3c6ce912 100644 --- a/src/client/treemodel.h +++ b/src/client/treemodel.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2013 by the Quassel Project * + * Copyright (C) 2005-2020 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -18,49 +18,50 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef TREEMODEL_H -#define TREEMODEL_H +#pragma once +#include "client-export.h" + +#include +#include // needed for debug #include #include #include -#include - -#include // needed for debug /***************************************** * general item used in the Tree Model *****************************************/ -class AbstractTreeItem : public QObject +class CLIENT_EXPORT AbstractTreeItem : public QObject { Q_OBJECT public: - enum TreeItemFlag { + enum TreeItemFlag + { NoTreeItemFlag = 0x00, DeleteOnLastChildRemoved = 0x01 }; Q_DECLARE_FLAGS(TreeItemFlags, TreeItemFlag) - AbstractTreeItem(AbstractTreeItem *parent = 0); + AbstractTreeItem(AbstractTreeItem* parent = nullptr); - bool newChild(AbstractTreeItem *child); - bool newChilds(const QList &items); + bool newChild(AbstractTreeItem* child); + bool newChilds(const QList& items); bool removeChild(int row); - inline bool removeChild(AbstractTreeItem *child) { return removeChild(child->row()); } + inline bool removeChild(AbstractTreeItem* child) { return removeChild(child->row()); } void removeAllChilds(); - bool reParent(AbstractTreeItem *newParent); + bool reParent(AbstractTreeItem* newParent); - AbstractTreeItem *child(int row) const; + AbstractTreeItem* child(int row) const; int childCount(int column = 0) const; virtual int columnCount() const = 0; virtual QVariant data(int column, int role) const = 0; - virtual bool setData(int column, const QVariant &value, int role) = 0; + virtual bool setData(int column, const QVariant& value, int role) = 0; virtual inline Qt::ItemFlags flags() const { return _flags; } virtual inline void setFlags(Qt::ItemFlags flags) { _flags = flags; } @@ -68,7 +69,7 @@ public: inline AbstractTreeItem::TreeItemFlags treeItemFlags() const { return _treeItemFlags; } inline void setTreeItemFlags(AbstractTreeItem::TreeItemFlags flags) { _treeItemFlags = flags; } int row() const; - inline AbstractTreeItem *parent() const { return qobject_cast(QObject::parent()); } + inline AbstractTreeItem* parent() const { return qobject_cast(QObject::parent()); } void dumpChildList(); @@ -82,97 +83,91 @@ signals: void endRemoveChilds(); protected: - void customEvent(QEvent *event); + void customEvent(QEvent* event) override; private: - QList _childItems; - Qt::ItemFlags _flags; - TreeItemFlags _treeItemFlags; + QList _childItems; + Qt::ItemFlags _flags{}; + TreeItemFlags _treeItemFlags{}; - void removeChildLater(AbstractTreeItem *child); + void removeChildLater(AbstractTreeItem* child); inline void checkForDeletion() { - if (treeItemFlags() & DeleteOnLastChildRemoved && childCount() == 0) parent()->removeChildLater(this); + if (treeItemFlags() & DeleteOnLastChildRemoved && childCount() == 0) + parent()->removeChildLater(this); } }; - /***************************************** * SimpleTreeItem *****************************************/ -class SimpleTreeItem : public AbstractTreeItem +class CLIENT_EXPORT SimpleTreeItem : public AbstractTreeItem { Q_OBJECT public: - SimpleTreeItem(const QList &data, AbstractTreeItem *parent = 0); - virtual ~SimpleTreeItem(); + SimpleTreeItem(QList data, AbstractTreeItem* parent = nullptr); - virtual QVariant data(int column, int role) const; - virtual bool setData(int column, const QVariant &value, int role); + QVariant data(int column, int role) const override; + bool setData(int column, const QVariant& value, int role) override; - virtual int columnCount() const; + int columnCount() const override; private: QList _itemData; }; - /***************************************** * PropertyMapItem *****************************************/ -class PropertyMapItem : public AbstractTreeItem +class CLIENT_EXPORT PropertyMapItem : public AbstractTreeItem { Q_OBJECT public: - PropertyMapItem(const QStringList &propertyOrder, AbstractTreeItem *parent = 0); - PropertyMapItem(AbstractTreeItem *parent = 0); + PropertyMapItem(AbstractTreeItem* parent = nullptr); - virtual ~PropertyMapItem(); + virtual QStringList propertyOrder() const = 0; - virtual QVariant data(int column, int role) const; - virtual bool setData(int column, const QVariant &value, int role); + QVariant data(int column, int role) const override; + bool setData(int column, const QVariant& value, int role) override; virtual QString toolTip(int column) const { Q_UNUSED(column) return QString(); } - virtual int columnCount() const; - - void appendProperty(const QString &property); - -private: - QStringList _propertyOrder; + int columnCount() const override; }; - /***************************************** * TreeModel *****************************************/ -class TreeModel : public QAbstractItemModel +class CLIENT_EXPORT TreeModel : public QAbstractItemModel { Q_OBJECT public: - enum myRoles { + enum myRoles + { SortRole = Qt::UserRole, UserRole }; - TreeModel(const QList &, QObject *parent = 0); - virtual ~TreeModel(); + TreeModel(const QList&, QObject* parent = nullptr); + ~TreeModel() override; - virtual QVariant data(const QModelIndex &index, int role) const; - virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); + AbstractTreeItem* root() const; - virtual Qt::ItemFlags flags(const QModelIndex &index) const; - QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; + QVariant data(const QModelIndex& index, int role) const override; + bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override; - QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; - QModelIndex indexByItem(AbstractTreeItem *item) const; + Qt::ItemFlags flags(const QModelIndex& index) const override; + QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; - QModelIndex parent(const QModelIndex &index) const; + QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const override; + QModelIndex indexByItem(AbstractTreeItem* item) const; - int rowCount(const QModelIndex &parent = QModelIndex()) const; - int columnCount(const QModelIndex &parent = QModelIndex()) const; + QModelIndex parent(const QModelIndex& index) const override; + + int rowCount(const QModelIndex& parent = QModelIndex()) const override; + int columnCount(const QModelIndex& parent = QModelIndex()) const override; virtual void clear(); @@ -186,28 +181,30 @@ private slots: void endRemoveChilds(); protected: - AbstractTreeItem *rootItem; + AbstractTreeItem* rootItem; private: - void connectItem(AbstractTreeItem *item); + void connectItem(AbstractTreeItem* item); - struct ChildStatus { + struct ChildStatus + { QModelIndex parent; int childCount; int start; int end; - inline ChildStatus(QModelIndex parent_, int cc_, int s_, int e_) : parent(parent_), childCount(cc_), start(s_), end(e_) {}; + inline ChildStatus(QModelIndex parent_, int cc_, int s_, int e_) + : parent(parent_) + , childCount(cc_) + , start(s_) + , end(e_){}; }; ChildStatus _childStatus; int _aboutToRemoveOrInsert; private slots: - void debug_rowsAboutToBeInserted(const QModelIndex &parent, int start, int end); - void debug_rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end); - void debug_rowsInserted(const QModelIndex &parent, int start, int end); - void debug_rowsRemoved(const QModelIndex &parent, int start, int end); - void debug_dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight); + void debug_rowsAboutToBeInserted(const QModelIndex& parent, int start, int end); + void debug_rowsAboutToBeRemoved(const QModelIndex& parent, int start, int end); + void debug_rowsInserted(const QModelIndex& parent, int start, int end); + void debug_rowsRemoved(const QModelIndex& parent, int start, int end); + void debug_dataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight); }; - - -#endif