properly rewind oidentd config file
[quassel.git] / src / client / treemodel.cpp
index 36cb8d6..b3f2613 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   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  *
@@ -127,6 +127,10 @@ void AbstractTreeItem::customEvent(QEvent *event) {
   if(childRow == -1)
     return;
 
+  // since we are called asynchronously we have to recheck if the item in question still has no childs
+  if(removeEvent->child()->childCount())
+    return;
+
   removeChild(childRow);
 }
 
@@ -301,15 +305,15 @@ TreeModel::TreeModel(const QList<QVariant> &data, QObject *parent)
 
   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 &)));
   }
 }
 
@@ -318,7 +322,7 @@ TreeModel::~TreeModel() {
 }
 
 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;
@@ -350,7 +354,8 @@ QModelIndex TreeModel::indexByItem(AbstractTreeItem *item) const {
 
 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();
   }
 
@@ -442,23 +447,23 @@ void TreeModel::itemDataChanged(int column) {
 
 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) {
   AbstractTreeItem *parentItem = qobject_cast<AbstractTreeItem *>(sender());
   if(!parentItem) {
-    qWarning() << "TreeModel::beginAppendChilds(): cannot append Childs to unknown parent";
+    qWarning() << "TreeModel::beginAppendChilds(): cannot append Children to unknown parent";
     return;
   }
 
@@ -473,7 +478,7 @@ void TreeModel::beginAppendChilds(int firstRow, int lastRow) {
 void TreeModel::endAppendChilds() {
   AbstractTreeItem *parentItem = qobject_cast<AbstractTreeItem *>(sender());
   if(!parentItem) {
-    qWarning() << "TreeModel::endAppendChilds(): cannot append Childs to unknown parent";
+    qWarning() << "TreeModel::endAppendChilds(): cannot append Children to unknown parent";
     return;
   }
   Q_ASSERT(_aboutToRemoveOrInsert);
@@ -492,7 +497,7 @@ void TreeModel::endAppendChilds() {
 void TreeModel::beginRemoveChilds(int firstRow, int lastRow) {
   AbstractTreeItem *parentItem = qobject_cast<AbstractTreeItem *>(sender());
   if(!parentItem) {
-    qWarning() << "TreeModel::beginRemoveChilds(): cannot append Childs to unknown parent";
+    qWarning() << "TreeModel::beginRemoveChilds(): cannot append Children to unknown parent";
     return;
   }
 
@@ -514,7 +519,7 @@ void TreeModel::beginRemoveChilds(int firstRow, int lastRow) {
 void TreeModel::endRemoveChilds() {
   AbstractTreeItem *parentItem = qobject_cast<AbstractTreeItem *>(sender());
   if(!parentItem) {
-    qWarning() << "TreeModel::endRemoveChilds(): cannot remove Childs from unknown parent";
+    qWarning() << "TreeModel::endRemoveChilds(): cannot remove Children from unknown parent";
     return;
   }
 
@@ -545,11 +550,9 @@ void TreeModel::debug_rowsAboutToBeRemoved(const QModelIndex &parent, int start,
   qDebug() << "debug_rowsAboutToBeRemoved" << parent << parentItem << parent.data().toString() << rowCount(parent) << start << end;
 
   QModelIndex child;
-  AbstractTreeItem *childItem;
   for(int i = end; i >= start; i--) {
     child = parent.child(i, 0);
-    childItem = parentItem->child(i);
-    Q_ASSERT(childItem);
+    Q_ASSERT(parentItem->child(i));
     qDebug() << ">>>" << i << child << child.data().toString();
   }
 }
@@ -562,11 +565,9 @@ void TreeModel::debug_rowsInserted(const QModelIndex &parent, int start, int end
   qDebug() << "debug_rowsInserted:" << parent << parentItem << parent.data().toString() << rowCount(parent) << start << end;
 
   QModelIndex child;
-  AbstractTreeItem *childItem;
   for(int i = start; i <= end; i++) {
     child = parent.child(i, 0);
-    childItem = parentItem->child(i);
-    Q_ASSERT(childItem);
+    Q_ASSERT(parentItem->child(i));
     qDebug() << "<<<" << i << child << child.data().toString();
   }
 }