/***************************************************************************
- * 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 *
***************************************************************************/
#include "treemodel.h"
-#include "global.h"
-#include <QDebug>
#include <QCoreApplication>
+#include <QDebug>
+
+#include "quassel.h"
class RemoveChildLaterEvent : public QEvent {
public:
bool AbstractTreeItem::newChilds(const QList<AbstractTreeItem *> &items) {
if(items.isEmpty())
return false;
-
+
int nextRow = childCount();
int lastRow = nextRow + items.count() - 1;
emit endRemoveChilds();
checkForDeletion();
-
+
return true;
}
void AbstractTreeItem::removeAllChilds() {
const int numChilds = childCount();
-
+
if(numChilds == 0)
return;
-
+
AbstractTreeItem *child;
QList<AbstractTreeItem *>::iterator childIter;
int oldRow = row();
if(oldRow == -1)
return false;
-
+
emit parent()->beginRemoveChilds(oldRow, oldRow);
parent()->_childItems.removeAt(oldRow);
emit parent()->endRemoveChilds();
qWarning() << "AbstractTreeItem::row():" << this << "has no parent AbstractTreeItem as it's parent! parent is" << QObject::parent();
return -1;
}
-
+
int row_ = parent()->_childItems.indexOf(const_cast<AbstractTreeItem *>(this));
if(row_ == -1)
qWarning() << "AbstractTreeItem::row():" << this << "is not in the child list of" << QObject::parent();
childIter++;
}
}
- qDebug() << "==== End Of Childlist ====";
+ qDebug() << "==== End Of Childlist ====";
}
/*****************************************
PropertyMapItem::~PropertyMapItem() {
}
-
+
QVariant PropertyMapItem::data(int column, int role) const {
if(column >= columnCount())
return QVariant();
default:
return QVariant();
}
-
+
}
bool PropertyMapItem::setData(int column, const QVariant &value, int role) {
int PropertyMapItem::columnCount() const {
return _propertyOrder.count();
}
-
+
void PropertyMapItem::appendProperty(const QString &property) {
_propertyOrder << property;
}
rootItem = new SimpleTreeItem(data, 0);
connectItem(rootItem);
- if(Global::parser.isSet("debugmodel")) {
+ if(Quassel::isOptionSet("debugmodel")) {
connect(this, SIGNAL(rowsAboutToBeInserted(const QModelIndex &, int, int)),
- this, SLOT(debug_rowsAboutToBeInserted(const QModelIndex &, int, int)));
+ this, SLOT(debug_rowsAboutToBeInserted(const QModelIndex &, int, int)));
connect(this, SIGNAL(rowsAboutToBeRemoved(const QModelIndex &, int, int)),
- this, SLOT(debug_rowsAboutToBeRemoved(const QModelIndex &, int, int)));
+ this, SLOT(debug_rowsAboutToBeRemoved(const QModelIndex &, int, int)));
connect(this, SIGNAL(rowsInserted(const QModelIndex &, int, int)),
- this, SLOT(debug_rowsInserted(const QModelIndex &, int, int)));
+ this, SLOT(debug_rowsInserted(const QModelIndex &, int, int)));
connect(this, SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
- this, SLOT(debug_rowsRemoved(const QModelIndex &, int, int)));
+ this, SLOT(debug_rowsRemoved(const QModelIndex &, int, int)));
connect(this, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)),
- this, SLOT(debug_dataChanged(const QModelIndex &, const QModelIndex &)));
+ this, SLOT(debug_dataChanged(const QModelIndex &, const QModelIndex &)));
}
}
}
QModelIndex TreeModel::index(int row, int column, const QModelIndex &parent) const {
- if(!hasIndex(row, column, parent))
+ if(row < 0 || row >= rowCount(parent) || column < 0 || column >= columnCount(parent))
return QModelIndex();
-
+
AbstractTreeItem *parentItem;
-
+
if(!parent.isValid())
parentItem = rootItem;
else
parentItem = static_cast<AbstractTreeItem *>(parent.internalPointer());
-
+
AbstractTreeItem *childItem = parentItem->child(row);
if(childItem)
qWarning() << "TreeModel::indexByItem(AbstractTreeItem *item) received NULL-Pointer";
return QModelIndex();
}
-
+
if(item == rootItem)
return QModelIndex();
else
QModelIndex TreeModel::parent(const QModelIndex &index) const {
if(!index.isValid()) {
- qWarning() << "TreeModel::parent(): has been asked for the rootItems Parent!";
+ // ModelTest does this
+ // qWarning() << "TreeModel::parent(): has been asked for the rootItems Parent!";
return QModelIndex();
}
-
+
AbstractTreeItem *childItem = static_cast<AbstractTreeItem *>(index.internalPointer());
AbstractTreeItem *parentItem = childItem->parent();
Q_ASSERT(parentItem);
if(parentItem == rootItem)
return QModelIndex();
-
+
return createIndex(parentItem->row(), 0, parentItem);
}
void TreeModel::connectItem(AbstractTreeItem *item) {
connect(item, SIGNAL(dataChanged(int)),
- this, SLOT(itemDataChanged(int)));
-
+ this, SLOT(itemDataChanged(int)));
+
connect(item, SIGNAL(beginAppendChilds(int, int)),
- this, SLOT(beginAppendChilds(int, int)));
+ this, SLOT(beginAppendChilds(int, int)));
connect(item, SIGNAL(endAppendChilds()),
- this, SLOT(endAppendChilds()));
-
+ this, SLOT(endAppendChilds()));
+
connect(item, SIGNAL(beginRemoveChilds(int, int)),
- this, SLOT(beginRemoveChilds(int, int)));
+ this, SLOT(beginRemoveChilds(int, int)));
connect(item, SIGNAL(endRemoveChilds()),
- this, SLOT(endRemoveChilds()));
+ this, SLOT(endRemoveChilds()));
}
void TreeModel::beginAppendChilds(int firstRow, int lastRow) {
QModelIndex parent = indexByItem(parentItem);
Q_ASSERT(!_aboutToRemoveOrInsert);
-
+
_aboutToRemoveOrInsert = true;
_childStatus = ChildStatus(parent, rowCount(parent), firstRow, lastRow);
beginInsertRows(parent, firstRow, lastRow);
for(int i = firstRow; i <= lastRow; i++) {
disconnect(parentItem->child(i), 0, this, 0);
}
-
+
// consitency checks
QModelIndex parent = indexByItem(parentItem);
Q_ASSERT(firstRow <= lastRow);