bugfixinating
authorMarcus Eggenberger <egs@quassel-irc.org>
Sun, 20 Jan 2008 15:37:18 +0000 (15:37 +0000)
committerMarcus Eggenberger <egs@quassel-irc.org>
Sun, 20 Jan 2008 15:37:18 +0000 (15:37 +0000)
src/client/networkmodel.cpp
src/client/networkmodel.h
src/client/treemodel.cpp
src/client/treemodel.h
src/common/signalproxy.cpp
version.inc

index 48a6b8c..227382b 100644 (file)
@@ -171,19 +171,21 @@ void BufferItem::join(IrcUser *ircUser) {
 
 void BufferItem::addUserToCategory(IrcUser *ircUser) {
   Q_ASSERT(_ircChannel);
-  
+
   UserCategoryItem *categoryItem;
   int categoryId = UserCategoryItem::categoryFromModes(_ircChannel->userModes(ircUser));
   if(!(categoryItem = qobject_cast<UserCategoryItem *>(childById(qHash(categoryId))))) {
     categoryItem = new UserCategoryItem(categoryId, this);
     emit newChild(categoryItem);
   }
-  
   categoryItem->addUser(ircUser);
 }
 
 void BufferItem::part(IrcUser *ircUser) {
-  Q_UNUSED(ircUser);
+  if(!ircUser)
+    return;
+
+  removeUserFromCategory(ircUser);
   emit dataChanged(2);
 }
 
@@ -192,10 +194,9 @@ void BufferItem::removeUserFromCategory(IrcUser *ircUser) {
   IrcUserItem *userItem;
   for(int i = 0; i < childCount(); i++) {
     categoryItem = qobject_cast<UserCategoryItem *>(child(i));
-    if((userItem = qobject_cast<IrcUserItem *>(categoryItem->childById((quint64)ircUser)))) {
-      userItem->deleteLater();
-      return;
-    }
+    categoryItem->removeChildById((quint64)ircUser);
+    if(categoryItem->childCount() == 0)
+      removeChild(i);
   }
 }
 
@@ -323,8 +324,6 @@ UserCategoryItem::UserCategoryItem(int category, AbstractTreeItem *parent)
   : PropertyMapItem(QStringList() << "categoryId", parent),
     _category(category)
 {
-  connect(this, SIGNAL(childRemoved(int)),
-         this, SLOT(checkNoChilds()));
 }
 
 QString UserCategoryItem::categoryId() {
@@ -334,11 +333,6 @@ QString UserCategoryItem::categoryId() {
     return QString("Users");
 }
 
-void UserCategoryItem::checkNoChilds() {
-  if(childCount() == 0)
-    deleteLater();
-}
-
 quint64 UserCategoryItem::id() const {
   return qHash(_category);
 }
@@ -386,7 +380,8 @@ void IrcUserItem::setNick(QString newNick) {
   emit dataChanged(0);
 }
 void IrcUserItem::ircUserDestroyed() {
-  deleteLater();
+  parent()->removeChildById(id());
+  // deleteLater();
 }
 
 /*****************************************
index b1cc15f..543e5e7 100644 (file)
@@ -155,9 +155,6 @@ public:
 
   static int categoryFromModes(const QString &modes);
 
-private slots:
-  void checkNoChilds();
-
 private:
   int _category;
 
index 05b2635..929622d 100644 (file)
@@ -86,6 +86,20 @@ void AbstractTreeItem::removeChild(int row) {
   removeChild(defaultColumn(), row);
 }
 
+void AbstractTreeItem::removeChildById(int column, const quint64 &id) {
+  if(!_childHash[column].contains(id))
+    return;
+  
+  AbstractTreeItem *treeItem = _childHash[column][id];
+  int row = _childItems[column].indexOf(treeItem);
+  Q_ASSERT(row >= 0);
+  removeChild(column, row);
+}
+
+void AbstractTreeItem::removeChildById(const quint64 &id) {
+  removeChildById(defaultColumn(), id);
+}
+
 void AbstractTreeItem::removeAllChilds() {
   if(childCount() == 0)
     return;
@@ -93,11 +107,12 @@ void AbstractTreeItem::removeAllChilds() {
   emit beginRemoveChilds(0, childCount() - 1);
 
   AbstractTreeItem *child;
-  foreach(int key, _childItems.keys()) {
-    QList<AbstractTreeItem *>::iterator iter = _childItems[key].begin();
-    while(iter != _childItems[key].end()) {
+  foreach(int column, _childItems.keys()) {
+    QList<AbstractTreeItem *>::iterator iter = _childItems[column].begin();
+    while(iter != _childItems[column].end()) {
       child = *iter;
-      iter = _childItems[key].erase(iter);
+      _childHash[column].remove(_childHash[column].key(child));
+      iter = _childItems[column].erase(iter);
       disconnect(child, 0, this, 0);
       child->removeAllChilds();
       child->deleteLater();
@@ -430,9 +445,6 @@ void TreeModel::appendChild(AbstractTreeItem *parent, AbstractTreeItem *child) {
   connect(child, SIGNAL(newChild(AbstractTreeItem *)),
          this, SLOT(newChild(AbstractTreeItem *)));
 
-//   connect(child, SIGNAL(childRemoved(int)),
-//       this, SLOT(childRemoved(int)));
-
   connect(child, SIGNAL(beginRemoveChilds(int, int)),
          this, SLOT(beginRemoveChilds(int, int)));
   
@@ -453,19 +465,6 @@ void TreeModel::endRemoveChilds() {
   endRemoveRows();
 }
 
-void TreeModel::childRemoved(int row) {
-  QModelIndex parent = indexByItem(static_cast<AbstractTreeItem *>(sender()));
-  beginRemoveRows(parent, row, row);
-  endRemoveRows();
-}
-
-void TreeModel::childsRemoved(int firstRow, int lastRow) {
-  QModelIndex parent = indexByItem(static_cast<AbstractTreeItem *>(sender()));
-  beginRemoveRows(parent, firstRow, lastRow);
-  endRemoveRows();
-  
-}
-
 bool TreeModel::removeRow(int row, const QModelIndex &parent) {
   if(row > rowCount(parent))
     return false;
index a8c8a99..6439233 100644 (file)
@@ -43,6 +43,10 @@ public:
   
   void removeChild(int column, int row);
   void removeChild(int row);
+
+  void removeChildById(int column, const quint64 &id);
+  void removeChildById(const quint64 &id);
+  
   void removeAllChilds();
 
   virtual quint64 id() const;
@@ -70,8 +74,6 @@ public:
 signals:
   void dataChanged(int column = -1);
   void newChild(AbstractTreeItem *);
-  void childRemoved(int row);
-  void childsRemoved(int firstRow, int lastRow);
 
   void beginRemoveChilds(int firstRow, int lastRow);
   void endRemoveChilds();
@@ -158,9 +160,6 @@ private slots:
   void beginRemoveChilds(int firstRow, int lastRow);
   void endRemoveChilds();
   
-  void childRemoved(int row);
-  void childsRemoved(int firstRow, int lastRow);
-
 protected:
   void appendChild(AbstractTreeItem *parent, AbstractTreeItem *child);
 
index 2c443bb..1127005 100644 (file)
@@ -644,7 +644,7 @@ void SignalProxy::handleInitRequest(QIODevice *sender, const QVariantList &param
 void SignalProxy::handleInitData(QIODevice *sender, const QVariantList &params) {
   Q_UNUSED(sender)
   if(params.count() != 3) {
-    qWarning() << "SignalProxy::handleInitRequest() received initRequest with invalid param Count:"
+    qWarning() << "SignalProxy::handleInitData() received initData with invalid param Count:"
               << params;
     return;
   }
@@ -654,13 +654,13 @@ void SignalProxy::handleInitData(QIODevice *sender, const QVariantList &params)
   QVariantMap propertyMap(params[2].toMap());
 
   if(!_syncSlave.contains(className)) {
-    qWarning() << "SignalProxy::handleInitRequest() received initRequest for unregistered Class:"
+    qWarning() << "SignalProxy::handleInitData() received initData for unregistered Class:"
               << className;
     return;
   }
 
   if(!_syncSlave[className].contains(objectName)) {
-    qWarning() << "SignalProxy::handleInitRequest() received initRequest for unregistered Object:"
+    qWarning() << "SignalProxy::handleInitData() received initData for unregistered Object:"
               << className << objectName;
     return;
   }
index f5426b0..c5b41cb 100644 (file)
@@ -5,7 +5,7 @@
 
   quasselVersion = "0.2.0-pre";
   quasselDate = "2008-01-20";
-  quasselBuild = 362;
+  quasselBuild = 363;
 
   //! Minimum client build number the core needs
   clientBuildNeeded = 358;