summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlo Vanini <silhusk@gmail.com>2017-02-01 21:34:58 (GMT)
committerCarlo Vanini <silhusk@gmail.com>2017-02-01 21:34:58 (GMT)
commit63c63848589fc011d2fd39e36351d592d9bfab63 (patch)
tree995ff80b37507c6734f475e13f4180398270cf8e
parent4e59f497703deb27c27107c17b12601d267150d1 (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.cpp9
-rw-r--r--src/PackageModel/PackageProxyModel.h1
-rw-r--r--src/PackageModel/PackageViewHeader.cpp25
-rw-r--r--src/PackageModel/PackageViewHeader.h3
-rw-r--r--src/PackageModel/PackageWidget.cpp5
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()