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

List:       kde-commits
Subject:    playground/base/plasma/MediaCenterComponents
From:       Lukas Appelhans <l.appelhans () gmx ! de>
Date:       2010-12-06 17:52:05
Message-ID: 20101206175205.7B2D1AC8A4 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1204312 by lappelhans:

Finally this is my first CodeIn Project:
-Remove all the Mediabrowser-c++-view
-Add a loader for a qml-view
-add a basic, yet not 100% finished, qml-view

It needs some polishing here and there, but the basics are there :)


 M  +0 -1      CMakeLists.txt  
 M  +5 -4      applets/mediabrowser/CMakeLists.txt  
 D             applets/mediabrowser/abstractmediaitemview.cpp  
 D             applets/mediabrowser/abstractmediaitemview.h  
 D             applets/mediabrowser/blur.cpp  
 M  +1 -5      applets/mediabrowser/browsingbackends/localfiles/localfilesabstractbackend.cpp \
  M  +0 -1      applets/mediabrowser/browsingbackends/localfiles/localfilesabstractbackend.h \
  A             applets/mediabrowser/filegrid.qml   [License: UNKNOWN]
 D             applets/mediabrowser/fileviewitem.cpp  
 D             applets/mediabrowser/fileviewitem.h  
 D             applets/mediabrowser/gridview.cpp  
 D             applets/mediabrowser/gridview.h  
 D             applets/mediabrowser/listview.cpp  
 D             applets/mediabrowser/listview.h  
 M  +35 -68    applets/mediabrowser/mediabrowser.cpp  
 M  +5 -8      applets/mediabrowser/mediabrowser.h  
 M  +21 -1     libs/mediacenter/abstractbrowsingbackend.cpp  
 M  +19 -9     libs/mediacenter/abstractbrowsingbackend.h  
 A             libs/mediacenter/widgets/blur.cpp   \
applets/mediabrowser/blur.cpp#1202417 [License: LGPL (v2)]


--- trunk/playground/base/plasma/MediaCenterComponents/CMakeLists.txt \
#1204311:1204312 @@ -9,7 +9,6 @@
     ${CMAKE_CURRENT_SOURCE_DIR}
     ${CMAKE_BINARY_DIR}
     ${KDE4_INCLUDES}
-    applets/mediabrowser/
     utils/
     widgets/
     libs/
--- trunk/playground/base/plasma/MediaCenterComponents/applets/mediabrowser/CMakeLists.txt \
#1204311:1204312 @@ -1,9 +1,5 @@
 set(mediabrowser_SRCS
 mediabrowser.cpp
-abstractmediaitemview.cpp
-listview.cpp
-gridview.cpp
-fileviewitem.cpp
 )
 
 # Now make sure all files get to the right place
@@ -14,6 +10,7 @@
                       ${KDE4_KIO_LIBS}
 		      ${KDE4_KFILE_LIBS}
                       ${KDE4_NEPOMUK_LIBS}
+                      ${QT_QTDECLARATIVE_LIBRARY}
                       mediacenterlibs
                         )
  
@@ -23,4 +20,8 @@
 install(FILES plasma-applet-mediabrowser.desktop
         DESTINATION ${SERVICES_INSTALL_DIR})
 
+install(FILES
+filegrid.qml
+DESTINATION ${DATA_INSTALL_DIR}/plasma-mediacenter/declarative/)
+
 add_subdirectory(browsingbackends)
--- trunk/playground/base/plasma/MediaCenterComponents/applets/mediabrowser/browsingbackends/localfiles/localfilesabstractbackend.cpp \
#1204311:1204312 @@ -54,11 +54,6 @@
 
 }
 
-QAbstractItemModel* LocalFilesAbstractBackend::model()
-{
-    return m_model;
-}
-
 void LocalFilesAbstractBackend::setBackendName(const QString& name)
 {
     m_backendName = name;
@@ -117,6 +112,7 @@
 
     if (!m_model) {
         m_model = new KDirModel(this);
+        setModel(m_model);
         initModel();
     }
 }
