From e30092afc1803d753914a7ab9fa88bba818de559 Mon Sep 17 00:00:00 2001 From: Shane Synan Date: Sat, 14 Jan 2017 14:54:53 -0600 Subject: [PATCH] Fix expanding networks in Chat Monitor settings Update the network expanded/collapsed state when setting a model, including filtered models. This fixes the Chat Monitor settings page not updating the expanded and collapsed networks on first load. It might be excessive to apply on every model change; if performance issues arise, it can be moved to BufferView::setFilteredModel() or elsewhere. Add comments! Resolves GH-271. (cherry picked from commit efee441a243efb88929e1e275d71ee27991bf074) --- src/uisupport/bufferview.cpp | 24 ++++++++++++++++++------ src/uisupport/bufferview.h | 24 ++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/uisupport/bufferview.cpp b/src/uisupport/bufferview.cpp index 76bb2971..f14cff2c 100644 --- a/src/uisupport/bufferview.cpp +++ b/src/uisupport/bufferview.cpp @@ -129,6 +129,11 @@ void BufferView::setModel(QAbstractItemModel *model) } connect(model, SIGNAL(layoutChanged()), this, SLOT(on_layoutChanged())); + + // Make sure collapsation is correct after setting a model + // This might not be needed here, only in BufferView::setFilteredModel(). If issues arise, just + // move down to setFilteredModel (which calls this function). + setExpandedState(); } @@ -329,7 +334,19 @@ void BufferView::on_configChanged() { Q_ASSERT(model()); - // expand all active networks... collapse inactive ones... unless manually changed + // Expand/collapse as needed + setExpandedState(); + + if (config()) { + // update selection to current one + Client::bufferModel()->synchronizeView(this); + } +} + + +void BufferView::setExpandedState() +{ + // Expand all active networks, collapse inactive ones... unless manually changed QModelIndex networkIdx; NetworkId networkId; for (int row = 0; row < model()->rowCount(); row++) { @@ -343,11 +360,6 @@ void BufferView::on_configChanged() setExpandedState(networkIdx); } - - if (config()) { - // update selection to current one - Client::bufferModel()->synchronizeView(this); - } } diff --git a/src/uisupport/bufferview.h b/src/uisupport/bufferview.h index 3e0384c4..ce8b956a 100644 --- a/src/uisupport/bufferview.h +++ b/src/uisupport/bufferview.h @@ -90,7 +90,31 @@ private slots: void joinChannel(const QModelIndex &index); void toggleHeader(bool checked); + /** + * Expand all active networks and collapse inactive ones unless manually changed + * + * Applies to all networks. Shouldn't need called except during initialization. + */ + void setExpandedState(); + + /** + * Save the current display state of the given network + * + * Tracks expanded or collapsed and active or inactive. + * + * @see setExpandedState() + * @param[in] networkIdx QModelIndex of the root network to store + */ void storeExpandedState(const QModelIndex &networkIdx); + + /** + * Set the display state of the given network according to network status and manual changes + * + * Expands if active or previously expanded, collapses if inactive or previously collapsed. + * + * @see storeExpandedState() + * @param[in] networkIdx QModelIndex of the root network to update + */ void setExpandedState(const QModelIndex &networkIdx); void on_configChanged(); -- 2.20.1