diff options
| author | Carlo Vanini <silhusk@gmail.com> | 2017-02-01 21:34:58 (GMT) |
|---|---|---|
| committer | Carlo Vanini <silhusk@gmail.com> | 2017-02-01 21:34:58 (GMT) |
| commit | 63c63848589fc011d2fd39e36351d592d9bfab63 (patch) | |
| tree | 995ff80b37507c6734f475e13f4180398270cf8e | |
| parent | 4e59f497703deb27c27107c17b12601d267150d1 (diff) | |
fix when sort indicator is shown in list header
When starting a new search in the package list, and the list is sorted
by name, then the results are sorted by relevancy and the indicator is
hidden. Clicking on a column header changes the order wrt the selected
column.
Testing Done:
Test 1
------
* Click on 'Status' header
* Search for 'fri' (gives meaningful result to see the order)
* Result is sorted by status and then by name
Test 2
------
* Clear search string, click on 'Package' header
* Search for 'fri'
* Sort indicator is hidden, result is sorted by relevancy
* Click on a header
* Result is order by selected column, indicator is shown
* Continue writing in search string, 'fritz'
* Result is still ordered by column
* Clearing search string and fill it again
* Search result is sorted by relevancy
BUG: 313596
REVIEW: 129904
| -rw-r--r-- | src/PackageModel/PackageProxyModel.cpp | 9 | ||||
| -rw-r--r-- | src/PackageModel/PackageProxyModel.h | 1 | ||||
| -rw-r--r-- | src/PackageModel/PackageViewHeader.cpp | 25 | ||||
| -rw-r--r-- | src/PackageModel/PackageViewHeader.h | 3 | ||||
| -rw-r--r-- | src/PackageModel/PackageWidget.cpp | 5 |
5 files changed, 39 insertions, 4 deletions
diff --git a/src/PackageModel/PackageProxyModel.cpp b/src/PackageModel/PackageProxyModel.cpp index 807ad07..b0ed175 100644 --- a/src/PackageModel/PackageProxyModel.cpp +++ b/src/PackageModel/PackageProxyModel.cpp @@ -69,7 +69,9 @@ void PackageProxyModel::search(const QString &searchText) // 1-character searches are painfully slow. >= 2 chars are fine, though if (searchText.size() > 1) { m_searchPackages = m_backend->search(searchText); - m_sortByRelevancy = true; + if (!m_useSearchResults) { + m_sortByRelevancy = true; + } m_useSearchResults = true; } else { m_searchPackages.clear(); @@ -87,6 +89,11 @@ void PackageProxyModel::setSortByRelevancy(bool enabled) invalidate(); } +bool PackageProxyModel::isSortedByRelevancy() const +{ + return m_sortByRelevancy; +} + void PackageProxyModel::setGroupFilter(const QString &filterText) { m_groupFilter = filterText; diff --git a/src/PackageModel/PackageProxyModel.h b/src/PackageModel/PackageProxyModel.h index fea49b7..a761ad8 100644 --- a/src/PackageModel/PackageProxyModel.h +++ b/src/PackageModel/PackageProxyModel.h @@ -39,6 +39,7 @@ public: void setBackend(QApt::Backend *backend); void search(const QString &searchText); void setSortByRelevancy(bool enabled); + bool isSortedByRelevancy() const; void setGroupFilter(const QString &filterText); void setStateFilter(QApt::Package::State state); void setOriginFilter(const QString &origin); diff --git a/src/PackageModel/PackageViewHeader.cpp b/src/PackageModel/PackageViewHeader.cpp index e9557ec..087d69c 100644 --- a/src/PackageModel/PackageViewHeader.cpp +++ b/src/PackageModel/PackageViewHeader.cpp @@ -24,11 +24,30 @@ #include <QMenu> #include <QContextMenuEvent> +#include "PackageProxyModel.h" + PackageViewHeader::PackageViewHeader(QWidget *parent) : QHeaderView(Qt::Horizontal, parent) { } +void PackageViewHeader::setModel(QAbstractItemModel* model) +{ + QAbstractItemModel* currentModel = this->model(); + if (model == currentModel) + return; + if (currentModel) { + disconnect(currentModel, &QAbstractItemModel::layoutChanged, + this, &PackageViewHeader::modelLayoutChanged); + } + + QHeaderView::setModel(model); + + connect(model, &QAbstractItemModel::layoutChanged, + this, &PackageViewHeader::modelLayoutChanged); +} + + void PackageViewHeader::contextMenuEvent(QContextMenuEvent *event) { QMenu menu(this); @@ -63,6 +82,12 @@ void PackageViewHeader::deleteActions() } } +void PackageViewHeader::modelLayoutChanged() +{ + setSortIndicatorShown(!(static_cast<PackageProxyModel*>(model())->isSortedByRelevancy() && + sortIndicatorSection() == 0)); +} + void PackageViewHeader::toggleColumn(bool visible) { QAction *action = qobject_cast<QAction *>(sender()); diff --git a/src/PackageModel/PackageViewHeader.h b/src/PackageModel/PackageViewHeader.h index ada5498..30adb4d 100644 --- a/src/PackageModel/PackageViewHeader.h +++ b/src/PackageModel/PackageViewHeader.h @@ -30,10 +30,13 @@ class PackageViewHeader : public QHeaderView public: explicit PackageViewHeader(QWidget *parent = 0); + void setModel(QAbstractItemModel *model) override; + protected: void contextMenuEvent(QContextMenuEvent *event); private slots: + void modelLayoutChanged(); void toggleColumn(bool visible); private: diff --git a/src/PackageModel/PackageWidget.cpp b/src/PackageModel/PackageWidget.cpp index e70e4d3..1b4efc8 100644 --- a/src/PackageModel/PackageWidget.cpp +++ b/src/PackageModel/PackageWidget.cpp @@ -410,9 +410,8 @@ void PackageWidget::setSortedPackages() void PackageWidget::sectionClicked(int section) { - if (section == 0) { - m_proxyModel->setSortByRelevancy(false); - } + Q_UNUSED(section); + m_proxyModel->setSortByRelevancy(false); } void PackageWidget::startSearch() |