--- trunk/playground/base/plasma/MediaCenterComponents/applets/mediabrowser/browsingbackends/localfiles/localfilesabstractbackend.h \
#1204311:1204312 @@ -34,7 +34,6 @@
     LocalFilesAbstractBackend(const QString &name, QObject* parent, const \
QVariantList& args);  virtual ~LocalFilesAbstractBackend();
 
-    QAbstractItemModel* model();
     virtual void createConfigurationInterface(KConfigDialog* parent);
     virtual void init();
 
--- trunk/playground/base/plasma/MediaCenterComponents/applets/mediabrowser/mediabrowser.cpp \
#1204311:1204312 @@ -17,9 +17,6 @@
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA .        *
  ***************************************************************************/
 #include "mediabrowser.h"
-#include "listview.h"
-#include "gridview.h"
-#include "abstractmediaitemview.h"
 
 #include <mediacenter/abstractbrowsingbackend.h>
 #include <mediacenter/browsergesture.h>
@@ -28,6 +25,10 @@
 #include <QWidget>
 #include <QKeyEvent>
 #include <QGraphicsLinearLayout>
+#include <QtDeclarative/QDeclarativeEngine>
+#include <QtDeclarative/QDeclarativeComponent>
+#include <QtDeclarative/QDeclarativeContext>
+#include <QtDeclarative/qdeclarative.h>
 
 #include <KDirModel>
 #include <KConfigDialog>
@@ -37,10 +38,12 @@
 #include <KDebug>
 #include <KDirLister>
 
+QML_DECLARE_TYPE(MediaCenter::AbstractBrowsingBackend)
+
 MediaBrowser::MediaBrowser(QObject *parent, const QVariantList &args)
     : MediaCenter::Browser(parent, args),
     m_view(0),
-    m_model(0),
+    m_backend(0),
     m_layout(new QGraphicsLinearLayout(Qt::Vertical))
 {
     setAspectRatioMode(Plasma::IgnoreAspectRatio);
@@ -48,6 +51,8 @@
 
     setEnableToolbar(true);
     toolbar()->setNavigationControls(MediaCenter::NavigationToolbar::BackwardControl \
| MediaCenter::NavigationToolbar::ViewModeControl); +    
+    qmlRegisterType<MediaCenter::AbstractBrowsingBackend>("MediaCenter", 0, 1, \
"AbstractBrowsingBackend");  }
 
 MediaBrowser::~MediaBrowser()
@@ -55,16 +60,16 @@
 
 void MediaBrowser::showInstalledBackends()
 {
-//    delete m_model;
+//    delete m_backend->model();
 //    m_model = new StartupModel(this);
-//    m_view->setModel(m_model);
+//    m_view->setModel(m_backend->model());
 
 //    QmlHomeView *homeView = new QmlHomeView(this);
 //    QGraphicsLinearLayout *layout = \
static_cast<QGraphicsLinearLayout*>(this->layout());  //    \
layout->addItem(homeView);  
 //    homeView->setQmlPath(KStandardDirs::locate("data", \
                "plasma-mediacenter/declarative/homeview.qml"));
-//    homeView->setModel(m_model);
+//    homeView->setModel(m_backend->model());
 }
 
 void MediaBrowser::init()
