[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [muon/newui] installer: Adapting to declarative idiom
From: Aleix Pol <aleixpol () kde ! org>
Date: 2012-02-01 4:34:34
Message-ID: 20120201043434.9D59AA60B9 () git ! kde ! org
[Download RAW message or body]
Git commit effe5af5320b7a8e0ac1fb5b4b1ab05b5e091d1a by Aleix Pol.
Committed on 01/02/2012 at 05:28.
Pushed by apol into branch 'newui'.
Adapting to declarative idiom
Improve the application model classes to better adapt to the
QML-way.
M +1 -1 installer/ApplicationBackend.h
M +44 -8 installer/ApplicationModel/ApplicationModel.cpp
M +8 -4 installer/ApplicationModel/ApplicationModel.h
M +2 -15 installer/ApplicationModel/ApplicationProxyModel.cpp
M +4 -7 installer/ApplicationModel/ApplicationProxyModel.h
M +4 -9 installer/ApplicationModel/ApplicationViewWidget.cpp
http://commits.kde.org/muon/effe5af5320b7a8e0ac1fb5b4b1ab05b5e091d1a
diff --git a/installer/ApplicationBackend.h b/installer/ApplicationBackend.h
index 44990bf..1054094 100644
--- a/installer/ApplicationBackend.h
+++ b/installer/ApplicationBackend.h
@@ -45,7 +45,7 @@ class ApplicationBackend : public QObject
{
Q_OBJECT
public:
- explicit ApplicationBackend(QObject *parent);
+ explicit ApplicationBackend(QObject *parent=0);
~ApplicationBackend();
ReviewsBackend *reviewsBackend() const;
diff --git a/installer/ApplicationModel/ApplicationModel.cpp \
b/installer/ApplicationModel/ApplicationModel.cpp index 172bd03..8c459fb 100644
--- a/installer/ApplicationModel/ApplicationModel.cpp
+++ b/installer/ApplicationModel/ApplicationModel.cpp
@@ -33,11 +33,44 @@
#include "ReviewsBackend/Rating.h"
#include "ReviewsBackend/ReviewsBackend.h"
#include "Transaction.h"
+#include <QDebug>
-ApplicationModel::ApplicationModel(QObject *parent, ApplicationBackend *backend)
+ApplicationModel::ApplicationModel(QObject *parent)
: QAbstractListModel(parent)
- , m_appBackend(backend)
+ , m_appBackend(0)
{
+ QHash< int, QByteArray > roles = roleNames();
+ roles[NameRole] = "name";
+ roles[IconRole] = "icon";
+ roles[CommentRole] = "comment";
+ roles[ActionRole] = "action";
+ roles[StatusRole] = "status";
+ roles[RatingRole] = "rating";
+ roles[ActiveRole] = "active";
+ roles[ProgressRole] = "progress";
+ roles[ProgressTextRole] = "progressText";
+ roles[InstalledRole] = "installed";
+ setRoleNames(roles);
+}
+
+ApplicationModel::~ApplicationModel()
+{
+}
+
+void ApplicationModel::setBackend(ApplicationBackend* backend)
+{
+ if(m_appBackend) {
+ disconnect(m_appBackend, SIGNAL(progress(Transaction*,int)),
+ this, SLOT(updateTransactionProgress(Transaction*,int)));
+ disconnect(m_appBackend, \
SIGNAL(workerEvent(QApt::WorkerEvent,Transaction*)), + this, \
SLOT(workerEvent(QApt::WorkerEvent,Transaction*))); + disconnect(m_appBackend, \
SIGNAL(transactionCancelled(Application*)), + this, \
SLOT(transactionCancelled(Application*))); + }
+
+ m_appBackend = backend;
+ reloadApplications();
+
connect(m_appBackend, SIGNAL(progress(Transaction*,int)),
this, SLOT(updateTransactionProgress(Transaction*,int)));
connect(m_appBackend, SIGNAL(workerEvent(QApt::WorkerEvent,Transaction*)),
@@ -46,8 +79,9 @@ ApplicationModel::ApplicationModel(QObject *parent, \
ApplicationBackend *backend) this, SLOT(transactionCancelled(Application*)));
}
-ApplicationModel::~ApplicationModel()
+ApplicationBackend* ApplicationModel::backend() const
{
+ return m_appBackend;
}
int ApplicationModel::rowCount(const QModelIndex & /*parent*/) const
@@ -55,11 +89,6 @@ int ApplicationModel::rowCount(const QModelIndex & /*parent*/) \
const return m_apps.size();
}
-int ApplicationModel::columnCount(const QModelIndex & /*parent*/) const
-{
- return 1;
-}
-
QVariant ApplicationModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid()) {
@@ -163,6 +192,8 @@ QVariant ApplicationModel::data(const QModelIndex &index, int \
role) const
void ApplicationModel::setApplications(const QList<Application*> &list)
{
+ clear();
+
m_apps.reserve(list.size());
beginInsertRows(QModelIndex(), m_apps.count(), m_apps.count());
m_apps = list;
@@ -232,4 +263,9 @@ QList<Application*> ApplicationModel::applications() const
return m_apps;
}
+void ApplicationModel::reloadApplications()
+{
+ setApplications(m_appBackend->applicationList());
+}
+
#include "ApplicationModel.moc"
diff --git a/installer/ApplicationModel/ApplicationModel.h \
b/installer/ApplicationModel/ApplicationModel.h index 438f2a0..07d6c57 100644
--- a/installer/ApplicationModel/ApplicationModel.h
+++ b/installer/ApplicationModel/ApplicationModel.h
@@ -32,6 +32,7 @@ class Transaction;
class ApplicationModel: public QAbstractListModel
{
Q_OBJECT
+ Q_PROPERTY(ApplicationBackend* backend READ backend WRITE setBackend)
public:
enum {
NameRole = Qt::UserRole,
@@ -45,20 +46,23 @@ public:
ProgressTextRole = Qt::UserRole + 8,
InstalledRole = Qt::UserRole +9
};
- explicit ApplicationModel(QObject *parent, ApplicationBackend *backend);
+ explicit ApplicationModel(QObject* parent=0);
~ApplicationModel();
+ void setBackend(ApplicationBackend* backend);
+ ApplicationBackend* backend() const;
int rowCount(const QModelIndex &parent = QModelIndex()) const;
- int columnCount(const QModelIndex &parent = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
- void setApplications(const QList<Application*> &list);
void clear();
Application *applicationAt(const QModelIndex &index) const;
Transaction *transactionAt(const QModelIndex &index) const;
QList<Application *> applications() const;
-
+ void reloadApplications();
+
private:
+ void setApplications(const QList<Application*> &list);
+
ApplicationBackend *m_appBackend;
QList<Application *> m_apps;
QHash<Transaction *, int> m_runningTransactions;
diff --git a/installer/ApplicationModel/ApplicationProxyModel.cpp \
b/installer/ApplicationModel/ApplicationProxyModel.cpp index 4a87ddb..d9b2e78 100644
--- a/installer/ApplicationModel/ApplicationProxyModel.cpp
+++ b/installer/ApplicationModel/ApplicationProxyModel.cpp
@@ -25,6 +25,7 @@
// Own includes
#include "../Application.h"
#include "ApplicationModel.h"
+#include <QDebug>
ApplicationProxyModel::ApplicationProxyModel(QObject *parent)
: QSortFilterProxyModel(parent)
@@ -42,7 +43,6 @@ ApplicationProxyModel::~ApplicationProxyModel()
void ApplicationProxyModel::setBackend(QApt::Backend *backend)
{
m_backend = backend;
- m_apps = static_cast<ApplicationModel *>(sourceModel())->applications();
}
void ApplicationProxyModel::search(const QString &searchText)
@@ -75,6 +75,7 @@ void ApplicationProxyModel::setOriginFilter(const QString &origin)
void ApplicationProxyModel::setFiltersFromCategory(Category *category)
{
+ qDebug() << "fiuuuuuuuuu" << category;
m_andFilters = category->andFilters();
m_orFilters = category->orFilters();
m_notFilters = category->notFilters();
@@ -244,20 +245,6 @@ Application *ApplicationProxyModel::applicationAt(const \
QModelIndex &index) cons return application;
}
-void ApplicationProxyModel::reset()
-{
- beginRemoveRows(QModelIndex(), 0, m_apps.size());
- m_apps = static_cast<ApplicationModel *>(sourceModel())->applications();
- endRemoveRows();
- invalidate();
-}
-
-void ApplicationProxyModel::parentDataChanged()
-{
- m_apps = static_cast<ApplicationModel *>(sourceModel())->applications();
- invalidate();
-}
-
bool ApplicationProxyModel::lessThan(const QModelIndex &left, const QModelIndex \
&right) const {
ApplicationModel *model = static_cast<ApplicationModel *>(sourceModel());
diff --git a/installer/ApplicationModel/ApplicationProxyModel.h \
b/installer/ApplicationModel/ApplicationProxyModel.h index f97c080..7ec37a8 100644
--- a/installer/ApplicationModel/ApplicationProxyModel.h
+++ b/installer/ApplicationModel/ApplicationProxyModel.h
@@ -37,27 +37,27 @@ class Application;
class ApplicationProxyModel : public QSortFilterProxyModel
{
Q_OBJECT
+ Q_PROPERTY(QAbstractItemModel* sourceModel READ sourceModel WRITE \
setSourceModel) public:
- explicit ApplicationProxyModel(QObject *parent);
+ explicit ApplicationProxyModel(QObject *parent=0);
~ApplicationProxyModel();
+ void setShit(int) {}
void setBackend(QApt::Backend *backend);
void search(const QString &text);
void setStateFilter(QApt::Package::State state);
void setOriginFilter(const QString &origin);
- void setFiltersFromCategory(Category *category);
+ Q_SCRIPTABLE void setFiltersFromCategory(Category *category);
void setShouldShowTechnical(bool show);
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const;
Application *applicationAt(const QModelIndex &index) const;
- void reset();
protected:
bool lessThan(const QModelIndex &left, const QModelIndex &right) const;
private:
QApt::Backend *m_backend;
- QList<Application *> m_apps;
QApt::Package::State m_stateFilter;
QString m_originFilter;
@@ -69,9 +69,6 @@ private:
bool m_sortByRelevancy;
bool m_showTechnical;
-public Q_SLOTS:
- void parentDataChanged();
-
Q_SIGNALS:
void invalidated();
};
diff --git a/installer/ApplicationModel/ApplicationViewWidget.cpp \
b/installer/ApplicationModel/ApplicationViewWidget.cpp index bb1b062..575bd15 100644
--- a/installer/ApplicationModel/ApplicationViewWidget.cpp
+++ b/installer/ApplicationModel/ApplicationViewWidget.cpp
@@ -48,7 +48,8 @@ ApplicationViewWidget::ApplicationViewWidget(QWidget *parent, \
ApplicationBackend , m_detailsView(0)
{
m_searchable = true;
- m_appModel = new ApplicationModel(this, m_appBackend);
+ m_appModel = new ApplicationModel(this);
+ m_appModel->setBackend(m_appBackend);
m_proxyModel = new ApplicationProxyModel(this);
m_proxyModel->setSourceModel(m_appModel);
@@ -83,7 +84,6 @@ ApplicationViewWidget::~ApplicationViewWidget()
void ApplicationViewWidget::setBackend(QApt::Backend *backend)
{
m_backend = backend;
- m_appModel->setApplications(m_appBackend->applicationList());
m_proxyModel->setBackend(backend);
m_treeView->setSortingEnabled(true);
m_treeView->sortByColumn(0, Qt::AscendingOrder);
@@ -93,15 +93,10 @@ void ApplicationViewWidget::setBackend(QApt::Backend *backend)
void ApplicationViewWidget::reload()
{
- m_appModel->clear();
- m_proxyModel->invalidate();
- m_proxyModel->clear();
- m_proxyModel->setSourceModel(0);
-
- m_appModel->setApplications(m_appBackend->applicationList());
+ m_appModel->reloadApplications();
m_proxyModel->setSourceModel(m_appModel);
- m_proxyModel->parentDataChanged();
+ m_proxyModel->invalidate();
m_treeView->sortByColumn(0, Qt::AscendingOrder);
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic