[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [plasma-mediacenter] /: Categorize backends
From:       Shantanu Tushar <shaan7in () gmail ! com>
Date:       2012-07-28 15:15:56
Message-ID: 20120728151556.6A6A3A6094 () git ! kde ! org
[Download RAW message or body]

Git commit 8f1efbf28c407c37a822fd7672e9f0c0a21ed27b by Shantanu Tushar.
Committed on 20/07/2012 at 19:33.
Pushed by sinnykumari into branch 'master'.

Categorize backends

M  +1    -2    browsingbackends/localfiles/localfilesabstractbackend.h
M  +4    -0    browsingbackends/localfiles/localmusic/localmusicbackend.cpp
M  +1    -0    browsingbackends/localfiles/localmusic/localmusicbackend.h
M  +5    -0    browsingbackends/localfiles/localpictures/localpicturesbackend.cpp
M  +1    -0    browsingbackends/localfiles/localpictures/localpicturesbackend.h
M  +5    -0    browsingbackends/localfiles/localvideos/localvideosbackend.cpp
M  +1    -0    browsingbackends/localfiles/localvideos/localvideosbackend.h
M  +5    -0    browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicbackend.cpp
 M  +1    -0    browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicbackend.h
 M  +4    -0    browsingbackends/metadatabackends/metadatapicturebackend/metadatapicturebackend.cpp
 M  +1    -0    browsingbackends/metadatabackends/metadatapicturebackend/metadatapicturebackend.h
 M  +4    -0    browsingbackends/metadatabackends/metadatavideobackend/metadatavideobackend.cpp
 M  +1    -0    browsingbackends/metadatabackends/metadatavideobackend/metadatavideobackend.h
 M  +1    -0    libs/mediacenter/CMakeLists.txt
M  +13   -0    libs/mediacenter/abstractbrowsingbackend.h
M  +3    -0    libs/mediacenter/backendsmodel.cpp
M  +2    -1    libs/mediacenter/backendsmodel.h
C  +30   -16   libs/mediacenter/filteredbackendsmodel.cpp [from: \
browsingbackends/metadatabackends/metadatapicturebackend/metadatapicturebackend.cpp - \
053% similarity] C  +20   -22   libs/mediacenter/filteredbackendsmodel.h [from: \
libs/mediacenter/backendsmodel.h - 059% similarity] M  +3    -0    \
shells/newshell/mainwindow.cpp M  +6    -1    \
shells/newshell/package/contents/ui/mediacenter.qml

http://commits.kde.org/plasma-mediacenter/8f1efbf28c407c37a822fd7672e9f0c0a21ed27b

diff --git a/browsingbackends/localfiles/localfilesabstractbackend.h \
b/browsingbackends/localfiles/localfilesabstractbackend.h index 93b2d71..b9afcf8 \
                100644
--- a/browsingbackends/localfiles/localfilesabstractbackend.h
+++ b/browsingbackends/localfiles/localfilesabstractbackend.h
@@ -21,8 +21,7 @@
 #ifndef LOCALFILESABSTRACTBACKEND_H
 #define LOCALFILESABSTRACTBACKEND_H
 
-#include <mediacenter/abstractbrowsingbackend.h>
-
+#include <libs/mediacenter/abstractbrowsingbackend.h>
 
 class LocalFilesAbstractBackend : public MediaCenter::AbstractBrowsingBackend
 {
diff --git a/browsingbackends/localfiles/localmusic/localmusicbackend.cpp \
b/browsingbackends/localfiles/localmusic/localmusicbackend.cpp index 9bb13f1..d06881c \
                100644
--- a/browsingbackends/localfiles/localmusic/localmusicbackend.cpp
+++ b/browsingbackends/localfiles/localmusic/localmusicbackend.cpp
@@ -36,3 +36,7 @@ void LocalMusicBackend::initModel()
     setModel(new LocalMusicModel(this));
 }
 
+QString LocalMusicBackend::backendCategory() const
+{
+    return "music";
+}
diff --git a/browsingbackends/localfiles/localmusic/localmusicbackend.h \
b/browsingbackends/localfiles/localmusic/localmusicbackend.h index d167f41..a49436d \
                100644
--- a/browsingbackends/localfiles/localmusic/localmusicbackend.h
+++ b/browsingbackends/localfiles/localmusic/localmusicbackend.h
@@ -27,6 +27,7 @@ class LocalMusicBackend : public LocalFilesAbstractBackend
 public:
     LocalMusicBackend(QObject *parent, const QVariantList &args);
     ~LocalMusicBackend();
+    virtual QString backendCategory() const;
 
 protected:
     virtual void initModel();
diff --git a/browsingbackends/localfiles/localpictures/localpicturesbackend.cpp \
b/browsingbackends/localfiles/localpictures/localpicturesbackend.cpp index \
                3090ace..861a9fa 100644
--- a/browsingbackends/localfiles/localpictures/localpicturesbackend.cpp
+++ b/browsingbackends/localfiles/localpictures/localpicturesbackend.cpp
@@ -34,3 +34,8 @@ void LocalPicturesBackend::initModel()
 {
     setModel(new LocalPicturesModel(this));
 }
+
+QString LocalPicturesBackend::backendCategory() const
+{
+    return "image";
+}
diff --git a/browsingbackends/localfiles/localpictures/localpicturesbackend.h \
b/browsingbackends/localfiles/localpictures/localpicturesbackend.h index \
                c8dd8f1..a5655cd 100644
--- a/browsingbackends/localfiles/localpictures/localpicturesbackend.h
+++ b/browsingbackends/localfiles/localpictures/localpicturesbackend.h
@@ -27,6 +27,7 @@ class LocalPicturesBackend : public LocalFilesAbstractBackend
 public:
     LocalPicturesBackend(QObject *parent, const QVariantList &args);
     ~LocalPicturesBackend();
+    virtual QString backendCategory() const;
 
 protected:
     virtual void initModel();
diff --git a/browsingbackends/localfiles/localvideos/localvideosbackend.cpp \
b/browsingbackends/localfiles/localvideos/localvideosbackend.cpp index \
                b4a9cf0..cbf354b 100644
--- a/browsingbackends/localfiles/localvideos/localvideosbackend.cpp
+++ b/browsingbackends/localfiles/localvideos/localvideosbackend.cpp
@@ -34,3 +34,8 @@ void LocalVideosBackend::initModel()
 {
     setModel(new LocalVideosModel(this));
 }
+
+QString LocalVideosBackend::backendCategory() const
+{
+    return "video";
+}
diff --git a/browsingbackends/localfiles/localvideos/localvideosbackend.h \
b/browsingbackends/localfiles/localvideos/localvideosbackend.h index 896f7e0..132ec64 \
                100644
--- a/browsingbackends/localfiles/localvideos/localvideosbackend.h
+++ b/browsingbackends/localfiles/localvideos/localvideosbackend.h
@@ -27,6 +27,7 @@ class LocalVideosBackend : public LocalFilesAbstractBackend
 public:
     LocalVideosBackend(QObject *parent, const QVariantList &args);
     ~LocalVideosBackend();
+    virtual QString backendCategory() const;
 
 protected:
     virtual void initModel();
diff --git a/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicbackend.cpp \
b/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicbackend.cpp \
                index 5d93741..f8bdf78 100644
--- a/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicbackend.cpp
+++ b/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicbackend.cpp
@@ -129,4 +129,9 @@ QObject* MetadataMusicBackend::musicModel() const
     return m_musicModel;
 }
 
