/usr/include/mediacenter/abstractbrowsingbackend.h is in plasma-mediacenter-dev 1.2.0-0ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 | /***********************************************************************************
* Copyright 2009-2010 by Alessandro Diaferia <alediaferia@gmail.com> *
* *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 2.1 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library. If not, see <http://www.gnu.org/licenses/>. *
***********************************************************************************/
#ifndef ABSTRACTBROWSINGBACKEND_H
#define ABSTRACTBROWSINGBACKEND_H
#include <QObject>
#include <QVariantList>
#include <QFlags>
#include <KDE/KConfigGroup>
#include <KDE/KService>
#include "mediacenter_export.h"
#include "mediacenter/mediacenter.h"
class QDeclarativeEngine;
class QAbstractItemModel;
class KConfigDialog;
class ModelMetadata;
namespace MediaCenter {
/**
* @class AbstractBrowsingBackend @author Alessandro Diaferia
* @brief A useful class to build custom plugins for the mediabrowser.
*
* This class allows you to write custom models to use with the mediabrowser applet.
* Custom models are useful to implement custom navigations such as navigation
* through services available through the web, see YouTube.
*
* This class does not directly inherit from QAbstractItemModel due to future
* extension purposes. It just represents an interface between the applet and the
* provided model.
*/
class MEDIACENTER_EXPORT AbstractBrowsingBackend : public QObject
{
Q_OBJECT
Q_PROPERTY(bool busy READ busy NOTIFY busyChanged)
Q_PROPERTY(QString mediaBrowserSidePanel READ mediaBrowserSidePanel WRITE setMediaBrowserSidePanel NOTIFY mediaBrowserSidePanelChanged)
Q_PROPERTY(QVariantList models READ models NOTIFY modelsChanged)
Q_PROPERTY(QVariantList buttons READ buttons NOTIFY buttonsChanged)
Q_PROPERTY(QObject* pmcRuntime READ pmcRuntime WRITE setPmcRuntime NOTIFY pmcRuntimeChanged)
public:
/**
* Used to load a backend instance via a plugin loader through KService.
* The first argument of @param args must be the unique storageID of the service.
* */
explicit AbstractBrowsingBackend(QObject *parent, const QVariantList &args = QVariantList());
virtual ~AbstractBrowsingBackend();
/**
* Sets the plugin name for this backend; used for things such as configuration group naming
* @param name the plugin name to use
*/
void setName(const QString &name);
/**
* @return the plugin name for this backend
*/
QString name() const;
/**
* The default implementation returns the first (or the only) model.
* @returns the model of the browsing backend.
*/
QAbstractItemModel *model();
/**
* @returns the models available in the browsing backend
*/
QVariantList models();
/**
* When writing a backend, override this method to return a list of strings
* that will be used to create buttons when this backend is chosen.
*
* When a button is pressed, the handleButtonClick method will be called.
*
* @see handleButtonClick()
* @returns a list of buttons the model wants to show on the UI
*/
virtual QVariantList buttons();
/**
* This method will be called when the media center wants to load this backend.
* Please use initImpl method to do initialization instead of the constructor.
* @see initImpl
*/
Q_INVOKABLE bool init();
/**
* Convenience function that returns the list of
* available browsing backends found.
*/
static KService::List availableBackends();
/**
* This function is used by Media Browser to go to one level
* up in the browsing structure. Must be reimplemented
*
* @return true if operation succeeded
* @return false if we are already at the topmost level
*/
Q_INVOKABLE virtual bool goOneLevelUp();
/**
* This slot is called by the media browser when the model contains
* directories (or equivalents of them) and the user requests to browse
* to a particular one
*
* @param row the row index of the directory
* @param model the model that the backend should operate on
*
* @return true if operation was successful
* @return false if operation was unsuccessful
*/
Q_INVOKABLE virtual bool expand(int row, QAbstractItemModel *model);
/**
* This is a convenience method for when the media browser thinks the model
* doesn't matter. In this case, the default model is assumed by the backend.
*
* @param row the row index of the directory
*
* @see model()
* @return true if operation was successful
* @return false if operation was unsuccessful
*/
Q_INVOKABLE virtual bool expand(int row);
/**
* This slot must be called by the MediaCenter UI to set a declarive engine
* which can then be used by the backend to set up needed values at runtime
*
* @param declarativeEngine pointer to the declarative engine
*/
void setDeclarativeEngine(QDeclarativeEngine *declarativeEngine);
/**
* Use this method to get access to the declarative engine.
* This is useful for backends to provide their own image providers and so on
*
* @return the declarative engine
*/
QDeclarativeEngine *declarativeEngine() const;
/**
* Override this method if you want your backend to show a custom media browser
* instead of the standard PMC MediaBrowser.
*
* @return Valid QML string, use constructQmlSource for convenience
*/
Q_INVOKABLE virtual QString mediaBrowserOverride() const;
/**
* This method is called by PMC runtime to ask the backend to check the env and report
* if all runtime dependencies etc are satisfied.
* The default implementation always returns true
*
* @returns true if its ok to load this backend, false otherwise
*/
virtual bool okToLoad() const;
//TODO: Side panel concept is hacky, replace with a popup of some sort
/**
* Override this method if you want your backend to show custom items on a
* panel/popup. For example this can be used to set filtering options
*
* @return Valid QML string, use constructQmlSource for convenience
*/
virtual QString mediaBrowserSidePanel() const;
virtual void setMediaBrowserSidePanel(QString text);
/**
* Override this method and emit the busyChanged() signal to tell the mediacenter
* that the backend is busy doing something
*
* @return whether the backend is busy
*/
virtual bool busy() const;
/**
* This method will be called by mediacenter when one of the buttons is clicked.
* The default implementation does nothing
*
* @param buttonName the name of the button that was clicked
*/
Q_INVOKABLE virtual void handleButtonClick(const QString &buttonName);
//FIXME: Bad, bad, bad.
QObject* pmcRuntime();
void setPmcRuntime(QObject* pmcRuntime);
Q_SIGNALS:
void busyChanged();
void mediaBrowserSidePanelChanged();
void modelsChanged();
void buttonsChanged();
void searchTermChanged();
void error(const QString &message);
void modelNeedsAttention(QObject* model);
void pmcRuntimeChanged();
protected:
/**
* Set the only model (and its metadata) that this backend contains.
* This used by the media browser to show media.
*/
void setModel(ModelMetadata* model);
/**
* Set the only model that this backend contains. Default metadata will be
* defined every time.
* This used by the media browser to show media.
*/
void setModel(QAbstractItemModel* model);
/**
* This method is used to add more models to this backend
*/
void addModel(ModelMetadata * model);
/**
* This method adds multiple models as a single model collection.
* This indicates the UI to show views for these models simultaneously
*/
void addModelPair(const QString& pairLabel, QObject* firstModel, QObject* secondModel);
/**
* This is a convenience function which constructs a string representing QML source for
* loading an item of name itemName which exists in componentDirName
*
* @param componentDirName name of the dir (relative to org.kde.plasma.mediacenter.elements
* @param versionString version of the item as specified in qmldir in componentDirName
* @param itemName name of the item as specified in qmldir in componentDirName
*/
QString constructQmlSource(const QString& componentDirName, const QString& versionString,
const QString& itemName) const;
/**
* This method is called whenever the backend has been chosen by the user
* to be the current navigation helper and just before the model is set
* to the view.
* Use this method for general initialization purposes.
*/
virtual bool initImpl() = 0;
/**
* This method is called by the UI when the user requests to search for a media.
* You should override this method if your backend support search and has
* only one model
*
* @param searchTerm string entered by the user
*/
Q_INVOKABLE virtual void search(const QString &searchTerm);
/**
* This method is called by the UI when the user requests to search for a media
* for a particular model.
* You should override this method if your backend support search and has
* multiple models
*
* @param searchTerm string entered by the user
* @param model the model that this search should affect
*/
Q_INVOKABLE virtual void searchModel(const QString &searchTerm, QAbstractItemModel *model);
private:
class AbstractBrowsingBackendPrivate;
AbstractBrowsingBackendPrivate * const d;
};
} // MediaCenter namespace
Q_DECLARE_METATYPE(QAbstractItemModel*)
#define MEDIACENTER_EXPORT_BROWSINGBACKEND( c ) \
K_PLUGIN_FACTORY( MediaBrowserFactory, registerPlugin< c >(); ) \
K_EXPORT_PLUGIN( MediaBrowserFactory("c") )
#endif // ABSTRACTBROWSINGBACKEND_H
|