From e9f87d7542d4a9fe0e9c63dec96e93d270667ecd Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Thu, 6 Mar 2008 17:41:08 +0000 Subject: [PATCH] futher internal prettifications of the buffer switching process --- src/client/networkmodel.cpp | 16 ++------- src/client/networkmodel.h | 10 +++--- src/qtui/bufferwidget.cpp | 16 +++++---- src/qtui/mainwin.cpp | 2 +- src/qtui/nicklistwidget.cpp | 68 ++++++++++++++++++------------------- src/qtui/nicklistwidget.h | 4 --- version.inc | 2 +- 7 files changed, 53 insertions(+), 65 deletions(-) diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index 0582d44c..7b0ea946 100644 --- a/src/client/networkmodel.cpp +++ b/src/client/networkmodel.cpp @@ -55,21 +55,13 @@ BufferItem::BufferItem(BufferInfo bufferInfo, AbstractTreeItem *parent) setFlags(flags); } -const BufferInfo &BufferItem::bufferInfo() const { - return _bufferInfo; -} - 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) @@ -423,8 +415,6 @@ void NetworkItem::attachNetwork(Network *network) { this, SLOT(attachIrcChannel(QString))); connect(network, SIGNAL(connectedSet(bool)), this, SIGNAL(dataChanged())); - - // FIXME: connect this and that... emit dataChanged(); } diff --git a/src/client/networkmodel.h b/src/client/networkmodel.h index d9598c94..861d07cf 100644 --- a/src/client/networkmodel.h +++ b/src/client/networkmodel.h @@ -52,7 +52,7 @@ class BufferItem : public PropertyMapItem { 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); @@ -60,12 +60,14 @@ public: 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; - bool isStatusBuffer() const; - BufferInfo::Type bufferType() const; + // bool isStatusBuffer() const; bool isActive() const; @@ -115,11 +117,11 @@ public: 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; + inline const NetworkId &networkId() const { return _networkId; } QString networkName() const; QString currentServer() const; int nickCount() const; diff --git a/src/qtui/bufferwidget.cpp b/src/qtui/bufferwidget.cpp index e408e714..0ebcffbf 100644 --- a/src/qtui/bufferwidget.cpp +++ b/src/qtui/bufferwidget.cpp @@ -109,16 +109,18 @@ void BufferWidget::removeBuffer(BufferId bufferId) { } void BufferWidget::currentChanged(const QModelIndex ¤t, const QModelIndex &previous) { - Q_UNUSED(previous); - QVariant variant; - - variant = current.data(NetworkModel::BufferIdRole); - if(!variant.isValid()) - return; - setCurrentBuffer(variant.value()); + BufferId newBufferId = current.data(NetworkModel::BufferIdRole).value(); + BufferId oldBufferId = previous.data(NetworkModel::BufferIdRole).value(); + if(newBufferId != oldBufferId) + setCurrentBuffer(newBufferId); } void BufferWidget::setCurrentBuffer(BufferId bufferId) { + if(!bufferId.isValid()) { + ui.stackedWidget->setCurrentWidget(ui.page); + return; + } + ChatWidget *chatWidget = 0; Buffer *buf = Client::buffer(bufferId); if(!buf) { diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index 1f168b69..aaa59f45 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -343,7 +343,7 @@ void MainWin::disconnectedFromCore() { //ui.actionNetworkList->setEnabled(false); ui.bufferWidget->hide(); ui.actionConnectCore->setEnabled(true); - nickListWidget->reset(); + // nickListWidget->reset(); statusBar()->showMessage(tr("Not connected to core.")); } diff --git a/src/qtui/nicklistwidget.cpp b/src/qtui/nicklistwidget.cpp index cb941618..4cfd5b68 100644 --- a/src/qtui/nicklistwidget.cpp +++ b/src/qtui/nicklistwidget.cpp @@ -24,6 +24,7 @@ #include "nickview.h" #include "client.h" #include "networkmodel.h" +#include "buffermodel.h" #include "nickviewfilter.h" NickListWidget::NickListWidget(QWidget *parent) @@ -60,61 +61,53 @@ void NickListWidget::setSelectionModel(QItemSelectionModel *selectionModel) { } } - -void NickListWidget::reset() { - NickView *nickView; - QHash::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 ¤t, const QModelIndex &previous) { - Q_UNUSED(previous); - QVariant variant; - - variant = current.data(NetworkModel::BufferIdRole); - if(!variant.isValid()) - return; - setCurrentBuffer(variant.value()); -} + BufferInfo::Type bufferType = (BufferInfo::Type)current.data(NetworkModel::BufferTypeRole).toInt(); + BufferId newBufferId = current.data(NetworkModel::BufferIdRole).value(); + BufferId oldBufferId = previous.data(NetworkModel::BufferIdRole).value(); - -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; } - 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); - 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->setRootIndex(filter->mapFromSource(bufferIdx)); + QModelIndex source_current = Client::bufferModel()->mapToSource(current); + view->setRootIndex(filter->mapFromSource(source_current)); view->expandAll(); - nickViews[bufferId] = view; + nickViews[newBufferId] = 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) - reset(); + NickView *nickView; + QHash::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(model)) + filter->setSourceModel(0); + model->deleteLater(); + nickView->deleteLater(); + } } 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; - + NickView *view = nickViews.take(bufferId); ui.stackedWidget->removeWidget(view); + QAbstractItemModel *model = view->model(); + view->setModel(0); + if(QSortFilterProxyModel *filter = qobject_cast(model)) + filter->setSourceModel(0); + model->deleteLater(); view->deleteLater(); } diff --git a/src/qtui/nicklistwidget.h b/src/qtui/nicklistwidget.h index 3db7e083..1fca5e0b 100644 --- a/src/qtui/nicklistwidget.h +++ b/src/qtui/nicklistwidget.h @@ -46,9 +46,6 @@ public: inline QItemSelectionModel *selectionModel() const { return _selectionModel; } void setSelectionModel(QItemSelectionModel *selectionModel); -public slots: - void reset(); - protected: virtual QSize sizeHint() const; @@ -64,7 +61,6 @@ protected slots: private slots: void removeBuffer(BufferId bufferId); - void setCurrentBuffer(BufferId bufferId); private: Ui::NickListWidget ui; diff --git a/version.inc b/version.inc index ab351aef..6dcc0af1 100644 --- a/version.inc +++ b/version.inc @@ -5,7 +5,7 @@ quasselVersion = "0.2.0-alpha3-pre"; quasselDate = "2008-03-06"; - quasselBuild = 616; + quasselBuild = 617; //! Minimum client build number the core needs clientBuildNeeded = 613; -- 2.20.1