[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