@@ -78,23 +83,14 @@
 void MediaBrowser::createView()
 {
     delete m_view;
-    kDebug() << "view deleted";
+    m_view = new Plasma::DeclarativeWidget(this);
 
-    if (m_viewType == "list") {
-        m_view = new ListView(this);
-    } else {
-        m_view = new GridView(this);
-    }
+    m_view->setQmlPath(KStandardDirs::locate("data", \
"plasma-mediacenter/declarative/filegrid.qml"));  
-    m_view->setDrawBlurredText(m_blurred);
-    m_view->setFocus(Qt::OtherFocusReason);
-
-    if (m_model) {
-        m_view->setModel(m_model);
-//        m_view->generateItems();
+    if (m_backend) {
+        m_view->engine()->rootContext()->setContextProperty("fileBackend", \
m_backend);  }
-
-    connect (this, SIGNAL(browseHistoryBackRequest()), m_view, SLOT(goPrevious()));
+    /*connect (this, SIGNAL(browseHistoryBackRequest()), m_view, \
                SLOT(goPrevious()));
     connect (m_view, SIGNAL(mediasActivated(QList<MediaCenter::Media>)), this, \
                SIGNAL(mediasActivated(QList<MediaCenter::Media>)));
     connect (m_view, SIGNAL(mediasListChanged(QList<MediaCenter::Media>)), this, \
                SIGNAL(mediasListChanged(QList<MediaCenter::Media>)));
     connect (m_view, SIGNAL(mediaActivated(const MediaCenter::Media&)), this, \
SIGNAL(mediaActivated(const MediaCenter::Media&))); @@ -102,6 +98,7 @@
     connect (m_view, SIGNAL(mediaSelected(MediaCenter::Media)), this, \
                SLOT(selectedMediasAdd(MediaCenter::Media)));
     connect (m_view, SIGNAL(mediaUnselected(MediaCenter::Media)), this, \
                SLOT(selectedMediasRemove(MediaCenter::Media)));
     connect (m_view, SIGNAL(directoryChanged()), this, SLOT(clearSelectedMedias()));
+// //     */
 
     QGraphicsLinearLayout *layout = \
static_cast<QGraphicsLinearLayout*>(this->layout());  layout->addItem(m_view);
@@ -109,7 +106,7 @@
 
 void MediaBrowser::createConfigurationInterface(KConfigDialog *parent)
 {
-    QWidget *generalConfig = new QWidget(parent);
+    /*QWidget *generalConfig = new QWidget(parent);
     uiGeneral.setupUi(generalConfig);
 
     parent->addPage(generalConfig, i18n("Browser appearance"), \
"preferences-desktop-display"); @@ -119,7 +116,7 @@
         uiGeneral.gridRadio->setChecked(true);
     }
 
-    uiGeneral.blurredTextCheckBox->setChecked(m_blurred);
+    uiGeneral.blurredTextCheckBox->setChecked(m_blurred);*/
 
     if (currentBrowsingBackend()) {
         if (currentBrowsingBackend()->hasConfigurationInterface()) {
@@ -132,15 +129,15 @@
 
 void MediaBrowser::loadConfiguration()
 {
-    KConfigGroup cf = config();
+    //KConfigGroup cf = config();
 
-    m_viewType = cf.readEntry("ViewType", "list");
-    m_blurred = cf.readEntry("BlurredText", true);
+    //m_viewType = cf.readEntry("ViewType", "list");
+    //m_blurred = cf.readEntry("BlurredText", true);
 }
 
 void MediaBrowser::configAccepted()
 {
-    KConfigGroup cf = config();
+   /*KConfigGroup cf = config();
     kDebug() << cf.name();
 
     QString type;
@@ -159,9 +156,9 @@
     bool blurred = uiGeneral.blurredTextCheckBox->isChecked();
     if (blurred != m_blurred) {
         m_blurred = blurred;
-        m_view->setDrawBlurredText(m_blurred);
+        //m_view->setDrawBlurredText(m_blurred);
         cf.writeEntry("BlurredText", m_blurred);
-    }
+    }*/
 
 }
 
@@ -169,25 +166,22 @@
 {
     kDebug() << "loading browsing backend";
 
-    m_view->setModel( 0 );
-    backend->setParent(this);
-    backend->init();
-    m_model = backend->model();
-    m_view->setModel( m_model );
+    m_backend = backend;
 
-    emit browsingModeChanged( backend->requiredMode() );
+    m_backend->setParent(this);
+    m_backend->init();
+    m_view->engine()->rootContext()->setContextProperty("fileBackend", m_backend);
+
+    emit browsingModeChanged( m_backend->requiredMode() );
 }
 
 void MediaBrowser::showStartupState()
 {
-    //Calling directly showInstalledBackends makes PMC crash on startup
-    //m_model = new StartupModel(this);
-    //m_view->setModel(m_model);
 }
 
 KUrl MediaBrowser::currentUrl() const
 {
-    KDirModel *modeldir = qobject_cast<KDirModel*>(m_model);
+    KDirModel *modeldir = qobject_cast<KDirModel*>(m_backend->model());
     if (!modeldir || !modeldir->dirLister()) {
         return KUrl();
     }
@@ -196,7 +190,7 @@
 
 void MediaBrowser::openUrl(const KUrl &url)
 {
-    KDirModel *modeldir = qobject_cast<KDirModel*>(m_model);
+    KDirModel *modeldir = qobject_cast<KDirModel*>(m_backend->model());
     if (modeldir) {
         modeldir->dirLister()->openUrl(url);
     }
@@ -204,7 +198,7 @@
 
 void MediaBrowser::listMediaInDirectory()
 {
-    m_view->listMediaInDirectory();
+    //m_view->listMediaInDirectory();
 }
 
 void MediaBrowser::selectedMediasAdd(const MediaCenter::Media &media)
@@ -234,32 +228,5 @@
     emit selectedMediasChanged(m_selectedMedias);
 }
 
-void MediaBrowser::gestureEvent(MediaCenter::BrowserGesture *bGesture)
-{
-    if (!bGesture) {
-        return;
-    }
 
-    if (bGesture->activeAction() == MediaCenter::BrowserGesture::BrowseLeftAction) {
-        QKeyEvent keyEvent(QEvent::KeyPress, Qt::Key_Left, Qt::NoModifier);
-        qApp->sendEvent(m_view, &keyEvent);
-    } else if (bGesture->activeAction() == \
                MediaCenter::BrowserGesture::BrowseRightAction) {
-        QKeyEvent keyEvent(QEvent::KeyPress, Qt::Key_Right, Qt::NoModifier);
-        qApp->sendEvent(m_view, &keyEvent);
-    } else if (bGesture->activeAction() == \
                MediaCenter::BrowserGesture::BrowseUpAction) {
-        QKeyEvent keyEvent(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier);
-        qApp->sendEvent(m_view, &keyEvent);
-    } else if (bGesture->activeAction() == \
                MediaCenter::BrowserGesture::BrowseDownAction) {
-        QKeyEvent keyEvent(QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier);
-        qApp->sendEvent(m_view, &keyEvent);
-    } else if (bGesture->activeAction() == \
                MediaCenter::BrowserGesture::ActivateAction) {
-        QKeyEvent keyEvent(QKeyEvent::KeyPress, Qt::Key_Return, Qt::NoModifier);
-        qApp->sendEvent(m_view, &keyEvent);
-    }
-}
-
-void MediaBrowser::createQmlHomeView()
-{}
-
-
 K_EXPORT_PLASMA_APPLET(mediabrowser, MediaBrowser)
--- trunk/playground/base/plasma/MediaCenterComponents/applets/mediabrowser/mediabrowser.h \
#1204311:1204312 @@ -20,8 +20,9 @@
 #define MEDIABROWSER_H
 
 #include <mediacenter/browser.h>
+#include <plasma/widgets/declarativewidget.h>
 
-#include "ui_general.h"
+//#include "ui_general.h"
 
 class QGraphicsLinearLayout;
 class AbstractMediaItemView;
@@ -56,9 +57,6 @@
     void selectedMediasRemove(const MediaCenter::Media &media);
     void clearSelectedMedias();
 
-protected:
-    void gestureEvent(MediaCenter::BrowserGesture *);
-
 signals:
     void mediasListChanged(const QList<MediaCenter::Media> &list);
 
@@ -67,10 +65,10 @@
     void pictureDataEngine();
 
 private:
-    AbstractMediaItemView *m_view;
-    Ui::General uiGeneral;
+    Plasma::DeclarativeWidget * m_view;
+    //Ui::General uiGeneral;
 
-    QAbstractItemModel *m_model;
+    MediaCenter::AbstractBrowsingBackend *m_backend;
 
     bool m_blurred;
     QString m_viewType;
@@ -86,7 +84,6 @@
     void loadConfiguration();
     void configAccepted();
     //void slotIndexActivated(const QModelIndex &);
-    void createQmlHomeView();
 
 };
 
--- trunk/playground/base/plasma/MediaCenterComponents/libs/mediacenter/abstractbrowsingbackend.cpp \
#1204311:1204312 @@ -32,7 +32,8 @@
     AbstractBrowsingBackendPrivate(KService::Ptr service, AbstractBrowsingBackend \
*q) :  backendInfo(service),
     q(q),
-    cfInterface(false)
+    cfInterface(false),
+    model(0)
     {}
 
     AbstractBrowsingBackend *q;
@@ -40,19 +41,38 @@
     KPluginInfo backendInfo;
     MediaCenter::Mode requiredMode;
     BrowsingType browsingType;
+    QAbstractItemModel * model;
 };
 
 AbstractBrowsingBackend::AbstractBrowsingBackend(QObject *parent, const QVariantList \
&args) : QObject(parent),  d(new \
AbstractBrowsingBackendPrivate(KService::serviceByStorageId(args.count() ? \
args.first().toString() : QString()), this))  {
     Q_UNUSED(args);
+    qRegisterMetaType<QAbstractItemModel*>("QAbstractItemModel*");
 }
 
+AbstractBrowsingBackend::AbstractBrowsingBackend(QObject * parent)
+  : QObject(parent),
+    d(new AbstractBrowsingBackendPrivate(KService::serviceByStorageId(QString()), \
this)) +{
+}
+
 AbstractBrowsingBackend::~AbstractBrowsingBackend()
 {
     delete d;
 }
 
+void AbstractBrowsingBackend::setModel(QAbstractItemModel * model)
+{
+    d->model = model;
+    emit modelChanged(d->model);
+}
+
+QObject * AbstractBrowsingBackend::model()
+{
+    return (QObject*)(d->model);
+}
+
 bool AbstractBrowsingBackend::hasConfigurationInterface() const
 {
     return d->cfInterface;
--- trunk/playground/base/plasma/MediaCenterComponents/libs/mediacenter/abstractbrowsingbackend.h \
#1204311:1204312 @@ -49,6 +49,8 @@
 class MEDIACENTER_EXPORT AbstractBrowsingBackend : public QObject
 {
     Q_OBJECT
+    Q_PROPERTY(QObject* backendModel READ model/* WRITE setModel*/ NOTIFY \
modelChanged) +
 public:
     enum BrowsingType {
         LocalBrowsing,
@@ -64,18 +66,13 @@
      * The first argument of @param args must be the unique storageID of the \
                service.
      * */
     AbstractBrowsingBackend(QObject *parent, const QVariantList &args);
+    AbstractBrowsingBackend(QObject *parent = 0);
     virtual ~AbstractBrowsingBackend();
 
     /**
-     * This method must be reimplemented in order to provide the model to be
-     * used by the view.
-     * @note When LocalBrowsing is set it is highly recommended to use a KDirModel.
-     * If the package is set to RemoteBrowsing the model
-     * must provide an url that points to the media content for each
-     * QModelIndex. It must make use of MediaRole role to accomplish this.
-     * @see MediaRole
+     * @returns the model of the browsing backend
      */
-    virtual QAbstractItemModel *model() = 0;
+    QObject *model();
 
     /**
      * @return the browsing type of the model. Typically a remote browsing type
@@ -127,7 +124,6 @@
      */
     static KService::List availableBackends();
 
-public slots:
     /**
      * This slot must be reimplemented if browsingType returns
      * LocalBrowsing. This method will be used to list the media
@@ -142,8 +138,22 @@
      */
     virtual void searchForMedia(const QString &name);
 
+signals:
+    void modelChanged(QAbstractItemModel * model);
+
 protected:
     /**
+     * This method must be set in order to provide the model to be
+     * used by the view.
+     * @note When LocalBrowsing is set it is highly recommended to use a KDirModel.
+     * If the package is set to RemoteBrowsing the model
+     * must provide an url that points to the media content for each
+     * QModelIndex. It must make use of MediaRole role to accomplish this.
+     * @see MediaRole
+     */
+    void setModel(QAbstractItemModel * model);
+    
+    /**
      * As from Plasma::Applet this method should be used in order
      * to inform about the availability of a configuration interface for
      * the model.


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

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