internal stuff only: added accessors for bufferName, networkId, networkName and buffe...
authorMarcus Eggenberger <egs@quassel-irc.org>
Mon, 4 Aug 2008 20:20:10 +0000 (22:20 +0200)
committerMarcus Eggenberger <egs@quassel-irc.org>
Mon, 4 Aug 2008 20:20:10 +0000 (22:20 +0200)
src/client/networkmodel.cpp
src/client/networkmodel.h

index d6c18d7..dbfa6f0 100644 (file)
@@ -705,6 +705,10 @@ QString IrcUserItem::toolTip(int column) const {
 NetworkModel::NetworkModel(QObject *parent)
   : TreeModel(NetworkModel::defaultHeader(), parent)
 {
 NetworkModel::NetworkModel(QObject *parent)
   : TreeModel(NetworkModel::defaultHeader(), parent)
 {
+  connect(this, SIGNAL(rowsInserted(const QModelIndex &, int, int)),
+         this, SLOT(checkForNewBuffers(const QModelIndex &, int, int)));
+  connect(this, SIGNAL(rowsAboutToBeRemoved(const QModelIndex &, int, int)),
+         this, SLOT(checkForRemovedBuffers(const QModelIndex &, int, int)));
 }
 
 QList<QVariant >NetworkModel::defaultHeader() {
 }
 
 QList<QVariant >NetworkModel::defaultHeader() {
@@ -951,3 +955,59 @@ const Network *NetworkModel::networkByIndex(const QModelIndex &index) const {
   return Client::network(networkId);
 }
 
   return Client::network(networkId);
 }
 
+
+
+void NetworkModel::checkForRemovedBuffers(const QModelIndex &parent, int start, int end) {
+  if(parent.data(ItemTypeRole) == NetworkItemType)
+    return;
+  
+  for(int row = start; row < end; row++) {
+    _bufferItemCache.remove(parent.child(row, 0).data(BufferIdRole).value<BufferId>());
+  }
+}
+
+void NetworkModel::checkForNewBuffers(const QModelIndex &parent, int start, int end) {
+  if(parent.data(ItemTypeRole) == NetworkItemType)
+    return;
+  
+  for(int row = start; row < end; row++) {
+    QModelIndex child = parent.child(row, 0);
+    _bufferItemCache[child.data(BufferIdRole).value<BufferId>()] = static_cast<BufferItem *>(child.internalPointer());
+  }
+}
+
+QString NetworkModel::bufferName(BufferId bufferId) {
+  if(!_bufferItemCache.contains(bufferId))
+    return QString();
+
+  return _bufferItemCache[bufferId]->bufferName();
+}
+
+NetworkId NetworkModel::networkId(BufferId bufferId) {
+  if(!_bufferItemCache.contains(bufferId))
+    return NetworkId();
+
+  NetworkItem *netItem = qobject_cast<NetworkItem *>(_bufferItemCache[bufferId]->parent());
+  if(netItem)
+    return netItem->networkId();
+  else
+    return NetworkId();
+}
+
+QString NetworkModel::networkName(BufferId bufferId) {
+  if(!_bufferItemCache.contains(bufferId))
+    return QString();
+
+  NetworkItem *netItem = qobject_cast<NetworkItem *>(_bufferItemCache[bufferId]->parent());
+  if(netItem)
+    return netItem->networkName();
+  else
+    return QString();
+}
+
+BufferInfo::Type NetworkModel::bufferType(BufferId bufferId) {
+  if(!_bufferItemCache.contains(bufferId))
+    return BufferInfo::InvalidBuffer;
+
+  return _bufferItemCache[bufferId]->bufferType();
+}
index b9920e2..07b2190 100644 (file)
@@ -295,12 +295,21 @@ public:
 
   Buffer::ActivityLevel bufferActivity(const BufferInfo &buffer) const;
 
 
   Buffer::ActivityLevel bufferActivity(const BufferInfo &buffer) const;
 
+  QString bufferName(BufferId bufferId);
+  NetworkId networkId(BufferId bufferId);
+  QString networkName(BufferId bufferId);
+  BufferInfo::Type bufferType(BufferId bufferId);
+
 public slots:
   void bufferUpdated(BufferInfo bufferInfo);
   void removeBuffer(BufferId bufferId);
   void setBufferActivity(const BufferInfo &buffer, Buffer::ActivityLevel activity);
   void networkRemoved(const NetworkId &networkId);
 public slots:
   void bufferUpdated(BufferInfo bufferInfo);
   void removeBuffer(BufferId bufferId);
   void setBufferActivity(const BufferInfo &buffer, Buffer::ActivityLevel activity);
   void networkRemoved(const NetworkId &networkId);
-  
+
+private slots:
+  void checkForRemovedBuffers(const QModelIndex &parent, int start, int end);
+  void checkForNewBuffers(const QModelIndex &parent, int start, int end);
+
 private:
   int networkRow(NetworkId networkId);
   NetworkItem *findNetworkItem(NetworkId networkId);
 private:
   int networkRow(NetworkId networkId);
   NetworkItem *findNetworkItem(NetworkId networkId);
@@ -309,6 +318,7 @@ private:
   BufferItem *findBufferItem(BufferId bufferId);
   BufferItem *bufferItem(const BufferInfo &bufferInfo);
 
   BufferItem *findBufferItem(BufferId bufferId);
   BufferItem *bufferItem(const BufferInfo &bufferInfo);
 
+  QHash<BufferId, BufferItem *> _bufferItemCache;
 };
 Q_DECLARE_OPERATORS_FOR_FLAGS(NetworkModel::itemTypes);
 
 };
 Q_DECLARE_OPERATORS_FOR_FLAGS(NetworkModel::itemTypes);