+QString MetadataMusicBackend::backendCategory() const
+{
+    return "music";
+}
+
 #include "metadatamusicbackend.moc"
diff --git a/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicbackend.h \
b/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicbackend.h index \
                a357483..b2296e8 100644
--- a/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicbackend.h
+++ b/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicbackend.h
@@ -44,6 +44,7 @@ public:
     virtual ~MetadataMusicBackend();
 
     virtual void init();
+    virtual QString backendCategory() const;
 
     virtual QString mediaBrowserOverride() const;
 
diff --git a/browsingbackends/metadatabackends/metadatapicturebackend/metadatapicturebackend.cpp \
b/browsingbackends/metadatabackends/metadatapicturebackend/metadatapicturebackend.cpp \
                index e29d887..fb100ba 100644
--- a/browsingbackends/metadatabackends/metadatapicturebackend/metadatapicturebackend.cpp
                
+++ b/browsingbackends/metadatabackends/metadatapicturebackend/metadatapicturebackend.cpp
 @@ -45,5 +45,9 @@ void MetadataPictureBackend::init()
     }
 }
 
+QString MetadataPictureBackend::backendCategory() const
+{
+    return "image";
+}
 
 #include "metadatapicturebackend.moc"
diff --git a/browsingbackends/metadatabackends/metadatapicturebackend/metadatapicturebackend.h \
b/browsingbackends/metadatabackends/metadatapicturebackend/metadatapicturebackend.h \
                index a4fea9d..977b856 100644
--- a/browsingbackends/metadatabackends/metadatapicturebackend/metadatapicturebackend.h
                
+++ b/browsingbackends/metadatabackends/metadatapicturebackend/metadatapicturebackend.h
 @@ -31,6 +31,7 @@ class MetadataPictureBackend : public AbstractMetadataBackend
 public:
     MetadataPictureBackend (QObject* parent, const QVariantList& args);
     virtual ~MetadataPictureBackend();
+    virtual QString backendCategory() const;
 
 public Q_SLOTS:
     virtual void init();
diff --git a/browsingbackends/metadatabackends/metadatavideobackend/metadatavideobackend.cpp \
b/browsingbackends/metadatabackends/metadatavideobackend/metadatavideobackend.cpp \
                index c02b148..82e7a49 100644
--- a/browsingbackends/metadatabackends/metadatavideobackend/metadatavideobackend.cpp
+++ b/browsingbackends/metadatabackends/metadatavideobackend/metadatavideobackend.cpp
@@ -45,5 +45,9 @@ void MetadataVideoBackend::init()
     }
 }
 
+QString MetadataVideoBackend::backendCategory() const
+{
+    return "video";
+}
 
 #include "metadatavideobackend.moc"
diff --git a/browsingbackends/metadatabackends/metadatavideobackend/metadatavideobackend.h \
b/browsingbackends/metadatabackends/metadatavideobackend/metadatavideobackend.h index \
                0a1c8f5..e900dd1 100644
--- a/browsingbackends/metadatabackends/metadatavideobackend/metadatavideobackend.h
+++ b/browsingbackends/metadatabackends/metadatavideobackend/metadatavideobackend.h
@@ -31,6 +31,7 @@ class MetadataVideoBackend : public AbstractMetadataBackend
 public:
     MetadataVideoBackend (QObject* parent, const QVariantList& args);
     virtual ~MetadataVideoBackend();
+    virtual QString backendCategory() const;
 
 public Q_SLOTS:
     virtual void init();
diff --git a/libs/mediacenter/CMakeLists.txt b/libs/mediacenter/CMakeLists.txt
index b275861..8617470 100644
--- a/libs/mediacenter/CMakeLists.txt
+++ b/libs/mediacenter/CMakeLists.txt
@@ -1,4 +1,5 @@
 set (plasmamediacenter_SRCS
+    filteredbackendsmodel.cpp
     mediacenter.cpp
     abstractbrowsingbackend.cpp
     backendsmodel.cpp
diff --git a/libs/mediacenter/abstractbrowsingbackend.h \
b/libs/mediacenter/abstractbrowsingbackend.h index 4661c37..8067c3a 100644
--- a/libs/mediacenter/abstractbrowsingbackend.h
+++ b/libs/mediacenter/abstractbrowsingbackend.h
@@ -205,8 +205,21 @@ public:
      */
     Q_INVOKABLE virtual bool supportsSearch() const;
 
+    /**
+     * This method is called by the UI when the user requests to search for a media
+     *
+     * @param searchTerm string entered by the user
+     */
     Q_INVOKABLE virtual void search(const QString &searchTerm);
 
+    /**
+     * This method is called by the PMC runtime to find out which category should
+     * this backend be placed in
+     *
+     * @return one of these strings - "music", "image", "video", "other"
+     */
+    Q_INVOKABLE virtual QString backendCategory() const = 0;
+
 signals:
     void modelChanged();
     void metadataModelChanged();
diff --git a/libs/mediacenter/backendsmodel.cpp b/libs/mediacenter/backendsmodel.cpp
index 3a59476..99c4e21 100644
--- a/libs/mediacenter/backendsmodel.cpp
+++ b/libs/mediacenter/backendsmodel.cpp
@@ -38,6 +38,7 @@ BackendsModel::BackendsModel (QDeclarativeEngine* engine, QObject* \
parent) : QAb  
     QHash<int, QByteArray> roles = roleNames();
     roles[ModelObjectRole] = "modelObject";
+    roles[BackendCategoryRole] = "backendCategory";
     setRoleNames(roles);
 }
 
@@ -71,6 +72,8 @@ QVariant BackendsModel::data (const QModelIndex& index, int role) \
const  return backends.at(index.row())->name();
         case Qt::DecorationRole:
             return backends.at(index.row())->icon();
+        case BackendCategoryRole:
+            return backends.at(index.row())->backendCategory();
         case ModelObjectRole:
             QVariant ptr;
             ptr.setValue(qobject_cast<QObject*>(backends.at(index.row())));
diff --git a/libs/mediacenter/backendsmodel.h b/libs/mediacenter/backendsmodel.h
index ed253a2..2df9285 100644
--- a/libs/mediacenter/backendsmodel.h
+++ b/libs/mediacenter/backendsmodel.h
@@ -35,7 +35,8 @@ class MEDIACENTER_EXPORT BackendsModel : public QAbstractListModel
     Q_OBJECT
 public:
     enum Roles {
-        ModelObjectRole = Qt::UserRole + 1
+        ModelObjectRole = Qt::UserRole + 1,
+        BackendCategoryRole
     };
 
     explicit BackendsModel (QDeclarativeEngine *engine, QObject* parent = 0);
diff --git a/browsingbackends/metadatabackends/metadatapicturebackend/metadatapicturebackend.cpp \
b/libs/mediacenter/filteredbackendsmodel.cpp similarity index 53%
copy from browsingbackends/metadatabackends/metadatapicturebackend/metadatapicturebackend.cpp
 copy to libs/mediacenter/filteredbackendsmodel.cpp
index e29d887..4426bf7 100644
--- a/browsingbackends/metadatabackends/metadatapicturebackend/metadatapicturebackend.cpp
                
+++ b/libs/mediacenter/filteredbackendsmodel.cpp
@@ -1,7 +1,5 @@
 /***************************************************************************
- *   Copyright 2009 by Alessandro Diaferia <alediaferia@gmail.com>         *
- *   Copyright 2011 Sinny Kumari <ksinny@gmail.com>                        *
- *   Copyright 2007 Aaron Seigo <aseigo@kde.org>
+ *   Copyright 2012 by Shantanu Tushar <shaan7in@gmail.com>                *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
@@ -19,31 +17,47 @@
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA .        *
  ***************************************************************************/
 
+#include "filteredbackendsmodel.h"
+#include "backendsmodel.h"
 
-#include "metadatapicturebackend.h"
-
-#include "metadatapicturemodel.h"
+FilteredBackendsModel::FilteredBackendsModel(QObject *parent) : \
QSortFilterProxyModel(parent) +{
 
-#include <QDebug>
+}
 
-MEDIACENTER_EXPORT_BROWSINGBACKEND(MetadataPictureBackend)
+bool FilteredBackendsModel::filterAcceptsRow(int source_row, const QModelIndex& \
source_parent) const +{
+    if (!sourceModel())
+        return false;
+    if (m_category.isEmpty())
+        return true;
+    return sourceModel()->data(sourceModel()->index(source_row, 0),
+                               BackendsModel::BackendCategoryRole).toString()  == \
m_category; +}
 
-MetadataPictureBackend::MetadataPictureBackend(QObject* parent, const QVariantList& \
                args)
-    : AbstractMetadataBackend(parent, args)
+void FilteredBackendsModel::setBackendCategory(const QString& category)
 {
+    m_category = category;
+    emit backendCategoryChanged();
 }
 
-MetadataPictureBackend::~MetadataPictureBackend()
+QString FilteredBackendsModel::backendCategory() const
 {
+    return m_category;
 }
 
-void MetadataPictureBackend::init()
+void FilteredBackendsModel::setSourceBackendsModel(QObject* model)
 {
-    AbstractMetadataBackend::init();
-    if (metadataModel()) {
-        setModel(new MetadataPictureModel(this));
+    QAbstractItemModel *m = qobject_cast<QAbstractItemModel*>(model);
+    if (m) {
+        setSourceModel(m);
     }
+    emit sourceBackendsModelChanged();
 }
 
+QObject* FilteredBackendsModel::sourceBackendsModel()
+{
+    return static_cast<QObject*>(sourceModel());
+}
 
-#include "metadatapicturebackend.moc"
+#include "filteredbackendsmodel.moc"
diff --git a/libs/mediacenter/backendsmodel.h \
b/libs/mediacenter/filteredbackendsmodel.h similarity index 59%
copy from libs/mediacenter/backendsmodel.h
copy to libs/mediacenter/filteredbackendsmodel.h
index ed253a2..1fe7956 100644
--- a/libs/mediacenter/backendsmodel.h
+++ b/libs/mediacenter/filteredbackendsmodel.h
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright 2012 Sinny Kumari <ksinny@gmail.com>                        *
+ *   Copyright 2012 by Shantanu Tushar <shaan7in@gmail.com>         *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
@@ -17,35 +17,33 @@
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA .        *
  ***************************************************************************/
 
-#ifndef BACKENDSMODEL_H
-#define BACKENDSMODEL_H
+#ifndef FILTEREDBACKENDSMODEL_H
+#define FILTEREDBACKENDSMODEL_H
 
+#include <QtGui/QSortFilterProxyModel>
 #include "mediacenter_export.h"
 
-#include <QAbstractItemModel>
-
-class QDeclarativeEngine;
-
-namespace MediaCenter {
-    class AbstractBrowsingBackend;
-}
-
-class MEDIACENTER_EXPORT BackendsModel : public QAbstractListModel
+class MEDIACENTER_EXPORT FilteredBackendsModel : public QSortFilterProxyModel
 {
     Q_OBJECT
+    Q_PROPERTY(QString backendCategory READ backendCategory WRITE setBackendCategory \
NOTIFY backendCategoryChanged) +    Q_PROPERTY(QObject* sourceBackendsModel READ \
sourceBackendsModel WRITE setSourceBackendsModel NOTIFY sourceBackendsModelChanged) +
 public:
-    enum Roles {
-        ModelObjectRole = Qt::UserRole + 1
-    };
+    FilteredBackendsModel(QObject* parent = 0);
+    virtual bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) \
const;  
-    explicit BackendsModel (QDeclarativeEngine *engine, QObject* parent = 0);
-    virtual QVariant data (const QModelIndex& index, int role = Qt::DisplayRole) \
                const;
-    virtual int rowCount (const QModelIndex& parent = QModelIndex()) const;
+    QString backendCategory() const;
+    void setBackendCategory(const QString &category);
+    QObject *sourceBackendsModel();
+    void setSourceBackendsModel(QObject *model);
 
-private:
-    bool loadBrowsingBackend(MediaCenter::AbstractBrowsingBackend *backend, \
QDeclarativeEngine *engine); +signals:
+    void backendCategoryChanged();
+    void sourceBackendsModelChanged();
 
-    QList<MediaCenter::AbstractBrowsingBackend*> backends;
+private:
+    QString m_category;
 };
 
-#endif // BACKENDSMODEL_H
+#endif // FILTEREDBACKENDSMODEL_H
diff --git a/shells/newshell/mainwindow.cpp b/shells/newshell/mainwindow.cpp
index a715278..873329a 100644
--- a/shells/newshell/mainwindow.cpp
+++ b/shells/newshell/mainwindow.cpp
@@ -21,12 +21,14 @@
 
 #include <libs/mediacenter/backendsmodel.h>
 #include <libs/mediacenter/playlistmodel.h>
+#include <libs/mediacenter/filteredbackendsmodel.h>
 #include <Plasma/Package>
 
 #include <KDE/KCmdLineArgs>
 
 #include <QtDeclarative/QDeclarativeView>
 #include <QtDeclarative/QDeclarativeContext>
+#include <qdeclarative.h>
 
 #ifdef QT_MULTIMEDIA_KIT_FOUND
 #include <QtMultimediaKit/QVideoWidget>
@@ -70,6 +72,7 @@ MainWindow::MainWindow(QWidget *parent) : KMainWindow(parent)
     m_kdeclarative.initialize();
     m_kdeclarative.setupBindings();
 
+    qmlRegisterType<FilteredBackendsModel>("org.kde.plasma.mediacentercomponents", \
                0, 1, "FilteredBackendsModel");
     BackendsModel *backendsModel = new BackendsModel(view->engine(), this);
     view->rootContext()->setContextProperty("backendsModel", backendsModel);
     PlaylistModel *playlistModel = new PlaylistModel(this);
diff --git a/shells/newshell/package/contents/ui/mediacenter.qml \
b/shells/newshell/package/contents/ui/mediacenter.qml index bb0ebbb..1091cc4 100644
--- a/shells/newshell/package/contents/ui/mediacenter.qml
+++ b/shells/newshell/package/contents/ui/mediacenter.qml
@@ -30,6 +30,11 @@ Rectangle {
         GradientStop { position: 1.0; color: "#000000" }
     }
 
+    MediaCenterComponents.FilteredBackendsModel {
+        id: filteredBackendsModel
+        sourceBackendsModel: backendsModel
+    }
+
     MediaCenterComponents.RuntimeData {
         id: runtimeData
 
@@ -184,7 +189,7 @@ Rectangle {
         anchors.fill: parent
         focus: visible
 
-        model: backendsModel
+        model: filteredBackendsModel
         metaData: mediaPlayer.metaData
         onBackendSelected: { runtimeData.currentBrowsingBackend = selectedBackend; \
visible = false }  onVisibleChanged: {


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic