futher internal prettifications of the buffer switching process
authorMarcus Eggenberger <egs@quassel-irc.org>
Thu, 6 Mar 2008 17:41:08 +0000 (17:41 +0000)
committerMarcus Eggenberger <egs@quassel-irc.org>
Thu, 6 Mar 2008 17:41:08 +0000 (17:41 +0000)
src/client/networkmodel.cpp
src/client/networkmodel.h
src/qtui/bufferwidget.cpp
src/qtui/mainwin.cpp
src/qtui/nicklistwidget.cpp
src/qtui/nicklistwidget.h
version.inc

index 0582d44..7b0ea94 100644 (file)
@@ -55,21 +55,13 @@ BufferItem::BufferItem(BufferInfo bufferInfo, AbstractTreeItem *parent)
   setFlags(flags);
 }
 
   setFlags(flags);
 }
 
-const BufferInfo &BufferItem::bufferInfo() const {
-  return _bufferInfo;
-}
-
 quint64 BufferItem::id() const {
   return qHash(bufferInfo().bufferId());
 }
 
 quint64 BufferItem::id() const {
   return qHash(bufferInfo().bufferId());
 }
 
-bool BufferItem::isStatusBuffer() const {
-  return bufferType() == BufferInfo::StatusBuffer;
-}
-
-BufferInfo::Type BufferItem::bufferType() const {
-  return bufferInfo().type();
-}
+// bool BufferItem::isStatusBuffer() const {
+//   return bufferType() == BufferInfo::StatusBuffer;
+// }
 
 bool BufferItem::isActive() const {
   if(bufferType() == BufferInfo::ChannelBuffer)
 
 bool BufferItem::isActive() const {
   if(bufferType() == BufferInfo::ChannelBuffer)
@@ -423,8 +415,6 @@ void NetworkItem::attachNetwork(Network *network) {
          this, SLOT(attachIrcChannel(QString)));
   connect(network, SIGNAL(connectedSet(bool)),
          this, SIGNAL(dataChanged()));
          this, SLOT(attachIrcChannel(QString)));
   connect(network, SIGNAL(connectedSet(bool)),
          this, SIGNAL(dataChanged()));
-  
-  // FIXME: connect this and that...
 
   emit dataChanged();
 }
 
   emit dataChanged();
 }
