[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [muon] muon: Add an architecture filter, available as one of the filters in the sidebar.
From: Jonathan Thomas <echidnaman () kubuntu ! org>
Date: 2012-02-23 3:04:33
Message-ID: 20120223030433.ECBC2A60A6 () git ! kde ! org
[Download RAW message or body]
Git commit 6cbb9b8126e5b1310c1637d139288c910fcf733e by Jonathan Thomas.
Committed on 23/02/2012 at 04:03.
Pushed by jmthomas into branch 'master'.
Add an architecture filter, available as one of the filters in the sidebar.
FEATURE:290437
FIXED-IN:1.4.0
M +1 -0 muon/CMakeLists.txt
C +35 -36 muon/FilterWidget/ArchitectureFilter.cpp [from: \
muon/PackageModel/PackageProxyModel.h - 055% similarity] C +13 -18 \
muon/FilterWidget/ArchitectureFilter.h [from: muon/ManagerWidget.h - 073% similarity] \
M +31 -0 muon/FilterWidget/FilterWidget.cpp M +3 -0 \
muon/FilterWidget/FilterWidget.h M +2 -0 muon/MainWindow.cpp
M +5 -0 muon/ManagerWidget.cpp
M +1 -0 muon/ManagerWidget.h
M +12 -0 muon/PackageModel/PackageProxyModel.cpp
M +2 -0 muon/PackageModel/PackageProxyModel.h
http://commits.kde.org/muon/6cbb9b8126e5b1310c1637d139288c910fcf733e
diff --git a/muon/CMakeLists.txt b/muon/CMakeLists.txt
index 6579038..5b427b0 100644
--- a/muon/CMakeLists.txt
+++ b/muon/CMakeLists.txt
@@ -17,6 +17,7 @@ set(muon_SRCS
DownloadModel/DownloadModel.cpp
DownloadModel/DownloadDelegate.cpp
DownloadWidget.cpp
+ FilterWidget/ArchitectureFilter.cpp
FilterWidget/CategoryFilter.cpp
FilterWidget/FilterModel.cpp
FilterWidget/FilterWidget.cpp
diff --git a/muon/PackageModel/PackageProxyModel.h \
b/muon/FilterWidget/ArchitectureFilter.cpp similarity index 55%
copy from muon/PackageModel/PackageProxyModel.h
copy to muon/FilterWidget/ArchitectureFilter.cpp
index fd34a95..0fabf41 100644
--- a/muon/PackageModel/PackageProxyModel.h
+++ b/muon/FilterWidget/ArchitectureFilter.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright © 2010 Jonathan Thomas <echidnaman@kubuntu.org> *
+ * Copyright © 2012 Jonathan Thomas <echidnaman@kubuntu.org> *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
@@ -18,48 +18,47 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
***************************************************************************/
-#ifndef PACKAGEPROXYMODEL_H
-#define PACKAGEPROXYMODEL_H
+#include "ArchitectureFilter.h"
-#include <QtGui/QSortFilterProxyModel>
-#include <QtCore/QString>
+// KDE includes
+#include <KIcon>
+#include <KLocale>
-#include <LibQApt/Package>
+// LibQApt includes
+#include <LibQApt/Backend>
-namespace QApt {
- class Backend;
+ArchitectureFilter::ArchitectureFilter(QObject *parent, QApt::Backend *backend)
+ : FilterModel(parent)
+ , m_backend(backend)
+ , m_shouldShow(true)
+{
}
-class PackageProxyModel : public QSortFilterProxyModel
+bool ArchitectureFilter::shouldShow() const
{
- Q_OBJECT
-public:
- PackageProxyModel(QObject *parent);
- ~PackageProxyModel();
-
- void setBackend(QApt::Backend *backend);
- void search(const QString &searchText);
- void setGroupFilter(const QString &filterText);
- void setStateFilter(QApt::Package::State state);
- void setOriginFilter(const QString &origin);
-
- bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const;
- QApt::Package *packageAt(const QModelIndex &index) const;
- void reset();
-
-protected:
- bool lessThan(const QModelIndex &left, const QModelIndex &right) const;
+ return m_shouldShow;
+}
-private:
- QApt::Backend *m_backend;
- QApt::PackageList m_packages;
+void ArchitectureFilter::populate()
+{
+ QStringList archList = m_backend->architectures();
- QString m_searchText;
- QString m_groupFilter;
- QApt::Package::State m_stateFilter;
- QString m_originFilter;
+ if (archList.size() < 0) {
+ m_shouldShow = false;
+ return;
+ }
- bool m_sortByRelevancy;
-};
+ QStandardItem *defaultItem = new QStandardItem;
+ defaultItem->setEditable(false);
+ defaultItem->setIcon(KIcon("bookmark-new-list"));
+ defaultItem->setText(i18nc("@item:inlistbox Item that resets the filter to \
\"all\"", "All")); + appendRow(defaultItem);
-#endif
+ for (const QString &arch : archList) {
+ QStandardItem *archItem = new QStandardItem;
+ archItem->setEditable(false);
+ archItem->setText(arch);
+ archItem->setData(arch, Qt::UserRole+1);
+ appendRow(archItem);
+ }
+}
diff --git a/muon/ManagerWidget.h b/muon/FilterWidget/ArchitectureFilter.h
similarity index 73%
copy from muon/ManagerWidget.h
copy to muon/FilterWidget/ArchitectureFilter.h
index c82b053..f40331d 100644
--- a/muon/ManagerWidget.h
+++ b/muon/FilterWidget/ArchitectureFilter.h
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright © 2010 Jonathan Thomas <echidnaman@kubuntu.org> *
+ * Copyright © 2012 Jonathan Thomas <echidnaman@kubuntu.org> *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
@@ -18,31 +18,26 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
***************************************************************************/
-#ifndef MANAGERWIDGET_H
-#define MANAGERWIDGET_H
+#ifndef ARCHITECTUREFILTER_H
+#define ARCHITECTUREFILTER_H
-#include <QModelIndex>
-
-#include <LibQApt/Package>
-
-#include "PackageModel/PackageWidget.h"
+#include "FilterModel.h"
namespace QApt {
class Backend;
}
-class ManagerWidget : public PackageWidget
+class ArchitectureFilter : public FilterModel
{
- Q_OBJECT
public:
- explicit ManagerWidget(QWidget *parent);
- ~ManagerWidget();
+ ArchitectureFilter(QObject *parent, QApt::Backend *backend);
+
+ bool shouldShow() const;
+ void populate();
-public Q_SLOTS:
- void reload();
- void filterByGroup(const QString &groupName);
- void filterByStatus(const QApt::Package::State state);
- void filterByOrigin(const QString &originName);
+private:
+ QApt::Backend *m_backend;
+ bool m_shouldShow;
};
-#endif
+#endif // ARCHITECTUREFILTER_H
diff --git a/muon/FilterWidget/FilterWidget.cpp b/muon/FilterWidget/FilterWidget.cpp
index 662ee15..47d069c 100644
--- a/muon/FilterWidget/FilterWidget.cpp
+++ b/muon/FilterWidget/FilterWidget.cpp
@@ -34,6 +34,7 @@
#include <LibQApt/Backend>
// Own includes
+#include "ArchitectureFilter.h"
#include "CategoryFilter.h"
#include "OriginFilter.h"
#include "StatusFilter.h"
@@ -66,6 +67,12 @@ FilterWidget::FilterWidget(QWidget *parent)
m_listViews.append(m_originList);
m_filterBox->addItem(m_originList, KIcon(), i18nc("@title:tab", "By Origin"));
+ m_archList = new QListView(this);
+ m_archList->hide();
+ connect(m_archList, SIGNAL(clicked(QModelIndex)),
+ this, SLOT(architectureActivated(QModelIndex)));
+ m_listViews.append(m_archList);
+
for (QListView *view : m_listViews) {
view->setAlternatingRowColors(true);
}
@@ -111,11 +118,29 @@ void FilterWidget::populateFilters()
m_filterModels.append(originFilter);
m_originList->setModel(originFilter);
+ ArchitectureFilter *archFilter = new ArchitectureFilter(this, m_backend);
+ m_filterModels.append(archFilter);
+ m_archList->setModel(archFilter);
+
// Populate filter lists
for (FilterModel *filterModel : m_filterModels) {
filterModel->populate();
}
+ // Special-case showing the architecture list, it won't show on single-arch \
systems + if (archFilter->shouldShow()) {
+ m_filterBox->addItem(m_archList, KIcon(), i18nc("@title:tab", "By \
Architecture")); + m_archList->show();
+ } else {
+ m_filterBox->removeItem(m_filterBox->indexOf(m_archList));
+ m_filterModels.remove(m_filterModels.indexOf(archFilter));
+ delete archFilter;
+
+ m_listViews.remove(m_listViews.indexOf(m_archList));
+ delete m_archList;
+ m_archList = 0;
+ }
+
// Set the selected item of each filter list to "All"
for (QListView *view : m_listViews) {
selectFirstRow(view);
@@ -140,6 +165,12 @@ void FilterWidget::originActivated(const QModelIndex &index)
emit filterByOrigin(originName);
}
+void FilterWidget::architectureActivated(const QModelIndex &index)
+{
+ QString arch = index.data(Qt::UserRole+1).toString();
+ emit filterByArchitecture(arch);
+}
+
void FilterWidget::selectFirstRow(const QAbstractItemView *itemView)
{
QModelIndex firstRow = itemView->model()->index(0, 0);
diff --git a/muon/FilterWidget/FilterWidget.h b/muon/FilterWidget/FilterWidget.h
index 01f0edc..693d311 100644
--- a/muon/FilterWidget/FilterWidget.h
+++ b/muon/FilterWidget/FilterWidget.h
@@ -55,6 +55,7 @@ private:
QListView *m_categoriesList;
QListView *m_statusList;
QListView *m_originList;
+ QListView *m_archList;
QVector<QListView *> m_listViews;
QVector<FilterModel *> m_filterModels;
@@ -71,11 +72,13 @@ private Q_SLOTS:
void categoryActivated(const QModelIndex &index);
void statusActivated(const QModelIndex &index);
void originActivated(const QModelIndex &index);
+ void architectureActivated(const QModelIndex &index);
signals:
void filterByGroup(const QString &groupName);
void filterByStatus(const QApt::Package::State state);
void filterByOrigin(const QString &originName);
+ void filterByArchitecture(const QString &architecture);
};
#endif
diff --git a/muon/MainWindow.cpp b/muon/MainWindow.cpp
index 4865847..0bc4a57 100644
--- a/muon/MainWindow.cpp
+++ b/muon/MainWindow.cpp
@@ -103,6 +103,8 @@ void MainWindow::initGUI()
m_managerWidget, SLOT(filterByStatus(QApt::Package::State)));
connect(m_filterBox, SIGNAL(filterByOrigin(QString)),
m_managerWidget, SLOT(filterByOrigin(QString)));
+ connect(m_filterBox, SIGNAL(filterByArchitecture(QString)),
+ m_managerWidget, SLOT(filterByArchitecture(QString)));
m_mainWidget->addWidget(m_filterBox);
m_mainWidget->addWidget(m_managerWidget);
diff --git a/muon/ManagerWidget.cpp b/muon/ManagerWidget.cpp
index 78b0cd5..f5ee252 100644
--- a/muon/ManagerWidget.cpp
+++ b/muon/ManagerWidget.cpp
@@ -82,4 +82,9 @@ void ManagerWidget::filterByOrigin(const QString &originName)
m_proxyModel->setOriginFilter(origin);
}
+void ManagerWidget::filterByArchitecture(const QString &arch)
+{
+ m_proxyModel->setArchFilter(arch);
+}
+
#include "ManagerWidget.moc"
diff --git a/muon/ManagerWidget.h b/muon/ManagerWidget.h
index c82b053..52e21bf 100644
--- a/muon/ManagerWidget.h
+++ b/muon/ManagerWidget.h
@@ -43,6 +43,7 @@ public Q_SLOTS:
void filterByGroup(const QString &groupName);
void filterByStatus(const QApt::Package::State state);
void filterByOrigin(const QString &originName);
+ void filterByArchitecture(const QString &arch);
};
#endif
diff --git a/muon/PackageModel/PackageProxyModel.cpp \
b/muon/PackageModel/PackageProxyModel.cpp index cea8189..5b3f97d 100644
--- a/muon/PackageModel/PackageProxyModel.cpp
+++ b/muon/PackageModel/PackageProxyModel.cpp
@@ -99,6 +99,12 @@ void PackageProxyModel::setOriginFilter(const QString &origin)
invalidate();
}
+void PackageProxyModel::setArchFilter(const QString &arch)
+{
+ m_archFilter = arch;
+ invalidate();
+}
+
bool PackageProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex \
&sourceParent) const {
//Our "main"-method
@@ -126,6 +132,12 @@ bool PackageProxyModel::filterAcceptsRow(int sourceRow, const \
QModelIndex &sourc }
}
+ if (!m_archFilter.isEmpty()) {
+ if (!(package->architecture() == m_archFilter)) {
+ return false;
+ }
+ }
+
if (m_sortByRelevancy) {
return m_packages.contains(package);
}
diff --git a/muon/PackageModel/PackageProxyModel.h \
b/muon/PackageModel/PackageProxyModel.h index fd34a95..7b5ccd5 100644
--- a/muon/PackageModel/PackageProxyModel.h
+++ b/muon/PackageModel/PackageProxyModel.h
@@ -42,6 +42,7 @@ public:
void setGroupFilter(const QString &filterText);
void setStateFilter(QApt::Package::State state);
void setOriginFilter(const QString &origin);
+ void setArchFilter(const QString &arch);
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const;
QApt::Package *packageAt(const QModelIndex &index) const;
@@ -58,6 +59,7 @@ private:
QString m_groupFilter;
QApt::Package::State m_stateFilter;
QString m_originFilter;
+ QString m_archFilter;
bool m_sortByRelevancy;
};
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic