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/localpicturesbacke= nd.cpp M +1 -0 browsingbackends/localfiles/localpictures/localpicturesbacke= nd.h M +5 -0 browsingbackends/localfiles/localvideos/localvideosbackend.c= pp M +1 -0 browsingbackends/localfiles/localvideos/localvideosbackend.h M +5 -0 browsingbackends/metadatabackends/metadatamusicbackend/metad= atamusicbackend.cpp M +1 -0 browsingbackends/metadatabackends/metadatamusicbackend/metad= atamusicbackend.h M +4 -0 browsingbackends/metadatabackends/metadatapicturebackend/met= adatapicturebackend.cpp M +1 -0 browsingbackends/metadatabackends/metadatapicturebackend/met= adatapicturebackend.h M +4 -0 browsingbackends/metadatabackends/metadatavideobackend/metad= atavideobackend.cpp M +1 -0 browsingbackends/metadatabackends/metadatavideobackend/metad= atavideobackend.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: browsingba= ckends/metadatabackends/metadatapicturebackend/metadatapicturebackend.cpp -= 053% similarity] C +20 -22 libs/mediacenter/filteredbackendsmodel.h [from: libs/mediace= nter/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/8f1efbf28c407c37a822fd7672e9f0c0a= 21ed27b diff --git a/browsingbackends/localfiles/localfilesabstractbackend.h b/brow= singbackends/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 - +#include = class LocalFilesAbstractBackend : public MediaCenter::AbstractBrowsingBack= end { 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/b= rowsingbackends/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 LocalFilesAbstractBac= kend 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 LocalFilesAbstractBacke= nd public: LocalVideosBackend(QObject *parent, const QVariantList &args); ~LocalVideosBackend(); + virtual QString backendCategory() const; = protected: virtual void initModel(); diff --git a/browsingbackends/metadatabackends/metadatamusicbackend/metadat= amusicbackend.cpp b/browsingbackends/metadatabackends/metadatamusicbackend/= metadatamusicbackend.cpp index 5d93741..f8bdf78 100644 --- a/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicb= ackend.cpp +++ b/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicb= ackend.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/metadat= amusicbackend.h b/browsingbackends/metadatabackends/metadatamusicbackend/me= tadatamusicbackend.h index a357483..b2296e8 100644 --- a/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicb= ackend.h +++ b/browsingbackends/metadatabackends/metadatamusicbackend/metadatamusicb= ackend.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/metad= atapicturebackend.cpp b/browsingbackends/metadatabackends/metadatapictureba= ckend/metadatapicturebackend.cpp index e29d887..fb100ba 100644 --- a/browsingbackends/metadatabackends/metadatapicturebackend/metadatapict= urebackend.cpp +++ b/browsingbackends/metadatabackends/metadatapicturebackend/metadatapict= urebackend.cpp @@ -45,5 +45,9 @@ void MetadataPictureBackend::init() } } = +QString MetadataPictureBackend::backendCategory() const +{ + return "image"; +} = #include "metadatapicturebackend.moc" diff --git a/browsingbackends/metadatabackends/metadatapicturebackend/metad= atapicturebackend.h b/browsingbackends/metadatabackends/metadatapictureback= end/metadatapicturebackend.h index a4fea9d..977b856 100644 --- a/browsingbackends/metadatabackends/metadatapicturebackend/metadatapict= urebackend.h +++ b/browsingbackends/metadatabackends/metadatapicturebackend/metadatapict= urebackend.h @@ -31,6 +31,7 @@ class MetadataPictureBackend : public AbstractMetadataBac= kend 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/metadat= avideobackend.cpp b/browsingbackends/metadatabackends/metadatavideobackend/= metadatavideobackend.cpp index c02b148..82e7a49 100644 --- a/browsingbackends/metadatabackends/metadatavideobackend/metadatavideob= ackend.cpp +++ b/browsingbackends/metadatabackends/metadatavideobackend/metadatavideob= ackend.cpp @@ -45,5 +45,9 @@ void MetadataVideoBackend::init() } } = +QString MetadataVideoBackend::backendCategory() const +{ + return "video"; +} = #include "metadatavideobackend.moc" diff --git a/browsingbackends/metadatabackends/metadatavideobackend/metadat= avideobackend.h b/browsingbackends/metadatabackends/metadatavideobackend/me= tadatavideobackend.h index 0a1c8f5..e900dd1 100644 --- a/browsingbackends/metadatabackends/metadatavideobackend/metadatavideob= ackend.h +++ b/browsingbackends/metadatabackends/metadatavideobackend/metadatavideob= ackend.h @@ -31,6 +31,7 @@ class MetadataVideoBackend : public AbstractMetadataBacke= nd 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 fo= r 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 =3D 0; + signals: void modelChanged(); void metadataModelChanged(); diff --git a/libs/mediacenter/backendsmodel.cpp b/libs/mediacenter/backends= model.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 roles =3D roleNames(); roles[ModelObjectRole] =3D "modelObject"; + roles[BackendCategoryRole] =3D "backendCategory"; setRoleNames(roles); } = @@ -71,6 +72,8 @@ QVariant BackendsModel::data (const QModelIndex& index, i= nt 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(backends.at(index.row()))); diff --git a/libs/mediacenter/backendsmodel.h b/libs/mediacenter/backendsmo= del.h index ed253a2..2df9285 100644 --- a/libs/mediacenter/backendsmodel.h +++ b/libs/mediacenter/backendsmodel.h @@ -35,7 +35,8 @@ class MEDIACENTER_EXPORT BackendsModel : public QAbstract= ListModel Q_OBJECT public: enum Roles { - ModelObjectRole =3D Qt::UserRole + 1 + ModelObjectRole =3D Qt::UserRole + 1, + BackendCategoryRole }; = explicit BackendsModel (QDeclarativeEngine *engine, QObject* parent = =3D 0); diff --git a/browsingbackends/metadatabackends/metadatapicturebackend/metad= atapicturebackend.cpp b/libs/mediacenter/filteredbackendsmodel.cpp similarity index 53% copy from browsingbackends/metadatabackends/metadatapicturebackend/metadata= picturebackend.cpp copy to libs/mediacenter/filteredbackendsmodel.cpp index e29d887..4426bf7 100644 --- a/browsingbackends/metadatabackends/metadatapicturebackend/metadatapict= urebackend.cpp +++ b/libs/mediacenter/filteredbackendsmodel.cpp @@ -1,7 +1,5 @@ /*************************************************************************= ** - * Copyright 2009 by Alessandro Diaferia = * - * Copyright 2011 Sinny Kumari = * - * Copyright 2007 Aaron Seigo + * Copyright 2012 by Shantanu Tushar = * * = * * 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) : QSortFilte= rProxyModel(parent) +{ = -#include +} = -MEDIACENTER_EXPORT_BROWSINGBACKEND(MetadataPictureBackend) +bool FilteredBackendsModel::filterAcceptsRow(int source_row, const QModelI= ndex& source_parent) const +{ + if (!sourceModel()) + return false; + if (m_category.isEmpty()) + return true; + return sourceModel()->data(sourceModel()->index(source_row, 0), + BackendsModel::BackendCategoryRole).toStrin= g() =3D=3D m_category; +} = -MetadataPictureBackend::MetadataPictureBackend(QObject* parent, const QVar= iantList& args) - : AbstractMetadataBackend(parent, args) +void FilteredBackendsModel::setBackendCategory(const QString& category) { + m_category =3D 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 =3D qobject_cast(model); + if (m) { + setSourceModel(m); } + emit sourceBackendsModelChanged(); } = +QObject* FilteredBackendsModel::sourceBackendsModel() +{ + return static_cast(sourceModel()); +} = -#include "metadatapicturebackend.moc" +#include "filteredbackendsmodel.moc" diff --git a/libs/mediacenter/backendsmodel.h b/libs/mediacenter/filteredba= ckendsmodel.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 = * + * Copyright 2012 by Shantanu Tushar * * = * * 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 #include "mediacenter_export.h" = -#include - -class QDeclarativeEngine; - -namespace MediaCenter { - class AbstractBrowsingBackend; -} - -class MEDIACENTER_EXPORT BackendsModel : public QAbstractListModel +class MEDIACENTER_EXPORT FilteredBackendsModel : public QSortFilterProxyMo= del { Q_OBJECT + Q_PROPERTY(QString backendCategory READ backendCategory WRITE setBacke= ndCategory NOTIFY backendCategoryChanged) + Q_PROPERTY(QObject* sourceBackendsModel READ sourceBackendsModel WRITE= setSourceBackendsModel NOTIFY sourceBackendsModelChanged) + public: - enum Roles { - ModelObjectRole =3D Qt::UserRole + 1 - }; + FilteredBackendsModel(QObject* parent =3D 0); + virtual bool filterAcceptsRow(int source_row, const QModelIndex& sourc= e_parent) const; = - explicit BackendsModel (QDeclarativeEngine *engine, QObject* parent = =3D 0); - virtual QVariant data (const QModelIndex& index, int role =3D Qt::Disp= layRole) const; - virtual int rowCount (const QModelIndex& parent =3D QModelIndex()) con= st; + 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 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 #include +#include #include = #include = #include #include +#include = #ifdef QT_MULTIMEDIA_KIT_FOUND #include @@ -70,6 +72,7 @@ MainWindow::MainWindow(QWidget *parent) : KMainWindow(par= ent) m_kdeclarative.initialize(); m_kdeclarative.setupBindings(); = + qmlRegisterType("org.kde.plasma.mediacentercomp= onents", 0, 1, "FilteredBackendsModel"); BackendsModel *backendsModel =3D new BackendsModel(view->engine(), thi= s); view->rootContext()->setContextProperty("backendsModel", backendsModel= ); PlaylistModel *playlistModel =3D new PlaylistModel(this); diff --git a/shells/newshell/package/contents/ui/mediacenter.qml b/shells/n= ewshell/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 =3D select= edBackend; visible =3D false } onVisibleChanged: {