R: QML and Plasma -> progress()

LucaTringali TRINGALINVENT at libero.it
Thu Sep 16 15:46:21 CEST 2010


Extremely interesting... this will open new possibilities.
Will these functionalities implemented into PlasMate, to
give developers a simple way to write QML plasma widgets?

Luca Tringali

>----Messaggio originale----
>Da: notmart at gmail.com
>Data: 16/09/2010 15.11
>A: "Plasma"<plasma-devel at kde.org>
>Ogg: QML and Plasma -&gt; progress()
>
>Hi all,
>the status of an AppletScript for writing plasmoids in pure QML is 
progressing 
>rather well, i thought to write a detailed status report/documentation 
before 
>significative design problems go too far in the implementation, be patient, 
is 
>really long, but it can be used as a basis for a future documentation.
>
>* It is now possible to have packages that specify a main qml file, just 
like 
>js plasmoids.
>
>* Plasma widgets are binded in the QML language, with the Plasma.* prefix
>* QGraphicsLayouts are binded in plasma bindings themselves, it is not going 
>to be in Qt sadly (but QGraphicsWidget subclasses are starting to work 
pretty 
>well with anchors/positioners as well)
>* Plasma::Svg and FrameSvg are implemented as QDeclarativeItem subclasses 
>binded as Svg and FrameSvg. in the future plasma widgets are going to be 
>reimplemented in QML probably, those will be the classes for theming
>
>To use QML in Plasma there are 2 ways:
>* Plasma::QMLWidget -> i a qgraphicswidget that loads a qml file in it, and 
>keeps the context/engine/etc, it shortens an otherwise long and repetitive 
>task of loding qml files with eventiual parse error management, to be used 
in 
>c++ plasmoids, where complex logic is needed.
>* QML AppletScript: to write applets completely in QML, (uses a QMLWidget 
>internally)
>* only pure qml applets will have access to the "plasmoid" object? (or, the 
>plasmoid object could be registered from QMLWidget, only when it is actually 
>descendent of an Applet, but it would have to be in libplasma, instead of in 
>workspace/runtime)
>
>* Package: as in js bindings the package name resolution is accessible from 
>plasmoid.file()
>
>* Theme: defining a Plasma.Theme{} element in qml will obtain an object with 
>the Plasma colors as properties  -> should be an object always registered to 
>the root context instead? maybe by QMLWidget itself so it is always 
>accessible?
>
>* DataEngine: a Plasma.DataSource{} object can be defined in QML, this 
>connects to a single dataengine source, das the source, dataengine and 
>interval properties. its Data property is a QDeclarativePropertyMap, that 
maps 
>perfectly DataEngine::Data (but is a qobject, so it can notify all 
properties 
>that change) to access the time  of the tiime dataengine one can do: 
>dataSource.data.time .
>    This can be used from both qml plasmoids or outside. I'm not completely 
>sure it's the right approach, alternatively in the dataUpdated of the 
>AppletScript QDeclarativePropertyMaps named as something like 
>dataengine+source could be assigned to the root context, connections would 
be 
>done in the oncomplete{} slot of qml items. uhm... in the end i think i'll 
>leave the DataSource approach.
>
>* Service: still to be defined, if Plasma.DataSource is the right way to go, 
>it could have a service() method that would essentially call 
serviceForSource, 
>then bindings for kconfig would be needed, but this part is still fggy to me.
>
>* Something else forgotten?
>
>
>Here is the status of the support to Applet properties and methods:
>
>== Methods that the ql applets should be able to reimplement: ==
>
>* paintInterface -> no, no access to qpainters here (and was quickly 
becoming 
>deprecated anyways)
>
>* constraintsEvent -> formfactor, location, immutable and currentActivity 
>become notifying properties -> property binding
>
>* dataUpdated: DataSource qml item: alternative is to set a 
>QDeclarativePropertyMap on dataupdated -> but would be good to use it also 
in 
>c++ plasmoids
>
>* configChanged() -> qml applet reimplements configChanged() function in 
root 
>Item
>
>* popupEvent() -> qml applet reimplements popupEvent() function in the root 
>Item
>
>== Plasmoid functions/properties ==
>
>Unique "plasmoid" oject registered in the root context
>shamelessy copied from the js bindings has the following stuff:
>
>--properties (AppletInterface):
>
>* aspectRatioMode
>* formFactor NORIFY formFactorChanged()
>* location NOTIFY locationChanged()
>* currentActivity NOTIFY contextChanged()
>* shouldConserveResources
>* activeConfig
>* busy
>* backgroundHints
>* immutable NOTIFY immutableChanged()
>* userConfiguring
>* apiVersion CONSTANT
>* rect
>* size
>
>--properties (PopupAplletInterface):
>
>* popupIcon -> needs QIcon bindings for QML
>* passivePopup
>* popupWidget -> is it useful there?
>
>Should all properties that are not CONSTANT have a NOTIFY signal? that is 
>needed for qml property binding.
>
>--methods (AppletInterface):
>
>* void setFailedToLaunch(bool failed, const QString &reason = QString())
>* void setConfigurationRequired(bool needsConfiguring, const QString &reason 
= 
>QString())
>* void setAction(const QString &name, const QString &text,
>                 const QString &icon = QString(), const QString &shortcut = 
>QString());
>* void removeAction(const QString &name);
>* void resize(qreal w, qreal h);
>* void setMinimumSize(qreal w, qreal h);
>* void setPreferredSize(qreal w, qreal h);
>* QVariant readConfig(const QString &entry) const;
>* void writeConfig(const QString &entry, const QVariant &value);
>* QString file(const QString &fileType);   ->  qml already can read files 
only 
>from subdirectories of the main script, i still prefer package even tough 
>could package return paths unreadable from QML?
>* QString file(const QString &fileType, const QString &filePath);
>* QObject *findChild(const QString &name) const   ->   useless?
>* Plasma::Extender *extender() const;   ->  won't be possible to do much 
with 
>extenders: to set extenderitems in QML should be possible to have qml items 
>out of the root object i think (and only a single root is possible)
>
>--methods (PopupAppletInterface slots):
>* void setPopupIconByName(const QString &name);
>* void togglePopup();
>* void hidePopup();
>* void showPopup();
>
>Cheers,
>Marco Martin
>_______________________________________________
>Plasma-devel mailing list
>Plasma-devel at kde.org
>https://mail.kde.org/mailman/listinfo/plasma-devel
>




More information about the Plasma-devel mailing list