/***************************************************************************
- * Copyright (C) 2005-08 by the Quassel Project *
+ * Copyright (C) 2005-09 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
Q_OBJECT
public:
+ enum TreeItemFlag {
+ NoTreeItemFlag = 0x00,
+ DeleteOnLastChildRemoved = 0x01
+ };
+ Q_DECLARE_FLAGS(TreeItemFlags, TreeItemFlag)
+
AbstractTreeItem(AbstractTreeItem *parent = 0);
- virtual ~AbstractTreeItem();
bool newChild(AbstractTreeItem *child);
bool newChilds(const QList<AbstractTreeItem *> &items);
virtual inline Qt::ItemFlags flags() const { return _flags; }
virtual inline void setFlags(Qt::ItemFlags flags) { _flags = flags; }
+ 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<AbstractTreeItem *>(QObject::parent()); }
void beginRemoveChilds(int firstRow, int lastRow);
void endRemoveChilds();
-
+
+protected:
+ void customEvent(QEvent *event);
+
private:
QList<AbstractTreeItem *> _childItems;
Qt::ItemFlags _flags;
+ TreeItemFlags _treeItemFlags;
+
+ void removeChildLater(AbstractTreeItem *child);
+ inline void checkForDeletion() { if(treeItemFlags() & DeleteOnLastChildRemoved && childCount() == 0) parent()->removeChildLater(this); }
};