From 997fd2faaf19b25128fa7516be89aa5b0c165ae7 Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Mon, 5 Jan 2009 14:18:07 +0100 Subject: [PATCH] The new 'All Buffers' view is no properly presorted. If you have a randomly sorted 'All Buffers' view, then create a new one in the buffer view settings and delete the incorrectly sorted one. --- src/client/client.cpp | 1 + src/client/networkmodel.cpp | 32 +++++++++++++++++++ src/client/networkmodel.h | 4 +++ src/common/bufferviewconfig.cpp | 3 +- .../settingspages/bufferviewsettingspage.cpp | 10 +++--- .../settingspages/chatmonitorsettingspage.cpp | 4 +-- src/uisupport/bufferviewfilter.cpp | 5 +-- src/uisupport/bufferviewfilter.h | 3 +- 8 files changed, 48 insertions(+), 14 deletions(-) diff --git a/src/client/client.cpp b/src/client/client.cpp index b89b83b1..64d228d6 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -314,6 +314,7 @@ void Client::createDefautBufferView() { if(bufferViewManager()->bufferViewConfigs().isEmpty()) { BufferViewConfig config(-1); config.setBufferViewName(tr("All Buffers")); + config.initSetBufferList(networkModel()->allBufferIdsSorted()); bufferViewManager()->requestCreateBufferView(config.toVariantMap()); } } diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index 962c9f8f..840a10ae 100644 --- a/src/client/networkmodel.cpp +++ b/src/client/networkmodel.cpp @@ -1041,3 +1041,35 @@ BufferId NetworkModel::bufferId(NetworkId networkId, const QString &bufferName, } return BufferId(); } + +void NetworkModel::sortBufferIds(QList &bufferIds) const { + QList bufferItems; + foreach(BufferId bufferId, bufferIds) { + if(_bufferItemCache.contains(bufferId)) + bufferItems << _bufferItemCache[bufferId]; + } + + qSort(bufferItems.begin(), bufferItems.end(), bufferItemLessThan); + + bufferIds.clear(); + foreach(BufferItem *bufferItem, bufferItems) { + bufferIds << bufferItem->bufferId(); + } +} + +QList NetworkModel::allBufferIdsSorted() const { + QList bufferIds = allBufferIds(); + sortBufferIds(bufferIds); + return bufferIds; +} + +bool NetworkModel::bufferItemLessThan(const BufferItem *left, const BufferItem *right) { + int leftType = left->bufferType(); + int rightType = right->bufferType(); + + if(leftType != rightType) + return leftType < rightType; + else + return QString::compare(left->bufferName(), right->bufferName(), Qt::CaseInsensitive) < 0; +} + diff --git a/src/client/networkmodel.h b/src/client/networkmodel.h index 7412d135..4c78878f 100644 --- a/src/client/networkmodel.h +++ b/src/client/networkmodel.h @@ -306,6 +306,8 @@ public: QString networkName(BufferId bufferId) const; inline QList allBufferIds() const { return _bufferItemCache.keys(); } + QList allBufferIdsSorted() const; + void sortBufferIds(QList &bufferIds) const; public slots: void bufferUpdated(BufferInfo bufferInfo); @@ -331,6 +333,8 @@ private: BufferItem *findBufferItem(BufferId bufferId) const; BufferItem *bufferItem(const BufferInfo &bufferInfo); + static bool bufferItemLessThan(const BufferItem *left, const BufferItem *right); + QHash _bufferItemCache; }; Q_DECLARE_OPERATORS_FOR_FLAGS(NetworkModel::ItemTypes) diff --git a/src/common/bufferviewconfig.cpp b/src/common/bufferviewconfig.cpp index 935d175f..0b9ab966 100644 --- a/src/common/bufferviewconfig.cpp +++ b/src/common/bufferviewconfig.cpp @@ -37,8 +37,7 @@ BufferViewConfig::BufferViewConfig(int bufferViewId, QObject *parent) BufferViewConfig::BufferViewConfig(int bufferViewId, const QVariantMap &properties, QObject *parent) : SyncableObject(parent), - _bufferViewId(bufferViewId), - _disableDecoration(false) // FIXME remove as soon as we have bumped the protocol version to v8 + _bufferViewId(bufferViewId) { fromVariantMap(properties); setObjectName(QString::number(bufferViewId)); diff --git a/src/qtui/settingspages/bufferviewsettingspage.cpp b/src/qtui/settingspages/bufferviewsettingspage.cpp index f8133de7..e8392920 100644 --- a/src/qtui/settingspages/bufferviewsettingspage.cpp +++ b/src/qtui/settingspages/bufferviewsettingspage.cpp @@ -221,9 +221,10 @@ void BufferViewSettingsPage::newBufferView(const QString &bufferViewName) { config->setInitialized(); QList bufferIds; if(config->addNewBuffersAutomatically()) { - bufferIds = Client::networkModel()->allBufferIds(); if(config->sortAlphabetically()) - qSort(bufferIds.begin(), bufferIds.end(), bufferIdLessThan); + bufferIds = Client::networkModel()->allBufferIdsSorted(); + else + bufferIds = Client::networkModel()->allBufferIds(); } config->initSetBufferList(bufferIds); @@ -427,9 +428,10 @@ void BufferViewSettingsPage::saveConfig(BufferViewConfig *config) { if(_newBufferViews.contains(config)) { QList bufferIds; if(config->addNewBuffersAutomatically()) { - bufferIds = Client::networkModel()->allBufferIds(); if(config->sortAlphabetically()) - qSort(bufferIds.begin(), bufferIds.end(), bufferIdLessThan); + bufferIds = Client::networkModel()->allBufferIdsSorted(); + else + bufferIds = Client::networkModel()->allBufferIds(); } config->initSetBufferList(bufferIds); } diff --git a/src/qtui/settingspages/chatmonitorsettingspage.cpp b/src/qtui/settingspages/chatmonitorsettingspage.cpp index 0170e870..b9a07386 100644 --- a/src/qtui/settingspages/chatmonitorsettingspage.cpp +++ b/src/qtui/settingspages/chatmonitorsettingspage.cpp @@ -99,12 +99,12 @@ void ChatMonitorSettingsPage::load() { bufferIdsFromConfig << v.value(); allBufferIds.removeAll(v.value()); } - qSort(bufferIdsFromConfig.begin(), bufferIdsFromConfig.end(), bufferIdLessThan); + Client::networkModel()->sortBufferIds(bufferIdsFromConfig); _configActive->initSetBufferList(bufferIdsFromConfig); } ui.activeBuffers->setFilteredModel(Client::bufferModel(), _configActive); - qSort(allBufferIds.begin(), allBufferIds.end(), bufferIdLessThan); + Client::networkModel()->sortBufferIds(allBufferIds); _configAvailable->initSetBufferList(allBufferIds); ui.availableBuffers->setFilteredModel(Client::bufferModel(), _configAvailable); diff --git a/src/uisupport/bufferviewfilter.cpp b/src/uisupport/bufferviewfilter.cpp index 7c85dfd8..0cd749aa 100644 --- a/src/uisupport/bufferviewfilter.cpp +++ b/src/uisupport/bufferviewfilter.cpp @@ -496,10 +496,7 @@ void BufferViewFilter::checkItemsForRemoval(const QModelIndex &topLeft, const QM emit _dataChanged(source_topLeft, source_bottomRight); } -// ****************************** -// Helper -// ****************************** -bool bufferIdLessThan(const BufferId &left, const BufferId &right) { +bool BufferViewFilter::bufferIdLessThan(const BufferId &left, const BufferId &right) { Q_CHECK_PTR(Client::networkModel()); if(!Client::networkModel()) return true; diff --git a/src/uisupport/bufferviewfilter.h b/src/uisupport/bufferviewfilter.h index b4bcb7be..b2f47e3d 100644 --- a/src/uisupport/bufferviewfilter.h +++ b/src/uisupport/bufferviewfilter.h @@ -119,9 +119,8 @@ private: bool filterAcceptBuffer(const QModelIndex &) const; bool filterAcceptNetwork(const QModelIndex &) const; void addBuffer(const BufferId &) const; + static bool bufferIdLessThan(const BufferId &, const BufferId &); }; Q_DECLARE_OPERATORS_FOR_FLAGS(BufferViewFilter::Modes) -bool bufferIdLessThan(const BufferId &, const BufferId &); - #endif // BUFFERVIEWFILTER_H_ -- 2.20.1