index d9598c9..861d07c 100644 (file)
@@ -52,7 +52,7 @@ class BufferItem : public PropertyMapItem {
 public:
   BufferItem(BufferInfo bufferInfo, AbstractTreeItem *parent = 0);
 
 public:
   BufferItem(BufferInfo bufferInfo, AbstractTreeItem *parent = 0);
 
-  const BufferInfo &bufferInfo() const;
+  inline const BufferInfo &bufferInfo() const { return _bufferInfo; }
   virtual quint64 id() const;
   virtual QVariant data(int column, int role) const;
   virtual bool setData(int column, const QVariant &value, int role);
   virtual quint64 id() const;
   virtual QVariant data(int column, int role) const;
   virtual bool setData(int column, const QVariant &value, int role);
@@ -60,12 +60,14 @@ public:
   void attachIrcChannel(IrcChannel *ircChannel);
 
   QString bufferName() const;
   void attachIrcChannel(IrcChannel *ircChannel);
 
   QString bufferName() const;
+  inline BufferId bufferId() const { return _bufferInfo.bufferId(); }
+  inline BufferInfo::Type bufferType() const { return _bufferInfo.type(); }
+
   void setBufferName(const QString &name);
   QString topic() const;
   int nickCount() const;
 
   void setBufferName(const QString &name);
   QString topic() const;
   int nickCount() const;
 
-  bool isStatusBuffer() const;
-  BufferInfo::Type bufferType() const;
+  // bool isStatusBuffer() const;
 
   bool isActive() const;
 
 
   bool isActive() const;
 
@@ -115,11 +117,11 @@ public:
   NetworkItem(const NetworkId &netid, AbstractTreeItem *parent = 0);
 
   virtual quint64 id() const;
   NetworkItem(const NetworkId &netid, AbstractTreeItem *parent = 0);
 
   virtual quint64 id() const;
-  inline const NetworkId &networkId() const { return _networkId; }
   virtual QVariant data(int column, int row) const;
 
   bool isActive() const;
 
   virtual QVariant data(int column, int row) const;
 
   bool isActive() const;
 
+  inline const NetworkId &networkId() const { return _networkId; }
   QString networkName() const;
   QString currentServer() const;
   int nickCount() const;
   QString networkName() const;
   QString currentServer() const;
   int nickCount() const;
index e408e71..0ebcffb 100644 (file)
@@ -109,16 +109,18 @@ void BufferWidget::removeBuffer(BufferId bufferId) {
 }
 
 void BufferWidget::currentChanged(const QModelIndex &current, const QModelIndex &previous) {
 }
 
 void BufferWidget::currentChanged(const QModelIndex &current, const QModelIndex &previous) {
-  Q_UNUSED(previous);
-  QVariant variant;
-
-  variant = current.data(NetworkModel::BufferIdRole);
-  if(!variant.isValid())
-    return;
-  setCurrentBuffer(variant.value<BufferId>());
+  BufferId newBufferId = current.data(NetworkModel::BufferIdRole).value<BufferId>();
+  BufferId oldBufferId = previous.data(NetworkModel::BufferIdRole).value<BufferId>();
+  if(newBufferId != oldBufferId)
+    setCurrentBuffer(newBufferId);
 }
 
 void BufferWidget::setCurrentBuffer(BufferId bufferId) {
 }
 
 void BufferWidget::setCurrentBuffer(BufferId bufferId) {
+  if(!bufferId.isValid()) {
+    ui.stackedWidget->setCurrentWidget(ui.page);
+    return;
+  }
+  
   ChatWidget *chatWidget = 0;
   Buffer *buf = Client::buffer(bufferId);
   if(!buf) {
   ChatWidget *chatWidget = 0;
   Buffer *buf = Client::buffer(bufferId);
   if(!buf) {
index 1f168b6..aaa59f4 100644 (file)
@@ -343,7 +343,7 @@ void MainWin::disconnectedFromCore() {
   //ui.actionNetworkList->setEnabled(false);
   ui.bufferWidget->hide();
   ui.actionConnectCore->setEnabled(true);
   //ui.actionNetworkList->setEnabled(false);
   ui.bufferWidget->hide();
   ui.actionConnectCore->setEnabled(true);
-  nickListWidget->reset();
+  // nickListWidget->reset();
   statusBar()->showMessage(tr("Not connected to core."));
 }
 
   statusBar()->showMessage(tr("Not connected to core."));
 }
 
index cb94161..4cfd5b6 100644 (file)
@@ -24,6 +24,7 @@
 #include "nickview.h"
 #include "client.h"
 #include "networkmodel.h"
 #include "nickview.h"
 #include "client.h"
 #include "networkmodel.h"
+#include "buffermodel.h"
 #include "nickviewfilter.h"
 
 NickListWidget::NickListWidget(QWidget *parent)
 #include "nickviewfilter.h"
 
 NickListWidget::NickListWidget(QWidget *parent)
@@ -60,61 +61,53 @@ void NickListWidget::setSelectionModel(QItemSelectionModel *selectionModel) {
   }
 }
 
   }
 }
 
-
-void NickListWidget::reset() {
-  NickView *nickView;
-  QHash<BufferId, NickView *>::iterator iter = nickViews.begin();
-  while(iter != nickViews.end()) {
-    nickView = *iter;
-    iter = nickViews.erase(iter);
-    ui.stackedWidget->removeWidget(nickView);
-    nickView->deleteLater();
-  }
-}
-
-
 void NickListWidget::currentChanged(const QModelIndex &current, const QModelIndex &previous) {
 void NickListWidget::currentChanged(const QModelIndex &current, const QModelIndex &previous) {
-  Q_UNUSED(previous);
-  QVariant variant;
-
-  variant = current.data(NetworkModel::BufferIdRole);
-  if(!variant.isValid())
-    return;
-  setCurrentBuffer(variant.value<BufferId>());
-}
+  BufferInfo::Type bufferType = (BufferInfo::Type)current.data(NetworkModel::BufferTypeRole).toInt();
+  BufferId newBufferId = current.data(NetworkModel::BufferIdRole).value<BufferId>();
+  BufferId oldBufferId = previous.data(NetworkModel::BufferIdRole).value<BufferId>();
 
 
-
-void NickListWidget::setCurrentBuffer(BufferId bufferId) {
-  QModelIndex bufferIdx = Client::networkModel()->bufferIndex(bufferId);
-  
-  if(bufferIdx.data(NetworkModel::BufferTypeRole) != BufferInfo::ChannelBuffer) {
+  if(bufferType != BufferInfo::ChannelBuffer) {
     ui.stackedWidget->setCurrentWidget(ui.emptyPage);
     return;
   }
 
     ui.stackedWidget->setCurrentWidget(ui.emptyPage);
     return;
   }
 
-  if(nickViews.contains(bufferId)) {
-    ui.stackedWidget->setCurrentWidget(nickViews.value(bufferId));
+  if(newBufferId == oldBufferId)
+    return;
+
+  if(nickViews.contains(newBufferId)) {
+    ui.stackedWidget->setCurrentWidget(nickViews.value(newBufferId));
   } else {
     NickView *view = new NickView(this);
   } else {
     NickView *view = new NickView(this);
-    NickViewFilter *filter = new NickViewFilter(bufferId, Client::networkModel());
-    filter->setObjectName("Buffer " + QString::number(bufferId.toInt()));
+    NickViewFilter *filter = new NickViewFilter(newBufferId, Client::networkModel());
     view->setModel(filter);
     view->setModel(filter);
-    view->setRootIndex(filter->mapFromSource(bufferIdx));
+    QModelIndex source_current = Client::bufferModel()->mapToSource(current);
+    view->setRootIndex(filter->mapFromSource(source_current));
     view->expandAll();
     view->expandAll();
-    nickViews[bufferId] = view;
+    nickViews[newBufferId] = view;
     ui.stackedWidget->addWidget(view);
     ui.stackedWidget->setCurrentWidget(view);
   }
 }
 
     ui.stackedWidget->addWidget(view);
     ui.stackedWidget->setCurrentWidget(view);
   }
 }
 
-
 void NickListWidget::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) {
   Q_ASSERT(model());
   if(!parent.isValid()) {
     // ok this means that whole networks are about to be removed
     // we can't determine which buffers are affect, so we hope that all nets are removed
     // this is the most common case (for example disconnecting from the core or terminating the clint)
 void NickListWidget::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) {
   Q_ASSERT(model());
   if(!parent.isValid()) {
     // ok this means that whole networks are about to be removed
     // we can't determine which buffers are affect, so we hope that all nets are removed
     // this is the most common case (for example disconnecting from the core or terminating the clint)
-    reset();
+    NickView *nickView;
+    QHash<BufferId, NickView *>::iterator iter = nickViews.begin();
+    while(iter != nickViews.end()) {
+      nickView = *iter;
+      iter = nickViews.erase(iter);
+      ui.stackedWidget->removeWidget(nickView);
+      QAbstractItemModel *model = nickView->model();
+      nickView->setModel(0);
+      if(QSortFilterProxyModel *filter = qobject_cast<QSortFilterProxyModel *>(model))
+       filter->setSourceModel(0);
+      model->deleteLater();
+      nickView->deleteLater();
+    }
   } else {
     // check if there are explicitly buffers removed
     for(int i = start; i <= end; i++) {
   } else {
     // check if there are explicitly buffers removed
     for(int i = start; i <= end; i++) {
@@ -131,9 +124,14 @@ void NickListWidget::rowsAboutToBeRemoved(const QModelIndex &parent, int start,
 void NickListWidget::removeBuffer(BufferId bufferId) {
   if(!nickViews.contains(bufferId))
     return;
 void NickListWidget::removeBuffer(BufferId bufferId) {
   if(!nickViews.contains(bufferId))
     return;
-  
+
   NickView *view = nickViews.take(bufferId);
   ui.stackedWidget->removeWidget(view);
   NickView *view = nickViews.take(bufferId);
   ui.stackedWidget->removeWidget(view);
+  QAbstractItemModel *model = view->model();
+  view->setModel(0);
+  if(QSortFilterProxyModel *filter = qobject_cast<QSortFilterProxyModel *>(model))
+    filter->setSourceModel(0);
+  model->deleteLater();
   view->deleteLater();
 }
 
   view->deleteLater();
 }
 
index 3db7e08..1fca5e0 100644 (file)
@@ -46,9 +46,6 @@ public:
   inline QItemSelectionModel *selectionModel() const { return _selectionModel; }
   void setSelectionModel(QItemSelectionModel *selectionModel);
 
   inline QItemSelectionModel *selectionModel() const { return _selectionModel; }
   void setSelectionModel(QItemSelectionModel *selectionModel);
 
-public slots:
-  void reset();
-
 protected:
   virtual QSize sizeHint() const;
 
 protected:
   virtual QSize sizeHint() const;
 
@@ -64,7 +61,6 @@ protected slots:
 
 private slots:
   void removeBuffer(BufferId bufferId);
 
 private slots:
   void removeBuffer(BufferId bufferId);
-  void setCurrentBuffer(BufferId bufferId);
   
 private:
   Ui::NickListWidget ui;
   
 private:
   Ui::NickListWidget ui;
index ab351ae..6dcc0af 100644 (file)
@@ -5,7 +5,7 @@
 
   quasselVersion = "0.2.0-alpha3-pre";
   quasselDate = "2008-03-06";
 
   quasselVersion = "0.2.0-alpha3-pre";
   quasselDate = "2008-03-06";
-  quasselBuild = 616;
+  quasselBuild = 617;
 
   //! Minimum client build number the core needs
   clientBuildNeeded = 613;
 
   //! Minimum client build number the core needs
   clientBuildNeeded = 613;