<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://techbase.kde.org/skins/common/feed.css?0.2"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://techbase.kde.org/api.php?action=feedcontributions&amp;user=Sebas&amp;feedformat=atom</id>
		<title>KDE TechBase - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://techbase.kde.org/api.php?action=feedcontributions&amp;user=Sebas&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Special:Contributions/Sebas"/>
		<updated>2013-05-21T05:10:02Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.20.2</generator>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/API</id>
		<title>Development/Tutorials/Plasma/QML/API</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/API"/>
				<updated>2013-02-20T22:29:28Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: typo--&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction to the Plasmoid QML Declarative API  =&lt;br /&gt;
&lt;br /&gt;
This document provides an overview/reference of the Declarative QML API for Plasmoids. It isn't a full binding to all of Qt or KDE's libraries, but a focused set of bindings designed to make writing Plasmoids fast and easy, while remaining powerful.&lt;br /&gt;
&lt;br /&gt;
The API in this documentation covers the API of the Plasma specific QML components, so only the Declarative part of the API.&lt;br /&gt;
&lt;br /&gt;
The QML ScriptEngine is based upon the Plasma JavaScript engine, making the API of the JavaScript part identical to the one of the JavaScript plasmoids engine.&lt;br /&gt;
To see the api of the global ''Plasmoid'' object, see the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#The_Global_plasmoid_Object JavaScript API] documentation.&lt;br /&gt;
(TODO: the JavaScript api page should probably be copied and stripped down the imperative bits not present there, it would make it harder to update tough)&lt;br /&gt;
The most important API for using graphical widgets is the [http://api.kde.org/4.x-api/plasma-qml-apidocs/ Plasma QtComponents API]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What Is a Declarative Plasmoid?  ==&lt;br /&gt;
&lt;br /&gt;
To denote that this Plasmoid is a Declarative widget, ensure that in the metadata.desktop file there is this line: &lt;br /&gt;
&lt;br /&gt;
X-Plasma-API=declarativeappletscript&lt;br /&gt;
&lt;br /&gt;
What follows is a description of the Plasma declarative classes instantiable from QML.&lt;br /&gt;
&lt;br /&gt;
== fetching data from the plasmoid package ==&lt;br /&gt;
&lt;br /&gt;
If you have a file in your plasmoid package under contents, let's say an image, you can access it with the plasmapackage url protocol:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Image {&lt;br /&gt;
    source: &amp;quot;plasmapackage:/images/foo.png&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code will load in the Image component the file foo.png located in contents/images of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import &amp;quot;plasmapackage:/code/foo.js&amp;quot; as Foo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, the above code will import a javascript file from the folder contents/code of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
= Properties exported from the main QML item =&lt;br /&gt;
The root qml item can export some properties to influence its behavior:&lt;br /&gt;
* '''property int minimumWidth''': the plasmoid won't ever become narrower then that, size in pixels.&lt;br /&gt;
* '''property int minimumHeight''': minum height of the plasmoid, size in pixels.&lt;br /&gt;
* '''property Component compactRepresentation''': if the plasmoid is a popupapplet, the component in compactRepresentation will be used instead of the icon and will always be collapsed, regardless if it's in a panel or not.&lt;br /&gt;
&lt;br /&gt;
= Main Plasma QML Classes =&lt;br /&gt;
&lt;br /&gt;
== Data Engines ==&lt;br /&gt;
While it's possible to fetch data from a Plasma DataEngine in the same way as the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#DataEngine JavaScript API], it is preferrable to use the following declarative classes:&lt;br /&gt;
&lt;br /&gt;
=== DataSource ===&lt;br /&gt;
DataSource is a receiver for a dataEngine and can be declared inside QML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
 PlasmaCore.DataSource {&lt;br /&gt;
     id: dataSource&lt;br /&gt;
     engine: &amp;quot;time&amp;quot;&lt;br /&gt;
     connectedSources: [&amp;quot;Local&amp;quot;]&lt;br /&gt;
     interval: 500&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* bool '''valid''' (read only): true when the DataSource is successfully connected to a data engine&lt;br /&gt;
* int '''interval''': interval of polling of the dataengine, if 0 (default value, so no need to specify if you don't need it) no polling will be executed&lt;br /&gt;
* string '''engine''': the plugin name of the dataengine to load, e.g. &amp;quot;nowplaying&amp;quot;, etc.&lt;br /&gt;
* Array(string) '''connectedSources''': all the sources of the dataengine we are connected to (and whose data will appear in the '''data''' property)&lt;br /&gt;
* Array(string) '''sources''' (read only): all the sources available from the dataengine&lt;br /&gt;
* variant map '''data''' (read only): It's the most important property, it's a map of all the data available from the dataengine: its structure will be as follows:&lt;br /&gt;
** each key of the map will be a source name, in '''connectedSources'''&lt;br /&gt;
** each value will be a variant hash, so an hash with strings as keys and any variant as value&lt;br /&gt;
** example: dataSource.data[&amp;quot;Local&amp;quot;][&amp;quot;Time&amp;quot;] indicates the '''Time''' key of the dataengine source called &amp;quot;Local&amp;quot;&lt;br /&gt;
* string '''sourceFilter''' it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. If we want to have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Signals ====&lt;br /&gt;
It has the following signals:&lt;br /&gt;
&lt;br /&gt;
Note that javascript/qml applies the 'on' prefix to signals. So the actual signal name in C++ which is e.g. '''newData'''(...) becomes '''onNewData'''(...). &lt;br /&gt;
&lt;br /&gt;
* '''onNewData'''(String sourceName, Plasma::DataEngine::Data data) the local vairables are named to '''sourceName''' and '''data'''&lt;br /&gt;
* '''onSourceAdded'''(String source)&lt;br /&gt;
* '''onSourceRemoved'''(String source)&lt;br /&gt;
* '''onSourceConnected'''(String source)&lt;br /&gt;
* '''onSourceDisconnected'''(String source)&lt;br /&gt;
* '''onIntervalChanged'''()&lt;br /&gt;
* '''onEngineChanged'''()&lt;br /&gt;
* '''onDataChanged'''()&lt;br /&gt;
* '''onConnectedSourcesChanged'''()&lt;br /&gt;
* '''onSourcesChanged'''()&lt;br /&gt;
&lt;br /&gt;
You normaly wants to use '''onNewData''' (that is the aquivalent to '''dataUpdated''' in other languages). Here is sample with the time dataengine:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import QtQuick 1.0&lt;br /&gt;
import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
        PlasmaCore.DataSource {&lt;br /&gt;
                id: dataSource&lt;br /&gt;
                engine: &amp;quot;time&amp;quot;&lt;br /&gt;
                connectedSources: [&amp;quot;Local&amp;quot;,&amp;quot;UTC&amp;quot;]&lt;br /&gt;
                interval: 500&lt;br /&gt;
&lt;br /&gt;
                onNewData:{&lt;br /&gt;
                        if(sourceName== &amp;quot;Local&amp;quot;){&lt;br /&gt;
                                local.text = data.Time&lt;br /&gt;
                        }&lt;br /&gt;
                        else if(sourceName== &amp;quot;UTC&amp;quot;){&lt;br /&gt;
                                label_utc.text = data.Timezone&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
        Grid{&lt;br /&gt;
                columns: 2&lt;br /&gt;
                spacing: 5&lt;br /&gt;
                Text{text: dataSource.data.Local.Timezone}&lt;br /&gt;
                Text {&lt;br /&gt;
                        id: local&lt;br /&gt;
                        text: &amp;quot;XX:XX:XX&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
               Text{id: label_utc; text: &amp;quot;XXXX&amp;quot;}&lt;br /&gt;
               Text {&lt;br /&gt;
                       id: utc&lt;br /&gt;
                       text: dataSource.data.UTC.Time&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You see two different approches to get to the data:&lt;br /&gt;
&lt;br /&gt;
* One is to act on ''onNewData''&lt;br /&gt;
* Use the ''data'' parameter from dataSource&lt;br /&gt;
&lt;br /&gt;
==== Methods ====&lt;br /&gt;
It has the following methods:&lt;br /&gt;
* StringList keysForSource(String source): lists all the keys corresponding to a certain source: for instance in the &amp;quot;time&amp;quot; dataengine, for the &amp;quot;Local&amp;quot; source, keys will be:&lt;br /&gt;
** &amp;quot;Timezone Continent&amp;quot;&lt;br /&gt;
** &amp;quot;Offset&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone&amp;quot;&lt;br /&gt;
** &amp;quot;Time&amp;quot;&lt;br /&gt;
** &amp;quot;Date&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone City&amp;quot;&lt;br /&gt;
* Service serviceForSource(String source): returns a Plasma service that corresponds a given source: see the section about services for how to use it.&lt;br /&gt;
* void connectSource(String source): adds to '''connectedSources''' the new source&lt;br /&gt;
* void disconnectSource(String source): removes that source from '''connectedSources'''&lt;br /&gt;
&lt;br /&gt;
=== Service ===&lt;br /&gt;
Due to their imperative nature, Plasma Services are not instantiated as QML classes, but rather created out of a '''DataSource''' with the method '''serviceForSource''' and used in the JavaScript portions of the QML files.&lt;br /&gt;
This following example is a simplified version from the Now Playing QML widget in the kdeexamples git repository: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  var service = dataSource.serviceForSource(activeSource)&lt;br /&gt;
  var operation = service.operationDescription(&amp;quot;seek&amp;quot;)&lt;br /&gt;
  operation.seconds = 10&lt;br /&gt;
&lt;br /&gt;
  var job = service.startOperationCall(operation)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Here dataSource is the id of a DataSource object, and activeSource is a source contained in one of its '''connectedSources'''.&lt;br /&gt;
The service provides an operation called &amp;quot;seek&amp;quot;, with a parameter called &amp;quot;seconds&amp;quot;, that can be written on it as a property of a JavaScript object.&lt;br /&gt;
&lt;br /&gt;
=== ServiceJob ===&lt;br /&gt;
It is necessary to monitor the result of a Service operation, it's possible to connect to the '''finished''' signal provided by the job return paramenter of the '''startOperationCall''' service method.&lt;br /&gt;
The '''finished''' signal has the same job as parameter, from which is possible to check the variant '''result''' property, to check the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var service = messagesDataSource.serviceForSource(src)&lt;br /&gt;
    var operation = &amp;quot;auth&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    function result(job) {&lt;br /&gt;
        statusItem.authorizationStatus = job.result;&lt;br /&gt;
        print(&amp;quot;ServiceJob result: &amp;quot; + job.result + &amp;quot; op: &amp;quot; + job.operationName);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var operation = service.operationDescription(operation);&lt;br /&gt;
    operation.user = userName;&lt;br /&gt;
    operation.password = password;&lt;br /&gt;
    var serviceJob = service.startOperationCall(operation);&lt;br /&gt;
    serviceJob.finished.connect(result);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DataModel ===&lt;br /&gt;
Some data engines return as their data something that can be interpreted as a list of items, rather than simple key/value pairs.&lt;br /&gt;
QML provides some item views such as '''ListView''', '''GridView''' and '''Repeater'''.&lt;br /&gt;
The '''DataModel''' QML object can provide, based on a DataSource a model suitable for those QML item views.&lt;br /&gt;
&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* DataSource '''dataSource''': the id of an existing (and connected) DataSource&lt;br /&gt;
* String '''sourceFilter''': it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. To, for example, have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
* String '''keyRoleFilter''': it's a regular expression. Only data with keys that match this filter expression will be inserted in the model. If you need all data inserted in the mode, you must explicitly request it using the regular expression &amp;quot;.*&amp;quot;&lt;br /&gt;
* int '''count''' (read only): how many items are in the model&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 ListView {&lt;br /&gt;
   model: PlasmaCore.DataModel {&lt;br /&gt;
        dataSource: microblogSource&lt;br /&gt;
        keyRoleFilter: &amp;quot;[\\d]*&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    delegate: Text {&lt;br /&gt;
        text: title&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the example, ''microblogSource'' is the id of a DataSource, and inserts in the model only entries that have a number as the key name (matched with [\\d]*, in this case tweets ids)&lt;br /&gt;
&lt;br /&gt;
Each item in the model will have the form of a variant hash: all the keys of the hash will be registered as model role names, in the example, &amp;quot;title&amp;quot; is a role of the model containing a string (also reachable with model[&amp;quot;title&amp;quot;]).&lt;br /&gt;
&lt;br /&gt;
A special reserved role will always be present: '''&amp;quot;DataEngineSource&amp;quot;''': it will contain the name of the data engine source that gave origin to this item. Therefore, if you want merely the string of the current source that the model is at...do model[&amp;quot;DataEngineSource&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
Note that view.currentItem holds the item currently selected. However, due to (http://bugreports.qt.nokia.com/browse/QTBUG-16347) this does not work in PathView. A workaround is to make your own.&lt;br /&gt;
&lt;br /&gt;
=== SortFilterModel ===&lt;br /&gt;
SortFilterModel is a proxy model for easy sorting and/or filtering of the items in a DataModel (or any other QAbstractItemModel subclass that has been registered in QML with setContextProperty from a C++ application)&lt;br /&gt;
Properties:&lt;br /&gt;
* model '''sourceModel'''&lt;br /&gt;
* String '''filterRegExp'''&lt;br /&gt;
* String '''filterRole'''&lt;br /&gt;
* String '''sortRole'''&lt;br /&gt;
* Qt::SortOrder '''sortOrder'''&lt;br /&gt;
* int '''count''' (read only)&lt;br /&gt;
&lt;br /&gt;
This is an example from the feed widget:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
model: PlasmaCore.SortFilterModel {&lt;br /&gt;
   id: postTitleFilter&lt;br /&gt;
   filterRole: &amp;quot;title&amp;quot;&lt;br /&gt;
   sortRole: &amp;quot;time&amp;quot;&lt;br /&gt;
   sortOrder: &amp;quot;DescendingOrder&amp;quot;&lt;br /&gt;
   filterRegExp: toolbarFrame.searchQuery&lt;br /&gt;
   sourceModel: PlasmaCore.SortFilterModel {&lt;br /&gt;
      id: feedCategoryFilter&lt;br /&gt;
      filterRole: &amp;quot;feed_url&amp;quot;&lt;br /&gt;
      sourceModel: PlasmaCore.DataModel {&lt;br /&gt;
         dataSource: feedSource&lt;br /&gt;
         keyRoleFilter: &amp;quot;items&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Popup Applet ==&lt;br /&gt;
So you want your QML applet to be a popup applet, like the device notifier (an icon in the panel shows and expands the applet)?&lt;br /&gt;
&lt;br /&gt;
Why, that's easy.&lt;br /&gt;
&lt;br /&gt;
To change your plasmoid from being a regular boring one, in your '''metadata.desktop''', simply change this following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet,Plasma/PopupApplet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in the main QML item's Component.onCompleted, do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    plasmoid.popupIcon = &amp;quot;konqueror&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to use other elements instead of an icon when collapsed in a panel, use the '''compactRepresentation''' property in the root Item.&lt;br /&gt;
&lt;br /&gt;
== Plasma Themes ==&lt;br /&gt;
&lt;br /&gt;
=== Theme ===&lt;br /&gt;
This class instantiable from QML provides access to the Plasma Theme colors and other facilities such as fonts.&lt;br /&gt;
From KDE 4.8 a Theme instance is always present given the org.kde.plasma.core plugin was imported, is not necessary to create it by hand.&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* String '''themeName''' (read only)&lt;br /&gt;
* bool '''windowTranslucentEnabled''' (read only)&lt;br /&gt;
* Url '''homepage''' (read only)&lt;br /&gt;
* bool '''useGlobalSettings''' (read only)&lt;br /&gt;
* QString '''wallpaperPath''' (read only)&lt;br /&gt;
* color '''textColor''' (read only)&lt;br /&gt;
* color '''highlightColor''' (read only)&lt;br /&gt;
* color '''backgroundColor''' (read only)&lt;br /&gt;
* color '''buttonTextColor''' (read only)&lt;br /&gt;
* color '''buttonBackgroundColor''' (read only)&lt;br /&gt;
* color '''linkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''buttonHoverColor''' (read only)&lt;br /&gt;
* color '''buttonFocusColor''' (read only)&lt;br /&gt;
* color '''viewTextColor''' (read only)&lt;br /&gt;
* color '''viewBackgroundColor''' (read only)&lt;br /&gt;
* color '''viewHoverColor''' (read only)&lt;br /&gt;
* color '''viewFocusColor''' (read only)&lt;br /&gt;
* String '''styleSheet''' (read only)&lt;br /&gt;
* Font '''defaultFont''' (read only)&lt;br /&gt;
* Font '''desktopFont''' (read only)&lt;br /&gt;
* Font '''smallestFont''' (read only)&lt;br /&gt;
&lt;br /&gt;
Each Font element has the following properties:&lt;br /&gt;
* bool bold&lt;br /&gt;
* Capitalization '''capitalization''' (MixedCase, AllUppercase, AllLowercase, SmallCaps, Capitalize) (read only)&lt;br /&gt;
* String '''family''' (read only)&lt;br /&gt;
* bool '''italic''' (read only)&lt;br /&gt;
* real '''letterSpacing''' (read only)&lt;br /&gt;
* int '''pixelSize''' (read only)&lt;br /&gt;
* real '''pointSize''' (read only)&lt;br /&gt;
* bool '''strikeout''' (read only)&lt;br /&gt;
* bool '''underline''' (read only)&lt;br /&gt;
* Weight '''weight''' (Light, Normal, DemiBold, Bold, Black) (read only)&lt;br /&gt;
* real '''wordSpacing''' (read only)&lt;br /&gt;
* size '''mSize''' the size, width and height of an uppercase &amp;quot;M&amp;quot; in this font (read only)&lt;br /&gt;
&lt;br /&gt;
Theme is also used to control icon sizes, with the property '''iconSize'''. it is an Object, that has the following properties:&lt;br /&gt;
* int '''desktop''': size of icons suited for the workspace&lt;br /&gt;
* int '''toolbar''': icons to be put in a ToolBar component&lt;br /&gt;
* int '''small''': smallest size for still &amp;quot;readable&amp;quot; icons&lt;br /&gt;
* int '''dialog''': icons to be put in popup dialogs&lt;br /&gt;
&lt;br /&gt;
=== Svg ===&lt;br /&gt;
Declaring a Svg element instantiates a Plasma Svg instance. This class doesn't draw anything. For drawing, SvgItem is used.&lt;br /&gt;
Properties:&lt;br /&gt;
* QSize '''size'''&lt;br /&gt;
* bool '''multipleImages'''&lt;br /&gt;
* String '''imagePath''' can be anything in the '''desktoptheme/''' folder. For more information on what is available, see [http://techbase.kde.org/Projects/Plasma/Theme#Current_Theme_Elements Plasma Theme Elements]. Make sure to strip the final extension from this string, so you should for example use &amp;lt;code&amp;gt;&amp;quot;dialogs/background&amp;quot;&amp;lt;/code&amp;gt; to get the standard background.&lt;br /&gt;
* bool '''usingRenderingCache'''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPixmap pixmap(QString elementID)&lt;br /&gt;
* void resize(qreal width, qreal height)&lt;br /&gt;
* void resize(): resets the image to its default dimension&lt;br /&gt;
* QSize elementSize(QString elementId)&lt;br /&gt;
* QRectF elementRect(QString elementId)&lt;br /&gt;
* bool hasElement(QString elementId)&lt;br /&gt;
* bool isValid(): true if valid svg file&lt;br /&gt;
&lt;br /&gt;
=== FrameSvg ===&lt;br /&gt;
Declaring a FrameSvg element instantiates a Plasma FrameSvg instance. This class doesn't draw anything. For drawing, FrameSvgItem is used.&lt;br /&gt;
This is to be used when you need informations about the framesvg, such as hasElementPrefix().&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* All properties from Svg&lt;br /&gt;
* EnabledBorders '''enabledBorders''': flag combination of:&lt;br /&gt;
** NoBorder&lt;br /&gt;
** TopBorder&lt;br /&gt;
** BottomBorder&lt;br /&gt;
** LeftBorder&lt;br /&gt;
** RightBorder&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* All methods from Svg&lt;br /&gt;
* void setImagePath(QString path)&lt;br /&gt;
* void resizeFrame(QSize size)&lt;br /&gt;
* QSize frameSize()&lt;br /&gt;
* qreal marginSize(Plasma::MarginEdge edge)&lt;br /&gt;
* void getMargins(qreal left, qreal top, qreal right, qreal bottom): parameters are output, they get set with the margins from the FrameSvg&lt;br /&gt;
* QRectF contentsRect(): the rectangle of the center element, taking the margins into account.&lt;br /&gt;
* void setElementPrefix(QString prefix)&lt;br /&gt;
* bool hasElementPrefix(const QString prefix)&lt;br /&gt;
* QString prefix()&lt;br /&gt;
* void setCacheAllRenderedFrames(bool cache)&lt;br /&gt;
* bool cacheAllRenderedFrames()&lt;br /&gt;
* void clearCache()&lt;br /&gt;
* QPixmap framePixmap()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.FrameSvg {&lt;br /&gt;
        id: myFrameSvg&lt;br /&gt;
        imagePath: &amp;quot;widgets/button&amp;quot;&lt;br /&gt;
        prefix: &amp;quot;pressed&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SvgItem ===&lt;br /&gt;
It's a graphical element that will actually paint a Svg instance.&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''elementId''': what element to render. If null, the whole svg will be rendered&lt;br /&gt;
* Svg '''svg''': instance of the Svg class mentioned above&lt;br /&gt;
* QSizeF '''naturalSize''' (read only): default size of the Svg&lt;br /&gt;
* bool '''smooth''': paint with antialias (default false)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.SvgItem {&lt;br /&gt;
        id: mySvgItem&lt;br /&gt;
        anchors {&lt;br /&gt;
            top: parent.top&lt;br /&gt;
            left: parent.left&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        width: 300&lt;br /&gt;
        height: 3&lt;br /&gt;
&lt;br /&gt;
        svg: mySvg&lt;br /&gt;
        elementId: &amp;quot;horizontal-line&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FrameSvgItem ===&lt;br /&gt;
It's a graphical element that paints a Plasma::FrameSvg, so a rectangular image composed by 9 elements contained in a Svg file, useful for things like buttons and frames.&lt;br /&gt;
&lt;br /&gt;
Flags&lt;br /&gt;
* EnabledBorders: combination of TopBorder | BottomBorder | LeftBorder | RightBorder, NoBorder if no border of the frame is enabled&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''imagePath''': path of the file relative to the Plasma Theme, for instance &amp;quot;widgets/background&amp;quot;&lt;br /&gt;
* String '''prefix''': a FrameSvg can contain multiple frames, for instance a button contains &amp;quot;normal&amp;quot;, &amp;quot;raised&amp;quot; and &amp;quot;pressed&amp;quot;&lt;br /&gt;
* Margins '''margins''' (read only): the margins of the frame, see documentation below&lt;br /&gt;
* EnabledBorders '''enabledBorders''': what borders are enabled&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
PlasmaCore.FrameSvgItem {&lt;br /&gt;
    id: myFrameSvgItem&lt;br /&gt;
    anchors.fill: parent&lt;br /&gt;
    imagePath: &amp;quot;translucent/dialogs/background&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top Level windows ==&lt;br /&gt;
&lt;br /&gt;
=== Dialog ===&lt;br /&gt;
Dialog instantiates a Plasma::Dialog, it will be a Plasma themed top level window that can contain any QML component.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''mainItem''': the Item contained in the Dialog, it can be any QML Item instance&lt;br /&gt;
* bool '''visible''': if the window (not the mainItem) is visible&lt;br /&gt;
* int '''x''': x position of the window in screen coordinates&lt;br /&gt;
* int '''y''': y position of the window in screen coordinates&lt;br /&gt;
* int '''width''' (read only): total width of the dialog, including margins&lt;br /&gt;
* int '''height''' (read only): total height of the dialog, including margins.&lt;br /&gt;
* int '''windowFlags''': Qt window flags of the Dialog&lt;br /&gt;
* Margins '''margins''' (read only): margins of the Dialog&lt;br /&gt;
&lt;br /&gt;
{{Note|The width and height will scale with size of the main item within this Dialog component.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import QtQuick 1.1&lt;br /&gt;
import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
    PlasmaCore.Dialog {&lt;br /&gt;
        visible: true&lt;br /&gt;
        mainItem: Item {&lt;br /&gt;
            width: 500&lt;br /&gt;
            height: 500&lt;br /&gt;
&lt;br /&gt;
            Text {&lt;br /&gt;
                anchors.centerIn: parent&lt;br /&gt;
                color: &amp;quot;red&amp;quot;&lt;br /&gt;
                text: qsTr(&amp;quot;text&amp;quot;)&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPoint popupPosition(Item item, Qt::Alignment alignment=Qt::AlignLeft): the suggested position for the Dialog if it has to be correctly placed as popup of the QML item passed as parameter.&lt;br /&gt;
* void setAttribute(Qt::WindowAttribute attribute, bool on): set an attribute for the dialog window&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
=== ToolTip ===&lt;br /&gt;
Declaring a ToolTip instance makes it possible to use Plasma tooltips with any QML item.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''target''': the QML item we want to show a tooltip of&lt;br /&gt;
* String '''mainText'''&lt;br /&gt;
* String '''subText'''&lt;br /&gt;
* String '''image''': freedesktop compliant icon name as image of the tooltip&lt;br /&gt;
&lt;br /&gt;
== Containments ==&lt;br /&gt;
A Plasma Containment manages the position and manipulation of Plasmoids. The declarative containment is responsible for layout of applets and can provide custom applet handles. The containment should listen to the plasmoid.immutability property. In order to lay out applets in your containment, you can use the AppletContainer class to access geometry information of applets.&lt;br /&gt;
Actions such as configure and close are available through plasmoid.actions.&lt;br /&gt;
You can access the plasmoid global property from containments in the same way as from declarative and javascript plasmoids. If the plasmoid is a Containment, you can get a list of actions for it. If you want to provide background rendering in your Containment yourself, read the applet.backgroundHints property and after that set applet.backgroundHints to 0 to tell the Applet that is should not render the background.&lt;br /&gt;
 &lt;br /&gt;
=== AppletContainer ===&lt;br /&gt;
The AppletContainer class provides access to the geometry and status of Plasmoids in this Containment.&lt;br /&gt;
Properties:&lt;br /&gt;
* ''Item'' '''applet''': The applet item, this property allows you to track destruction of the actual applet and update your layout.&lt;br /&gt;
** ''int'' '''backgroundHints''': Should the Applet be rendered on top of a background frame? 0 for no background, 1 for default background, 2 for translucent background&lt;br /&gt;
* ''int'' '''minimumWidth''': The minimum width of the applet&lt;br /&gt;
* ''int'' '''minimumHeight''': The minimum height of the applet&lt;br /&gt;
* ''int'' '''maximumWidth''': The maximum width of the applet&lt;br /&gt;
* ''int'' '''maximumHeight''': The maximum height of the applet&lt;br /&gt;
* ''int'' '''preferredWidth''': The preferred height of the applet&lt;br /&gt;
* ''int'' '''preferredHeight''': The preferred height of the applet&lt;br /&gt;
* ''enum'' '''status''': The status of the applet, one in the enum&lt;br /&gt;
** '''UnknownStatus''': The status is unknown&lt;br /&gt;
** '''PassiveStatus''': The applet is passive&lt;br /&gt;
** '''ActiveStatus''': The applet is active&lt;br /&gt;
** '''NeedsAttentionStatus''': The applet asks for attention&lt;br /&gt;
** '''AcceptingInputStatus''': The applet is accepting input&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
They can be imported in your code with:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.plasma.containments 0.1 as PlasmaContainments&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AppletContainer is only available for Plasma/Containment packages, and only if they are loaded as containment. AppletContainer is new in 4.10.&lt;br /&gt;
&lt;br /&gt;
=== ToolBox ===&lt;br /&gt;
The ToolBox is only available through the plasmoid object, through plasmoid.toolBox(). The ToolBox is rendered as a separate item  on top of the scene covering the entire containment. It is loaded from the &amp;quot;org.kde.toolbox&amp;quot; Plasma Package, if the package is not found, no ToolBox will be loaded.&lt;br /&gt;
The ToolBox provides a listmodel of actions that can be rendered using Repeaters or ListViews. The ''actions'' list property contains actions from the Corona and Containments. Examples for these actions are showing the add widget or activities interface, lock and unlock. The actions in the list change dynamically whenever the widgets are locked or unlocked.&lt;br /&gt;
Actions such as lock screen and leave can be implemented using the powermanagement dataengine's services for these functions.&lt;br /&gt;
&lt;br /&gt;
ToolBox provides access to the following properties:&lt;br /&gt;
* ''Array(QAction)'' '''actions''': A list of actions provided by the Containment. These actions' most interesting properties are: &lt;br /&gt;
** ''QIcon'' '''icon''': The icon belonging to this action.&lt;br /&gt;
** ''String'' '''text''': The icon belonging to this action.&lt;br /&gt;
** '''trigger()''': Call trigger from your action delegate to trigger the action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.plasma.containments 0.1 as PlasmaContainments&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ToolBox is only available for Containments and new in 4.10.&lt;br /&gt;
&lt;br /&gt;
= Plasma QtComponents (4.8) =&lt;br /&gt;
Plasma components documentation online at [http://api.kde.org/4.x-api/plasma-qml-apidocs/ api.kde.org]&lt;br /&gt;
&lt;br /&gt;
=QtExtraComponents=&lt;br /&gt;
The QtExtraComponents make some very convenient Qt classes usable from within QML.&lt;br /&gt;
&lt;br /&gt;
They can be imported in your code with:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.qtextracomponents 0.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==QPixmapItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QPixmap directly to QPixmapItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QPixmap '''pixmap''': The QPixmap object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QPixmap width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QPixmap height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==QImageItem==&lt;br /&gt;
This one wraps around a QImage class and allows you to send a QImage directly to QImageItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QImage '''image''': The QImage object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QImage width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QImage height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==FillMode==&lt;br /&gt;
Both QPixmapItem and QImageItem expose a FillMode enum. This enum defines how the image is going to be used to fill the item.&lt;br /&gt;
&lt;br /&gt;
For QPixmapItem, possible values are:&lt;br /&gt;
&lt;br /&gt;
* QPixmapItem.Stretch: the image is scaled to fit&lt;br /&gt;
* QPixmapItem.PreserveAspectFit: the image is scaled uniformly to fit without cropping&lt;br /&gt;
* QPixmapItem.PreserveAspectCrop: the image is scaled uniformly to fill, cropping if necessary&lt;br /&gt;
* QPixmapItem.Tile: the image is duplicated horizontally and vertically&lt;br /&gt;
* QPixmapItem.TileVertically: the image is stretched horizontally and tiled vertically&lt;br /&gt;
* QPixmapItem.TileHorizontally : the image is stretched vertically and tiled horizontally&lt;br /&gt;
&lt;br /&gt;
QImageItem defines the same values, you just need to replace QPixmapItem with QImageItem.&lt;br /&gt;
&lt;br /&gt;
==QIconItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QIcon directly to QIconItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QIcon/QString '''icon''': If you provide a QIcon it uses that directly. If you provide a string it uses a KIcon internally!&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''implicitWidth''': Default width of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* int '''implicitHeight''': Default height of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* State '''state''': Icon state (DefaultState, ActiveState, DisabledState)&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Schedules/KDE4/4.10_Feature_Plan</id>
		<title>Schedules/KDE4/4.10 Feature Plan</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Schedules/KDE4/4.10_Feature_Plan"/>
				<updated>2012-11-21T20:04:19Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: /* kdeplasma-addons */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of planned features for the SC 4.10 release. &lt;br /&gt;
&lt;br /&gt;
See also: &lt;br /&gt;
&lt;br /&gt;
*[[Schedules/KDE4/4.10 Release Schedule]] &lt;br /&gt;
*[[Schedules/KDE4/4.9 Feature Plan]] (previous major release)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; Legend: &lt;br /&gt;
&lt;br /&gt;
*todo =&amp;amp;gt; not started yet &lt;br /&gt;
*in-progress =&amp;amp;gt; started, but not completed yet &lt;br /&gt;
*done =&amp;amp;gt; completed&lt;br /&gt;
&lt;br /&gt;
__TOC__ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdelibs =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;NO NEW FEATURES ALLOWED&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-runtime =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|kio-mtp|KIO-Slave for MTP|philschmidt@gmx.net|Philipp Schmidt}}&lt;br /&gt;
{{FeatureDone|QML Containments|Making it possible to do full-featured containments in QML|sebas@kde.org|Sebastian Kügler}}&lt;br /&gt;
{{FeatureDone|nepomuk-indexer|New Nepomuk Indexer|me@vhanda.in|Vishesh Handa}}&lt;br /&gt;
{{FeatureDone|nepomukbakcup|Nepomuk Backup rewritten from scratch|me@vhanda.in|Vishesh Handa}}&lt;br /&gt;
{{FeatureDone|nepomukcleaner|An application to port/clean invalid/legacy data in Nepomuk|me@vhanda.in|Vishesh Handa}}&lt;br /&gt;
{{FeatureDone|nepomuk KCM|Rewrite the Nepomuk KCM|me@vhanda.in|Vishesh Handa}}&lt;br /&gt;
{{FeatureDone|nepomuk tags|Nepomuk Tags KIO Slave|me@vhanda.in|Vishesh Handa}}&lt;br /&gt;
{{FeatureInProgress|nepomuk filemetadatawidget|Nepomuk Metadata Widget|me@vhanda.in|Vishesh Handa}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-workspace =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|ksmserver|Merge the new qml based screen locker|mart@kde.org|Marco Martin}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- The following section of entries has been auto generated by ChangelogGenerator. Do not edit!&lt;br /&gt;
BEGIN GENERATED SECTION --&amp;gt;&lt;br /&gt;
{{FeatureTodo|kwin|windows that are moved to another desktop should be treated as sticky windows ({{bug |213847}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Fix fullscreen state handling: NETWM says it's bound to focus and not stacking order, also see bug #224600 ({{bug |296076}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Medium focus stealing prevention should also prevent focus stealing when the timestamp on the active window is uncertain ({{bug |304746}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Usability issue: &amp;quot;Attach as tab to&amp;quot; menu can be empty ({{bug |306451}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Display application menu and title bar side by side for maximized windows ({{bug |102607}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Add support for appmenu-qt ({{bug |266596}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Import Scripted Effect from All Effets Tab ({{bug |296772}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|GHNS support for Scripted Effects ({{bug |296773}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Window Tab support for QML based Aurorae ({{bug |299138}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureInProgress|kwin|Remove legacy window decorations ({{bug |299144}}, Review 104281)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Get rid of  &amp;quot;Display borders on maximized windows&amp;quot; setting ({{bug |299245}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Break NETWM to allow inner xinerama struts ({{bug |299247}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Cube animation on border approach should not be used unless the electric borders are actually in use and the config should be disabled, align or hint the electric border configuration ({{bug |299901}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Make ShaderManager act as a real stack ({{bug |300349}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|clientPopup: &amp;quot;'More actions' and &amp;quot;Attach as tab to&amp;quot;  lack mnemonics ({{bug |302833}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Make KWin compile with C++11 ({{bug |303313}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Copy all useful Client properties to Deleted ({{bug |303916}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Display content of resizing/moving windows: KDE-Help shows obsolete instructions ({{bug |305297}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Mouse action support for sending window to different activity ({{bug |305758}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Windows list icon does not show up in &amp;quot;Walk Through Desktop List&amp;quot; ({{bug |306187}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Game mode ({{bug |306448}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Animate Window Maximize/Restore ({{bug |308990}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Common animation settings for effects of same type ({{bug |308991}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Use Resize Area in Aurorae ({{bug |308992}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Configurable quick tile area config GUI ({{bug |308993}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Move ExtendedBorderRegion to stable  API ({{bug |308994}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Support shortened titles like in bespin in all decorations ({{bug |308995}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureInProgress|kwin|Mouse Click effect ({{bug |309006}}, Review 105780)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Decorations not visible ({{bug |305875}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|drag-and-drop between windows by cover switch alt-tab causes apps to crash ({{bug |179077}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Add a rule to select the screen ({{bug |183996}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|JJ: Need Mouse navigation in flip switch mode ({{bug |244439}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Request category for scripted KWin Effects on kde-(look&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;app).org ({{bug |297634}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Request category for KWin Scripts on kde-(look&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;app).org ({{bug |297635}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Request category for Window Switcher Layouts on kde-(look&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;app).org ({{bug |297637}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Allow direct rendering with fglrx ({{bug |301103}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Don't use OpenGL matrix stack in OpenGL 2 backend ({{bug |303093}}, Review 105455)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Refactor Screen/Window PaintData ({{bug |303314}}, Review 105141)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Rapid flickering in locked screen -- makes it difficult to unlock ({{bug |303579}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|double click menu to close needs GUI config ({{bug |305738}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Toplevel::windowType() needs performance improvements ({{bug |306384}}, Review 106349)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|GLPlatform should recommend either OpenGL1 or OpenGL2 compositing ({{bug |306436}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Zoom effect broken in master ({{bug |307609}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|kwin fails to build when the GLES support is disabled ({{bug |307866}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|[JJ] Some effect authors are listed as &amp;quot;Name1 &amp;amp; Name2&amp;quot; ({{bug |307928}}, Review 106880)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Add screen management actions to window context menus ({{bug |269207}}, Review 106065)|mgraesslin@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Move Workspace's compositing functionality to own class Compositor ({{bug |299277}}, Review 102420)|mgraesslin@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Option to disable close on double click in Aurorae ({{bug |301327}}, Review 106160)|mgraesslin@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Remove Tiling Support From KWin ({{bug |303090}}, Review 105546)|mgraesslin@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Allow Scripts to add menus to useractions menu ({{bug |303756}}, Review 106285)|mgraesslin@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Generic QML support for Aurorae Themes ({{bug |303810}}, Review 105768)|mgraesslin@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Split out Useractions Menu from Workspace ({{bug |305832}}, Review 106085)|mgraesslin@kde.org}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- END GENERATED SECTION --&amp;gt;&lt;br /&gt;
{{FeatureDone|kwin|Implement color correction|skeletk13@gmail.com|Casian Andrei}}&lt;br /&gt;
{{FeatureDone|oxygen decoration|Implement ExtendedBorderRegion support, to resize windows outside of their actual borders|hugo@oxygen-icons.org|Hugo Pereira Da Costa}}&lt;br /&gt;
{{FeatureDone|oxygen style|Implement BlurBehind semi-transparent tooltips when available|hugo@oxygen-icons.org|Hugo Pereira Da Costa}}&lt;br /&gt;
{{FeatureDone|plasma-wallpapers|Color wallpaper: add listview to display thumbnails for background mode|rshah0385@kireihana.com|Reza Fatahilah Shah}}&lt;br /&gt;
{{FeatureDone|plasma workspace|Port Notifications applet to QML|mart@kde.org|Marco Martin}}&lt;br /&gt;
{{FeatureInProgress|plasma workspace|Port Task Manager applets to QML|hein@kde.org|Eike Hein (Sho_)}}&lt;br /&gt;
{{FeatureInProgress|plasma workspace|refresh Air Plasma theme|mart@kde.org|Marco Martin}}&lt;br /&gt;
{{FeatureInProgress|plasma workspace|Port Kickoff to qml|yellowcake-@gmx.net|Greg T}}&lt;br /&gt;
{{FeatureTodo|systemsettings|Replace krandr KCM by libkscreen-based one|dvratil@redhat.com|Dan Vrátil}}&lt;br /&gt;
{{FeatureInProgress|plasma workspace|Port rssnow to qml|terietor@gmail.com|Giorgos Tsiapaliokas}}&lt;br /&gt;
{{FeatureInProgress|various|KActivities/SLC support for most our applications|ivan.cukic@kde.org|Ivan Čukić}}&lt;br /&gt;
{{FeatureInProgress|plasma workspace|first desktop SLC applet release|mart@kde.org|Marco Martin}}&lt;br /&gt;
{{FeatureDone|System Tray|System tray with interface in QML|dmitry.ashkadov@gmail.com|Dmitry Ashkadov}}&lt;br /&gt;
{{FeatureTodo|plasma workspace|Top-rated documents for Task Manager|ivan.cukic@kde.org|Ivan Čukić}}&lt;br /&gt;
{{FeatureDone|systemsettings|Keyboard layout preview|amourphious1992@gmail.com|Shivam Makkar}}&lt;br /&gt;
{{FeatureInProgress|window manager|Rework and optimize vertex specification|fredrik@kde.org|Fredrik Höglund}}&lt;br /&gt;
{{FeatureInProgress|window manager|Dynamic shader generation|fredrik@kde.org|Fredrik Höglund}}&lt;br /&gt;
{{FeatureInProgress|window manager|Partial port to xcb|fredrik@kde.org|Fredrik Höglund}}&lt;br /&gt;
{{FeatureInProgress|window manager|New launch feedback effect|fredrik@kde.org|Fredrik Höglund}}&lt;br /&gt;
{{FeatureInProgress|activities|Encrypted activities|ivan.cukic@kde.org|Ivan Čukić}}&lt;br /&gt;
{{FeatureDone|powerdevil|Overhaul powerdevil notifications|kde@privat.broulik.de|Kai Uwe Broulik}}&lt;br /&gt;
{{FeatureInProgress|powerdevil|Improve profile error handling (DPMS)|kde@privat.broulik.de|Kai Uwe Broulik}}&lt;br /&gt;
{{FeatureTodo|plasma workspace|Social Feed|mklapetek@kde.org|Martin Klapetek}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-baseapps =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|FolderView|Split into PopupApplet and Containment|ignat.semenov@blue-systems.com|Ignat Semenov}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|FolderView|Port to QML|ignat.semenov@blue-systems.com|Ignat Semenov}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Dolphin|Implement files quick preview feature (named Klook)  |evgeniy.augin@osinit.ru|Evgeniy Auzhin}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Dolphin|Implement parallel sort algorithm|emmanuelpescosta099@gmail.com|Emmanuel Pescosta}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Dolphin|Add GUI option for the &amp;quot;Rename Inline&amp;quot; setting|frank78ac@googlemail.com|Frank Reininghaus}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Dolphin|Add &amp;quot;Icon Size&amp;quot; submenu to the Places Panel context menu|frank78ac@googlemail.com|Frank Reininghaus}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|print-manager|New Print manager KCM and applet (plasmoid) replacement, using C++  |dantti12@gmail.com|Daniel Nicoletti}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Kate|Support for Python plugins|srhaque@theiet.org|Shaheed Haque}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Kate|Advanced gid(1) plugin using both ID files and etags|srhaque@theiet.org|Shaheed Haque}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Kate|As-you-type search for the search plugin|kare.sars@iki.fi|Kåre Särs}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Kate|Session name API for plugins + automatic ctags database naming|kare.sars@iki.fi|Kåre Särs}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|Kate|Add optional document &amp;quot;minimap&amp;quot; to the Symbols view plugin|kare.sars@iki.fi|Kåre Särs}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|Kate|Vim Mode Macro support|kdedevel@etothepiplusone.com|Simon St James}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Kate|Built-in quick open (Ctrl+Alt+o)|kwrite-devel@kde.org|Christoph Cullmann}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Kate|[http://kate-editor.org/2012/11/02/using-the-projects-plugin-in-kate/ New Project Plugin]|kwrite-devel@kde.org|Christoph Cullmann}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Kate Part|[http://kate-editor.org/2012/10/28/show-line-while-scrolling/ Show line while scrolling]|kwrite-devel@kde.org|D. Haumann/J. Wenninger}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Kate Part|[http://kate-editor.org/2012/10/27/remove-trailing-spaces/ Improved remove trailing spaces on save]|kwrite-devel@kde.org|Dominik Haumann}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Kate Part|[http://kate-editor.org/2012/11/07/default-color-schemas/ Predefined color schemes]|kwrite-devel@kde.org|C. Cullmann/D. Haumann}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Kate Part|[http://kate-editor.org/2012/11/06/kate-scripting-updates-zen-like-quick-coding/ Improved Scripting Support]|kwrite-devel@kde.org|C. Cullmann/D. Haumann}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Kate Part|[http://kate-editor.org/2012/11/06/passive-notifications-in-kate-part/ Passive Notification System]|kwrite-devel@kde.org|Dominik Haumann}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Kate Part|[http://kate-editor.org/2012/11/05/loading-remote-files/ Loading Remote File Notification]|kwrite-devel@kde.org|Christoph Cullmann}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Kdialog|Add support for detailedsorry/detailederror messages|kde@privat.broulik.de|Kai Uwe Broulik}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Konsole|Improve the search filter bar|francesco.cecconi@gmail.com|Francesco Cecconi}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Konsole|Add the --separate cmdline option for running in new process|adaptee@gmail.com|Jekyll Wu}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Konsole|Make the d&amp;amp;d popup menu optional|adaptee@gmail.com|Jekyll Wu}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Konqueror|Settings for WebKit Part|sandfeld@kde.org|Allan Sandfeld}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeedu  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Marble|Have support for &amp;quot;repeatX&amp;quot; in the projection classes|rahn@kde.org|Torsten Rahn}}&lt;br /&gt;
{{FeatureTodo|Marble|Satellite Map NG|rahn@kde.org|Torsten Rahn}}&lt;br /&gt;
{{FeatureTodo|Marble|Mars &amp;amp; Venus satellite plugin|rahn@kde.org|Torsten Rahn / Gerhard Holtkamp}}&lt;br /&gt;
{{FeatureTodo|Marble|Solar Eclipse Plugin|rahn@kde.org|Torsten Rahn / Gerhard Holtkamp}}&lt;br /&gt;
{{FeatureTodo|Marble|Help Menu polishing / Support page inclusion|rahn@kde.org|Torsten Rahn}}&lt;br /&gt;
{{FeatureTodo|Marble|Toolbar polishing/refactoring|rahn@kde.org|Torsten Rahn}}&lt;br /&gt;
{{FeatureTodo|Marble|Solar Eclipse Plugin|rahn@kde.org|Torsten Rahn}}&lt;br /&gt;
{{FeatureInProgress|Marble|Worldwide hillshading|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Extended library API (no MarbleWidget dependency for tasks like parsing, routing)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Marble Touch on Plasma Active|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureInProgress|Marble|Foursquare plugin|utkuaydin34@gmail.com|Utku Aydın}}&lt;br /&gt;
{{FeatureTodo|Marble|Marble Touch on Android (including SOK branch merge)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Support for loading geolocated photos (e.g. in a Gallery activity in Marble Touch)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Layer Management (by the user: Toggle layer visibility; maybe move layers from legend and layers in menus to one central place/tab)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|OSM vector rendering (GSOC branch merge)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Zoom to content of geo file after loading (at least on start-up)|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Marble|Geo files thumbnailer|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Marble|Geo files metadata extractor|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureDone|Rocs|Improve project handling: load/save dialogs, add project journal.|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureDone|Rocs|Support TGF (trivial graph format) documents for import/export.|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureDone|Rocs|Support core features for DOT/Graphvis documents for import/export.|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureDone|Rocs|Add TikZ/PGF graphic export.|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureDone|Rocs|Main Window UI Reorganization: Editor Toolbar, dialogs, Information Panel|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureDone|Rocs|Configuration Dialog Optimizations: Code-Editor, Graph Editor|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureTodo|Rocs|Data Structure Backend wise iconsets and preconfigurations for types|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureTodo|Rocs|Printing and image export of graphs.|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureTodo|Rocs|Data Structure Snapshot and Recovery.|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureTodo|Rocs|Visual Graph Editor Handling: copy&amp;amp;paste, data structure focus, property display|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureDone|KTouch|Ship ktouch/next|sebastiangottfried@web.de|Sebastian Gottfried}}&lt;br /&gt;
{{FeatureDone|KTouch|Smart resizing of training screen with aligned vertical lines|sebastiangottfried@web.de|Sebastian Gottfried}}&lt;br /&gt;
{{FeatureDone|KTouch|Prominent hint during training if the user makes repeatedly errors|sebastiangottfried@web.de|Sebastian Gottfried}}&lt;br /&gt;
{{FeatureDone|KTouch|Show course descriptions in course selector|sebastiangottfried@web.de|Sebastian Gottfried}}&lt;br /&gt;
{{FeatureDone|KTouch|Show a message when keyboard layout visualization isn't available due missing data|sebastiangottfried@web.de|Sebastian Gottfried}}&lt;br /&gt;
{{FeatureDone|Analitza|New plotting framework|percy.camilo.ta@gmail.com|Percy Camilo Triveño Aucahuasi}}&lt;br /&gt;
{{FeatureDone|KAlgebra|Splitted the QML Components from KAlgebraMobile|aleixpol@kde.org|Aleix Pol Gonzalez}}&lt;br /&gt;
{{FeatureDone|KAlgebra|New plotting plasmoid graphs, in QtQuick|aleixpol@kde.org|Aleix Pol Gonzalez}}&lt;br /&gt;
{{FeatureDone|Pairs|Pairs Theme editor|marco.calignano@gmail.com|Marco Calignano}}&lt;br /&gt;
{{FeatureInProgress|Cantor|Python backend|filipe@kde.org|Filipe Saraiva}}&lt;br /&gt;
{{FeatureInProgress|Kig|Mark right angles|david.narvaez@computer.org|David E. Narváez}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdegames=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|libkdegames|[http://community.kde.org/KDE_Games/API_cleanup Major cleanup and rewrite] (done, except for the new highscore classes)&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;'''Release team:''' please link to the [[Projects/Games/Porting_to_libkdegames_v5|porting instructions]]  for third-party developers|stefan.majewsky@googlemail.com|Stefan Majewsky}}&lt;br /&gt;
{{FeatureDone|KGoldrunner|Use KGameRenderer and QGraphicsView for all graphics: the gameplay is the same as before.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KGoldrunner|Remove the status bar. All scores and status messages are in the viewport now.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Allow the displayed speed of moves to be adjusted.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Animate multi-stage moves, to make it easier for a human player to follow their progress.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Show multi-stage moves in an order that is easier to follow.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Validate the loading of saved games and report errors.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Rewrite the main AI class and make it use a true Minimax method.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Provide a choice of two AI styles, Kepler and Newton, with the possibility to add more.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Add settings to choose computer player, AI style and skill level for either or both of players 1 and 2.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Add board sizes 3x3 and 4x4, for simplified play.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KSudoku|Add a simple Print facility for KSudoku puzzles.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdegraphics=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|libkipi|[http://www.google-melange.com/gsoc/proposal/review/google/gsoc2012/dodonvictor/10002 Porting libkipi to KDE-XML GUI]|dodonvictor@gmail.com|Victor Dodon}}&lt;br /&gt;
{{FeatureInProgress|okular|Tiled rendering|okular-devel@kde.org|Okular Developers}}&lt;br /&gt;
{{FeatureDone|Gwenview|Recursive importer|agateau@kde.org|Aurélien Gâteau}}&lt;br /&gt;
{{FeatureDone|Gwenview|Color profile support|agateau@kde.org|Aurélien Gâteau}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdemultimedia =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|Juk|[http://community.kde.org/Juk#Porting_plan Port Juk away from kde3support]|martin.sandsmark@kde.org|Martin Sandsmark}}&lt;br /&gt;
{{FeatureDone|Juk|Add lyrics view|martin.sandsmark@kde.org|Martin Sandsmark}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdenetwork=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|KGet|Metalink/HTTP Support|dahalaishraj@gmail.com|Aish Raj Dahal}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdepim  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|Facebook resource|Include it in default install|martin.klapetek@gmail.com|Martin Klapetek}}&lt;br /&gt;
{{FeatureInProgress|Akregator2|Merge in kdepim|montel@kde.org|Montel Laurent}}&lt;br /&gt;
{{FeatureInProgress|Knode|Merge in KMail|montel@kde.org|Montel Laurent}}&lt;br /&gt;
{{FeatureInProgress|BackupMail|Extend backup to all kdepim apps|montel@kde.org|Montel Laurent}}&lt;br /&gt;
{{FeatureInProgress|Sieve|Rewrite dialogbox|montel@kde.org|Montel Laurent}}&lt;br /&gt;
{{FeatureInProgress|libs|Move folderview to kdepimlibs/akonadi|montel@kde.org|Montel Laurent}}&lt;br /&gt;
{{FeatureInProgress|kolab-resource|Make Kolab 3.0 option available|mollekopf@kolabsys.com|Christian Mollekopf}}&lt;br /&gt;
{{FeatureDone|KAlarm|Add command line and D-Bus option to output list of scheduled alarms|djarvie@kde.org|David Jarvie}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeplasma-addons =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureInProgress|Microblog|replace with QML version|sebas@kde.org|Sebastian Kügler}}&lt;br /&gt;
{{FeatureTodo|StackFolder|Add applet for quick browse the stack of folders|ural.mullabaev@rosalab.ru|Ural Mullabaev}}&lt;br /&gt;
{{FeatureDone|ComicStrip|Replace with QML version|rshah0385@kireihana.com|Reza Fatahilah Shah}}&lt;br /&gt;
{{FeatureDone|Calculator|Replace with QML version|luizromario@gmail.com|Luiz Romário Santana Rios}}&lt;br /&gt;
{{FeatureDone|QML Wallpapers|Make it possible to have animated wallpapers written in QtQuick technologies.|aleixpol@blue-systems.com|Aleix Pol Gonzalez}}&lt;br /&gt;
{{FeatureDone|Dictionary KRunner|Look up words in the dictionary by typing in 'define {word}' in krunner. [http://blog.zx2c4.com/808 Blog]|Jason@zx2c4.com|Jason A. Donenfeld}}&lt;br /&gt;
{{FeatureInProgress|Eyes|replace with QML version|bettio@kde.org|Davide Bettio}}&lt;br /&gt;
{{FeatureInProgress|FifteenPuzzle|replace with QML version|bettio@kde.org|Davide Bettio}}&lt;br /&gt;
{{FeatureInProgress|Luna|replace with QML version|bettio@kde.org|Davide Bettio}}&lt;br /&gt;
{{FeatureInProgress|Timer|replace with QML version|bettio@kde.org|Davide Bettio}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdesdk  =&lt;br /&gt;
&lt;br /&gt;
{| cellspa/cing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|Okteta|Add a general KPart adapter to Kasten, than finish port of Okteta KPart to Okteta Kasten|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add global toggle option for the offset display, hex or decimal|kossebau@kde.org|Friedrich W. H. Kossebau}} &lt;br /&gt;
{{FeatureTodo|Okteta|Add Kate-like combined dialogs to query for actions on files|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add Kate-like search tool|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add Okular like embedded notifications|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for import by drop, both url and data|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for memory mapping of files and 64-bit addressing|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for jobs like io, printing, string search or filter|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|copy again puts also a value or char variant of the data to clipboard|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Improve the titels of the changes to the bytearray to be more descriptive, best using ids to avoid text string|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Make all user interaction in the KastenCore managers plugin-based|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Merge row and column widgets into one|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Store bookmarks|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Store bookmarks and other view settings for next load|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add custom datatypes to structures tool|alex.richardson@gmx.de|Alex Richardson}}&lt;br /&gt;
{{FeatureInProgress|Okteta|Add tagged unions to structures tool|alex.richardson@gmx.de|Alex Richardson}}&lt;br /&gt;
{{FeatureInProgress|Okteta|Add array indices to structures tool|alex.richardson@gmx.de|Alex Richardson}}&lt;br /&gt;
{{FeatureDone|Umbrello|Line based diagram grid |ralf.habacker@freenet.de|Ralf Habacker}}&lt;br /&gt;
{{FeatureTodo|Umbrello| widget resize and diagram auto resize feature |ralf.habacker@freenet.de|Ralf Habacker}}&lt;br /&gt;
{{FeatureTodo|Umbrello|add spline based association lines to avoid autolayout widget/line overlapping (needs volunteers)|ralf.habacker@freenet.de|Ralf Habacker}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeutils=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|Ark|Make it possible to disable internal previewer|kde@privat.broulik.de|Kai Uwe Broulik}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/API</id>
		<title>Development/Tutorials/Plasma/QML/API</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/API"/>
				<updated>2012-11-21T01:59:59Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: /* AppletContainer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction to the Plasmoid QML Declarative API  =&lt;br /&gt;
&lt;br /&gt;
This document provides an overview/reference of the Declarative QML API for Plasmoids. It isn't a full binding to all of Qt or KDE's libraries, but a focused set of bindings designed to make writing Plasmoids fast and easy, while remaining powerful.&lt;br /&gt;
&lt;br /&gt;
The API in this documentation covers the API of the Plasma specific QML components, so only the Declarative part of the API.&lt;br /&gt;
&lt;br /&gt;
The QML ScriptEngine is based upon the Plasma JavaScript engine, making the API of the JavaScript part identical to the one of the JavaScript plasmoids engine.&lt;br /&gt;
To see the api of the global ''Plasmoid'' object, see the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#The_Global_plasmoid_Object JavaScript API] documentation.&lt;br /&gt;
(TODO: the JavaScript api page should probably be copied and stripped down the imperative bits not present there, it would make it harder to update tough)&lt;br /&gt;
The most important API for using graphical widgets is the [http://api.kde.org/4.x-api/plasma-qml-apidocs/ Plasma QtComponents API]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What Is a Declarative Plasmoid?  ==&lt;br /&gt;
&lt;br /&gt;
To denote that this Plasmoid is a Declarative widget, ensure that in the metadata.desktop file there is this line: &lt;br /&gt;
&lt;br /&gt;
X-Plasma-API=declarativeappletscript&lt;br /&gt;
&lt;br /&gt;
What follows is a description of the Plasma declarative classes instantiable from QML.&lt;br /&gt;
&lt;br /&gt;
== fetching data from the plasmoid package ==&lt;br /&gt;
&lt;br /&gt;
If you have a file in your plasmoid package under contents, let's say an image, you can access it with the plasmapackage url protocol:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Image {&lt;br /&gt;
    source: &amp;quot;plasmapackage:/images/foo.png&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code will load in the Image component the file foo.png located in contents/images of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import &amp;quot;plasmapackage:/code/foo.js&amp;quot; as Foo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, the above code will import a javascript file from the folder contents/code of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
= Properties exported from the main QML item =&lt;br /&gt;
The root qml item can export some properties to influence its behavior:&lt;br /&gt;
* '''property int minimumWidth''': the plasmoid won't ever become narrower then that, size in pixels.&lt;br /&gt;
* '''property int minimumHeight''': minum height of the plasmoid, size in pixels.&lt;br /&gt;
* '''property Component compactRepresentation''': if the plasmoid is a popupapplet, the component in compactRepresentation will be used instead of the icon and will always be collapsed, regardless if it's in a panel or not.&lt;br /&gt;
&lt;br /&gt;
= Main Plasma QML Classes =&lt;br /&gt;
&lt;br /&gt;
== Data Engines ==&lt;br /&gt;
While it's possible to fetch data from a Plasma DataEngine in the same way as the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#DataEngine JavaScript API], it is preferrable to use the following declarative classes:&lt;br /&gt;
&lt;br /&gt;
=== DataSource ===&lt;br /&gt;
DataSource is a receiver for a dataEngine and can be declared inside QML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
 PlasmaCore.DataSource {&lt;br /&gt;
     id: dataSource&lt;br /&gt;
     engine: &amp;quot;time&amp;quot;&lt;br /&gt;
     connectedSources: [&amp;quot;Local&amp;quot;]&lt;br /&gt;
     interval: 500&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* bool '''valid''' (read only): true when the DataSource is successfully connected to a data engine&lt;br /&gt;
* int '''interval''': interval of polling of the dataengine, if 0 (default value, so no need to specify if you don't need it) no polling will be executed&lt;br /&gt;
* string '''engine''': the plugin name of the dataengine to load, e.g. &amp;quot;nowplaying&amp;quot;, etc.&lt;br /&gt;
* Array(string) '''connectedSources''': all the sources of the dataengine we are connected to (and whose data will appear in the '''data''' property)&lt;br /&gt;
* Array(string) '''sources''' (read only): all the sources available from the dataengine&lt;br /&gt;
* variant map '''data''' (read only): It's the most important property, it's a map of all the data available from the dataengine: its structure will be as follows:&lt;br /&gt;
** each key of the map will be a source name, in '''connectedSources'''&lt;br /&gt;
** each value will be a variant hash, so an hash with strings as keys and any variant as value&lt;br /&gt;
** example: dataSource.data[&amp;quot;Local&amp;quot;][&amp;quot;Time&amp;quot;] indicates the '''Time''' key of the dataengine source called &amp;quot;Local&amp;quot;&lt;br /&gt;
* string '''sourceFilter''' it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. If we want to have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Signals ====&lt;br /&gt;
It has the following signals:&lt;br /&gt;
&lt;br /&gt;
Note that javascript/qml applies the 'on' prefix to signals. So the actual signal name in C++ which is e.g. '''newData'''(...) becomes '''onNewData'''(...).&lt;br /&gt;
&lt;br /&gt;
* '''onNewData'''(String sourceName, Plasma::DataEngine::Data data)&lt;br /&gt;
* '''onSourceAdded'''(String source)&lt;br /&gt;
* '''onSourceRemoved'''(String source)&lt;br /&gt;
* '''onSourceConnected'''(String source)&lt;br /&gt;
* '''onSourceDisconnected'''(String source)&lt;br /&gt;
* '''onIntervalChanged'''()&lt;br /&gt;
* '''onEngineChanged'''()&lt;br /&gt;
* '''onDataChanged'''()&lt;br /&gt;
* '''onConnectedSourcesChanged'''()&lt;br /&gt;
* '''onSourcesChanged'''()&lt;br /&gt;
&lt;br /&gt;
==== Methods ====&lt;br /&gt;
It has the following methods:&lt;br /&gt;
* StringList keysForSource(String source): lists all the keys corresponding to a certain source: for instance in the &amp;quot;time&amp;quot; dataengine, for the &amp;quot;Local&amp;quot; source, keys will be:&lt;br /&gt;
** &amp;quot;Timezone Continent&amp;quot;&lt;br /&gt;
** &amp;quot;Offset&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone&amp;quot;&lt;br /&gt;
** &amp;quot;Time&amp;quot;&lt;br /&gt;
** &amp;quot;Date&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone City&amp;quot;&lt;br /&gt;
* Service serviceForSource(String source): returns a Plasma service that corresponds a given source: see the section about services for how to use it.&lt;br /&gt;
* void connectSource(String source): adds to '''connectedSources''' the new source&lt;br /&gt;
* void disconnectSource(String source): removes that source from '''connectedSources'''&lt;br /&gt;
&lt;br /&gt;
=== Service ===&lt;br /&gt;
Due to their imperative nature, Plasma Services are not instantiated as QML classes, but rather created out of a '''DataSource''' with the method '''serviceForSource''' and used in the JavaScript portions of the QML files.&lt;br /&gt;
This following example is a simplified version from the Now Playing QML widget in the kdeexamples git repository: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  var service = dataSource.serviceForSource(activeSource)&lt;br /&gt;
  var operation = service.operationDescription(&amp;quot;seek&amp;quot;)&lt;br /&gt;
  operation.seconds = 10&lt;br /&gt;
&lt;br /&gt;
  var job = service.startOperationCall(operation)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Here dataSource is the id of a DataSource object, and activeSource is a source contained in one of its '''connectedSources'''.&lt;br /&gt;
The service provides an operation called &amp;quot;seek&amp;quot;, with a parameter called &amp;quot;seconds&amp;quot;, that can be written on it as a property of a JavaScript object.&lt;br /&gt;
&lt;br /&gt;
=== ServiceJob ===&lt;br /&gt;
It is necessary to monitor the result of a Service operation, it's possible to connect to the '''finished''' signal provided by the job return paramenter of the '''startOperationCall''' service method.&lt;br /&gt;
The '''finished''' signal has the same job as parameter, from which is possible to check the variant '''result''' property, to check the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var service = messagesDataSource.serviceForSource(src)&lt;br /&gt;
    var operation = &amp;quot;auth&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    function result(job) {&lt;br /&gt;
        statusItem.authorizationStatus = job.result;&lt;br /&gt;
        print(&amp;quot;ServiceJob result: &amp;quot; + job.result + &amp;quot; op: &amp;quot; + job.operationName);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var operation = service.operationDescription(operation);&lt;br /&gt;
    operation.user = userName;&lt;br /&gt;
    operation.password = password;&lt;br /&gt;
    var serviceJob = service.startOperationCall(operation);&lt;br /&gt;
    serviceJob.finished.connect(result);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DataModel ===&lt;br /&gt;
Some data engines return as their data something that can be interpreted as a list of items, rather than simple key/value pairs.&lt;br /&gt;
QML provides some item views such as '''ListView''', '''GridView''' and '''Repeater'''.&lt;br /&gt;
The '''DataModel''' QML object can provide, based on a DataSource a model suitable for those QML item views.&lt;br /&gt;
&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* DataSource '''dataSource''': the id of an existing (and connected) DataSource&lt;br /&gt;
* String '''sourceFilter''': it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. To, for example, have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
* String '''keyRoleFilter''': it's a regular expression. Only data with keys that match this filter expression will be inserted in the model&lt;br /&gt;
* int '''count''' (read only): how many items are in the model&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 ListView {&lt;br /&gt;
   model: PlasmaCore.DataModel {&lt;br /&gt;
        dataSource: microblogSource&lt;br /&gt;
        keyRoleFilter: &amp;quot;[\\d]*&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    delegate: Text {&lt;br /&gt;
        text: title&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the example, ''microblogSource'' is the id of a DataSource, and inserts in the model only entries that have a number as the key name (matched with [\\d]*, in this case tweets ids)&lt;br /&gt;
&lt;br /&gt;
Each item in the model will have the form of a variant hash: all the keys of the hash will be registered as model role names, in the example, &amp;quot;title&amp;quot; is a role of the model containing a string (also reachable with model[&amp;quot;title&amp;quot;]).&lt;br /&gt;
&lt;br /&gt;
A special reserved role will always be present: '''&amp;quot;DataEngineSource&amp;quot;''': it will contain the name of the data engine source that gave origin to this item. Therefore, if you want merely the string of the current source that the model is at...do model[&amp;quot;DataEngineSource&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
Note that view.currentItem holds the item currently selected. However, due to (http://bugreports.qt.nokia.com/browse/QTBUG-16347) this does not work in PathView. A workaround is to make your own.&lt;br /&gt;
&lt;br /&gt;
=== SortFilterModel ===&lt;br /&gt;
SortFilterModel is a proxy model for easy sorting and/or filtering of the items in a DataModel (or any other QAbstractItemModel subclass that has been registered in QML with setContextProperty from a C++ application)&lt;br /&gt;
Properties:&lt;br /&gt;
* model '''sourceModel'''&lt;br /&gt;
* String '''filterRegExp'''&lt;br /&gt;
* String '''filterRole'''&lt;br /&gt;
* String '''sortRole'''&lt;br /&gt;
* Qt::SortOrder '''sortOrder'''&lt;br /&gt;
* int '''count''' (read only)&lt;br /&gt;
&lt;br /&gt;
This is an example from the feed widget:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
model: PlasmaCore.SortFilterModel {&lt;br /&gt;
   id: postTitleFilter&lt;br /&gt;
   filterRole: &amp;quot;title&amp;quot;&lt;br /&gt;
   sortRole: &amp;quot;time&amp;quot;&lt;br /&gt;
   sortOrder: &amp;quot;DescendingOrder&amp;quot;&lt;br /&gt;
   filterRegExp: toolbarFrame.searchQuery&lt;br /&gt;
   sourceModel: PlasmaCore.SortFilterModel {&lt;br /&gt;
      id: feedCategoryFilter&lt;br /&gt;
      filterRole: &amp;quot;feed_url&amp;quot;&lt;br /&gt;
      sourceModel: PlasmaCore.DataModel {&lt;br /&gt;
         dataSource: feedSource&lt;br /&gt;
         keyRoleFilter: &amp;quot;items&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Popup Applet ==&lt;br /&gt;
So you want your QML applet to be a popup applet, like the device notifier (an icon in the panel shows and expands the applet)?&lt;br /&gt;
&lt;br /&gt;
Why, that's easy.&lt;br /&gt;
&lt;br /&gt;
To change your plasmoid from being a regular boring one, in your '''metadata.desktop''', simply change this following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet,Plasma/PopupApplet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in the main QML item's Component.onCompleted, do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    plasmoid.popupIcon = &amp;quot;konqueror&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to use other elements instead of an icon when collapsed in a panel, use the '''compactRepresentation''' property in the root Item.&lt;br /&gt;
&lt;br /&gt;
== Plasma Themes ==&lt;br /&gt;
&lt;br /&gt;
=== Theme ===&lt;br /&gt;
This class instantiable from QML provides access to the Plasma Theme colors and other facilities such as fonts.&lt;br /&gt;
From KDE 4.8 a Theme instance is always present given the org.kde.plasma.core plugin was imported, is not necessary to create it by hand.&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* String '''themeName''' (read only)&lt;br /&gt;
* bool '''windowTranslucentEnabled''' (read only)&lt;br /&gt;
* Url '''homepage''' (read only)&lt;br /&gt;
* bool '''useGlobalSettings''' (read only)&lt;br /&gt;
* QString '''wallpaperPath''' (read only)&lt;br /&gt;
* color '''textColor''' (read only)&lt;br /&gt;
* color '''highlightColor''' (read only)&lt;br /&gt;
* color '''backgroundColor''' (read only)&lt;br /&gt;
* color '''buttonTextColor''' (read only)&lt;br /&gt;
* color '''buttonBackgroundColor''' (read only)&lt;br /&gt;
* color '''linkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''buttonHoverColor''' (read only)&lt;br /&gt;
* color '''buttonFocusColor''' (read only)&lt;br /&gt;
* color '''viewTextColor''' (read only)&lt;br /&gt;
* color '''viewBackgroundColor''' (read only)&lt;br /&gt;
* color '''viewHoverColor''' (read only)&lt;br /&gt;
* color '''viewFocusColor''' (read only)&lt;br /&gt;
* String '''styleSheet''' (read only)&lt;br /&gt;
* Font '''defaultFont''' (read only)&lt;br /&gt;
* Font '''desktopFont''' (read only)&lt;br /&gt;
* Font '''smallestFont''' (read only)&lt;br /&gt;
&lt;br /&gt;
Each Font element has the following properties:&lt;br /&gt;
* bool bold&lt;br /&gt;
* Capitalization '''capitalization''' (MixedCase, AllUppercase, AllLowercase, SmallCaps, Capitalize) (read only)&lt;br /&gt;
* String '''family''' (read only)&lt;br /&gt;
* bool '''italic''' (read only)&lt;br /&gt;
* real '''letterSpacing''' (read only)&lt;br /&gt;
* int '''pixelSize''' (read only)&lt;br /&gt;
* real '''pointSize''' (read only)&lt;br /&gt;
* bool '''strikeout''' (read only)&lt;br /&gt;
* bool '''underline''' (read only)&lt;br /&gt;
* Weight '''weight''' (Light, Normal, DemiBold, Bold, Black) (read only)&lt;br /&gt;
* real '''wordSpacing''' (read only)&lt;br /&gt;
* size '''mSize''' the size, width and height of an uppercase &amp;quot;M&amp;quot; in this font (read only)&lt;br /&gt;
&lt;br /&gt;
=== Svg ===&lt;br /&gt;
Declaring a Svg element instantiates a Plasma Svg instance. This class doesn't draw anything. For drawing, SvgItem is used.&lt;br /&gt;
Properties:&lt;br /&gt;
* QSize '''size'''&lt;br /&gt;
* bool '''multipleImages'''&lt;br /&gt;
* String '''imagePath''' can be anything in the '''desktoptheme/''' folder. For more information on what is available, see [http://techbase.kde.org/Projects/Plasma/Theme#Current_Theme_Elements Plasma Theme Elements]. Make sure to strip the final extension from this string, so you should for example use &amp;lt;code&amp;gt;&amp;quot;dialogs/background&amp;quot;&amp;lt;/code&amp;gt; to get the standard background.&lt;br /&gt;
* bool '''usingRenderingCache'''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPixmap pixmap(QString elementID)&lt;br /&gt;
* void resize(qreal width, qreal height)&lt;br /&gt;
* void resize(): resets the image to its default dimension&lt;br /&gt;
* QSize elementSize(QString elementId)&lt;br /&gt;
* QRectF elementRect(QString elementId)&lt;br /&gt;
* bool hasElement(QString elementId)&lt;br /&gt;
* bool isValid(): true if valid svg file&lt;br /&gt;
&lt;br /&gt;
=== FrameSvg ===&lt;br /&gt;
Declaring a FrameSvg element instantiates a Plasma FrameSvg instance. This class doesn't draw anything. For drawing, FrameSvgItem is used.&lt;br /&gt;
This is to be used when you need informations about the framesvg, such as hasElementPrefix().&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* All properties from Svg&lt;br /&gt;
* EnabledBorders '''enabledBorders''': flag combination of:&lt;br /&gt;
** NoBorder&lt;br /&gt;
** TopBorder&lt;br /&gt;
** BottomBorder&lt;br /&gt;
** LeftBorder&lt;br /&gt;
** RightBorder&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* All methods from Svg&lt;br /&gt;
* void setImagePath(QString path)&lt;br /&gt;
* void resizeFrame(QSize size)&lt;br /&gt;
* QSize frameSize()&lt;br /&gt;
* qreal marginSize(Plasma::MarginEdge edge)&lt;br /&gt;
* void getMargins(qreal left, qreal top, qreal right, qreal bottom): parameters are output, they get set with the margins from the FrameSvg&lt;br /&gt;
* QRectF contentsRect(): the rectangle of the center element, taking the margins into account.&lt;br /&gt;
* void setElementPrefix(QString prefix)&lt;br /&gt;
* bool hasElementPrefix(const QString prefix)&lt;br /&gt;
* QString prefix()&lt;br /&gt;
* void setCacheAllRenderedFrames(bool cache)&lt;br /&gt;
* bool cacheAllRenderedFrames()&lt;br /&gt;
* void clearCache()&lt;br /&gt;
* QPixmap framePixmap()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.FrameSvg {&lt;br /&gt;
        id: myFrameSvg&lt;br /&gt;
        imagePath: &amp;quot;widgets/button&amp;quot;&lt;br /&gt;
        prefix: &amp;quot;pressed&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SvgItem ===&lt;br /&gt;
It's a graphical element that will actually paint a Svg instance.&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''elementId''': what element to render. If null, the whole svg will be rendered&lt;br /&gt;
* Svg '''svg''': instance of the Svg class mentioned above&lt;br /&gt;
* QSizeF '''naturalSize''' (read only): default size of the Svg&lt;br /&gt;
* bool '''smooth''': paint with antialias (default false)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.SvgItem {&lt;br /&gt;
        id: mySvgItem&lt;br /&gt;
        anchors {&lt;br /&gt;
            top: parent.top&lt;br /&gt;
            left: parent.left&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        width: 300&lt;br /&gt;
        height: 3&lt;br /&gt;
&lt;br /&gt;
        svg: mySvg&lt;br /&gt;
        elementId: &amp;quot;horizontal-line&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FrameSvgItem ===&lt;br /&gt;
It's a graphical element that paints a Plasma::FrameSvg, so a rectangular image composed by 9 elements contained in a Svg file, useful for things like buttons and frames.&lt;br /&gt;
&lt;br /&gt;
Flags&lt;br /&gt;
* EnabledBorders: combination of TopBorder | BottomBorder | LeftBorder | RightBorder, NoBorder if no border of the frame is enabled&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''imagePath''': path of the file relative to the Plasma Theme, for instance &amp;quot;widgets/background&amp;quot;&lt;br /&gt;
* String '''prefix''': a FrameSvg can contain multiple frames, for instance a button contains &amp;quot;normal&amp;quot;, &amp;quot;raised&amp;quot; and &amp;quot;pressed&amp;quot;&lt;br /&gt;
* Margins '''margins''' (read only): the margins of the frame, see documentation below&lt;br /&gt;
* EnabledBorders '''enabledBorders''': what borders are enabled&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
PlasmaCore.FrameSvgItem {&lt;br /&gt;
    id: myFrameSvgItem&lt;br /&gt;
    anchors.fill: parent&lt;br /&gt;
    imagePath: &amp;quot;translucent/dialogs/background&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top Level windows ==&lt;br /&gt;
&lt;br /&gt;
=== Dialog ===&lt;br /&gt;
Dialog instantiates a Plasma::Dialog, it will be a Plasma themed top level window that can contain any QML component.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''mainItem''': the Item contained in the Dialog, it can be any QML Item instance&lt;br /&gt;
* bool '''visible''': if the window (not the mainItem) is visible&lt;br /&gt;
* int '''x''': x position of the window in screen coordinates&lt;br /&gt;
* int '''y''': y position of the window in screen coordinates&lt;br /&gt;
* int '''width''' (read only): total width of the dialog, including margins&lt;br /&gt;
* int '''height''' (read only): total height of the dialog, including margins.&lt;br /&gt;
* int '''windowFlags''': Qt window flags of the Dialog&lt;br /&gt;
* Margins '''margins''' (read only): margins of the Dialog&lt;br /&gt;
&lt;br /&gt;
{{Note|The width and height will scale with size of the main item within this Dialog component.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import QtQuick 1.1&lt;br /&gt;
import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
    PlasmaCore.Dialog {&lt;br /&gt;
        visible: true&lt;br /&gt;
        mainItem: Item {&lt;br /&gt;
            width: 500&lt;br /&gt;
            height: 500&lt;br /&gt;
&lt;br /&gt;
            Text {&lt;br /&gt;
                anchors.centerIn: parent&lt;br /&gt;
                color: &amp;quot;red&amp;quot;&lt;br /&gt;
                text: qsTr(&amp;quot;text&amp;quot;)&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPoint popupPosition(Item item, Qt::Alignment alignment=Qt::AlignLeft): the suggested position for the Dialog if it has to be correctly placed as popup of the QML item passed as parameter.&lt;br /&gt;
* void setAttribute(Qt::WindowAttribute attribute, bool on): set an attribute for the dialog window&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
=== ToolTip ===&lt;br /&gt;
Declaring a ToolTip instance makes it possible to use Plasma tooltips with any QML item.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''target''': the QML item we want to show a tooltip of&lt;br /&gt;
* String '''mainText'''&lt;br /&gt;
* String '''subText'''&lt;br /&gt;
* String '''image''': freedesktop compliant icon name as image of the tooltip&lt;br /&gt;
&lt;br /&gt;
== Containments ==&lt;br /&gt;
A Plasma Containment manages the position and manipulation of Plasmoids. The declarative containment is responsible for layout of applets and can provide custom applet handles. The containment should listen to the plasmoid.immutability property. In order to lay out applets in your containment, you can use the AppletContainer class to access geometry information of applets.&lt;br /&gt;
Actions such as configure and close are available through plasmoid.actions.&lt;br /&gt;
You can access the plasmoid global property from containments in the same way as from declarative and javascript plasmoids. If the plasmoid is a Containment, you can get a list of actions for it. If you want to provide background rendering in your Containment yourself, read the applet.backgroundHints property and after that set applet.backgroundHints to 0 to tell the Applet that is should not render the background.&lt;br /&gt;
 &lt;br /&gt;
=== AppletContainer ===&lt;br /&gt;
The AppletContainer class provides access to the geometry and status of Plasmoids in this Containment.&lt;br /&gt;
Properties:&lt;br /&gt;
* ''Item'' '''applet''': The applet item, this property allows you to track destruction of the actual applet and update your layout.&lt;br /&gt;
** ''int'' '''backgroundHints''': Should the Applet be rendered on top of a background frame? 0 for no background, 1 for default background, 2 for translucent background&lt;br /&gt;
* ''int'' '''minimumWidth''': The minimum width of the applet&lt;br /&gt;
* ''int'' '''minimumHeight''': The minimum height of the applet&lt;br /&gt;
* ''int'' '''maximumWidth''': The maximum width of the applet&lt;br /&gt;
* ''int'' '''maximumHeight''': The maximum height of the applet&lt;br /&gt;
* ''int'' '''preferredWidth''': The preferred height of the applet&lt;br /&gt;
* ''int'' '''preferredHeight''': The preferred height of the applet&lt;br /&gt;
* ''enum'' '''status''': The status of the applet, one in the enum&lt;br /&gt;
** '''UnknownStatus''': The status is unknown&lt;br /&gt;
** '''PassiveStatus''': The applet is passive&lt;br /&gt;
** '''ActiveStatus''': The applet is active&lt;br /&gt;
** '''NeedsAttentionStatus''': The applet asks for attention&lt;br /&gt;
** '''AcceptingInputStatus''': The applet is accepting input&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
They can be imported in your code with:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.plasma.containments 0.1 as PlasmaContainments&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AppletContainer is only available for Plasma/Containment packages, and only if they are loaded as containment. AppletContainer is new in 4.10.&lt;br /&gt;
&lt;br /&gt;
=== ToolBox ===&lt;br /&gt;
The ToolBox is only available through the plasmoid object, through plasmoid.toolBox(). The ToolBox is rendered as a separate item  on top of the scene covering the entire containment. It is loaded from the &amp;quot;org.kde.toolbox&amp;quot; Plasma Package, if the package is not found, no ToolBox will be loaded.&lt;br /&gt;
The ToolBox provides a listmodel of actions that can be rendered using Repeaters or ListViews. The ''actions'' list property contains actions from the Corona and Containments. Examples for these actions are showing the add widget or activities interface, lock and unlock. The actions in the list change dynamically whenever the widgets are locked or unlocked.&lt;br /&gt;
Actions such as lock screen and leave can be implemented using the powermanagement dataengine's services for these functions.&lt;br /&gt;
&lt;br /&gt;
ToolBox provides access to the following properties:&lt;br /&gt;
* ''Array(QAction)'' '''actions''': A list of actions provided by the Containment. These actions' most interesting properties are: &lt;br /&gt;
** ''QIcon'' '''icon''': The icon belonging to this action.&lt;br /&gt;
** ''String'' '''text''': The icon belonging to this action.&lt;br /&gt;
** '''trigger()''': Call trigger from your action delegate to trigger the action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.plasma.containments 0.1 as PlasmaContainments&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ToolBox is only available for Containments and new in 4.10.&lt;br /&gt;
&lt;br /&gt;
= Plasma QtComponents (4.8) =&lt;br /&gt;
Plasma components documentation online at [http://api.kde.org/4.x-api/plasma-qml-apidocs/ api.kde.org]&lt;br /&gt;
&lt;br /&gt;
=QtExtraComponents=&lt;br /&gt;
The QtExtraComponents make some very convenient Qt classes usable from within QML.&lt;br /&gt;
&lt;br /&gt;
They can be imported in your code with:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.qtextracomponents 0.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==QPixmapItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QPixmap directly to QPixmapItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QPixmap '''pixmap''': The QPixmap object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QPixmap width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QPixmap height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==QImageItem==&lt;br /&gt;
This one wraps around a QImage class and allows you to send a QImage directly to QImageItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QImage '''image''': The QImage object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QImage width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QImage height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==FillMode==&lt;br /&gt;
Both QPixmapItem and QImageItem expose a FillMode enum. This enum defines how the image is going to be used to fill the item.&lt;br /&gt;
&lt;br /&gt;
For QPixmapItem, possible values are:&lt;br /&gt;
&lt;br /&gt;
* QPixmapItem.Stretch: the image is scaled to fit&lt;br /&gt;
* QPixmapItem.PreserveAspectFit: the image is scaled uniformly to fit without cropping&lt;br /&gt;
* QPixmapItem.PreserveAspectCrop: the image is scaled uniformly to fill, cropping if necessary&lt;br /&gt;
* QPixmapItem.Tile: the image is duplicated horizontally and vertically&lt;br /&gt;
* QPixmapItem.TileVertically: the image is stretched horizontally and tiled vertically&lt;br /&gt;
* QPixmapItem.TileHorizontally :e image is stretched vertically and tiled horizontally&lt;br /&gt;
&lt;br /&gt;
QImageItem defines the same values, you just need to replace QPixmapItem with QImageItem.&lt;br /&gt;
&lt;br /&gt;
==QIconItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QIcon directly to QIconItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QIcon/QString '''icon''': If you provide a QIcon it uses that directly. If you provide a string it uses a KIcon internally!&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''implicitWidth''': Default width of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* int '''implicitHeight''': Default height of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* State '''state''': Icon state (DefaultState, ActiveState, DisabledState)&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/API</id>
		<title>Development/Tutorials/Plasma/QML/API</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/API"/>
				<updated>2012-11-21T01:58:57Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: background hints&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction to the Plasmoid QML Declarative API  =&lt;br /&gt;
&lt;br /&gt;
This document provides an overview/reference of the Declarative QML API for Plasmoids. It isn't a full binding to all of Qt or KDE's libraries, but a focused set of bindings designed to make writing Plasmoids fast and easy, while remaining powerful.&lt;br /&gt;
&lt;br /&gt;
The API in this documentation covers the API of the Plasma specific QML components, so only the Declarative part of the API.&lt;br /&gt;
&lt;br /&gt;
The QML ScriptEngine is based upon the Plasma JavaScript engine, making the API of the JavaScript part identical to the one of the JavaScript plasmoids engine.&lt;br /&gt;
To see the api of the global ''Plasmoid'' object, see the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#The_Global_plasmoid_Object JavaScript API] documentation.&lt;br /&gt;
(TODO: the JavaScript api page should probably be copied and stripped down the imperative bits not present there, it would make it harder to update tough)&lt;br /&gt;
The most important API for using graphical widgets is the [http://api.kde.org/4.x-api/plasma-qml-apidocs/ Plasma QtComponents API]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What Is a Declarative Plasmoid?  ==&lt;br /&gt;
&lt;br /&gt;
To denote that this Plasmoid is a Declarative widget, ensure that in the metadata.desktop file there is this line: &lt;br /&gt;
&lt;br /&gt;
X-Plasma-API=declarativeappletscript&lt;br /&gt;
&lt;br /&gt;
What follows is a description of the Plasma declarative classes instantiable from QML.&lt;br /&gt;
&lt;br /&gt;
== fetching data from the plasmoid package ==&lt;br /&gt;
&lt;br /&gt;
If you have a file in your plasmoid package under contents, let's say an image, you can access it with the plasmapackage url protocol:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Image {&lt;br /&gt;
    source: &amp;quot;plasmapackage:/images/foo.png&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code will load in the Image component the file foo.png located in contents/images of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import &amp;quot;plasmapackage:/code/foo.js&amp;quot; as Foo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, the above code will import a javascript file from the folder contents/code of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
= Properties exported from the main QML item =&lt;br /&gt;
The root qml item can export some properties to influence its behavior:&lt;br /&gt;
* '''property int minimumWidth''': the plasmoid won't ever become narrower then that, size in pixels.&lt;br /&gt;
* '''property int minimumHeight''': minum height of the plasmoid, size in pixels.&lt;br /&gt;
* '''property Component compactRepresentation''': if the plasmoid is a popupapplet, the component in compactRepresentation will be used instead of the icon and will always be collapsed, regardless if it's in a panel or not.&lt;br /&gt;
&lt;br /&gt;
= Main Plasma QML Classes =&lt;br /&gt;
&lt;br /&gt;
== Data Engines ==&lt;br /&gt;
While it's possible to fetch data from a Plasma DataEngine in the same way as the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#DataEngine JavaScript API], it is preferrable to use the following declarative classes:&lt;br /&gt;
&lt;br /&gt;
=== DataSource ===&lt;br /&gt;
DataSource is a receiver for a dataEngine and can be declared inside QML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
 PlasmaCore.DataSource {&lt;br /&gt;
     id: dataSource&lt;br /&gt;
     engine: &amp;quot;time&amp;quot;&lt;br /&gt;
     connectedSources: [&amp;quot;Local&amp;quot;]&lt;br /&gt;
     interval: 500&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* bool '''valid''' (read only): true when the DataSource is successfully connected to a data engine&lt;br /&gt;
* int '''interval''': interval of polling of the dataengine, if 0 (default value, so no need to specify if you don't need it) no polling will be executed&lt;br /&gt;
* string '''engine''': the plugin name of the dataengine to load, e.g. &amp;quot;nowplaying&amp;quot;, etc.&lt;br /&gt;
* Array(string) '''connectedSources''': all the sources of the dataengine we are connected to (and whose data will appear in the '''data''' property)&lt;br /&gt;
* Array(string) '''sources''' (read only): all the sources available from the dataengine&lt;br /&gt;
* variant map '''data''' (read only): It's the most important property, it's a map of all the data available from the dataengine: its structure will be as follows:&lt;br /&gt;
** each key of the map will be a source name, in '''connectedSources'''&lt;br /&gt;
** each value will be a variant hash, so an hash with strings as keys and any variant as value&lt;br /&gt;
** example: dataSource.data[&amp;quot;Local&amp;quot;][&amp;quot;Time&amp;quot;] indicates the '''Time''' key of the dataengine source called &amp;quot;Local&amp;quot;&lt;br /&gt;
* string '''sourceFilter''' it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. If we want to have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Signals ====&lt;br /&gt;
It has the following signals:&lt;br /&gt;
&lt;br /&gt;
Note that javascript/qml applies the 'on' prefix to signals. So the actual signal name in C++ which is e.g. '''newData'''(...) becomes '''onNewData'''(...).&lt;br /&gt;
&lt;br /&gt;
* '''onNewData'''(String sourceName, Plasma::DataEngine::Data data)&lt;br /&gt;
* '''onSourceAdded'''(String source)&lt;br /&gt;
* '''onSourceRemoved'''(String source)&lt;br /&gt;
* '''onSourceConnected'''(String source)&lt;br /&gt;
* '''onSourceDisconnected'''(String source)&lt;br /&gt;
* '''onIntervalChanged'''()&lt;br /&gt;
* '''onEngineChanged'''()&lt;br /&gt;
* '''onDataChanged'''()&lt;br /&gt;
* '''onConnectedSourcesChanged'''()&lt;br /&gt;
* '''onSourcesChanged'''()&lt;br /&gt;
&lt;br /&gt;
==== Methods ====&lt;br /&gt;
It has the following methods:&lt;br /&gt;
* StringList keysForSource(String source): lists all the keys corresponding to a certain source: for instance in the &amp;quot;time&amp;quot; dataengine, for the &amp;quot;Local&amp;quot; source, keys will be:&lt;br /&gt;
** &amp;quot;Timezone Continent&amp;quot;&lt;br /&gt;
** &amp;quot;Offset&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone&amp;quot;&lt;br /&gt;
** &amp;quot;Time&amp;quot;&lt;br /&gt;
** &amp;quot;Date&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone City&amp;quot;&lt;br /&gt;
* Service serviceForSource(String source): returns a Plasma service that corresponds a given source: see the section about services for how to use it.&lt;br /&gt;
* void connectSource(String source): adds to '''connectedSources''' the new source&lt;br /&gt;
* void disconnectSource(String source): removes that source from '''connectedSources'''&lt;br /&gt;
&lt;br /&gt;
=== Service ===&lt;br /&gt;
Due to their imperative nature, Plasma Services are not instantiated as QML classes, but rather created out of a '''DataSource''' with the method '''serviceForSource''' and used in the JavaScript portions of the QML files.&lt;br /&gt;
This following example is a simplified version from the Now Playing QML widget in the kdeexamples git repository: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  var service = dataSource.serviceForSource(activeSource)&lt;br /&gt;
  var operation = service.operationDescription(&amp;quot;seek&amp;quot;)&lt;br /&gt;
  operation.seconds = 10&lt;br /&gt;
&lt;br /&gt;
  var job = service.startOperationCall(operation)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Here dataSource is the id of a DataSource object, and activeSource is a source contained in one of its '''connectedSources'''.&lt;br /&gt;
The service provides an operation called &amp;quot;seek&amp;quot;, with a parameter called &amp;quot;seconds&amp;quot;, that can be written on it as a property of a JavaScript object.&lt;br /&gt;
&lt;br /&gt;
=== ServiceJob ===&lt;br /&gt;
It is necessary to monitor the result of a Service operation, it's possible to connect to the '''finished''' signal provided by the job return paramenter of the '''startOperationCall''' service method.&lt;br /&gt;
The '''finished''' signal has the same job as parameter, from which is possible to check the variant '''result''' property, to check the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var service = messagesDataSource.serviceForSource(src)&lt;br /&gt;
    var operation = &amp;quot;auth&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    function result(job) {&lt;br /&gt;
        statusItem.authorizationStatus = job.result;&lt;br /&gt;
        print(&amp;quot;ServiceJob result: &amp;quot; + job.result + &amp;quot; op: &amp;quot; + job.operationName);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var operation = service.operationDescription(operation);&lt;br /&gt;
    operation.user = userName;&lt;br /&gt;
    operation.password = password;&lt;br /&gt;
    var serviceJob = service.startOperationCall(operation);&lt;br /&gt;
    serviceJob.finished.connect(result);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DataModel ===&lt;br /&gt;
Some data engines return as their data something that can be interpreted as a list of items, rather than simple key/value pairs.&lt;br /&gt;
QML provides some item views such as '''ListView''', '''GridView''' and '''Repeater'''.&lt;br /&gt;
The '''DataModel''' QML object can provide, based on a DataSource a model suitable for those QML item views.&lt;br /&gt;
&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* DataSource '''dataSource''': the id of an existing (and connected) DataSource&lt;br /&gt;
* String '''sourceFilter''': it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. To, for example, have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
* String '''keyRoleFilter''': it's a regular expression. Only data with keys that match this filter expression will be inserted in the model&lt;br /&gt;
* int '''count''' (read only): how many items are in the model&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 ListView {&lt;br /&gt;
   model: PlasmaCore.DataModel {&lt;br /&gt;
        dataSource: microblogSource&lt;br /&gt;
        keyRoleFilter: &amp;quot;[\\d]*&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    delegate: Text {&lt;br /&gt;
        text: title&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the example, ''microblogSource'' is the id of a DataSource, and inserts in the model only entries that have a number as the key name (matched with [\\d]*, in this case tweets ids)&lt;br /&gt;
&lt;br /&gt;
Each item in the model will have the form of a variant hash: all the keys of the hash will be registered as model role names, in the example, &amp;quot;title&amp;quot; is a role of the model containing a string (also reachable with model[&amp;quot;title&amp;quot;]).&lt;br /&gt;
&lt;br /&gt;
A special reserved role will always be present: '''&amp;quot;DataEngineSource&amp;quot;''': it will contain the name of the data engine source that gave origin to this item. Therefore, if you want merely the string of the current source that the model is at...do model[&amp;quot;DataEngineSource&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
Note that view.currentItem holds the item currently selected. However, due to (http://bugreports.qt.nokia.com/browse/QTBUG-16347) this does not work in PathView. A workaround is to make your own.&lt;br /&gt;
&lt;br /&gt;
=== SortFilterModel ===&lt;br /&gt;
SortFilterModel is a proxy model for easy sorting and/or filtering of the items in a DataModel (or any other QAbstractItemModel subclass that has been registered in QML with setContextProperty from a C++ application)&lt;br /&gt;
Properties:&lt;br /&gt;
* model '''sourceModel'''&lt;br /&gt;
* String '''filterRegExp'''&lt;br /&gt;
* String '''filterRole'''&lt;br /&gt;
* String '''sortRole'''&lt;br /&gt;
* Qt::SortOrder '''sortOrder'''&lt;br /&gt;
* int '''count''' (read only)&lt;br /&gt;
&lt;br /&gt;
This is an example from the feed widget:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
model: PlasmaCore.SortFilterModel {&lt;br /&gt;
   id: postTitleFilter&lt;br /&gt;
   filterRole: &amp;quot;title&amp;quot;&lt;br /&gt;
   sortRole: &amp;quot;time&amp;quot;&lt;br /&gt;
   sortOrder: &amp;quot;DescendingOrder&amp;quot;&lt;br /&gt;
   filterRegExp: toolbarFrame.searchQuery&lt;br /&gt;
   sourceModel: PlasmaCore.SortFilterModel {&lt;br /&gt;
      id: feedCategoryFilter&lt;br /&gt;
      filterRole: &amp;quot;feed_url&amp;quot;&lt;br /&gt;
      sourceModel: PlasmaCore.DataModel {&lt;br /&gt;
         dataSource: feedSource&lt;br /&gt;
         keyRoleFilter: &amp;quot;items&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Popup Applet ==&lt;br /&gt;
So you want your QML applet to be a popup applet, like the device notifier (an icon in the panel shows and expands the applet)?&lt;br /&gt;
&lt;br /&gt;
Why, that's easy.&lt;br /&gt;
&lt;br /&gt;
To change your plasmoid from being a regular boring one, in your '''metadata.desktop''', simply change this following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet,Plasma/PopupApplet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in the main QML item's Component.onCompleted, do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    plasmoid.popupIcon = &amp;quot;konqueror&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to use other elements instead of an icon when collapsed in a panel, use the '''compactRepresentation''' property in the root Item.&lt;br /&gt;
&lt;br /&gt;
== Plasma Themes ==&lt;br /&gt;
&lt;br /&gt;
=== Theme ===&lt;br /&gt;
This class instantiable from QML provides access to the Plasma Theme colors and other facilities such as fonts.&lt;br /&gt;
From KDE 4.8 a Theme instance is always present given the org.kde.plasma.core plugin was imported, is not necessary to create it by hand.&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* String '''themeName''' (read only)&lt;br /&gt;
* bool '''windowTranslucentEnabled''' (read only)&lt;br /&gt;
* Url '''homepage''' (read only)&lt;br /&gt;
* bool '''useGlobalSettings''' (read only)&lt;br /&gt;
* QString '''wallpaperPath''' (read only)&lt;br /&gt;
* color '''textColor''' (read only)&lt;br /&gt;
* color '''highlightColor''' (read only)&lt;br /&gt;
* color '''backgroundColor''' (read only)&lt;br /&gt;
* color '''buttonTextColor''' (read only)&lt;br /&gt;
* color '''buttonBackgroundColor''' (read only)&lt;br /&gt;
* color '''linkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''buttonHoverColor''' (read only)&lt;br /&gt;
* color '''buttonFocusColor''' (read only)&lt;br /&gt;
* color '''viewTextColor''' (read only)&lt;br /&gt;
* color '''viewBackgroundColor''' (read only)&lt;br /&gt;
* color '''viewHoverColor''' (read only)&lt;br /&gt;
* color '''viewFocusColor''' (read only)&lt;br /&gt;
* String '''styleSheet''' (read only)&lt;br /&gt;
* Font '''defaultFont''' (read only)&lt;br /&gt;
* Font '''desktopFont''' (read only)&lt;br /&gt;
* Font '''smallestFont''' (read only)&lt;br /&gt;
&lt;br /&gt;
Each Font element has the following properties:&lt;br /&gt;
* bool bold&lt;br /&gt;
* Capitalization '''capitalization''' (MixedCase, AllUppercase, AllLowercase, SmallCaps, Capitalize) (read only)&lt;br /&gt;
* String '''family''' (read only)&lt;br /&gt;
* bool '''italic''' (read only)&lt;br /&gt;
* real '''letterSpacing''' (read only)&lt;br /&gt;
* int '''pixelSize''' (read only)&lt;br /&gt;
* real '''pointSize''' (read only)&lt;br /&gt;
* bool '''strikeout''' (read only)&lt;br /&gt;
* bool '''underline''' (read only)&lt;br /&gt;
* Weight '''weight''' (Light, Normal, DemiBold, Bold, Black) (read only)&lt;br /&gt;
* real '''wordSpacing''' (read only)&lt;br /&gt;
* size '''mSize''' the size, width and height of an uppercase &amp;quot;M&amp;quot; in this font (read only)&lt;br /&gt;
&lt;br /&gt;
=== Svg ===&lt;br /&gt;
Declaring a Svg element instantiates a Plasma Svg instance. This class doesn't draw anything. For drawing, SvgItem is used.&lt;br /&gt;
Properties:&lt;br /&gt;
* QSize '''size'''&lt;br /&gt;
* bool '''multipleImages'''&lt;br /&gt;
* String '''imagePath''' can be anything in the '''desktoptheme/''' folder. For more information on what is available, see [http://techbase.kde.org/Projects/Plasma/Theme#Current_Theme_Elements Plasma Theme Elements]. Make sure to strip the final extension from this string, so you should for example use &amp;lt;code&amp;gt;&amp;quot;dialogs/background&amp;quot;&amp;lt;/code&amp;gt; to get the standard background.&lt;br /&gt;
* bool '''usingRenderingCache'''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPixmap pixmap(QString elementID)&lt;br /&gt;
* void resize(qreal width, qreal height)&lt;br /&gt;
* void resize(): resets the image to its default dimension&lt;br /&gt;
* QSize elementSize(QString elementId)&lt;br /&gt;
* QRectF elementRect(QString elementId)&lt;br /&gt;
* bool hasElement(QString elementId)&lt;br /&gt;
* bool isValid(): true if valid svg file&lt;br /&gt;
&lt;br /&gt;
=== FrameSvg ===&lt;br /&gt;
Declaring a FrameSvg element instantiates a Plasma FrameSvg instance. This class doesn't draw anything. For drawing, FrameSvgItem is used.&lt;br /&gt;
This is to be used when you need informations about the framesvg, such as hasElementPrefix().&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* All properties from Svg&lt;br /&gt;
* EnabledBorders '''enabledBorders''': flag combination of:&lt;br /&gt;
** NoBorder&lt;br /&gt;
** TopBorder&lt;br /&gt;
** BottomBorder&lt;br /&gt;
** LeftBorder&lt;br /&gt;
** RightBorder&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* All methods from Svg&lt;br /&gt;
* void setImagePath(QString path)&lt;br /&gt;
* void resizeFrame(QSize size)&lt;br /&gt;
* QSize frameSize()&lt;br /&gt;
* qreal marginSize(Plasma::MarginEdge edge)&lt;br /&gt;
* void getMargins(qreal left, qreal top, qreal right, qreal bottom): parameters are output, they get set with the margins from the FrameSvg&lt;br /&gt;
* QRectF contentsRect(): the rectangle of the center element, taking the margins into account.&lt;br /&gt;
* void setElementPrefix(QString prefix)&lt;br /&gt;
* bool hasElementPrefix(const QString prefix)&lt;br /&gt;
* QString prefix()&lt;br /&gt;
* void setCacheAllRenderedFrames(bool cache)&lt;br /&gt;
* bool cacheAllRenderedFrames()&lt;br /&gt;
* void clearCache()&lt;br /&gt;
* QPixmap framePixmap()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.FrameSvg {&lt;br /&gt;
        id: myFrameSvg&lt;br /&gt;
        imagePath: &amp;quot;widgets/button&amp;quot;&lt;br /&gt;
        prefix: &amp;quot;pressed&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SvgItem ===&lt;br /&gt;
It's a graphical element that will actually paint a Svg instance.&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''elementId''': what element to render. If null, the whole svg will be rendered&lt;br /&gt;
* Svg '''svg''': instance of the Svg class mentioned above&lt;br /&gt;
* QSizeF '''naturalSize''' (read only): default size of the Svg&lt;br /&gt;
* bool '''smooth''': paint with antialias (default false)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.SvgItem {&lt;br /&gt;
        id: mySvgItem&lt;br /&gt;
        anchors {&lt;br /&gt;
            top: parent.top&lt;br /&gt;
            left: parent.left&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        width: 300&lt;br /&gt;
        height: 3&lt;br /&gt;
&lt;br /&gt;
        svg: mySvg&lt;br /&gt;
        elementId: &amp;quot;horizontal-line&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FrameSvgItem ===&lt;br /&gt;
It's a graphical element that paints a Plasma::FrameSvg, so a rectangular image composed by 9 elements contained in a Svg file, useful for things like buttons and frames.&lt;br /&gt;
&lt;br /&gt;
Flags&lt;br /&gt;
* EnabledBorders: combination of TopBorder | BottomBorder | LeftBorder | RightBorder, NoBorder if no border of the frame is enabled&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''imagePath''': path of the file relative to the Plasma Theme, for instance &amp;quot;widgets/background&amp;quot;&lt;br /&gt;
* String '''prefix''': a FrameSvg can contain multiple frames, for instance a button contains &amp;quot;normal&amp;quot;, &amp;quot;raised&amp;quot; and &amp;quot;pressed&amp;quot;&lt;br /&gt;
* Margins '''margins''' (read only): the margins of the frame, see documentation below&lt;br /&gt;
* EnabledBorders '''enabledBorders''': what borders are enabled&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
PlasmaCore.FrameSvgItem {&lt;br /&gt;
    id: myFrameSvgItem&lt;br /&gt;
    anchors.fill: parent&lt;br /&gt;
    imagePath: &amp;quot;translucent/dialogs/background&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top Level windows ==&lt;br /&gt;
&lt;br /&gt;
=== Dialog ===&lt;br /&gt;
Dialog instantiates a Plasma::Dialog, it will be a Plasma themed top level window that can contain any QML component.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''mainItem''': the Item contained in the Dialog, it can be any QML Item instance&lt;br /&gt;
* bool '''visible''': if the window (not the mainItem) is visible&lt;br /&gt;
* int '''x''': x position of the window in screen coordinates&lt;br /&gt;
* int '''y''': y position of the window in screen coordinates&lt;br /&gt;
* int '''width''' (read only): total width of the dialog, including margins&lt;br /&gt;
* int '''height''' (read only): total height of the dialog, including margins.&lt;br /&gt;
* int '''windowFlags''': Qt window flags of the Dialog&lt;br /&gt;
* Margins '''margins''' (read only): margins of the Dialog&lt;br /&gt;
&lt;br /&gt;
{{Note|The width and height will scale with size of the main item within this Dialog component.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import QtQuick 1.1&lt;br /&gt;
import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
    PlasmaCore.Dialog {&lt;br /&gt;
        visible: true&lt;br /&gt;
        mainItem: Item {&lt;br /&gt;
            width: 500&lt;br /&gt;
            height: 500&lt;br /&gt;
&lt;br /&gt;
            Text {&lt;br /&gt;
                anchors.centerIn: parent&lt;br /&gt;
                color: &amp;quot;red&amp;quot;&lt;br /&gt;
                text: qsTr(&amp;quot;text&amp;quot;)&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPoint popupPosition(Item item, Qt::Alignment alignment=Qt::AlignLeft): the suggested position for the Dialog if it has to be correctly placed as popup of the QML item passed as parameter.&lt;br /&gt;
* void setAttribute(Qt::WindowAttribute attribute, bool on): set an attribute for the dialog window&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
=== ToolTip ===&lt;br /&gt;
Declaring a ToolTip instance makes it possible to use Plasma tooltips with any QML item.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''target''': the QML item we want to show a tooltip of&lt;br /&gt;
* String '''mainText'''&lt;br /&gt;
* String '''subText'''&lt;br /&gt;
* String '''image''': freedesktop compliant icon name as image of the tooltip&lt;br /&gt;
&lt;br /&gt;
== Containments ==&lt;br /&gt;
A Plasma Containment manages the position and manipulation of Plasmoids. The declarative containment is responsible for layout of applets and can provide custom applet handles. The containment should listen to the plasmoid.immutability property. In order to lay out applets in your containment, you can use the AppletContainer class to access geometry information of applets.&lt;br /&gt;
Actions such as configure and close are available through plasmoid.actions.&lt;br /&gt;
You can access the plasmoid global property from containments in the same way as from declarative and javascript plasmoids. If the plasmoid is a Containment, you can get a list of actions for it. If you want to provide background rendering in your Containment yourself, read the applet.backgroundHints property and after that set applet.backgroundHints to 0 to tell the Applet that is should not render the background.&lt;br /&gt;
 &lt;br /&gt;
=== AppletContainer ===&lt;br /&gt;
The AppletContainer class provides access to the geometry and status of Plasmoids in this Containment.&lt;br /&gt;
Properties:&lt;br /&gt;
* ''Item'' '''applet''': The applet item, this property allows you to track destruction of the actual applet and update your layout.&lt;br /&gt;
** ''int'' '''backgroundHints: 0 for no background, 1 for default background, 2 for translucent background&lt;br /&gt;
* ''int'' '''minimumWidth''': The minimum width of the applet&lt;br /&gt;
* ''int'' '''minimumHeight''': The minimum height of the applet&lt;br /&gt;
* ''int'' '''maximumWidth''': The maximum width of the applet&lt;br /&gt;
* ''int'' '''maximumHeight''': The maximum height of the applet&lt;br /&gt;
* ''int'' '''preferredWidth''': The preferred height of the applet&lt;br /&gt;
* ''int'' '''preferredHeight''': The preferred height of the applet&lt;br /&gt;
* ''enum'' '''status''': The status of the applet, one in the enum&lt;br /&gt;
** '''UnknownStatus''': The status is unknown&lt;br /&gt;
** '''PassiveStatus''': The applet is passive&lt;br /&gt;
** '''ActiveStatus''': The applet is active&lt;br /&gt;
** '''NeedsAttentionStatus''': The applet asks for attention&lt;br /&gt;
** '''AcceptingInputStatus''': The applet is accepting input&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
They can be imported in your code with:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.plasma.containments 0.1 as PlasmaContainments&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AppletContainer is only available for Plasma/Containment packages, and only if they are loaded as containment. AppletContainer is new in 4.10.&lt;br /&gt;
&lt;br /&gt;
=== ToolBox ===&lt;br /&gt;
The ToolBox is only available through the plasmoid object, through plasmoid.toolBox(). The ToolBox is rendered as a separate item  on top of the scene covering the entire containment. It is loaded from the &amp;quot;org.kde.toolbox&amp;quot; Plasma Package, if the package is not found, no ToolBox will be loaded.&lt;br /&gt;
The ToolBox provides a listmodel of actions that can be rendered using Repeaters or ListViews. The ''actions'' list property contains actions from the Corona and Containments. Examples for these actions are showing the add widget or activities interface, lock and unlock. The actions in the list change dynamically whenever the widgets are locked or unlocked.&lt;br /&gt;
Actions such as lock screen and leave can be implemented using the powermanagement dataengine's services for these functions.&lt;br /&gt;
&lt;br /&gt;
ToolBox provides access to the following properties:&lt;br /&gt;
* ''Array(QAction)'' '''actions''': A list of actions provided by the Containment. These actions' most interesting properties are: &lt;br /&gt;
** ''QIcon'' '''icon''': The icon belonging to this action.&lt;br /&gt;
** ''String'' '''text''': The icon belonging to this action.&lt;br /&gt;
** '''trigger()''': Call trigger from your action delegate to trigger the action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.plasma.containments 0.1 as PlasmaContainments&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ToolBox is only available for Containments and new in 4.10.&lt;br /&gt;
&lt;br /&gt;
= Plasma QtComponents (4.8) =&lt;br /&gt;
Plasma components documentation online at [http://api.kde.org/4.x-api/plasma-qml-apidocs/ api.kde.org]&lt;br /&gt;
&lt;br /&gt;
=QtExtraComponents=&lt;br /&gt;
The QtExtraComponents make some very convenient Qt classes usable from within QML.&lt;br /&gt;
&lt;br /&gt;
They can be imported in your code with:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.qtextracomponents 0.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==QPixmapItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QPixmap directly to QPixmapItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QPixmap '''pixmap''': The QPixmap object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QPixmap width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QPixmap height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==QImageItem==&lt;br /&gt;
This one wraps around a QImage class and allows you to send a QImage directly to QImageItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QImage '''image''': The QImage object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QImage width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QImage height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==FillMode==&lt;br /&gt;
Both QPixmapItem and QImageItem expose a FillMode enum. This enum defines how the image is going to be used to fill the item.&lt;br /&gt;
&lt;br /&gt;
For QPixmapItem, possible values are:&lt;br /&gt;
&lt;br /&gt;
* QPixmapItem.Stretch: the image is scaled to fit&lt;br /&gt;
* QPixmapItem.PreserveAspectFit: the image is scaled uniformly to fit without cropping&lt;br /&gt;
* QPixmapItem.PreserveAspectCrop: the image is scaled uniformly to fill, cropping if necessary&lt;br /&gt;
* QPixmapItem.Tile: the image is duplicated horizontally and vertically&lt;br /&gt;
* QPixmapItem.TileVertically: the image is stretched horizontally and tiled vertically&lt;br /&gt;
* QPixmapItem.TileHorizontally :e image is stretched vertically and tiled horizontally&lt;br /&gt;
&lt;br /&gt;
QImageItem defines the same values, you just need to replace QPixmapItem with QImageItem.&lt;br /&gt;
&lt;br /&gt;
==QIconItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QIcon directly to QIconItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QIcon/QString '''icon''': If you provide a QIcon it uses that directly. If you provide a string it uses a KIcon internally!&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''implicitWidth''': Default width of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* int '''implicitHeight''': Default height of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* State '''state''': Icon state (DefaultState, ActiveState, DisabledState)&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/API</id>
		<title>Development/Tutorials/Plasma/QML/API</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/API"/>
				<updated>2012-11-21T01:40:37Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: /* ToolBox */ one level down&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction to the Plasmoid QML Declarative API  =&lt;br /&gt;
&lt;br /&gt;
This document provides an overview/reference of the Declarative QML API for Plasmoids. It isn't a full binding to all of Qt or KDE's libraries, but a focused set of bindings designed to make writing Plasmoids fast and easy, while remaining powerful.&lt;br /&gt;
&lt;br /&gt;
The API in this documentation covers the API of the Plasma specific QML components, so only the Declarative part of the API.&lt;br /&gt;
&lt;br /&gt;
The QML ScriptEngine is based upon the Plasma JavaScript engine, making the API of the JavaScript part identical to the one of the JavaScript plasmoids engine.&lt;br /&gt;
To see the api of the global ''Plasmoid'' object, see the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#The_Global_plasmoid_Object JavaScript API] documentation.&lt;br /&gt;
(TODO: the JavaScript api page should probably be copied and stripped down the imperative bits not present there, it would make it harder to update tough)&lt;br /&gt;
The most important API for using graphical widgets is the [http://api.kde.org/4.x-api/plasma-qml-apidocs/ Plasma QtComponents API]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What Is a Declarative Plasmoid?  ==&lt;br /&gt;
&lt;br /&gt;
To denote that this Plasmoid is a Declarative widget, ensure that in the metadata.desktop file there is this line: &lt;br /&gt;
&lt;br /&gt;
X-Plasma-API=declarativeappletscript&lt;br /&gt;
&lt;br /&gt;
What follows is a description of the Plasma declarative classes instantiable from QML.&lt;br /&gt;
&lt;br /&gt;
== fetching data from the plasmoid package ==&lt;br /&gt;
&lt;br /&gt;
If you have a file in your plasmoid package under contents, let's say an image, you can access it with the plasmapackage url protocol:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Image {&lt;br /&gt;
    source: &amp;quot;plasmapackage:/images/foo.png&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code will load in the Image component the file foo.png located in contents/images of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import &amp;quot;plasmapackage:/code/foo.js&amp;quot; as Foo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, the above code will import a javascript file from the folder contents/code of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
= Properties exported from the main QML item =&lt;br /&gt;
The root qml item can export some properties to influence its behavior:&lt;br /&gt;
* '''property int minimumWidth''': the plasmoid won't ever become narrower then that, size in pixels.&lt;br /&gt;
* '''property int minimumHeight''': minum height of the plasmoid, size in pixels.&lt;br /&gt;
* '''property Component compactRepresentation''': if the plasmoid is a popupapplet, the component in compactRepresentation will be used instead of the icon and will always be collapsed, regardless if it's in a panel or not.&lt;br /&gt;
&lt;br /&gt;
= Main Plasma QML Classes =&lt;br /&gt;
&lt;br /&gt;
== Data Engines ==&lt;br /&gt;
While it's possible to fetch data from a Plasma DataEngine in the same way as the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#DataEngine JavaScript API], it is preferrable to use the following declarative classes:&lt;br /&gt;
&lt;br /&gt;
=== DataSource ===&lt;br /&gt;
DataSource is a receiver for a dataEngine and can be declared inside QML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
 PlasmaCore.DataSource {&lt;br /&gt;
     id: dataSource&lt;br /&gt;
     engine: &amp;quot;time&amp;quot;&lt;br /&gt;
     connectedSources: [&amp;quot;Local&amp;quot;]&lt;br /&gt;
     interval: 500&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* bool '''valid''' (read only): true when the DataSource is successfully connected to a data engine&lt;br /&gt;
* int '''interval''': interval of polling of the dataengine, if 0 (default value, so no need to specify if you don't need it) no polling will be executed&lt;br /&gt;
* string '''engine''': the plugin name of the dataengine to load, e.g. &amp;quot;nowplaying&amp;quot;, etc.&lt;br /&gt;
* Array(string) '''connectedSources''': all the sources of the dataengine we are connected to (and whose data will appear in the '''data''' property)&lt;br /&gt;
* Array(string) '''sources''' (read only): all the sources available from the dataengine&lt;br /&gt;
* variant map '''data''' (read only): It's the most important property, it's a map of all the data available from the dataengine: its structure will be as follows:&lt;br /&gt;
** each key of the map will be a source name, in '''connectedSources'''&lt;br /&gt;
** each value will be a variant hash, so an hash with strings as keys and any variant as value&lt;br /&gt;
** example: dataSource.data[&amp;quot;Local&amp;quot;][&amp;quot;Time&amp;quot;] indicates the '''Time''' key of the dataengine source called &amp;quot;Local&amp;quot;&lt;br /&gt;
* string '''sourceFilter''' it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. If we want to have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Signals ====&lt;br /&gt;
It has the following signals:&lt;br /&gt;
&lt;br /&gt;
Note that javascript/qml applies the 'on' prefix to signals. So the actual signal name in C++ which is e.g. '''newData'''(...) becomes '''onNewData'''(...).&lt;br /&gt;
&lt;br /&gt;
* '''onNewData'''(String sourceName, Plasma::DataEngine::Data data)&lt;br /&gt;
* '''onSourceAdded'''(String source)&lt;br /&gt;
* '''onSourceRemoved'''(String source)&lt;br /&gt;
* '''onSourceConnected'''(String source)&lt;br /&gt;
* '''onSourceDisconnected'''(String source)&lt;br /&gt;
* '''onIntervalChanged'''()&lt;br /&gt;
* '''onEngineChanged'''()&lt;br /&gt;
* '''onDataChanged'''()&lt;br /&gt;
* '''onConnectedSourcesChanged'''()&lt;br /&gt;
* '''onSourcesChanged'''()&lt;br /&gt;
&lt;br /&gt;
==== Methods ====&lt;br /&gt;
It has the following methods:&lt;br /&gt;
* StringList keysForSource(String source): lists all the keys corresponding to a certain source: for instance in the &amp;quot;time&amp;quot; dataengine, for the &amp;quot;Local&amp;quot; source, keys will be:&lt;br /&gt;
** &amp;quot;Timezone Continent&amp;quot;&lt;br /&gt;
** &amp;quot;Offset&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone&amp;quot;&lt;br /&gt;
** &amp;quot;Time&amp;quot;&lt;br /&gt;
** &amp;quot;Date&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone City&amp;quot;&lt;br /&gt;
* Service serviceForSource(String source): returns a Plasma service that corresponds a given source: see the section about services for how to use it.&lt;br /&gt;
* void connectSource(String source): adds to '''connectedSources''' the new source&lt;br /&gt;
* void disconnectSource(String source): removes that source from '''connectedSources'''&lt;br /&gt;
&lt;br /&gt;
=== Service ===&lt;br /&gt;
Due to their imperative nature, Plasma Services are not instantiated as QML classes, but rather created out of a '''DataSource''' with the method '''serviceForSource''' and used in the JavaScript portions of the QML files.&lt;br /&gt;
This following example is a simplified version from the Now Playing QML widget in the kdeexamples git repository: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  var service = dataSource.serviceForSource(activeSource)&lt;br /&gt;
  var operation = service.operationDescription(&amp;quot;seek&amp;quot;)&lt;br /&gt;
  operation.seconds = 10&lt;br /&gt;
&lt;br /&gt;
  var job = service.startOperationCall(operation)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Here dataSource is the id of a DataSource object, and activeSource is a source contained in one of its '''connectedSources'''.&lt;br /&gt;
The service provides an operation called &amp;quot;seek&amp;quot;, with a parameter called &amp;quot;seconds&amp;quot;, that can be written on it as a property of a JavaScript object.&lt;br /&gt;
&lt;br /&gt;
=== ServiceJob ===&lt;br /&gt;
It is necessary to monitor the result of a Service operation, it's possible to connect to the '''finished''' signal provided by the job return paramenter of the '''startOperationCall''' service method.&lt;br /&gt;
The '''finished''' signal has the same job as parameter, from which is possible to check the variant '''result''' property, to check the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var service = messagesDataSource.serviceForSource(src)&lt;br /&gt;
    var operation = &amp;quot;auth&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    function result(job) {&lt;br /&gt;
        statusItem.authorizationStatus = job.result;&lt;br /&gt;
        print(&amp;quot;ServiceJob result: &amp;quot; + job.result + &amp;quot; op: &amp;quot; + job.operationName);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var operation = service.operationDescription(operation);&lt;br /&gt;
    operation.user = userName;&lt;br /&gt;
    operation.password = password;&lt;br /&gt;
    var serviceJob = service.startOperationCall(operation);&lt;br /&gt;
    serviceJob.finished.connect(result);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DataModel ===&lt;br /&gt;
Some data engines return as their data something that can be interpreted as a list of items, rather than simple key/value pairs.&lt;br /&gt;
QML provides some item views such as '''ListView''', '''GridView''' and '''Repeater'''.&lt;br /&gt;
The '''DataModel''' QML object can provide, based on a DataSource a model suitable for those QML item views.&lt;br /&gt;
&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* DataSource '''dataSource''': the id of an existing (and connected) DataSource&lt;br /&gt;
* String '''sourceFilter''': it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. To, for example, have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
* String '''keyRoleFilter''': it's a regular expression. Only data with keys that match this filter expression will be inserted in the model&lt;br /&gt;
* int '''count''' (read only): how many items are in the model&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 ListView {&lt;br /&gt;
   model: PlasmaCore.DataModel {&lt;br /&gt;
        dataSource: microblogSource&lt;br /&gt;
        keyRoleFilter: &amp;quot;[\\d]*&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    delegate: Text {&lt;br /&gt;
        text: title&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the example, ''microblogSource'' is the id of a DataSource, and inserts in the model only entries that have a number as the key name (matched with [\\d]*, in this case tweets ids)&lt;br /&gt;
&lt;br /&gt;
Each item in the model will have the form of a variant hash: all the keys of the hash will be registered as model role names, in the example, &amp;quot;title&amp;quot; is a role of the model containing a string (also reachable with model[&amp;quot;title&amp;quot;]).&lt;br /&gt;
&lt;br /&gt;
A special reserved role will always be present: '''&amp;quot;DataEngineSource&amp;quot;''': it will contain the name of the data engine source that gave origin to this item. Therefore, if you want merely the string of the current source that the model is at...do model[&amp;quot;DataEngineSource&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
Note that view.currentItem holds the item currently selected. However, due to (http://bugreports.qt.nokia.com/browse/QTBUG-16347) this does not work in PathView. A workaround is to make your own.&lt;br /&gt;
&lt;br /&gt;
=== SortFilterModel ===&lt;br /&gt;
SortFilterModel is a proxy model for easy sorting and/or filtering of the items in a DataModel (or any other QAbstractItemModel subclass that has been registered in QML with setContextProperty from a C++ application)&lt;br /&gt;
Properties:&lt;br /&gt;
* model '''sourceModel'''&lt;br /&gt;
* String '''filterRegExp'''&lt;br /&gt;
* String '''filterRole'''&lt;br /&gt;
* String '''sortRole'''&lt;br /&gt;
* Qt::SortOrder '''sortOrder'''&lt;br /&gt;
* int '''count''' (read only)&lt;br /&gt;
&lt;br /&gt;
This is an example from the feed widget:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
model: PlasmaCore.SortFilterModel {&lt;br /&gt;
   id: postTitleFilter&lt;br /&gt;
   filterRole: &amp;quot;title&amp;quot;&lt;br /&gt;
   sortRole: &amp;quot;time&amp;quot;&lt;br /&gt;
   sortOrder: &amp;quot;DescendingOrder&amp;quot;&lt;br /&gt;
   filterRegExp: toolbarFrame.searchQuery&lt;br /&gt;
   sourceModel: PlasmaCore.SortFilterModel {&lt;br /&gt;
      id: feedCategoryFilter&lt;br /&gt;
      filterRole: &amp;quot;feed_url&amp;quot;&lt;br /&gt;
      sourceModel: PlasmaCore.DataModel {&lt;br /&gt;
         dataSource: feedSource&lt;br /&gt;
         keyRoleFilter: &amp;quot;items&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Popup Applet ==&lt;br /&gt;
So you want your QML applet to be a popup applet, like the device notifier (an icon in the panel shows and expands the applet)?&lt;br /&gt;
&lt;br /&gt;
Why, that's easy.&lt;br /&gt;
&lt;br /&gt;
To change your plasmoid from being a regular boring one, in your '''metadata.desktop''', simply change this following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet,Plasma/PopupApplet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in the main QML item's Component.onCompleted, do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    plasmoid.popupIcon = &amp;quot;konqueror&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to use other elements instead of an icon when collapsed in a panel, use the '''compactRepresentation''' property in the root Item.&lt;br /&gt;
&lt;br /&gt;
== Plasma Themes ==&lt;br /&gt;
&lt;br /&gt;
=== Theme ===&lt;br /&gt;
This class instantiable from QML provides access to the Plasma Theme colors and other facilities such as fonts.&lt;br /&gt;
From KDE 4.8 a Theme instance is always present given the org.kde.plasma.core plugin was imported, is not necessary to create it by hand.&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* String '''themeName''' (read only)&lt;br /&gt;
* bool '''windowTranslucentEnabled''' (read only)&lt;br /&gt;
* Url '''homepage''' (read only)&lt;br /&gt;
* bool '''useGlobalSettings''' (read only)&lt;br /&gt;
* QString '''wallpaperPath''' (read only)&lt;br /&gt;
* color '''textColor''' (read only)&lt;br /&gt;
* color '''highlightColor''' (read only)&lt;br /&gt;
* color '''backgroundColor''' (read only)&lt;br /&gt;
* color '''buttonTextColor''' (read only)&lt;br /&gt;
* color '''buttonBackgroundColor''' (read only)&lt;br /&gt;
* color '''linkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''buttonHoverColor''' (read only)&lt;br /&gt;
* color '''buttonFocusColor''' (read only)&lt;br /&gt;
* color '''viewTextColor''' (read only)&lt;br /&gt;
* color '''viewBackgroundColor''' (read only)&lt;br /&gt;
* color '''viewHoverColor''' (read only)&lt;br /&gt;
* color '''viewFocusColor''' (read only)&lt;br /&gt;
* String '''styleSheet''' (read only)&lt;br /&gt;
* Font '''defaultFont''' (read only)&lt;br /&gt;
* Font '''desktopFont''' (read only)&lt;br /&gt;
* Font '''smallestFont''' (read only)&lt;br /&gt;
&lt;br /&gt;
Each Font element has the following properties:&lt;br /&gt;
* bool bold&lt;br /&gt;
* Capitalization '''capitalization''' (MixedCase, AllUppercase, AllLowercase, SmallCaps, Capitalize) (read only)&lt;br /&gt;
* String '''family''' (read only)&lt;br /&gt;
* bool '''italic''' (read only)&lt;br /&gt;
* real '''letterSpacing''' (read only)&lt;br /&gt;
* int '''pixelSize''' (read only)&lt;br /&gt;
* real '''pointSize''' (read only)&lt;br /&gt;
* bool '''strikeout''' (read only)&lt;br /&gt;
* bool '''underline''' (read only)&lt;br /&gt;
* Weight '''weight''' (Light, Normal, DemiBold, Bold, Black) (read only)&lt;br /&gt;
* real '''wordSpacing''' (read only)&lt;br /&gt;
* size '''mSize''' the size, width and height of an uppercase &amp;quot;M&amp;quot; in this font (read only)&lt;br /&gt;
&lt;br /&gt;
=== Svg ===&lt;br /&gt;
Declaring a Svg element instantiates a Plasma Svg instance. This class doesn't draw anything. For drawing, SvgItem is used.&lt;br /&gt;
Properties:&lt;br /&gt;
* QSize '''size'''&lt;br /&gt;
* bool '''multipleImages'''&lt;br /&gt;
* String '''imagePath''' can be anything in the '''desktoptheme/''' folder. For more information on what is available, see [http://techbase.kde.org/Projects/Plasma/Theme#Current_Theme_Elements Plasma Theme Elements]. Make sure to strip the final extension from this string, so you should for example use &amp;lt;code&amp;gt;&amp;quot;dialogs/background&amp;quot;&amp;lt;/code&amp;gt; to get the standard background.&lt;br /&gt;
* bool '''usingRenderingCache'''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPixmap pixmap(QString elementID)&lt;br /&gt;
* void resize(qreal width, qreal height)&lt;br /&gt;
* void resize(): resets the image to its default dimension&lt;br /&gt;
* QSize elementSize(QString elementId)&lt;br /&gt;
* QRectF elementRect(QString elementId)&lt;br /&gt;
* bool hasElement(QString elementId)&lt;br /&gt;
* bool isValid(): true if valid svg file&lt;br /&gt;
&lt;br /&gt;
=== FrameSvg ===&lt;br /&gt;
Declaring a FrameSvg element instantiates a Plasma FrameSvg instance. This class doesn't draw anything. For drawing, FrameSvgItem is used.&lt;br /&gt;
This is to be used when you need informations about the framesvg, such as hasElementPrefix().&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* All properties from Svg&lt;br /&gt;
* EnabledBorders '''enabledBorders''': flag combination of:&lt;br /&gt;
** NoBorder&lt;br /&gt;
** TopBorder&lt;br /&gt;
** BottomBorder&lt;br /&gt;
** LeftBorder&lt;br /&gt;
** RightBorder&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* All methods from Svg&lt;br /&gt;
* void setImagePath(QString path)&lt;br /&gt;
* void resizeFrame(QSize size)&lt;br /&gt;
* QSize frameSize()&lt;br /&gt;
* qreal marginSize(Plasma::MarginEdge edge)&lt;br /&gt;
* void getMargins(qreal left, qreal top, qreal right, qreal bottom): parameters are output, they get set with the margins from the FrameSvg&lt;br /&gt;
* QRectF contentsRect(): the rectangle of the center element, taking the margins into account.&lt;br /&gt;
* void setElementPrefix(QString prefix)&lt;br /&gt;
* bool hasElementPrefix(const QString prefix)&lt;br /&gt;
* QString prefix()&lt;br /&gt;
* void setCacheAllRenderedFrames(bool cache)&lt;br /&gt;
* bool cacheAllRenderedFrames()&lt;br /&gt;
* void clearCache()&lt;br /&gt;
* QPixmap framePixmap()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.FrameSvg {&lt;br /&gt;
        id: myFrameSvg&lt;br /&gt;
        imagePath: &amp;quot;widgets/button&amp;quot;&lt;br /&gt;
        prefix: &amp;quot;pressed&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SvgItem ===&lt;br /&gt;
It's a graphical element that will actually paint a Svg instance.&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''elementId''': what element to render. If null, the whole svg will be rendered&lt;br /&gt;
* Svg '''svg''': instance of the Svg class mentioned above&lt;br /&gt;
* QSizeF '''naturalSize''' (read only): default size of the Svg&lt;br /&gt;
* bool '''smooth''': paint with antialias (default false)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.SvgItem {&lt;br /&gt;
        id: mySvgItem&lt;br /&gt;
        anchors {&lt;br /&gt;
            top: parent.top&lt;br /&gt;
            left: parent.left&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        width: 300&lt;br /&gt;
        height: 3&lt;br /&gt;
&lt;br /&gt;
        svg: mySvg&lt;br /&gt;
        elementId: &amp;quot;horizontal-line&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FrameSvgItem ===&lt;br /&gt;
It's a graphical element that paints a Plasma::FrameSvg, so a rectangular image composed by 9 elements contained in a Svg file, useful for things like buttons and frames.&lt;br /&gt;
&lt;br /&gt;
Flags&lt;br /&gt;
* EnabledBorders: combination of TopBorder | BottomBorder | LeftBorder | RightBorder, NoBorder if no border of the frame is enabled&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''imagePath''': path of the file relative to the Plasma Theme, for instance &amp;quot;widgets/background&amp;quot;&lt;br /&gt;
* String '''prefix''': a FrameSvg can contain multiple frames, for instance a button contains &amp;quot;normal&amp;quot;, &amp;quot;raised&amp;quot; and &amp;quot;pressed&amp;quot;&lt;br /&gt;
* Margins '''margins''' (read only): the margins of the frame, see documentation below&lt;br /&gt;
* EnabledBorders '''enabledBorders''': what borders are enabled&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
PlasmaCore.FrameSvgItem {&lt;br /&gt;
    id: myFrameSvgItem&lt;br /&gt;
    anchors.fill: parent&lt;br /&gt;
    imagePath: &amp;quot;translucent/dialogs/background&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top Level windows ==&lt;br /&gt;
&lt;br /&gt;
=== Dialog ===&lt;br /&gt;
Dialog instantiates a Plasma::Dialog, it will be a Plasma themed top level window that can contain any QML component.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''mainItem''': the Item contained in the Dialog, it can be any QML Item instance&lt;br /&gt;
* bool '''visible''': if the window (not the mainItem) is visible&lt;br /&gt;
* int '''x''': x position of the window in screen coordinates&lt;br /&gt;
* int '''y''': y position of the window in screen coordinates&lt;br /&gt;
* int '''width''' (read only): total width of the dialog, including margins&lt;br /&gt;
* int '''height''' (read only): total height of the dialog, including margins.&lt;br /&gt;
* int '''windowFlags''': Qt window flags of the Dialog&lt;br /&gt;
* Margins '''margins''' (read only): margins of the Dialog&lt;br /&gt;
&lt;br /&gt;
{{Note|The width and height will scale with size of the main item within this Dialog component.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import QtQuick 1.1&lt;br /&gt;
import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
    PlasmaCore.Dialog {&lt;br /&gt;
        visible: true&lt;br /&gt;
        mainItem: Item {&lt;br /&gt;
            width: 500&lt;br /&gt;
            height: 500&lt;br /&gt;
&lt;br /&gt;
            Text {&lt;br /&gt;
                anchors.centerIn: parent&lt;br /&gt;
                color: &amp;quot;red&amp;quot;&lt;br /&gt;
                text: qsTr(&amp;quot;text&amp;quot;)&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPoint popupPosition(Item item, Qt::Alignment alignment=Qt::AlignLeft): the suggested position for the Dialog if it has to be correctly placed as popup of the QML item passed as parameter.&lt;br /&gt;
* void setAttribute(Qt::WindowAttribute attribute, bool on): set an attribute for the dialog window&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
=== ToolTip ===&lt;br /&gt;
Declaring a ToolTip instance makes it possible to use Plasma tooltips with any QML item.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''target''': the QML item we want to show a tooltip of&lt;br /&gt;
* String '''mainText'''&lt;br /&gt;
* String '''subText'''&lt;br /&gt;
* String '''image''': freedesktop compliant icon name as image of the tooltip&lt;br /&gt;
&lt;br /&gt;
== Containments ==&lt;br /&gt;
A Plasma Containment manages the position and manipulation of Plasmoids.&lt;br /&gt;
=== AppletContainer ===&lt;br /&gt;
The AppletContainer class provides access to the geometry and status of Plasmoids in this Containment.&lt;br /&gt;
Properties:&lt;br /&gt;
* ''int'' '''minimumWidth''': The minimum width of the applet&lt;br /&gt;
* ''int'' '''minimumHeight''': The minimum height of the applet&lt;br /&gt;
* ''int'' '''maximumWidth''': The maximum width of the applet&lt;br /&gt;
* ''int'' '''maximumHeight''': The maximum height of the applet&lt;br /&gt;
* ''int'' '''preferredWidth''': The preferred height of the applet&lt;br /&gt;
* ''int'' '''preferredHeight''': The preferred height of the applet&lt;br /&gt;
* ''enum'' '''status''': The status of the applet, one in the enum&lt;br /&gt;
** '''UnknownStatus''': The status is unknown&lt;br /&gt;
** '''PassiveStatus''': The applet is passive&lt;br /&gt;
** '''ActiveStatus''': The applet is active&lt;br /&gt;
** '''NeedsAttentionStatus''': The applet asks for attention&lt;br /&gt;
** '''AcceptingInputStatus''': The applet is accepting input&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
They can be imported in your code with:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.plasma.containments 0.1 as PlasmaContainments&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AppletContainer is only available for Plasma/Containment packages, and only if they are loaded as containment. AppletContainer is new in 4.10.&lt;br /&gt;
&lt;br /&gt;
=== ToolBox ===&lt;br /&gt;
The ToolBox is only available through the plasmoid object, through plasmoid.toolBox(). The ToolBox is rendered as a separate item  on top of the scene covering the entire containment. It is loaded from the &amp;quot;org.kde.toolbox&amp;quot; Plasma Package, if the package is not found, no ToolBox will be loaded.&lt;br /&gt;
The ToolBox provides a listmodel of actions that can be rendered using Repeaters or ListViews. The ''actions'' list property contains actions from the Corona and Containments. Examples for these actions are showing the add widget or activities interface, lock and unlock. The actions in the list change dynamically whenever the widgets are locked or unlocked.&lt;br /&gt;
Actions such as lock screen and leave can be implemented using the powermanagement dataengine's services for these functions.&lt;br /&gt;
&lt;br /&gt;
ToolBox provides access to the following properties:&lt;br /&gt;
* ''Array(QAction)'' '''actions''': A list of actions provided by the Containment. These actions' most interesting properties are: &lt;br /&gt;
** ''QIcon'' '''icon''': The icon belonging to this action.&lt;br /&gt;
** ''String'' '''text''': The icon belonging to this action.&lt;br /&gt;
** '''trigger()''': Call trigger from your action delegate to trigger the action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.plasma.containments 0.1 as PlasmaContainments&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ToolBox is only available for Containments and new in 4.10.&lt;br /&gt;
&lt;br /&gt;
= Plasma QtComponents (4.8) =&lt;br /&gt;
Plasma components documentation online at [http://api.kde.org/4.x-api/plasma-qml-apidocs/ api.kde.org]&lt;br /&gt;
&lt;br /&gt;
=QtExtraComponents=&lt;br /&gt;
The QtExtraComponents make some very convenient Qt classes usable from within QML.&lt;br /&gt;
&lt;br /&gt;
They can be imported in your code with:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.qtextracomponents 0.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==QPixmapItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QPixmap directly to QPixmapItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QPixmap '''pixmap''': The QPixmap object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QPixmap width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QPixmap height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==QImageItem==&lt;br /&gt;
This one wraps around a QImage class and allows you to send a QImage directly to QImageItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QImage '''image''': The QImage object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QImage width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QImage height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==FillMode==&lt;br /&gt;
Both QPixmapItem and QImageItem expose a FillMode enum. This enum defines how the image is going to be used to fill the item.&lt;br /&gt;
&lt;br /&gt;
For QPixmapItem, possible values are:&lt;br /&gt;
&lt;br /&gt;
* QPixmapItem.Stretch: the image is scaled to fit&lt;br /&gt;
* QPixmapItem.PreserveAspectFit: the image is scaled uniformly to fit without cropping&lt;br /&gt;
* QPixmapItem.PreserveAspectCrop: the image is scaled uniformly to fill, cropping if necessary&lt;br /&gt;
* QPixmapItem.Tile: the image is duplicated horizontally and vertically&lt;br /&gt;
* QPixmapItem.TileVertically: the image is stretched horizontally and tiled vertically&lt;br /&gt;
* QPixmapItem.TileHorizontally :e image is stretched vertically and tiled horizontally&lt;br /&gt;
&lt;br /&gt;
QImageItem defines the same values, you just need to replace QPixmapItem with QImageItem.&lt;br /&gt;
&lt;br /&gt;
==QIconItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QIcon directly to QIconItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QIcon/QString '''icon''': If you provide a QIcon it uses that directly. If you provide a string it uses a KIcon internally!&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''implicitWidth''': Default width of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* int '''implicitHeight''': Default height of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* State '''state''': Icon state (DefaultState, ActiveState, DisabledState)&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/API</id>
		<title>Development/Tutorials/Plasma/QML/API</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/API"/>
				<updated>2012-11-21T01:39:48Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: /* ToolBox */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction to the Plasmoid QML Declarative API  =&lt;br /&gt;
&lt;br /&gt;
This document provides an overview/reference of the Declarative QML API for Plasmoids. It isn't a full binding to all of Qt or KDE's libraries, but a focused set of bindings designed to make writing Plasmoids fast and easy, while remaining powerful.&lt;br /&gt;
&lt;br /&gt;
The API in this documentation covers the API of the Plasma specific QML components, so only the Declarative part of the API.&lt;br /&gt;
&lt;br /&gt;
The QML ScriptEngine is based upon the Plasma JavaScript engine, making the API of the JavaScript part identical to the one of the JavaScript plasmoids engine.&lt;br /&gt;
To see the api of the global ''Plasmoid'' object, see the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#The_Global_plasmoid_Object JavaScript API] documentation.&lt;br /&gt;
(TODO: the JavaScript api page should probably be copied and stripped down the imperative bits not present there, it would make it harder to update tough)&lt;br /&gt;
The most important API for using graphical widgets is the [http://api.kde.org/4.x-api/plasma-qml-apidocs/ Plasma QtComponents API]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What Is a Declarative Plasmoid?  ==&lt;br /&gt;
&lt;br /&gt;
To denote that this Plasmoid is a Declarative widget, ensure that in the metadata.desktop file there is this line: &lt;br /&gt;
&lt;br /&gt;
X-Plasma-API=declarativeappletscript&lt;br /&gt;
&lt;br /&gt;
What follows is a description of the Plasma declarative classes instantiable from QML.&lt;br /&gt;
&lt;br /&gt;
== fetching data from the plasmoid package ==&lt;br /&gt;
&lt;br /&gt;
If you have a file in your plasmoid package under contents, let's say an image, you can access it with the plasmapackage url protocol:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Image {&lt;br /&gt;
    source: &amp;quot;plasmapackage:/images/foo.png&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code will load in the Image component the file foo.png located in contents/images of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import &amp;quot;plasmapackage:/code/foo.js&amp;quot; as Foo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, the above code will import a javascript file from the folder contents/code of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
= Properties exported from the main QML item =&lt;br /&gt;
The root qml item can export some properties to influence its behavior:&lt;br /&gt;
* '''property int minimumWidth''': the plasmoid won't ever become narrower then that, size in pixels.&lt;br /&gt;
* '''property int minimumHeight''': minum height of the plasmoid, size in pixels.&lt;br /&gt;
* '''property Component compactRepresentation''': if the plasmoid is a popupapplet, the component in compactRepresentation will be used instead of the icon and will always be collapsed, regardless if it's in a panel or not.&lt;br /&gt;
&lt;br /&gt;
= Main Plasma QML Classes =&lt;br /&gt;
&lt;br /&gt;
== Data Engines ==&lt;br /&gt;
While it's possible to fetch data from a Plasma DataEngine in the same way as the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#DataEngine JavaScript API], it is preferrable to use the following declarative classes:&lt;br /&gt;
&lt;br /&gt;
=== DataSource ===&lt;br /&gt;
DataSource is a receiver for a dataEngine and can be declared inside QML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
 PlasmaCore.DataSource {&lt;br /&gt;
     id: dataSource&lt;br /&gt;
     engine: &amp;quot;time&amp;quot;&lt;br /&gt;
     connectedSources: [&amp;quot;Local&amp;quot;]&lt;br /&gt;
     interval: 500&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* bool '''valid''' (read only): true when the DataSource is successfully connected to a data engine&lt;br /&gt;
* int '''interval''': interval of polling of the dataengine, if 0 (default value, so no need to specify if you don't need it) no polling will be executed&lt;br /&gt;
* string '''engine''': the plugin name of the dataengine to load, e.g. &amp;quot;nowplaying&amp;quot;, etc.&lt;br /&gt;
* Array(string) '''connectedSources''': all the sources of the dataengine we are connected to (and whose data will appear in the '''data''' property)&lt;br /&gt;
* Array(string) '''sources''' (read only): all the sources available from the dataengine&lt;br /&gt;
* variant map '''data''' (read only): It's the most important property, it's a map of all the data available from the dataengine: its structure will be as follows:&lt;br /&gt;
** each key of the map will be a source name, in '''connectedSources'''&lt;br /&gt;
** each value will be a variant hash, so an hash with strings as keys and any variant as value&lt;br /&gt;
** example: dataSource.data[&amp;quot;Local&amp;quot;][&amp;quot;Time&amp;quot;] indicates the '''Time''' key of the dataengine source called &amp;quot;Local&amp;quot;&lt;br /&gt;
* string '''sourceFilter''' it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. If we want to have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Signals ====&lt;br /&gt;
It has the following signals:&lt;br /&gt;
&lt;br /&gt;
Note that javascript/qml applies the 'on' prefix to signals. So the actual signal name in C++ which is e.g. '''newData'''(...) becomes '''onNewData'''(...).&lt;br /&gt;
&lt;br /&gt;
* '''onNewData'''(String sourceName, Plasma::DataEngine::Data data)&lt;br /&gt;
* '''onSourceAdded'''(String source)&lt;br /&gt;
* '''onSourceRemoved'''(String source)&lt;br /&gt;
* '''onSourceConnected'''(String source)&lt;br /&gt;
* '''onSourceDisconnected'''(String source)&lt;br /&gt;
* '''onIntervalChanged'''()&lt;br /&gt;
* '''onEngineChanged'''()&lt;br /&gt;
* '''onDataChanged'''()&lt;br /&gt;
* '''onConnectedSourcesChanged'''()&lt;br /&gt;
* '''onSourcesChanged'''()&lt;br /&gt;
&lt;br /&gt;
==== Methods ====&lt;br /&gt;
It has the following methods:&lt;br /&gt;
* StringList keysForSource(String source): lists all the keys corresponding to a certain source: for instance in the &amp;quot;time&amp;quot; dataengine, for the &amp;quot;Local&amp;quot; source, keys will be:&lt;br /&gt;
** &amp;quot;Timezone Continent&amp;quot;&lt;br /&gt;
** &amp;quot;Offset&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone&amp;quot;&lt;br /&gt;
** &amp;quot;Time&amp;quot;&lt;br /&gt;
** &amp;quot;Date&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone City&amp;quot;&lt;br /&gt;
* Service serviceForSource(String source): returns a Plasma service that corresponds a given source: see the section about services for how to use it.&lt;br /&gt;
* void connectSource(String source): adds to '''connectedSources''' the new source&lt;br /&gt;
* void disconnectSource(String source): removes that source from '''connectedSources'''&lt;br /&gt;
&lt;br /&gt;
=== Service ===&lt;br /&gt;
Due to their imperative nature, Plasma Services are not instantiated as QML classes, but rather created out of a '''DataSource''' with the method '''serviceForSource''' and used in the JavaScript portions of the QML files.&lt;br /&gt;
This following example is a simplified version from the Now Playing QML widget in the kdeexamples git repository: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  var service = dataSource.serviceForSource(activeSource)&lt;br /&gt;
  var operation = service.operationDescription(&amp;quot;seek&amp;quot;)&lt;br /&gt;
  operation.seconds = 10&lt;br /&gt;
&lt;br /&gt;
  var job = service.startOperationCall(operation)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Here dataSource is the id of a DataSource object, and activeSource is a source contained in one of its '''connectedSources'''.&lt;br /&gt;
The service provides an operation called &amp;quot;seek&amp;quot;, with a parameter called &amp;quot;seconds&amp;quot;, that can be written on it as a property of a JavaScript object.&lt;br /&gt;
&lt;br /&gt;
=== ServiceJob ===&lt;br /&gt;
It is necessary to monitor the result of a Service operation, it's possible to connect to the '''finished''' signal provided by the job return paramenter of the '''startOperationCall''' service method.&lt;br /&gt;
The '''finished''' signal has the same job as parameter, from which is possible to check the variant '''result''' property, to check the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var service = messagesDataSource.serviceForSource(src)&lt;br /&gt;
    var operation = &amp;quot;auth&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    function result(job) {&lt;br /&gt;
        statusItem.authorizationStatus = job.result;&lt;br /&gt;
        print(&amp;quot;ServiceJob result: &amp;quot; + job.result + &amp;quot; op: &amp;quot; + job.operationName);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var operation = service.operationDescription(operation);&lt;br /&gt;
    operation.user = userName;&lt;br /&gt;
    operation.password = password;&lt;br /&gt;
    var serviceJob = service.startOperationCall(operation);&lt;br /&gt;
    serviceJob.finished.connect(result);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DataModel ===&lt;br /&gt;
Some data engines return as their data something that can be interpreted as a list of items, rather than simple key/value pairs.&lt;br /&gt;
QML provides some item views such as '''ListView''', '''GridView''' and '''Repeater'''.&lt;br /&gt;
The '''DataModel''' QML object can provide, based on a DataSource a model suitable for those QML item views.&lt;br /&gt;
&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* DataSource '''dataSource''': the id of an existing (and connected) DataSource&lt;br /&gt;
* String '''sourceFilter''': it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. To, for example, have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
* String '''keyRoleFilter''': it's a regular expression. Only data with keys that match this filter expression will be inserted in the model&lt;br /&gt;
* int '''count''' (read only): how many items are in the model&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 ListView {&lt;br /&gt;
   model: PlasmaCore.DataModel {&lt;br /&gt;
        dataSource: microblogSource&lt;br /&gt;
        keyRoleFilter: &amp;quot;[\\d]*&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    delegate: Text {&lt;br /&gt;
        text: title&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the example, ''microblogSource'' is the id of a DataSource, and inserts in the model only entries that have a number as the key name (matched with [\\d]*, in this case tweets ids)&lt;br /&gt;
&lt;br /&gt;
Each item in the model will have the form of a variant hash: all the keys of the hash will be registered as model role names, in the example, &amp;quot;title&amp;quot; is a role of the model containing a string (also reachable with model[&amp;quot;title&amp;quot;]).&lt;br /&gt;
&lt;br /&gt;
A special reserved role will always be present: '''&amp;quot;DataEngineSource&amp;quot;''': it will contain the name of the data engine source that gave origin to this item. Therefore, if you want merely the string of the current source that the model is at...do model[&amp;quot;DataEngineSource&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
Note that view.currentItem holds the item currently selected. However, due to (http://bugreports.qt.nokia.com/browse/QTBUG-16347) this does not work in PathView. A workaround is to make your own.&lt;br /&gt;
&lt;br /&gt;
=== SortFilterModel ===&lt;br /&gt;
SortFilterModel is a proxy model for easy sorting and/or filtering of the items in a DataModel (or any other QAbstractItemModel subclass that has been registered in QML with setContextProperty from a C++ application)&lt;br /&gt;
Properties:&lt;br /&gt;
* model '''sourceModel'''&lt;br /&gt;
* String '''filterRegExp'''&lt;br /&gt;
* String '''filterRole'''&lt;br /&gt;
* String '''sortRole'''&lt;br /&gt;
* Qt::SortOrder '''sortOrder'''&lt;br /&gt;
* int '''count''' (read only)&lt;br /&gt;
&lt;br /&gt;
This is an example from the feed widget:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
model: PlasmaCore.SortFilterModel {&lt;br /&gt;
   id: postTitleFilter&lt;br /&gt;
   filterRole: &amp;quot;title&amp;quot;&lt;br /&gt;
   sortRole: &amp;quot;time&amp;quot;&lt;br /&gt;
   sortOrder: &amp;quot;DescendingOrder&amp;quot;&lt;br /&gt;
   filterRegExp: toolbarFrame.searchQuery&lt;br /&gt;
   sourceModel: PlasmaCore.SortFilterModel {&lt;br /&gt;
      id: feedCategoryFilter&lt;br /&gt;
      filterRole: &amp;quot;feed_url&amp;quot;&lt;br /&gt;
      sourceModel: PlasmaCore.DataModel {&lt;br /&gt;
         dataSource: feedSource&lt;br /&gt;
         keyRoleFilter: &amp;quot;items&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Popup Applet ==&lt;br /&gt;
So you want your QML applet to be a popup applet, like the device notifier (an icon in the panel shows and expands the applet)?&lt;br /&gt;
&lt;br /&gt;
Why, that's easy.&lt;br /&gt;
&lt;br /&gt;
To change your plasmoid from being a regular boring one, in your '''metadata.desktop''', simply change this following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet,Plasma/PopupApplet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in the main QML item's Component.onCompleted, do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    plasmoid.popupIcon = &amp;quot;konqueror&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to use other elements instead of an icon when collapsed in a panel, use the '''compactRepresentation''' property in the root Item.&lt;br /&gt;
&lt;br /&gt;
== Plasma Themes ==&lt;br /&gt;
&lt;br /&gt;
=== Theme ===&lt;br /&gt;
This class instantiable from QML provides access to the Plasma Theme colors and other facilities such as fonts.&lt;br /&gt;
From KDE 4.8 a Theme instance is always present given the org.kde.plasma.core plugin was imported, is not necessary to create it by hand.&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* String '''themeName''' (read only)&lt;br /&gt;
* bool '''windowTranslucentEnabled''' (read only)&lt;br /&gt;
* Url '''homepage''' (read only)&lt;br /&gt;
* bool '''useGlobalSettings''' (read only)&lt;br /&gt;
* QString '''wallpaperPath''' (read only)&lt;br /&gt;
* color '''textColor''' (read only)&lt;br /&gt;
* color '''highlightColor''' (read only)&lt;br /&gt;
* color '''backgroundColor''' (read only)&lt;br /&gt;
* color '''buttonTextColor''' (read only)&lt;br /&gt;
* color '''buttonBackgroundColor''' (read only)&lt;br /&gt;
* color '''linkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''buttonHoverColor''' (read only)&lt;br /&gt;
* color '''buttonFocusColor''' (read only)&lt;br /&gt;
* color '''viewTextColor''' (read only)&lt;br /&gt;
* color '''viewBackgroundColor''' (read only)&lt;br /&gt;
* color '''viewHoverColor''' (read only)&lt;br /&gt;
* color '''viewFocusColor''' (read only)&lt;br /&gt;
* String '''styleSheet''' (read only)&lt;br /&gt;
* Font '''defaultFont''' (read only)&lt;br /&gt;
* Font '''desktopFont''' (read only)&lt;br /&gt;
* Font '''smallestFont''' (read only)&lt;br /&gt;
&lt;br /&gt;
Each Font element has the following properties:&lt;br /&gt;
* bool bold&lt;br /&gt;
* Capitalization '''capitalization''' (MixedCase, AllUppercase, AllLowercase, SmallCaps, Capitalize) (read only)&lt;br /&gt;
* String '''family''' (read only)&lt;br /&gt;
* bool '''italic''' (read only)&lt;br /&gt;
* real '''letterSpacing''' (read only)&lt;br /&gt;
* int '''pixelSize''' (read only)&lt;br /&gt;
* real '''pointSize''' (read only)&lt;br /&gt;
* bool '''strikeout''' (read only)&lt;br /&gt;
* bool '''underline''' (read only)&lt;br /&gt;
* Weight '''weight''' (Light, Normal, DemiBold, Bold, Black) (read only)&lt;br /&gt;
* real '''wordSpacing''' (read only)&lt;br /&gt;
* size '''mSize''' the size, width and height of an uppercase &amp;quot;M&amp;quot; in this font (read only)&lt;br /&gt;
&lt;br /&gt;
=== Svg ===&lt;br /&gt;
Declaring a Svg element instantiates a Plasma Svg instance. This class doesn't draw anything. For drawing, SvgItem is used.&lt;br /&gt;
Properties:&lt;br /&gt;
* QSize '''size'''&lt;br /&gt;
* bool '''multipleImages'''&lt;br /&gt;
* String '''imagePath''' can be anything in the '''desktoptheme/''' folder. For more information on what is available, see [http://techbase.kde.org/Projects/Plasma/Theme#Current_Theme_Elements Plasma Theme Elements]. Make sure to strip the final extension from this string, so you should for example use &amp;lt;code&amp;gt;&amp;quot;dialogs/background&amp;quot;&amp;lt;/code&amp;gt; to get the standard background.&lt;br /&gt;
* bool '''usingRenderingCache'''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPixmap pixmap(QString elementID)&lt;br /&gt;
* void resize(qreal width, qreal height)&lt;br /&gt;
* void resize(): resets the image to its default dimension&lt;br /&gt;
* QSize elementSize(QString elementId)&lt;br /&gt;
* QRectF elementRect(QString elementId)&lt;br /&gt;
* bool hasElement(QString elementId)&lt;br /&gt;
* bool isValid(): true if valid svg file&lt;br /&gt;
&lt;br /&gt;
=== FrameSvg ===&lt;br /&gt;
Declaring a FrameSvg element instantiates a Plasma FrameSvg instance. This class doesn't draw anything. For drawing, FrameSvgItem is used.&lt;br /&gt;
This is to be used when you need informations about the framesvg, such as hasElementPrefix().&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* All properties from Svg&lt;br /&gt;
* EnabledBorders '''enabledBorders''': flag combination of:&lt;br /&gt;
** NoBorder&lt;br /&gt;
** TopBorder&lt;br /&gt;
** BottomBorder&lt;br /&gt;
** LeftBorder&lt;br /&gt;
** RightBorder&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* All methods from Svg&lt;br /&gt;
* void setImagePath(QString path)&lt;br /&gt;
* void resizeFrame(QSize size)&lt;br /&gt;
* QSize frameSize()&lt;br /&gt;
* qreal marginSize(Plasma::MarginEdge edge)&lt;br /&gt;
* void getMargins(qreal left, qreal top, qreal right, qreal bottom): parameters are output, they get set with the margins from the FrameSvg&lt;br /&gt;
* QRectF contentsRect(): the rectangle of the center element, taking the margins into account.&lt;br /&gt;
* void setElementPrefix(QString prefix)&lt;br /&gt;
* bool hasElementPrefix(const QString prefix)&lt;br /&gt;
* QString prefix()&lt;br /&gt;
* void setCacheAllRenderedFrames(bool cache)&lt;br /&gt;
* bool cacheAllRenderedFrames()&lt;br /&gt;
* void clearCache()&lt;br /&gt;
* QPixmap framePixmap()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.FrameSvg {&lt;br /&gt;
        id: myFrameSvg&lt;br /&gt;
        imagePath: &amp;quot;widgets/button&amp;quot;&lt;br /&gt;
        prefix: &amp;quot;pressed&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SvgItem ===&lt;br /&gt;
It's a graphical element that will actually paint a Svg instance.&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''elementId''': what element to render. If null, the whole svg will be rendered&lt;br /&gt;
* Svg '''svg''': instance of the Svg class mentioned above&lt;br /&gt;
* QSizeF '''naturalSize''' (read only): default size of the Svg&lt;br /&gt;
* bool '''smooth''': paint with antialias (default false)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.SvgItem {&lt;br /&gt;
        id: mySvgItem&lt;br /&gt;
        anchors {&lt;br /&gt;
            top: parent.top&lt;br /&gt;
            left: parent.left&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        width: 300&lt;br /&gt;
        height: 3&lt;br /&gt;
&lt;br /&gt;
        svg: mySvg&lt;br /&gt;
        elementId: &amp;quot;horizontal-line&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FrameSvgItem ===&lt;br /&gt;
It's a graphical element that paints a Plasma::FrameSvg, so a rectangular image composed by 9 elements contained in a Svg file, useful for things like buttons and frames.&lt;br /&gt;
&lt;br /&gt;
Flags&lt;br /&gt;
* EnabledBorders: combination of TopBorder | BottomBorder | LeftBorder | RightBorder, NoBorder if no border of the frame is enabled&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''imagePath''': path of the file relative to the Plasma Theme, for instance &amp;quot;widgets/background&amp;quot;&lt;br /&gt;
* String '''prefix''': a FrameSvg can contain multiple frames, for instance a button contains &amp;quot;normal&amp;quot;, &amp;quot;raised&amp;quot; and &amp;quot;pressed&amp;quot;&lt;br /&gt;
* Margins '''margins''' (read only): the margins of the frame, see documentation below&lt;br /&gt;
* EnabledBorders '''enabledBorders''': what borders are enabled&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
PlasmaCore.FrameSvgItem {&lt;br /&gt;
    id: myFrameSvgItem&lt;br /&gt;
    anchors.fill: parent&lt;br /&gt;
    imagePath: &amp;quot;translucent/dialogs/background&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top Level windows ==&lt;br /&gt;
&lt;br /&gt;
=== Dialog ===&lt;br /&gt;
Dialog instantiates a Plasma::Dialog, it will be a Plasma themed top level window that can contain any QML component.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''mainItem''': the Item contained in the Dialog, it can be any QML Item instance&lt;br /&gt;
* bool '''visible''': if the window (not the mainItem) is visible&lt;br /&gt;
* int '''x''': x position of the window in screen coordinates&lt;br /&gt;
* int '''y''': y position of the window in screen coordinates&lt;br /&gt;
* int '''width''' (read only): total width of the dialog, including margins&lt;br /&gt;
* int '''height''' (read only): total height of the dialog, including margins.&lt;br /&gt;
* int '''windowFlags''': Qt window flags of the Dialog&lt;br /&gt;
* Margins '''margins''' (read only): margins of the Dialog&lt;br /&gt;
&lt;br /&gt;
{{Note|The width and height will scale with size of the main item within this Dialog component.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import QtQuick 1.1&lt;br /&gt;
import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
    PlasmaCore.Dialog {&lt;br /&gt;
        visible: true&lt;br /&gt;
        mainItem: Item {&lt;br /&gt;
            width: 500&lt;br /&gt;
            height: 500&lt;br /&gt;
&lt;br /&gt;
            Text {&lt;br /&gt;
                anchors.centerIn: parent&lt;br /&gt;
                color: &amp;quot;red&amp;quot;&lt;br /&gt;
                text: qsTr(&amp;quot;text&amp;quot;)&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPoint popupPosition(Item item, Qt::Alignment alignment=Qt::AlignLeft): the suggested position for the Dialog if it has to be correctly placed as popup of the QML item passed as parameter.&lt;br /&gt;
* void setAttribute(Qt::WindowAttribute attribute, bool on): set an attribute for the dialog window&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
=== ToolTip ===&lt;br /&gt;
Declaring a ToolTip instance makes it possible to use Plasma tooltips with any QML item.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''target''': the QML item we want to show a tooltip of&lt;br /&gt;
* String '''mainText'''&lt;br /&gt;
* String '''subText'''&lt;br /&gt;
* String '''image''': freedesktop compliant icon name as image of the tooltip&lt;br /&gt;
&lt;br /&gt;
== Containments ==&lt;br /&gt;
A Plasma Containment manages the position and manipulation of Plasmoids.&lt;br /&gt;
=== AppletContainer ===&lt;br /&gt;
The AppletContainer class provides access to the geometry and status of Plasmoids in this Containment.&lt;br /&gt;
Properties:&lt;br /&gt;
* ''int'' '''minimumWidth''': The minimum width of the applet&lt;br /&gt;
* ''int'' '''minimumHeight''': The minimum height of the applet&lt;br /&gt;
* ''int'' '''maximumWidth''': The maximum width of the applet&lt;br /&gt;
* ''int'' '''maximumHeight''': The maximum height of the applet&lt;br /&gt;
* ''int'' '''preferredWidth''': The preferred height of the applet&lt;br /&gt;
* ''int'' '''preferredHeight''': The preferred height of the applet&lt;br /&gt;
* ''enum'' '''status''': The status of the applet, one in the enum&lt;br /&gt;
** '''UnknownStatus''': The status is unknown&lt;br /&gt;
** '''PassiveStatus''': The applet is passive&lt;br /&gt;
** '''ActiveStatus''': The applet is active&lt;br /&gt;
** '''NeedsAttentionStatus''': The applet asks for attention&lt;br /&gt;
** '''AcceptingInputStatus''': The applet is accepting input&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
They can be imported in your code with:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.plasma.containments 0.1 as PlasmaContainments&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AppletContainer is only available for Plasma/Containment packages, and only if they are loaded as containment. AppletContainer is new in 4.10.&lt;br /&gt;
&lt;br /&gt;
== ToolBox ==&lt;br /&gt;
The ToolBox is only available through the plasmoid object, through plasmoid.toolBox(). The ToolBox is rendered as a separate item  on top of the scene covering the entire containment. It is loaded from the &amp;quot;org.kde.toolbox&amp;quot; Plasma Package, if the package is not found, no ToolBox will be loaded.&lt;br /&gt;
The ToolBox provides a listmodel of actions that can be rendered using Repeaters or ListViews. The ''actions'' list property contains actions from the Corona and Containments. Examples for these actions are showing the add widget or activities interface, lock and unlock. The actions in the list change dynamically whenever the widgets are locked or unlocked.&lt;br /&gt;
Actions such as lock screen and leave can be implemented using the powermanagement dataengine's services for these functions.&lt;br /&gt;
&lt;br /&gt;
ToolBox provides access to the following properties:&lt;br /&gt;
* ''Array(QAction)'' '''actions''': A list of actions provided by the Containment. These actions' most interesting properties are: &lt;br /&gt;
** ''QIcon'' '''icon''': The icon belonging to this action.&lt;br /&gt;
** ''String'' '''text''': The icon belonging to this action.&lt;br /&gt;
** '''trigger()''': Call trigger from your action delegate to trigger the action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.plasma.containments 0.1 as PlasmaContainments&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ToolBox is only available for Containments and new in 4.10.&lt;br /&gt;
&lt;br /&gt;
= Plasma QtComponents (4.8) =&lt;br /&gt;
Plasma components documentation online at [http://api.kde.org/4.x-api/plasma-qml-apidocs/ api.kde.org]&lt;br /&gt;
&lt;br /&gt;
=QtExtraComponents=&lt;br /&gt;
The QtExtraComponents make some very convenient Qt classes usable from within QML.&lt;br /&gt;
&lt;br /&gt;
They can be imported in your code with:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.qtextracomponents 0.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==QPixmapItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QPixmap directly to QPixmapItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QPixmap '''pixmap''': The QPixmap object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QPixmap width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QPixmap height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==QImageItem==&lt;br /&gt;
This one wraps around a QImage class and allows you to send a QImage directly to QImageItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QImage '''image''': The QImage object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QImage width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QImage height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==FillMode==&lt;br /&gt;
Both QPixmapItem and QImageItem expose a FillMode enum. This enum defines how the image is going to be used to fill the item.&lt;br /&gt;
&lt;br /&gt;
For QPixmapItem, possible values are:&lt;br /&gt;
&lt;br /&gt;
* QPixmapItem.Stretch: the image is scaled to fit&lt;br /&gt;
* QPixmapItem.PreserveAspectFit: the image is scaled uniformly to fit without cropping&lt;br /&gt;
* QPixmapItem.PreserveAspectCrop: the image is scaled uniformly to fill, cropping if necessary&lt;br /&gt;
* QPixmapItem.Tile: the image is duplicated horizontally and vertically&lt;br /&gt;
* QPixmapItem.TileVertically: the image is stretched horizontally and tiled vertically&lt;br /&gt;
* QPixmapItem.TileHorizontally :e image is stretched vertically and tiled horizontally&lt;br /&gt;
&lt;br /&gt;
QImageItem defines the same values, you just need to replace QPixmapItem with QImageItem.&lt;br /&gt;
&lt;br /&gt;
==QIconItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QIcon directly to QIconItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QIcon/QString '''icon''': If you provide a QIcon it uses that directly. If you provide a string it uses a KIcon internally!&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''implicitWidth''': Default width of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* int '''implicitHeight''': Default height of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* State '''state''': Icon state (DefaultState, ActiveState, DisabledState)&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/API</id>
		<title>Development/Tutorials/Plasma/QML/API</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/API"/>
				<updated>2012-11-21T01:39:07Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: add import&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction to the Plasmoid QML Declarative API  =&lt;br /&gt;
&lt;br /&gt;
This document provides an overview/reference of the Declarative QML API for Plasmoids. It isn't a full binding to all of Qt or KDE's libraries, but a focused set of bindings designed to make writing Plasmoids fast and easy, while remaining powerful.&lt;br /&gt;
&lt;br /&gt;
The API in this documentation covers the API of the Plasma specific QML components, so only the Declarative part of the API.&lt;br /&gt;
&lt;br /&gt;
The QML ScriptEngine is based upon the Plasma JavaScript engine, making the API of the JavaScript part identical to the one of the JavaScript plasmoids engine.&lt;br /&gt;
To see the api of the global ''Plasmoid'' object, see the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#The_Global_plasmoid_Object JavaScript API] documentation.&lt;br /&gt;
(TODO: the JavaScript api page should probably be copied and stripped down the imperative bits not present there, it would make it harder to update tough)&lt;br /&gt;
The most important API for using graphical widgets is the [http://api.kde.org/4.x-api/plasma-qml-apidocs/ Plasma QtComponents API]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What Is a Declarative Plasmoid?  ==&lt;br /&gt;
&lt;br /&gt;
To denote that this Plasmoid is a Declarative widget, ensure that in the metadata.desktop file there is this line: &lt;br /&gt;
&lt;br /&gt;
X-Plasma-API=declarativeappletscript&lt;br /&gt;
&lt;br /&gt;
What follows is a description of the Plasma declarative classes instantiable from QML.&lt;br /&gt;
&lt;br /&gt;
== fetching data from the plasmoid package ==&lt;br /&gt;
&lt;br /&gt;
If you have a file in your plasmoid package under contents, let's say an image, you can access it with the plasmapackage url protocol:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Image {&lt;br /&gt;
    source: &amp;quot;plasmapackage:/images/foo.png&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code will load in the Image component the file foo.png located in contents/images of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import &amp;quot;plasmapackage:/code/foo.js&amp;quot; as Foo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, the above code will import a javascript file from the folder contents/code of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
= Properties exported from the main QML item =&lt;br /&gt;
The root qml item can export some properties to influence its behavior:&lt;br /&gt;
* '''property int minimumWidth''': the plasmoid won't ever become narrower then that, size in pixels.&lt;br /&gt;
* '''property int minimumHeight''': minum height of the plasmoid, size in pixels.&lt;br /&gt;
* '''property Component compactRepresentation''': if the plasmoid is a popupapplet, the component in compactRepresentation will be used instead of the icon and will always be collapsed, regardless if it's in a panel or not.&lt;br /&gt;
&lt;br /&gt;
= Main Plasma QML Classes =&lt;br /&gt;
&lt;br /&gt;
== Data Engines ==&lt;br /&gt;
While it's possible to fetch data from a Plasma DataEngine in the same way as the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#DataEngine JavaScript API], it is preferrable to use the following declarative classes:&lt;br /&gt;
&lt;br /&gt;
=== DataSource ===&lt;br /&gt;
DataSource is a receiver for a dataEngine and can be declared inside QML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
 PlasmaCore.DataSource {&lt;br /&gt;
     id: dataSource&lt;br /&gt;
     engine: &amp;quot;time&amp;quot;&lt;br /&gt;
     connectedSources: [&amp;quot;Local&amp;quot;]&lt;br /&gt;
     interval: 500&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* bool '''valid''' (read only): true when the DataSource is successfully connected to a data engine&lt;br /&gt;
* int '''interval''': interval of polling of the dataengine, if 0 (default value, so no need to specify if you don't need it) no polling will be executed&lt;br /&gt;
* string '''engine''': the plugin name of the dataengine to load, e.g. &amp;quot;nowplaying&amp;quot;, etc.&lt;br /&gt;
* Array(string) '''connectedSources''': all the sources of the dataengine we are connected to (and whose data will appear in the '''data''' property)&lt;br /&gt;
* Array(string) '''sources''' (read only): all the sources available from the dataengine&lt;br /&gt;
* variant map '''data''' (read only): It's the most important property, it's a map of all the data available from the dataengine: its structure will be as follows:&lt;br /&gt;
** each key of the map will be a source name, in '''connectedSources'''&lt;br /&gt;
** each value will be a variant hash, so an hash with strings as keys and any variant as value&lt;br /&gt;
** example: dataSource.data[&amp;quot;Local&amp;quot;][&amp;quot;Time&amp;quot;] indicates the '''Time''' key of the dataengine source called &amp;quot;Local&amp;quot;&lt;br /&gt;
* string '''sourceFilter''' it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. If we want to have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Signals ====&lt;br /&gt;
It has the following signals:&lt;br /&gt;
&lt;br /&gt;
Note that javascript/qml applies the 'on' prefix to signals. So the actual signal name in C++ which is e.g. '''newData'''(...) becomes '''onNewData'''(...).&lt;br /&gt;
&lt;br /&gt;
* '''onNewData'''(String sourceName, Plasma::DataEngine::Data data)&lt;br /&gt;
* '''onSourceAdded'''(String source)&lt;br /&gt;
* '''onSourceRemoved'''(String source)&lt;br /&gt;
* '''onSourceConnected'''(String source)&lt;br /&gt;
* '''onSourceDisconnected'''(String source)&lt;br /&gt;
* '''onIntervalChanged'''()&lt;br /&gt;
* '''onEngineChanged'''()&lt;br /&gt;
* '''onDataChanged'''()&lt;br /&gt;
* '''onConnectedSourcesChanged'''()&lt;br /&gt;
* '''onSourcesChanged'''()&lt;br /&gt;
&lt;br /&gt;
==== Methods ====&lt;br /&gt;
It has the following methods:&lt;br /&gt;
* StringList keysForSource(String source): lists all the keys corresponding to a certain source: for instance in the &amp;quot;time&amp;quot; dataengine, for the &amp;quot;Local&amp;quot; source, keys will be:&lt;br /&gt;
** &amp;quot;Timezone Continent&amp;quot;&lt;br /&gt;
** &amp;quot;Offset&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone&amp;quot;&lt;br /&gt;
** &amp;quot;Time&amp;quot;&lt;br /&gt;
** &amp;quot;Date&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone City&amp;quot;&lt;br /&gt;
* Service serviceForSource(String source): returns a Plasma service that corresponds a given source: see the section about services for how to use it.&lt;br /&gt;
* void connectSource(String source): adds to '''connectedSources''' the new source&lt;br /&gt;
* void disconnectSource(String source): removes that source from '''connectedSources'''&lt;br /&gt;
&lt;br /&gt;
=== Service ===&lt;br /&gt;
Due to their imperative nature, Plasma Services are not instantiated as QML classes, but rather created out of a '''DataSource''' with the method '''serviceForSource''' and used in the JavaScript portions of the QML files.&lt;br /&gt;
This following example is a simplified version from the Now Playing QML widget in the kdeexamples git repository: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  var service = dataSource.serviceForSource(activeSource)&lt;br /&gt;
  var operation = service.operationDescription(&amp;quot;seek&amp;quot;)&lt;br /&gt;
  operation.seconds = 10&lt;br /&gt;
&lt;br /&gt;
  var job = service.startOperationCall(operation)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Here dataSource is the id of a DataSource object, and activeSource is a source contained in one of its '''connectedSources'''.&lt;br /&gt;
The service provides an operation called &amp;quot;seek&amp;quot;, with a parameter called &amp;quot;seconds&amp;quot;, that can be written on it as a property of a JavaScript object.&lt;br /&gt;
&lt;br /&gt;
=== ServiceJob ===&lt;br /&gt;
It is necessary to monitor the result of a Service operation, it's possible to connect to the '''finished''' signal provided by the job return paramenter of the '''startOperationCall''' service method.&lt;br /&gt;
The '''finished''' signal has the same job as parameter, from which is possible to check the variant '''result''' property, to check the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var service = messagesDataSource.serviceForSource(src)&lt;br /&gt;
    var operation = &amp;quot;auth&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    function result(job) {&lt;br /&gt;
        statusItem.authorizationStatus = job.result;&lt;br /&gt;
        print(&amp;quot;ServiceJob result: &amp;quot; + job.result + &amp;quot; op: &amp;quot; + job.operationName);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var operation = service.operationDescription(operation);&lt;br /&gt;
    operation.user = userName;&lt;br /&gt;
    operation.password = password;&lt;br /&gt;
    var serviceJob = service.startOperationCall(operation);&lt;br /&gt;
    serviceJob.finished.connect(result);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DataModel ===&lt;br /&gt;
Some data engines return as their data something that can be interpreted as a list of items, rather than simple key/value pairs.&lt;br /&gt;
QML provides some item views such as '''ListView''', '''GridView''' and '''Repeater'''.&lt;br /&gt;
The '''DataModel''' QML object can provide, based on a DataSource a model suitable for those QML item views.&lt;br /&gt;
&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* DataSource '''dataSource''': the id of an existing (and connected) DataSource&lt;br /&gt;
* String '''sourceFilter''': it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. To, for example, have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
* String '''keyRoleFilter''': it's a regular expression. Only data with keys that match this filter expression will be inserted in the model&lt;br /&gt;
* int '''count''' (read only): how many items are in the model&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 ListView {&lt;br /&gt;
   model: PlasmaCore.DataModel {&lt;br /&gt;
        dataSource: microblogSource&lt;br /&gt;
        keyRoleFilter: &amp;quot;[\\d]*&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    delegate: Text {&lt;br /&gt;
        text: title&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the example, ''microblogSource'' is the id of a DataSource, and inserts in the model only entries that have a number as the key name (matched with [\\d]*, in this case tweets ids)&lt;br /&gt;
&lt;br /&gt;
Each item in the model will have the form of a variant hash: all the keys of the hash will be registered as model role names, in the example, &amp;quot;title&amp;quot; is a role of the model containing a string (also reachable with model[&amp;quot;title&amp;quot;]).&lt;br /&gt;
&lt;br /&gt;
A special reserved role will always be present: '''&amp;quot;DataEngineSource&amp;quot;''': it will contain the name of the data engine source that gave origin to this item. Therefore, if you want merely the string of the current source that the model is at...do model[&amp;quot;DataEngineSource&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
Note that view.currentItem holds the item currently selected. However, due to (http://bugreports.qt.nokia.com/browse/QTBUG-16347) this does not work in PathView. A workaround is to make your own.&lt;br /&gt;
&lt;br /&gt;
=== SortFilterModel ===&lt;br /&gt;
SortFilterModel is a proxy model for easy sorting and/or filtering of the items in a DataModel (or any other QAbstractItemModel subclass that has been registered in QML with setContextProperty from a C++ application)&lt;br /&gt;
Properties:&lt;br /&gt;
* model '''sourceModel'''&lt;br /&gt;
* String '''filterRegExp'''&lt;br /&gt;
* String '''filterRole'''&lt;br /&gt;
* String '''sortRole'''&lt;br /&gt;
* Qt::SortOrder '''sortOrder'''&lt;br /&gt;
* int '''count''' (read only)&lt;br /&gt;
&lt;br /&gt;
This is an example from the feed widget:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
model: PlasmaCore.SortFilterModel {&lt;br /&gt;
   id: postTitleFilter&lt;br /&gt;
   filterRole: &amp;quot;title&amp;quot;&lt;br /&gt;
   sortRole: &amp;quot;time&amp;quot;&lt;br /&gt;
   sortOrder: &amp;quot;DescendingOrder&amp;quot;&lt;br /&gt;
   filterRegExp: toolbarFrame.searchQuery&lt;br /&gt;
   sourceModel: PlasmaCore.SortFilterModel {&lt;br /&gt;
      id: feedCategoryFilter&lt;br /&gt;
      filterRole: &amp;quot;feed_url&amp;quot;&lt;br /&gt;
      sourceModel: PlasmaCore.DataModel {&lt;br /&gt;
         dataSource: feedSource&lt;br /&gt;
         keyRoleFilter: &amp;quot;items&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Popup Applet ==&lt;br /&gt;
So you want your QML applet to be a popup applet, like the device notifier (an icon in the panel shows and expands the applet)?&lt;br /&gt;
&lt;br /&gt;
Why, that's easy.&lt;br /&gt;
&lt;br /&gt;
To change your plasmoid from being a regular boring one, in your '''metadata.desktop''', simply change this following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet,Plasma/PopupApplet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in the main QML item's Component.onCompleted, do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    plasmoid.popupIcon = &amp;quot;konqueror&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to use other elements instead of an icon when collapsed in a panel, use the '''compactRepresentation''' property in the root Item.&lt;br /&gt;
&lt;br /&gt;
== Plasma Themes ==&lt;br /&gt;
&lt;br /&gt;
=== Theme ===&lt;br /&gt;
This class instantiable from QML provides access to the Plasma Theme colors and other facilities such as fonts.&lt;br /&gt;
From KDE 4.8 a Theme instance is always present given the org.kde.plasma.core plugin was imported, is not necessary to create it by hand.&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* String '''themeName''' (read only)&lt;br /&gt;
* bool '''windowTranslucentEnabled''' (read only)&lt;br /&gt;
* Url '''homepage''' (read only)&lt;br /&gt;
* bool '''useGlobalSettings''' (read only)&lt;br /&gt;
* QString '''wallpaperPath''' (read only)&lt;br /&gt;
* color '''textColor''' (read only)&lt;br /&gt;
* color '''highlightColor''' (read only)&lt;br /&gt;
* color '''backgroundColor''' (read only)&lt;br /&gt;
* color '''buttonTextColor''' (read only)&lt;br /&gt;
* color '''buttonBackgroundColor''' (read only)&lt;br /&gt;
* color '''linkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''buttonHoverColor''' (read only)&lt;br /&gt;
* color '''buttonFocusColor''' (read only)&lt;br /&gt;
* color '''viewTextColor''' (read only)&lt;br /&gt;
* color '''viewBackgroundColor''' (read only)&lt;br /&gt;
* color '''viewHoverColor''' (read only)&lt;br /&gt;
* color '''viewFocusColor''' (read only)&lt;br /&gt;
* String '''styleSheet''' (read only)&lt;br /&gt;
* Font '''defaultFont''' (read only)&lt;br /&gt;
* Font '''desktopFont''' (read only)&lt;br /&gt;
* Font '''smallestFont''' (read only)&lt;br /&gt;
&lt;br /&gt;
Each Font element has the following properties:&lt;br /&gt;
* bool bold&lt;br /&gt;
* Capitalization '''capitalization''' (MixedCase, AllUppercase, AllLowercase, SmallCaps, Capitalize) (read only)&lt;br /&gt;
* String '''family''' (read only)&lt;br /&gt;
* bool '''italic''' (read only)&lt;br /&gt;
* real '''letterSpacing''' (read only)&lt;br /&gt;
* int '''pixelSize''' (read only)&lt;br /&gt;
* real '''pointSize''' (read only)&lt;br /&gt;
* bool '''strikeout''' (read only)&lt;br /&gt;
* bool '''underline''' (read only)&lt;br /&gt;
* Weight '''weight''' (Light, Normal, DemiBold, Bold, Black) (read only)&lt;br /&gt;
* real '''wordSpacing''' (read only)&lt;br /&gt;
* size '''mSize''' the size, width and height of an uppercase &amp;quot;M&amp;quot; in this font (read only)&lt;br /&gt;
&lt;br /&gt;
=== Svg ===&lt;br /&gt;
Declaring a Svg element instantiates a Plasma Svg instance. This class doesn't draw anything. For drawing, SvgItem is used.&lt;br /&gt;
Properties:&lt;br /&gt;
* QSize '''size'''&lt;br /&gt;
* bool '''multipleImages'''&lt;br /&gt;
* String '''imagePath''' can be anything in the '''desktoptheme/''' folder. For more information on what is available, see [http://techbase.kde.org/Projects/Plasma/Theme#Current_Theme_Elements Plasma Theme Elements]. Make sure to strip the final extension from this string, so you should for example use &amp;lt;code&amp;gt;&amp;quot;dialogs/background&amp;quot;&amp;lt;/code&amp;gt; to get the standard background.&lt;br /&gt;
* bool '''usingRenderingCache'''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPixmap pixmap(QString elementID)&lt;br /&gt;
* void resize(qreal width, qreal height)&lt;br /&gt;
* void resize(): resets the image to its default dimension&lt;br /&gt;
* QSize elementSize(QString elementId)&lt;br /&gt;
* QRectF elementRect(QString elementId)&lt;br /&gt;
* bool hasElement(QString elementId)&lt;br /&gt;
* bool isValid(): true if valid svg file&lt;br /&gt;
&lt;br /&gt;
=== FrameSvg ===&lt;br /&gt;
Declaring a FrameSvg element instantiates a Plasma FrameSvg instance. This class doesn't draw anything. For drawing, FrameSvgItem is used.&lt;br /&gt;
This is to be used when you need informations about the framesvg, such as hasElementPrefix().&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* All properties from Svg&lt;br /&gt;
* EnabledBorders '''enabledBorders''': flag combination of:&lt;br /&gt;
** NoBorder&lt;br /&gt;
** TopBorder&lt;br /&gt;
** BottomBorder&lt;br /&gt;
** LeftBorder&lt;br /&gt;
** RightBorder&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* All methods from Svg&lt;br /&gt;
* void setImagePath(QString path)&lt;br /&gt;
* void resizeFrame(QSize size)&lt;br /&gt;
* QSize frameSize()&lt;br /&gt;
* qreal marginSize(Plasma::MarginEdge edge)&lt;br /&gt;
* void getMargins(qreal left, qreal top, qreal right, qreal bottom): parameters are output, they get set with the margins from the FrameSvg&lt;br /&gt;
* QRectF contentsRect(): the rectangle of the center element, taking the margins into account.&lt;br /&gt;
* void setElementPrefix(QString prefix)&lt;br /&gt;
* bool hasElementPrefix(const QString prefix)&lt;br /&gt;
* QString prefix()&lt;br /&gt;
* void setCacheAllRenderedFrames(bool cache)&lt;br /&gt;
* bool cacheAllRenderedFrames()&lt;br /&gt;
* void clearCache()&lt;br /&gt;
* QPixmap framePixmap()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.FrameSvg {&lt;br /&gt;
        id: myFrameSvg&lt;br /&gt;
        imagePath: &amp;quot;widgets/button&amp;quot;&lt;br /&gt;
        prefix: &amp;quot;pressed&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SvgItem ===&lt;br /&gt;
It's a graphical element that will actually paint a Svg instance.&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''elementId''': what element to render. If null, the whole svg will be rendered&lt;br /&gt;
* Svg '''svg''': instance of the Svg class mentioned above&lt;br /&gt;
* QSizeF '''naturalSize''' (read only): default size of the Svg&lt;br /&gt;
* bool '''smooth''': paint with antialias (default false)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.SvgItem {&lt;br /&gt;
        id: mySvgItem&lt;br /&gt;
        anchors {&lt;br /&gt;
            top: parent.top&lt;br /&gt;
            left: parent.left&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        width: 300&lt;br /&gt;
        height: 3&lt;br /&gt;
&lt;br /&gt;
        svg: mySvg&lt;br /&gt;
        elementId: &amp;quot;horizontal-line&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FrameSvgItem ===&lt;br /&gt;
It's a graphical element that paints a Plasma::FrameSvg, so a rectangular image composed by 9 elements contained in a Svg file, useful for things like buttons and frames.&lt;br /&gt;
&lt;br /&gt;
Flags&lt;br /&gt;
* EnabledBorders: combination of TopBorder | BottomBorder | LeftBorder | RightBorder, NoBorder if no border of the frame is enabled&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''imagePath''': path of the file relative to the Plasma Theme, for instance &amp;quot;widgets/background&amp;quot;&lt;br /&gt;
* String '''prefix''': a FrameSvg can contain multiple frames, for instance a button contains &amp;quot;normal&amp;quot;, &amp;quot;raised&amp;quot; and &amp;quot;pressed&amp;quot;&lt;br /&gt;
* Margins '''margins''' (read only): the margins of the frame, see documentation below&lt;br /&gt;
* EnabledBorders '''enabledBorders''': what borders are enabled&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
PlasmaCore.FrameSvgItem {&lt;br /&gt;
    id: myFrameSvgItem&lt;br /&gt;
    anchors.fill: parent&lt;br /&gt;
    imagePath: &amp;quot;translucent/dialogs/background&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top Level windows ==&lt;br /&gt;
&lt;br /&gt;
=== Dialog ===&lt;br /&gt;
Dialog instantiates a Plasma::Dialog, it will be a Plasma themed top level window that can contain any QML component.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''mainItem''': the Item contained in the Dialog, it can be any QML Item instance&lt;br /&gt;
* bool '''visible''': if the window (not the mainItem) is visible&lt;br /&gt;
* int '''x''': x position of the window in screen coordinates&lt;br /&gt;
* int '''y''': y position of the window in screen coordinates&lt;br /&gt;
* int '''width''' (read only): total width of the dialog, including margins&lt;br /&gt;
* int '''height''' (read only): total height of the dialog, including margins.&lt;br /&gt;
* int '''windowFlags''': Qt window flags of the Dialog&lt;br /&gt;
* Margins '''margins''' (read only): margins of the Dialog&lt;br /&gt;
&lt;br /&gt;
{{Note|The width and height will scale with size of the main item within this Dialog component.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import QtQuick 1.1&lt;br /&gt;
import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
    PlasmaCore.Dialog {&lt;br /&gt;
        visible: true&lt;br /&gt;
        mainItem: Item {&lt;br /&gt;
            width: 500&lt;br /&gt;
            height: 500&lt;br /&gt;
&lt;br /&gt;
            Text {&lt;br /&gt;
                anchors.centerIn: parent&lt;br /&gt;
                color: &amp;quot;red&amp;quot;&lt;br /&gt;
                text: qsTr(&amp;quot;text&amp;quot;)&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPoint popupPosition(Item item, Qt::Alignment alignment=Qt::AlignLeft): the suggested position for the Dialog if it has to be correctly placed as popup of the QML item passed as parameter.&lt;br /&gt;
* void setAttribute(Qt::WindowAttribute attribute, bool on): set an attribute for the dialog window&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
=== ToolTip ===&lt;br /&gt;
Declaring a ToolTip instance makes it possible to use Plasma tooltips with any QML item.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''target''': the QML item we want to show a tooltip of&lt;br /&gt;
* String '''mainText'''&lt;br /&gt;
* String '''subText'''&lt;br /&gt;
* String '''image''': freedesktop compliant icon name as image of the tooltip&lt;br /&gt;
&lt;br /&gt;
== Containments ==&lt;br /&gt;
A Plasma Containment manages the position and manipulation of Plasmoids.&lt;br /&gt;
=== AppletContainer ===&lt;br /&gt;
The AppletContainer class provides access to the geometry and status of Plasmoids in this Containment.&lt;br /&gt;
Properties:&lt;br /&gt;
* ''int'' '''minimumWidth''': The minimum width of the applet&lt;br /&gt;
* ''int'' '''minimumHeight''': The minimum height of the applet&lt;br /&gt;
* ''int'' '''maximumWidth''': The maximum width of the applet&lt;br /&gt;
* ''int'' '''maximumHeight''': The maximum height of the applet&lt;br /&gt;
* ''int'' '''preferredWidth''': The preferred height of the applet&lt;br /&gt;
* ''int'' '''preferredHeight''': The preferred height of the applet&lt;br /&gt;
* ''enum'' '''status''': The status of the applet, one in the enum&lt;br /&gt;
** '''UnknownStatus''': The status is unknown&lt;br /&gt;
** '''PassiveStatus''': The applet is passive&lt;br /&gt;
** '''ActiveStatus''': The applet is active&lt;br /&gt;
** '''NeedsAttentionStatus''': The applet asks for attention&lt;br /&gt;
** '''AcceptingInputStatus''': The applet is accepting input&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
They can be imported in your code with:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.plasma.containments 0.1 as PlasmaContainments&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AppletContainer is only available for Plasma/Containment packages, and only if they are loaded as containment. AppletContainer is new in 4.10.&lt;br /&gt;
&lt;br /&gt;
== ToolBox ==&lt;br /&gt;
The ToolBox is only available through the plasmoid object, through plasmoid.toolBox(). The ToolBox is rendered as a separate item  on top of the scene covering the entire containment. It is loaded from the &amp;quot;org.kde.toolbox&amp;quot; Plasma Package, if the package is not found, no ToolBox will be loaded.&lt;br /&gt;
The ToolBox provides a listmodel of actions that can be rendered using Repeaters or ListViews. The ''actions'' list property contains actions from the Corona and Containments. Examples for these actions are showing the add widget or activities interface, lock and unlock. The actions in the list change dynamically whenever the widgets are locked or unlocked.&lt;br /&gt;
Actions such as lock screen and leave can be implemented using the powermanagement dataengine's services for these functions.&lt;br /&gt;
&lt;br /&gt;
ToolBox provides access to the following properties:&lt;br /&gt;
* ''Array(QAction)'' '''actions''': A list of actions provided by the Containment. These actions' most interesting properties are: &lt;br /&gt;
** ''QIcon'' '''icon''': The icon belonging to this action.&lt;br /&gt;
** ''String'' '''text''': The icon belonging to this action.&lt;br /&gt;
** ''''trigger()''': Call trigger from your action delegate to trigger the action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.plasma.containments 0.1 as PlasmaContainments&lt;br /&gt;
&amp;lt;/syntaxhighlighting&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ToolBox is only available for Containments and new in 4.10.&lt;br /&gt;
&lt;br /&gt;
= Plasma QtComponents (4.8) =&lt;br /&gt;
Plasma components documentation online at [http://api.kde.org/4.x-api/plasma-qml-apidocs/ api.kde.org]&lt;br /&gt;
&lt;br /&gt;
=QtExtraComponents=&lt;br /&gt;
The QtExtraComponents make some very convenient Qt classes usable from within QML.&lt;br /&gt;
&lt;br /&gt;
They can be imported in your code with:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.qtextracomponents 0.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==QPixmapItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QPixmap directly to QPixmapItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QPixmap '''pixmap''': The QPixmap object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QPixmap width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QPixmap height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==QImageItem==&lt;br /&gt;
This one wraps around a QImage class and allows you to send a QImage directly to QImageItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QImage '''image''': The QImage object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QImage width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QImage height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==FillMode==&lt;br /&gt;
Both QPixmapItem and QImageItem expose a FillMode enum. This enum defines how the image is going to be used to fill the item.&lt;br /&gt;
&lt;br /&gt;
For QPixmapItem, possible values are:&lt;br /&gt;
&lt;br /&gt;
* QPixmapItem.Stretch: the image is scaled to fit&lt;br /&gt;
* QPixmapItem.PreserveAspectFit: the image is scaled uniformly to fit without cropping&lt;br /&gt;
* QPixmapItem.PreserveAspectCrop: the image is scaled uniformly to fill, cropping if necessary&lt;br /&gt;
* QPixmapItem.Tile: the image is duplicated horizontally and vertically&lt;br /&gt;
* QPixmapItem.TileVertically: the image is stretched horizontally and tiled vertically&lt;br /&gt;
* QPixmapItem.TileHorizontally :e image is stretched vertically and tiled horizontally&lt;br /&gt;
&lt;br /&gt;
QImageItem defines the same values, you just need to replace QPixmapItem with QImageItem.&lt;br /&gt;
&lt;br /&gt;
==QIconItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QIcon directly to QIconItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QIcon/QString '''icon''': If you provide a QIcon it uses that directly. If you provide a string it uses a KIcon internally!&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''implicitWidth''': Default width of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* int '''implicitHeight''': Default height of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* State '''state''': Icon state (DefaultState, ActiveState, DisabledState)&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/API</id>
		<title>Development/Tutorials/Plasma/QML/API</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/API"/>
				<updated>2012-11-21T01:36:14Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: import&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction to the Plasmoid QML Declarative API  =&lt;br /&gt;
&lt;br /&gt;
This document provides an overview/reference of the Declarative QML API for Plasmoids. It isn't a full binding to all of Qt or KDE's libraries, but a focused set of bindings designed to make writing Plasmoids fast and easy, while remaining powerful.&lt;br /&gt;
&lt;br /&gt;
The API in this documentation covers the API of the Plasma specific QML components, so only the Declarative part of the API.&lt;br /&gt;
&lt;br /&gt;
The QML ScriptEngine is based upon the Plasma JavaScript engine, making the API of the JavaScript part identical to the one of the JavaScript plasmoids engine.&lt;br /&gt;
To see the api of the global ''Plasmoid'' object, see the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#The_Global_plasmoid_Object JavaScript API] documentation.&lt;br /&gt;
(TODO: the JavaScript api page should probably be copied and stripped down the imperative bits not present there, it would make it harder to update tough)&lt;br /&gt;
The most important API for using graphical widgets is the [http://api.kde.org/4.x-api/plasma-qml-apidocs/ Plasma QtComponents API]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What Is a Declarative Plasmoid?  ==&lt;br /&gt;
&lt;br /&gt;
To denote that this Plasmoid is a Declarative widget, ensure that in the metadata.desktop file there is this line: &lt;br /&gt;
&lt;br /&gt;
X-Plasma-API=declarativeappletscript&lt;br /&gt;
&lt;br /&gt;
What follows is a description of the Plasma declarative classes instantiable from QML.&lt;br /&gt;
&lt;br /&gt;
== fetching data from the plasmoid package ==&lt;br /&gt;
&lt;br /&gt;
If you have a file in your plasmoid package under contents, let's say an image, you can access it with the plasmapackage url protocol:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Image {&lt;br /&gt;
    source: &amp;quot;plasmapackage:/images/foo.png&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code will load in the Image component the file foo.png located in contents/images of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import &amp;quot;plasmapackage:/code/foo.js&amp;quot; as Foo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, the above code will import a javascript file from the folder contents/code of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
= Properties exported from the main QML item =&lt;br /&gt;
The root qml item can export some properties to influence its behavior:&lt;br /&gt;
* '''property int minimumWidth''': the plasmoid won't ever become narrower then that, size in pixels.&lt;br /&gt;
* '''property int minimumHeight''': minum height of the plasmoid, size in pixels.&lt;br /&gt;
* '''property Component compactRepresentation''': if the plasmoid is a popupapplet, the component in compactRepresentation will be used instead of the icon and will always be collapsed, regardless if it's in a panel or not.&lt;br /&gt;
&lt;br /&gt;
= Main Plasma QML Classes =&lt;br /&gt;
&lt;br /&gt;
== Data Engines ==&lt;br /&gt;
While it's possible to fetch data from a Plasma DataEngine in the same way as the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#DataEngine JavaScript API], it is preferrable to use the following declarative classes:&lt;br /&gt;
&lt;br /&gt;
=== DataSource ===&lt;br /&gt;
DataSource is a receiver for a dataEngine and can be declared inside QML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
 PlasmaCore.DataSource {&lt;br /&gt;
     id: dataSource&lt;br /&gt;
     engine: &amp;quot;time&amp;quot;&lt;br /&gt;
     connectedSources: [&amp;quot;Local&amp;quot;]&lt;br /&gt;
     interval: 500&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* bool '''valid''' (read only): true when the DataSource is successfully connected to a data engine&lt;br /&gt;
* int '''interval''': interval of polling of the dataengine, if 0 (default value, so no need to specify if you don't need it) no polling will be executed&lt;br /&gt;
* string '''engine''': the plugin name of the dataengine to load, e.g. &amp;quot;nowplaying&amp;quot;, etc.&lt;br /&gt;
* Array(string) '''connectedSources''': all the sources of the dataengine we are connected to (and whose data will appear in the '''data''' property)&lt;br /&gt;
* Array(string) '''sources''' (read only): all the sources available from the dataengine&lt;br /&gt;
* variant map '''data''' (read only): It's the most important property, it's a map of all the data available from the dataengine: its structure will be as follows:&lt;br /&gt;
** each key of the map will be a source name, in '''connectedSources'''&lt;br /&gt;
** each value will be a variant hash, so an hash with strings as keys and any variant as value&lt;br /&gt;
** example: dataSource.data[&amp;quot;Local&amp;quot;][&amp;quot;Time&amp;quot;] indicates the '''Time''' key of the dataengine source called &amp;quot;Local&amp;quot;&lt;br /&gt;
* string '''sourceFilter''' it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. If we want to have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Signals ====&lt;br /&gt;
It has the following signals:&lt;br /&gt;
&lt;br /&gt;
Note that javascript/qml applies the 'on' prefix to signals. So the actual signal name in C++ which is e.g. '''newData'''(...) becomes '''onNewData'''(...).&lt;br /&gt;
&lt;br /&gt;
* '''onNewData'''(String sourceName, Plasma::DataEngine::Data data)&lt;br /&gt;
* '''onSourceAdded'''(String source)&lt;br /&gt;
* '''onSourceRemoved'''(String source)&lt;br /&gt;
* '''onSourceConnected'''(String source)&lt;br /&gt;
* '''onSourceDisconnected'''(String source)&lt;br /&gt;
* '''onIntervalChanged'''()&lt;br /&gt;
* '''onEngineChanged'''()&lt;br /&gt;
* '''onDataChanged'''()&lt;br /&gt;
* '''onConnectedSourcesChanged'''()&lt;br /&gt;
* '''onSourcesChanged'''()&lt;br /&gt;
&lt;br /&gt;
==== Methods ====&lt;br /&gt;
It has the following methods:&lt;br /&gt;
* StringList keysForSource(String source): lists all the keys corresponding to a certain source: for instance in the &amp;quot;time&amp;quot; dataengine, for the &amp;quot;Local&amp;quot; source, keys will be:&lt;br /&gt;
** &amp;quot;Timezone Continent&amp;quot;&lt;br /&gt;
** &amp;quot;Offset&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone&amp;quot;&lt;br /&gt;
** &amp;quot;Time&amp;quot;&lt;br /&gt;
** &amp;quot;Date&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone City&amp;quot;&lt;br /&gt;
* Service serviceForSource(String source): returns a Plasma service that corresponds a given source: see the section about services for how to use it.&lt;br /&gt;
* void connectSource(String source): adds to '''connectedSources''' the new source&lt;br /&gt;
* void disconnectSource(String source): removes that source from '''connectedSources'''&lt;br /&gt;
&lt;br /&gt;
=== Service ===&lt;br /&gt;
Due to their imperative nature, Plasma Services are not instantiated as QML classes, but rather created out of a '''DataSource''' with the method '''serviceForSource''' and used in the JavaScript portions of the QML files.&lt;br /&gt;
This following example is a simplified version from the Now Playing QML widget in the kdeexamples git repository: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  var service = dataSource.serviceForSource(activeSource)&lt;br /&gt;
  var operation = service.operationDescription(&amp;quot;seek&amp;quot;)&lt;br /&gt;
  operation.seconds = 10&lt;br /&gt;
&lt;br /&gt;
  var job = service.startOperationCall(operation)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Here dataSource is the id of a DataSource object, and activeSource is a source contained in one of its '''connectedSources'''.&lt;br /&gt;
The service provides an operation called &amp;quot;seek&amp;quot;, with a parameter called &amp;quot;seconds&amp;quot;, that can be written on it as a property of a JavaScript object.&lt;br /&gt;
&lt;br /&gt;
=== ServiceJob ===&lt;br /&gt;
It is necessary to monitor the result of a Service operation, it's possible to connect to the '''finished''' signal provided by the job return paramenter of the '''startOperationCall''' service method.&lt;br /&gt;
The '''finished''' signal has the same job as parameter, from which is possible to check the variant '''result''' property, to check the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var service = messagesDataSource.serviceForSource(src)&lt;br /&gt;
    var operation = &amp;quot;auth&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    function result(job) {&lt;br /&gt;
        statusItem.authorizationStatus = job.result;&lt;br /&gt;
        print(&amp;quot;ServiceJob result: &amp;quot; + job.result + &amp;quot; op: &amp;quot; + job.operationName);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var operation = service.operationDescription(operation);&lt;br /&gt;
    operation.user = userName;&lt;br /&gt;
    operation.password = password;&lt;br /&gt;
    var serviceJob = service.startOperationCall(operation);&lt;br /&gt;
    serviceJob.finished.connect(result);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DataModel ===&lt;br /&gt;
Some data engines return as their data something that can be interpreted as a list of items, rather than simple key/value pairs.&lt;br /&gt;
QML provides some item views such as '''ListView''', '''GridView''' and '''Repeater'''.&lt;br /&gt;
The '''DataModel''' QML object can provide, based on a DataSource a model suitable for those QML item views.&lt;br /&gt;
&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* DataSource '''dataSource''': the id of an existing (and connected) DataSource&lt;br /&gt;
* String '''sourceFilter''': it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. To, for example, have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
* String '''keyRoleFilter''': it's a regular expression. Only data with keys that match this filter expression will be inserted in the model&lt;br /&gt;
* int '''count''' (read only): how many items are in the model&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 ListView {&lt;br /&gt;
   model: PlasmaCore.DataModel {&lt;br /&gt;
        dataSource: microblogSource&lt;br /&gt;
        keyRoleFilter: &amp;quot;[\\d]*&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    delegate: Text {&lt;br /&gt;
        text: title&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the example, ''microblogSource'' is the id of a DataSource, and inserts in the model only entries that have a number as the key name (matched with [\\d]*, in this case tweets ids)&lt;br /&gt;
&lt;br /&gt;
Each item in the model will have the form of a variant hash: all the keys of the hash will be registered as model role names, in the example, &amp;quot;title&amp;quot; is a role of the model containing a string (also reachable with model[&amp;quot;title&amp;quot;]).&lt;br /&gt;
&lt;br /&gt;
A special reserved role will always be present: '''&amp;quot;DataEngineSource&amp;quot;''': it will contain the name of the data engine source that gave origin to this item. Therefore, if you want merely the string of the current source that the model is at...do model[&amp;quot;DataEngineSource&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
Note that view.currentItem holds the item currently selected. However, due to (http://bugreports.qt.nokia.com/browse/QTBUG-16347) this does not work in PathView. A workaround is to make your own.&lt;br /&gt;
&lt;br /&gt;
=== SortFilterModel ===&lt;br /&gt;
SortFilterModel is a proxy model for easy sorting and/or filtering of the items in a DataModel (or any other QAbstractItemModel subclass that has been registered in QML with setContextProperty from a C++ application)&lt;br /&gt;
Properties:&lt;br /&gt;
* model '''sourceModel'''&lt;br /&gt;
* String '''filterRegExp'''&lt;br /&gt;
* String '''filterRole'''&lt;br /&gt;
* String '''sortRole'''&lt;br /&gt;
* Qt::SortOrder '''sortOrder'''&lt;br /&gt;
* int '''count''' (read only)&lt;br /&gt;
&lt;br /&gt;
This is an example from the feed widget:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
model: PlasmaCore.SortFilterModel {&lt;br /&gt;
   id: postTitleFilter&lt;br /&gt;
   filterRole: &amp;quot;title&amp;quot;&lt;br /&gt;
   sortRole: &amp;quot;time&amp;quot;&lt;br /&gt;
   sortOrder: &amp;quot;DescendingOrder&amp;quot;&lt;br /&gt;
   filterRegExp: toolbarFrame.searchQuery&lt;br /&gt;
   sourceModel: PlasmaCore.SortFilterModel {&lt;br /&gt;
      id: feedCategoryFilter&lt;br /&gt;
      filterRole: &amp;quot;feed_url&amp;quot;&lt;br /&gt;
      sourceModel: PlasmaCore.DataModel {&lt;br /&gt;
         dataSource: feedSource&lt;br /&gt;
         keyRoleFilter: &amp;quot;items&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Popup Applet ==&lt;br /&gt;
So you want your QML applet to be a popup applet, like the device notifier (an icon in the panel shows and expands the applet)?&lt;br /&gt;
&lt;br /&gt;
Why, that's easy.&lt;br /&gt;
&lt;br /&gt;
To change your plasmoid from being a regular boring one, in your '''metadata.desktop''', simply change this following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet,Plasma/PopupApplet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in the main QML item's Component.onCompleted, do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    plasmoid.popupIcon = &amp;quot;konqueror&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to use other elements instead of an icon when collapsed in a panel, use the '''compactRepresentation''' property in the root Item.&lt;br /&gt;
&lt;br /&gt;
== Plasma Themes ==&lt;br /&gt;
&lt;br /&gt;
=== Theme ===&lt;br /&gt;
This class instantiable from QML provides access to the Plasma Theme colors and other facilities such as fonts.&lt;br /&gt;
From KDE 4.8 a Theme instance is always present given the org.kde.plasma.core plugin was imported, is not necessary to create it by hand.&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* String '''themeName''' (read only)&lt;br /&gt;
* bool '''windowTranslucentEnabled''' (read only)&lt;br /&gt;
* Url '''homepage''' (read only)&lt;br /&gt;
* bool '''useGlobalSettings''' (read only)&lt;br /&gt;
* QString '''wallpaperPath''' (read only)&lt;br /&gt;
* color '''textColor''' (read only)&lt;br /&gt;
* color '''highlightColor''' (read only)&lt;br /&gt;
* color '''backgroundColor''' (read only)&lt;br /&gt;
* color '''buttonTextColor''' (read only)&lt;br /&gt;
* color '''buttonBackgroundColor''' (read only)&lt;br /&gt;
* color '''linkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''buttonHoverColor''' (read only)&lt;br /&gt;
* color '''buttonFocusColor''' (read only)&lt;br /&gt;
* color '''viewTextColor''' (read only)&lt;br /&gt;
* color '''viewBackgroundColor''' (read only)&lt;br /&gt;
* color '''viewHoverColor''' (read only)&lt;br /&gt;
* color '''viewFocusColor''' (read only)&lt;br /&gt;
* String '''styleSheet''' (read only)&lt;br /&gt;
* Font '''defaultFont''' (read only)&lt;br /&gt;
* Font '''desktopFont''' (read only)&lt;br /&gt;
* Font '''smallestFont''' (read only)&lt;br /&gt;
&lt;br /&gt;
Each Font element has the following properties:&lt;br /&gt;
* bool bold&lt;br /&gt;
* Capitalization '''capitalization''' (MixedCase, AllUppercase, AllLowercase, SmallCaps, Capitalize) (read only)&lt;br /&gt;
* String '''family''' (read only)&lt;br /&gt;
* bool '''italic''' (read only)&lt;br /&gt;
* real '''letterSpacing''' (read only)&lt;br /&gt;
* int '''pixelSize''' (read only)&lt;br /&gt;
* real '''pointSize''' (read only)&lt;br /&gt;
* bool '''strikeout''' (read only)&lt;br /&gt;
* bool '''underline''' (read only)&lt;br /&gt;
* Weight '''weight''' (Light, Normal, DemiBold, Bold, Black) (read only)&lt;br /&gt;
* real '''wordSpacing''' (read only)&lt;br /&gt;
* size '''mSize''' the size, width and height of an uppercase &amp;quot;M&amp;quot; in this font (read only)&lt;br /&gt;
&lt;br /&gt;
=== Svg ===&lt;br /&gt;
Declaring a Svg element instantiates a Plasma Svg instance. This class doesn't draw anything. For drawing, SvgItem is used.&lt;br /&gt;
Properties:&lt;br /&gt;
* QSize '''size'''&lt;br /&gt;
* bool '''multipleImages'''&lt;br /&gt;
* String '''imagePath''' can be anything in the '''desktoptheme/''' folder. For more information on what is available, see [http://techbase.kde.org/Projects/Plasma/Theme#Current_Theme_Elements Plasma Theme Elements]. Make sure to strip the final extension from this string, so you should for example use &amp;lt;code&amp;gt;&amp;quot;dialogs/background&amp;quot;&amp;lt;/code&amp;gt; to get the standard background.&lt;br /&gt;
* bool '''usingRenderingCache'''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPixmap pixmap(QString elementID)&lt;br /&gt;
* void resize(qreal width, qreal height)&lt;br /&gt;
* void resize(): resets the image to its default dimension&lt;br /&gt;
* QSize elementSize(QString elementId)&lt;br /&gt;
* QRectF elementRect(QString elementId)&lt;br /&gt;
* bool hasElement(QString elementId)&lt;br /&gt;
* bool isValid(): true if valid svg file&lt;br /&gt;
&lt;br /&gt;
=== FrameSvg ===&lt;br /&gt;
Declaring a FrameSvg element instantiates a Plasma FrameSvg instance. This class doesn't draw anything. For drawing, FrameSvgItem is used.&lt;br /&gt;
This is to be used when you need informations about the framesvg, such as hasElementPrefix().&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* All properties from Svg&lt;br /&gt;
* EnabledBorders '''enabledBorders''': flag combination of:&lt;br /&gt;
** NoBorder&lt;br /&gt;
** TopBorder&lt;br /&gt;
** BottomBorder&lt;br /&gt;
** LeftBorder&lt;br /&gt;
** RightBorder&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* All methods from Svg&lt;br /&gt;
* void setImagePath(QString path)&lt;br /&gt;
* void resizeFrame(QSize size)&lt;br /&gt;
* QSize frameSize()&lt;br /&gt;
* qreal marginSize(Plasma::MarginEdge edge)&lt;br /&gt;
* void getMargins(qreal left, qreal top, qreal right, qreal bottom): parameters are output, they get set with the margins from the FrameSvg&lt;br /&gt;
* QRectF contentsRect(): the rectangle of the center element, taking the margins into account.&lt;br /&gt;
* void setElementPrefix(QString prefix)&lt;br /&gt;
* bool hasElementPrefix(const QString prefix)&lt;br /&gt;
* QString prefix()&lt;br /&gt;
* void setCacheAllRenderedFrames(bool cache)&lt;br /&gt;
* bool cacheAllRenderedFrames()&lt;br /&gt;
* void clearCache()&lt;br /&gt;
* QPixmap framePixmap()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.FrameSvg {&lt;br /&gt;
        id: myFrameSvg&lt;br /&gt;
        imagePath: &amp;quot;widgets/button&amp;quot;&lt;br /&gt;
        prefix: &amp;quot;pressed&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SvgItem ===&lt;br /&gt;
It's a graphical element that will actually paint a Svg instance.&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''elementId''': what element to render. If null, the whole svg will be rendered&lt;br /&gt;
* Svg '''svg''': instance of the Svg class mentioned above&lt;br /&gt;
* QSizeF '''naturalSize''' (read only): default size of the Svg&lt;br /&gt;
* bool '''smooth''': paint with antialias (default false)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.SvgItem {&lt;br /&gt;
        id: mySvgItem&lt;br /&gt;
        anchors {&lt;br /&gt;
            top: parent.top&lt;br /&gt;
            left: parent.left&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        width: 300&lt;br /&gt;
        height: 3&lt;br /&gt;
&lt;br /&gt;
        svg: mySvg&lt;br /&gt;
        elementId: &amp;quot;horizontal-line&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FrameSvgItem ===&lt;br /&gt;
It's a graphical element that paints a Plasma::FrameSvg, so a rectangular image composed by 9 elements contained in a Svg file, useful for things like buttons and frames.&lt;br /&gt;
&lt;br /&gt;
Flags&lt;br /&gt;
* EnabledBorders: combination of TopBorder | BottomBorder | LeftBorder | RightBorder, NoBorder if no border of the frame is enabled&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''imagePath''': path of the file relative to the Plasma Theme, for instance &amp;quot;widgets/background&amp;quot;&lt;br /&gt;
* String '''prefix''': a FrameSvg can contain multiple frames, for instance a button contains &amp;quot;normal&amp;quot;, &amp;quot;raised&amp;quot; and &amp;quot;pressed&amp;quot;&lt;br /&gt;
* Margins '''margins''' (read only): the margins of the frame, see documentation below&lt;br /&gt;
* EnabledBorders '''enabledBorders''': what borders are enabled&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
PlasmaCore.FrameSvgItem {&lt;br /&gt;
    id: myFrameSvgItem&lt;br /&gt;
    anchors.fill: parent&lt;br /&gt;
    imagePath: &amp;quot;translucent/dialogs/background&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top Level windows ==&lt;br /&gt;
&lt;br /&gt;
=== Dialog ===&lt;br /&gt;
Dialog instantiates a Plasma::Dialog, it will be a Plasma themed top level window that can contain any QML component.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''mainItem''': the Item contained in the Dialog, it can be any QML Item instance&lt;br /&gt;
* bool '''visible''': if the window (not the mainItem) is visible&lt;br /&gt;
* int '''x''': x position of the window in screen coordinates&lt;br /&gt;
* int '''y''': y position of the window in screen coordinates&lt;br /&gt;
* int '''width''' (read only): total width of the dialog, including margins&lt;br /&gt;
* int '''height''' (read only): total height of the dialog, including margins.&lt;br /&gt;
* int '''windowFlags''': Qt window flags of the Dialog&lt;br /&gt;
* Margins '''margins''' (read only): margins of the Dialog&lt;br /&gt;
&lt;br /&gt;
{{Note|The width and height will scale with size of the main item within this Dialog component.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import QtQuick 1.1&lt;br /&gt;
import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
    PlasmaCore.Dialog {&lt;br /&gt;
        visible: true&lt;br /&gt;
        mainItem: Item {&lt;br /&gt;
            width: 500&lt;br /&gt;
            height: 500&lt;br /&gt;
&lt;br /&gt;
            Text {&lt;br /&gt;
                anchors.centerIn: parent&lt;br /&gt;
                color: &amp;quot;red&amp;quot;&lt;br /&gt;
                text: qsTr(&amp;quot;text&amp;quot;)&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPoint popupPosition(Item item, Qt::Alignment alignment=Qt::AlignLeft): the suggested position for the Dialog if it has to be correctly placed as popup of the QML item passed as parameter.&lt;br /&gt;
* void setAttribute(Qt::WindowAttribute attribute, bool on): set an attribute for the dialog window&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
=== ToolTip ===&lt;br /&gt;
Declaring a ToolTip instance makes it possible to use Plasma tooltips with any QML item.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''target''': the QML item we want to show a tooltip of&lt;br /&gt;
* String '''mainText'''&lt;br /&gt;
* String '''subText'''&lt;br /&gt;
* String '''image''': freedesktop compliant icon name as image of the tooltip&lt;br /&gt;
&lt;br /&gt;
== Containments ==&lt;br /&gt;
A Plasma Containment manages the position and manipulation of Plasmoids.&lt;br /&gt;
=== AppletContainer ===&lt;br /&gt;
The AppletContainer class provides access to the geometry and status of Plasmoids in this Containment.&lt;br /&gt;
Properties:&lt;br /&gt;
* ''int'' '''minimumWidth''': The minimum width of the applet&lt;br /&gt;
* ''int'' '''minimumHeight''': The minimum height of the applet&lt;br /&gt;
* ''int'' '''maximumWidth''': The maximum width of the applet&lt;br /&gt;
* ''int'' '''maximumHeight''': The maximum height of the applet&lt;br /&gt;
* ''int'' '''preferredWidth''': The preferred height of the applet&lt;br /&gt;
* ''int'' '''preferredHeight''': The preferred height of the applet&lt;br /&gt;
* ''enum'' '''status''': The status of the applet, one in the enum&lt;br /&gt;
** '''UnknownStatus''': The status is unknown&lt;br /&gt;
** '''PassiveStatus''': The applet is passive&lt;br /&gt;
** '''ActiveStatus''': The applet is active&lt;br /&gt;
** '''NeedsAttentionStatus''': The applet asks for attention&lt;br /&gt;
** '''AcceptingInputStatus''': The applet is accepting input&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
They can be imported in your code with:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.plasma.containments 0.1 as PlasmaContainments&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AppletContainer is only available for Plasma/Containment packages, and only if they are loaded as containment. AppletContainer is new in 4.10.&lt;br /&gt;
&lt;br /&gt;
== ToolBox ==&lt;br /&gt;
The ToolBox is only available through the plasmoid object, through plasmoid.toolBox(). The ToolBox is rendered as a separate item  on top of the scene covering the entire containment. It is loaded from the &amp;quot;org.kde.toolbox&amp;quot; Plasma Package, if the package is not found, no ToolBox will be loaded.&lt;br /&gt;
The ToolBox provides a listmodel of actions that can be rendered using Repeaters or ListViews. The ''actions'' list property contains actions from the Corona and Containments. Examples for these actions are showing the add widget or activities interface, lock and unlock. The actions in the list change dynamically whenever the widgets are locked or unlocked.&lt;br /&gt;
Actions such as lock screen and leave can be implemented using the powermanagement dataengine's services for these functions.&lt;br /&gt;
&lt;br /&gt;
ToolBox provides access to the following properties:&lt;br /&gt;
* ''Array(QAction)'' '''actions''': A list of actions provided by the Containment. These actions' most interesting properties are: &lt;br /&gt;
** ''QIcon'' '''icon''': The icon belonging to this action.&lt;br /&gt;
** ''String' '''text''': The icon belonging to this action.&lt;br /&gt;
** ''''trigger()''': Call trigger from your action delegate to trigger the action.&lt;br /&gt;
&lt;br /&gt;
ToolBox is only available for Containments and new in 4.10.&lt;br /&gt;
&lt;br /&gt;
= Plasma QtComponents (4.8) =&lt;br /&gt;
Plasma components documentation online at [http://api.kde.org/4.x-api/plasma-qml-apidocs/ api.kde.org]&lt;br /&gt;
&lt;br /&gt;
=QtExtraComponents=&lt;br /&gt;
The QtExtraComponents make some very convenient Qt classes usable from within QML.&lt;br /&gt;
&lt;br /&gt;
They can be imported in your code with:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.qtextracomponents 0.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==QPixmapItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QPixmap directly to QPixmapItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QPixmap '''pixmap''': The QPixmap object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QPixmap width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QPixmap height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==QImageItem==&lt;br /&gt;
This one wraps around a QImage class and allows you to send a QImage directly to QImageItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QImage '''image''': The QImage object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QImage width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QImage height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==FillMode==&lt;br /&gt;
Both QPixmapItem and QImageItem expose a FillMode enum. This enum defines how the image is going to be used to fill the item.&lt;br /&gt;
&lt;br /&gt;
For QPixmapItem, possible values are:&lt;br /&gt;
&lt;br /&gt;
* QPixmapItem.Stretch: the image is scaled to fit&lt;br /&gt;
* QPixmapItem.PreserveAspectFit: the image is scaled uniformly to fit without cropping&lt;br /&gt;
* QPixmapItem.PreserveAspectCrop: the image is scaled uniformly to fill, cropping if necessary&lt;br /&gt;
* QPixmapItem.Tile: the image is duplicated horizontally and vertically&lt;br /&gt;
* QPixmapItem.TileVertically: the image is stretched horizontally and tiled vertically&lt;br /&gt;
* QPixmapItem.TileHorizontally :e image is stretched vertically and tiled horizontally&lt;br /&gt;
&lt;br /&gt;
QImageItem defines the same values, you just need to replace QPixmapItem with QImageItem.&lt;br /&gt;
&lt;br /&gt;
==QIconItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QIcon directly to QIconItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QIcon/QString '''icon''': If you provide a QIcon it uses that directly. If you provide a string it uses a KIcon internally!&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''implicitWidth''': Default width of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* int '''implicitHeight''': Default height of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* State '''state''': Icon state (DefaultState, ActiveState, DisabledState)&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/API</id>
		<title>Development/Tutorials/Plasma/QML/API</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/API"/>
				<updated>2012-11-21T01:34:29Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: note about availability&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction to the Plasmoid QML Declarative API  =&lt;br /&gt;
&lt;br /&gt;
This document provides an overview/reference of the Declarative QML API for Plasmoids. It isn't a full binding to all of Qt or KDE's libraries, but a focused set of bindings designed to make writing Plasmoids fast and easy, while remaining powerful.&lt;br /&gt;
&lt;br /&gt;
The API in this documentation covers the API of the Plasma specific QML components, so only the Declarative part of the API.&lt;br /&gt;
&lt;br /&gt;
The QML ScriptEngine is based upon the Plasma JavaScript engine, making the API of the JavaScript part identical to the one of the JavaScript plasmoids engine.&lt;br /&gt;
To see the api of the global ''Plasmoid'' object, see the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#The_Global_plasmoid_Object JavaScript API] documentation.&lt;br /&gt;
(TODO: the JavaScript api page should probably be copied and stripped down the imperative bits not present there, it would make it harder to update tough)&lt;br /&gt;
The most important API for using graphical widgets is the [http://api.kde.org/4.x-api/plasma-qml-apidocs/ Plasma QtComponents API]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What Is a Declarative Plasmoid?  ==&lt;br /&gt;
&lt;br /&gt;
To denote that this Plasmoid is a Declarative widget, ensure that in the metadata.desktop file there is this line: &lt;br /&gt;
&lt;br /&gt;
X-Plasma-API=declarativeappletscript&lt;br /&gt;
&lt;br /&gt;
What follows is a description of the Plasma declarative classes instantiable from QML.&lt;br /&gt;
&lt;br /&gt;
== fetching data from the plasmoid package ==&lt;br /&gt;
&lt;br /&gt;
If you have a file in your plasmoid package under contents, let's say an image, you can access it with the plasmapackage url protocol:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Image {&lt;br /&gt;
    source: &amp;quot;plasmapackage:/images/foo.png&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code will load in the Image component the file foo.png located in contents/images of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import &amp;quot;plasmapackage:/code/foo.js&amp;quot; as Foo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, the above code will import a javascript file from the folder contents/code of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
= Properties exported from the main QML item =&lt;br /&gt;
The root qml item can export some properties to influence its behavior:&lt;br /&gt;
* '''property int minimumWidth''': the plasmoid won't ever become narrower then that, size in pixels.&lt;br /&gt;
* '''property int minimumHeight''': minum height of the plasmoid, size in pixels.&lt;br /&gt;
* '''property Component compactRepresentation''': if the plasmoid is a popupapplet, the component in compactRepresentation will be used instead of the icon and will always be collapsed, regardless if it's in a panel or not.&lt;br /&gt;
&lt;br /&gt;
= Main Plasma QML Classes =&lt;br /&gt;
&lt;br /&gt;
== Data Engines ==&lt;br /&gt;
While it's possible to fetch data from a Plasma DataEngine in the same way as the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#DataEngine JavaScript API], it is preferrable to use the following declarative classes:&lt;br /&gt;
&lt;br /&gt;
=== DataSource ===&lt;br /&gt;
DataSource is a receiver for a dataEngine and can be declared inside QML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
 PlasmaCore.DataSource {&lt;br /&gt;
     id: dataSource&lt;br /&gt;
     engine: &amp;quot;time&amp;quot;&lt;br /&gt;
     connectedSources: [&amp;quot;Local&amp;quot;]&lt;br /&gt;
     interval: 500&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* bool '''valid''' (read only): true when the DataSource is successfully connected to a data engine&lt;br /&gt;
* int '''interval''': interval of polling of the dataengine, if 0 (default value, so no need to specify if you don't need it) no polling will be executed&lt;br /&gt;
* string '''engine''': the plugin name of the dataengine to load, e.g. &amp;quot;nowplaying&amp;quot;, etc.&lt;br /&gt;
* Array(string) '''connectedSources''': all the sources of the dataengine we are connected to (and whose data will appear in the '''data''' property)&lt;br /&gt;
* Array(string) '''sources''' (read only): all the sources available from the dataengine&lt;br /&gt;
* variant map '''data''' (read only): It's the most important property, it's a map of all the data available from the dataengine: its structure will be as follows:&lt;br /&gt;
** each key of the map will be a source name, in '''connectedSources'''&lt;br /&gt;
** each value will be a variant hash, so an hash with strings as keys and any variant as value&lt;br /&gt;
** example: dataSource.data[&amp;quot;Local&amp;quot;][&amp;quot;Time&amp;quot;] indicates the '''Time''' key of the dataengine source called &amp;quot;Local&amp;quot;&lt;br /&gt;
* string '''sourceFilter''' it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. If we want to have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Signals ====&lt;br /&gt;
It has the following signals:&lt;br /&gt;
&lt;br /&gt;
Note that javascript/qml applies the 'on' prefix to signals. So the actual signal name in C++ which is e.g. '''newData'''(...) becomes '''onNewData'''(...).&lt;br /&gt;
&lt;br /&gt;
* '''onNewData'''(String sourceName, Plasma::DataEngine::Data data)&lt;br /&gt;
* '''onSourceAdded'''(String source)&lt;br /&gt;
* '''onSourceRemoved'''(String source)&lt;br /&gt;
* '''onSourceConnected'''(String source)&lt;br /&gt;
* '''onSourceDisconnected'''(String source)&lt;br /&gt;
* '''onIntervalChanged'''()&lt;br /&gt;
* '''onEngineChanged'''()&lt;br /&gt;
* '''onDataChanged'''()&lt;br /&gt;
* '''onConnectedSourcesChanged'''()&lt;br /&gt;
* '''onSourcesChanged'''()&lt;br /&gt;
&lt;br /&gt;
==== Methods ====&lt;br /&gt;
It has the following methods:&lt;br /&gt;
* StringList keysForSource(String source): lists all the keys corresponding to a certain source: for instance in the &amp;quot;time&amp;quot; dataengine, for the &amp;quot;Local&amp;quot; source, keys will be:&lt;br /&gt;
** &amp;quot;Timezone Continent&amp;quot;&lt;br /&gt;
** &amp;quot;Offset&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone&amp;quot;&lt;br /&gt;
** &amp;quot;Time&amp;quot;&lt;br /&gt;
** &amp;quot;Date&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone City&amp;quot;&lt;br /&gt;
* Service serviceForSource(String source): returns a Plasma service that corresponds a given source: see the section about services for how to use it.&lt;br /&gt;
* void connectSource(String source): adds to '''connectedSources''' the new source&lt;br /&gt;
* void disconnectSource(String source): removes that source from '''connectedSources'''&lt;br /&gt;
&lt;br /&gt;
=== Service ===&lt;br /&gt;
Due to their imperative nature, Plasma Services are not instantiated as QML classes, but rather created out of a '''DataSource''' with the method '''serviceForSource''' and used in the JavaScript portions of the QML files.&lt;br /&gt;
This following example is a simplified version from the Now Playing QML widget in the kdeexamples git repository: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  var service = dataSource.serviceForSource(activeSource)&lt;br /&gt;
  var operation = service.operationDescription(&amp;quot;seek&amp;quot;)&lt;br /&gt;
  operation.seconds = 10&lt;br /&gt;
&lt;br /&gt;
  var job = service.startOperationCall(operation)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Here dataSource is the id of a DataSource object, and activeSource is a source contained in one of its '''connectedSources'''.&lt;br /&gt;
The service provides an operation called &amp;quot;seek&amp;quot;, with a parameter called &amp;quot;seconds&amp;quot;, that can be written on it as a property of a JavaScript object.&lt;br /&gt;
&lt;br /&gt;
=== ServiceJob ===&lt;br /&gt;
It is necessary to monitor the result of a Service operation, it's possible to connect to the '''finished''' signal provided by the job return paramenter of the '''startOperationCall''' service method.&lt;br /&gt;
The '''finished''' signal has the same job as parameter, from which is possible to check the variant '''result''' property, to check the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var service = messagesDataSource.serviceForSource(src)&lt;br /&gt;
    var operation = &amp;quot;auth&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    function result(job) {&lt;br /&gt;
        statusItem.authorizationStatus = job.result;&lt;br /&gt;
        print(&amp;quot;ServiceJob result: &amp;quot; + job.result + &amp;quot; op: &amp;quot; + job.operationName);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var operation = service.operationDescription(operation);&lt;br /&gt;
    operation.user = userName;&lt;br /&gt;
    operation.password = password;&lt;br /&gt;
    var serviceJob = service.startOperationCall(operation);&lt;br /&gt;
    serviceJob.finished.connect(result);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DataModel ===&lt;br /&gt;
Some data engines return as their data something that can be interpreted as a list of items, rather than simple key/value pairs.&lt;br /&gt;
QML provides some item views such as '''ListView''', '''GridView''' and '''Repeater'''.&lt;br /&gt;
The '''DataModel''' QML object can provide, based on a DataSource a model suitable for those QML item views.&lt;br /&gt;
&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* DataSource '''dataSource''': the id of an existing (and connected) DataSource&lt;br /&gt;
* String '''sourceFilter''': it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. To, for example, have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
* String '''keyRoleFilter''': it's a regular expression. Only data with keys that match this filter expression will be inserted in the model&lt;br /&gt;
* int '''count''' (read only): how many items are in the model&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 ListView {&lt;br /&gt;
   model: PlasmaCore.DataModel {&lt;br /&gt;
        dataSource: microblogSource&lt;br /&gt;
        keyRoleFilter: &amp;quot;[\\d]*&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    delegate: Text {&lt;br /&gt;
        text: title&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the example, ''microblogSource'' is the id of a DataSource, and inserts in the model only entries that have a number as the key name (matched with [\\d]*, in this case tweets ids)&lt;br /&gt;
&lt;br /&gt;
Each item in the model will have the form of a variant hash: all the keys of the hash will be registered as model role names, in the example, &amp;quot;title&amp;quot; is a role of the model containing a string (also reachable with model[&amp;quot;title&amp;quot;]).&lt;br /&gt;
&lt;br /&gt;
A special reserved role will always be present: '''&amp;quot;DataEngineSource&amp;quot;''': it will contain the name of the data engine source that gave origin to this item. Therefore, if you want merely the string of the current source that the model is at...do model[&amp;quot;DataEngineSource&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
Note that view.currentItem holds the item currently selected. However, due to (http://bugreports.qt.nokia.com/browse/QTBUG-16347) this does not work in PathView. A workaround is to make your own.&lt;br /&gt;
&lt;br /&gt;
=== SortFilterModel ===&lt;br /&gt;
SortFilterModel is a proxy model for easy sorting and/or filtering of the items in a DataModel (or any other QAbstractItemModel subclass that has been registered in QML with setContextProperty from a C++ application)&lt;br /&gt;
Properties:&lt;br /&gt;
* model '''sourceModel'''&lt;br /&gt;
* String '''filterRegExp'''&lt;br /&gt;
* String '''filterRole'''&lt;br /&gt;
* String '''sortRole'''&lt;br /&gt;
* Qt::SortOrder '''sortOrder'''&lt;br /&gt;
* int '''count''' (read only)&lt;br /&gt;
&lt;br /&gt;
This is an example from the feed widget:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
model: PlasmaCore.SortFilterModel {&lt;br /&gt;
   id: postTitleFilter&lt;br /&gt;
   filterRole: &amp;quot;title&amp;quot;&lt;br /&gt;
   sortRole: &amp;quot;time&amp;quot;&lt;br /&gt;
   sortOrder: &amp;quot;DescendingOrder&amp;quot;&lt;br /&gt;
   filterRegExp: toolbarFrame.searchQuery&lt;br /&gt;
   sourceModel: PlasmaCore.SortFilterModel {&lt;br /&gt;
      id: feedCategoryFilter&lt;br /&gt;
      filterRole: &amp;quot;feed_url&amp;quot;&lt;br /&gt;
      sourceModel: PlasmaCore.DataModel {&lt;br /&gt;
         dataSource: feedSource&lt;br /&gt;
         keyRoleFilter: &amp;quot;items&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Popup Applet ==&lt;br /&gt;
So you want your QML applet to be a popup applet, like the device notifier (an icon in the panel shows and expands the applet)?&lt;br /&gt;
&lt;br /&gt;
Why, that's easy.&lt;br /&gt;
&lt;br /&gt;
To change your plasmoid from being a regular boring one, in your '''metadata.desktop''', simply change this following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet,Plasma/PopupApplet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in the main QML item's Component.onCompleted, do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    plasmoid.popupIcon = &amp;quot;konqueror&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to use other elements instead of an icon when collapsed in a panel, use the '''compactRepresentation''' property in the root Item.&lt;br /&gt;
&lt;br /&gt;
== Plasma Themes ==&lt;br /&gt;
&lt;br /&gt;
=== Theme ===&lt;br /&gt;
This class instantiable from QML provides access to the Plasma Theme colors and other facilities such as fonts.&lt;br /&gt;
From KDE 4.8 a Theme instance is always present given the org.kde.plasma.core plugin was imported, is not necessary to create it by hand.&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* String '''themeName''' (read only)&lt;br /&gt;
* bool '''windowTranslucentEnabled''' (read only)&lt;br /&gt;
* Url '''homepage''' (read only)&lt;br /&gt;
* bool '''useGlobalSettings''' (read only)&lt;br /&gt;
* QString '''wallpaperPath''' (read only)&lt;br /&gt;
* color '''textColor''' (read only)&lt;br /&gt;
* color '''highlightColor''' (read only)&lt;br /&gt;
* color '''backgroundColor''' (read only)&lt;br /&gt;
* color '''buttonTextColor''' (read only)&lt;br /&gt;
* color '''buttonBackgroundColor''' (read only)&lt;br /&gt;
* color '''linkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''buttonHoverColor''' (read only)&lt;br /&gt;
* color '''buttonFocusColor''' (read only)&lt;br /&gt;
* color '''viewTextColor''' (read only)&lt;br /&gt;
* color '''viewBackgroundColor''' (read only)&lt;br /&gt;
* color '''viewHoverColor''' (read only)&lt;br /&gt;
* color '''viewFocusColor''' (read only)&lt;br /&gt;
* String '''styleSheet''' (read only)&lt;br /&gt;
* Font '''defaultFont''' (read only)&lt;br /&gt;
* Font '''desktopFont''' (read only)&lt;br /&gt;
* Font '''smallestFont''' (read only)&lt;br /&gt;
&lt;br /&gt;
Each Font element has the following properties:&lt;br /&gt;
* bool bold&lt;br /&gt;
* Capitalization '''capitalization''' (MixedCase, AllUppercase, AllLowercase, SmallCaps, Capitalize) (read only)&lt;br /&gt;
* String '''family''' (read only)&lt;br /&gt;
* bool '''italic''' (read only)&lt;br /&gt;
* real '''letterSpacing''' (read only)&lt;br /&gt;
* int '''pixelSize''' (read only)&lt;br /&gt;
* real '''pointSize''' (read only)&lt;br /&gt;
* bool '''strikeout''' (read only)&lt;br /&gt;
* bool '''underline''' (read only)&lt;br /&gt;
* Weight '''weight''' (Light, Normal, DemiBold, Bold, Black) (read only)&lt;br /&gt;
* real '''wordSpacing''' (read only)&lt;br /&gt;
* size '''mSize''' the size, width and height of an uppercase &amp;quot;M&amp;quot; in this font (read only)&lt;br /&gt;
&lt;br /&gt;
=== Svg ===&lt;br /&gt;
Declaring a Svg element instantiates a Plasma Svg instance. This class doesn't draw anything. For drawing, SvgItem is used.&lt;br /&gt;
Properties:&lt;br /&gt;
* QSize '''size'''&lt;br /&gt;
* bool '''multipleImages'''&lt;br /&gt;
* String '''imagePath''' can be anything in the '''desktoptheme/''' folder. For more information on what is available, see [http://techbase.kde.org/Projects/Plasma/Theme#Current_Theme_Elements Plasma Theme Elements]. Make sure to strip the final extension from this string, so you should for example use &amp;lt;code&amp;gt;&amp;quot;dialogs/background&amp;quot;&amp;lt;/code&amp;gt; to get the standard background.&lt;br /&gt;
* bool '''usingRenderingCache'''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPixmap pixmap(QString elementID)&lt;br /&gt;
* void resize(qreal width, qreal height)&lt;br /&gt;
* void resize(): resets the image to its default dimension&lt;br /&gt;
* QSize elementSize(QString elementId)&lt;br /&gt;
* QRectF elementRect(QString elementId)&lt;br /&gt;
* bool hasElement(QString elementId)&lt;br /&gt;
* bool isValid(): true if valid svg file&lt;br /&gt;
&lt;br /&gt;
=== FrameSvg ===&lt;br /&gt;
Declaring a FrameSvg element instantiates a Plasma FrameSvg instance. This class doesn't draw anything. For drawing, FrameSvgItem is used.&lt;br /&gt;
This is to be used when you need informations about the framesvg, such as hasElementPrefix().&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* All properties from Svg&lt;br /&gt;
* EnabledBorders '''enabledBorders''': flag combination of:&lt;br /&gt;
** NoBorder&lt;br /&gt;
** TopBorder&lt;br /&gt;
** BottomBorder&lt;br /&gt;
** LeftBorder&lt;br /&gt;
** RightBorder&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* All methods from Svg&lt;br /&gt;
* void setImagePath(QString path)&lt;br /&gt;
* void resizeFrame(QSize size)&lt;br /&gt;
* QSize frameSize()&lt;br /&gt;
* qreal marginSize(Plasma::MarginEdge edge)&lt;br /&gt;
* void getMargins(qreal left, qreal top, qreal right, qreal bottom): parameters are output, they get set with the margins from the FrameSvg&lt;br /&gt;
* QRectF contentsRect(): the rectangle of the center element, taking the margins into account.&lt;br /&gt;
* void setElementPrefix(QString prefix)&lt;br /&gt;
* bool hasElementPrefix(const QString prefix)&lt;br /&gt;
* QString prefix()&lt;br /&gt;
* void setCacheAllRenderedFrames(bool cache)&lt;br /&gt;
* bool cacheAllRenderedFrames()&lt;br /&gt;
* void clearCache()&lt;br /&gt;
* QPixmap framePixmap()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.FrameSvg {&lt;br /&gt;
        id: myFrameSvg&lt;br /&gt;
        imagePath: &amp;quot;widgets/button&amp;quot;&lt;br /&gt;
        prefix: &amp;quot;pressed&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SvgItem ===&lt;br /&gt;
It's a graphical element that will actually paint a Svg instance.&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''elementId''': what element to render. If null, the whole svg will be rendered&lt;br /&gt;
* Svg '''svg''': instance of the Svg class mentioned above&lt;br /&gt;
* QSizeF '''naturalSize''' (read only): default size of the Svg&lt;br /&gt;
* bool '''smooth''': paint with antialias (default false)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.SvgItem {&lt;br /&gt;
        id: mySvgItem&lt;br /&gt;
        anchors {&lt;br /&gt;
            top: parent.top&lt;br /&gt;
            left: parent.left&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        width: 300&lt;br /&gt;
        height: 3&lt;br /&gt;
&lt;br /&gt;
        svg: mySvg&lt;br /&gt;
        elementId: &amp;quot;horizontal-line&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FrameSvgItem ===&lt;br /&gt;
It's a graphical element that paints a Plasma::FrameSvg, so a rectangular image composed by 9 elements contained in a Svg file, useful for things like buttons and frames.&lt;br /&gt;
&lt;br /&gt;
Flags&lt;br /&gt;
* EnabledBorders: combination of TopBorder | BottomBorder | LeftBorder | RightBorder, NoBorder if no border of the frame is enabled&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''imagePath''': path of the file relative to the Plasma Theme, for instance &amp;quot;widgets/background&amp;quot;&lt;br /&gt;
* String '''prefix''': a FrameSvg can contain multiple frames, for instance a button contains &amp;quot;normal&amp;quot;, &amp;quot;raised&amp;quot; and &amp;quot;pressed&amp;quot;&lt;br /&gt;
* Margins '''margins''' (read only): the margins of the frame, see documentation below&lt;br /&gt;
* EnabledBorders '''enabledBorders''': what borders are enabled&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
PlasmaCore.FrameSvgItem {&lt;br /&gt;
    id: myFrameSvgItem&lt;br /&gt;
    anchors.fill: parent&lt;br /&gt;
    imagePath: &amp;quot;translucent/dialogs/background&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top Level windows ==&lt;br /&gt;
&lt;br /&gt;
=== Dialog ===&lt;br /&gt;
Dialog instantiates a Plasma::Dialog, it will be a Plasma themed top level window that can contain any QML component.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''mainItem''': the Item contained in the Dialog, it can be any QML Item instance&lt;br /&gt;
* bool '''visible''': if the window (not the mainItem) is visible&lt;br /&gt;
* int '''x''': x position of the window in screen coordinates&lt;br /&gt;
* int '''y''': y position of the window in screen coordinates&lt;br /&gt;
* int '''width''' (read only): total width of the dialog, including margins&lt;br /&gt;
* int '''height''' (read only): total height of the dialog, including margins.&lt;br /&gt;
* int '''windowFlags''': Qt window flags of the Dialog&lt;br /&gt;
* Margins '''margins''' (read only): margins of the Dialog&lt;br /&gt;
&lt;br /&gt;
{{Note|The width and height will scale with size of the main item within this Dialog component.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import QtQuick 1.1&lt;br /&gt;
import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
    PlasmaCore.Dialog {&lt;br /&gt;
        visible: true&lt;br /&gt;
        mainItem: Item {&lt;br /&gt;
            width: 500&lt;br /&gt;
            height: 500&lt;br /&gt;
&lt;br /&gt;
            Text {&lt;br /&gt;
                anchors.centerIn: parent&lt;br /&gt;
                color: &amp;quot;red&amp;quot;&lt;br /&gt;
                text: qsTr(&amp;quot;text&amp;quot;)&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPoint popupPosition(Item item, Qt::Alignment alignment=Qt::AlignLeft): the suggested position for the Dialog if it has to be correctly placed as popup of the QML item passed as parameter.&lt;br /&gt;
* void setAttribute(Qt::WindowAttribute attribute, bool on): set an attribute for the dialog window&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
=== ToolTip ===&lt;br /&gt;
Declaring a ToolTip instance makes it possible to use Plasma tooltips with any QML item.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''target''': the QML item we want to show a tooltip of&lt;br /&gt;
* String '''mainText'''&lt;br /&gt;
* String '''subText'''&lt;br /&gt;
* String '''image''': freedesktop compliant icon name as image of the tooltip&lt;br /&gt;
&lt;br /&gt;
== Containments ==&lt;br /&gt;
A Plasma Containment manages the position and manipulation of Plasmoids.&lt;br /&gt;
=== AppletContainer ===&lt;br /&gt;
The AppletContainer class provides access to the geometry and status of Plasmoids in this Containment.&lt;br /&gt;
Properties:&lt;br /&gt;
* ''int'' '''minimumWidth''': The minimum width of the applet&lt;br /&gt;
* ''int'' '''minimumHeight''': The minimum height of the applet&lt;br /&gt;
* ''int'' '''maximumWidth''': The maximum width of the applet&lt;br /&gt;
* ''int'' '''maximumHeight''': The maximum height of the applet&lt;br /&gt;
* ''int'' '''preferredWidth''': The preferred height of the applet&lt;br /&gt;
* ''int'' '''preferredHeight''': The preferred height of the applet&lt;br /&gt;
* ''enum'' '''status''': The status of the applet, one in the enum&lt;br /&gt;
** '''UnknownStatus''': The status is unknown&lt;br /&gt;
** '''PassiveStatus''': The applet is passive&lt;br /&gt;
** '''ActiveStatus''': The applet is active&lt;br /&gt;
** '''NeedsAttentionStatus''': The applet asks for attention&lt;br /&gt;
** '''AcceptingInputStatus''': The applet is accepting input&lt;br /&gt;
&lt;br /&gt;
AppletContainer is only available for Plasma/Containment packages, and only if they are loaded as containment. AppletContainer is new in 4.10.&lt;br /&gt;
&lt;br /&gt;
== ToolBox ==&lt;br /&gt;
The ToolBox is only available through the plasmoid object, through plasmoid.toolBox(). The ToolBox is rendered as a separate item  on top of the scene covering the entire containment. It is loaded from the &amp;quot;org.kde.toolbox&amp;quot; Plasma Package, if the package is not found, no ToolBox will be loaded.&lt;br /&gt;
The ToolBox provides a listmodel of actions that can be rendered using Repeaters or ListViews. The ''actions'' list property contains actions from the Corona and Containments. Examples for these actions are showing the add widget or activities interface, lock and unlock. The actions in the list change dynamically whenever the widgets are locked or unlocked.&lt;br /&gt;
Actions such as lock screen and leave can be implemented using the powermanagement dataengine's services for these functions.&lt;br /&gt;
&lt;br /&gt;
ToolBox provides access to the following properties:&lt;br /&gt;
* ''Array(QAction)'' '''actions''': A list of actions provided by the Containment. These actions' most interesting properties are: &lt;br /&gt;
** ''QIcon'' '''icon''': The icon belonging to this action.&lt;br /&gt;
** ''String' '''text''': The icon belonging to this action.&lt;br /&gt;
** ''''trigger()''': Call trigger from your action delegate to trigger the action.&lt;br /&gt;
&lt;br /&gt;
ToolBox is only available for Containments and new in 4.10.&lt;br /&gt;
&lt;br /&gt;
= Plasma QtComponents (4.8) =&lt;br /&gt;
Plasma components documentation online at [http://api.kde.org/4.x-api/plasma-qml-apidocs/ api.kde.org]&lt;br /&gt;
&lt;br /&gt;
=QtExtraComponents=&lt;br /&gt;
The QtExtraComponents make some very convenient Qt classes usable from within QML.&lt;br /&gt;
&lt;br /&gt;
They can be imported in your code with:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.qtextracomponents 0.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==QPixmapItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QPixmap directly to QPixmapItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QPixmap '''pixmap''': The QPixmap object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QPixmap width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QPixmap height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==QImageItem==&lt;br /&gt;
This one wraps around a QImage class and allows you to send a QImage directly to QImageItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QImage '''image''': The QImage object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QImage width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QImage height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==FillMode==&lt;br /&gt;
Both QPixmapItem and QImageItem expose a FillMode enum. This enum defines how the image is going to be used to fill the item.&lt;br /&gt;
&lt;br /&gt;
For QPixmapItem, possible values are:&lt;br /&gt;
&lt;br /&gt;
* QPixmapItem.Stretch: the image is scaled to fit&lt;br /&gt;
* QPixmapItem.PreserveAspectFit: the image is scaled uniformly to fit without cropping&lt;br /&gt;
* QPixmapItem.PreserveAspectCrop: the image is scaled uniformly to fill, cropping if necessary&lt;br /&gt;
* QPixmapItem.Tile: the image is duplicated horizontally and vertically&lt;br /&gt;
* QPixmapItem.TileVertically: the image is stretched horizontally and tiled vertically&lt;br /&gt;
* QPixmapItem.TileHorizontally :e image is stretched vertically and tiled horizontally&lt;br /&gt;
&lt;br /&gt;
QImageItem defines the same values, you just need to replace QPixmapItem with QImageItem.&lt;br /&gt;
&lt;br /&gt;
==QIconItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QIcon directly to QIconItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QIcon/QString '''icon''': If you provide a QIcon it uses that directly. If you provide a string it uses a KIcon internally!&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''implicitWidth''': Default width of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* int '''implicitHeight''': Default height of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* State '''state''': Icon state (DefaultState, ActiveState, DisabledState)&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/API</id>
		<title>Development/Tutorials/Plasma/QML/API</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/API"/>
				<updated>2012-11-21T01:30:56Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: note about availability&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction to the Plasmoid QML Declarative API  =&lt;br /&gt;
&lt;br /&gt;
This document provides an overview/reference of the Declarative QML API for Plasmoids. It isn't a full binding to all of Qt or KDE's libraries, but a focused set of bindings designed to make writing Plasmoids fast and easy, while remaining powerful.&lt;br /&gt;
&lt;br /&gt;
The API in this documentation covers the API of the Plasma specific QML components, so only the Declarative part of the API.&lt;br /&gt;
&lt;br /&gt;
The QML ScriptEngine is based upon the Plasma JavaScript engine, making the API of the JavaScript part identical to the one of the JavaScript plasmoids engine.&lt;br /&gt;
To see the api of the global ''Plasmoid'' object, see the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#The_Global_plasmoid_Object JavaScript API] documentation.&lt;br /&gt;
(TODO: the JavaScript api page should probably be copied and stripped down the imperative bits not present there, it would make it harder to update tough)&lt;br /&gt;
The most important API for using graphical widgets is the [http://api.kde.org/4.x-api/plasma-qml-apidocs/ Plasma QtComponents API]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What Is a Declarative Plasmoid?  ==&lt;br /&gt;
&lt;br /&gt;
To denote that this Plasmoid is a Declarative widget, ensure that in the metadata.desktop file there is this line: &lt;br /&gt;
&lt;br /&gt;
X-Plasma-API=declarativeappletscript&lt;br /&gt;
&lt;br /&gt;
What follows is a description of the Plasma declarative classes instantiable from QML.&lt;br /&gt;
&lt;br /&gt;
== fetching data from the plasmoid package ==&lt;br /&gt;
&lt;br /&gt;
If you have a file in your plasmoid package under contents, let's say an image, you can access it with the plasmapackage url protocol:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Image {&lt;br /&gt;
    source: &amp;quot;plasmapackage:/images/foo.png&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code will load in the Image component the file foo.png located in contents/images of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import &amp;quot;plasmapackage:/code/foo.js&amp;quot; as Foo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, the above code will import a javascript file from the folder contents/code of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
= Properties exported from the main QML item =&lt;br /&gt;
The root qml item can export some properties to influence its behavior:&lt;br /&gt;
* '''property int minimumWidth''': the plasmoid won't ever become narrower then that, size in pixels.&lt;br /&gt;
* '''property int minimumHeight''': minum height of the plasmoid, size in pixels.&lt;br /&gt;
* '''property Component compactRepresentation''': if the plasmoid is a popupapplet, the component in compactRepresentation will be used instead of the icon and will always be collapsed, regardless if it's in a panel or not.&lt;br /&gt;
&lt;br /&gt;
= Main Plasma QML Classes =&lt;br /&gt;
&lt;br /&gt;
== Data Engines ==&lt;br /&gt;
While it's possible to fetch data from a Plasma DataEngine in the same way as the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#DataEngine JavaScript API], it is preferrable to use the following declarative classes:&lt;br /&gt;
&lt;br /&gt;
=== DataSource ===&lt;br /&gt;
DataSource is a receiver for a dataEngine and can be declared inside QML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
 PlasmaCore.DataSource {&lt;br /&gt;
     id: dataSource&lt;br /&gt;
     engine: &amp;quot;time&amp;quot;&lt;br /&gt;
     connectedSources: [&amp;quot;Local&amp;quot;]&lt;br /&gt;
     interval: 500&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* bool '''valid''' (read only): true when the DataSource is successfully connected to a data engine&lt;br /&gt;
* int '''interval''': interval of polling of the dataengine, if 0 (default value, so no need to specify if you don't need it) no polling will be executed&lt;br /&gt;
* string '''engine''': the plugin name of the dataengine to load, e.g. &amp;quot;nowplaying&amp;quot;, etc.&lt;br /&gt;
* Array(string) '''connectedSources''': all the sources of the dataengine we are connected to (and whose data will appear in the '''data''' property)&lt;br /&gt;
* Array(string) '''sources''' (read only): all the sources available from the dataengine&lt;br /&gt;
* variant map '''data''' (read only): It's the most important property, it's a map of all the data available from the dataengine: its structure will be as follows:&lt;br /&gt;
** each key of the map will be a source name, in '''connectedSources'''&lt;br /&gt;
** each value will be a variant hash, so an hash with strings as keys and any variant as value&lt;br /&gt;
** example: dataSource.data[&amp;quot;Local&amp;quot;][&amp;quot;Time&amp;quot;] indicates the '''Time''' key of the dataengine source called &amp;quot;Local&amp;quot;&lt;br /&gt;
* string '''sourceFilter''' it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. If we want to have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Signals ====&lt;br /&gt;
It has the following signals:&lt;br /&gt;
&lt;br /&gt;
Note that javascript/qml applies the 'on' prefix to signals. So the actual signal name in C++ which is e.g. '''newData'''(...) becomes '''onNewData'''(...).&lt;br /&gt;
&lt;br /&gt;
* '''onNewData'''(String sourceName, Plasma::DataEngine::Data data)&lt;br /&gt;
* '''onSourceAdded'''(String source)&lt;br /&gt;
* '''onSourceRemoved'''(String source)&lt;br /&gt;
* '''onSourceConnected'''(String source)&lt;br /&gt;
* '''onSourceDisconnected'''(String source)&lt;br /&gt;
* '''onIntervalChanged'''()&lt;br /&gt;
* '''onEngineChanged'''()&lt;br /&gt;
* '''onDataChanged'''()&lt;br /&gt;
* '''onConnectedSourcesChanged'''()&lt;br /&gt;
* '''onSourcesChanged'''()&lt;br /&gt;
&lt;br /&gt;
==== Methods ====&lt;br /&gt;
It has the following methods:&lt;br /&gt;
* StringList keysForSource(String source): lists all the keys corresponding to a certain source: for instance in the &amp;quot;time&amp;quot; dataengine, for the &amp;quot;Local&amp;quot; source, keys will be:&lt;br /&gt;
** &amp;quot;Timezone Continent&amp;quot;&lt;br /&gt;
** &amp;quot;Offset&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone&amp;quot;&lt;br /&gt;
** &amp;quot;Time&amp;quot;&lt;br /&gt;
** &amp;quot;Date&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone City&amp;quot;&lt;br /&gt;
* Service serviceForSource(String source): returns a Plasma service that corresponds a given source: see the section about services for how to use it.&lt;br /&gt;
* void connectSource(String source): adds to '''connectedSources''' the new source&lt;br /&gt;
* void disconnectSource(String source): removes that source from '''connectedSources'''&lt;br /&gt;
&lt;br /&gt;
=== Service ===&lt;br /&gt;
Due to their imperative nature, Plasma Services are not instantiated as QML classes, but rather created out of a '''DataSource''' with the method '''serviceForSource''' and used in the JavaScript portions of the QML files.&lt;br /&gt;
This following example is a simplified version from the Now Playing QML widget in the kdeexamples git repository: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  var service = dataSource.serviceForSource(activeSource)&lt;br /&gt;
  var operation = service.operationDescription(&amp;quot;seek&amp;quot;)&lt;br /&gt;
  operation.seconds = 10&lt;br /&gt;
&lt;br /&gt;
  var job = service.startOperationCall(operation)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Here dataSource is the id of a DataSource object, and activeSource is a source contained in one of its '''connectedSources'''.&lt;br /&gt;
The service provides an operation called &amp;quot;seek&amp;quot;, with a parameter called &amp;quot;seconds&amp;quot;, that can be written on it as a property of a JavaScript object.&lt;br /&gt;
&lt;br /&gt;
=== ServiceJob ===&lt;br /&gt;
It is necessary to monitor the result of a Service operation, it's possible to connect to the '''finished''' signal provided by the job return paramenter of the '''startOperationCall''' service method.&lt;br /&gt;
The '''finished''' signal has the same job as parameter, from which is possible to check the variant '''result''' property, to check the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var service = messagesDataSource.serviceForSource(src)&lt;br /&gt;
    var operation = &amp;quot;auth&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    function result(job) {&lt;br /&gt;
        statusItem.authorizationStatus = job.result;&lt;br /&gt;
        print(&amp;quot;ServiceJob result: &amp;quot; + job.result + &amp;quot; op: &amp;quot; + job.operationName);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var operation = service.operationDescription(operation);&lt;br /&gt;
    operation.user = userName;&lt;br /&gt;
    operation.password = password;&lt;br /&gt;
    var serviceJob = service.startOperationCall(operation);&lt;br /&gt;
    serviceJob.finished.connect(result);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DataModel ===&lt;br /&gt;
Some data engines return as their data something that can be interpreted as a list of items, rather than simple key/value pairs.&lt;br /&gt;
QML provides some item views such as '''ListView''', '''GridView''' and '''Repeater'''.&lt;br /&gt;
The '''DataModel''' QML object can provide, based on a DataSource a model suitable for those QML item views.&lt;br /&gt;
&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* DataSource '''dataSource''': the id of an existing (and connected) DataSource&lt;br /&gt;
* String '''sourceFilter''': it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. To, for example, have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
* String '''keyRoleFilter''': it's a regular expression. Only data with keys that match this filter expression will be inserted in the model&lt;br /&gt;
* int '''count''' (read only): how many items are in the model&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 ListView {&lt;br /&gt;
   model: PlasmaCore.DataModel {&lt;br /&gt;
        dataSource: microblogSource&lt;br /&gt;
        keyRoleFilter: &amp;quot;[\\d]*&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    delegate: Text {&lt;br /&gt;
        text: title&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the example, ''microblogSource'' is the id of a DataSource, and inserts in the model only entries that have a number as the key name (matched with [\\d]*, in this case tweets ids)&lt;br /&gt;
&lt;br /&gt;
Each item in the model will have the form of a variant hash: all the keys of the hash will be registered as model role names, in the example, &amp;quot;title&amp;quot; is a role of the model containing a string (also reachable with model[&amp;quot;title&amp;quot;]).&lt;br /&gt;
&lt;br /&gt;
A special reserved role will always be present: '''&amp;quot;DataEngineSource&amp;quot;''': it will contain the name of the data engine source that gave origin to this item. Therefore, if you want merely the string of the current source that the model is at...do model[&amp;quot;DataEngineSource&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
Note that view.currentItem holds the item currently selected. However, due to (http://bugreports.qt.nokia.com/browse/QTBUG-16347) this does not work in PathView. A workaround is to make your own.&lt;br /&gt;
&lt;br /&gt;
=== SortFilterModel ===&lt;br /&gt;
SortFilterModel is a proxy model for easy sorting and/or filtering of the items in a DataModel (or any other QAbstractItemModel subclass that has been registered in QML with setContextProperty from a C++ application)&lt;br /&gt;
Properties:&lt;br /&gt;
* model '''sourceModel'''&lt;br /&gt;
* String '''filterRegExp'''&lt;br /&gt;
* String '''filterRole'''&lt;br /&gt;
* String '''sortRole'''&lt;br /&gt;
* Qt::SortOrder '''sortOrder'''&lt;br /&gt;
* int '''count''' (read only)&lt;br /&gt;
&lt;br /&gt;
This is an example from the feed widget:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
model: PlasmaCore.SortFilterModel {&lt;br /&gt;
   id: postTitleFilter&lt;br /&gt;
   filterRole: &amp;quot;title&amp;quot;&lt;br /&gt;
   sortRole: &amp;quot;time&amp;quot;&lt;br /&gt;
   sortOrder: &amp;quot;DescendingOrder&amp;quot;&lt;br /&gt;
   filterRegExp: toolbarFrame.searchQuery&lt;br /&gt;
   sourceModel: PlasmaCore.SortFilterModel {&lt;br /&gt;
      id: feedCategoryFilter&lt;br /&gt;
      filterRole: &amp;quot;feed_url&amp;quot;&lt;br /&gt;
      sourceModel: PlasmaCore.DataModel {&lt;br /&gt;
         dataSource: feedSource&lt;br /&gt;
         keyRoleFilter: &amp;quot;items&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Popup Applet ==&lt;br /&gt;
So you want your QML applet to be a popup applet, like the device notifier (an icon in the panel shows and expands the applet)?&lt;br /&gt;
&lt;br /&gt;
Why, that's easy.&lt;br /&gt;
&lt;br /&gt;
To change your plasmoid from being a regular boring one, in your '''metadata.desktop''', simply change this following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet,Plasma/PopupApplet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in the main QML item's Component.onCompleted, do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    plasmoid.popupIcon = &amp;quot;konqueror&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to use other elements instead of an icon when collapsed in a panel, use the '''compactRepresentation''' property in the root Item.&lt;br /&gt;
&lt;br /&gt;
== Plasma Themes ==&lt;br /&gt;
&lt;br /&gt;
=== Theme ===&lt;br /&gt;
This class instantiable from QML provides access to the Plasma Theme colors and other facilities such as fonts.&lt;br /&gt;
From KDE 4.8 a Theme instance is always present given the org.kde.plasma.core plugin was imported, is not necessary to create it by hand.&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* String '''themeName''' (read only)&lt;br /&gt;
* bool '''windowTranslucentEnabled''' (read only)&lt;br /&gt;
* Url '''homepage''' (read only)&lt;br /&gt;
* bool '''useGlobalSettings''' (read only)&lt;br /&gt;
* QString '''wallpaperPath''' (read only)&lt;br /&gt;
* color '''textColor''' (read only)&lt;br /&gt;
* color '''highlightColor''' (read only)&lt;br /&gt;
* color '''backgroundColor''' (read only)&lt;br /&gt;
* color '''buttonTextColor''' (read only)&lt;br /&gt;
* color '''buttonBackgroundColor''' (read only)&lt;br /&gt;
* color '''linkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''buttonHoverColor''' (read only)&lt;br /&gt;
* color '''buttonFocusColor''' (read only)&lt;br /&gt;
* color '''viewTextColor''' (read only)&lt;br /&gt;
* color '''viewBackgroundColor''' (read only)&lt;br /&gt;
* color '''viewHoverColor''' (read only)&lt;br /&gt;
* color '''viewFocusColor''' (read only)&lt;br /&gt;
* String '''styleSheet''' (read only)&lt;br /&gt;
* Font '''defaultFont''' (read only)&lt;br /&gt;
* Font '''desktopFont''' (read only)&lt;br /&gt;
* Font '''smallestFont''' (read only)&lt;br /&gt;
&lt;br /&gt;
Each Font element has the following properties:&lt;br /&gt;
* bool bold&lt;br /&gt;
* Capitalization '''capitalization''' (MixedCase, AllUppercase, AllLowercase, SmallCaps, Capitalize) (read only)&lt;br /&gt;
* String '''family''' (read only)&lt;br /&gt;
* bool '''italic''' (read only)&lt;br /&gt;
* real '''letterSpacing''' (read only)&lt;br /&gt;
* int '''pixelSize''' (read only)&lt;br /&gt;
* real '''pointSize''' (read only)&lt;br /&gt;
* bool '''strikeout''' (read only)&lt;br /&gt;
* bool '''underline''' (read only)&lt;br /&gt;
* Weight '''weight''' (Light, Normal, DemiBold, Bold, Black) (read only)&lt;br /&gt;
* real '''wordSpacing''' (read only)&lt;br /&gt;
* size '''mSize''' the size, width and height of an uppercase &amp;quot;M&amp;quot; in this font (read only)&lt;br /&gt;
&lt;br /&gt;
=== Svg ===&lt;br /&gt;
Declaring a Svg element instantiates a Plasma Svg instance. This class doesn't draw anything. For drawing, SvgItem is used.&lt;br /&gt;
Properties:&lt;br /&gt;
* QSize '''size'''&lt;br /&gt;
* bool '''multipleImages'''&lt;br /&gt;
* String '''imagePath''' can be anything in the '''desktoptheme/''' folder. For more information on what is available, see [http://techbase.kde.org/Projects/Plasma/Theme#Current_Theme_Elements Plasma Theme Elements]. Make sure to strip the final extension from this string, so you should for example use &amp;lt;code&amp;gt;&amp;quot;dialogs/background&amp;quot;&amp;lt;/code&amp;gt; to get the standard background.&lt;br /&gt;
* bool '''usingRenderingCache'''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPixmap pixmap(QString elementID)&lt;br /&gt;
* void resize(qreal width, qreal height)&lt;br /&gt;
* void resize(): resets the image to its default dimension&lt;br /&gt;
* QSize elementSize(QString elementId)&lt;br /&gt;
* QRectF elementRect(QString elementId)&lt;br /&gt;
* bool hasElement(QString elementId)&lt;br /&gt;
* bool isValid(): true if valid svg file&lt;br /&gt;
&lt;br /&gt;
=== FrameSvg ===&lt;br /&gt;
Declaring a FrameSvg element instantiates a Plasma FrameSvg instance. This class doesn't draw anything. For drawing, FrameSvgItem is used.&lt;br /&gt;
This is to be used when you need informations about the framesvg, such as hasElementPrefix().&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* All properties from Svg&lt;br /&gt;
* EnabledBorders '''enabledBorders''': flag combination of:&lt;br /&gt;
** NoBorder&lt;br /&gt;
** TopBorder&lt;br /&gt;
** BottomBorder&lt;br /&gt;
** LeftBorder&lt;br /&gt;
** RightBorder&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* All methods from Svg&lt;br /&gt;
* void setImagePath(QString path)&lt;br /&gt;
* void resizeFrame(QSize size)&lt;br /&gt;
* QSize frameSize()&lt;br /&gt;
* qreal marginSize(Plasma::MarginEdge edge)&lt;br /&gt;
* void getMargins(qreal left, qreal top, qreal right, qreal bottom): parameters are output, they get set with the margins from the FrameSvg&lt;br /&gt;
* QRectF contentsRect(): the rectangle of the center element, taking the margins into account.&lt;br /&gt;
* void setElementPrefix(QString prefix)&lt;br /&gt;
* bool hasElementPrefix(const QString prefix)&lt;br /&gt;
* QString prefix()&lt;br /&gt;
* void setCacheAllRenderedFrames(bool cache)&lt;br /&gt;
* bool cacheAllRenderedFrames()&lt;br /&gt;
* void clearCache()&lt;br /&gt;
* QPixmap framePixmap()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.FrameSvg {&lt;br /&gt;
        id: myFrameSvg&lt;br /&gt;
        imagePath: &amp;quot;widgets/button&amp;quot;&lt;br /&gt;
        prefix: &amp;quot;pressed&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SvgItem ===&lt;br /&gt;
It's a graphical element that will actually paint a Svg instance.&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''elementId''': what element to render. If null, the whole svg will be rendered&lt;br /&gt;
* Svg '''svg''': instance of the Svg class mentioned above&lt;br /&gt;
* QSizeF '''naturalSize''' (read only): default size of the Svg&lt;br /&gt;
* bool '''smooth''': paint with antialias (default false)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.SvgItem {&lt;br /&gt;
        id: mySvgItem&lt;br /&gt;
        anchors {&lt;br /&gt;
            top: parent.top&lt;br /&gt;
            left: parent.left&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        width: 300&lt;br /&gt;
        height: 3&lt;br /&gt;
&lt;br /&gt;
        svg: mySvg&lt;br /&gt;
        elementId: &amp;quot;horizontal-line&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FrameSvgItem ===&lt;br /&gt;
It's a graphical element that paints a Plasma::FrameSvg, so a rectangular image composed by 9 elements contained in a Svg file, useful for things like buttons and frames.&lt;br /&gt;
&lt;br /&gt;
Flags&lt;br /&gt;
* EnabledBorders: combination of TopBorder | BottomBorder | LeftBorder | RightBorder, NoBorder if no border of the frame is enabled&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''imagePath''': path of the file relative to the Plasma Theme, for instance &amp;quot;widgets/background&amp;quot;&lt;br /&gt;
* String '''prefix''': a FrameSvg can contain multiple frames, for instance a button contains &amp;quot;normal&amp;quot;, &amp;quot;raised&amp;quot; and &amp;quot;pressed&amp;quot;&lt;br /&gt;
* Margins '''margins''' (read only): the margins of the frame, see documentation below&lt;br /&gt;
* EnabledBorders '''enabledBorders''': what borders are enabled&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
PlasmaCore.FrameSvgItem {&lt;br /&gt;
    id: myFrameSvgItem&lt;br /&gt;
    anchors.fill: parent&lt;br /&gt;
    imagePath: &amp;quot;translucent/dialogs/background&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top Level windows ==&lt;br /&gt;
&lt;br /&gt;
=== Dialog ===&lt;br /&gt;
Dialog instantiates a Plasma::Dialog, it will be a Plasma themed top level window that can contain any QML component.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''mainItem''': the Item contained in the Dialog, it can be any QML Item instance&lt;br /&gt;
* bool '''visible''': if the window (not the mainItem) is visible&lt;br /&gt;
* int '''x''': x position of the window in screen coordinates&lt;br /&gt;
* int '''y''': y position of the window in screen coordinates&lt;br /&gt;
* int '''width''' (read only): total width of the dialog, including margins&lt;br /&gt;
* int '''height''' (read only): total height of the dialog, including margins.&lt;br /&gt;
* int '''windowFlags''': Qt window flags of the Dialog&lt;br /&gt;
* Margins '''margins''' (read only): margins of the Dialog&lt;br /&gt;
&lt;br /&gt;
{{Note|The width and height will scale with size of the main item within this Dialog component.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import QtQuick 1.1&lt;br /&gt;
import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
    PlasmaCore.Dialog {&lt;br /&gt;
        visible: true&lt;br /&gt;
        mainItem: Item {&lt;br /&gt;
            width: 500&lt;br /&gt;
            height: 500&lt;br /&gt;
&lt;br /&gt;
            Text {&lt;br /&gt;
                anchors.centerIn: parent&lt;br /&gt;
                color: &amp;quot;red&amp;quot;&lt;br /&gt;
                text: qsTr(&amp;quot;text&amp;quot;)&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPoint popupPosition(Item item, Qt::Alignment alignment=Qt::AlignLeft): the suggested position for the Dialog if it has to be correctly placed as popup of the QML item passed as parameter.&lt;br /&gt;
* void setAttribute(Qt::WindowAttribute attribute, bool on): set an attribute for the dialog window&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
=== ToolTip ===&lt;br /&gt;
Declaring a ToolTip instance makes it possible to use Plasma tooltips with any QML item.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''target''': the QML item we want to show a tooltip of&lt;br /&gt;
* String '''mainText'''&lt;br /&gt;
* String '''subText'''&lt;br /&gt;
* String '''image''': freedesktop compliant icon name as image of the tooltip&lt;br /&gt;
&lt;br /&gt;
== Containments ==&lt;br /&gt;
A Plasma Containment manages the position and manipulation of Plasmoids.&lt;br /&gt;
=== AppletContainer ===&lt;br /&gt;
The AppletContainer class provides access to the geometry and status of Plasmoids in this Containment.&lt;br /&gt;
Properties:&lt;br /&gt;
* ''int'' '''minimumWidth''': The minimum width of the applet&lt;br /&gt;
* ''int'' '''minimumHeight''': The minimum height of the applet&lt;br /&gt;
* ''int'' '''maximumWidth''': The maximum width of the applet&lt;br /&gt;
* ''int'' '''maximumHeight''': The maximum height of the applet&lt;br /&gt;
* ''int'' '''preferredWidth''': The preferred height of the applet&lt;br /&gt;
* ''int'' '''preferredHeight''': The preferred height of the applet&lt;br /&gt;
* ''enum'' '''status''': The status of the applet, one in the enum&lt;br /&gt;
** '''UnknownStatus''': The status is unknown&lt;br /&gt;
** '''PassiveStatus''': The applet is passive&lt;br /&gt;
** '''ActiveStatus''': The applet is active&lt;br /&gt;
** '''NeedsAttentionStatus''': The applet asks for attention&lt;br /&gt;
** '''AcceptingInputStatus''': The applet is accepting input&lt;br /&gt;
&lt;br /&gt;
AppletContainer is only available for Plasma/Containment packages, and only if they are loaded as containment. AppletContainer is new in 4.10.&lt;br /&gt;
&lt;br /&gt;
== ToolBox ==&lt;br /&gt;
The ToolBox is only available through the plasmoid object, through plasmoid.toolBox(). The ToolBox is rendered as a separate item  on top of the scene covering the entire containment. It is loaded from the &amp;quot;org.kde.toolbox&amp;quot; Plasma Package, if the package is not found, no ToolBox will be loaded.&lt;br /&gt;
The ToolBox provides a listmodel of actions that can be rendered using Repeaters or ListViews. The ''actions'' list property contains actions from the Corona and Containments. Examples for these actions are showing the add widget or activities interface, lock and unlock. The actions in the list change dynamically whenever the widgets are locked or unlocked.&lt;br /&gt;
Actions such as lock screen and leave can be implemented using the powermanagement dataengine's services for these functions.&lt;br /&gt;
&lt;br /&gt;
ToolBox provides access to the following properties:&lt;br /&gt;
* ''Array(QAction)'' '''actions''': A list of actions provided by the Containment. These actions' most interesting properties are: &lt;br /&gt;
** ''QIcon'' '''icon''': The icon belonging to this action.&lt;br /&gt;
** ''String' '''text''': The icon belonging to this action.&lt;br /&gt;
** ''''trigger()''': Call trigger from your action delegate to trigger the action.&lt;br /&gt;
&lt;br /&gt;
= Plasma QtComponents (4.8) =&lt;br /&gt;
Plasma components documentation online at [http://api.kde.org/4.x-api/plasma-qml-apidocs/ api.kde.org]&lt;br /&gt;
&lt;br /&gt;
=QtExtraComponents=&lt;br /&gt;
The QtExtraComponents make some very convenient Qt classes usable from within QML.&lt;br /&gt;
&lt;br /&gt;
They can be imported in your code with:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.qtextracomponents 0.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==QPixmapItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QPixmap directly to QPixmapItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QPixmap '''pixmap''': The QPixmap object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QPixmap width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QPixmap height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==QImageItem==&lt;br /&gt;
This one wraps around a QImage class and allows you to send a QImage directly to QImageItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QImage '''image''': The QImage object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QImage width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QImage height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==FillMode==&lt;br /&gt;
Both QPixmapItem and QImageItem expose a FillMode enum. This enum defines how the image is going to be used to fill the item.&lt;br /&gt;
&lt;br /&gt;
For QPixmapItem, possible values are:&lt;br /&gt;
&lt;br /&gt;
* QPixmapItem.Stretch: the image is scaled to fit&lt;br /&gt;
* QPixmapItem.PreserveAspectFit: the image is scaled uniformly to fit without cropping&lt;br /&gt;
* QPixmapItem.PreserveAspectCrop: the image is scaled uniformly to fill, cropping if necessary&lt;br /&gt;
* QPixmapItem.Tile: the image is duplicated horizontally and vertically&lt;br /&gt;
* QPixmapItem.TileVertically: the image is stretched horizontally and tiled vertically&lt;br /&gt;
* QPixmapItem.TileHorizontally :e image is stretched vertically and tiled horizontally&lt;br /&gt;
&lt;br /&gt;
QImageItem defines the same values, you just need to replace QPixmapItem with QImageItem.&lt;br /&gt;
&lt;br /&gt;
==QIconItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QIcon directly to QIconItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QIcon/QString '''icon''': If you provide a QIcon it uses that directly. If you provide a string it uses a KIcon internally!&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''implicitWidth''': Default width of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* int '''implicitHeight''': Default height of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* State '''state''': Icon state (DefaultState, ActiveState, DisabledState)&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/API</id>
		<title>Development/Tutorials/Plasma/QML/API</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/API"/>
				<updated>2012-11-21T01:29:17Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: toolbox and actions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction to the Plasmoid QML Declarative API  =&lt;br /&gt;
&lt;br /&gt;
This document provides an overview/reference of the Declarative QML API for Plasmoids. It isn't a full binding to all of Qt or KDE's libraries, but a focused set of bindings designed to make writing Plasmoids fast and easy, while remaining powerful.&lt;br /&gt;
&lt;br /&gt;
The API in this documentation covers the API of the Plasma specific QML components, so only the Declarative part of the API.&lt;br /&gt;
&lt;br /&gt;
The QML ScriptEngine is based upon the Plasma JavaScript engine, making the API of the JavaScript part identical to the one of the JavaScript plasmoids engine.&lt;br /&gt;
To see the api of the global ''Plasmoid'' object, see the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#The_Global_plasmoid_Object JavaScript API] documentation.&lt;br /&gt;
(TODO: the JavaScript api page should probably be copied and stripped down the imperative bits not present there, it would make it harder to update tough)&lt;br /&gt;
The most important API for using graphical widgets is the [http://api.kde.org/4.x-api/plasma-qml-apidocs/ Plasma QtComponents API]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What Is a Declarative Plasmoid?  ==&lt;br /&gt;
&lt;br /&gt;
To denote that this Plasmoid is a Declarative widget, ensure that in the metadata.desktop file there is this line: &lt;br /&gt;
&lt;br /&gt;
X-Plasma-API=declarativeappletscript&lt;br /&gt;
&lt;br /&gt;
What follows is a description of the Plasma declarative classes instantiable from QML.&lt;br /&gt;
&lt;br /&gt;
== fetching data from the plasmoid package ==&lt;br /&gt;
&lt;br /&gt;
If you have a file in your plasmoid package under contents, let's say an image, you can access it with the plasmapackage url protocol:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Image {&lt;br /&gt;
    source: &amp;quot;plasmapackage:/images/foo.png&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code will load in the Image component the file foo.png located in contents/images of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import &amp;quot;plasmapackage:/code/foo.js&amp;quot; as Foo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, the above code will import a javascript file from the folder contents/code of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
= Properties exported from the main QML item =&lt;br /&gt;
The root qml item can export some properties to influence its behavior:&lt;br /&gt;
* '''property int minimumWidth''': the plasmoid won't ever become narrower then that, size in pixels.&lt;br /&gt;
* '''property int minimumHeight''': minum height of the plasmoid, size in pixels.&lt;br /&gt;
* '''property Component compactRepresentation''': if the plasmoid is a popupapplet, the component in compactRepresentation will be used instead of the icon and will always be collapsed, regardless if it's in a panel or not.&lt;br /&gt;
&lt;br /&gt;
= Main Plasma QML Classes =&lt;br /&gt;
&lt;br /&gt;
== Data Engines ==&lt;br /&gt;
While it's possible to fetch data from a Plasma DataEngine in the same way as the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#DataEngine JavaScript API], it is preferrable to use the following declarative classes:&lt;br /&gt;
&lt;br /&gt;
=== DataSource ===&lt;br /&gt;
DataSource is a receiver for a dataEngine and can be declared inside QML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
 PlasmaCore.DataSource {&lt;br /&gt;
     id: dataSource&lt;br /&gt;
     engine: &amp;quot;time&amp;quot;&lt;br /&gt;
     connectedSources: [&amp;quot;Local&amp;quot;]&lt;br /&gt;
     interval: 500&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* bool '''valid''' (read only): true when the DataSource is successfully connected to a data engine&lt;br /&gt;
* int '''interval''': interval of polling of the dataengine, if 0 (default value, so no need to specify if you don't need it) no polling will be executed&lt;br /&gt;
* string '''engine''': the plugin name of the dataengine to load, e.g. &amp;quot;nowplaying&amp;quot;, etc.&lt;br /&gt;
* Array(string) '''connectedSources''': all the sources of the dataengine we are connected to (and whose data will appear in the '''data''' property)&lt;br /&gt;
* Array(string) '''sources''' (read only): all the sources available from the dataengine&lt;br /&gt;
* variant map '''data''' (read only): It's the most important property, it's a map of all the data available from the dataengine: its structure will be as follows:&lt;br /&gt;
** each key of the map will be a source name, in '''connectedSources'''&lt;br /&gt;
** each value will be a variant hash, so an hash with strings as keys and any variant as value&lt;br /&gt;
** example: dataSource.data[&amp;quot;Local&amp;quot;][&amp;quot;Time&amp;quot;] indicates the '''Time''' key of the dataengine source called &amp;quot;Local&amp;quot;&lt;br /&gt;
* string '''sourceFilter''' it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. If we want to have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Signals ====&lt;br /&gt;
It has the following signals:&lt;br /&gt;
&lt;br /&gt;
Note that javascript/qml applies the 'on' prefix to signals. So the actual signal name in C++ which is e.g. '''newData'''(...) becomes '''onNewData'''(...).&lt;br /&gt;
&lt;br /&gt;
* '''onNewData'''(String sourceName, Plasma::DataEngine::Data data)&lt;br /&gt;
* '''onSourceAdded'''(String source)&lt;br /&gt;
* '''onSourceRemoved'''(String source)&lt;br /&gt;
* '''onSourceConnected'''(String source)&lt;br /&gt;
* '''onSourceDisconnected'''(String source)&lt;br /&gt;
* '''onIntervalChanged'''()&lt;br /&gt;
* '''onEngineChanged'''()&lt;br /&gt;
* '''onDataChanged'''()&lt;br /&gt;
* '''onConnectedSourcesChanged'''()&lt;br /&gt;
* '''onSourcesChanged'''()&lt;br /&gt;
&lt;br /&gt;
==== Methods ====&lt;br /&gt;
It has the following methods:&lt;br /&gt;
* StringList keysForSource(String source): lists all the keys corresponding to a certain source: for instance in the &amp;quot;time&amp;quot; dataengine, for the &amp;quot;Local&amp;quot; source, keys will be:&lt;br /&gt;
** &amp;quot;Timezone Continent&amp;quot;&lt;br /&gt;
** &amp;quot;Offset&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone&amp;quot;&lt;br /&gt;
** &amp;quot;Time&amp;quot;&lt;br /&gt;
** &amp;quot;Date&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone City&amp;quot;&lt;br /&gt;
* Service serviceForSource(String source): returns a Plasma service that corresponds a given source: see the section about services for how to use it.&lt;br /&gt;
* void connectSource(String source): adds to '''connectedSources''' the new source&lt;br /&gt;
* void disconnectSource(String source): removes that source from '''connectedSources'''&lt;br /&gt;
&lt;br /&gt;
=== Service ===&lt;br /&gt;
Due to their imperative nature, Plasma Services are not instantiated as QML classes, but rather created out of a '''DataSource''' with the method '''serviceForSource''' and used in the JavaScript portions of the QML files.&lt;br /&gt;
This following example is a simplified version from the Now Playing QML widget in the kdeexamples git repository: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  var service = dataSource.serviceForSource(activeSource)&lt;br /&gt;
  var operation = service.operationDescription(&amp;quot;seek&amp;quot;)&lt;br /&gt;
  operation.seconds = 10&lt;br /&gt;
&lt;br /&gt;
  var job = service.startOperationCall(operation)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Here dataSource is the id of a DataSource object, and activeSource is a source contained in one of its '''connectedSources'''.&lt;br /&gt;
The service provides an operation called &amp;quot;seek&amp;quot;, with a parameter called &amp;quot;seconds&amp;quot;, that can be written on it as a property of a JavaScript object.&lt;br /&gt;
&lt;br /&gt;
=== ServiceJob ===&lt;br /&gt;
It is necessary to monitor the result of a Service operation, it's possible to connect to the '''finished''' signal provided by the job return paramenter of the '''startOperationCall''' service method.&lt;br /&gt;
The '''finished''' signal has the same job as parameter, from which is possible to check the variant '''result''' property, to check the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var service = messagesDataSource.serviceForSource(src)&lt;br /&gt;
    var operation = &amp;quot;auth&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    function result(job) {&lt;br /&gt;
        statusItem.authorizationStatus = job.result;&lt;br /&gt;
        print(&amp;quot;ServiceJob result: &amp;quot; + job.result + &amp;quot; op: &amp;quot; + job.operationName);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var operation = service.operationDescription(operation);&lt;br /&gt;
    operation.user = userName;&lt;br /&gt;
    operation.password = password;&lt;br /&gt;
    var serviceJob = service.startOperationCall(operation);&lt;br /&gt;
    serviceJob.finished.connect(result);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DataModel ===&lt;br /&gt;
Some data engines return as their data something that can be interpreted as a list of items, rather than simple key/value pairs.&lt;br /&gt;
QML provides some item views such as '''ListView''', '''GridView''' and '''Repeater'''.&lt;br /&gt;
The '''DataModel''' QML object can provide, based on a DataSource a model suitable for those QML item views.&lt;br /&gt;
&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* DataSource '''dataSource''': the id of an existing (and connected) DataSource&lt;br /&gt;
* String '''sourceFilter''': it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. To, for example, have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
* String '''keyRoleFilter''': it's a regular expression. Only data with keys that match this filter expression will be inserted in the model&lt;br /&gt;
* int '''count''' (read only): how many items are in the model&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 ListView {&lt;br /&gt;
   model: PlasmaCore.DataModel {&lt;br /&gt;
        dataSource: microblogSource&lt;br /&gt;
        keyRoleFilter: &amp;quot;[\\d]*&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    delegate: Text {&lt;br /&gt;
        text: title&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the example, ''microblogSource'' is the id of a DataSource, and inserts in the model only entries that have a number as the key name (matched with [\\d]*, in this case tweets ids)&lt;br /&gt;
&lt;br /&gt;
Each item in the model will have the form of a variant hash: all the keys of the hash will be registered as model role names, in the example, &amp;quot;title&amp;quot; is a role of the model containing a string (also reachable with model[&amp;quot;title&amp;quot;]).&lt;br /&gt;
&lt;br /&gt;
A special reserved role will always be present: '''&amp;quot;DataEngineSource&amp;quot;''': it will contain the name of the data engine source that gave origin to this item. Therefore, if you want merely the string of the current source that the model is at...do model[&amp;quot;DataEngineSource&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
Note that view.currentItem holds the item currently selected. However, due to (http://bugreports.qt.nokia.com/browse/QTBUG-16347) this does not work in PathView. A workaround is to make your own.&lt;br /&gt;
&lt;br /&gt;
=== SortFilterModel ===&lt;br /&gt;
SortFilterModel is a proxy model for easy sorting and/or filtering of the items in a DataModel (or any other QAbstractItemModel subclass that has been registered in QML with setContextProperty from a C++ application)&lt;br /&gt;
Properties:&lt;br /&gt;
* model '''sourceModel'''&lt;br /&gt;
* String '''filterRegExp'''&lt;br /&gt;
* String '''filterRole'''&lt;br /&gt;
* String '''sortRole'''&lt;br /&gt;
* Qt::SortOrder '''sortOrder'''&lt;br /&gt;
* int '''count''' (read only)&lt;br /&gt;
&lt;br /&gt;
This is an example from the feed widget:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
model: PlasmaCore.SortFilterModel {&lt;br /&gt;
   id: postTitleFilter&lt;br /&gt;
   filterRole: &amp;quot;title&amp;quot;&lt;br /&gt;
   sortRole: &amp;quot;time&amp;quot;&lt;br /&gt;
   sortOrder: &amp;quot;DescendingOrder&amp;quot;&lt;br /&gt;
   filterRegExp: toolbarFrame.searchQuery&lt;br /&gt;
   sourceModel: PlasmaCore.SortFilterModel {&lt;br /&gt;
      id: feedCategoryFilter&lt;br /&gt;
      filterRole: &amp;quot;feed_url&amp;quot;&lt;br /&gt;
      sourceModel: PlasmaCore.DataModel {&lt;br /&gt;
         dataSource: feedSource&lt;br /&gt;
         keyRoleFilter: &amp;quot;items&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Popup Applet ==&lt;br /&gt;
So you want your QML applet to be a popup applet, like the device notifier (an icon in the panel shows and expands the applet)?&lt;br /&gt;
&lt;br /&gt;
Why, that's easy.&lt;br /&gt;
&lt;br /&gt;
To change your plasmoid from being a regular boring one, in your '''metadata.desktop''', simply change this following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet,Plasma/PopupApplet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in the main QML item's Component.onCompleted, do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    plasmoid.popupIcon = &amp;quot;konqueror&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to use other elements instead of an icon when collapsed in a panel, use the '''compactRepresentation''' property in the root Item.&lt;br /&gt;
&lt;br /&gt;
== Plasma Themes ==&lt;br /&gt;
&lt;br /&gt;
=== Theme ===&lt;br /&gt;
This class instantiable from QML provides access to the Plasma Theme colors and other facilities such as fonts.&lt;br /&gt;
From KDE 4.8 a Theme instance is always present given the org.kde.plasma.core plugin was imported, is not necessary to create it by hand.&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* String '''themeName''' (read only)&lt;br /&gt;
* bool '''windowTranslucentEnabled''' (read only)&lt;br /&gt;
* Url '''homepage''' (read only)&lt;br /&gt;
* bool '''useGlobalSettings''' (read only)&lt;br /&gt;
* QString '''wallpaperPath''' (read only)&lt;br /&gt;
* color '''textColor''' (read only)&lt;br /&gt;
* color '''highlightColor''' (read only)&lt;br /&gt;
* color '''backgroundColor''' (read only)&lt;br /&gt;
* color '''buttonTextColor''' (read only)&lt;br /&gt;
* color '''buttonBackgroundColor''' (read only)&lt;br /&gt;
* color '''linkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''buttonHoverColor''' (read only)&lt;br /&gt;
* color '''buttonFocusColor''' (read only)&lt;br /&gt;
* color '''viewTextColor''' (read only)&lt;br /&gt;
* color '''viewBackgroundColor''' (read only)&lt;br /&gt;
* color '''viewHoverColor''' (read only)&lt;br /&gt;
* color '''viewFocusColor''' (read only)&lt;br /&gt;
* String '''styleSheet''' (read only)&lt;br /&gt;
* Font '''defaultFont''' (read only)&lt;br /&gt;
* Font '''desktopFont''' (read only)&lt;br /&gt;
* Font '''smallestFont''' (read only)&lt;br /&gt;
&lt;br /&gt;
Each Font element has the following properties:&lt;br /&gt;
* bool bold&lt;br /&gt;
* Capitalization '''capitalization''' (MixedCase, AllUppercase, AllLowercase, SmallCaps, Capitalize) (read only)&lt;br /&gt;
* String '''family''' (read only)&lt;br /&gt;
* bool '''italic''' (read only)&lt;br /&gt;
* real '''letterSpacing''' (read only)&lt;br /&gt;
* int '''pixelSize''' (read only)&lt;br /&gt;
* real '''pointSize''' (read only)&lt;br /&gt;
* bool '''strikeout''' (read only)&lt;br /&gt;
* bool '''underline''' (read only)&lt;br /&gt;
* Weight '''weight''' (Light, Normal, DemiBold, Bold, Black) (read only)&lt;br /&gt;
* real '''wordSpacing''' (read only)&lt;br /&gt;
* size '''mSize''' the size, width and height of an uppercase &amp;quot;M&amp;quot; in this font (read only)&lt;br /&gt;
&lt;br /&gt;
=== Svg ===&lt;br /&gt;
Declaring a Svg element instantiates a Plasma Svg instance. This class doesn't draw anything. For drawing, SvgItem is used.&lt;br /&gt;
Properties:&lt;br /&gt;
* QSize '''size'''&lt;br /&gt;
* bool '''multipleImages'''&lt;br /&gt;
* String '''imagePath''' can be anything in the '''desktoptheme/''' folder. For more information on what is available, see [http://techbase.kde.org/Projects/Plasma/Theme#Current_Theme_Elements Plasma Theme Elements]. Make sure to strip the final extension from this string, so you should for example use &amp;lt;code&amp;gt;&amp;quot;dialogs/background&amp;quot;&amp;lt;/code&amp;gt; to get the standard background.&lt;br /&gt;
* bool '''usingRenderingCache'''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPixmap pixmap(QString elementID)&lt;br /&gt;
* void resize(qreal width, qreal height)&lt;br /&gt;
* void resize(): resets the image to its default dimension&lt;br /&gt;
* QSize elementSize(QString elementId)&lt;br /&gt;
* QRectF elementRect(QString elementId)&lt;br /&gt;
* bool hasElement(QString elementId)&lt;br /&gt;
* bool isValid(): true if valid svg file&lt;br /&gt;
&lt;br /&gt;
=== FrameSvg ===&lt;br /&gt;
Declaring a FrameSvg element instantiates a Plasma FrameSvg instance. This class doesn't draw anything. For drawing, FrameSvgItem is used.&lt;br /&gt;
This is to be used when you need informations about the framesvg, such as hasElementPrefix().&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* All properties from Svg&lt;br /&gt;
* EnabledBorders '''enabledBorders''': flag combination of:&lt;br /&gt;
** NoBorder&lt;br /&gt;
** TopBorder&lt;br /&gt;
** BottomBorder&lt;br /&gt;
** LeftBorder&lt;br /&gt;
** RightBorder&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* All methods from Svg&lt;br /&gt;
* void setImagePath(QString path)&lt;br /&gt;
* void resizeFrame(QSize size)&lt;br /&gt;
* QSize frameSize()&lt;br /&gt;
* qreal marginSize(Plasma::MarginEdge edge)&lt;br /&gt;
* void getMargins(qreal left, qreal top, qreal right, qreal bottom): parameters are output, they get set with the margins from the FrameSvg&lt;br /&gt;
* QRectF contentsRect(): the rectangle of the center element, taking the margins into account.&lt;br /&gt;
* void setElementPrefix(QString prefix)&lt;br /&gt;
* bool hasElementPrefix(const QString prefix)&lt;br /&gt;
* QString prefix()&lt;br /&gt;
* void setCacheAllRenderedFrames(bool cache)&lt;br /&gt;
* bool cacheAllRenderedFrames()&lt;br /&gt;
* void clearCache()&lt;br /&gt;
* QPixmap framePixmap()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.FrameSvg {&lt;br /&gt;
        id: myFrameSvg&lt;br /&gt;
        imagePath: &amp;quot;widgets/button&amp;quot;&lt;br /&gt;
        prefix: &amp;quot;pressed&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SvgItem ===&lt;br /&gt;
It's a graphical element that will actually paint a Svg instance.&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''elementId''': what element to render. If null, the whole svg will be rendered&lt;br /&gt;
* Svg '''svg''': instance of the Svg class mentioned above&lt;br /&gt;
* QSizeF '''naturalSize''' (read only): default size of the Svg&lt;br /&gt;
* bool '''smooth''': paint with antialias (default false)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.SvgItem {&lt;br /&gt;
        id: mySvgItem&lt;br /&gt;
        anchors {&lt;br /&gt;
            top: parent.top&lt;br /&gt;
            left: parent.left&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        width: 300&lt;br /&gt;
        height: 3&lt;br /&gt;
&lt;br /&gt;
        svg: mySvg&lt;br /&gt;
        elementId: &amp;quot;horizontal-line&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FrameSvgItem ===&lt;br /&gt;
It's a graphical element that paints a Plasma::FrameSvg, so a rectangular image composed by 9 elements contained in a Svg file, useful for things like buttons and frames.&lt;br /&gt;
&lt;br /&gt;
Flags&lt;br /&gt;
* EnabledBorders: combination of TopBorder | BottomBorder | LeftBorder | RightBorder, NoBorder if no border of the frame is enabled&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''imagePath''': path of the file relative to the Plasma Theme, for instance &amp;quot;widgets/background&amp;quot;&lt;br /&gt;
* String '''prefix''': a FrameSvg can contain multiple frames, for instance a button contains &amp;quot;normal&amp;quot;, &amp;quot;raised&amp;quot; and &amp;quot;pressed&amp;quot;&lt;br /&gt;
* Margins '''margins''' (read only): the margins of the frame, see documentation below&lt;br /&gt;
* EnabledBorders '''enabledBorders''': what borders are enabled&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
PlasmaCore.FrameSvgItem {&lt;br /&gt;
    id: myFrameSvgItem&lt;br /&gt;
    anchors.fill: parent&lt;br /&gt;
    imagePath: &amp;quot;translucent/dialogs/background&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top Level windows ==&lt;br /&gt;
&lt;br /&gt;
=== Dialog ===&lt;br /&gt;
Dialog instantiates a Plasma::Dialog, it will be a Plasma themed top level window that can contain any QML component.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''mainItem''': the Item contained in the Dialog, it can be any QML Item instance&lt;br /&gt;
* bool '''visible''': if the window (not the mainItem) is visible&lt;br /&gt;
* int '''x''': x position of the window in screen coordinates&lt;br /&gt;
* int '''y''': y position of the window in screen coordinates&lt;br /&gt;
* int '''width''' (read only): total width of the dialog, including margins&lt;br /&gt;
* int '''height''' (read only): total height of the dialog, including margins.&lt;br /&gt;
* int '''windowFlags''': Qt window flags of the Dialog&lt;br /&gt;
* Margins '''margins''' (read only): margins of the Dialog&lt;br /&gt;
&lt;br /&gt;
{{Note|The width and height will scale with size of the main item within this Dialog component.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import QtQuick 1.1&lt;br /&gt;
import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
    PlasmaCore.Dialog {&lt;br /&gt;
        visible: true&lt;br /&gt;
        mainItem: Item {&lt;br /&gt;
            width: 500&lt;br /&gt;
            height: 500&lt;br /&gt;
&lt;br /&gt;
            Text {&lt;br /&gt;
                anchors.centerIn: parent&lt;br /&gt;
                color: &amp;quot;red&amp;quot;&lt;br /&gt;
                text: qsTr(&amp;quot;text&amp;quot;)&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPoint popupPosition(Item item, Qt::Alignment alignment=Qt::AlignLeft): the suggested position for the Dialog if it has to be correctly placed as popup of the QML item passed as parameter.&lt;br /&gt;
* void setAttribute(Qt::WindowAttribute attribute, bool on): set an attribute for the dialog window&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
=== ToolTip ===&lt;br /&gt;
Declaring a ToolTip instance makes it possible to use Plasma tooltips with any QML item.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''target''': the QML item we want to show a tooltip of&lt;br /&gt;
* String '''mainText'''&lt;br /&gt;
* String '''subText'''&lt;br /&gt;
* String '''image''': freedesktop compliant icon name as image of the tooltip&lt;br /&gt;
&lt;br /&gt;
== Containments ==&lt;br /&gt;
A Plasma Containment manages the position and manipulation of Plasmoids.&lt;br /&gt;
=== AppletContainer ===&lt;br /&gt;
The AppletContainer class provides access to the geometry and status of Plasmoids in this Containment.&lt;br /&gt;
Properties:&lt;br /&gt;
* ''int'' '''minimumWidth''': The minimum width of the applet&lt;br /&gt;
* ''int'' '''minimumHeight''': The minimum height of the applet&lt;br /&gt;
* ''int'' '''maximumWidth''': The maximum width of the applet&lt;br /&gt;
* ''int'' '''maximumHeight''': The maximum height of the applet&lt;br /&gt;
* ''int'' '''preferredWidth''': The preferred height of the applet&lt;br /&gt;
* ''int'' '''preferredHeight''': The preferred height of the applet&lt;br /&gt;
* ''enum'' '''status''': The status of the applet, one in the enum&lt;br /&gt;
** '''UnknownStatus''': The status is unknown&lt;br /&gt;
** '''PassiveStatus''': The applet is passive&lt;br /&gt;
** '''ActiveStatus''': The applet is active&lt;br /&gt;
** '''NeedsAttentionStatus''': The applet asks for attention&lt;br /&gt;
** '''AcceptingInputStatus''': The applet is accepting input&lt;br /&gt;
&lt;br /&gt;
== ToolBox ==&lt;br /&gt;
The ToolBox is only available through the plasmoid object, through plasmoid.toolBox(). The ToolBox is rendered as a separate item  on top of the scene covering the entire containment. It is loaded from the &amp;quot;org.kde.toolbox&amp;quot; Plasma Package, if the package is not found, no ToolBox will be loaded.&lt;br /&gt;
The ToolBox provides a listmodel of actions that can be rendered using Repeaters or ListViews. The ''actions'' list property contains actions from the Corona and Containments. Examples for these actions are showing the add widget or activities interface, lock and unlock. The actions in the list change dynamically whenever the widgets are locked or unlocked.&lt;br /&gt;
Actions such as lock screen and leave can be implemented using the powermanagement dataengine's services for these functions.&lt;br /&gt;
&lt;br /&gt;
ToolBox provides access to the following properties:&lt;br /&gt;
* ''Array(QAction)'' '''actions''': A list of actions provided by the Containment. These actions' most interesting properties are: &lt;br /&gt;
** ''QIcon'' '''icon''': The icon belonging to this action.&lt;br /&gt;
** ''String' '''text''': The icon belonging to this action.&lt;br /&gt;
** ''''trigger()''': Call trigger from your action delegate to trigger the action.&lt;br /&gt;
&lt;br /&gt;
= Plasma QtComponents (4.8) =&lt;br /&gt;
Plasma components documentation online at [http://api.kde.org/4.x-api/plasma-qml-apidocs/ api.kde.org]&lt;br /&gt;
&lt;br /&gt;
=QtExtraComponents=&lt;br /&gt;
The QtExtraComponents make some very convenient Qt classes usable from within QML.&lt;br /&gt;
&lt;br /&gt;
They can be imported in your code with:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.qtextracomponents 0.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==QPixmapItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QPixmap directly to QPixmapItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QPixmap '''pixmap''': The QPixmap object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QPixmap width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QPixmap height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==QImageItem==&lt;br /&gt;
This one wraps around a QImage class and allows you to send a QImage directly to QImageItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QImage '''image''': The QImage object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QImage width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QImage height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==FillMode==&lt;br /&gt;
Both QPixmapItem and QImageItem expose a FillMode enum. This enum defines how the image is going to be used to fill the item.&lt;br /&gt;
&lt;br /&gt;
For QPixmapItem, possible values are:&lt;br /&gt;
&lt;br /&gt;
* QPixmapItem.Stretch: the image is scaled to fit&lt;br /&gt;
* QPixmapItem.PreserveAspectFit: the image is scaled uniformly to fit without cropping&lt;br /&gt;
* QPixmapItem.PreserveAspectCrop: the image is scaled uniformly to fill, cropping if necessary&lt;br /&gt;
* QPixmapItem.Tile: the image is duplicated horizontally and vertically&lt;br /&gt;
* QPixmapItem.TileVertically: the image is stretched horizontally and tiled vertically&lt;br /&gt;
* QPixmapItem.TileHorizontally :e image is stretched vertically and tiled horizontally&lt;br /&gt;
&lt;br /&gt;
QImageItem defines the same values, you just need to replace QPixmapItem with QImageItem.&lt;br /&gt;
&lt;br /&gt;
==QIconItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QIcon directly to QIconItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QIcon/QString '''icon''': If you provide a QIcon it uses that directly. If you provide a string it uses a KIcon internally!&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''implicitWidth''': Default width of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* int '''implicitHeight''': Default height of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* State '''state''': Icon state (DefaultState, ActiveState, DisabledState)&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/API</id>
		<title>Development/Tutorials/Plasma/QML/API</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/API"/>
				<updated>2012-11-21T01:15:32Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: more AppletContainer docs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction to the Plasmoid QML Declarative API  =&lt;br /&gt;
&lt;br /&gt;
This document provides an overview/reference of the Declarative QML API for Plasmoids. It isn't a full binding to all of Qt or KDE's libraries, but a focused set of bindings designed to make writing Plasmoids fast and easy, while remaining powerful.&lt;br /&gt;
&lt;br /&gt;
The API in this documentation covers the API of the Plasma specific QML components, so only the Declarative part of the API.&lt;br /&gt;
&lt;br /&gt;
The QML ScriptEngine is based upon the Plasma JavaScript engine, making the API of the JavaScript part identical to the one of the JavaScript plasmoids engine.&lt;br /&gt;
To see the api of the global ''Plasmoid'' object, see the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#The_Global_plasmoid_Object JavaScript API] documentation.&lt;br /&gt;
(TODO: the JavaScript api page should probably be copied and stripped down the imperative bits not present there, it would make it harder to update tough)&lt;br /&gt;
The most important API for using graphical widgets is the [http://api.kde.org/4.x-api/plasma-qml-apidocs/ Plasma QtComponents API]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What Is a Declarative Plasmoid?  ==&lt;br /&gt;
&lt;br /&gt;
To denote that this Plasmoid is a Declarative widget, ensure that in the metadata.desktop file there is this line: &lt;br /&gt;
&lt;br /&gt;
X-Plasma-API=declarativeappletscript&lt;br /&gt;
&lt;br /&gt;
What follows is a description of the Plasma declarative classes instantiable from QML.&lt;br /&gt;
&lt;br /&gt;
== fetching data from the plasmoid package ==&lt;br /&gt;
&lt;br /&gt;
If you have a file in your plasmoid package under contents, let's say an image, you can access it with the plasmapackage url protocol:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Image {&lt;br /&gt;
    source: &amp;quot;plasmapackage:/images/foo.png&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code will load in the Image component the file foo.png located in contents/images of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import &amp;quot;plasmapackage:/code/foo.js&amp;quot; as Foo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, the above code will import a javascript file from the folder contents/code of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
= Properties exported from the main QML item =&lt;br /&gt;
The root qml item can export some properties to influence its behavior:&lt;br /&gt;
* '''property int minimumWidth''': the plasmoid won't ever become narrower then that, size in pixels.&lt;br /&gt;
* '''property int minimumHeight''': minum height of the plasmoid, size in pixels.&lt;br /&gt;
* '''property Component compactRepresentation''': if the plasmoid is a popupapplet, the component in compactRepresentation will be used instead of the icon and will always be collapsed, regardless if it's in a panel or not.&lt;br /&gt;
&lt;br /&gt;
= Main Plasma QML Classes =&lt;br /&gt;
&lt;br /&gt;
== Data Engines ==&lt;br /&gt;
While it's possible to fetch data from a Plasma DataEngine in the same way as the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#DataEngine JavaScript API], it is preferrable to use the following declarative classes:&lt;br /&gt;
&lt;br /&gt;
=== DataSource ===&lt;br /&gt;
DataSource is a receiver for a dataEngine and can be declared inside QML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
 PlasmaCore.DataSource {&lt;br /&gt;
     id: dataSource&lt;br /&gt;
     engine: &amp;quot;time&amp;quot;&lt;br /&gt;
     connectedSources: [&amp;quot;Local&amp;quot;]&lt;br /&gt;
     interval: 500&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* bool '''valid''' (read only): true when the DataSource is successfully connected to a data engine&lt;br /&gt;
* int '''interval''': interval of polling of the dataengine, if 0 (default value, so no need to specify if you don't need it) no polling will be executed&lt;br /&gt;
* string '''engine''': the plugin name of the dataengine to load, e.g. &amp;quot;nowplaying&amp;quot;, etc.&lt;br /&gt;
* Array(string) '''connectedSources''': all the sources of the dataengine we are connected to (and whose data will appear in the '''data''' property)&lt;br /&gt;
* Array(string) '''sources''' (read only): all the sources available from the dataengine&lt;br /&gt;
* variant map '''data''' (read only): It's the most important property, it's a map of all the data available from the dataengine: its structure will be as follows:&lt;br /&gt;
** each key of the map will be a source name, in '''connectedSources'''&lt;br /&gt;
** each value will be a variant hash, so an hash with strings as keys and any variant as value&lt;br /&gt;
** example: dataSource.data[&amp;quot;Local&amp;quot;][&amp;quot;Time&amp;quot;] indicates the '''Time''' key of the dataengine source called &amp;quot;Local&amp;quot;&lt;br /&gt;
* string '''sourceFilter''' it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. If we want to have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Signals ====&lt;br /&gt;
It has the following signals:&lt;br /&gt;
&lt;br /&gt;
Note that javascript/qml applies the 'on' prefix to signals. So the actual signal name in C++ which is e.g. '''newData'''(...) becomes '''onNewData'''(...).&lt;br /&gt;
&lt;br /&gt;
* '''onNewData'''(String sourceName, Plasma::DataEngine::Data data)&lt;br /&gt;
* '''onSourceAdded'''(String source)&lt;br /&gt;
* '''onSourceRemoved'''(String source)&lt;br /&gt;
* '''onSourceConnected'''(String source)&lt;br /&gt;
* '''onSourceDisconnected'''(String source)&lt;br /&gt;
* '''onIntervalChanged'''()&lt;br /&gt;
* '''onEngineChanged'''()&lt;br /&gt;
* '''onDataChanged'''()&lt;br /&gt;
* '''onConnectedSourcesChanged'''()&lt;br /&gt;
* '''onSourcesChanged'''()&lt;br /&gt;
&lt;br /&gt;
==== Methods ====&lt;br /&gt;
It has the following methods:&lt;br /&gt;
* StringList keysForSource(String source): lists all the keys corresponding to a certain source: for instance in the &amp;quot;time&amp;quot; dataengine, for the &amp;quot;Local&amp;quot; source, keys will be:&lt;br /&gt;
** &amp;quot;Timezone Continent&amp;quot;&lt;br /&gt;
** &amp;quot;Offset&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone&amp;quot;&lt;br /&gt;
** &amp;quot;Time&amp;quot;&lt;br /&gt;
** &amp;quot;Date&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone City&amp;quot;&lt;br /&gt;
* Service serviceForSource(String source): returns a Plasma service that corresponds a given source: see the section about services for how to use it.&lt;br /&gt;
* void connectSource(String source): adds to '''connectedSources''' the new source&lt;br /&gt;
* void disconnectSource(String source): removes that source from '''connectedSources'''&lt;br /&gt;
&lt;br /&gt;
=== Service ===&lt;br /&gt;
Due to their imperative nature, Plasma Services are not instantiated as QML classes, but rather created out of a '''DataSource''' with the method '''serviceForSource''' and used in the JavaScript portions of the QML files.&lt;br /&gt;
This following example is a simplified version from the Now Playing QML widget in the kdeexamples git repository: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  var service = dataSource.serviceForSource(activeSource)&lt;br /&gt;
  var operation = service.operationDescription(&amp;quot;seek&amp;quot;)&lt;br /&gt;
  operation.seconds = 10&lt;br /&gt;
&lt;br /&gt;
  var job = service.startOperationCall(operation)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Here dataSource is the id of a DataSource object, and activeSource is a source contained in one of its '''connectedSources'''.&lt;br /&gt;
The service provides an operation called &amp;quot;seek&amp;quot;, with a parameter called &amp;quot;seconds&amp;quot;, that can be written on it as a property of a JavaScript object.&lt;br /&gt;
&lt;br /&gt;
=== ServiceJob ===&lt;br /&gt;
It is necessary to monitor the result of a Service operation, it's possible to connect to the '''finished''' signal provided by the job return paramenter of the '''startOperationCall''' service method.&lt;br /&gt;
The '''finished''' signal has the same job as parameter, from which is possible to check the variant '''result''' property, to check the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var service = messagesDataSource.serviceForSource(src)&lt;br /&gt;
    var operation = &amp;quot;auth&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    function result(job) {&lt;br /&gt;
        statusItem.authorizationStatus = job.result;&lt;br /&gt;
        print(&amp;quot;ServiceJob result: &amp;quot; + job.result + &amp;quot; op: &amp;quot; + job.operationName);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var operation = service.operationDescription(operation);&lt;br /&gt;
    operation.user = userName;&lt;br /&gt;
    operation.password = password;&lt;br /&gt;
    var serviceJob = service.startOperationCall(operation);&lt;br /&gt;
    serviceJob.finished.connect(result);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DataModel ===&lt;br /&gt;
Some data engines return as their data something that can be interpreted as a list of items, rather than simple key/value pairs.&lt;br /&gt;
QML provides some item views such as '''ListView''', '''GridView''' and '''Repeater'''.&lt;br /&gt;
The '''DataModel''' QML object can provide, based on a DataSource a model suitable for those QML item views.&lt;br /&gt;
&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* DataSource '''dataSource''': the id of an existing (and connected) DataSource&lt;br /&gt;
* String '''sourceFilter''': it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. To, for example, have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
* String '''keyRoleFilter''': it's a regular expression. Only data with keys that match this filter expression will be inserted in the model&lt;br /&gt;
* int '''count''' (read only): how many items are in the model&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 ListView {&lt;br /&gt;
   model: PlasmaCore.DataModel {&lt;br /&gt;
        dataSource: microblogSource&lt;br /&gt;
        keyRoleFilter: &amp;quot;[\\d]*&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    delegate: Text {&lt;br /&gt;
        text: title&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the example, ''microblogSource'' is the id of a DataSource, and inserts in the model only entries that have a number as the key name (matched with [\\d]*, in this case tweets ids)&lt;br /&gt;
&lt;br /&gt;
Each item in the model will have the form of a variant hash: all the keys of the hash will be registered as model role names, in the example, &amp;quot;title&amp;quot; is a role of the model containing a string (also reachable with model[&amp;quot;title&amp;quot;]).&lt;br /&gt;
&lt;br /&gt;
A special reserved role will always be present: '''&amp;quot;DataEngineSource&amp;quot;''': it will contain the name of the data engine source that gave origin to this item. Therefore, if you want merely the string of the current source that the model is at...do model[&amp;quot;DataEngineSource&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
Note that view.currentItem holds the item currently selected. However, due to (http://bugreports.qt.nokia.com/browse/QTBUG-16347) this does not work in PathView. A workaround is to make your own.&lt;br /&gt;
&lt;br /&gt;
=== SortFilterModel ===&lt;br /&gt;
SortFilterModel is a proxy model for easy sorting and/or filtering of the items in a DataModel (or any other QAbstractItemModel subclass that has been registered in QML with setContextProperty from a C++ application)&lt;br /&gt;
Properties:&lt;br /&gt;
* model '''sourceModel'''&lt;br /&gt;
* String '''filterRegExp'''&lt;br /&gt;
* String '''filterRole'''&lt;br /&gt;
* String '''sortRole'''&lt;br /&gt;
* Qt::SortOrder '''sortOrder'''&lt;br /&gt;
* int '''count''' (read only)&lt;br /&gt;
&lt;br /&gt;
This is an example from the feed widget:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
model: PlasmaCore.SortFilterModel {&lt;br /&gt;
   id: postTitleFilter&lt;br /&gt;
   filterRole: &amp;quot;title&amp;quot;&lt;br /&gt;
   sortRole: &amp;quot;time&amp;quot;&lt;br /&gt;
   sortOrder: &amp;quot;DescendingOrder&amp;quot;&lt;br /&gt;
   filterRegExp: toolbarFrame.searchQuery&lt;br /&gt;
   sourceModel: PlasmaCore.SortFilterModel {&lt;br /&gt;
      id: feedCategoryFilter&lt;br /&gt;
      filterRole: &amp;quot;feed_url&amp;quot;&lt;br /&gt;
      sourceModel: PlasmaCore.DataModel {&lt;br /&gt;
         dataSource: feedSource&lt;br /&gt;
         keyRoleFilter: &amp;quot;items&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Popup Applet ==&lt;br /&gt;
So you want your QML applet to be a popup applet, like the device notifier (an icon in the panel shows and expands the applet)?&lt;br /&gt;
&lt;br /&gt;
Why, that's easy.&lt;br /&gt;
&lt;br /&gt;
To change your plasmoid from being a regular boring one, in your '''metadata.desktop''', simply change this following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet,Plasma/PopupApplet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in the main QML item's Component.onCompleted, do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    plasmoid.popupIcon = &amp;quot;konqueror&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to use other elements instead of an icon when collapsed in a panel, use the '''compactRepresentation''' property in the root Item.&lt;br /&gt;
&lt;br /&gt;
== Plasma Themes ==&lt;br /&gt;
&lt;br /&gt;
=== Theme ===&lt;br /&gt;
This class instantiable from QML provides access to the Plasma Theme colors and other facilities such as fonts.&lt;br /&gt;
From KDE 4.8 a Theme instance is always present given the org.kde.plasma.core plugin was imported, is not necessary to create it by hand.&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* String '''themeName''' (read only)&lt;br /&gt;
* bool '''windowTranslucentEnabled''' (read only)&lt;br /&gt;
* Url '''homepage''' (read only)&lt;br /&gt;
* bool '''useGlobalSettings''' (read only)&lt;br /&gt;
* QString '''wallpaperPath''' (read only)&lt;br /&gt;
* color '''textColor''' (read only)&lt;br /&gt;
* color '''highlightColor''' (read only)&lt;br /&gt;
* color '''backgroundColor''' (read only)&lt;br /&gt;
* color '''buttonTextColor''' (read only)&lt;br /&gt;
* color '''buttonBackgroundColor''' (read only)&lt;br /&gt;
* color '''linkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''buttonHoverColor''' (read only)&lt;br /&gt;
* color '''buttonFocusColor''' (read only)&lt;br /&gt;
* color '''viewTextColor''' (read only)&lt;br /&gt;
* color '''viewBackgroundColor''' (read only)&lt;br /&gt;
* color '''viewHoverColor''' (read only)&lt;br /&gt;
* color '''viewFocusColor''' (read only)&lt;br /&gt;
* String '''styleSheet''' (read only)&lt;br /&gt;
* Font '''defaultFont''' (read only)&lt;br /&gt;
* Font '''desktopFont''' (read only)&lt;br /&gt;
* Font '''smallestFont''' (read only)&lt;br /&gt;
&lt;br /&gt;
Each Font element has the following properties:&lt;br /&gt;
* bool bold&lt;br /&gt;
* Capitalization '''capitalization''' (MixedCase, AllUppercase, AllLowercase, SmallCaps, Capitalize) (read only)&lt;br /&gt;
* String '''family''' (read only)&lt;br /&gt;
* bool '''italic''' (read only)&lt;br /&gt;
* real '''letterSpacing''' (read only)&lt;br /&gt;
* int '''pixelSize''' (read only)&lt;br /&gt;
* real '''pointSize''' (read only)&lt;br /&gt;
* bool '''strikeout''' (read only)&lt;br /&gt;
* bool '''underline''' (read only)&lt;br /&gt;
* Weight '''weight''' (Light, Normal, DemiBold, Bold, Black) (read only)&lt;br /&gt;
* real '''wordSpacing''' (read only)&lt;br /&gt;
* size '''mSize''' the size, width and height of an uppercase &amp;quot;M&amp;quot; in this font (read only)&lt;br /&gt;
&lt;br /&gt;
=== Svg ===&lt;br /&gt;
Declaring a Svg element instantiates a Plasma Svg instance. This class doesn't draw anything. For drawing, SvgItem is used.&lt;br /&gt;
Properties:&lt;br /&gt;
* QSize '''size'''&lt;br /&gt;
* bool '''multipleImages'''&lt;br /&gt;
* String '''imagePath''' can be anything in the '''desktoptheme/''' folder. For more information on what is available, see [http://techbase.kde.org/Projects/Plasma/Theme#Current_Theme_Elements Plasma Theme Elements]. Make sure to strip the final extension from this string, so you should for example use &amp;lt;code&amp;gt;&amp;quot;dialogs/background&amp;quot;&amp;lt;/code&amp;gt; to get the standard background.&lt;br /&gt;
* bool '''usingRenderingCache'''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPixmap pixmap(QString elementID)&lt;br /&gt;
* void resize(qreal width, qreal height)&lt;br /&gt;
* void resize(): resets the image to its default dimension&lt;br /&gt;
* QSize elementSize(QString elementId)&lt;br /&gt;
* QRectF elementRect(QString elementId)&lt;br /&gt;
* bool hasElement(QString elementId)&lt;br /&gt;
* bool isValid(): true if valid svg file&lt;br /&gt;
&lt;br /&gt;
=== FrameSvg ===&lt;br /&gt;
Declaring a FrameSvg element instantiates a Plasma FrameSvg instance. This class doesn't draw anything. For drawing, FrameSvgItem is used.&lt;br /&gt;
This is to be used when you need informations about the framesvg, such as hasElementPrefix().&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* All properties from Svg&lt;br /&gt;
* EnabledBorders '''enabledBorders''': flag combination of:&lt;br /&gt;
** NoBorder&lt;br /&gt;
** TopBorder&lt;br /&gt;
** BottomBorder&lt;br /&gt;
** LeftBorder&lt;br /&gt;
** RightBorder&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* All methods from Svg&lt;br /&gt;
* void setImagePath(QString path)&lt;br /&gt;
* void resizeFrame(QSize size)&lt;br /&gt;
* QSize frameSize()&lt;br /&gt;
* qreal marginSize(Plasma::MarginEdge edge)&lt;br /&gt;
* void getMargins(qreal left, qreal top, qreal right, qreal bottom): parameters are output, they get set with the margins from the FrameSvg&lt;br /&gt;
* QRectF contentsRect(): the rectangle of the center element, taking the margins into account.&lt;br /&gt;
* void setElementPrefix(QString prefix)&lt;br /&gt;
* bool hasElementPrefix(const QString prefix)&lt;br /&gt;
* QString prefix()&lt;br /&gt;
* void setCacheAllRenderedFrames(bool cache)&lt;br /&gt;
* bool cacheAllRenderedFrames()&lt;br /&gt;
* void clearCache()&lt;br /&gt;
* QPixmap framePixmap()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.FrameSvg {&lt;br /&gt;
        id: myFrameSvg&lt;br /&gt;
        imagePath: &amp;quot;widgets/button&amp;quot;&lt;br /&gt;
        prefix: &amp;quot;pressed&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SvgItem ===&lt;br /&gt;
It's a graphical element that will actually paint a Svg instance.&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''elementId''': what element to render. If null, the whole svg will be rendered&lt;br /&gt;
* Svg '''svg''': instance of the Svg class mentioned above&lt;br /&gt;
* QSizeF '''naturalSize''' (read only): default size of the Svg&lt;br /&gt;
* bool '''smooth''': paint with antialias (default false)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.SvgItem {&lt;br /&gt;
        id: mySvgItem&lt;br /&gt;
        anchors {&lt;br /&gt;
            top: parent.top&lt;br /&gt;
            left: parent.left&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        width: 300&lt;br /&gt;
        height: 3&lt;br /&gt;
&lt;br /&gt;
        svg: mySvg&lt;br /&gt;
        elementId: &amp;quot;horizontal-line&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FrameSvgItem ===&lt;br /&gt;
It's a graphical element that paints a Plasma::FrameSvg, so a rectangular image composed by 9 elements contained in a Svg file, useful for things like buttons and frames.&lt;br /&gt;
&lt;br /&gt;
Flags&lt;br /&gt;
* EnabledBorders: combination of TopBorder | BottomBorder | LeftBorder | RightBorder, NoBorder if no border of the frame is enabled&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''imagePath''': path of the file relative to the Plasma Theme, for instance &amp;quot;widgets/background&amp;quot;&lt;br /&gt;
* String '''prefix''': a FrameSvg can contain multiple frames, for instance a button contains &amp;quot;normal&amp;quot;, &amp;quot;raised&amp;quot; and &amp;quot;pressed&amp;quot;&lt;br /&gt;
* Margins '''margins''' (read only): the margins of the frame, see documentation below&lt;br /&gt;
* EnabledBorders '''enabledBorders''': what borders are enabled&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
PlasmaCore.FrameSvgItem {&lt;br /&gt;
    id: myFrameSvgItem&lt;br /&gt;
    anchors.fill: parent&lt;br /&gt;
    imagePath: &amp;quot;translucent/dialogs/background&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top Level windows ==&lt;br /&gt;
&lt;br /&gt;
=== Dialog ===&lt;br /&gt;
Dialog instantiates a Plasma::Dialog, it will be a Plasma themed top level window that can contain any QML component.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''mainItem''': the Item contained in the Dialog, it can be any QML Item instance&lt;br /&gt;
* bool '''visible''': if the window (not the mainItem) is visible&lt;br /&gt;
* int '''x''': x position of the window in screen coordinates&lt;br /&gt;
* int '''y''': y position of the window in screen coordinates&lt;br /&gt;
* int '''width''' (read only): total width of the dialog, including margins&lt;br /&gt;
* int '''height''' (read only): total height of the dialog, including margins.&lt;br /&gt;
* int '''windowFlags''': Qt window flags of the Dialog&lt;br /&gt;
* Margins '''margins''' (read only): margins of the Dialog&lt;br /&gt;
&lt;br /&gt;
{{Note|The width and height will scale with size of the main item within this Dialog component.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import QtQuick 1.1&lt;br /&gt;
import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
    PlasmaCore.Dialog {&lt;br /&gt;
        visible: true&lt;br /&gt;
        mainItem: Item {&lt;br /&gt;
            width: 500&lt;br /&gt;
            height: 500&lt;br /&gt;
&lt;br /&gt;
            Text {&lt;br /&gt;
                anchors.centerIn: parent&lt;br /&gt;
                color: &amp;quot;red&amp;quot;&lt;br /&gt;
                text: qsTr(&amp;quot;text&amp;quot;)&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPoint popupPosition(Item item, Qt::Alignment alignment=Qt::AlignLeft): the suggested position for the Dialog if it has to be correctly placed as popup of the QML item passed as parameter.&lt;br /&gt;
* void setAttribute(Qt::WindowAttribute attribute, bool on): set an attribute for the dialog window&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
=== ToolTip ===&lt;br /&gt;
Declaring a ToolTip instance makes it possible to use Plasma tooltips with any QML item.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''target''': the QML item we want to show a tooltip of&lt;br /&gt;
* String '''mainText'''&lt;br /&gt;
* String '''subText'''&lt;br /&gt;
* String '''image''': freedesktop compliant icon name as image of the tooltip&lt;br /&gt;
&lt;br /&gt;
== Containments ==&lt;br /&gt;
A Plasma Containment manages the position and manipulation of Plasmoids.&lt;br /&gt;
=== AppletContainer ===&lt;br /&gt;
The AppletContainer class provides access to the geometry and status of Plasmoids in this Containment.&lt;br /&gt;
Properties:&lt;br /&gt;
* ''int'' '''minimumWidth''': The minimum width of the applet&lt;br /&gt;
* ''int'' '''minimumHeight''': The minimum height of the applet&lt;br /&gt;
* ''int'' '''maximumWidth''': The maximum width of the applet&lt;br /&gt;
* ''int'' '''maximumHeight''': The maximum height of the applet&lt;br /&gt;
* ''int'' '''preferredWidth''': The preferred height of the applet&lt;br /&gt;
* ''int'' '''preferredHeight''': The preferred height of the applet&lt;br /&gt;
* ''enum'' '''status''': The status of the applet, one in the enum&lt;br /&gt;
** '''UnknownStatus''': The status is unknown&lt;br /&gt;
** '''PassiveStatus''': The applet is passive&lt;br /&gt;
** '''ActiveStatus''': The applet is active&lt;br /&gt;
** '''NeedsAttentionStatus''': The applet asks for attention&lt;br /&gt;
** '''AcceptingInputStatus''': The applet is accepting input&lt;br /&gt;
&lt;br /&gt;
== ToolBox ==&lt;br /&gt;
&lt;br /&gt;
= Plasma QtComponents (4.8) =&lt;br /&gt;
Plasma components documentation online at [http://api.kde.org/4.x-api/plasma-qml-apidocs/ api.kde.org]&lt;br /&gt;
&lt;br /&gt;
=QtExtraComponents=&lt;br /&gt;
The QtExtraComponents make some very convenient Qt classes usable from within QML.&lt;br /&gt;
&lt;br /&gt;
They can be imported in your code with:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.qtextracomponents 0.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==QPixmapItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QPixmap directly to QPixmapItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QPixmap '''pixmap''': The QPixmap object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QPixmap width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QPixmap height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==QImageItem==&lt;br /&gt;
This one wraps around a QImage class and allows you to send a QImage directly to QImageItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QImage '''image''': The QImage object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QImage width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QImage height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==FillMode==&lt;br /&gt;
Both QPixmapItem and QImageItem expose a FillMode enum. This enum defines how the image is going to be used to fill the item.&lt;br /&gt;
&lt;br /&gt;
For QPixmapItem, possible values are:&lt;br /&gt;
&lt;br /&gt;
* QPixmapItem.Stretch: the image is scaled to fit&lt;br /&gt;
* QPixmapItem.PreserveAspectFit: the image is scaled uniformly to fit without cropping&lt;br /&gt;
* QPixmapItem.PreserveAspectCrop: the image is scaled uniformly to fill, cropping if necessary&lt;br /&gt;
* QPixmapItem.Tile: the image is duplicated horizontally and vertically&lt;br /&gt;
* QPixmapItem.TileVertically: the image is stretched horizontally and tiled vertically&lt;br /&gt;
* QPixmapItem.TileHorizontally :e image is stretched vertically and tiled horizontally&lt;br /&gt;
&lt;br /&gt;
QImageItem defines the same values, you just need to replace QPixmapItem with QImageItem.&lt;br /&gt;
&lt;br /&gt;
==QIconItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QIcon directly to QIconItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QIcon/QString '''icon''': If you provide a QIcon it uses that directly. If you provide a string it uses a KIcon internally!&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''implicitWidth''': Default width of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* int '''implicitHeight''': Default height of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* State '''state''': Icon state (DefaultState, ActiveState, DisabledState)&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/API</id>
		<title>Development/Tutorials/Plasma/QML/API</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/API"/>
				<updated>2012-11-21T01:12:25Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: AppletContainer docs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction to the Plasmoid QML Declarative API  =&lt;br /&gt;
&lt;br /&gt;
This document provides an overview/reference of the Declarative QML API for Plasmoids. It isn't a full binding to all of Qt or KDE's libraries, but a focused set of bindings designed to make writing Plasmoids fast and easy, while remaining powerful.&lt;br /&gt;
&lt;br /&gt;
The API in this documentation covers the API of the Plasma specific QML components, so only the Declarative part of the API.&lt;br /&gt;
&lt;br /&gt;
The QML ScriptEngine is based upon the Plasma JavaScript engine, making the API of the JavaScript part identical to the one of the JavaScript plasmoids engine.&lt;br /&gt;
To see the api of the global ''Plasmoid'' object, see the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#The_Global_plasmoid_Object JavaScript API] documentation.&lt;br /&gt;
(TODO: the JavaScript api page should probably be copied and stripped down the imperative bits not present there, it would make it harder to update tough)&lt;br /&gt;
The most important API for using graphical widgets is the [http://api.kde.org/4.x-api/plasma-qml-apidocs/ Plasma QtComponents API]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What Is a Declarative Plasmoid?  ==&lt;br /&gt;
&lt;br /&gt;
To denote that this Plasmoid is a Declarative widget, ensure that in the metadata.desktop file there is this line: &lt;br /&gt;
&lt;br /&gt;
X-Plasma-API=declarativeappletscript&lt;br /&gt;
&lt;br /&gt;
What follows is a description of the Plasma declarative classes instantiable from QML.&lt;br /&gt;
&lt;br /&gt;
== fetching data from the plasmoid package ==&lt;br /&gt;
&lt;br /&gt;
If you have a file in your plasmoid package under contents, let's say an image, you can access it with the plasmapackage url protocol:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Image {&lt;br /&gt;
    source: &amp;quot;plasmapackage:/images/foo.png&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code will load in the Image component the file foo.png located in contents/images of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import &amp;quot;plasmapackage:/code/foo.js&amp;quot; as Foo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, the above code will import a javascript file from the folder contents/code of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
= Properties exported from the main QML item =&lt;br /&gt;
The root qml item can export some properties to influence its behavior:&lt;br /&gt;
* '''property int minimumWidth''': the plasmoid won't ever become narrower then that, size in pixels.&lt;br /&gt;
* '''property int minimumHeight''': minum height of the plasmoid, size in pixels.&lt;br /&gt;
* '''property Component compactRepresentation''': if the plasmoid is a popupapplet, the component in compactRepresentation will be used instead of the icon and will always be collapsed, regardless if it's in a panel or not.&lt;br /&gt;
&lt;br /&gt;
= Main Plasma QML Classes =&lt;br /&gt;
&lt;br /&gt;
== Data Engines ==&lt;br /&gt;
While it's possible to fetch data from a Plasma DataEngine in the same way as the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#DataEngine JavaScript API], it is preferrable to use the following declarative classes:&lt;br /&gt;
&lt;br /&gt;
=== DataSource ===&lt;br /&gt;
DataSource is a receiver for a dataEngine and can be declared inside QML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
 PlasmaCore.DataSource {&lt;br /&gt;
     id: dataSource&lt;br /&gt;
     engine: &amp;quot;time&amp;quot;&lt;br /&gt;
     connectedSources: [&amp;quot;Local&amp;quot;]&lt;br /&gt;
     interval: 500&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* bool '''valid''' (read only): true when the DataSource is successfully connected to a data engine&lt;br /&gt;
* int '''interval''': interval of polling of the dataengine, if 0 (default value, so no need to specify if you don't need it) no polling will be executed&lt;br /&gt;
* string '''engine''': the plugin name of the dataengine to load, e.g. &amp;quot;nowplaying&amp;quot;, etc.&lt;br /&gt;
* Array(string) '''connectedSources''': all the sources of the dataengine we are connected to (and whose data will appear in the '''data''' property)&lt;br /&gt;
* Array(string) '''sources''' (read only): all the sources available from the dataengine&lt;br /&gt;
* variant map '''data''' (read only): It's the most important property, it's a map of all the data available from the dataengine: its structure will be as follows:&lt;br /&gt;
** each key of the map will be a source name, in '''connectedSources'''&lt;br /&gt;
** each value will be a variant hash, so an hash with strings as keys and any variant as value&lt;br /&gt;
** example: dataSource.data[&amp;quot;Local&amp;quot;][&amp;quot;Time&amp;quot;] indicates the '''Time''' key of the dataengine source called &amp;quot;Local&amp;quot;&lt;br /&gt;
* string '''sourceFilter''' it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. If we want to have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Signals ====&lt;br /&gt;
It has the following signals:&lt;br /&gt;
&lt;br /&gt;
Note that javascript/qml applies the 'on' prefix to signals. So the actual signal name in C++ which is e.g. '''newData'''(...) becomes '''onNewData'''(...).&lt;br /&gt;
&lt;br /&gt;
* '''onNewData'''(String sourceName, Plasma::DataEngine::Data data)&lt;br /&gt;
* '''onSourceAdded'''(String source)&lt;br /&gt;
* '''onSourceRemoved'''(String source)&lt;br /&gt;
* '''onSourceConnected'''(String source)&lt;br /&gt;
* '''onSourceDisconnected'''(String source)&lt;br /&gt;
* '''onIntervalChanged'''()&lt;br /&gt;
* '''onEngineChanged'''()&lt;br /&gt;
* '''onDataChanged'''()&lt;br /&gt;
* '''onConnectedSourcesChanged'''()&lt;br /&gt;
* '''onSourcesChanged'''()&lt;br /&gt;
&lt;br /&gt;
==== Methods ====&lt;br /&gt;
It has the following methods:&lt;br /&gt;
* StringList keysForSource(String source): lists all the keys corresponding to a certain source: for instance in the &amp;quot;time&amp;quot; dataengine, for the &amp;quot;Local&amp;quot; source, keys will be:&lt;br /&gt;
** &amp;quot;Timezone Continent&amp;quot;&lt;br /&gt;
** &amp;quot;Offset&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone&amp;quot;&lt;br /&gt;
** &amp;quot;Time&amp;quot;&lt;br /&gt;
** &amp;quot;Date&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone City&amp;quot;&lt;br /&gt;
* Service serviceForSource(String source): returns a Plasma service that corresponds a given source: see the section about services for how to use it.&lt;br /&gt;
* void connectSource(String source): adds to '''connectedSources''' the new source&lt;br /&gt;
* void disconnectSource(String source): removes that source from '''connectedSources'''&lt;br /&gt;
&lt;br /&gt;
=== Service ===&lt;br /&gt;
Due to their imperative nature, Plasma Services are not instantiated as QML classes, but rather created out of a '''DataSource''' with the method '''serviceForSource''' and used in the JavaScript portions of the QML files.&lt;br /&gt;
This following example is a simplified version from the Now Playing QML widget in the kdeexamples git repository: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  var service = dataSource.serviceForSource(activeSource)&lt;br /&gt;
  var operation = service.operationDescription(&amp;quot;seek&amp;quot;)&lt;br /&gt;
  operation.seconds = 10&lt;br /&gt;
&lt;br /&gt;
  var job = service.startOperationCall(operation)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Here dataSource is the id of a DataSource object, and activeSource is a source contained in one of its '''connectedSources'''.&lt;br /&gt;
The service provides an operation called &amp;quot;seek&amp;quot;, with a parameter called &amp;quot;seconds&amp;quot;, that can be written on it as a property of a JavaScript object.&lt;br /&gt;
&lt;br /&gt;
=== ServiceJob ===&lt;br /&gt;
It is necessary to monitor the result of a Service operation, it's possible to connect to the '''finished''' signal provided by the job return paramenter of the '''startOperationCall''' service method.&lt;br /&gt;
The '''finished''' signal has the same job as parameter, from which is possible to check the variant '''result''' property, to check the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var service = messagesDataSource.serviceForSource(src)&lt;br /&gt;
    var operation = &amp;quot;auth&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    function result(job) {&lt;br /&gt;
        statusItem.authorizationStatus = job.result;&lt;br /&gt;
        print(&amp;quot;ServiceJob result: &amp;quot; + job.result + &amp;quot; op: &amp;quot; + job.operationName);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var operation = service.operationDescription(operation);&lt;br /&gt;
    operation.user = userName;&lt;br /&gt;
    operation.password = password;&lt;br /&gt;
    var serviceJob = service.startOperationCall(operation);&lt;br /&gt;
    serviceJob.finished.connect(result);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DataModel ===&lt;br /&gt;
Some data engines return as their data something that can be interpreted as a list of items, rather than simple key/value pairs.&lt;br /&gt;
QML provides some item views such as '''ListView''', '''GridView''' and '''Repeater'''.&lt;br /&gt;
The '''DataModel''' QML object can provide, based on a DataSource a model suitable for those QML item views.&lt;br /&gt;
&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* DataSource '''dataSource''': the id of an existing (and connected) DataSource&lt;br /&gt;
* String '''sourceFilter''': it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. To, for example, have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
* String '''keyRoleFilter''': it's a regular expression. Only data with keys that match this filter expression will be inserted in the model&lt;br /&gt;
* int '''count''' (read only): how many items are in the model&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 ListView {&lt;br /&gt;
   model: PlasmaCore.DataModel {&lt;br /&gt;
        dataSource: microblogSource&lt;br /&gt;
        keyRoleFilter: &amp;quot;[\\d]*&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    delegate: Text {&lt;br /&gt;
        text: title&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the example, ''microblogSource'' is the id of a DataSource, and inserts in the model only entries that have a number as the key name (matched with [\\d]*, in this case tweets ids)&lt;br /&gt;
&lt;br /&gt;
Each item in the model will have the form of a variant hash: all the keys of the hash will be registered as model role names, in the example, &amp;quot;title&amp;quot; is a role of the model containing a string (also reachable with model[&amp;quot;title&amp;quot;]).&lt;br /&gt;
&lt;br /&gt;
A special reserved role will always be present: '''&amp;quot;DataEngineSource&amp;quot;''': it will contain the name of the data engine source that gave origin to this item. Therefore, if you want merely the string of the current source that the model is at...do model[&amp;quot;DataEngineSource&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
Note that view.currentItem holds the item currently selected. However, due to (http://bugreports.qt.nokia.com/browse/QTBUG-16347) this does not work in PathView. A workaround is to make your own.&lt;br /&gt;
&lt;br /&gt;
=== SortFilterModel ===&lt;br /&gt;
SortFilterModel is a proxy model for easy sorting and/or filtering of the items in a DataModel (or any other QAbstractItemModel subclass that has been registered in QML with setContextProperty from a C++ application)&lt;br /&gt;
Properties:&lt;br /&gt;
* model '''sourceModel'''&lt;br /&gt;
* String '''filterRegExp'''&lt;br /&gt;
* String '''filterRole'''&lt;br /&gt;
* String '''sortRole'''&lt;br /&gt;
* Qt::SortOrder '''sortOrder'''&lt;br /&gt;
* int '''count''' (read only)&lt;br /&gt;
&lt;br /&gt;
This is an example from the feed widget:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
model: PlasmaCore.SortFilterModel {&lt;br /&gt;
   id: postTitleFilter&lt;br /&gt;
   filterRole: &amp;quot;title&amp;quot;&lt;br /&gt;
   sortRole: &amp;quot;time&amp;quot;&lt;br /&gt;
   sortOrder: &amp;quot;DescendingOrder&amp;quot;&lt;br /&gt;
   filterRegExp: toolbarFrame.searchQuery&lt;br /&gt;
   sourceModel: PlasmaCore.SortFilterModel {&lt;br /&gt;
      id: feedCategoryFilter&lt;br /&gt;
      filterRole: &amp;quot;feed_url&amp;quot;&lt;br /&gt;
      sourceModel: PlasmaCore.DataModel {&lt;br /&gt;
         dataSource: feedSource&lt;br /&gt;
         keyRoleFilter: &amp;quot;items&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Popup Applet ==&lt;br /&gt;
So you want your QML applet to be a popup applet, like the device notifier (an icon in the panel shows and expands the applet)?&lt;br /&gt;
&lt;br /&gt;
Why, that's easy.&lt;br /&gt;
&lt;br /&gt;
To change your plasmoid from being a regular boring one, in your '''metadata.desktop''', simply change this following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet,Plasma/PopupApplet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in the main QML item's Component.onCompleted, do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    plasmoid.popupIcon = &amp;quot;konqueror&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to use other elements instead of an icon when collapsed in a panel, use the '''compactRepresentation''' property in the root Item.&lt;br /&gt;
&lt;br /&gt;
== Plasma Themes ==&lt;br /&gt;
&lt;br /&gt;
=== Theme ===&lt;br /&gt;
This class instantiable from QML provides access to the Plasma Theme colors and other facilities such as fonts.&lt;br /&gt;
From KDE 4.8 a Theme instance is always present given the org.kde.plasma.core plugin was imported, is not necessary to create it by hand.&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* String '''themeName''' (read only)&lt;br /&gt;
* bool '''windowTranslucentEnabled''' (read only)&lt;br /&gt;
* Url '''homepage''' (read only)&lt;br /&gt;
* bool '''useGlobalSettings''' (read only)&lt;br /&gt;
* QString '''wallpaperPath''' (read only)&lt;br /&gt;
* color '''textColor''' (read only)&lt;br /&gt;
* color '''highlightColor''' (read only)&lt;br /&gt;
* color '''backgroundColor''' (read only)&lt;br /&gt;
* color '''buttonTextColor''' (read only)&lt;br /&gt;
* color '''buttonBackgroundColor''' (read only)&lt;br /&gt;
* color '''linkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''buttonHoverColor''' (read only)&lt;br /&gt;
* color '''buttonFocusColor''' (read only)&lt;br /&gt;
* color '''viewTextColor''' (read only)&lt;br /&gt;
* color '''viewBackgroundColor''' (read only)&lt;br /&gt;
* color '''viewHoverColor''' (read only)&lt;br /&gt;
* color '''viewFocusColor''' (read only)&lt;br /&gt;
* String '''styleSheet''' (read only)&lt;br /&gt;
* Font '''defaultFont''' (read only)&lt;br /&gt;
* Font '''desktopFont''' (read only)&lt;br /&gt;
* Font '''smallestFont''' (read only)&lt;br /&gt;
&lt;br /&gt;
Each Font element has the following properties:&lt;br /&gt;
* bool bold&lt;br /&gt;
* Capitalization '''capitalization''' (MixedCase, AllUppercase, AllLowercase, SmallCaps, Capitalize) (read only)&lt;br /&gt;
* String '''family''' (read only)&lt;br /&gt;
* bool '''italic''' (read only)&lt;br /&gt;
* real '''letterSpacing''' (read only)&lt;br /&gt;
* int '''pixelSize''' (read only)&lt;br /&gt;
* real '''pointSize''' (read only)&lt;br /&gt;
* bool '''strikeout''' (read only)&lt;br /&gt;
* bool '''underline''' (read only)&lt;br /&gt;
* Weight '''weight''' (Light, Normal, DemiBold, Bold, Black) (read only)&lt;br /&gt;
* real '''wordSpacing''' (read only)&lt;br /&gt;
* size '''mSize''' the size, width and height of an uppercase &amp;quot;M&amp;quot; in this font (read only)&lt;br /&gt;
&lt;br /&gt;
=== Svg ===&lt;br /&gt;
Declaring a Svg element instantiates a Plasma Svg instance. This class doesn't draw anything. For drawing, SvgItem is used.&lt;br /&gt;
Properties:&lt;br /&gt;
* QSize '''size'''&lt;br /&gt;
* bool '''multipleImages'''&lt;br /&gt;
* String '''imagePath''' can be anything in the '''desktoptheme/''' folder. For more information on what is available, see [http://techbase.kde.org/Projects/Plasma/Theme#Current_Theme_Elements Plasma Theme Elements]. Make sure to strip the final extension from this string, so you should for example use &amp;lt;code&amp;gt;&amp;quot;dialogs/background&amp;quot;&amp;lt;/code&amp;gt; to get the standard background.&lt;br /&gt;
* bool '''usingRenderingCache'''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPixmap pixmap(QString elementID)&lt;br /&gt;
* void resize(qreal width, qreal height)&lt;br /&gt;
* void resize(): resets the image to its default dimension&lt;br /&gt;
* QSize elementSize(QString elementId)&lt;br /&gt;
* QRectF elementRect(QString elementId)&lt;br /&gt;
* bool hasElement(QString elementId)&lt;br /&gt;
* bool isValid(): true if valid svg file&lt;br /&gt;
&lt;br /&gt;
=== FrameSvg ===&lt;br /&gt;
Declaring a FrameSvg element instantiates a Plasma FrameSvg instance. This class doesn't draw anything. For drawing, FrameSvgItem is used.&lt;br /&gt;
This is to be used when you need informations about the framesvg, such as hasElementPrefix().&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* All properties from Svg&lt;br /&gt;
* EnabledBorders '''enabledBorders''': flag combination of:&lt;br /&gt;
** NoBorder&lt;br /&gt;
** TopBorder&lt;br /&gt;
** BottomBorder&lt;br /&gt;
** LeftBorder&lt;br /&gt;
** RightBorder&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* All methods from Svg&lt;br /&gt;
* void setImagePath(QString path)&lt;br /&gt;
* void resizeFrame(QSize size)&lt;br /&gt;
* QSize frameSize()&lt;br /&gt;
* qreal marginSize(Plasma::MarginEdge edge)&lt;br /&gt;
* void getMargins(qreal left, qreal top, qreal right, qreal bottom): parameters are output, they get set with the margins from the FrameSvg&lt;br /&gt;
* QRectF contentsRect(): the rectangle of the center element, taking the margins into account.&lt;br /&gt;
* void setElementPrefix(QString prefix)&lt;br /&gt;
* bool hasElementPrefix(const QString prefix)&lt;br /&gt;
* QString prefix()&lt;br /&gt;
* void setCacheAllRenderedFrames(bool cache)&lt;br /&gt;
* bool cacheAllRenderedFrames()&lt;br /&gt;
* void clearCache()&lt;br /&gt;
* QPixmap framePixmap()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.FrameSvg {&lt;br /&gt;
        id: myFrameSvg&lt;br /&gt;
        imagePath: &amp;quot;widgets/button&amp;quot;&lt;br /&gt;
        prefix: &amp;quot;pressed&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SvgItem ===&lt;br /&gt;
It's a graphical element that will actually paint a Svg instance.&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''elementId''': what element to render. If null, the whole svg will be rendered&lt;br /&gt;
* Svg '''svg''': instance of the Svg class mentioned above&lt;br /&gt;
* QSizeF '''naturalSize''' (read only): default size of the Svg&lt;br /&gt;
* bool '''smooth''': paint with antialias (default false)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.SvgItem {&lt;br /&gt;
        id: mySvgItem&lt;br /&gt;
        anchors {&lt;br /&gt;
            top: parent.top&lt;br /&gt;
            left: parent.left&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        width: 300&lt;br /&gt;
        height: 3&lt;br /&gt;
&lt;br /&gt;
        svg: mySvg&lt;br /&gt;
        elementId: &amp;quot;horizontal-line&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FrameSvgItem ===&lt;br /&gt;
It's a graphical element that paints a Plasma::FrameSvg, so a rectangular image composed by 9 elements contained in a Svg file, useful for things like buttons and frames.&lt;br /&gt;
&lt;br /&gt;
Flags&lt;br /&gt;
* EnabledBorders: combination of TopBorder | BottomBorder | LeftBorder | RightBorder, NoBorder if no border of the frame is enabled&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''imagePath''': path of the file relative to the Plasma Theme, for instance &amp;quot;widgets/background&amp;quot;&lt;br /&gt;
* String '''prefix''': a FrameSvg can contain multiple frames, for instance a button contains &amp;quot;normal&amp;quot;, &amp;quot;raised&amp;quot; and &amp;quot;pressed&amp;quot;&lt;br /&gt;
* Margins '''margins''' (read only): the margins of the frame, see documentation below&lt;br /&gt;
* EnabledBorders '''enabledBorders''': what borders are enabled&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
PlasmaCore.FrameSvgItem {&lt;br /&gt;
    id: myFrameSvgItem&lt;br /&gt;
    anchors.fill: parent&lt;br /&gt;
    imagePath: &amp;quot;translucent/dialogs/background&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top Level windows ==&lt;br /&gt;
&lt;br /&gt;
=== Dialog ===&lt;br /&gt;
Dialog instantiates a Plasma::Dialog, it will be a Plasma themed top level window that can contain any QML component.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''mainItem''': the Item contained in the Dialog, it can be any QML Item instance&lt;br /&gt;
* bool '''visible''': if the window (not the mainItem) is visible&lt;br /&gt;
* int '''x''': x position of the window in screen coordinates&lt;br /&gt;
* int '''y''': y position of the window in screen coordinates&lt;br /&gt;
* int '''width''' (read only): total width of the dialog, including margins&lt;br /&gt;
* int '''height''' (read only): total height of the dialog, including margins.&lt;br /&gt;
* int '''windowFlags''': Qt window flags of the Dialog&lt;br /&gt;
* Margins '''margins''' (read only): margins of the Dialog&lt;br /&gt;
&lt;br /&gt;
{{Note|The width and height will scale with size of the main item within this Dialog component.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import QtQuick 1.1&lt;br /&gt;
import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
    PlasmaCore.Dialog {&lt;br /&gt;
        visible: true&lt;br /&gt;
        mainItem: Item {&lt;br /&gt;
            width: 500&lt;br /&gt;
            height: 500&lt;br /&gt;
&lt;br /&gt;
            Text {&lt;br /&gt;
                anchors.centerIn: parent&lt;br /&gt;
                color: &amp;quot;red&amp;quot;&lt;br /&gt;
                text: qsTr(&amp;quot;text&amp;quot;)&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPoint popupPosition(Item item, Qt::Alignment alignment=Qt::AlignLeft): the suggested position for the Dialog if it has to be correctly placed as popup of the QML item passed as parameter.&lt;br /&gt;
* void setAttribute(Qt::WindowAttribute attribute, bool on): set an attribute for the dialog window&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
=== ToolTip ===&lt;br /&gt;
Declaring a ToolTip instance makes it possible to use Plasma tooltips with any QML item.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''target''': the QML item we want to show a tooltip of&lt;br /&gt;
* String '''mainText'''&lt;br /&gt;
* String '''subText'''&lt;br /&gt;
* String '''image''': freedesktop compliant icon name as image of the tooltip&lt;br /&gt;
&lt;br /&gt;
== Containments ==&lt;br /&gt;
A Plasma Containment manages the position and manipulation of Plasmoids.&lt;br /&gt;
=== AppletContainer ===&lt;br /&gt;
The AppletContainer class provides access to the geometry and status of Plasmoids in this Containment.&lt;br /&gt;
Properties:&lt;br /&gt;
* ''int'' '''minimumWidth''': The minimum width of the applet&lt;br /&gt;
* ''int'' '''minimumHeight''': The minimum height of the applet&lt;br /&gt;
* ''int'' '''maximumWidth''': The maximum width of the applet&lt;br /&gt;
* ''int'' '''maximumHeight''': The maximum height of the applet&lt;br /&gt;
* ''int'' '''preferredWidth''': The preferred height of the applet&lt;br /&gt;
* ''int'' '''preferredHeight''': The preferred height of the applet&lt;br /&gt;
* ''enum'' '''status''': The status of the applet, one in the enum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ToolBox ==&lt;br /&gt;
&lt;br /&gt;
= Plasma QtComponents (4.8) =&lt;br /&gt;
Plasma components documentation online at [http://api.kde.org/4.x-api/plasma-qml-apidocs/ api.kde.org]&lt;br /&gt;
&lt;br /&gt;
=QtExtraComponents=&lt;br /&gt;
The QtExtraComponents make some very convenient Qt classes usable from within QML.&lt;br /&gt;
&lt;br /&gt;
They can be imported in your code with:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import org.kde.qtextracomponents 0.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==QPixmapItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QPixmap directly to QPixmapItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QPixmap '''pixmap''': The QPixmap object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QPixmap width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QPixmap height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==QImageItem==&lt;br /&gt;
This one wraps around a QImage class and allows you to send a QImage directly to QImageItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QImage '''image''': The QImage object.&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''nativeWidth''': (verification needed) The QImage width&lt;br /&gt;
* int '''nativeHeight''': (verification needed) The QImage height&lt;br /&gt;
* FillMode '''fillMode''': see below&lt;br /&gt;
&lt;br /&gt;
==FillMode==&lt;br /&gt;
Both QPixmapItem and QImageItem expose a FillMode enum. This enum defines how the image is going to be used to fill the item.&lt;br /&gt;
&lt;br /&gt;
For QPixmapItem, possible values are:&lt;br /&gt;
&lt;br /&gt;
* QPixmapItem.Stretch: the image is scaled to fit&lt;br /&gt;
* QPixmapItem.PreserveAspectFit: the image is scaled uniformly to fit without cropping&lt;br /&gt;
* QPixmapItem.PreserveAspectCrop: the image is scaled uniformly to fill, cropping if necessary&lt;br /&gt;
* QPixmapItem.Tile: the image is duplicated horizontally and vertically&lt;br /&gt;
* QPixmapItem.TileVertically: the image is stretched horizontally and tiled vertically&lt;br /&gt;
* QPixmapItem.TileHorizontally :e image is stretched vertically and tiled horizontally&lt;br /&gt;
&lt;br /&gt;
QImageItem defines the same values, you just need to replace QPixmapItem with QImageItem.&lt;br /&gt;
&lt;br /&gt;
==QIconItem==&lt;br /&gt;
This one wraps around a QPixmap class and allows you to send a QIcon directly to QIconItem.&lt;br /&gt;
 &lt;br /&gt;
Properties:&lt;br /&gt;
* QIcon/QString '''icon''': If you provide a QIcon it uses that directly. If you provide a string it uses a KIcon internally!&lt;br /&gt;
* bool '''smooth''': Set to true to render smooth.&lt;br /&gt;
* int '''implicitWidth''': Default width of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* int '''implicitHeight''': Default height of as set in SystemSettings-&amp;gt;Applications Appearance-&amp;gt;Icons&lt;br /&gt;
* State '''state''': Icon state (DefaultState, ActiveState, DisabledState)&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API-PlasmoidObject</id>
		<title>Development/Tutorials/Plasma/JavaScript/API-PlasmoidObject</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API-PlasmoidObject"/>
				<updated>2012-11-21T00:30:18Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: fonts&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The Global plasmoid Object =&lt;br /&gt;
There is a global object available to the Plasmoid called, appropriately, &amp;quot;plasmoid&amp;quot;. It has a number of useful properties (some of which are read only, but many of which are read/write), functions, constant values and callbacks. Each are enumerated below.&lt;br /&gt;
All of those are valid for both JavaScript and QML bindings.&lt;br /&gt;
&lt;br /&gt;
= Callbacks  =&lt;br /&gt;
&lt;br /&gt;
See the section on Events above.&lt;br /&gt;
&lt;br /&gt;
There are some events that are generated by Plasma for the Plasmoid. These can often be caught by providing a function assigned to a specific name in the plasmoid object. For instance, to get notified of form factor changes, one would provide a formFactorChanged method as follows: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
plasmoid.formFactorChanged = function() { &lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;the form factor has changed to: &amp;quot; + plasmoid.formFactor())&lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following callbacks are used to notify the Plasmoid of changes in its running environment:&lt;br /&gt;
&lt;br /&gt;
* '''configChanged()'''&lt;br /&gt;
* '''currentActivityChanged()'''&lt;br /&gt;
* '''formFactorChanged()'''&lt;br /&gt;
* '''immutabilityChanged()'''&lt;br /&gt;
* '''locationChanged()'''&lt;br /&gt;
* '''sizeChanged()'''&lt;br /&gt;
&lt;br /&gt;
Other callbacks include:&lt;br /&gt;
* '''dataUpdated(String source, Map[String, Any] data)''': used to pass in DataEngine updates&lt;br /&gt;
* '''activate()''': called when the widget is activated by the user, e.g. by a keyboard shortcut. Useful for setting the focus on a specific input widget, for instance. (API v2)&lt;br /&gt;
* '''initExtenderItem(Extender extender)''': Called when an Extender should be set up. (API v2)&lt;br /&gt;
* '''popupEvent(boolean shown)''': called on PopupApplets when the popup is shown or hidden. (API v2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In API v2, all of these callbacks can also be used as events. So, for instance, instead of implementing plasmoid.popupEvent, one could also write:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
plasmoid.addEventListener('popupEvent', function(shown) { print('shown? ' + shown) } )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This would also suppress any calls to plasmoid.popupEvent.&lt;br /&gt;
&lt;br /&gt;
Further documentation on these callbacks can be found in the relevant sections below.&lt;br /&gt;
&lt;br /&gt;
= Environment  =&lt;br /&gt;
&lt;br /&gt;
A set of read-only properties (and in most cases notification functions) that tell the Plasmoid about its current environment: &lt;br /&gt;
&lt;br /&gt;
* '''apiVersion''': the integer version of the Simplified JavaScript API in the current execution environment; can be used to change behaviour or usage of functions depending on the version number.&lt;br /&gt;
&lt;br /&gt;
* '''formFactor''': one of Planar (e.g. on a desktop or in an application main view), Horizontal, Vertical or MediaCenter. When the form factor changes, the plasmoid.formFactorChanged function, if defined in the Plasmoid, is called.&lt;br /&gt;
&lt;br /&gt;
* '''size''': the size of the Plasmoid, expressed in QSizeF (explained below). when it changes, plasmoid.sizeChanged() will be called.&lt;br /&gt;
&lt;br /&gt;
* '''location''': one of Floating (no specific location), Desktop (on the application's main view are), FullScreen, LeftEdge, RightEdge, TopEdge or ButtomEdge. When the location changes, the plasmoid.locationChanged function, if defined in the Plasmoid, is called.&lt;br /&gt;
&lt;br /&gt;
* '''immutable''': this property is set to true when the Plasmoid is set to not be movable or otherwise changeable, and false otherwise. Configuration is still usually allowed in this state. When the immutability changes, the plasmoid.immutabilityChanged function, if defined in the Plasmoid, is called.&lt;br /&gt;
&lt;br /&gt;
* '''currentActivity''': the current contextual activity name. When the current activity changes, the plasmoid.currentActivityChanged function, if defined in the Plasmoid, is called.&lt;br /&gt;
&lt;br /&gt;
* '''shouldConserveResources''': true if the plasmoid should not be doing anything that would create too much draw on power, e.g. when on a device with low battery power it may be a good idea not to run a computationally expensive but optional animation&lt;br /&gt;
&lt;br /&gt;
* '''userConfiguring''': true if the user configuration interface is currently being displayed.&lt;br /&gt;
&lt;br /&gt;
= Properties  =&lt;br /&gt;
A set of read/write properties that allow the Plasmoid to set various visual or functional properties: &lt;br /&gt;
&lt;br /&gt;
* ''AspectRatioMode'' '''aspectRatioMode''': defines how to treat the aspect ratio of a Plasmoid when resizing it. See the [[http://lxr.kde.org/source/kde/kde-runtime/plasma/scriptengines/javascript/plasmoid/appletinterface.h#120|AspectRatioMode]] documentation for values and their meaning. &lt;br /&gt;
&lt;br /&gt;
* ''BackgroundHints'' '''backgroundHints''': defines how the background of the widget is rendered. See the [[#BackgroundHints|BackgroundHints]] documentation for values and their meaning. &lt;br /&gt;
&lt;br /&gt;
* ''boolean'' '''busy''': set to true when the Plasmoid is currently processing or waiting for data and the user interface should be blocked while doing so; will generally show a full-Plasmoid animated overlay to denote business&lt;br /&gt;
&lt;br /&gt;
* ''SizePolicy'' '''horizontalSizePolicy''': behaviour of the plasmoid in an horizontal layout such as a panel. It may be: &lt;br /&gt;
** ''Fixed'':  The QWidget::sizeHint() is the only acceptable alternative, so the widget can never grow or shrink (e.g. the vertical direction of a push button).&lt;br /&gt;
** ''Minimum'': The sizeHint() is minimal, and sufficient. The widget can be expanded, but there is no advantage to it being larger (e.g. the horizontal direction of a push button). It cannot be smaller than the size provided by sizeHint().&lt;br /&gt;
** ''Maximum'': The sizeHint() is a maximum. The widget can be shrunk any amount without detriment if other widgets need the space (e.g. a separator line). It cannot be larger than the size provided by sizeHint().&lt;br /&gt;
** ''Preferred'': The sizeHint() is best, but the widget can be shrunk and still be useful. The widget can be expanded, but there is no advantage to it being larger than sizeHint() (the default QWidget policy).&lt;br /&gt;
** ''Expanding'': The sizeHint() is a sensible size, but the widget can be shrunk and still be useful. The widget can make use of extra space, so it should get as much space as possible (e.g. the horizontal direction of a horizontal slider).&lt;br /&gt;
** ''MinimumExpanding'':  The sizeHint() is minimal, and sufficient. The widget can make use of extra space, so it should get as much space as possible (e.g. the horizontal direction of a horizontal slider).&lt;br /&gt;
** ''Ignored'': The sizeHint() is ignored. The widget will get as much space as possible.&lt;br /&gt;
&lt;br /&gt;
* ''SizePolicy'' '''verticalSizePolicy''': behaviour of the plasmoid in a vertical layout such as a panel.&lt;br /&gt;
&lt;br /&gt;
== PopupApplet specific ==&lt;br /&gt;
* ''QIcon'' '''popupIcon''': it will be used instead of the applet content when the applet is in a panel&lt;br /&gt;
* ''Object'' '''popupIconToolTip''': it contains the icon, mainText and subtext for the tooltip the applet will have when collapsed in an icon, properties:&lt;br /&gt;
** ''variant'' '''image''': the icon, it may be an icon name, an image path, a QIcon, QImage or a QPixmap&lt;br /&gt;
** ''String'' '''mainText''': the tooltip title&lt;br /&gt;
** ''String'' '''subText''': the tooltip descriptive subtext&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
      var data = new Object&lt;br /&gt;
      data[&amp;quot;image&amp;quot;] = &amp;quot;konqueror&amp;quot;&lt;br /&gt;
      data[&amp;quot;mainText&amp;quot;] = &amp;quot;ToolTip title&amp;quot;&lt;br /&gt;
      data[&amp;quot;subText&amp;quot;] = &amp;quot;ToolTip descriptive sub text&amp;quot;&lt;br /&gt;
      plasmoid.popupIconToolTip = data&lt;br /&gt;
  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ''bool'' '''passivePopup''': if true when the popup is opened other windows can gain focus and the popup won't close&lt;br /&gt;
&lt;br /&gt;
* ''bool'' '''popupShowing''': true when the popupapplet is iconified and its popup is open&lt;br /&gt;
&lt;br /&gt;
== Containment specific ==&lt;br /&gt;
* ''Array(Object)'' '''applets''': List of all applets in the containment&lt;br /&gt;
* ''bool'' '''drawWallpaper''': Enable/disable the wallpaper painting by the containment&lt;br /&gt;
* ''enum'' '''containmentType''': one of&lt;br /&gt;
** ''DesktopContainment'': A desktop containment&lt;br /&gt;
** ''PanelContainment'': A desktop panel&lt;br /&gt;
** ''CustomContainment'': A containment that is neither a desktop nor a panel  but something application specific&lt;br /&gt;
** ''CustomPanelContainment'': A customized desktop panel&lt;br /&gt;
&lt;br /&gt;
* ''int'' '''screen''': Number of the screen this containment is in&lt;br /&gt;
* ''string'' '''activityName''': The name of the activity this containment belongs to.&lt;br /&gt;
* ''string'' '''activityId''': The id of the activity this containment belongs to.&lt;br /&gt;
&lt;br /&gt;
The following API is only available from declarative containments.&lt;br /&gt;
* ''ToolBox'' '''toolBox()''': The toolbox of the Containment. The ToolBox is rendered as a separate item on the scene and provides access to the following properties:&lt;br /&gt;
** ''Array(QAction)'' '''actions''': A list of actions provided by the Containment.&lt;br /&gt;
&lt;br /&gt;
= Geometry  =&lt;br /&gt;
&lt;br /&gt;
Read Only Properties: &lt;br /&gt;
&lt;br /&gt;
* ''QRectF'' '''rect''': the current rect of the Plasmoid; note that the top left may be not be the origin point (0,0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Functions: &lt;br /&gt;
&lt;br /&gt;
* '''resize(width, height)'''&lt;br /&gt;
* '''setMinimumSize(width, height)'''&lt;br /&gt;
* '''setPreferredSize(width, height)'''&lt;br /&gt;
* '''setBackgroundHints(background)''' - use '''NoBackground''' as value if you want to remove the default plasmoid background box.&lt;br /&gt;
* '''popupIcon(QIcon(&amp;quot;some icon&amp;quot;))''' - set icon to show when the plasmoid is added to the taskbar. NOTE if the plasmoid is made in QML, you MUST specify a default size for the main Item. This size will be used for the plasmoid when added to the taskbar&lt;br /&gt;
&lt;br /&gt;
= Painting and Layout  =&lt;br /&gt;
&lt;br /&gt;
To paint directly on to the canvas, a widget may implement the paintInterface function in the plasmoid object: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    plasmoid.paintInterface = function(painter) { /* painting code goes here*/ }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
See the Painting section below for information about helpful classes and functions that can be used when implementing a paintInterface function. &lt;br /&gt;
&lt;br /&gt;
Read/Write Properties: &lt;br /&gt;
&lt;br /&gt;
* ''Layout'' '''layout''': the QGraphicsLayout associated with the Plasmoid for laying out top level items; this property is read-write, though the property is not usually set as one can simply do &amp;quot;new LinearLayout&amp;quot; (or one of the other layout classes provided) and it will be automatically associated with the Plasmoid.&lt;br /&gt;
&lt;br /&gt;
Functions: &lt;br /&gt;
&lt;br /&gt;
* '''update()''': triggers a full repaint of the Plasmoid.&lt;br /&gt;
* '''update(QRectF rect)''' triggers a repaint of the rect area of the Plasmoid.&lt;br /&gt;
* '''failedToLaunch(bool failed[, string reason])''' sets the launch status of the Plasmoid; if set to true, the script will stop executing and the reason message, if any, will be displayed to the user.&lt;br /&gt;
&lt;br /&gt;
= Access To Packaged Files  =&lt;br /&gt;
&lt;br /&gt;
Functions: &lt;br /&gt;
&lt;br /&gt;
* ''string'' '''file(string type[, string fileName])''': returns the path to a file in the Plasmoid package of the given type, optionally with a file name to match, e.g. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;var path = plasmoid.file(&amp;quot;mainscript&amp;quot;)&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
or &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;var pm = new QPixmap(plasmoid.file(&amp;quot;images&amp;quot;, &amp;quot;mypixmap.png&amp;quot;))&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ''bool'' '''include(string filename)''': attempts to include the script defined from the package's code directory&lt;br /&gt;
&lt;br /&gt;
= Configuration Data  =&lt;br /&gt;
Configuration values can be defined using [[Development/Tutorials/Using_KConfig_XT|KConfig XT]] XML files in the {{path|contents/config/}} directory of the Plasmoid's package. The default file that is looked for and used is {{path|contents/config/main.xml}}.&lt;br /&gt;
&lt;br /&gt;
== Accessing Configuration Data  ==&lt;br /&gt;
Read-write properties:&lt;br /&gt;
* ''String'' '''activeConfig''': The current active configuration description. For instance, setting it to &amp;quot;foo&amp;quot; would cause the Plasmoid to try and reference the {{path|contents/config/foo.xml}} KConfigXT file. Setting this to an empty string will switch to the main.xml file.&lt;br /&gt;
&lt;br /&gt;
Functions:&lt;br /&gt;
* ''any'' '''readConfig(String key)''': reads the value from the configuration data for the given key as defined by the currently active configuration.&lt;br /&gt;
&lt;br /&gt;
* '''writeConfig(String key, any value) ''': writes a value to the configuration store under the given key&lt;br /&gt;
&lt;br /&gt;
== User Customization  ==&lt;br /&gt;
&lt;br /&gt;
User customization can be offered by providing a Qt Designer file called {{path|contents/ui/config.ui}} in the Plasmoid's package.&lt;br /&gt;
&lt;br /&gt;
Callbacks:&lt;br /&gt;
* '''configChanged()''': callback function called when the configuration is changed external to the Plasmoid, e.g. when the user changes settings in a configuration dialog.&lt;br /&gt;
&lt;br /&gt;
= Context menu =&lt;br /&gt;
&lt;br /&gt;
It's possible to add some items to the popup menu of the Plasmoid.&lt;br /&gt;
&lt;br /&gt;
Functions:&lt;br /&gt;
* '''setAction(String name, String text, String icon, String shortcut)''': adds an item to the context menu with the given text and icon;&lt;br /&gt;
 In pure JavaScript plasmoids you need to define '''plasmoid.action_&amp;lt;name&amp;gt;''' function, where &amp;lt;name&amp;gt; is the first argument for setAction call, and this function will be called each time user clicks the item.&lt;br /&gt;
 Similarly in QML plasmoids you must define a function '''action_&amp;lt;name&amp;gt;''' in the root qml item that will handle the action click.&lt;br /&gt;
* '''setActionSeparator(String name)''': (API v5) adds a separator item to the context menu&lt;br /&gt;
* '''removeAction(String name)''': removes the item with &amp;lt;name&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API-PlasmoidObject</id>
		<title>Development/Tutorials/Plasma/JavaScript/API-PlasmoidObject</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API-PlasmoidObject"/>
				<updated>2012-11-21T00:29:05Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: start toolbox docs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The Global plasmoid Object =&lt;br /&gt;
There is a global object available to the Plasmoid called, appropriately, &amp;quot;plasmoid&amp;quot;. It has a number of useful properties (some of which are read only, but many of which are read/write), functions, constant values and callbacks. Each are enumerated below.&lt;br /&gt;
All of those are valid for both JavaScript and QML bindings.&lt;br /&gt;
&lt;br /&gt;
= Callbacks  =&lt;br /&gt;
&lt;br /&gt;
See the section on Events above.&lt;br /&gt;
&lt;br /&gt;
There are some events that are generated by Plasma for the Plasmoid. These can often be caught by providing a function assigned to a specific name in the plasmoid object. For instance, to get notified of form factor changes, one would provide a formFactorChanged method as follows: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
plasmoid.formFactorChanged = function() { &lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;the form factor has changed to: &amp;quot; + plasmoid.formFactor())&lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following callbacks are used to notify the Plasmoid of changes in its running environment:&lt;br /&gt;
&lt;br /&gt;
* '''configChanged()'''&lt;br /&gt;
* '''currentActivityChanged()'''&lt;br /&gt;
* '''formFactorChanged()'''&lt;br /&gt;
* '''immutabilityChanged()'''&lt;br /&gt;
* '''locationChanged()'''&lt;br /&gt;
* '''sizeChanged()'''&lt;br /&gt;
&lt;br /&gt;
Other callbacks include:&lt;br /&gt;
* '''dataUpdated(String source, Map[String, Any] data)''': used to pass in DataEngine updates&lt;br /&gt;
* '''activate()''': called when the widget is activated by the user, e.g. by a keyboard shortcut. Useful for setting the focus on a specific input widget, for instance. (API v2)&lt;br /&gt;
* '''initExtenderItem(Extender extender)''': Called when an Extender should be set up. (API v2)&lt;br /&gt;
* '''popupEvent(boolean shown)''': called on PopupApplets when the popup is shown or hidden. (API v2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In API v2, all of these callbacks can also be used as events. So, for instance, instead of implementing plasmoid.popupEvent, one could also write:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
plasmoid.addEventListener('popupEvent', function(shown) { print('shown? ' + shown) } )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This would also suppress any calls to plasmoid.popupEvent.&lt;br /&gt;
&lt;br /&gt;
Further documentation on these callbacks can be found in the relevant sections below.&lt;br /&gt;
&lt;br /&gt;
= Environment  =&lt;br /&gt;
&lt;br /&gt;
A set of read-only properties (and in most cases notification functions) that tell the Plasmoid about its current environment: &lt;br /&gt;
&lt;br /&gt;
* '''apiVersion''': the integer version of the Simplified JavaScript API in the current execution environment; can be used to change behaviour or usage of functions depending on the version number.&lt;br /&gt;
&lt;br /&gt;
* '''formFactor''': one of Planar (e.g. on a desktop or in an application main view), Horizontal, Vertical or MediaCenter. When the form factor changes, the plasmoid.formFactorChanged function, if defined in the Plasmoid, is called.&lt;br /&gt;
&lt;br /&gt;
* '''size''': the size of the Plasmoid, expressed in QSizeF (explained below). when it changes, plasmoid.sizeChanged() will be called.&lt;br /&gt;
&lt;br /&gt;
* '''location''': one of Floating (no specific location), Desktop (on the application's main view are), FullScreen, LeftEdge, RightEdge, TopEdge or ButtomEdge. When the location changes, the plasmoid.locationChanged function, if defined in the Plasmoid, is called.&lt;br /&gt;
&lt;br /&gt;
* '''immutable''': this property is set to true when the Plasmoid is set to not be movable or otherwise changeable, and false otherwise. Configuration is still usually allowed in this state. When the immutability changes, the plasmoid.immutabilityChanged function, if defined in the Plasmoid, is called.&lt;br /&gt;
&lt;br /&gt;
* '''currentActivity''': the current contextual activity name. When the current activity changes, the plasmoid.currentActivityChanged function, if defined in the Plasmoid, is called.&lt;br /&gt;
&lt;br /&gt;
* '''shouldConserveResources''': true if the plasmoid should not be doing anything that would create too much draw on power, e.g. when on a device with low battery power it may be a good idea not to run a computationally expensive but optional animation&lt;br /&gt;
&lt;br /&gt;
* '''userConfiguring''': true if the user configuration interface is currently being displayed.&lt;br /&gt;
&lt;br /&gt;
= Properties  =&lt;br /&gt;
A set of read/write properties that allow the Plasmoid to set various visual or functional properties: &lt;br /&gt;
&lt;br /&gt;
* ''AspectRatioMode'' '''aspectRatioMode''': defines how to treat the aspect ratio of a Plasmoid when resizing it. See the [[http://lxr.kde.org/source/kde/kde-runtime/plasma/scriptengines/javascript/plasmoid/appletinterface.h#120|AspectRatioMode]] documentation for values and their meaning. &lt;br /&gt;
&lt;br /&gt;
* ''BackgroundHints'' '''backgroundHints''': defines how the background of the widget is rendered. See the [[#BackgroundHints|BackgroundHints]] documentation for values and their meaning. &lt;br /&gt;
&lt;br /&gt;
* ''boolean'' '''busy''': set to true when the Plasmoid is currently processing or waiting for data and the user interface should be blocked while doing so; will generally show a full-Plasmoid animated overlay to denote business&lt;br /&gt;
&lt;br /&gt;
* ''SizePolicy'' '''horizontalSizePolicy''': behaviour of the plasmoid in an horizontal layout such as a panel. It may be: &lt;br /&gt;
** ''Fixed'':  The QWidget::sizeHint() is the only acceptable alternative, so the widget can never grow or shrink (e.g. the vertical direction of a push button).&lt;br /&gt;
** ''Minimum'': The sizeHint() is minimal, and sufficient. The widget can be expanded, but there is no advantage to it being larger (e.g. the horizontal direction of a push button). It cannot be smaller than the size provided by sizeHint().&lt;br /&gt;
** ''Maximum'': The sizeHint() is a maximum. The widget can be shrunk any amount without detriment if other widgets need the space (e.g. a separator line). It cannot be larger than the size provided by sizeHint().&lt;br /&gt;
** ''Preferred'': The sizeHint() is best, but the widget can be shrunk and still be useful. The widget can be expanded, but there is no advantage to it being larger than sizeHint() (the default QWidget policy).&lt;br /&gt;
** ''Expanding'': The sizeHint() is a sensible size, but the widget can be shrunk and still be useful. The widget can make use of extra space, so it should get as much space as possible (e.g. the horizontal direction of a horizontal slider).&lt;br /&gt;
** ''MinimumExpanding'':  The sizeHint() is minimal, and sufficient. The widget can make use of extra space, so it should get as much space as possible (e.g. the horizontal direction of a horizontal slider).&lt;br /&gt;
** ''Ignored'': The sizeHint() is ignored. The widget will get as much space as possible.&lt;br /&gt;
&lt;br /&gt;
* ''SizePolicy'' '''verticalSizePolicy''': behaviour of the plasmoid in a vertical layout such as a panel.&lt;br /&gt;
&lt;br /&gt;
== PopupApplet specific ==&lt;br /&gt;
* ''QIcon'' '''popupIcon''': it will be used instead of the applet content when the applet is in a panel&lt;br /&gt;
* ''Object'' '''popupIconToolTip''': it contains the icon, mainText and subtext for the tooltip the applet will have when collapsed in an icon, properties:&lt;br /&gt;
** ''variant'' '''image''': the icon, it may be an icon name, an image path, a QIcon, QImage or a QPixmap&lt;br /&gt;
** ''String'' '''mainText''': the tooltip title&lt;br /&gt;
** ''String'' '''subText''': the tooltip descriptive subtext&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
      var data = new Object&lt;br /&gt;
      data[&amp;quot;image&amp;quot;] = &amp;quot;konqueror&amp;quot;&lt;br /&gt;
      data[&amp;quot;mainText&amp;quot;] = &amp;quot;ToolTip title&amp;quot;&lt;br /&gt;
      data[&amp;quot;subText&amp;quot;] = &amp;quot;ToolTip descriptive sub text&amp;quot;&lt;br /&gt;
      plasmoid.popupIconToolTip = data&lt;br /&gt;
  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ''bool'' '''passivePopup''': if true when the popup is opened other windows can gain focus and the popup won't close&lt;br /&gt;
&lt;br /&gt;
* ''bool'' '''popupShowing''': true when the popupapplet is iconified and its popup is open&lt;br /&gt;
&lt;br /&gt;
== Containment specific ==&lt;br /&gt;
* ''Array(Object)'' '''applets''': List of all applets in the containment&lt;br /&gt;
* ''bool'' '''drawWallpaper''': Enable/disable the wallpaper painting by the containment&lt;br /&gt;
* ''enum'' '''containmentType''': one of&lt;br /&gt;
** ''DesktopContainment'': A desktop containment&lt;br /&gt;
** ''PanelContainment'': A desktop panel&lt;br /&gt;
** ''CustomContainment'': A containment that is neither a desktop nor a panel  but something application specific&lt;br /&gt;
** ''CustomPanelContainment'': A customized desktop panel&lt;br /&gt;
&lt;br /&gt;
* ''int'' '''screen''': Number of the screen this containment is in&lt;br /&gt;
* ''string'' '''activityName''': The name of the activity this containment belongs to.&lt;br /&gt;
* ''string'' '''activityId''': The id of the activity this containment belongs to.&lt;br /&gt;
&lt;br /&gt;
The following API is only available from declarative containments.&lt;br /&gt;
* &amp;quot;ToolBox&amp;quot; &amp;quot;toolBox()&amp;quot;: The toolbox of the Containment. The ToolBox is rendered as a separate item on the scene and provides access to the following properties:&lt;br /&gt;
** &amp;quot;Array(QAction)&amp;quot; &amp;quot;actions&amp;quot;: A list of actions provided by the Containment.&lt;br /&gt;
&lt;br /&gt;
= Geometry  =&lt;br /&gt;
&lt;br /&gt;
Read Only Properties: &lt;br /&gt;
&lt;br /&gt;
* ''QRectF'' '''rect''': the current rect of the Plasmoid; note that the top left may be not be the origin point (0,0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Functions: &lt;br /&gt;
&lt;br /&gt;
* '''resize(width, height)'''&lt;br /&gt;
* '''setMinimumSize(width, height)'''&lt;br /&gt;
* '''setPreferredSize(width, height)'''&lt;br /&gt;
* '''setBackgroundHints(background)''' - use '''NoBackground''' as value if you want to remove the default plasmoid background box.&lt;br /&gt;
* '''popupIcon(QIcon(&amp;quot;some icon&amp;quot;))''' - set icon to show when the plasmoid is added to the taskbar. NOTE if the plasmoid is made in QML, you MUST specify a default size for the main Item. This size will be used for the plasmoid when added to the taskbar&lt;br /&gt;
&lt;br /&gt;
= Painting and Layout  =&lt;br /&gt;
&lt;br /&gt;
To paint directly on to the canvas, a widget may implement the paintInterface function in the plasmoid object: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    plasmoid.paintInterface = function(painter) { /* painting code goes here*/ }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
See the Painting section below for information about helpful classes and functions that can be used when implementing a paintInterface function. &lt;br /&gt;
&lt;br /&gt;
Read/Write Properties: &lt;br /&gt;
&lt;br /&gt;
* ''Layout'' '''layout''': the QGraphicsLayout associated with the Plasmoid for laying out top level items; this property is read-write, though the property is not usually set as one can simply do &amp;quot;new LinearLayout&amp;quot; (or one of the other layout classes provided) and it will be automatically associated with the Plasmoid.&lt;br /&gt;
&lt;br /&gt;
Functions: &lt;br /&gt;
&lt;br /&gt;
* '''update()''': triggers a full repaint of the Plasmoid.&lt;br /&gt;
* '''update(QRectF rect)''' triggers a repaint of the rect area of the Plasmoid.&lt;br /&gt;
* '''failedToLaunch(bool failed[, string reason])''' sets the launch status of the Plasmoid; if set to true, the script will stop executing and the reason message, if any, will be displayed to the user.&lt;br /&gt;
&lt;br /&gt;
= Access To Packaged Files  =&lt;br /&gt;
&lt;br /&gt;
Functions: &lt;br /&gt;
&lt;br /&gt;
* ''string'' '''file(string type[, string fileName])''': returns the path to a file in the Plasmoid package of the given type, optionally with a file name to match, e.g. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;var path = plasmoid.file(&amp;quot;mainscript&amp;quot;)&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
or &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;var pm = new QPixmap(plasmoid.file(&amp;quot;images&amp;quot;, &amp;quot;mypixmap.png&amp;quot;))&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ''bool'' '''include(string filename)''': attempts to include the script defined from the package's code directory&lt;br /&gt;
&lt;br /&gt;
= Configuration Data  =&lt;br /&gt;
Configuration values can be defined using [[Development/Tutorials/Using_KConfig_XT|KConfig XT]] XML files in the {{path|contents/config/}} directory of the Plasmoid's package. The default file that is looked for and used is {{path|contents/config/main.xml}}.&lt;br /&gt;
&lt;br /&gt;
== Accessing Configuration Data  ==&lt;br /&gt;
Read-write properties:&lt;br /&gt;
* ''String'' '''activeConfig''': The current active configuration description. For instance, setting it to &amp;quot;foo&amp;quot; would cause the Plasmoid to try and reference the {{path|contents/config/foo.xml}} KConfigXT file. Setting this to an empty string will switch to the main.xml file.&lt;br /&gt;
&lt;br /&gt;
Functions:&lt;br /&gt;
* ''any'' '''readConfig(String key)''': reads the value from the configuration data for the given key as defined by the currently active configuration.&lt;br /&gt;
&lt;br /&gt;
* '''writeConfig(String key, any value) ''': writes a value to the configuration store under the given key&lt;br /&gt;
&lt;br /&gt;
== User Customization  ==&lt;br /&gt;
&lt;br /&gt;
User customization can be offered by providing a Qt Designer file called {{path|contents/ui/config.ui}} in the Plasmoid's package.&lt;br /&gt;
&lt;br /&gt;
Callbacks:&lt;br /&gt;
* '''configChanged()''': callback function called when the configuration is changed external to the Plasmoid, e.g. when the user changes settings in a configuration dialog.&lt;br /&gt;
&lt;br /&gt;
= Context menu =&lt;br /&gt;
&lt;br /&gt;
It's possible to add some items to the popup menu of the Plasmoid.&lt;br /&gt;
&lt;br /&gt;
Functions:&lt;br /&gt;
* '''setAction(String name, String text, String icon, String shortcut)''': adds an item to the context menu with the given text and icon;&lt;br /&gt;
 In pure JavaScript plasmoids you need to define '''plasmoid.action_&amp;lt;name&amp;gt;''' function, where &amp;lt;name&amp;gt; is the first argument for setAction call, and this function will be called each time user clicks the item.&lt;br /&gt;
 Similarly in QML plasmoids you must define a function '''action_&amp;lt;name&amp;gt;''' in the root qml item that will handle the action click.&lt;br /&gt;
* '''setActionSeparator(String name)''': (API v5) adds a separator item to the context menu&lt;br /&gt;
* '''removeAction(String name)''': removes the item with &amp;lt;name&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Schedules/KDE4/4.10_Feature_Plan</id>
		<title>Schedules/KDE4/4.10 Feature Plan</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Schedules/KDE4/4.10_Feature_Plan"/>
				<updated>2012-11-12T16:32:28Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: qml containments is done&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of planned features for the SC 4.10 release. &lt;br /&gt;
&lt;br /&gt;
See also: &lt;br /&gt;
&lt;br /&gt;
*[[Schedules/KDE4/4.10 Release Schedule]] &lt;br /&gt;
*[[Schedules/KDE4/4.9 Feature Plan]] (previous major release)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; Legend: &lt;br /&gt;
&lt;br /&gt;
*todo =&amp;amp;gt; not started yet &lt;br /&gt;
*in-progress =&amp;amp;gt; started, but not completed yet &lt;br /&gt;
*done =&amp;amp;gt; completed&lt;br /&gt;
&lt;br /&gt;
__TOC__ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdelibs =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;NO NEW FEATURES ALLOWED&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-runtime =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|kio-mtp|KIO-Slave for MTP|philschmidt@gmx.net|Philipp Schmidt}}&lt;br /&gt;
{{FeatureDone|QML Containments|Making it possible to do full-featured containments in QML|sebas@kde.org|Sebastian Kügler}}&lt;br /&gt;
{{FeatureInProgress|nepomuk-indexer|New Nepomuk Indexer|me@vhanda.in|Vishesh Handa}}&lt;br /&gt;
{{FeatureInProgress|nepomukbakcup|Nepomuk Backup rewritten from scratch|me@vhanda.in|Vishesh Handa}}&lt;br /&gt;
{{FeatureInProgress|nepomukcleaner|An application to port/clean invalid/legacy data in Nepomuk|me@vhanda.in|Vishesh Handa}}&lt;br /&gt;
{{FeatureInProgress|nepomuk KCM|Rewrite the Nepomuk KCM|me@vhanda.in|Vishesh Handa}}&lt;br /&gt;
{{FeatureInProgress|nepomuk tags|Nepomuk Tags KIO Slave|me@vhanda.in|Vishesh Handa}}&lt;br /&gt;
{{FeatureInProgress|nepomuk filemetadatawidget|Nepomuk Metadata Widget|me@vhanda.in|Vishesh Handa}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-workspace =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|ksmserver|Merge the new qml based screen locker|mart@kde.org|Marco Martin}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- The following section of entries has been auto generated by ChangelogGenerator. Do not edit!&lt;br /&gt;
BEGIN GENERATED SECTION --&amp;gt;&lt;br /&gt;
{{FeatureTodo|kwin|windows that are moved to another desktop should be treated as sticky windows ({{bug |213847}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Fix fullscreen state handling: NETWM says it's bound to focus and not stacking order, also see bug #224600 ({{bug |296076}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Medium focus stealing prevention should also prevent focus stealing when the timestamp on the active window is uncertain ({{bug |304746}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Usability issue: &amp;quot;Attach as tab to&amp;quot; menu can be empty ({{bug |306451}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Display application menu and title bar side by side for maximized windows ({{bug |102607}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Add support for appmenu-qt ({{bug |266596}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Import Scripted Effect from All Effets Tab ({{bug |296772}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|GHNS support for Scripted Effects ({{bug |296773}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Window Tab support for QML based Aurorae ({{bug |299138}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureInProgress|kwin|Remove legacy window decorations ({{bug |299144}}, Review 104281)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Get rid of  &amp;quot;Display borders on maximized windows&amp;quot; setting ({{bug |299245}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Break NETWM to allow inner xinerama struts ({{bug |299247}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Cube animation on border approach should not be used unless the electric borders are actually in use and the config should be disabled, align or hint the electric border configuration ({{bug |299901}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Make ShaderManager act as a real stack ({{bug |300349}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|clientPopup: &amp;quot;'More actions' and &amp;quot;Attach as tab to&amp;quot;  lack mnemonics ({{bug |302833}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Make KWin compile with C++11 ({{bug |303313}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Copy all useful Client properties to Deleted ({{bug |303916}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Display content of resizing/moving windows: KDE-Help shows obsolete instructions ({{bug |305297}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Mouse action support for sending window to different activity ({{bug |305758}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Windows list icon does not show up in &amp;quot;Walk Through Desktop List&amp;quot; ({{bug |306187}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Game mode ({{bug |306448}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Animate Window Maximize/Restore ({{bug |308990}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Common animation settings for effects of same type ({{bug |308991}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Use Resize Area in Aurorae ({{bug |308992}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Configurable quick tile area config GUI ({{bug |308993}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Move ExtendedBorderRegion to stable  API ({{bug |308994}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Support shortened titles like in bespin in all decorations ({{bug |308995}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureInProgress|kwin|Mouse Click effect ({{bug |309006}}, Review 105780)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Decorations not visible ({{bug |305875}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|drag-and-drop between windows by cover switch alt-tab causes apps to crash ({{bug |179077}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Add a rule to select the screen ({{bug |183996}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|JJ: Need Mouse navigation in flip switch mode ({{bug |244439}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Request category for scripted KWin Effects on kde-(look&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;app).org ({{bug |297634}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Request category for KWin Scripts on kde-(look&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;app).org ({{bug |297635}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Request category for Window Switcher Layouts on kde-(look&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;app).org ({{bug |297637}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Allow direct rendering with fglrx ({{bug |301103}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Don't use OpenGL matrix stack in OpenGL 2 backend ({{bug |303093}}, Review 105455)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Refactor Screen/Window PaintData ({{bug |303314}}, Review 105141)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Rapid flickering in locked screen -- makes it difficult to unlock ({{bug |303579}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|double click menu to close needs GUI config ({{bug |305738}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Toplevel::windowType() needs performance improvements ({{bug |306384}}, Review 106349)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|GLPlatform should recommend either OpenGL1 or OpenGL2 compositing ({{bug |306436}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Zoom effect broken in master ({{bug |307609}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|kwin fails to build when the GLES support is disabled ({{bug |307866}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|[JJ] Some effect authors are listed as &amp;quot;Name1 &amp;amp; Name2&amp;quot; ({{bug |307928}}, Review 106880)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Add screen management actions to window context menus ({{bug |269207}}, Review 106065)|mgraesslin@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Move Workspace's compositing functionality to own class Compositor ({{bug |299277}}, Review 102420)|mgraesslin@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Option to disable close on double click in Aurorae ({{bug |301327}}, Review 106160)|mgraesslin@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Remove Tiling Support From KWin ({{bug |303090}}, Review 105546)|mgraesslin@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Allow Scripts to add menus to useractions menu ({{bug |303756}}, Review 106285)|mgraesslin@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Generic QML support for Aurorae Themes ({{bug |303810}}, Review 105768)|mgraesslin@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Split out Useractions Menu from Workspace ({{bug |305832}}, Review 106085)|mgraesslin@kde.org}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- END GENERATED SECTION --&amp;gt;&lt;br /&gt;
{{FeatureInProgress|kwin|Implement color correction (Review 106141)|skeletk13@gmail.com|Casian Andrei}}&lt;br /&gt;
{{FeatureDone|oxygen decoration|Implement ExtendedBorderRegion support, to resize windows outside of their actual borders|hugo@oxygen-icons.org|Hugo Pereira Da Costa}}&lt;br /&gt;
{{FeatureDone|oxygen style|Implement BlurBehind semi-transparent tooltips when available|hugo@oxygen-icons.org|Hugo Pereira Da Costa}}&lt;br /&gt;
{{FeatureDone|plasma-wallpapers|Color wallpaper: add listview to display thumbnails for background mode|rshah0385@kireihana.com|Reza Fatahilah Shah}}&lt;br /&gt;
{{FeatureInProgress|plasma workspace|Port Notifications applet to QML|mart@kde.org|Marco Martin}}&lt;br /&gt;
{{FeatureInProgress|plasma workspace|Port Task Manager applets to QML|hein@kde.org|Eike Hein (Sho_)}}&lt;br /&gt;
{{FeatureInProgress|plasma workspace|refresh Air Plasma theme|mart@kde.org|Marco Martin}}&lt;br /&gt;
{{FeatureInProgress|plasma workspace|Port Kickoff to qml|yellowcake-@gmx.net|Greg T}}&lt;br /&gt;
{{FeatureInProgress|systemsettings|Replace krandr KCM by libkscreen-based one|dvratil@redhat.com|Dan Vrátil}}&lt;br /&gt;
{{FeatureInProgress|plasma workspace|Port rssnow to qml|terietor@gmail.com|Giorgos Tsiapaliokas}}&lt;br /&gt;
{{FeatureInProgress|various|KActivities/SLC support for most our applications|ivan.cukic@kde.org|Ivan Čukić}}&lt;br /&gt;
{{FeatureInProgress|plasma workspace|first desktop SLC applet release|mart@kde.org|Marco Martin}}&lt;br /&gt;
{{FeatureDone|System Tray|System tray with interface in QML|dmitry.ashkadov@gmail.com|Dmitry Ashkadov}}&lt;br /&gt;
{{FeatureTodo|plasma workspace|Top-rated documents for Task Manager|ivan.cukic@kde.org|Ivan Čukić}}&lt;br /&gt;
{{FeatureInProgress|systemsettings|Keyboard layout preview|amourphious1992@gmail.com|Shivam Makkar}}&lt;br /&gt;
{{FeatureInProgress|window manager|Rework and optimize vertex specification|fredrik@kde.org|Fredrik Höglund}}&lt;br /&gt;
{{FeatureInProgress|window manager|Dynamic shader generation|fredrik@kde.org|Fredrik Höglund}}&lt;br /&gt;
{{FeatureInProgress|window manager|Partial port to xcb|fredrik@kde.org|Fredrik Höglund}}&lt;br /&gt;
{{FeatureInProgress|window manager|New launch feedback effect|fredrik@kde.org|Fredrik Höglund}}&lt;br /&gt;
{{FeatureInProgress|activities|Encrypted activities|ivan.cukic@kde.org|Ivan Čukić}}&lt;br /&gt;
{{FeatureInProgress|powerdevil|Improve profile error handling (DPMS)|kde@privat.broulik.de|Kai Uwe Broulik}}&lt;br /&gt;
{{FeatureInProgress|plasma workspace|Social Feed|mklapetek@kde.org|Martin Klapetek}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-baseapps =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|FolderView|Split into PopupApplet and Containment|ignat.semenov@blue-systems.com|Ignat Semenov}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|FolderView|Port to QML|ignat.semenov@blue-systems.com|Ignat Semenov}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Dolphin|Implement files quick preview feature (named Klook)  |evgeniy.augin@osinit.ru|Evgeniy Auzhin}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Dolphin|Implement parallel sort algorithm|emmanuelpescosta099@gmail.com|Emmanuel Pescosta}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Dolphin|Add GUI option for the &amp;quot;Rename Inline&amp;quot; setting|frank78ac@googlemail.com|Frank Reininghaus}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Dolphin|Add &amp;quot;Icon Size&amp;quot; submenu to the Places Panel context menu|frank78ac@googlemail.com|Frank Reininghaus}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|print-manager|New Print manager KCM and applet (plasmoid) replacement, using C++  |dantti12@gmail.com|Daniel Nicoletti}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Kate|Support for Python plugins|srhaque@theiet.org|Shaheed Haque}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Kate|Advanced gid(1) plugin using both ID files and etags|srhaque@theiet.org|Shaheed Haque}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Kate|As-you-type search for the search plugin|kare.sars@iki.fi|Kåre Särs}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Kate|Session name API for plugins + automatic ctags database naming|kare.sars@iki.fi|Kåre Särs}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|Kate|Add optional document &amp;quot;minimap&amp;quot; to the Symbols view plugin|kare.sars@iki.fi|Kåre Särs}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|Kate|Vim Mode Macro support|kdedevel@etothepiplusone.com|Simon St James}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Kdialog|Add support for detailedsorry/detailederror messages|kde@privat.broulik.de|Kai Uwe Broulik}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Konsole|Improve the search filter bar|francesco.cecconi@gmail.com|Francesco Cecconi}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Konsole|Add the --separate cmdline option for running in new process|adaptee@gmail.com|Jekyll Wu}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Konsole|Make the d&amp;amp;d popup menu optional|adaptee@gmail.com|Jekyll Wu}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeedu  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Marble|Have support for &amp;quot;repeatX&amp;quot; in the projection classes|rahn@kde.org|Torsten Rahn}}&lt;br /&gt;
{{FeatureTodo|Marble|Satellite Map NG|rahn@kde.org|Torsten Rahn}}&lt;br /&gt;
{{FeatureTodo|Marble|Mars &amp;amp; Venus satellite plugin|rahn@kde.org|Torsten Rahn / Gerhard Holtkamp}}&lt;br /&gt;
{{FeatureTodo|Marble|Solar Eclipse Plugin|rahn@kde.org|Torsten Rahn / Gerhard Holtkamp}}&lt;br /&gt;
{{FeatureTodo|Marble|Help Menu polishing / Support page inclusion|rahn@kde.org|Torsten Rahn}}&lt;br /&gt;
{{FeatureTodo|Marble|Toolbar polishing/refactoring|rahn@kde.org|Torsten Rahn}}&lt;br /&gt;
{{FeatureTodo|Marble|Solar Eclipse Plugin|rahn@kde.org|Torsten Rahn}}&lt;br /&gt;
{{FeatureInProgress|Marble|Worldwide hillshading|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Extended library API (no MarbleWidget dependency for tasks like parsing, routing)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Marble Touch on Plasma Active|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureInProgress|Marble|Foursquare plugin|utkuaydin34@gmail.com|Utku Aydın}}&lt;br /&gt;
{{FeatureTodo|Marble|Marble Touch on Android (including SOK branch merge)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Support for loading geolocated photos (e.g. in a Gallery activity in Marble Touch)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Layer Management (by the user: Toggle layer visibility; maybe move layers from legend and layers in menus to one central place/tab)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|OSM vector rendering (GSOC branch merge)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Zoom to content of geo file after loading (at least on start-up)|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Marble|Geo files thumbnailer|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Marble|Geo files metadata extractor|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureDone|Rocs|Journal files for projects.|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureInProgress|Rocs|Revisit graph export/import functionality to fully support: TGF, DOT, GML, GraphML|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureTodo|Rocs|Printing and image export of graphs.|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureTodo|Rocs|Data Structure Snapshot and Recovery.|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureDone|Rocs|Main Window UI Reorganization: Editor Toolbar, dialogs, Information Panel|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureTodo|Rocs|Visual Graph Editor Handling: copy&amp;amp;paste, data structure focus, property display|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureTodo|Rocs|Visual Graph Editor Edit Menu|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureInProgress|Rocs|Configuration Dialog Optimizations: Code-Editor, Graph Editor|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureTodo|Rocs|Data Structure Backend wise iconsets and preconfigurations for types|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureDone|KTouch|Ship ktouch/next|sebastiangottfried@web.de|Sebastian Gottfried}}&lt;br /&gt;
{{FeatureDone|KTouch|Smart resizing of training screen with aligned vertical lines|sebastiangottfried@web.de|Sebastian Gottfried}}&lt;br /&gt;
{{FeatureDone|KTouch|Prominent hint during training if the user makes repeatedly errors|sebastiangottfried@web.de|Sebastian Gottfried}}&lt;br /&gt;
{{FeatureDone|KTouch|Show course descriptions in course selector|sebastiangottfried@web.de|Sebastian Gottfried}}&lt;br /&gt;
{{FeatureDone|KTouch|Show a message when keyboard layout visualization isn't available due missing data|sebastiangottfried@web.de|Sebastian Gottfried}}&lt;br /&gt;
{{FeatureDone|Analitza|New plotting framework|percy.camilo.ta@gmail.com|Percy Camilo Triveño Aucahuasi}}&lt;br /&gt;
{{FeatureDone|KAlgebra|Splitted the QML Components from KAlgebraMobile|aleixpol@kde.org|Aleix Pol Gonzalez}}&lt;br /&gt;
{{FeatureDone|KAlgebra|New plotting plasmoid graphs, in QtQuick|aleixpol@kde.org|Aleix Pol Gonzalez}}&lt;br /&gt;
{{FeatureDone|Pairs|Pairs Theme editor|marco.calignano@gmail.com|Marco Calignano}}&lt;br /&gt;
{{FeatureInProgress|Cantor|Python backend|filipe@kde.org|Filipe Saraiva}}&lt;br /&gt;
{{FeatureInProgress|Kig|Mark right angles|david.narvaez@computer.org|David E. Narváez}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdegames=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|libkdegames|[http://community.kde.org/KDE_Games/API_cleanup Major cleanup and rewrite] (done, except for the new highscore classes)&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;'''Release team:''' please link to the [[Projects/Games/Porting_to_libkdegames_v5|porting instructions]]  for third-party developers|stefan.majewsky@googlemail.com|Stefan Majewsky}}&lt;br /&gt;
{{FeatureDone|KGoldrunner|Use KGameRenderer and QGraphicsView for all graphics: the gameplay is the same as before.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KGoldrunner|Remove the status bar. All scores and status messages are in the viewport now.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Allow the displayed speed of moves to be adjusted.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Animate multi-stage moves, to make it easier for a human player to follow their progress.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Show multi-stage moves in an order that is easier to follow.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Validate the loading of saved games and report errors.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Rewrite the main AI class and make it use a true Minimax method.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Provide a choice of two AI styles, Kepler and Newton, with the possibility to add more.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Add settings to choose computer player, AI style and skill level for either or both of players 1 and 2.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Add board sizes 3x3 and 4x4, for simplified play.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KSudoku|Add a simple Print facility for KSudoku puzzles.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdegraphics=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|libkipi|[http://www.google-melange.com/gsoc/proposal/review/google/gsoc2012/dodonvictor/10002 Porting libkipi to KDE-XML GUI]|dodonvictor@gmail.com|Victor Dodon}}&lt;br /&gt;
{{FeatureInProgress|okular|Tiled rendering|okular-devel@kde.org|Okular Developers}}&lt;br /&gt;
{{FeatureInProgress|Gwenview|Recursive importer|agateau@kde.org|Aurélien Gâteau}}&lt;br /&gt;
{{FeatureInProgress|Gwenview|Color profile support|agateau@kde.org|Aurélien Gâteau}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdemultimedia =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|Juk|[http://community.kde.org/Juk#Porting_plan Port Juk away from kde3support]|martin.sandsmark@kde.org|Martin Sandsmark}}&lt;br /&gt;
{{FeatureDone|Juk|Add lyrics view|martin.sandsmark@kde.org|Martin Sandsmark}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdenetwork=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|KGet|Metalink/HTTP Support|dahalaishraj@gmail.com|Aish Raj Dahal}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdepim  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureInProgress|Facebook resource|Include it in default install|martin.klapetek@gmail.com|Martin Klapetek}}&lt;br /&gt;
{{FeatureInProgress|Akregator2|Merge in kdepim|montel@kde.org|Montel Laurent}}&lt;br /&gt;
{{FeatureInProgress|Knode|Merge in KMail|montel@kde.org|Montel Laurent}}&lt;br /&gt;
{{FeatureInProgress|BackupMail|Extend backup to all kdepim apps|montel@kde.org|Montel Laurent}}&lt;br /&gt;
{{FeatureInProgress|Sieve|Rewrite dialogbox|montel@kde.org|Montel Laurent}}&lt;br /&gt;
{{FeatureInProgress|libs|Move folderview to kdepimlibs/akonadi|montel@kde.org|Montel Laurent}}&lt;br /&gt;
{{FeatureInProgress|kolab-resource|Make Kolab 3.0 option available|mollekopf@kolabsys.com|Christian Mollekopf}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeplasma-addons =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureInProgress|Microblog|replace with QML version|sebas@kde.org|Sebastian Kügler}}&lt;br /&gt;
{{FeatureInProgress|StackFolder|Add applet for quick browse the stack of folders|ural.mullabaev@rosalab.ru|Ural Mullabaev}}&lt;br /&gt;
{{FeatureInProgress|ComicStrip|Replace with QML version|rshah0385@kireihana.com|Reza Fatahilah Shah}}&lt;br /&gt;
{{FeatureDone|Calculator|Replace with QML version|luizromario@gmail.com|Luiz Romário Santana Rios}}&lt;br /&gt;
{{FeatureDone|QML Wallpapers|Make it possible to have animated wallpapers written in QtQuick technologies.|aleixpol@blue-systems.com|Aleix Pol Gonzalez}}&lt;br /&gt;
{{FeatureDone|Dictionary KRunner|Look up words in the dictionary by typing in 'define {word}' in krunner.|Jason@zx2c4.com|Jason A. Donenfeld}}&lt;br /&gt;
{{FeatureInProgress|Eyes|replace with QML version|bettio@kde.org|Davide Bettio}}&lt;br /&gt;
{{FeatureInProgress|FifteenPuzzle|replace with QML version|bettio@kde.org|Davide Bettio}}&lt;br /&gt;
{{FeatureInProgress|Luna|replace with QML version|bettio@kde.org|Davide Bettio}}&lt;br /&gt;
{{FeatureInProgress|Timer|replace with QML version|bettio@kde.org|Davide Bettio}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdesdk  =&lt;br /&gt;
&lt;br /&gt;
{| cellspa/cing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|Okteta|Add a general KPart adapter to Kasten, than finish port of Okteta KPart to Okteta Kasten|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add global toggle option for the offset display, hex or decimal|kossebau@kde.org|Friedrich W. H. Kossebau}} &lt;br /&gt;
{{FeatureTodo|Okteta|Add Kate-like combined dialogs to query for actions on files|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add Kate-like search tool|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add Okular like embedded notifications|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for import by drop, both url and data|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for memory mapping of files and 64-bit addressing|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for jobs like io, printing, string search or filter|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|copy again puts also a value or char variant of the data to clipboard|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Improve the titels of the changes to the bytearray to be more descriptive, best using ids to avoid text string|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Make all user interaction in the KastenCore managers plugin-based|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Merge row and column widgets into one|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Store bookmarks|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Store bookmarks and other view settings for next load|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add custom datatypes to structures tool|alex.richardson@gmx.de|Alex Richardson}}&lt;br /&gt;
{{FeatureInProgress|Okteta|Add tagged unions to structures tool|alex.richardson@gmx.de|Alex Richardson}}&lt;br /&gt;
{{FeatureInProgress|Okteta|Add array indices to structures tool|alex.richardson@gmx.de|Alex Richardson}}&lt;br /&gt;
{{FeatureDone|Umbrello|Line based diagram grid |ralf.habacker@freenet.de|Ralf Habacker}}&lt;br /&gt;
{{FeatureTodo|Umbrello| widget resize and diagram auto resize feature |ralf.habacker@freenet.de|Ralf Habacker}}&lt;br /&gt;
{{FeatureTodo|Umbrello|add spline based association lines to avoid autolayout widget/line overlapping (needs volunteers)|ralf.habacker@freenet.de|Ralf Habacker}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeutils=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|Ark|Make it possible to disable internal previewer|kde@privat.broulik.de|Kai Uwe Broulik}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Schedules/KDE4/4.10_Feature_Plan</id>
		<title>Schedules/KDE4/4.10 Feature Plan</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Schedules/KDE4/4.10_Feature_Plan"/>
				<updated>2012-10-24T10:58:19Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: add QML containment&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of planned features for the SC 4.10 release. &lt;br /&gt;
&lt;br /&gt;
See also: &lt;br /&gt;
&lt;br /&gt;
*[[Schedules/KDE4/4.10 Release Schedule]] &lt;br /&gt;
*[[Schedules/KDE4/4.9 Feature Plan]] (previous major release)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; Legend: &lt;br /&gt;
&lt;br /&gt;
*todo =&amp;amp;gt; not started yet &lt;br /&gt;
*in-progress =&amp;amp;gt; started, but not completed yet &lt;br /&gt;
*done =&amp;amp;gt; completed&lt;br /&gt;
&lt;br /&gt;
__TOC__ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdelibs =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;b&amp;gt;NO NEW FEATURES ALLOWED&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-runtime =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|kio-mtp|KIO-Slave for MTP|philschmidt@gmx.net|Philipp Schmidt}}&lt;br /&gt;
{{FeatureInProgress|QML Containments|Making it possible to do full-featured containments in QML|sebas@kde.org|Sebastian Kügler}}&lt;br /&gt;
{{FeatureInProgress|nepomuk-indexer|New Nepomuk Indexer|me@vhanda.in|Vishesh Handa}}&lt;br /&gt;
{{FeatureInProgress|nepomukbakcup|Nepomuk Backup rewritten from scratch|me@vhanda.in|Vishesh Handa}}&lt;br /&gt;
{{FeatureInProgress|nepomukcleaner|An application to port/clean invalid/legacy data in Nepomuk|me@vhanda.in|Vishesh Handa}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-workspace =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|ksmserver|Merge the new qml based screen locker|mart@kde.org|Marco Martin}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- The following section of entries has been auto generated by ChangelogGenerator. Do not edit!&lt;br /&gt;
BEGIN GENERATED SECTION --&amp;gt;&lt;br /&gt;
{{FeatureTodo|kwin|windows that are moved to another desktop should be treated as sticky windows ({{bug |213847}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Fix fullscreen state handling: NETWM says it's bound to focus and not stacking order, also see bug #224600 ({{bug |296076}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Lanczos Filter broken after screen size changes ({{bug |296065}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureInProgress|kwin|GHNS support for KWin Scripts ({{bug |296774}}, Review 104877)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|KConf Update Script for KWin 4.9 ({{bug |296775}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Request category for scripted KWin Effects on kde-(look&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;app).org ({{bug |297634}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Request category for KWin Scripts on kde-(look&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;app).org ({{bug |297635}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureInProgress|kwin|GHNS support for Window Switching Layouts ({{bug |297636}}, Review 104894)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Request category for Window Switcher Layouts on kde-(look&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;app).org ({{bug |297637}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Update Documentation for Window Switcher Layouts ({{bug |297638}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|ThumbnailItem allows upscaling of Windows ({{bug |297864}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Window Tab support for QML based Aurorae ({{bug |299138}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Increase ABI version for KDecorations ({{bug |299140}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Break NETWM to allow inner xinerama struts ({{bug |299247}})|kwin-bugs-null@kde.org}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- END GENERATED SECTION --&amp;gt;&lt;br /&gt;
{{FeatureDone|plasma-wallpapers|Color wallpaper: add listview to display thumbnails for background mode|rshah0385@kireihana.com|Reza Fatahilah Shah}}&lt;br /&gt;
{{FeatureInProgress|plasma workspace|Port Notifications applet to QML|mart@kde.org|Marco Martin}}&lt;br /&gt;
{{FeatureInProgress|plasma workspace|Port Task Manager applets to QML|hein@kde.org|Eike Hein (Sho_)}}&lt;br /&gt;
{{FeatureInProgress|plasma workspace|refresh Air Plasma theme|mart@kde.org|Marco Martin}}&lt;br /&gt;
{{FeatureInProgress|plasma workspace|Port Kickoff to qml|yellowcake-@gmx.net|Greg T}}&lt;br /&gt;
{{FeatureInProgress|systemsettings|Replace krandr KCM by libkscreen-based one|dvratil@redhat.com|Dan Vrátil}}&lt;br /&gt;
{{FeatureInProgress|plasma workspace|Port rssnow to qml|terietor@gmail.com|Giorgos Tsiapaliokas}}&lt;br /&gt;
{{FeatureInProgress|various|KActivities/SLC support for most our applications|ivan.cukic@kde.org|Ivan Čukić}}&lt;br /&gt;
{{FeatureInProgress|plasma workspace|first desktop SLC applet release|mart@kde.org|Marco Martin}}&lt;br /&gt;
{{FeatureDone|System Tray|System tray with interface in QML|dmitry.ashkadov@gmail.com|Dmitry Ashkadov}}&lt;br /&gt;
{{FeatureTodo|plasma workspace|Top-rated documents for Task Manager|ivan.cukic@kde.org|Ivan Čukić}}&lt;br /&gt;
{{FeatureInProgress|systemsettings|Keyboard layout preview|amourphious1992@gmail.com|Shivam Makkar}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-baseapps =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|FolderView|Split into PopupApplet and Containment|ignat.semenov@blue-systems.com|Ignat Semenov}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|FolderView|Port to QML|ignat.semenov@blue-systems.com|Ignat Semenov}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Dolphin|Implement files quick preview feature (named Klook)  |evgeniy.augin@osinit.ru|Evgeniy Auzhin}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|print-manager|New Print manager KCM and applet (plasmoid) replacement, using C++  |dantti12@gmail.com|Daniel Nicoletti}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Kate|Support for Python plugins|srhaque@theiet.org|Shaheed Haque}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Kate|Advanced gid(1) plugin using both ID files and etags|srhaque@theiet.org|Shaheed Haque}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Kate|As-you-type search for the search plugin|kare.sars@iki.fi|Kåre Särs}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Kate|Session name API for plugins + automatic ctags database naming|kare.sars@iki.fi|Kåre Särs}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|Kate|Add optional document &amp;quot;minimap&amp;quot; to the Symbols view plugin|kare.sars@iki.fi|Kåre Särs}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|Kate|Macro support|kdedevel@etothepiplusone.com|Simon St James}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeedu  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Marble|Have support for &amp;quot;repeatX&amp;quot; in the projection classes|rahn@kde.org|Torsten Rahn}}&lt;br /&gt;
{{FeatureTodo|Marble|Satellite Map NG|rahn@kde.org|Torsten Rahn}}&lt;br /&gt;
{{FeatureTodo|Marble|Mars &amp;amp; Venus satellite plugin|rahn@kde.org|Torsten Rahn / Gerhard Holtkamp}}&lt;br /&gt;
{{FeatureTodo|Marble|Solar Eclipse Plugin|rahn@kde.org|Torsten Rahn / Gerhard Holtkamp}}&lt;br /&gt;
{{FeatureTodo|Marble|Help Menu polishing / Support page inclusion|rahn@kde.org|Torsten Rahn}}&lt;br /&gt;
{{FeatureTodo|Marble|Toolbar polishing/refactoring|rahn@kde.org|Torsten Rahn}}&lt;br /&gt;
{{FeatureTodo|Marble|Solar Eclipse Plugin|rahn@kde.org|Torsten Rahn}}&lt;br /&gt;
{{FeatureInProgress|Marble|Worldwide hillshading|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Extended library API (no MarbleWidget dependency for tasks like parsing, routing)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Marble Touch on Plasma Active|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureInProgress|Marble|Foursquare plugin|utkuaydin34@gmail.com|Utku Aydın}}&lt;br /&gt;
{{FeatureTodo|Marble|Marble Touch on Android|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Support for loading geolocated photos (e.g. in a Gallery activity in Marble Touch)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Layer Management (by the user: Toggle layer visibility; maybe move layers from legend and layers in menus to one central place/tab)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Rocs|Journal files for projects.|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureInProgress|Rocs|Revisit graph export/import functionality to fully support: TGF, DOT, GML, GraphML|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureTodo|Rocs|Printing and image export of graphs.|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureTodo|Rocs|Data Structure Snapshot and Recovery.|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureInProgress|Rocs|Main Window UI Reorganization|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureTodo|Rocs|Visual Graph Editor Handling: copy&amp;amp;paste, data structure focus, property display|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureTodo|Rocs|Visual Graph Editor Edit Menu|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureTodo|Rocs|Code Editor Configuration Dialog|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureTodo|Rocs|Data Structure Backend wise iconsets and preconfigurations for types|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureInProgress|KTouch|Ship ktouch/next|sebastiangottfried@web.de|Sebastian Gottfried}}&lt;br /&gt;
{{FeatureDone|Analitza|New plotting framework|percy.camilo.ta@gmail.com|Percy Camilo Triveño Aucahuasi}}&lt;br /&gt;
{{FeatureDone|KAlgebra|Splitted the QML Components from KAlgebraMobile|aleixpol@kde.org|Aleix Pol Gonzalez}}&lt;br /&gt;
{{FeatureDone|KAlgebra|New plotting plasmoid graphs, in QtQuick|aleixpol@kde.org|Aleix Pol Gonzalez}}&lt;br /&gt;
{{FeatureInProgress|Pairs|Pairs Theme editor|marco.calignano@gmail.com|Marco Calignano}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdegames=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|libkdegames|[http://community.kde.org/KDE_Games/API_cleanup Major cleanup and rewrite] (done, except for the new highscore classes)&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;'''Release team:''' please link to the [[Projects/Games/Porting_to_libkdegames_v5|porting instructions]]  for third-party developers|stefan.majewsky@googlemail.com|Stefan Majewsky}}&lt;br /&gt;
{{FeatureDone|KGoldrunner|Use KGameRenderer and QGraphicsView for all graphics: the gameplay is the same as before.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KGoldrunner|Remove the status bar. All scores and status messages are in the viewport now.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Allow the displayed speed of moves to be adjusted.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Animate multi-stage moves, to make it easier for a human player to follow their progress.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Show multi-stage moves in an order that is easier to follow.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Validate the loading of saved games and report errors.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Rewrite the main AI class and make it use a true Minimax method.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Provide a choice of two AI styles, Kepler and Newton, with the possibility to add more.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Add settings to choose computer player, AI style and skill level for either or both of players 1 and 2.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KJumpingCube|Add board sizes 3x3 and 4x4, for simplified play.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureInProgress|KSudoku|Add a simple Print facility for KSudoku puzzles.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdegraphics=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|libkipi|[http://www.google-melange.com/gsoc/proposal/review/google/gsoc2012/dodonvictor/10002 Porting libkipi to KDE-XML GUI]|dodonvictor@gmail.com|Victor Dodon}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdemultimedia =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|Juk|[http://community.kde.org/Juk#Porting_plan Port Juk away from kde3support]|martin.sandsmark@kde.org|Martin Sandsmark}}&lt;br /&gt;
{{FeatureDone|Juk|Add lyrics view|martin.sandsmark@kde.org|Martin Sandsmark}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdenetwork=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdepim  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureInProgress|Facebook resource|Include it in default install|martin.klapetek@gmail.com|Martin Klapetek}}&lt;br /&gt;
{{FeatureInProgress|Akregator2|Merge in kdepim|montel@kde.org|Montel Laurent}}&lt;br /&gt;
{{FeatureInProgress|Knode|Merge in KMail|montel@kde.org|Montel Laurent}}&lt;br /&gt;
{{FeatureInProgress|BackupMail|Extend backup to all kdepim apps|montel@kde.org|Montel Laurent}}&lt;br /&gt;
{{FeatureInProgress|Sieve|Rewrite dialogbox|montel@kde.org|Montel Laurent}}&lt;br /&gt;
{{FeatureInProgress|libs|Move folderview to kdepimlibs/akonadi|montel@kde.org|Montel Laurent}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeplasma-addons =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureInProgress|Microblog|replace with QML version|sebas@kde.org|Sebastian Kügler}}&lt;br /&gt;
{{FeatureInProgress|StackFolder|Add applet for quick browse the stack of folders|ural.mullabaev@rosalab.ru|Ural Mullabaev}}&lt;br /&gt;
{{FeatureInProgress|ComicStrip|Replace with QML version|rshah0385@kireihana.com|Reza Fatahilah Shah}}&lt;br /&gt;
{{FeatureInProgress|Calculator|Replace with QML version|luizromario@gmail.com|Luiz Romário Santana Rios}}&lt;br /&gt;
{{FeatureDone|QML Wallpapers|Make it possible to have animated wallpapers written in QtQuick technologies.|aleixpol@blue-systems.com|Aleix Pol Gonzalez}}&lt;br /&gt;
{{FeatureDone|Dictionary KRunner|Look up words in the dictionary by typing in 'define {word}' in krunner.|Jason@zx2c4.com|Jason A. Donenfeld}}&lt;br /&gt;
{{FeatureInProgress|Calculator|replace with QML version|bettio@kde.org|Davide Bettio}}&lt;br /&gt;
{{FeatureInProgress|Eyes|replace with QML version|bettio@kde.org|Davide Bettio}}&lt;br /&gt;
{{FeatureInProgress|FifteenPuzzle|replace with QML version|bettio@kde.org|Davide Bettio}}&lt;br /&gt;
{{FeatureInProgress|Luna|replace with QML version|bettio@kde.org|Davide Bettio}}&lt;br /&gt;
{{FeatureInProgress|Timer|replace with QML version|bettio@kde.org|Davide Bettio}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdesdk  =&lt;br /&gt;
&lt;br /&gt;
{| cellspa/cing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|Okteta|Add a general KPart adapter to Kasten, than finish port of Okteta KPart to Okteta Kasten|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add global toggle option for the offset display, hex or decimal|kossebau@kde.org|Friedrich W. H. Kossebau}} &lt;br /&gt;
{{FeatureTodo|Okteta|Add Kate-like combined dialogs to query for actions on files|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add Kate-like search tool|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add Okular like embedded notifications|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for import by drop, both url and data|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for memory mapping of files and 64-bit addressing|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for jobs like io, printing, string search or filter|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|copy again puts also a value or char variant of the data to clipboard|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Improve the titels of the changes to the bytearray to be more descriptive, best using ids to avoid text string|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Make all user interaction in the KastenCore managers plugin-based|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Merge row and column widgets into one|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Store bookmarks|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Store bookmarks and other view settings for next load|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add custom datatypes to structures tool|alex.richardson@gmx.de|Alex Richardson}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeutils=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Schedules/KDE4/4.9_Feature_Plan</id>
		<title>Schedules/KDE4/4.9 Feature Plan</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Schedules/KDE4/4.9_Feature_Plan"/>
				<updated>2012-05-03T17:39:15Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: thumbnails done&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of planned features for the SC 4.9 release. &lt;br /&gt;
&lt;br /&gt;
See also: &lt;br /&gt;
&lt;br /&gt;
*[[Schedules/KDE4/4.9 Release Schedule]] &lt;br /&gt;
*[[Schedules/KDE4/4.8 Feature Plan]] (previous major release)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; Legend: &lt;br /&gt;
&lt;br /&gt;
*todo =&amp;amp;gt; not started yet &lt;br /&gt;
*in-progress =&amp;amp;gt; started, but not completed yet &lt;br /&gt;
*done =&amp;amp;gt; completed&lt;br /&gt;
&lt;br /&gt;
__TOC__ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdelibs =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureDone|KGlobalSettings|Make KGlobalSettings reread locale settings before calling settingsChanged().|lamarque@kde.org|Lamarque V. Souza}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-runtime =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Thumbnail|fix for bookmarks|sebas@kde.org|Sebastian Kügler}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-workspace =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureDone|ksmserver|Port shutdown dialog to QML|lamarque@kde.org|Lamarque V. Souza}}&lt;br /&gt;
{{FeatureInProgress|ksmserver|Merge the new qml based screen locker|mart@kde.org|Marco Martin}}&lt;br /&gt;
{{FeatureInProgress|plasma|MPRIS2 dataengine|alex.merry@kdemail.net|Alex Merry}}&lt;br /&gt;
&amp;lt;!-- The following section of entries has been auto generated by ChangelogGenerator. Do not edit!&lt;br /&gt;
BEGIN GENERATED SECTION --&amp;gt;&lt;br /&gt;
{{FeatureTodo|kwin|&amp;quot;Move&amp;quot; command should allow off-screen window moving same as Alt + click trick (Bug 229942)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Quick Tile shortcuts should be toggle buttons (Bug 263755)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Display application menu and title bar side by side for maximized windows (Bug 102607)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Insufficient stacking order handling for deleted windows (Bug 158262)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|No reason given why some desktop effects cannot be activated (Bug 209213)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Add support for appmenu-qt (Bug 266596)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Placement Policy 'under mouse' (Bug 272162)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Kill helper should be out of process (Bug 295940)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Decoration KCM should show comment for decoration (Bug 296041)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Lanczos Filter broken after screen size changes (Bug 296065)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|DesktopThumbnailItem for QML (Bug 296067)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Packages for Desktop Switching Layouts (Bug 296068)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Walk Through Desktop layout rendering desktop previews (Bug 296069)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Move ThumbnailBar from BoxSwitch to CoverSwitch (Bug 296070)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Drop BoxSwitch effect (Bug 296071)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Different binary name for KWin Active (Bug 296084)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Import Scripted Effect from All Effets Tab (Bug 296772)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|GHNS support for Scripted Effects (Bug 296773)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|GHNS support for KWin Scripts (Bug 296774)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|KConf Update Script for KWin 4.9 (Bug 296775)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Long caption in Thumbnail layout overlaps box for only one item (Bug 297028)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Request category for scripted KWin Effects on kde-(look&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;app).org (Bug 297634)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Request category for KWin Scripts on kde-(look&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;app).org (Bug 297635)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|GHNS support for Window Switching Layouts (Bug 297636)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Request category for Window Switcher Layouts on kde-(look&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;app).org (Bug 297637)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Update Documentation for Window Switcher Layouts (Bug 297638)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Window Switcher KCM needs to be reworked (Bug 297639)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Document global JavaScript methods in KWin Scripting API documentation (Bug 297640)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Partial port to xcb|fredrik@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|JJ: kwin fulscreen / un-fullscreen system notifications (Bug 124612)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|JJ: Use arrow keys to control cover switch. (Bug 178595)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Change title of menu item &amp;quot;Configure window behaviour...&amp;quot; (Bug 249486)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Task switcher message when no windows looks ugly with stars (Bug 260938)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|JJ: Synchronize Show Desktop wording in all tabbox effects (Bug 273478)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Window Specific Settings dialog has no help function (Bug 286783)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Add &amp;quot;Present Windows - Window Class&amp;quot; to &amp;quot;Screen Edges&amp;quot; functions (Bug 288960)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|[JJ] Select next window with arrow key in Alt+Tab (Bug 291916)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Synchronize user actions menu with libtaskmanager (Bug 296056)|kwin-bugs-null@kde.org}}&lt;br /&gt;
&amp;lt;!-- END GENERATED SECTION --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-baseapps =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|FolderView|Refactor into PopupApplet and Containment|ignat.semenov@blue-systems.com|Ignat Semenov}}&lt;br /&gt;
{{FeatureDone|Dolphin|Allow to show any kind of metadata like ratings, tags, comments, image-sizes, music-artist, ... beside each item of the view.|peter.penz19@gmail.com|Peter Penz}}&lt;br /&gt;
{{FeatureDone|Dolphin|Use KMessageWidget for information- and error-messages (see http://agateau.com/2011/04/21/kde-ux-2011/ for details)|peter.penz19@gmail.com|Peter Penz}}&lt;br /&gt;
{{FeatureDone|Dolphin|Optionally remember the column-widths of the details view|peter.penz19@gmail.com|Peter Penz}}&lt;br /&gt;
{{FeatureDone|Dolphin|Allow to disable the expandable folders of the details view|peter.penz19@gmail.com|Peter Penz}}&lt;br /&gt;
{{FeatureDone|Dolphin|Implement inline renaming for the new view-engine|peter.penz19@gmail.com|Peter Penz}}&lt;br /&gt;
{{FeatureDone|Dolphin|Allow to optionally set a maximum number of lines for the icons-view|peter.penz19@gmail.com|Peter Penz}}&lt;br /&gt;
{{FeatureTodo|Dolphin|Implement files quick preview feature (named Klook)  |evgeniy.augin@osinit.ru|Evgeniy Auzhin}}&lt;br /&gt;
{{FeatureTodo|Konsole|Add command line options for controlling the visibility of menubar and tabbar|adaptee@gmail.com|Jekyll Wu}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeedu  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|Marble|Worldwide hillshading|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Extended library API (no MarbleWidget dependency for tasks like parsing, routing)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Marble Touch on Plasma Active|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Marble Touch on Android|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Support for loading geolocated photos (e.g. in a Gallery activity in Marble Touch)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Layer Management (by the user: Toggle layer visibility; maybe move layers from legend and layers in menus to one central place/tab)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureDone|Rocs|Project Files to combine graphs and algorithms|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureDone|Rocs|Extend graph data structure to support overlay graphs|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureDone|Rocs|Stepped execution of algorithms|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureInProgress|Rocs|General unit test cleanup and overhauling|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureTodo|Rocs|New Project Wizard - guided creation based on loaded plugins|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureInProgress|Rocs|Project journal files|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureInProgress|Rocs|New Add-Node/Add-Link Toolbar for data types and pointer types|rocs-devel@kde.org|Rocs Developers}}&lt;br /&gt;
{{FeatureTodo|Kig|Improve Cancel Construction and Undo actions|david.narvaez@computer.org|David E. Narváez}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdegames=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|libkdegames|[http://community.kde.org/Games/API_cleanup Major cleanup and rewrite] (done, except for the new highscore classes)|stefan.majewsky@googlemail.com|Stefan Majewsky}}&lt;br /&gt;
{{FeatureTodo|Granatier|improve config UI for player and arena selection|m-hias@gmx.de|Mathias Kraus}}&lt;br /&gt;
{{FeatureDone|Kajongg|tooltips giving playings hints|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureDone|Kajongg|new config option: propose what to do|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureDone|Kajongg|make it possible to replay a game from a screen shot (for better debugging)|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureDone|Kajongg|improve Robot AI|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureDone|Kajongg|Add default voices|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureDone|Kajongg|Players can chat with each other from within kajongg|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureDone|Kajongg|Define a central game server, making it easier to play over the internet (no more tweaking of firewalls for the server side)|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureInProgress|Kajongg|Add support for other rule variants, starting with Classical Chinese variants|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureTodo|Kajongg|Print rulesets, also more than one in parallel for comparisons|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureDone|KGoldrunner|Add the Gold Rush II championship game (20 levels), contributed by Gabriel Miltschitzky|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KGoldrunner|Add solution files to some KGoldrunner games, possibly using Get Hot New Stuff|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KSudoku|Simplify the XML descriptions of puzzle shapes|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KSudoku|Add XML and Desktop files for seven new two-dimensional puzzle shapes|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KSudoku|Add XML and Desktop files for three new three-dimensional puzzle shapes|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KSudoku|Improve the quality and relevance of KSudoku hints|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KSudoku|Make Load and Save work correctly for all puzzle types, including display of small markers/notes and restart of the puzzle clock from a saved value|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KSudoku|Integrate the new generator/solver and the old KSudoku code more closely|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KSudoku|Make puzzle features easier to see and use by improving highlighting, control and settings in both 2-D and 3-D puzzles and adding keyboard input to 3-D puzzles|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdegraphics=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Gwenview|Fullscreen browse|agateau@kde.org|Aurélien Gâteau}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdemultimedia =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|JuK|last.fm scrobbling|martin.sandsmark@kde.org|Martin Sandsmark}}&lt;br /&gt;
{{FeatureDone|JuK|cover-fetching from last.fm|martin.sandsmark@kde.org|Martin Sandsmark}}&lt;br /&gt;
{{FeatureInProgress|JuK|MPRIS2 support|alex.merry@kmail.net|Alex Merry}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdenetwork=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureDone|Kopete|Add option to group all offline users into a &amp;quot;Offline Users&amp;quot; group|kopete-devel@kde.org|Kopete Developers}}&lt;br /&gt;
{{FeatureDone|Kopete|Show contact's status change in chat window|igor.poboiko@gmail.com|Igor Poboiko}}&lt;br /&gt;
{{FeatureDone|Kopete|Add context option &amp;quot;rename&amp;quot; to contacts and allow changing custom display name inline.|kopete-devel@kde.org|Kopete Developers}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdepim  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Akonadi Google Resources|Move contacts and calendars resources from Akonadi Google project to kdepim-runtime|dan@progdan.cz|Dan Vratil}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|KTnef|Bring back KTnef from the KDE3 days. KTnef is a standalone TNEF attachment viewer|winter@kde.org|Allen Winter}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Akonadi Kolab Resources|Kolab resource using the Kolab libraries to kdepim-runtime|chrigi_1@fastmail.fm|Christian Mollekopf}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Extend Akonotes Format|Extend the akonotes format to support features required by zanshin and kolab|chrigi_1@fastmail.fm|Christian Mollekopf}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeplasma-addons =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureInProgress|Now Playing|replace with QML version|alex.merry@kdemail.net|Alex Merry}}&lt;br /&gt;
{{FeatureInProgress|Microblog|replace with QML version|sebas@kde.org|Sebastian Kügler}}&lt;br /&gt;
{{FeatureInProgress|StackFolder|Add applet for quick browse the stack of folders|ural.mullabaev@rosalab.ru|Ural Mullabaev}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdesdk  =&lt;br /&gt;
&lt;br /&gt;
{| cellspa/cing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|Okteta|Add a general KPart adapter to Kasten, than finish port of Okteta KPart to Okteta Kasten|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add global toggle option for the offset display, hex or decimal|kossebau@kde.org|Friedrich W. H. Kossebau}} &lt;br /&gt;
{{FeatureTodo|Okteta|Add Kate-like combined dialogs to query for actions on files|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add Kate-like search tool|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add Okular like embedded notifications|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for import by drop, both url and data|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for memory mapping of files and 64-bit addressing|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for jobs like io, printing, string search or filter|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add view profiles, incl. editor/manager|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|copy again puts also a value or char variant of the data to clipboard|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Improve the titels of the changes to the bytearray to be more descriptive, best using ids to avoid text string|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Make all user interaction in the KastenCore managers plugin-based|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Merge row and column widgets into one|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Store bookmarks|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Store bookmarks and other view settings for next load|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add custom datatypes to structures tool|alex.richardson@gmx.de|Alex Richardson}}&lt;br /&gt;
{{FeatureDone|Lokalize|Optimize TM fuzzy searching||Nick Shaforostoff}}&lt;br /&gt;
{{FeatureDone|Lokalize|File search tab||Nick Shaforostoff}}&lt;br /&gt;
{{FeatureTodo|Lokalize|.ts support||Nick Shaforostoff}}&lt;br /&gt;
{{FeatureInProgress|Umbrello|diagram auto layout support|ralf.habacker@freenet.de|Ralf Habacker}}&lt;br /&gt;
{{FeatureInProgress|Umbrello|diagram graphviz dot export |ralf.habacker@freenet.de|Ralf Habacker}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeutils=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Schedules/KDE4/4.9_Feature_Plan</id>
		<title>Schedules/KDE4/4.9 Feature Plan</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Schedules/KDE4/4.9_Feature_Plan"/>
				<updated>2012-05-03T11:09:48Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: add boookmarks thumbs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of planned features for the SC 4.9 release. &lt;br /&gt;
&lt;br /&gt;
See also: &lt;br /&gt;
&lt;br /&gt;
*[[Schedules/KDE4/4.9 Release Schedule]] &lt;br /&gt;
*[[Schedules/KDE4/4.8 Feature Plan]] (previous major release)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; Legend: &lt;br /&gt;
&lt;br /&gt;
*todo =&amp;amp;gt; not started yet &lt;br /&gt;
*in-progress =&amp;amp;gt; started, but not completed yet &lt;br /&gt;
*done =&amp;amp;gt; completed&lt;br /&gt;
&lt;br /&gt;
__TOC__ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdelibs =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureDone|KGlobalSettings|Make KGlobalSettings reread locale settings before calling settingsChanged().|lamarque@kde.org|Lamarque V. Souza}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-runtime =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|Thumbnail|fix for bookmarks|sebas@kde.org|Sebastian Kügler}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-workspace =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureDone|ksmserver|Port shutdown dialog to QML|lamarque@kde.org|Lamarque V. Souza}}&lt;br /&gt;
{{FeatureInProgress|plasma|MPRIS2 dataengine|alex.merry@kdemail.net|Alex Merry}}&lt;br /&gt;
&amp;lt;!-- The following section of entries has been auto generated by ChangelogGenerator. Do not edit!&lt;br /&gt;
BEGIN GENERATED SECTION --&amp;gt;&lt;br /&gt;
{{FeatureTodo|kwin|&amp;quot;Move&amp;quot; command should allow off-screen window moving same as Alt + click trick (Bug 229942)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Quick Tile shortcuts should be toggle buttons (Bug 263755)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Display application menu and title bar side by side for maximized windows (Bug 102607)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Insufficient stacking order handling for deleted windows (Bug 158262)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|No reason given why some desktop effects cannot be activated (Bug 209213)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Add support for appmenu-qt (Bug 266596)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Placement Policy 'under mouse' (Bug 272162)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Kill helper should be out of process (Bug 295940)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Decoration KCM should show comment for decoration (Bug 296041)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Lanczos Filter broken after screen size changes (Bug 296065)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|DesktopThumbnailItem for QML (Bug 296067)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Packages for Desktop Switching Layouts (Bug 296068)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Walk Through Desktop layout rendering desktop previews (Bug 296069)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Move ThumbnailBar from BoxSwitch to CoverSwitch (Bug 296070)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Drop BoxSwitch effect (Bug 296071)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Different binary name for KWin Active (Bug 296084)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Import Scripted Effect from All Effets Tab (Bug 296772)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|GHNS support for Scripted Effects (Bug 296773)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|GHNS support for KWin Scripts (Bug 296774)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|KConf Update Script for KWin 4.9 (Bug 296775)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Long caption in Thumbnail layout overlaps box for only one item (Bug 297028)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Request category for scripted KWin Effects on kde-(look&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;app).org (Bug 297634)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Request category for KWin Scripts on kde-(look&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;app).org (Bug 297635)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|GHNS support for Window Switching Layouts (Bug 297636)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Request category for Window Switcher Layouts on kde-(look&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;app).org (Bug 297637)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Update Documentation for Window Switcher Layouts (Bug 297638)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Window Switcher KCM needs to be reworked (Bug 297639)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Document global JavaScript methods in KWin Scripting API documentation (Bug 297640)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|JJ: kwin fulscreen / un-fullscreen system notifications (Bug 124612)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|JJ: Use arrow keys to control cover switch. (Bug 178595)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Change title of menu item &amp;quot;Configure window behaviour...&amp;quot; (Bug 249486)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Task switcher message when no windows looks ugly with stars (Bug 260938)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|JJ: Synchronize Show Desktop wording in all tabbox effects (Bug 273478)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Window Specific Settings dialog has no help function (Bug 286783)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Add &amp;quot;Present Windows - Window Class&amp;quot; to &amp;quot;Screen Edges&amp;quot; functions (Bug 288960)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|[JJ] Select next window with arrow key in Alt+Tab (Bug 291916)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Synchronize user actions menu with libtaskmanager (Bug 296056)|kwin-bugs-null@kde.org}}&lt;br /&gt;
&amp;lt;!-- END GENERATED SECTION --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-baseapps =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|FolderView|Refactor into PopupApplet and Containment|ignat.semenov@blue-systems.com|Ignat Semenov}}&lt;br /&gt;
{{FeatureInProgress|Dolphin|Allow to show any kind of metadata like ratings, tags, comments, image-sizes, music-artist, ... beside each item of the view.|peter.penz19@gmail.com|Peter Penz}}&lt;br /&gt;
{{FeatureInProgress|Dolphin|Use KMessageWidget for information- and error-messages (see http://agateau.com/2011/04/21/kde-ux-2011/ for details)|peter.penz19@gmail.com|Peter Penz}}&lt;br /&gt;
{{FeatureDone|Dolphin|Optionally remember the column-widths of the details view|peter.penz19@gmail.com|Peter Penz}}&lt;br /&gt;
{{FeatureDone|Dolphin|Allow to disable the expandable folders of the details view|peter.penz19@gmail.com|Peter Penz}}&lt;br /&gt;
{{FeatureTodo|Dolphin|Implement inline renaming for the new view-engine|peter.penz19@gmail.com|Peter Penz}}&lt;br /&gt;
{{FeatureDone|Dolphin|Allow to optionally set a maximum number of lines for the icons-view|peter.penz19@gmail.com|Peter Penz}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeedu  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|Marble|Worldwide hillshading|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Extended library API (no MarbleWidget dependency for tasks like parsing, routing)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Marble Touch on Plasma Active|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Marble Touch on Android|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Support for loading geolocated photos (e.g. in a Gallery activity in Marble Touch)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Layer Management (by the user: Toggle layer visibility; maybe move layers from legend and layers in menus to one central place/tab)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureDone|Rocs|Project Files to combine graphs and algorithms|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureDone|Rocs|Extend graph data structure to support overlay graphs|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureDone|Rocs|Stepped execution of algorithms|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureInProgress|Rocs|General unit test cleanup and overhauling|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureTodo|Rocs|New Project Wizard - guided creation based on loaded plugins|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureInProgress|Rocs|Project journal files|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureInProgress|Rocs|New Add-Node/Add-Link Toolbar for data types and pointer types|rocs-devel@kde.org|Rocs Developers}}&lt;br /&gt;
{{FeatureTodo|Kig|Improve Cancel Construction and Undo actions|david.narvaez@computer.org|David E. Narváez}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdegames=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|libkdegames|[http://community.kde.org/Games/API_cleanup Major cleanup and rewrite] (done, except for the new highscore classes)|stefan.majewsky@googlemail.com|Stefan Majewsky}}&lt;br /&gt;
{{FeatureTodo|Granatier|improve config UI for player and arena selection|m-hias@gmx.de|Mathias Kraus}}&lt;br /&gt;
{{FeatureDone|Kajongg|tooltips giving playings hints|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureDone|Kajongg|new config option: propose what to do|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureDone|Kajongg|make it possible to replay a game from a screen shot (for better debugging)|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureDone|Kajongg|improve Robot AI|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureDone|Kajongg|Add default voices|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureDone|Kajongg|Players can chat with each other from within kajongg|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureDone|Kajongg|Define a central game server, making it easier to play over the internet (no more tweaking of firewalls for the server side)|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureInProgress|Kajongg|Add support for other rule variants, starting with Classical Chinese variants|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureTodo|Kajongg|Print rulesets, also more than one in parallel for comparisons|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureDone|KGoldrunner|Add the Gold Rush II championship game (20 levels), contributed by Gabriel Miltschitzky|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KGoldrunner|Add solution files to some KGoldrunner games, possibly using Get Hot New Stuff|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KSudoku|Simplify the XML descriptions of puzzle shapes|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KSudoku|Add XML and Desktop files for seven new two-dimensional puzzle shapes|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KSudoku|Add XML and Desktop files for three new three-dimensional puzzle shapes|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KSudoku|Improve the quality and relevance of KSudoku hints|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KSudoku|Make Load and Save work correctly for all puzzle types, including display of small markers/notes and restart of the puzzle clock from a saved value|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KSudoku|Integrate the new generator/solver and the old KSudoku code more closely|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KSudoku|Make puzzle features easier to see and use by improving highlighting, control and settings in both 2-D and 3-D puzzles and adding keyboard input to 3-D puzzles|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdegraphics=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Gwenview|Fullscreen browse|agateau@kde.org|Aurélien Gâteau}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdemultimedia =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|JuK|last.fm scrobbling|martin.sandsmark@kde.org|Martin Sandsmark}}&lt;br /&gt;
{{FeatureDone|JuK|cover-fetching from last.fm|martin.sandsmark@kde.org|Martin Sandsmark}}&lt;br /&gt;
{{FeatureInProgress|JuK|MPRIS2 support|alex.merry@kmail.net|Alex Merry}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdenetwork=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureDone|Kopete|Add option to group all offline users into a &amp;quot;Offline Users&amp;quot; group|kopete-devel@kde.org|Kopete Developers}}&lt;br /&gt;
{{FeatureDone|Kopete|Show contact's status change in chat window|igor.poboiko@gmail.com|Igor Poboiko}}&lt;br /&gt;
{{FeatureDone|Kopete|Add context option &amp;quot;rename&amp;quot; to contacts and allow changing custom display name inline.|kopete-devel@kde.org|Kopete Developers}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdepim  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Akonadi Google Resources|Move contacts and calendars resources from Akonadi Google project to kdepim-runtime|dan@progdan.cz|Dan Vratil}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|KTnef|Bring back KTnef from the KDE3 days. KTnef is a standalone TNEF attachment viewer|winter@kde.org|Allen Winter}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Akonadi Kolab Resources|Kolab resource using the Kolab libraries to kdepim-runtime|chrigi_1@fastmail.fm|Christian Mollekopf}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Extend Akonotes Format|Extend the akonotes format to support features required by zanshin and kolab|chrigi_1@fastmail.fm|Christian Mollekopf}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeplasma-addons =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureInProgress|Now Playing|replace with QML version|alex.merry@kdemail.net|Alex Merry}}&lt;br /&gt;
{{FeatureInProgress|Microblog|replace with QML version|sebas@kde.org|Sebastian Kügler}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdesdk  =&lt;br /&gt;
&lt;br /&gt;
{| cellspa/cing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|Okteta|Add a general KPart adapter to Kasten, than finish port of Okteta KPart to Okteta Kasten|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add global toggle option for the offset display, hex or decimal|kossebau@kde.org|Friedrich W. H. Kossebau}} &lt;br /&gt;
{{FeatureTodo|Okteta|Add Kate-like combined dialogs to query for actions on files|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add Kate-like search tool|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add Okular like embedded notifications|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for import by drop, both url and data|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for memory mapping of files and 64-bit addressing|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for jobs like io, printing, string search or filter|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add view profiles, incl. editor/manager|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|copy again puts also a value or char variant of the data to clipboard|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Improve the titels of the changes to the bytearray to be more descriptive, best using ids to avoid text string|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Make all user interaction in the KastenCore managers plugin-based|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Merge row and column widgets into one|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Store bookmarks|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Store bookmarks and other view settings for next load|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add custom datatypes to structures tool|alex.richardson@gmx.de|Alex Richardson}}&lt;br /&gt;
{{FeatureDone|Lokalize|Optimize TM fuzzy searching||Nick Shaforostoff}}&lt;br /&gt;
{{FeatureDone|Lokalize|File search tab||Nick Shaforostoff}}&lt;br /&gt;
{{FeatureTodo|Lokalize|.ts support||Nick Shaforostoff}}&lt;br /&gt;
{{FeatureInProgress|Umbrello|diagram auto layout support|ralf.habacker@freenet.de|Ralf Habacker}}&lt;br /&gt;
{{FeatureInProgress|Umbrello|diagram graphviz dot export |ralf.habacker@freenet.de|Ralf Habacker}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeutils=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Schedules/KDE4/4.9_Feature_Plan</id>
		<title>Schedules/KDE4/4.9 Feature Plan</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Schedules/KDE4/4.9_Feature_Plan"/>
				<updated>2012-05-03T11:08:45Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: add microblog qml&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of planned features for the SC 4.9 release. &lt;br /&gt;
&lt;br /&gt;
See also: &lt;br /&gt;
&lt;br /&gt;
*[[Schedules/KDE4/4.9 Release Schedule]] &lt;br /&gt;
*[[Schedules/KDE4/4.8 Feature Plan]] (previous major release)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; Legend: &lt;br /&gt;
&lt;br /&gt;
*todo =&amp;amp;gt; not started yet &lt;br /&gt;
*in-progress =&amp;amp;gt; started, but not completed yet &lt;br /&gt;
*done =&amp;amp;gt; completed&lt;br /&gt;
&lt;br /&gt;
__TOC__ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdelibs =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureDone|KGlobalSettings|Make KGlobalSettings reread locale settings before calling settingsChanged().|lamarque@kde.org|Lamarque V. Souza}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-runtime =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-workspace =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureDone|ksmserver|Port shutdown dialog to QML|lamarque@kde.org|Lamarque V. Souza}}&lt;br /&gt;
{{FeatureInProgress|plasma|MPRIS2 dataengine|alex.merry@kdemail.net|Alex Merry}}&lt;br /&gt;
&amp;lt;!-- The following section of entries has been auto generated by ChangelogGenerator. Do not edit!&lt;br /&gt;
BEGIN GENERATED SECTION --&amp;gt;&lt;br /&gt;
{{FeatureTodo|kwin|&amp;quot;Move&amp;quot; command should allow off-screen window moving same as Alt + click trick (Bug 229942)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Quick Tile shortcuts should be toggle buttons (Bug 263755)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Display application menu and title bar side by side for maximized windows (Bug 102607)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Insufficient stacking order handling for deleted windows (Bug 158262)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|No reason given why some desktop effects cannot be activated (Bug 209213)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Add support for appmenu-qt (Bug 266596)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Placement Policy 'under mouse' (Bug 272162)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Kill helper should be out of process (Bug 295940)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Decoration KCM should show comment for decoration (Bug 296041)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Lanczos Filter broken after screen size changes (Bug 296065)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|DesktopThumbnailItem for QML (Bug 296067)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Packages for Desktop Switching Layouts (Bug 296068)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Walk Through Desktop layout rendering desktop previews (Bug 296069)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Move ThumbnailBar from BoxSwitch to CoverSwitch (Bug 296070)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Drop BoxSwitch effect (Bug 296071)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Different binary name for KWin Active (Bug 296084)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Import Scripted Effect from All Effets Tab (Bug 296772)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|GHNS support for Scripted Effects (Bug 296773)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|GHNS support for KWin Scripts (Bug 296774)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|KConf Update Script for KWin 4.9 (Bug 296775)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Long caption in Thumbnail layout overlaps box for only one item (Bug 297028)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Request category for scripted KWin Effects on kde-(look&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;app).org (Bug 297634)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Request category for KWin Scripts on kde-(look&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;app).org (Bug 297635)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|GHNS support for Window Switching Layouts (Bug 297636)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Request category for Window Switcher Layouts on kde-(look&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;app).org (Bug 297637)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Update Documentation for Window Switcher Layouts (Bug 297638)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Window Switcher KCM needs to be reworked (Bug 297639)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureTodo|kwin|Document global JavaScript methods in KWin Scripting API documentation (Bug 297640)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|JJ: kwin fulscreen / un-fullscreen system notifications (Bug 124612)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|JJ: Use arrow keys to control cover switch. (Bug 178595)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Change title of menu item &amp;quot;Configure window behaviour...&amp;quot; (Bug 249486)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Task switcher message when no windows looks ugly with stars (Bug 260938)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|JJ: Synchronize Show Desktop wording in all tabbox effects (Bug 273478)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Window Specific Settings dialog has no help function (Bug 286783)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Add &amp;quot;Present Windows - Window Class&amp;quot; to &amp;quot;Screen Edges&amp;quot; functions (Bug 288960)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|[JJ] Select next window with arrow key in Alt+Tab (Bug 291916)|kwin-bugs-null@kde.org}}&lt;br /&gt;
{{FeatureDone|kwin|Synchronize user actions menu with libtaskmanager (Bug 296056)|kwin-bugs-null@kde.org}}&lt;br /&gt;
&amp;lt;!-- END GENERATED SECTION --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-baseapps =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|FolderView|Refactor into PopupApplet and Containment|ignat.semenov@blue-systems.com|Ignat Semenov}}&lt;br /&gt;
{{FeatureInProgress|Dolphin|Allow to show any kind of metadata like ratings, tags, comments, image-sizes, music-artist, ... beside each item of the view.|peter.penz19@gmail.com|Peter Penz}}&lt;br /&gt;
{{FeatureInProgress|Dolphin|Use KMessageWidget for information- and error-messages (see http://agateau.com/2011/04/21/kde-ux-2011/ for details)|peter.penz19@gmail.com|Peter Penz}}&lt;br /&gt;
{{FeatureDone|Dolphin|Optionally remember the column-widths of the details view|peter.penz19@gmail.com|Peter Penz}}&lt;br /&gt;
{{FeatureDone|Dolphin|Allow to disable the expandable folders of the details view|peter.penz19@gmail.com|Peter Penz}}&lt;br /&gt;
{{FeatureTodo|Dolphin|Implement inline renaming for the new view-engine|peter.penz19@gmail.com|Peter Penz}}&lt;br /&gt;
{{FeatureDone|Dolphin|Allow to optionally set a maximum number of lines for the icons-view|peter.penz19@gmail.com|Peter Penz}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeedu  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|Marble|Worldwide hillshading|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Extended library API (no MarbleWidget dependency for tasks like parsing, routing)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Marble Touch on Plasma Active|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Marble Touch on Android|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Support for loading geolocated photos (e.g. in a Gallery activity in Marble Touch)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureTodo|Marble|Layer Management (by the user: Toggle layer visibility; maybe move layers from legend and layers in menus to one central place/tab)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureDone|Rocs|Project Files to combine graphs and algorithms|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureDone|Rocs|Extend graph data structure to support overlay graphs|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureDone|Rocs|Stepped execution of algorithms|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureInProgress|Rocs|General unit test cleanup and overhauling|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureTodo|Rocs|New Project Wizard - guided creation based on loaded plugins|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureInProgress|Rocs|Project journal files|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureInProgress|Rocs|New Add-Node/Add-Link Toolbar for data types and pointer types|rocs-devel@kde.org|Rocs Developers}}&lt;br /&gt;
{{FeatureTodo|Kig|Improve Cancel Construction and Undo actions|david.narvaez@computer.org|David E. Narváez}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdegames=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|libkdegames|[http://community.kde.org/Games/API_cleanup Major cleanup and rewrite] (done, except for the new highscore classes)|stefan.majewsky@googlemail.com|Stefan Majewsky}}&lt;br /&gt;
{{FeatureTodo|Granatier|improve config UI for player and arena selection|m-hias@gmx.de|Mathias Kraus}}&lt;br /&gt;
{{FeatureDone|Kajongg|tooltips giving playings hints|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureDone|Kajongg|new config option: propose what to do|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureDone|Kajongg|make it possible to replay a game from a screen shot (for better debugging)|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureDone|Kajongg|improve Robot AI|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureDone|Kajongg|Add default voices|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureDone|Kajongg|Players can chat with each other from within kajongg|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureDone|Kajongg|Define a central game server, making it easier to play over the internet (no more tweaking of firewalls for the server side)|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureInProgress|Kajongg|Add support for other rule variants, starting with Classical Chinese variants|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureTodo|Kajongg|Print rulesets, also more than one in parallel for comparisons|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureDone|KGoldrunner|Add the Gold Rush II championship game (20 levels), contributed by Gabriel Miltschitzky|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KGoldrunner|Add solution files to some KGoldrunner games, possibly using Get Hot New Stuff|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KSudoku|Simplify the XML descriptions of puzzle shapes|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KSudoku|Add XML and Desktop files for seven new two-dimensional puzzle shapes|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KSudoku|Add XML and Desktop files for three new three-dimensional puzzle shapes|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KSudoku|Improve the quality and relevance of KSudoku hints|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KSudoku|Make Load and Save work correctly for all puzzle types, including display of small markers/notes and restart of the puzzle clock from a saved value|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KSudoku|Integrate the new generator/solver and the old KSudoku code more closely|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureDone|KSudoku|Make puzzle features easier to see and use by improving highlighting, control and settings in both 2-D and 3-D puzzles and adding keyboard input to 3-D puzzles|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdegraphics=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Gwenview|Fullscreen browse|agateau@kde.org|Aurélien Gâteau}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdemultimedia =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|JuK|last.fm scrobbling|martin.sandsmark@kde.org|Martin Sandsmark}}&lt;br /&gt;
{{FeatureDone|JuK|cover-fetching from last.fm|martin.sandsmark@kde.org|Martin Sandsmark}}&lt;br /&gt;
{{FeatureInProgress|JuK|MPRIS2 support|alex.merry@kmail.net|Alex Merry}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdenetwork=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureDone|Kopete|Add option to group all offline users into a &amp;quot;Offline Users&amp;quot; group|kopete-devel@kde.org|Kopete Developers}}&lt;br /&gt;
{{FeatureDone|Kopete|Show contact's status change in chat window|igor.poboiko@gmail.com|Igor Poboiko}}&lt;br /&gt;
{{FeatureDone|Kopete|Add context option &amp;quot;rename&amp;quot; to contacts and allow changing custom display name inline.|kopete-devel@kde.org|Kopete Developers}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdepim  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Akonadi Google Resources|Move contacts and calendars resources from Akonadi Google project to kdepim-runtime|dan@progdan.cz|Dan Vratil}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|KTnef|Bring back KTnef from the KDE3 days. KTnef is a standalone TNEF attachment viewer|winter@kde.org|Allen Winter}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Akonadi Kolab Resources|Kolab resource using the Kolab libraries to kdepim-runtime|chrigi_1@fastmail.fm|Christian Mollekopf}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo|Extend Akonotes Format|Extend the akonotes format to support features required by zanshin and kolab|chrigi_1@fastmail.fm|Christian Mollekopf}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeplasma-addons =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureInProgress|Now Playing|replace with QML version|alex.merry@kdemail.net|Alex Merry}}&lt;br /&gt;
{{FeatureInProgress|Microblog|replace with QML version|sebas@kde.org|Sebastian Kügler}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdesdk  =&lt;br /&gt;
&lt;br /&gt;
{| cellspa/cing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|Okteta|Add a general KPart adapter to Kasten, than finish port of Okteta KPart to Okteta Kasten|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add global toggle option for the offset display, hex or decimal|kossebau@kde.org|Friedrich W. H. Kossebau}} &lt;br /&gt;
{{FeatureTodo|Okteta|Add Kate-like combined dialogs to query for actions on files|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add Kate-like search tool|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add Okular like embedded notifications|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for import by drop, both url and data|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for memory mapping of files and 64-bit addressing|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for jobs like io, printing, string search or filter|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add view profiles, incl. editor/manager|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|copy again puts also a value or char variant of the data to clipboard|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Improve the titels of the changes to the bytearray to be more descriptive, best using ids to avoid text string|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Make all user interaction in the KastenCore managers plugin-based|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Merge row and column widgets into one|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Store bookmarks|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Store bookmarks and other view settings for next load|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add custom datatypes to structures tool|alex.richardson@gmx.de|Alex Richardson}}&lt;br /&gt;
{{FeatureDone|Lokalize|Optimize TM fuzzy searching||Nick Shaforostoff}}&lt;br /&gt;
{{FeatureDone|Lokalize|File search tab||Nick Shaforostoff}}&lt;br /&gt;
{{FeatureTodo|Lokalize|.ts support||Nick Shaforostoff}}&lt;br /&gt;
{{FeatureInProgress|Umbrello|diagram auto layout support|ralf.habacker@freenet.de|Ralf Habacker}}&lt;br /&gt;
{{FeatureInProgress|Umbrello|diagram graphviz dot export |ralf.habacker@freenet.de|Ralf Habacker}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeutils=&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/API</id>
		<title>Development/Tutorials/Plasma/QML/API</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/API"/>
				<updated>2012-04-12T22:03:31Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: add code example for async operations&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction to the Plasmoid QML Declarative API  =&lt;br /&gt;
&lt;br /&gt;
This document provides an overview/reference of the Declarative QML API for Plasmoids. It isn't a full binding to all of Qt or KDE's libraries, but a focused set of bindings designed to make writing Plasmoids fast and easy, while remaining powerful.&lt;br /&gt;
&lt;br /&gt;
The API in this documentation covers the API of the Plasma specific QML components, so only the Declarative part of the API.&lt;br /&gt;
&lt;br /&gt;
The QML ScriptEngine is based upon the Plasma JavaScript engine, making the API of the JavaScript part identical to the one of the JavaScript plasmoids engine.&lt;br /&gt;
To see the api of the global ''Plasmoid'' object, see the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#The_Global_plasmoid_Object JavaScript API] documentation.&lt;br /&gt;
(TODO: the JavaScript api page should probably be copied and stripped down the imperative bits not present there, it would make it harder to update tough)&lt;br /&gt;
The most important API for using graphical widgets is the [http://api.kde.org/4.x-api/plasma-qml-apidocs/ Plasma QtComponents API]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What Is a Declarative Plasmoid?  ==&lt;br /&gt;
&lt;br /&gt;
To denote that this Plasmoid is a Declarative widget, ensure that in the metadata.desktop file there is this line: &lt;br /&gt;
&lt;br /&gt;
X-Plasma-API=declarativeappletscript&lt;br /&gt;
&lt;br /&gt;
What follows is a description of the Plasma declarative classes instantiable from QML.&lt;br /&gt;
&lt;br /&gt;
== fetching data from the plasmoid package ==&lt;br /&gt;
&lt;br /&gt;
If you have a file in your plasmoid package under contents, let's say an image, you can access it with the plasmapackage url protocol:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Image {&lt;br /&gt;
    source: &amp;quot;plasmapackage:/images/foo.png&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code will load in the Image component the file foo.png located in contents/images of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
import &amp;quot;plasmapackage:/code/foo.js&amp;quot; as Foo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, the above code will import a javascript file from the folder contents/code of your plasmoid package.&lt;br /&gt;
&lt;br /&gt;
= Properties exported from the main QML item =&lt;br /&gt;
The root qml item can export some properties to influence its behavior:&lt;br /&gt;
* '''property int minimumWidth''': the plasmoid won't ever become narrower then that, size in pixels.&lt;br /&gt;
* '''property int minimumHeight''': minum height of the plasmoid, size in pixels.&lt;br /&gt;
* '''property Component compactRepresentation''': if the plasmoid is a popupapplet, the component in compactRepresentation will be used instead of the icon and will always be collapsed, regardless if it's in a panel or not.&lt;br /&gt;
&lt;br /&gt;
= Main Plasma QML Classes =&lt;br /&gt;
&lt;br /&gt;
== Data Engines ==&lt;br /&gt;
While it's possible to fetch data from a Plasma DataEngine in the same way as the [http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#DataEngine JavaScript API], it is preferrable to use the following declarative classes:&lt;br /&gt;
&lt;br /&gt;
=== DataSource ===&lt;br /&gt;
DataSource is a receiver for a dataEngine and can be declared inside QML:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
&lt;br /&gt;
 PlasmaCore.DataSource {&lt;br /&gt;
     id: dataSource&lt;br /&gt;
     engine: &amp;quot;time&amp;quot;&lt;br /&gt;
     connectedSources: [&amp;quot;Local&amp;quot;]&lt;br /&gt;
     interval: 500&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* bool '''valid''' (read only): true when the DataSource is successfully connected to a data engine&lt;br /&gt;
* int '''interval''': interval of polling of the dataengine, if 0 (default value, so no need to specify if you don't need it) no polling will be executed&lt;br /&gt;
* string '''engine''': the plugin name of the dataengine to load, e.g. &amp;quot;nowplaying&amp;quot;, etc.&lt;br /&gt;
* Array(string) '''connectedSources''': all the sources of the dataengine we are connected to (and whose data will appear in the '''data''' property)&lt;br /&gt;
* Array(string) '''sources''' (read only): all the sources available from the dataengine&lt;br /&gt;
* variant map '''data''' (read only): It's the most important property, it's a map of all the data available from the dataengine: its structure will be as follows:&lt;br /&gt;
** each key of the map will be a source name, in '''connectedSources'''&lt;br /&gt;
** each value will be a variant hash, so an hash with strings as keys and any variant as value&lt;br /&gt;
** example: dataSource.data[&amp;quot;Local&amp;quot;][&amp;quot;Time&amp;quot;] indicates the '''Time''' key of the dataengine source called &amp;quot;Local&amp;quot;&lt;br /&gt;
* string '''sourceFilter''' it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. If we want to have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Signals ====&lt;br /&gt;
It has the following signals:&lt;br /&gt;
&lt;br /&gt;
Note that javascript/qml applies the 'on' prefix to signals. So the actual signal name in C++ which is e.g. '''newData'''(...) becomes '''onNewData'''(...).&lt;br /&gt;
&lt;br /&gt;
* '''onNewData'''(String sourceName, Plasma::DataEngine::Data data)&lt;br /&gt;
* '''onSourceAdded'''(String source)&lt;br /&gt;
* '''onSourceRemoved'''(String source)&lt;br /&gt;
* '''onSourceConnected'''(String source)&lt;br /&gt;
* '''onSourceDisconnected'''(String source)&lt;br /&gt;
* '''onIntervalChanged'''()&lt;br /&gt;
* '''onEngineChanged'''()&lt;br /&gt;
* '''onDataChanged'''()&lt;br /&gt;
* '''onConnectedSourcesChanged'''()&lt;br /&gt;
* '''onSourcesChanged'''()&lt;br /&gt;
&lt;br /&gt;
==== Methods ====&lt;br /&gt;
It has the following methods:&lt;br /&gt;
* StringList keysForSource(String source): lists all the keys corresponding to a certain source: for instance in the &amp;quot;time&amp;quot; dataengine, for the &amp;quot;Local&amp;quot; source, keys will be:&lt;br /&gt;
** &amp;quot;Timezone Continent&amp;quot;&lt;br /&gt;
** &amp;quot;Offset&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone&amp;quot;&lt;br /&gt;
** &amp;quot;Time&amp;quot;&lt;br /&gt;
** &amp;quot;Date&amp;quot;&lt;br /&gt;
** &amp;quot;Timezone City&amp;quot;&lt;br /&gt;
* Service serviceForSource(String source): returns a Plasma service that corresponds a given source: see the section about services for how to use it.&lt;br /&gt;
* void connectSource(String source): adds to '''connectedSources''' the new source&lt;br /&gt;
* void disconnectSource(String source): removes that source from '''connectedSources'''&lt;br /&gt;
&lt;br /&gt;
=== Service ===&lt;br /&gt;
Due to their imperative nature, Plasma Services are not instantiated as QML classes, but rather created out of a '''DataSource''' with the method '''serviceForSource''' and used in the JavaScript portions of the QML files.&lt;br /&gt;
This following example is a simplified version from the Now Playing QML widget in the kdeexamples git repository: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  var service = dataSource.serviceForSource(activeSource)&lt;br /&gt;
  var operation = service.operationDescription(&amp;quot;seek&amp;quot;)&lt;br /&gt;
  operation.seconds = 10&lt;br /&gt;
&lt;br /&gt;
  var job = service.startOperationCall(operation)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Here dataSource is the id of a DataSource object, and activeSource is a source contained in one of its '''connectedSources'''.&lt;br /&gt;
The service provides an operation called &amp;quot;seek&amp;quot;, with a parameter called &amp;quot;seconds&amp;quot;, that can be written on it as a property of a JavaScript object.&lt;br /&gt;
&lt;br /&gt;
=== ServiceJob ===&lt;br /&gt;
It is necessary to monitor the result of a Service operation, it's possible to connect to the '''finished''' signal provided by the job return paramenter of the '''startOperationCall''' service method.&lt;br /&gt;
The '''finished''' signal has the same job as parameter, from which is possible to check the variant '''result''' property, to check the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    var service = messagesDataSource.serviceForSource(src)&lt;br /&gt;
    var operation = &amp;quot;auth&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    function result(job) {&lt;br /&gt;
        statusItem.authorizationStatus = job.result;&lt;br /&gt;
        print(&amp;quot;ServiceJob result: &amp;quot; + job.result + &amp;quot; op: &amp;quot; + job.operationName);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var operation = service.operationDescription(operation);&lt;br /&gt;
    operation.user = userName;&lt;br /&gt;
    operation.password = password;&lt;br /&gt;
    var serviceJob = service.startOperationCall(operation);&lt;br /&gt;
    serviceJob.finished.connect(result);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DataModel ===&lt;br /&gt;
Some data engines return as their data something that can be interpreted as a list of items, rather than simple key/value pairs.&lt;br /&gt;
QML provides some item views such as '''ListView''', '''GridView''' and '''Repeater'''.&lt;br /&gt;
The '''DataModel''' QML object can provide, based on a DataSource a model suitable for those QML item views.&lt;br /&gt;
&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* DataSource '''dataSource''': the id of an existing (and connected) DataSource&lt;br /&gt;
* String '''sourceFilter''': it's a regular expression. If the DataSource is connected to more than one source, only inserts data from sources matching this filter expression in the model. To, for example, have a source watch all sources beginning with say &amp;quot;name:&amp;quot;, the required regexp would be sourceFilter: &amp;quot;name:.*&amp;quot;&lt;br /&gt;
* String '''keyRoleFilter''': it's a regular expression. Only data with keys that match this filter expression will be inserted in the model&lt;br /&gt;
* int '''count''' (read only): how many items are in the model&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 ListView {&lt;br /&gt;
   model: PlasmaCore.DataModel {&lt;br /&gt;
        dataSource: microblogSource&lt;br /&gt;
        keyRoleFilter: &amp;quot;[\\d]*&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    delegate: Text {&lt;br /&gt;
        text: title&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the example, ''microblogSource'' is the id of a DataSource, and inserts in the model only entries that have a number as the key name (matched with [\\d]*, in this case tweets ids)&lt;br /&gt;
&lt;br /&gt;
Each item in the model will have the form of a variant hash: all the keys of the hash will be registered as model role names, in the example, &amp;quot;title&amp;quot; is a role of the model containing a string (also reachable with model[&amp;quot;title&amp;quot;]).&lt;br /&gt;
&lt;br /&gt;
A special reserved role will always be present: '''&amp;quot;DataEngineSource&amp;quot;''': it will contain the name of the data engine source that gave origin to this item. Therefore, if you want merely the string of the current source that the model is at...do model[&amp;quot;DataEngineSource&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
Note that view.currentItem holds the item currently selected. However, due to (http://bugreports.qt.nokia.com/browse/QTBUG-16347) this does not work in PathView. A workaround is to make your own.&lt;br /&gt;
&lt;br /&gt;
=== SortFilterModel ===&lt;br /&gt;
SortFilterModel is a proxy model for easy sorting and/or filtering of the items in a DataModel (or any other QAbstractItemModel subclass that has been registered in QML with setContextProperty from a C++ application)&lt;br /&gt;
Properties:&lt;br /&gt;
* model '''sourceModel'''&lt;br /&gt;
* String '''filterRegExp'''&lt;br /&gt;
* String '''filterRole'''&lt;br /&gt;
* String '''sortRole'''&lt;br /&gt;
* Qt::SortOrder '''sortOrder'''&lt;br /&gt;
* int '''count''' (read only)&lt;br /&gt;
&lt;br /&gt;
== Popup Applet ==&lt;br /&gt;
So you want your QML applet to be a popup applet, like the device notifier (an icon in the panel shows and expands the applet)?&lt;br /&gt;
&lt;br /&gt;
Why, that's easy.&lt;br /&gt;
&lt;br /&gt;
To change your plasmoid from being a regular boring one, in your '''metadata.desktop''', simply change this following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
ServiceTypes=Plasma/Applet,Plasma/PopupApplet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in the main QML item's Component.onCompleted, do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    plasmoid.popupIcon = &amp;quot;konqueror&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to use other elements instead of an icon when collapsed in a panel, use the '''compactRepresentation''' property in the root Item.&lt;br /&gt;
&lt;br /&gt;
== Plasma Themes ==&lt;br /&gt;
&lt;br /&gt;
=== Theme ===&lt;br /&gt;
This class instantiable from QML provides access to the Plasma Theme colors and other facilities such as fonts.&lt;br /&gt;
From KDE 4.8 a Theme instance is always present given the org.kde.plasma.core plugin was imported, is not necessary to create it by hand.&lt;br /&gt;
It has the following properties:&lt;br /&gt;
* String '''themeName''' (read only)&lt;br /&gt;
* bool '''windowTranslucentEnabled''' (read only)&lt;br /&gt;
* Url '''homepage''' (read only)&lt;br /&gt;
* bool '''useGlobalSettings''' (read only)&lt;br /&gt;
* QString '''wallpaperPath''' (read only)&lt;br /&gt;
* color '''textColor''' (read only)&lt;br /&gt;
* color '''highlightColor''' (read only)&lt;br /&gt;
* color '''backgroundColor''' (read only)&lt;br /&gt;
* color '''buttonTextColor''' (read only)&lt;br /&gt;
* color '''buttonBackgroundColor''' (read only)&lt;br /&gt;
* color '''linkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''visitedLinkColor''' (read only)&lt;br /&gt;
* color '''buttonHoverColor''' (read only)&lt;br /&gt;
* color '''buttonFocusColor''' (read only)&lt;br /&gt;
* color '''viewTextColor''' (read only)&lt;br /&gt;
* color '''viewBackgroundColor''' (read only)&lt;br /&gt;
* color '''viewHoverColor''' (read only)&lt;br /&gt;
* color '''viewFocusColor''' (read only)&lt;br /&gt;
* String '''styleSheet''' (read only)&lt;br /&gt;
* Font '''defaultFont''' (read only)&lt;br /&gt;
* Font '''desktopFont''' (read only)&lt;br /&gt;
* Font '''smallestFont''' (read only)&lt;br /&gt;
&lt;br /&gt;
Each Font element has the following properties:&lt;br /&gt;
* bool bold&lt;br /&gt;
* Capitalization '''capitalization''' (MixedCase, AllUppercase, AllLowercase, SmallCaps, Capitalize) (read only)&lt;br /&gt;
* String '''family''' (read only)&lt;br /&gt;
* bool '''italic''' (read only)&lt;br /&gt;
* real '''letterSpacing''' (read only)&lt;br /&gt;
* int '''pixelSize''' (read only)&lt;br /&gt;
* real '''pointSize''' (read only)&lt;br /&gt;
* bool '''strikeout''' (read only)&lt;br /&gt;
* bool '''underline''' (read only)&lt;br /&gt;
* Weight '''weight''' (Light, Normal, DemiBold, Bold, Black) (read only)&lt;br /&gt;
* real '''wordSpacing''' (read only)&lt;br /&gt;
* size '''mSize''' the size, width and height of an uppercase &amp;quot;M&amp;quot; in this font (read only)&lt;br /&gt;
&lt;br /&gt;
=== Svg ===&lt;br /&gt;
Declaring a Svg element instantiates a Plasma Svg instance. This class doesn't draw anything. For drawing, SvgItem is used.&lt;br /&gt;
Properties:&lt;br /&gt;
* QSize '''size'''&lt;br /&gt;
* bool '''multipleImages'''&lt;br /&gt;
* String '''imagePath''' can be anything in the '''desktoptheme/''' folder. For more information on what is available, see [http://techbase.kde.org/Projects/Plasma/Theme#Current_Theme_Elements Plasma Theme Elements]&lt;br /&gt;
* bool '''usingRenderingCache'''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPixmap pixmap(QString elementID)&lt;br /&gt;
* void resize(qreal width, qreal height)&lt;br /&gt;
* void resize(): resets the image to its default dimension&lt;br /&gt;
* QSize elementSize(QString elementId)&lt;br /&gt;
* QRectF elementRect(QString elementId)&lt;br /&gt;
* bool hasElement(QString elementId)&lt;br /&gt;
* bool isValid(): true if valid svg file&lt;br /&gt;
&lt;br /&gt;
=== FrameSvg ===&lt;br /&gt;
Declaring a FrameSvg element instantiates a Plasma FrameSvg instance. This class doesn't draw anything. For drawing, FrameSvgItem is used.&lt;br /&gt;
This is to be used when you need informations about the framesvg, such as hasElementPrefix().&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* All properties from Svg&lt;br /&gt;
* EnabledBorders '''enabledBorders''': flag combination of:&lt;br /&gt;
** NoBorder&lt;br /&gt;
** TopBorder&lt;br /&gt;
** BottomBorder&lt;br /&gt;
** LeftBorder&lt;br /&gt;
** RightBorder&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* All methods from Svg&lt;br /&gt;
* void setImagePath(QString path)&lt;br /&gt;
* void resizeFrame(QSize size)&lt;br /&gt;
* QSize frameSize()&lt;br /&gt;
* qreal marginSize(Plasma::MarginEdge edge)&lt;br /&gt;
* void getMargins(qreal left, qreal top, qreal right, qreal bottom): parameters are output, they get set with the margins from the FrameSvg&lt;br /&gt;
* QRectF contentsRect(): the rectangle of the center element, taking the margins into account.&lt;br /&gt;
* void setElementPrefix(QString prefix)&lt;br /&gt;
* bool hasElementPrefix(const QString prefix)&lt;br /&gt;
* QString prefix()&lt;br /&gt;
* void setCacheAllRenderedFrames(bool cache)&lt;br /&gt;
* bool cacheAllRenderedFrames()&lt;br /&gt;
* void clearCache()&lt;br /&gt;
* QPixmap framePixmap()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.FrameSvg {&lt;br /&gt;
        id: myFrameSvg&lt;br /&gt;
        imagePath: &amp;quot;widgets/button&amp;quot;&lt;br /&gt;
        prefix: &amp;quot;pressed&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SvgItem ===&lt;br /&gt;
It's a graphical element that will actually paint a Svg instance.&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''elementId''': what element to render. If null, the whole svg will be rendered&lt;br /&gt;
* Svg '''svg''': instance of the Svg class mentioned above&lt;br /&gt;
* QSizeF '''naturalSize''' (read only): default size of the Svg&lt;br /&gt;
* bool '''smooth''': paint with antialias (default false)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    PlasmaCore.SvgItem {&lt;br /&gt;
        id: mySvgItem&lt;br /&gt;
        anchors {&lt;br /&gt;
            top: parent.top&lt;br /&gt;
            left: parent.left&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        width: 300&lt;br /&gt;
        height: 3&lt;br /&gt;
&lt;br /&gt;
        svg: mySvg&lt;br /&gt;
        elementId: &amp;quot;horizontal-line&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FrameSvgItem ===&lt;br /&gt;
It's a graphical element that paints a Plasma::FrameSvg, so a rectangular image composed by 9 elements contained in a Svg file, useful for things like buttons and frames.&lt;br /&gt;
&lt;br /&gt;
Flags&lt;br /&gt;
* EnabledBorders: combination of TopBorder | BottomBorder | LeftBorder | RightBorder, NoBorder if no border of the frame is enabled&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* String '''imagePath''': path of the file relative to the Plasma Theme, for instance &amp;quot;widgets/background&amp;quot;&lt;br /&gt;
* String '''prefix''': a FrameSvg can contain multiple frames, for instance a button contains &amp;quot;normal&amp;quot;, &amp;quot;raised&amp;quot; and &amp;quot;pressed&amp;quot;&lt;br /&gt;
* Margins '''margins''' (read only): the margins of the frame, see documentation below&lt;br /&gt;
* EnabledBorders '''enabledBorders''': what borders are enabled&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
Sample Code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
PlasmaCore.FrameSvgItem {&lt;br /&gt;
    id: myFrameSvgItem&lt;br /&gt;
    anchors.fill: parent&lt;br /&gt;
    imagePath: &amp;quot;translucent/dialogs/background&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Top Level windows ==&lt;br /&gt;
&lt;br /&gt;
=== Dialog ===&lt;br /&gt;
Dialog instantiates a Plasma::Dialog, it will be a Plasma themed top level window that can contain any QML component.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item mainItem: the Item contained in the Dialog, it can be any QML Item instance&lt;br /&gt;
* bool '''visible''': if the window (not the mainItem) is visible&lt;br /&gt;
* int '''x''': x position of the window in screen coordinates&lt;br /&gt;
* int '''y''': y position of the window in screen coordinates&lt;br /&gt;
* int '''width''' (read only): total width of the dialog, including margins&lt;br /&gt;
* int '''height''' (read only): total height of the dialog, including margins&lt;br /&gt;
* int '''windowFlags''': Qt window flags of the Dialog&lt;br /&gt;
* Margins '''margins''' (read only): margins of the Dialog&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* QPoint popupPosition(Item item, Qt::Alignment alignment=Qt::AlignLeft): the suggested position for the Dialog if it has to be correctly placed as popup of the QML item passed as parameter.&lt;br /&gt;
* void setAttribute(Qt::WindowAttribute attribute, bool on): set an attribute for the dialog window&lt;br /&gt;
&lt;br /&gt;
==== Margins ====&lt;br /&gt;
Properties:&lt;br /&gt;
* real '''left''' (read only)&lt;br /&gt;
* real '''top''' (read only)&lt;br /&gt;
* real '''right''' (read only)&lt;br /&gt;
* real '''bottom''' (read only)&lt;br /&gt;
&lt;br /&gt;
=== ToolTip ===&lt;br /&gt;
Declaring a ToolTip instance makes it possible to use Plasma tooltips with any QML item.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* Item '''target''': the QML item we want to show a tooltip of&lt;br /&gt;
* String '''mainText'''&lt;br /&gt;
* String '''subText'''&lt;br /&gt;
* String '''image''': freedesktop compliant icon name as image of the tooltip&lt;br /&gt;
&lt;br /&gt;
= Plasma QtComponents (4.8) =&lt;br /&gt;
Plasma components documentation online at [http://api.kde.org/4.x-api/plasma-qml-apidocs/ api.kde.org]&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/PIM/Akonadi</id>
		<title>Projects/PIM/Akonadi</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/PIM/Akonadi"/>
				<updated>2012-03-14T12:36:07Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: details about email workspace integration&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Akonadi TODO ==&lt;br /&gt;
The following list contains the things which need to be done for Akonadi.&lt;br /&gt;
&lt;br /&gt;
Note: The person noted in the &amp;quot;Contact&amp;quot; column is not necessarily the one implementing that feature, but the one who can tell you what to do and how to help, i.e. you can also contribute to those tasks ;-)&lt;br /&gt;
&lt;br /&gt;
There is also a more detailed page about bugs and missing features of things that are currently ported [[Projects/PIM/Akonadi/PortingStatus|here]].&lt;br /&gt;
&lt;br /&gt;
=== Core ===&lt;br /&gt;
&lt;br /&gt;
==== KDE 4.1 / Akonadi 1.0 ====&lt;br /&gt;
&lt;br /&gt;
Urgent tasks that need to be finished for the KDE 4.1 release ('''May 19th'''):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Item !! Description !! Contact&lt;br /&gt;
{{FeatureDone|Item streaming in ItemSync/ResourceBase|As discussed in Osnabrueck|Tom/Volker}}&lt;br /&gt;
{{FeatureDone|Payload serialization format versioning|see below&lt;br /&gt;
tokoe@kde.org|Tobias}}&lt;br /&gt;
{{FeatureDone|API for additional item parts|As discussed in Osnabruck|Volker/Tobias}}&lt;br /&gt;
{{FeatureDone|Infrastructure for showing additional dialogs from agents/resources|As discussed in Osnabrueck|Tom}}&lt;br /&gt;
{{FeatureDone|Allow to limit ItemFetchJob to current cache content|Prevents search index feeder agents from downloading all remote data|vkrause@kde.org|Volker}}&lt;br /&gt;
{{FeatureDone|Fix API for item/collection modifications|See Osnabrueck meeting notes for details|vkrause@kde.org|Volker}}&lt;br /&gt;
{{FeatureDone|Plugin Versioning|For serializer plugins, also check using Qt plugin stuff instead of the libkdepim plugin framework|tokoe@kde.org|Tobias}}&lt;br /&gt;
{{FeatureDone|Tray app|small app to control the server and have a something that can report errors|tomalbers@kde.nl|Toma}}&lt;br /&gt;
{{FeatureDone|Backup support|Dump &amp;amp; Restore database contents, also useful when upgrading to a newer database version|tomalbers@kde.nl}}&lt;br /&gt;
{{FeatureDone|Akonadi Artwork|Icon for the tray app|tomalbers@kde.nl|Toma}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== KDE 4.2 / Akonadi 1.1 ====&lt;br /&gt;
&lt;br /&gt;
That's the stuff we want to have in 4.2, very roughly ordered by priority. Releases are scheduled for early January 2009.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Item !! Description !! Contact&lt;br /&gt;
{{FeatureDone|Server error reporting|Helpful error message when the server cannot be started or if there is some other problem communicating with it.|vkrause@kde.org|Volker}}&lt;br /&gt;
{{FeatureDone|KResource migration tool|For KABC and KCal resources, setting up Akonadi &amp;lt;-&amp;gt; KResource bridges where needed|Volker}}&lt;br /&gt;
{{FeatureDone|KResource bridges|Basically finished, needs more testing|Kevin}}&lt;br /&gt;
{{FeatureDone|Distribution Lists|Serializer Plugin and resource support|Tobias,Kevin}}&lt;br /&gt;
{{FeatureDone|Complete iCal resource|error handling, robustness, legacy formats, file montitoring|Volker}}&lt;br /&gt;
{{FeatureDone|Complete vCard resource|same as iCal + binary legacy format|Bertjan}}&lt;br /&gt;
{{FeatureDone|Item size|Needed by Mailody|toma@kde.org}}&lt;br /&gt;
{{FeatureDone|LINK/UNLINK commands|Managing item references in virtual collections|vkrause@kde.org|Volker}}&lt;br /&gt;
{{FeatureDone|Akonadi Testrunner|Running tests in a self contained Akonadi setup|igor_trindade@yahoo.com.br|Igor}}&lt;br /&gt;
{{FeatureDone|Remote file support for iCal/vCard resources|Replaces net/remote KRes resources|Bertjan}}&lt;br /&gt;
{{FeatureDone|Solid integration|Switch online/offline state in ResourceBase automatically|Bertjan}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== KDE 4.3 / Akonadi 1.2 ====&lt;br /&gt;
&lt;br /&gt;
Stuff that went into KDE 4.3 and Akonadi server 1.2.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Item !! Description !! Contact&lt;br /&gt;
{{FeatureDone|Fix unit tests|Make unittests work without destroying the production database|Igor/Volker}}&lt;br /&gt;
{{FeatureDone|Filesystem Backend|Store content data in files instead of the database, transfer filehandles instead of data to the client|Andras}}&lt;br /&gt;
{{FeatureDone|IMAP resource||Kevin}}&lt;br /&gt;
{{FeatureDone|Kolab proxy resource||Andras}}&lt;br /&gt;
{{FeatureDone|RID based operations|Item/collection retrieval and modification based on remote identifiers|Volker}}&lt;br /&gt;
{{FeatureDone|Microblog Support|Type library, serializer plugin, identi.ca/twitter resources|Tom}}&lt;br /&gt;
{{FeatureDone|ResourceBase::collectionsRetrievalDone is missing|I'm working around by calling collectionsRetrievedIncremental() with empty collection lists|Volker}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== KDE 4.4 / Akonadi 1.3 ====&lt;br /&gt;
&lt;br /&gt;
The following is being worked on for KDE 4.4 and Akonadi server 1.3.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Item !! Description !! Contact&lt;br /&gt;
{{FeatureDone|Port KAddressBook|Replace with KContactManager|Tobias}}&lt;br /&gt;
{{FeatureDone|Resource testing framework|Automated, shareable tests for resources|Igor/Volker}}&lt;br /&gt;
{{FeatureInProgress|Review change notifications|See the various discussions about shortcomings in that area|Volker,Steve}}&lt;br /&gt;
{{FeatureDone|Collection statistics for sub-trees|Provide a CollectionStatus object covering the full sub-tree in the model, allowing accumulated unread counts etc.|Kevin}}&lt;br /&gt;
{{FeatureDone|Favorite Folder Model|see current KMail|Kevin}}&lt;br /&gt;
{{FeatureDone|Batch jobs for modifying/deleting collections/items|it would be great to have jobs which perform operations on several entities in one go|Volker}}&lt;br /&gt;
{{FeatureDone|Collection streaming support in ResourceBase/CollectionSync|Similar to what is available for items already|Volker}}&lt;br /&gt;
{{FeatureDone|MBox resource||Bertjan}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Scheduled for KDE 4.5 / Akonadi 1.4 ====&lt;br /&gt;
&lt;br /&gt;
Stuff that is planned for inclusion in 4.5, partly already available in the akonadi-ports branch.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Item !! Description !! Contact&lt;br /&gt;
{{FeatureInProgress|Port KOrganizer|Port from KResource to Akonadi|Frank/Sebastian}}&lt;br /&gt;
{{FeatureDone|Account creation wizard|as discussed in Berlin, see below|Volker,Laurent,Tom}}&lt;br /&gt;
{{FeatureInProgress|KMail port|KMail using Akonadi|everyone}}&lt;br /&gt;
{{FeatureInProgress|Remote Search|Delegating searches to resources, see below|Volker}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Post KDE 4.5 /Akonadi 1.4 ====&lt;br /&gt;
&lt;br /&gt;
This stuff is currently not considered for 4.5 due to lack of resources. Of course it will be added nevertheless if someone implements it. The list is completely unsorted.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Item !! Description !! Contact&lt;br /&gt;
{{FeatureTodo|Error reporting|Akonadi::Job basically has only one error code: Unknown|Tobias}}&lt;br /&gt;
{{FeatureInProgress|Port KNotes|File resource, serializer plugin, KNotes application, Kontact plugin|}}&lt;br /&gt;
{{FeatureTodo|Batch job to retrieve a set of items from Akonadi|Those items don't belong to the same collection, rather they are located in different collections|}}&lt;br /&gt;
{{FeatureTodo|CollectionFetchJob/ItemFetchJob should be able to retrieve entities by flags/mimetype|&lt;br /&gt;
This is problematic with change notifications, as they have to know about the filtering with the \Seen flag as well.&lt;br /&gt;
This type of filtering would be possible with full Nepomuk interface though. We don't want yet another query language here. The plan is to fix the nepomuk agent and use that as semi-public interface for now.|}}&lt;br /&gt;
{{FeatureTodo|Nepomuk integration|Generic Item tag/rate/comment, etc.|Tom}}&lt;br /&gt;
{{FeatureTodo|Sync collection tree after creating setting up a resource|see AgentInstanceCreateJob|}}&lt;br /&gt;
{{FeatureTodo|Support standard commands for QUndo framework||}}&lt;br /&gt;
{{FeatureTodo|Conflict detection in resources|See Osnabrueck meeting notes for details|}}&lt;br /&gt;
{{FeatureInProgress|Action framework|see below|vkrause@kde.org|Volker}}&lt;br /&gt;
{{FeatureInProgress|Fix API docs|The libakonadi move as well as the huge API changes following it broke lots of the docs technical and content-wise, see below|Tobias}}&lt;br /&gt;
{{FeatureInProgress|Migration|Data and settings from pre-Akonadi times, see below|}}&lt;br /&gt;
{{FeatureInProgress|Extended notifications|Item change notification do not yet include their source collections (real and virtual)|}}&lt;br /&gt;
{{FeatureTodo|Alternative for Akonadi::ResourceBase|Not using the scheduler to avoid the serialization of operations, see RSS resource. (This will get very complicated. Maybe use a proxy ResourceBase for this, which is thread-pooled?)|}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Supported Types ===&lt;br /&gt;
&lt;br /&gt;
Overview on the current state of support for various types:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Type !! Serializer !! Multipart Support !! Models !! Views !! Resources !! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Email||yes||partial||MessageModel, MessageCollectionModel, threading proxy model||?||maildir, IMAP||threading agent&lt;br /&gt;
|-&lt;br /&gt;
|News||yes (1)||partial (1)||(1)||(1)||NNTP||&lt;br /&gt;
|-&lt;br /&gt;
|Contact||yes||no||ContactModel||-||vCard, facebook, KRes||&lt;br /&gt;
|-&lt;br /&gt;
|Events||yes||no||EventModel||-||iCal, KRes||&lt;br /&gt;
|-&lt;br /&gt;
|Notes||no||no||-||-||-||not started yet&lt;br /&gt;
|-&lt;br /&gt;
|Feeds||yes||no||Feeds, Items||?||OPML||GSoC in playground/pim&lt;br /&gt;
|-&lt;br /&gt;
|Bookmarks||yes||no||-||-||local bookmarks, del.icio.us||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(1) see Email&lt;br /&gt;
&lt;br /&gt;
=== Mail specific extensions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Item !! Description !! Contact&lt;br /&gt;
{{FeatureTodo|Share mail flag code|Standard actions, standard flag enum/constants, Nepomuk interaction|}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Event/Todo/Journal specific extensions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Item !! Description !! Contact&lt;br /&gt;
{{FeatureTodo|Todo proxy model|See KOrganizers To-Do view|Bruno?}}&lt;br /&gt;
{{FeatureDone|Subtype identification|See discussion on kde-pim mailinglist|Kevin}}&lt;br /&gt;
{{FeatureInProgress|Agenda view|KOrganizer agenda view based on Akonadi|Sergio,Kevin}}&lt;br /&gt;
{{FeatureTodo|Month view|KOrganizer month view based on Akonadi|Bruno?}}&lt;br /&gt;
{{FeatureTodo|Timeline view|KOrganizer timeline view based on Akonadi|}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Resources, Agents and others ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Item !! Description !! Contact&lt;br /&gt;
{{FeatureDone|KResource Akonadi bridge|for applications using KCal or KABC|kevin.krammer@gmx.at|Kevin}}&lt;br /&gt;
{{FeatureDone|Akonadi KResource bridge|for data accessed through KCal or KABC resources|kevin.krammer@gmx.at|Kevin}}&lt;br /&gt;
{{FeatureTodo|Expire Agent||}}&lt;br /&gt;
{{FeatureDone|MBOX Resource||Bertjan}}&lt;br /&gt;
{{FeatureDone|Extend IMAP Resource||Kevin/Andras}}&lt;br /&gt;
{{FeatureInProgress|POP3 Resource||Thomas}}&lt;br /&gt;
{{FeatureInProgress|RSS Resource|in akonadi-ports branch ([[Projects/PIM/RSS_framework_for_Akonadi|Details]])|Dmitry/Frank}}&lt;br /&gt;
{{FeatureInProgress|Filter Agent||Szymon}}&lt;br /&gt;
{{FeatureTodo|Search||}}&lt;br /&gt;
{{FeatureTodo| History resource||}}&lt;br /&gt;
{{FeatureInProgress|Filter Rule GUI|Used by filters and searches|Szymon}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Resource status overview (this should list all resources existing in KDE3 or already under development for Akonadi):&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Resource !! Retrieve Collections !! Retrieve Items !! Change Collections !! Change Items !! Configuration !! Notes&lt;br /&gt;
|-&lt;br /&gt;
|iCal||yes (4)||yes (1) (2)||no||yes||yes||remote file support, file watching with conflict handling&lt;br /&gt;
|-&lt;br /&gt;
|vCard||yes (4)||yes (1) (2)||no||yes||yes||remote file support, file watching with conflict handling&lt;br /&gt;
|-&lt;br /&gt;
|maildir||yes (1) (4)||yes (1) (2)||?||?||yes||&lt;br /&gt;
|-&lt;br /&gt;
|mbox||no||no||no||no||no||not started yet, code exists in KMail&lt;br /&gt;
|-&lt;br /&gt;
|IMAP||yes (1) (4)?||yes (1) (2)||no||no||no||code exists in kio_imap4 and Mailody, support for extensions: quota, ACL, annotations missing, what about Kolab and Scalix?&lt;br /&gt;
|-&lt;br /&gt;
|NNTP||yes (4)||yes (2)||n/a||n/a||yes||Needs support for local collection names and collection hierarchy&lt;br /&gt;
|-&lt;br /&gt;
|Local Bookmarks||?||?||?||?||(3)||Code in akonadi/resources&lt;br /&gt;
|-&lt;br /&gt;
|OpenChange||?||?||?||?||?||Code in akonadi/resources&lt;br /&gt;
|-&lt;br /&gt;
|Facebook||?||?||?||?||?||Code in playground/pim&lt;br /&gt;
|-&lt;br /&gt;
|del.icio.us||?||?||?||yes||no||Code in playground/pim&lt;br /&gt;
|-&lt;br /&gt;
|KABC||yes(6)||yes||no||yes||yes||&lt;br /&gt;
|-&lt;br /&gt;
|KCal||yes(6)||yes||yes(7)||yes||yes||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
# only full sync supported currently, need optimization&lt;br /&gt;
# does not yet honor cache policy&lt;br /&gt;
# still relies on QSettings for configuration and/or doesn't provide configuration over D-Bus&lt;br /&gt;
# does not yet provide correct access control settings&lt;br /&gt;
# only adding new items, not changing existing ones&lt;br /&gt;
# availability of child collections depend on whether the KResource plugin has subresources&lt;br /&gt;
# child collections can be added or removed if the KCal plugin can have subresources&lt;br /&gt;
&lt;br /&gt;
=== KResource Migration Status ===&lt;br /&gt;
&lt;br /&gt;
Everything without migration support is implicitly converted to use the compat bridge currently.&lt;br /&gt;
&lt;br /&gt;
[[Image:Akonadi-Kres.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== KABC migration status ====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! KResource !! Feature equivalent agent !! Migration support !! Notes&lt;br /&gt;
|-&lt;br /&gt;
|directory|| || ||vCard dir in development&lt;br /&gt;
|-&lt;br /&gt;
|file||vCard file||4.2||binary format no longer supported, migrated to compat bridge instead&lt;br /&gt;
|-&lt;br /&gt;
|groupdav||||||&lt;br /&gt;
|-&lt;br /&gt;
|groupwise||||||&lt;br /&gt;
|-&lt;br /&gt;
|kolab||||||&lt;br /&gt;
|-&lt;br /&gt;
|ldapkio||||||&lt;br /&gt;
|-&lt;br /&gt;
|net||vCard file||TODO||&lt;br /&gt;
|-&lt;br /&gt;
|scalix||||||&lt;br /&gt;
|-&lt;br /&gt;
|slox||||||&lt;br /&gt;
|-&lt;br /&gt;
|xmlrpc||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== KCal Migration Status ====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|- &lt;br /&gt;
! KResource !! Feature equivalent agent !! Migration support !! Notes&lt;br /&gt;
|-&lt;br /&gt;
|blog||||||&lt;br /&gt;
|-&lt;br /&gt;
|bugzilla||||||&lt;br /&gt;
|-&lt;br /&gt;
|groupdav||||||&lt;br /&gt;
|-&lt;br /&gt;
|groupwise||||||&lt;br /&gt;
|-&lt;br /&gt;
|kabc (birthday)||birthdays||4.3||&lt;br /&gt;
|-&lt;br /&gt;
|kolab||||||&lt;br /&gt;
|-&lt;br /&gt;
|localdir||||||&lt;br /&gt;
|-&lt;br /&gt;
|local||iCal file||4.2||&lt;br /&gt;
|-&lt;br /&gt;
|remote||iCal file||TODO||remote supports different URLs for upload and download, the iCal file agent doesn't, is this needed at all?&lt;br /&gt;
|-&lt;br /&gt;
|featureplan||||||probably obsolete since we don't use the XML featureplan anymore&lt;br /&gt;
|-&lt;br /&gt;
|scalix||||||&lt;br /&gt;
|-&lt;br /&gt;
|slox||||||&lt;br /&gt;
|-&lt;br /&gt;
|xmlrpc||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Akonadi Braindump ==&lt;br /&gt;
Ideas/notes etc. on various open issues in Akonadi.&lt;br /&gt;
&lt;br /&gt;
=== Akonadi Standard Actions ===&lt;br /&gt;
&lt;br /&gt;
Idea: Have something like KStandardAction for Akonadi that not only includes the representation of the action but also its state management and the actual operations. Like libakonadi that should be splitted into a generic, type-independent part and be extensible for type-specific actions. This will enable code sharing among many applications and guarantee consistent actions everywhere.&lt;br /&gt;
&lt;br /&gt;
State management: watch selection models of a collection and/or item model.&lt;br /&gt;
&lt;br /&gt;
Use KXMLGUI for context menus in standard views to allow easy extensibility with custom actions.&lt;br /&gt;
&lt;br /&gt;
Generic actions:&lt;br /&gt;
* new collection [done]&lt;br /&gt;
* new virtual collection&lt;br /&gt;
* delete collection [done for single selection]&lt;br /&gt;
* copy collection [done]&lt;br /&gt;
* cut collection&lt;br /&gt;
* paste collection [done]&lt;br /&gt;
* synchronize collection [done for single selection]&lt;br /&gt;
* synchronize resource&lt;br /&gt;
* synchronize everything&lt;br /&gt;
* show collection properties dialog [done]&lt;br /&gt;
* delete item(s) [done]&lt;br /&gt;
* copy item(s) [done]&lt;br /&gt;
* cut item(s)&lt;br /&gt;
* paste item(s) [done]&lt;br /&gt;
* paste native data&lt;br /&gt;
* tag item(s)&lt;br /&gt;
* comment item&lt;br /&gt;
* rate item(s)&lt;br /&gt;
* configure resource&lt;br /&gt;
* add resource? (would need a type parameter, etc.)&lt;br /&gt;
* delete resource&lt;br /&gt;
* manage local subscriptions [done]&lt;br /&gt;
* move to submenu&lt;br /&gt;
* copy to submenu&lt;br /&gt;
&lt;br /&gt;
The list is definitely long enough to make this worthwhile.&lt;br /&gt;
&lt;br /&gt;
=== Collection Model / Collection View ===&lt;br /&gt;
&lt;br /&gt;
Ideas/missing features/bugs of the collection model/view:&lt;br /&gt;
&lt;br /&gt;
* Enable/disable status columns&lt;br /&gt;
* Show status after the name (see KMail)&lt;br /&gt;
* &amp;lt;s&amp;gt;Size column&amp;lt;/s&amp;gt;&lt;br /&gt;
* Save/restore layout&lt;br /&gt;
* &amp;lt;s&amp;gt;Custom collection icons (see KMail, also needed for resource defined special folders (eg. Inbox)&amp;lt;/s&amp;gt;&lt;br /&gt;
* Status tooltips (see KMail in 3.5.9) [still missing quota info]&lt;br /&gt;
* Quick search&lt;br /&gt;
* &amp;lt;s&amp;gt;Favorite folder view as proxy model on top of the normal collection model (FlatCollectionProxyModel might be helpful for there)&amp;lt;/s&amp;gt;&lt;br /&gt;
* Accumulated statistics (unread, total, size)&lt;br /&gt;
* Fix dnd: move/copy/cancel menu always shows up and never has any effect&lt;br /&gt;
&lt;br /&gt;
=== Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Notes on how to keep long-term protocol, source and binary compatibility.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;Detect server version in Akonadi::Session, might be useful in case of protocol extensions/changes&amp;lt;/s&amp;gt;&lt;br /&gt;
* What about database server version updates?&lt;br /&gt;
* &amp;lt;s&amp;gt;Versioning or any other kind of serialization format meta data, we'll need that in case of changes in serialization formats (see eg. Robert's compression patch where this is needed)&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;We currently use 32 bit ids, probably hard to change later on, is that enough?&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Plugin versioning&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Resource API issues ===&lt;br /&gt;
&lt;br /&gt;
Notes/ideas/complaints about the Akonadi::ResourceBase API:&lt;br /&gt;
&lt;br /&gt;
* Extremely error prone:&lt;br /&gt;
** Scheduler dead-locks when a requested operation is not correctly announced as finished, esp. a problem in error cases.&lt;br /&gt;
** Using the result methods multiple times or when not requested asserts&lt;br /&gt;
* &amp;lt;s&amp;gt;Item streaming is missing, requiring all data to be in memory at once&amp;lt;/s&amp;gt;&lt;br /&gt;
* Non-incremental updates need to know the results of ItemSync to not have to provide all data, even for already existing/unchanged items.&lt;br /&gt;
&lt;br /&gt;
=== API / BC issues ===&lt;br /&gt;
&lt;br /&gt;
Smaller stuff that should be fixed before the ABI freeze and is not yet listed above:&lt;br /&gt;
&lt;br /&gt;
* Cleanup the D-Bus format used by NotificationMessage&lt;br /&gt;
* No mentioning of &amp;quot;IMAP&amp;quot; in the public API, we are not using IMAP&lt;br /&gt;
* Naming and installed location of libraries, headers and executables (see discussion on kde-pim ML)&lt;br /&gt;
* &amp;lt;s&amp;gt;Payload part labels are QStrings, attribute types are QByteArray&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Deployment issues ===&lt;br /&gt;
&lt;br /&gt;
* Multiple access: Should multiple Akonadi instances' mysqlds access a single set of  data files the mysql will likely corrupt the data.  This can happen in any NFS+YP installation where users can log onto any machine and access shared homes.  MySQL relies on filesystem locking to prevent multiple access. [http://dev.mysql.com/doc/refman/6.0/en/multiple-servers.html MySQL multiple instance docu].&lt;br /&gt;
* [http://dev.mysql.com/doc/refman/6.0/en/innodb-restrictions.html InnoDB tables should not be used on NFS].&lt;br /&gt;
* NFS speed: MySQL documentation recommends against locating its data files on network shares.&lt;br /&gt;
* AppArmor: Distros' AppArmor profiles prevent MySQL from writing outside its defined data directory (usually /var/lib/mysql).  This is a problem at least with *buntu and openSUSE.  These will need to be adapted.   It is possible to daisy-chain profiles so that MySQL started by Akonadi receives a different profile to MySQL running standalone.  An empty profile has all rights.  Another possibility is to adapt the general MySQL profile so it can write to ${XDG_DATA_HOME}/akonadi(usually ${HOME/}.local/share/akonadi).  Both support for profile chaining and ${HOME} may depend on the version of AppArmor installed.  What about SELinux?&lt;br /&gt;
* Backup: MySQL data files should not be backed up without telling the mysqld process, otherwise a corrupt backup will be made.  LOCK TABLES and FLUSH TABLES at the least.  A dump can be made or mysqlhotbackup may be used in some circumstances. We should consider sysadmins' backup techniques when planning/promoting Akonadi, as a simple rsync cronjob with running Akonadi will not work. [http://dev.mysql.com/doc/refman/6.0/en/backup.html MySQL backup advice].&lt;br /&gt;
&lt;br /&gt;
=== Account Creation Wizard ===&lt;br /&gt;
&lt;br /&gt;
Notes on the resource configuration wizard discussion.&lt;br /&gt;
&lt;br /&gt;
* WizardBase class&lt;br /&gt;
* Wizard discovery via .desktop files&lt;br /&gt;
* A wizard can configure multiple resources (eg. IMAP + LDAP for Kolab) and non-resources (mailtransport)&lt;br /&gt;
* Optionally hide resources completely covered by wizards in the Add Account dialog&lt;br /&gt;
* List wizards in the Add Account dialog&lt;br /&gt;
* Store Account -&amp;gt; Resources information to offer deletion of depending resources&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL Support ===&lt;br /&gt;
&lt;br /&gt;
Has been merged for Akonadi server 1.3. We still need a volunteer for continuous testing and maintenance though.&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
* Avoid examples using KJob::exec() due to its problematic side-effects.&lt;br /&gt;
* Examples in the ItemCreateJob docs (and maybe others) operate on items in the root collection which does not work at all&lt;br /&gt;
* Resurrect the server API docs (now at http://api.kde.org/kdesupport-api/kdesupport-apidocs/akonadi/server/html/index.html ).&lt;br /&gt;
&lt;br /&gt;
=== Migration of pre-Akonadi data and settings ===&lt;br /&gt;
&lt;br /&gt;
* KCal/KABC&lt;br /&gt;
** switch KRes resources to Akonadi KRes compat resources, use KRes Akonadi compat resource, basically injecting Akonadi inbetween&lt;br /&gt;
** Replace Akonadi KRes compat resources with their ported equivalent&lt;br /&gt;
** Application side does not need migration code, &amp;quot;only&amp;quot; port to Akonadi&lt;br /&gt;
* KMail&lt;br /&gt;
** Should migrate to one resource per account + one for previous local folders&lt;br /&gt;
** Problem: local folders are mixed mbox/maildir&lt;br /&gt;
*** Dedicated KMail compat resource?&lt;br /&gt;
*** Convert everything to maildir first?&lt;br /&gt;
** Flags are stored in proprietary binary format&lt;br /&gt;
* KNode&lt;br /&gt;
** Migrate every account to NNTP resource&lt;br /&gt;
** Local flags should be preserved, stored in proprietary binary format&lt;br /&gt;
** Local subscription state should be preserved (where is that stored?)&lt;br /&gt;
** Local folders using MBOX format + proprietary binary index&lt;br /&gt;
* Akregator&lt;br /&gt;
&lt;br /&gt;
=== Search &amp;amp; Virtual Collections ===&lt;br /&gt;
&lt;br /&gt;
Got their own page by now:&lt;br /&gt;
* [[Projects/PIM/Akonadi/VirtualCollections]]&lt;br /&gt;
* [[Projects/PIM/Akonadi/SearchInfrastructure]]&lt;br /&gt;
&lt;br /&gt;
=== Workspace integration ===&lt;br /&gt;
&lt;br /&gt;
* Email notifier, based on UI of LionMail [[http://vizzzion.org/blog/2010/09/getting-email-done-the-stack-and-the-heap-of-lion-mail/]], in more detail:&lt;br /&gt;
** Write (or lend from Kontact Touch) ProxyModels to display email collections: new / unread and important, combination thereof&lt;br /&gt;
** Plasma Quick widgets for individual emails and collections&lt;br /&gt;
** UI integration&lt;br /&gt;
*** Konfiguration&lt;br /&gt;
*** Drag and Drop (from Collection onto desktop)&lt;br /&gt;
*** Theming / Animations&lt;br /&gt;
*** Streamlined notifications (MUST NOT get in the way)&lt;br /&gt;
** Activity support (notify off for certain activities, only selected folders for a given activity, etc)&lt;br /&gt;
The current Lion Mail code uses a dataengine to retrieve data from AKonadi. This needs to be ported to using one of the AKonadi models which are also used in Kontact Touch.&lt;br /&gt;
&lt;br /&gt;
* Agent monitoring and control&lt;br /&gt;
* Enable/disable logging?&lt;br /&gt;
* Plasma applet for notes / sticky notes&lt;br /&gt;
* Resource progress, e.g. like KIO progress&lt;br /&gt;
* Drag&amp;amp;Drop of Akonadi items: drop target should be able to retrieve payload&lt;br /&gt;
&lt;br /&gt;
== KMail Breakdown Plan ==&lt;br /&gt;
The current plan is to put some parts of KMail into a stand-alone&lt;br /&gt;
library, independent of KMail. This increases code reuse (for example, the message composer could be shared with Mailody) and makes the code a lot easier to maintain and to port to Akonadi.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Item !! Description !! Contact&lt;br /&gt;
{{FeatureTodo|Bodypart formatters||}}&lt;br /&gt;
{{FeatureDone|Reader Window||Andris}}&lt;br /&gt;
{{FeatureDone|Composer: Message Composer||Constantin,Leo}}&lt;br /&gt;
{{FeatureInProgress|Composer: GUI Window||Constantin}}&lt;br /&gt;
{{FeatureDone|Queue Manager for mailtransport||Constantin}}&lt;br /&gt;
{{FeatureInProgress|Templates: Core||Leo}}&lt;br /&gt;
{{FeatureTodo|Templates: GUI||}}&lt;br /&gt;
{{FeatureTodo|Port KMCommands||}}&lt;br /&gt;
{{FeatureDone|Port away from KMMessage and KMFolder* everywhere it is left|An idea might be: wrap KMMsgBase/KMMessage inside a reference counted Message class. Insulate everything else from it by wrapper functions. KMFolder should be easier...|all}}&lt;br /&gt;
{{FeatureInProgress|Migration application for index and other config||Casey}}&lt;br /&gt;
{{FeatureTodo|Port MDNs||}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== The Road to World Domination ==&lt;br /&gt;
&lt;br /&gt;
Sort of related so the stuff above but with a scope for all of KDE PIM and beyond.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Item !! Description !! Contact&lt;br /&gt;
{{FeatureTodo|Share identity config GUI parts|eg. the signature configuration widget|}}&lt;br /&gt;
{{FeatureDone|Mailtransport Agent|Global shared outbox, central mail sending instance|Constantin}}&lt;br /&gt;
{{FeatureTodo|Recently sent to support in mailtransport|related to above, based on Akonadi/Nepomuk|}}&lt;br /&gt;
{{FeatureInProgress|Composer engine|Shared stuff for KMail/KNode/Mailody: Crypto, editor, editor actions, attachment model, message assembly, etc.|Constantin,Leo}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Akonadi FAQ ==&lt;br /&gt;
&lt;br /&gt;
This FAQ primarily deals with technical and design questions, if you have questions about using Akonadi (such as &amp;quot;I get error X when starting Akonadi&amp;quot;), please refer to [http://userbase.kde.org/Akonadi userbase.kde.org/Akonadi].&lt;br /&gt;
&lt;br /&gt;
=== Where do I find the Akonadi config files? ===&lt;br /&gt;
&lt;br /&gt;
''~/.config/akonadi/''&lt;br /&gt;
&lt;br /&gt;
=== Where does Akonadi store my data? ===&lt;br /&gt;
&lt;br /&gt;
Akonadi merely acts as a cache for your data, the actual content stays where it has always been, .ics/.vcf/MBOX files, local maildirs, IMAP- and groupware servers. There is only a limited amount of data stored exclusively in Akonadi:&lt;br /&gt;
* Data not supported by the corresponding backends, such as email flags in case of maildir/mbox. This is comparable to KMail's binary index files stored alongside these files in pre-Akonadi times.&lt;br /&gt;
* Internal meta-data used by application or resources, such as information about the last synchronization with a backend or translated folder names.&lt;br /&gt;
* Data that has been changed while the corresponding backend has been offline and has not yet been uploaded.&lt;br /&gt;
&lt;br /&gt;
=== Where can I find the Akonadi database? ===&lt;br /&gt;
&lt;br /&gt;
''~/.local/share/akonadi/''&lt;br /&gt;
&lt;br /&gt;
=== Where can I find the source code? ===&lt;br /&gt;
&lt;br /&gt;
There are three different parts of source code:&lt;br /&gt;
* The Akonadi server, which is KDE-independent. Currently, the code can be found at [http://websvn.kde.org/trunk/kdesupport/akonadi/ kdesupport/akonadi]. The server code will likely move to the [http://www.freedesktop.org/wiki/ freedesktop.org project] in the future, the move has already been [https://bugs.freedesktop.org/show_bug.cgi?id=15711 requested].&lt;br /&gt;
* The Akonadi KDE client libraries are in [http://websvn.kde.org/trunk/KDE/kdepimlibs/akonadi/ kdepimlibs/akonadi].&lt;br /&gt;
* Various agents, resources, the Akonadi console and much other misc stuff is in [http://websvn.kde.org/trunk/KDE/kdepim/akonadi/ kdepim/akonadi]&lt;br /&gt;
&lt;br /&gt;
=== Where can I find documentation? ===&lt;br /&gt;
&lt;br /&gt;
The documentation is mainly in the code itself, in the form of doxygen comments.&lt;br /&gt;
You can find the generated documentation on [api.kde.org api.kde.org], for example:&lt;br /&gt;
&lt;br /&gt;
* General documentation, including a design overview, is [http://api.kde.org/kdesupport-api/kdesupport-apidocs/akonadi-git/html/ here]&lt;br /&gt;
&lt;br /&gt;
: Note that some links in the above documentation which point to the server or the KDE client libraries are currently broken, use the links below to access that documentation.&lt;br /&gt;
* Documentation for the KDE Akonadi client library is [http://api.kde.org/4.x-api/kdepimlibs-apidocs/akonadi/html/index.html here]&lt;br /&gt;
* Documentation about the server is [http://api.kde.org/kdesupport-api/kdesupport-apidocs/akonadi-git/html/ here]&lt;br /&gt;
&lt;br /&gt;
=== Which DBMS does Akonadi use? ===&lt;br /&gt;
&lt;br /&gt;
So far only MySQL. There is some work on PostgreSQL support going on though. Basically, every database that is supported by QtSQL can be used, requiring minimal changes in the code at most. However, not all of them provide the features needed by Akonadi (see next two questions).&lt;br /&gt;
&lt;br /&gt;
=== Why not use sqlite? ===&lt;br /&gt;
&lt;br /&gt;
We tried. Really. It just can't handle the concurrent access very well.&lt;br /&gt;
&lt;br /&gt;
Please refer to [http://techbase.kde.org/Projects/PIM/Akonadi/Database#Sqlite] for more information on this subject.&lt;br /&gt;
&lt;br /&gt;
=== Why not use MySQL/Embedded? ===&lt;br /&gt;
&lt;br /&gt;
We tried that as well, there are two reasons for not using it: No support for the InnoDB engine (which we need for transaction support) and poor availability (only OpenSUSE provided usable packages, needed a patched QSQL driver).&lt;br /&gt;
&lt;br /&gt;
=== Do I need a running MySQL server? ===&lt;br /&gt;
&lt;br /&gt;
No. Akonadi starts its own local MySQL server (unless configured otherwise, see next question). All you need is having the 'mysqld' binary installed at runtime (usually found in the mysql-server package of your distribution).&lt;br /&gt;
&lt;br /&gt;
=== Can Akonadi use a normal MySQL server running on my system? ===&lt;br /&gt;
&lt;br /&gt;
Yes, it can. You find the corresponding settings in ''~/.config/akonadi/akonadiserverrc''.&lt;br /&gt;
&lt;br /&gt;
=== Can I connect multiple Akonadi instances to the same database to share my data between different machines? ===&lt;br /&gt;
&lt;br /&gt;
That does not work unfortunately. Akonadi does not store all relevant data in the database but also uses the file system for configuration and large payload data for example. Also, there is no mechanism to ensure multiple instances have exactly the same version and exactly the same agents and plug-ins installed etc., all of which would be necessary to work on the same database. Finally, there is no notification system to inform the other instances about changes which endangers consistency since the Akonadi server contains internal caches of data in the database. If you want multiple instances to synchronize, use a groupware server (not as bad as it sounds, Kolab for example works with many normal IMAP servers).&lt;br /&gt;
&lt;br /&gt;
If you try this despite the warnings, be aware that there is no safety mechanism in place to prevent you from doing that and you will likely mess up your data in funny ways.&lt;br /&gt;
&lt;br /&gt;
=== I don't like a database server because of backups/running on NFS/etc. ===&lt;br /&gt;
&lt;br /&gt;
See section &amp;quot;Deployment Issues&amp;quot; above, we are aware of that and working on it. Some of these, like backup/restore are already implemented. But please be aware that most of this issues also existed before (eg. with KMail's custom binary indexes).&lt;br /&gt;
&lt;br /&gt;
=== Can a single Akonadi instance be used by multiple users? ===&lt;br /&gt;
&lt;br /&gt;
No. There has to be one Akonadi server instance per user. However, it is possible to use a shared database server.&lt;br /&gt;
&lt;br /&gt;
=== Can I access the Akonadi server on a remote machine? ===&lt;br /&gt;
No. Akonadi is not a groupware server. It's a local cache only.&lt;br /&gt;
&lt;br /&gt;
=== What's the differences between Akonadi and EDS? ===&lt;br /&gt;
EDS (Evolution Data Server) is limited to contacts and calendar data, Akonadi is type-independent. Especially, Akonadi is designed to also handle high-volume data such as email. Akonadi and EDS also differ largely in their access protocol on a technical level (Corba/D-Bus vs. local socket with IMAP-like protocol/D-Bus) and also on a protocol level (type specific vs. generic).&lt;br /&gt;
&lt;br /&gt;
=== How do I create a collection? ===&lt;br /&gt;
&lt;br /&gt;
From the developers point of view, there is Akonadi::CollectionCreateJob for that, from the users point of view, most applications allow that, eg. Mailody or akonadiconsole.&lt;br /&gt;
&lt;br /&gt;
However, there is one limitation: Top-level collections can only be created by resources, not by normal applications. The reason for that is that every object (collection or item) is supposed to have an owning resource, that is a resource that is responsible for storing and retrieving that object. There is an ongoing discussion to remove this restriction though.&lt;br /&gt;
&lt;br /&gt;
So, if you want to create a collection eg. for testing purposes, add a resource first. Most Akonadi applications offer an option to do that, a module for KControl is planned as well.&lt;br /&gt;
&lt;br /&gt;
=== How do I disable automatic migration from KDE's traditional framework? ===&lt;br /&gt;
&lt;br /&gt;
The migration tool is controlled by standard KDE configuration file called ''kres-migratorrc''.&lt;br /&gt;
&lt;br /&gt;
Distributors or system administrators wanting to disable the automatism will probably want to that globally, e.g. by editing the installed default configuration file, or by using KDE's configuration hierachy and using a profile config between that and the user level.&lt;br /&gt;
&lt;br /&gt;
The quickest way to deactivate it for one user account only is to use KDE's ''kwriteconfig'' tool to set the respective configration value with a simple copy&amp;amp;paste of the following command:&lt;br /&gt;
&lt;br /&gt;
''kwriteconfig --file kres-migratorrc --group Migration --key Enabled --type bool false''&lt;br /&gt;
&lt;br /&gt;
Please note that at some point KDE applications such as Kontact, KOrganizer, KMail will be using Akonadi directly, at which point migration either has to be enabled or performed manually.&lt;br /&gt;
&lt;br /&gt;
As of KDE 4.4 (and its development releases and when building from SVN trunk) this already applies to KAddressBook and KMail's address book access.&lt;br /&gt;
&lt;br /&gt;
=== How do I completely disable Akonadi startup? ===&lt;br /&gt;
&lt;br /&gt;
{{warning|If you already have applications natively using Akonadi, you of course can't disable Akonadi startup. &amp;lt;i&amp;gt;KAddressBook&amp;lt;/i&amp;gt; (as of KDE 4.4 and its test versions), &amp;lt;i&amp;gt;Mailody&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;KMail&amp;lt;/i&amp;gt; (as of KDE 4.4 and its test versions for address book related things) and &amp;lt;i&amp;gt;KPilot&amp;lt;/i&amp;gt; are applications that are already based on Akonadi.}}&lt;br /&gt;
&lt;br /&gt;
Other applications, like &amp;lt;i&amp;gt;KOrganizer&amp;lt;/i&amp;gt;, are not based on Akonadi yet, at the time of writing. Instead, they use the old KResource framework for storing contacts, calendars and notes.&lt;br /&gt;
During the KDE 4.2 beta time, these KResources were automatically migrated to Akonadi-based KResources, the so-called Akonadi compatibility resources. Therefore, applications like KOrganizer would use Akonadi indirectly through KResources, and therefore would start the Akonadi server when being started.&lt;br /&gt;
&lt;br /&gt;
If Akonadi doesn't start up correctly for you, the following should help you to disable Akonadi startup and use your old KResources again.&lt;br /&gt;
&lt;br /&gt;
First, disable automatic migration like described in the above FAQ entry.&lt;br /&gt;
Then, open &amp;lt;i&amp;gt;System Settings&amp;lt;/i&amp;gt;, go to the &amp;lt;i&amp;gt;Advanced&amp;lt;/i&amp;gt; tab and open the &amp;lt;i&amp;gt;KDE Resources&amp;lt;/i&amp;gt; config panel. There, you can configure which type of KResources are used for contacts, calendars and notes. If the migration to Akonadi was successful, you'll probably only see the &amp;lt;i&amp;gt;Akonadi Compatibility Resource&amp;lt;/i&amp;gt; as an active resource, and all others disabled.&lt;br /&gt;
&lt;br /&gt;
To disable Akonadi startup, enable your old resources again, then disable and delete the Akonadi compatibility resource.&lt;br /&gt;
&lt;br /&gt;
=== What is the relation between Akonadi and OpenSync? ===&lt;br /&gt;
&lt;br /&gt;
Akonadi and OpenSync focus on different aspects and complement each other. Akonadi provides a unified way to access PIM data for applications and a framework to implement powerful connectors to varies data sources. OpenSync focus is on syncing two sets of PIM data.&lt;br /&gt;
&lt;br /&gt;
An Akonadi plugin for OpenSync is currently under development, allowing to sync PIM data available through Akonadi with any other system supported by OpenSync, especially mobile phones.&lt;br /&gt;
&lt;br /&gt;
=== When should I use Akonadi? ===&lt;br /&gt;
&lt;br /&gt;
More precisely, when should you use for your application specific data instead of eg. just using a local file directly.&lt;br /&gt;
&lt;br /&gt;
Akonadi is especially useful when you need one the following:&lt;br /&gt;
&lt;br /&gt;
* Different backends for your data, like eg. a local file and a remote server. Akonadi provides a unified interface for application developers to access your data independent of the actual backend.&lt;br /&gt;
* Caching and change replay of remote data. Akonadi has support for that built in, giving you free offline support for any remote backend.&lt;br /&gt;
* Desktop-wide sharing of your data. As soon as more than one application (say your main applications and a plasmoid) accesses the same data you need to deal with locking, conflict detection, change notifications, etc. - or let Akonadi do that for you.&lt;br /&gt;
&lt;br /&gt;
However, if you are just looking for a simple way to store your application data without needing one of the above, using Akonadi usually means more implementation work for relatively little gain.&lt;br /&gt;
&lt;br /&gt;
=== Akonadi needs too much space in my home directory! ===&lt;br /&gt;
&lt;br /&gt;
An empty, unused Akonadi database needs about 100 Mb of disk space. This is due to the MySQL InnoDB log files which work similar to a journal in a modern file system. These files are constant in size and independent of the actual data stored in Akonadi. The default size is optimized for performance on average desktop hardware where the use of 100 Mb of disk space is no problem. In other cases, such as multi-user systems or embedded devices, this default might not be optimal though.&lt;br /&gt;
&lt;br /&gt;
The default size can be configured, globally or per-user. The global configuration file can be found in $PREFIX/share/config/akonadi/mysql-global.conf, the per-user file is in ~/.config/akonadi/mysql-local.conf and overwrites settings of the global file. In any of these files, you can change the settings '''innodb_log_file_size''' and assign it a smaller value than the default (64M).&lt;br /&gt;
&lt;br /&gt;
For this setting to take effect you need to restart Akonadi. With older Akonadi versions (&amp;lt;=1.1.1) you might need to manually remove the InnoDB log files from ~/.local/share/akonadi/db_data for this change to take effect. The log files do not contain data after a clean shutdown and thus can safely be removed while Akonadi is not running.&lt;br /&gt;
&lt;br /&gt;
An alternative approach especially for multi-user systems might be the use of a single, global MySQL server instance.&lt;br /&gt;
&lt;br /&gt;
=== My Akonadi resource seems to randomly hang/stop working! ===&lt;br /&gt;
&lt;br /&gt;
A very common problem of resources based on Akonadi::ResourceBase are &amp;quot;unguarded exit paths&amp;quot; from one of the methods you have reimplemented there. See the following example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void MyResource::retrieveItems( const Collection &amp;amp;collection )&lt;br /&gt;
{&lt;br /&gt;
  if ( someError )&lt;br /&gt;
    return;&lt;br /&gt;
  itemsRetrieved( myItems );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case of an error you leave retrieveItems() without telling Akonadi::ResourceBase that you are done with the task. Therefore, it is assumed the requested item retrieval takes a bit longer (which is not uncommon for resources for remote backends, results typically come in in a result slot connected to a job class for example) and waits until you announce the task is finished.&lt;br /&gt;
&lt;br /&gt;
The following example does it correctly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void MyResource::itemAdded( const Akonadi::Item &amp;amp;item, const Akonadi::Collection &amp;amp;parent )&lt;br /&gt;
{&lt;br /&gt;
  if ( noNetwork ) { // transient error&lt;br /&gt;
    deferTask( i18n( &amp;quot;Offline, will retry later.&amp;quot; ) );&lt;br /&gt;
  } else if ( item_not_valid ) { // permanent error &lt;br /&gt;
    cancelTaks( i18n( &amp;quot;Got invalid crap, can't store that.&amp;quot; ) );&lt;br /&gt;
  } else {&lt;br /&gt;
    // store the item here&lt;br /&gt;
    Item newItem( item );&lt;br /&gt;
    newItem.setRemoteId( my_new_remote_id );&lt;br /&gt;
    changeCommitted( newItem );&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following methods require explicit notification that a task has been completed:&lt;br /&gt;
* retrieveX&lt;br /&gt;
* any method indicating changes, ie. itemAdded|Changed|Moved|Removed(), collectionAdded|Changed|Moved|Removed()&lt;br /&gt;
* any custom task scheduled with ResourceBase::scheduleCustomTask()&lt;br /&gt;
&lt;br /&gt;
Refer to the API documentation of Akonadi::ResourceBase for the various ways to do that correctly, there are a few different ways, depending on the current task:&lt;br /&gt;
* Successful completion with convenience features, eg. changeCommitted(), itemsRetrieved() etc.&lt;br /&gt;
* Error cases with convenience features, eg. cancelTask(), deferTask()&lt;br /&gt;
* Only indicate completion, with everything else done manually, eg. changeProcessed(), taskDone()&lt;br /&gt;
&lt;br /&gt;
To confirm a resource is affected by this problem, the &amp;quot;Resource Schedulers&amp;quot; tab of akonadiconsole is very useful (needs to be enabled in the context menu first, causes too much slowdown otherwise). It shows the state of the internal task scheduler of your resource, allowing you to spot stuck tasks.&lt;br /&gt;
&lt;br /&gt;
== Information for Developers using Akonadi ==&lt;br /&gt;
&lt;br /&gt;
References to information for developers using or extending Akonadi.&lt;br /&gt;
&lt;br /&gt;
=== Tutorials ===&lt;br /&gt;
* [[Development/Tutorials/Akonadi/Application|Application Development]]&lt;br /&gt;
* [[Development/Tutorials/Akonadi/Resources|Resource Development]]&lt;br /&gt;
* [[Development/Tutorials/Akonadi/SerializerPlugin|Serializer Plugin Development]]&lt;br /&gt;
* [[Development/Tutorials/Akonadi/CreatingAccountWizardPackages|Creating accountwizard packages]]&lt;br /&gt;
* [[Development/AkonadiPorting|Application Porting]]&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
* [[Projects/PIM/Akonadi/Testing|Akonadi Testing Framework]]&lt;br /&gt;
* [[Projects/PIM/Akonadi/Development_Tools|Akonadi Development Tools]]&lt;br /&gt;
* [[Projects/PIM/Akonadi/Firstrun|Akonadi Firstrun]]&lt;br /&gt;
* [[Projects/PIM/Akonadi/Trashhandling|Akonadi Trashhandling]]&lt;br /&gt;
* [[Projects/PIM/Akonadi/Debug_IMAP|Debugging Akonadi IMAP Resource]]&lt;br /&gt;
* [http://api.kde.org/4.x-api/kdepimlibs-apidocs/akonadi/html/index.html Client Library API documentation]&lt;br /&gt;
&lt;br /&gt;
=== Projects ===&lt;br /&gt;
&lt;br /&gt;
* [[Projects/PIM/Akonadi/Bookmarks|Bookmark support based on Akonadi]]&lt;br /&gt;
* [[Projects/PIM/Akonadi/PortingStatus|Akonadi Port - List of Bugs and Features]]&lt;br /&gt;
&lt;br /&gt;
=== Contact &amp;amp; Getting Involved ===&lt;br /&gt;
&lt;br /&gt;
* #akonadi IRC channel on freenode&lt;br /&gt;
* kde-pim@kde.org mailing-list&lt;br /&gt;
* Google Summer of Code&lt;br /&gt;
** [[Projects/Summer of Code/2009/Ideas#KDE_PIM|Google Summer of Code 2009 Ideas]]&lt;br /&gt;
** TODO: add links for other years&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
* [http://pim.kde.org/akonadi/ http://pim.kde.org/akonadi/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Akonadi Internals ==&lt;br /&gt;
&lt;br /&gt;
References to information for developers of Akonadi itself (the above section is of course also relevant for you).&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
* [[Projects/PIM/Akonadi/Release_Howto|Akonadi Release Howto]]&lt;br /&gt;
* [[Projects/PIM/Akonadi/Database|Akonadi Database Internals]]&lt;br /&gt;
* [http://api.kde.org/kdesupport-api/kdesupport-apidocs/akonadi/html/ Akonadi Server API documentation]&lt;br /&gt;
&lt;br /&gt;
=== Meeting Notes ===&lt;br /&gt;
&lt;br /&gt;
* [[Projects/PIM/Akonadi/Meeting2008-11|Halloween Sprint 2008]]&lt;br /&gt;
* [http://community.kde.org/KDE_PIM/Meetings/Osnabrueck_7 Osnabrueck 7]&lt;br /&gt;
* [[Projects/PIM/Akonadi/Meeting2009-04|Akonadi April Sprint 2009]]&lt;br /&gt;
* [[Projects/PIM/Meetings/GCDS_2009|GCDS/aKademy 2009]]&lt;br /&gt;
* [[Projects/PIM/Akonadi/Meeting2009-10|Akonadi October Sprint 2009]]&lt;br /&gt;
* [http://community.kde.org/KDE_PIM/Meetings/Osnabrueck_8 Osnabrueck 8]&lt;br /&gt;
* [http://community.kde.org/KDE_PIM/Meetings/Akonadi-2010-05 Akonadi/KDE PIM pre45 sprint 2010]&lt;br /&gt;
&lt;br /&gt;
[[Category:PIM]]&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings</id>
		<title>Development/Tutorials/Plasma/QML/ActiveSettings</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings"/>
				<updated>2012-01-01T17:23:13Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: /* Extending your Settings Module with with C++ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial teaches you how you can load Active settings modules into your app, and create your own modules.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Active Settings is an app, much like Plasma Desktop's kcmshell that shows and loads configuration modules. These configuration modules are plugins providing a QML package and an optional C++-plugin which exports custom-written configuration objects as QObject to the declarative environment.&lt;br /&gt;
&lt;br /&gt;
You can query available modules using the --list argument to active-settings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ active-settings --list&lt;br /&gt;
org.kde.active.settings.web             Settings for history, caching, etc.&lt;br /&gt;
org.kde.active.settings.configtest      Test Module for the Config Bindings&lt;br /&gt;
org.kde.active.settings.time            Settings for timezone and date display&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can load an individual module by supplying its plugin name as argument to active-settings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
active-settings org.kde.active.settings.time&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
will open the active-settings app and load the &amp;quot;Time and Date&amp;quot; module on startup.&lt;br /&gt;
&lt;br /&gt;
= Architecture =&lt;br /&gt;
The Active Settings app consists of a number of parts, an Active App, which loads a QML package providing the chrome for active-settings, a set of Declarative components which encapsulate loading settings modules and a set of settings modules, which provide the UI and backend code for a specific settings domain (i.e. Time and Date, Browser settings, etc.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Integrating a Settings Module into an App =&lt;br /&gt;
In order to integrate a settings module &amp;quot;inline&amp;quot; into your app, you can use the SettingsItem component, which comes with the ActiveSettings declarative plugin. SettingsItem provides a PageStack (from PlasmaComponents) with a bit of additional API, the module property. Creating an Item with a settings module is as easy as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.SettingsItem {&lt;br /&gt;
    id: webSettingsItem&lt;br /&gt;
    module: &amp;quot;org.kde.active.settings.time&amp;quot;&lt;br /&gt;
    anchors { ... }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to speed up loading your app, you will want to lazy-load the settings module. This is very easy by using the PageStack features that SettingsItem encapsulates:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.SettingsItem {&lt;br /&gt;
    id: settingsItem&lt;br /&gt;
    initialPage: someOtherItem&lt;br /&gt;
    anchors { [...] }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
PlasmaComponents.Button {&lt;br /&gt;
    // This button toggles the settings item and someOtherPage&lt;br /&gt;
    [...]&lt;br /&gt;
    onClicked: {&lt;br /&gt;
        if (settingsItem.module != &amp;quot;org.kde.active.settings.web&amp;quot;) {&lt;br /&gt;
            settingsItem.module = &amp;quot;org.kde.active.settings.web&amp;quot;&lt;br /&gt;
        } else {&lt;br /&gt;
            // Switching back...&lt;br /&gt;
            settingsItem.replace(someOtherItem);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
    id: someOtherItem&lt;br /&gt;
    /* this guy is shown before any module is loaded */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Creating Your Own Settings Module =&lt;br /&gt;
&lt;br /&gt;
== Simple, QML-only Module ==&lt;br /&gt;
Writing a basic ActiveSettings configuration module is as simple as creating a Plasma Package, using the X-KDE-ServiceTypes &amp;quot;Active/SettingsModule&amp;quot;. The service type registers your package as settings module, so active-settings will find (and list) it, and so it can be loaded using the SettingsItem QML binding. A simple active settings package will look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── contents&lt;br /&gt;
│   └── ui&lt;br /&gt;
│       └── Web.qml&lt;br /&gt;
└── metadata.desktop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The metadata.desktop file holds the plugin information, which script to load from the plugin initially, and a bunch of metadata, just like normal Plasma Packages. A simple metadata.desktop file will look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Name=Web and Browser&lt;br /&gt;
Comment=Settings for history, caching, etc.&lt;br /&gt;
Encoding=UTF-8&lt;br /&gt;
Type=Service&lt;br /&gt;
Icon=preferences-system-network&lt;br /&gt;
X-KDE-ServiceTypes=Active/SettingsModule&lt;br /&gt;
X-KDE-PluginInfo-Author=Sebastian Kügler&lt;br /&gt;
X-KDE-PluginInfo-Email=sebas@kde.org&lt;br /&gt;
X-KDE-PluginInfo-Name=org.kde.active.settings.web&lt;br /&gt;
X-KDE-PluginInfo-Version=1.0&lt;br /&gt;
X-KDE-PluginInfo-Website=http://plasma-active.org&lt;br /&gt;
X-KDE-PluginInfo-Category=Online Services&lt;br /&gt;
X-KDE-PluginInfo-License=GPL&lt;br /&gt;
X-Plasma-MainScript=ui/Web.qml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The interesting bits, specific to active-settings are the plugin name, the package name and the mainscript. The plugin name is used to find the package, and will translates to the &amp;quot;module&amp;quot; property of SettingsItem.&lt;br /&gt;
Web.qml points to a normal Item { [...] } in a file, normal rules apply here.&lt;br /&gt;
&lt;br /&gt;
The CMakeLists.txt file takes care of proper installation and will be needed in order to install and package your settings module. It looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
install(DIRECTORY web/ DESTINATION \&lt;br /&gt;
    ${DATA_INSTALL_DIR}/plasma/packages/org.kde.active.settings.web)&lt;br /&gt;
install(FILES web/metadata.desktop \&lt;br /&gt;
    DESTINATION ${SERVICES_INSTALL_DIR} RENAME plasma-package-org.kde.active.settings.web.desktop)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure the names of the .desktop files in CMakeLists.txt are correct, since incorrect names lead to problems finding and loading your package, or even to conflicts between different modules. In case of doubt check active-settings --list for already installed modules.&lt;br /&gt;
After you installed the plugin (or changed its metadata) you'll need to run &amp;quot;kbuildsycoca4&amp;quot; in order to update the plugin metainformation cache.&lt;br /&gt;
&lt;br /&gt;
== KConfig Bindings ==&lt;br /&gt;
Active Settings provides declarative bindings for KConfigGroup. This means that you can instantiate KConfig objects in your QML code, read and write settings. For many basic use-cases, this provides enough flexibility to do everything that's needed. The browser settings module uses this mechanism:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.kde.plasma.components 0.1 as PlasmaComponents&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.ConfigModel {&lt;br /&gt;
    id: adblockConfig&lt;br /&gt;
    file: &amp;quot;active-webbrowserrc&amp;quot;&lt;br /&gt;
    group: &amp;quot;adblock&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
[...]&lt;br /&gt;
PlasmaComponents.Switch {&lt;br /&gt;
    [...]&lt;br /&gt;
    onClicked: adblockConfig.writeEntry(&amp;quot;adBlockEnabled&amp;quot;, checked);&lt;br /&gt;
    Component.onCompleted: checked = adblockConfig.readEntry(&amp;quot;adBlockEnabled&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This corresponds to the following snippet in you active-webbrowserrc config file (for example i ~/.kde4/share/config/):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[adblock]&lt;br /&gt;
adBlockEnabled=true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ConfigModel will sync() the config file 5 seconds after a writeEntry(...) call, or on destruction of the module (for example by loading another module or page into the SettingsItem.&lt;br /&gt;
&lt;br /&gt;
If you find yourself needing more advanced features from C++ code, you can extend your settings module using a C++ plugin. Of course you can choose to use both, the already provided KConfig bindings, and an additional plugin.&lt;br /&gt;
&lt;br /&gt;
== Extending your Settings Module with with C++ ==&lt;br /&gt;
In some cases, you will find a pure declarative settings module too limited. By extending a settings module with C++ functionality, you can implement functionality in a C++ plugin, which gets automatically loaded with your C++ plugin. This loading is done in the SettingsComponent item provided by the ActiveSettings import. You will usually want to use a SettingsItem in your code, like in the above example. SettingsItem encapsulates the module loading mechanism and provides a PageStack interface. When a new settings module is loaded in the UI (by setting SettingsItem &amp;quot;module&amp;quot; property, the .desktop file is checked for an X-KDE-Library entry (X-KDE-Library=active_settings_time in the Time and Date example).&lt;br /&gt;
&lt;br /&gt;
This loads a small plugin, consisting of two classes:&lt;br /&gt;
* A QObject based class, which registers one or more additional Object to the declarative runtime:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
K_PLUGIN_FACTORY(TimeSettingsFactory, registerPlugin&amp;lt;TimeSettingsPlugin&amp;gt;();)&lt;br /&gt;
K_EXPORT_PLUGIN(TimeSettingsFactory(&amp;quot;active_settings_time&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
TimeSettingsPlugin::TimeSettingsPlugin(QObject *parent, const QVariantList &amp;amp;list)&lt;br /&gt;
    : QObject(parent)&lt;br /&gt;
{&lt;br /&gt;
    qmlRegisterType&amp;lt;TimeSettings&amp;gt;();&lt;br /&gt;
    qmlRegisterType&amp;lt;TimeZone&amp;gt;();&lt;br /&gt;
    qmlRegisterType&amp;lt;TimeSettings&amp;gt;(&amp;quot;org.kde.active.settings&amp;quot;, 0, 1, &amp;quot;TimeSettings&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The name provided as second argument to K_EXPORT_PLUGIN macro is the one you specify in you metadata.desktop file as X-KDE-Library.&lt;br /&gt;
&lt;br /&gt;
* One or more QObject-derived classes which export domain specific settings using QProperties, getters and setters. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class TimeSettings : public QObject&lt;br /&gt;
{&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
&lt;br /&gt;
    [...]&lt;br /&gt;
    Q_PROPERTY(bool twentyFour READ twentyFour WRITE setTwentyFour NOTIFY twentyFourChanged)&lt;br /&gt;
&lt;br /&gt;
    public:&lt;br /&gt;
        TimeSettings();&lt;br /&gt;
        virtual ~TimeSettings();&lt;br /&gt;
&lt;br /&gt;
        [...]&lt;br /&gt;
        bool twentyFour();&lt;br /&gt;
&lt;br /&gt;
    public Q_SLOTS:&lt;br /&gt;
        [...]&lt;br /&gt;
        void setTwentyFour(bool t);&lt;br /&gt;
&lt;br /&gt;
    Q_SIGNALS:&lt;br /&gt;
        [...]&lt;br /&gt;
        void twentyFourChanged();&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        TimeSettingsPrivate* d;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The types are basically reimplemented QObjects, which expose settings to the QML parts of your settings module. [http://doc.qt.nokia.com/4.8-snapshot/qml-extending.html Qt's documentation] has more information on how this works exactly.&lt;br /&gt;
&lt;br /&gt;
In your declarative code, you can then import and instantiate these objects.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.kde.active.settings 0.1&lt;br /&gt;
&lt;br /&gt;
TimeSettings {&lt;br /&gt;
    id: timeSettings&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
PlasmaComponents.Switch {&lt;br /&gt;
    id: twentyFourSwitch&lt;br /&gt;
    checked: timeSettings.twentyFour&lt;br /&gt;
    onClicked : timeSettings.twentyFour = checked&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You will typically want to put code for reading the property in the ctor or getter, and code for writing options, or updating other parts of the UI, but of course more complex constructions are also entirely possible, since the settings plugins can basically provide any kind of QML extensions. When writing to configuration files, you should not forget to sync(); your KConfigObject, and to make sure that apps pick up the changed setting, for example by monitoring the configuration file for changes (watch for the &amp;quot;created()&amp;quot; signal, not for the changed signal, as KConfig doesn't directly write to the config file, but to a temorary file and then atomically moves them.) The plugin has minimal build dependencies, so that providing a settings plugin along with your app is very easy.&lt;br /&gt;
&lt;br /&gt;
You can have a look into the [http://quickgit.kde.org/?p=plasma-mobile.git&amp;amp;a=tree&amp;amp;h=d61c20d2697a06205134b9a4361382270068c55e&amp;amp;hb=afaeda27367ca0701efea14c0c292c6079d34882&amp;amp;f=applications/settings/modules modules] directory of Active Settings to get some inspiration, or a functioning base for modules to play around with.&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings</id>
		<title>Development/Tutorials/Plasma/QML/ActiveSettings</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings"/>
				<updated>2012-01-01T17:19:05Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: /* Extending your Settings Module with with C++ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial teaches you how you can load Active settings modules into your app, and create your own modules.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Active Settings is an app, much like Plasma Desktop's kcmshell that shows and loads configuration modules. These configuration modules are plugins providing a QML package and an optional C++-plugin which exports custom-written configuration objects as QObject to the declarative environment.&lt;br /&gt;
&lt;br /&gt;
You can query available modules using the --list argument to active-settings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ active-settings --list&lt;br /&gt;
org.kde.active.settings.web             Settings for history, caching, etc.&lt;br /&gt;
org.kde.active.settings.configtest      Test Module for the Config Bindings&lt;br /&gt;
org.kde.active.settings.time            Settings for timezone and date display&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can load an individual module by supplying its plugin name as argument to active-settings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
active-settings org.kde.active.settings.time&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
will open the active-settings app and load the &amp;quot;Time and Date&amp;quot; module on startup.&lt;br /&gt;
&lt;br /&gt;
= Architecture =&lt;br /&gt;
The Active Settings app consists of a number of parts, an Active App, which loads a QML package providing the chrome for active-settings, a set of Declarative components which encapsulate loading settings modules and a set of settings modules, which provide the UI and backend code for a specific settings domain (i.e. Time and Date, Browser settings, etc.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Integrating a Settings Module into an App =&lt;br /&gt;
In order to integrate a settings module &amp;quot;inline&amp;quot; into your app, you can use the SettingsItem component, which comes with the ActiveSettings declarative plugin. SettingsItem provides a PageStack (from PlasmaComponents) with a bit of additional API, the module property. Creating an Item with a settings module is as easy as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.SettingsItem {&lt;br /&gt;
    id: webSettingsItem&lt;br /&gt;
    module: &amp;quot;org.kde.active.settings.time&amp;quot;&lt;br /&gt;
    anchors { ... }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to speed up loading your app, you will want to lazy-load the settings module. This is very easy by using the PageStack features that SettingsItem encapsulates:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.SettingsItem {&lt;br /&gt;
    id: settingsItem&lt;br /&gt;
    initialPage: someOtherItem&lt;br /&gt;
    anchors { [...] }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
PlasmaComponents.Button {&lt;br /&gt;
    // This button toggles the settings item and someOtherPage&lt;br /&gt;
    [...]&lt;br /&gt;
    onClicked: {&lt;br /&gt;
        if (settingsItem.module != &amp;quot;org.kde.active.settings.web&amp;quot;) {&lt;br /&gt;
            settingsItem.module = &amp;quot;org.kde.active.settings.web&amp;quot;&lt;br /&gt;
        } else {&lt;br /&gt;
            // Switching back...&lt;br /&gt;
            settingsItem.replace(someOtherItem);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
    id: someOtherItem&lt;br /&gt;
    /* this guy is shown before any module is loaded */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Creating Your Own Settings Module =&lt;br /&gt;
&lt;br /&gt;
== Simple, QML-only Module ==&lt;br /&gt;
Writing a basic ActiveSettings configuration module is as simple as creating a Plasma Package, using the X-KDE-ServiceTypes &amp;quot;Active/SettingsModule&amp;quot;. The service type registers your package as settings module, so active-settings will find (and list) it, and so it can be loaded using the SettingsItem QML binding. A simple active settings package will look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── contents&lt;br /&gt;
│   └── ui&lt;br /&gt;
│       └── Web.qml&lt;br /&gt;
└── metadata.desktop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The metadata.desktop file holds the plugin information, which script to load from the plugin initially, and a bunch of metadata, just like normal Plasma Packages. A simple metadata.desktop file will look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Name=Web and Browser&lt;br /&gt;
Comment=Settings for history, caching, etc.&lt;br /&gt;
Encoding=UTF-8&lt;br /&gt;
Type=Service&lt;br /&gt;
Icon=preferences-system-network&lt;br /&gt;
X-KDE-ServiceTypes=Active/SettingsModule&lt;br /&gt;
X-KDE-PluginInfo-Author=Sebastian Kügler&lt;br /&gt;
X-KDE-PluginInfo-Email=sebas@kde.org&lt;br /&gt;
X-KDE-PluginInfo-Name=org.kde.active.settings.web&lt;br /&gt;
X-KDE-PluginInfo-Version=1.0&lt;br /&gt;
X-KDE-PluginInfo-Website=http://plasma-active.org&lt;br /&gt;
X-KDE-PluginInfo-Category=Online Services&lt;br /&gt;
X-KDE-PluginInfo-License=GPL&lt;br /&gt;
X-Plasma-MainScript=ui/Web.qml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The interesting bits, specific to active-settings are the plugin name, the package name and the mainscript. The plugin name is used to find the package, and will translates to the &amp;quot;module&amp;quot; property of SettingsItem.&lt;br /&gt;
Web.qml points to a normal Item { [...] } in a file, normal rules apply here.&lt;br /&gt;
&lt;br /&gt;
The CMakeLists.txt file takes care of proper installation and will be needed in order to install and package your settings module. It looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
install(DIRECTORY web/ DESTINATION \&lt;br /&gt;
    ${DATA_INSTALL_DIR}/plasma/packages/org.kde.active.settings.web)&lt;br /&gt;
install(FILES web/metadata.desktop \&lt;br /&gt;
    DESTINATION ${SERVICES_INSTALL_DIR} RENAME plasma-package-org.kde.active.settings.web.desktop)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure the names of the .desktop files in CMakeLists.txt are correct, since incorrect names lead to problems finding and loading your package, or even to conflicts between different modules. In case of doubt check active-settings --list for already installed modules.&lt;br /&gt;
After you installed the plugin (or changed its metadata) you'll need to run &amp;quot;kbuildsycoca4&amp;quot; in order to update the plugin metainformation cache.&lt;br /&gt;
&lt;br /&gt;
== KConfig Bindings ==&lt;br /&gt;
Active Settings provides declarative bindings for KConfigGroup. This means that you can instantiate KConfig objects in your QML code, read and write settings. For many basic use-cases, this provides enough flexibility to do everything that's needed. The browser settings module uses this mechanism:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.kde.plasma.components 0.1 as PlasmaComponents&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.ConfigModel {&lt;br /&gt;
    id: adblockConfig&lt;br /&gt;
    file: &amp;quot;active-webbrowserrc&amp;quot;&lt;br /&gt;
    group: &amp;quot;adblock&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
[...]&lt;br /&gt;
PlasmaComponents.Switch {&lt;br /&gt;
    [...]&lt;br /&gt;
    onClicked: adblockConfig.writeEntry(&amp;quot;adBlockEnabled&amp;quot;, checked);&lt;br /&gt;
    Component.onCompleted: checked = adblockConfig.readEntry(&amp;quot;adBlockEnabled&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This corresponds to the following snippet in you active-webbrowserrc config file (for example i ~/.kde4/share/config/):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[adblock]&lt;br /&gt;
adBlockEnabled=true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ConfigModel will sync() the config file 5 seconds after a writeEntry(...) call, or on destruction of the module (for example by loading another module or page into the SettingsItem.&lt;br /&gt;
&lt;br /&gt;
If you find yourself needing more advanced features from C++ code, you can extend your settings module using a C++ plugin. Of course you can choose to use both, the already provided KConfig bindings, and an additional plugin.&lt;br /&gt;
&lt;br /&gt;
== Extending your Settings Module with with C++ ==&lt;br /&gt;
In some cases, you will find a pure declarative settings module too limited. By extending a settings module with C++ functionality, you can implement functionality in a C++ plugin, which gets automatically loaded with your C++ plugin. This loading is done in the SettingsComponent item provided by the ActiveSettings import. You will usually want to use a SettingsItem in your code, like in the above example. SettingsItem encapsulates the module loading mechanism and provides a PageStack interface. When a new settings module is loaded in the UI (by setting SettingsItem &amp;quot;module&amp;quot; property, the .desktop file is checked for an X-KDE-Library entry (X-KDE-Library=active_settings_time in the Time and Date example).&lt;br /&gt;
&lt;br /&gt;
This loads a small plugin, consisting of two classes:&lt;br /&gt;
* A QObject based class, which registers one or more additional Object to the declarative runtime:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
K_PLUGIN_FACTORY(TimeSettingsFactory, registerPlugin&amp;lt;TimeSettingsPlugin&amp;gt;();)&lt;br /&gt;
K_EXPORT_PLUGIN(TimeSettingsFactory(&amp;quot;active_settings_time&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
TimeSettingsPlugin::TimeSettingsPlugin(QObject *parent, const QVariantList &amp;amp;list)&lt;br /&gt;
    : QObject(parent)&lt;br /&gt;
{&lt;br /&gt;
    qmlRegisterType&amp;lt;TimeSettings&amp;gt;();&lt;br /&gt;
    qmlRegisterType&amp;lt;TimeZone&amp;gt;();&lt;br /&gt;
    qmlRegisterType&amp;lt;TimeSettings&amp;gt;(&amp;quot;org.kde.active.settings&amp;quot;, 0, 1, &amp;quot;TimeSettings&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The name provided as second argument to K_EXPORT_PLUGIN macro is the one you specify in you metadata.desktop file as X-KDE-Library.&lt;br /&gt;
&lt;br /&gt;
* One or more QObject-derived classes which export domain specific settings using QProperties, getters and setters. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class TimeSettings : public QObject&lt;br /&gt;
{&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
&lt;br /&gt;
    [...]&lt;br /&gt;
    Q_PROPERTY(bool twentyFour READ twentyFour WRITE setTwentyFour NOTIFY twentyFourChanged)&lt;br /&gt;
&lt;br /&gt;
    public:&lt;br /&gt;
        TimeSettings();&lt;br /&gt;
        virtual ~TimeSettings();&lt;br /&gt;
&lt;br /&gt;
        [...]&lt;br /&gt;
        bool twentyFour();&lt;br /&gt;
&lt;br /&gt;
    public Q_SLOTS:&lt;br /&gt;
        [...]&lt;br /&gt;
        void setTwentyFour(bool t);&lt;br /&gt;
&lt;br /&gt;
    Q_SIGNALS:&lt;br /&gt;
        [...]&lt;br /&gt;
        void twentyFourChanged();&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        TimeSettingsPrivate* d;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The types are basically reimplemented QObjects, which expose settings to the QML parts of your settings module. [http://doc.qt.nokia.com/4.8-snapshot/qml-extending.html Qt's documentation] has more information on how this works exactly.&lt;br /&gt;
&lt;br /&gt;
In your declarative code, you can then import and instantiate these objects.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.kde.active.settings 0.1&lt;br /&gt;
&lt;br /&gt;
TimeSettings {&lt;br /&gt;
    id: timeSettings&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
PlasmaComponents.Switch {&lt;br /&gt;
    id: twentyFourSwitch&lt;br /&gt;
    checked: timeSettings.twentyFour&lt;br /&gt;
    onClicked : timeSettings.twentyFour = checked&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You will typically want to put code for reading the property in the ctor or getter, and code for writing options, or updating other parts of the UI, but of course more complex constructions are also entirely possible, since the settings plugins can basically provide any kind of QML extensions. When writing to configuration files, you should not forget to sync(); your KConfigObject, and to make sure that apps pick up the changed setting, for example by monitoring the configuration file for changes (watch for the &amp;quot;created()&amp;quot; signal, not for the changed signal, as KConfig doesn't directly write to the config file, but to a temorary file and then atomically moves them.) The plugin has minimal build dependencies, so that providing a settings plugin along with your app is very easy.&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings</id>
		<title>Development/Tutorials/Plasma/QML/ActiveSettings</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings"/>
				<updated>2012-01-01T17:15:58Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: /* KConfig Bindings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial teaches you how you can load Active settings modules into your app, and create your own modules.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Active Settings is an app, much like Plasma Desktop's kcmshell that shows and loads configuration modules. These configuration modules are plugins providing a QML package and an optional C++-plugin which exports custom-written configuration objects as QObject to the declarative environment.&lt;br /&gt;
&lt;br /&gt;
You can query available modules using the --list argument to active-settings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ active-settings --list&lt;br /&gt;
org.kde.active.settings.web             Settings for history, caching, etc.&lt;br /&gt;
org.kde.active.settings.configtest      Test Module for the Config Bindings&lt;br /&gt;
org.kde.active.settings.time            Settings for timezone and date display&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can load an individual module by supplying its plugin name as argument to active-settings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
active-settings org.kde.active.settings.time&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
will open the active-settings app and load the &amp;quot;Time and Date&amp;quot; module on startup.&lt;br /&gt;
&lt;br /&gt;
= Architecture =&lt;br /&gt;
The Active Settings app consists of a number of parts, an Active App, which loads a QML package providing the chrome for active-settings, a set of Declarative components which encapsulate loading settings modules and a set of settings modules, which provide the UI and backend code for a specific settings domain (i.e. Time and Date, Browser settings, etc.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Integrating a Settings Module into an App =&lt;br /&gt;
In order to integrate a settings module &amp;quot;inline&amp;quot; into your app, you can use the SettingsItem component, which comes with the ActiveSettings declarative plugin. SettingsItem provides a PageStack (from PlasmaComponents) with a bit of additional API, the module property. Creating an Item with a settings module is as easy as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.SettingsItem {&lt;br /&gt;
    id: webSettingsItem&lt;br /&gt;
    module: &amp;quot;org.kde.active.settings.time&amp;quot;&lt;br /&gt;
    anchors { ... }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to speed up loading your app, you will want to lazy-load the settings module. This is very easy by using the PageStack features that SettingsItem encapsulates:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.SettingsItem {&lt;br /&gt;
    id: settingsItem&lt;br /&gt;
    initialPage: someOtherItem&lt;br /&gt;
    anchors { [...] }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
PlasmaComponents.Button {&lt;br /&gt;
    // This button toggles the settings item and someOtherPage&lt;br /&gt;
    [...]&lt;br /&gt;
    onClicked: {&lt;br /&gt;
        if (settingsItem.module != &amp;quot;org.kde.active.settings.web&amp;quot;) {&lt;br /&gt;
            settingsItem.module = &amp;quot;org.kde.active.settings.web&amp;quot;&lt;br /&gt;
        } else {&lt;br /&gt;
            // Switching back...&lt;br /&gt;
            settingsItem.replace(someOtherItem);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
    id: someOtherItem&lt;br /&gt;
    /* this guy is shown before any module is loaded */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Creating Your Own Settings Module =&lt;br /&gt;
&lt;br /&gt;
== Simple, QML-only Module ==&lt;br /&gt;
Writing a basic ActiveSettings configuration module is as simple as creating a Plasma Package, using the X-KDE-ServiceTypes &amp;quot;Active/SettingsModule&amp;quot;. The service type registers your package as settings module, so active-settings will find (and list) it, and so it can be loaded using the SettingsItem QML binding. A simple active settings package will look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── contents&lt;br /&gt;
│   └── ui&lt;br /&gt;
│       └── Web.qml&lt;br /&gt;
└── metadata.desktop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The metadata.desktop file holds the plugin information, which script to load from the plugin initially, and a bunch of metadata, just like normal Plasma Packages. A simple metadata.desktop file will look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Name=Web and Browser&lt;br /&gt;
Comment=Settings for history, caching, etc.&lt;br /&gt;
Encoding=UTF-8&lt;br /&gt;
Type=Service&lt;br /&gt;
Icon=preferences-system-network&lt;br /&gt;
X-KDE-ServiceTypes=Active/SettingsModule&lt;br /&gt;
X-KDE-PluginInfo-Author=Sebastian Kügler&lt;br /&gt;
X-KDE-PluginInfo-Email=sebas@kde.org&lt;br /&gt;
X-KDE-PluginInfo-Name=org.kde.active.settings.web&lt;br /&gt;
X-KDE-PluginInfo-Version=1.0&lt;br /&gt;
X-KDE-PluginInfo-Website=http://plasma-active.org&lt;br /&gt;
X-KDE-PluginInfo-Category=Online Services&lt;br /&gt;
X-KDE-PluginInfo-License=GPL&lt;br /&gt;
X-Plasma-MainScript=ui/Web.qml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The interesting bits, specific to active-settings are the plugin name, the package name and the mainscript. The plugin name is used to find the package, and will translates to the &amp;quot;module&amp;quot; property of SettingsItem.&lt;br /&gt;
Web.qml points to a normal Item { [...] } in a file, normal rules apply here.&lt;br /&gt;
&lt;br /&gt;
The CMakeLists.txt file takes care of proper installation and will be needed in order to install and package your settings module. It looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
install(DIRECTORY web/ DESTINATION \&lt;br /&gt;
    ${DATA_INSTALL_DIR}/plasma/packages/org.kde.active.settings.web)&lt;br /&gt;
install(FILES web/metadata.desktop \&lt;br /&gt;
    DESTINATION ${SERVICES_INSTALL_DIR} RENAME plasma-package-org.kde.active.settings.web.desktop)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure the names of the .desktop files in CMakeLists.txt are correct, since incorrect names lead to problems finding and loading your package, or even to conflicts between different modules. In case of doubt check active-settings --list for already installed modules.&lt;br /&gt;
After you installed the plugin (or changed its metadata) you'll need to run &amp;quot;kbuildsycoca4&amp;quot; in order to update the plugin metainformation cache.&lt;br /&gt;
&lt;br /&gt;
== KConfig Bindings ==&lt;br /&gt;
Active Settings provides declarative bindings for KConfigGroup. This means that you can instantiate KConfig objects in your QML code, read and write settings. For many basic use-cases, this provides enough flexibility to do everything that's needed. The browser settings module uses this mechanism:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.kde.plasma.components 0.1 as PlasmaComponents&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.ConfigModel {&lt;br /&gt;
    id: adblockConfig&lt;br /&gt;
    file: &amp;quot;active-webbrowserrc&amp;quot;&lt;br /&gt;
    group: &amp;quot;adblock&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
[...]&lt;br /&gt;
PlasmaComponents.Switch {&lt;br /&gt;
    [...]&lt;br /&gt;
    onClicked: adblockConfig.writeEntry(&amp;quot;adBlockEnabled&amp;quot;, checked);&lt;br /&gt;
    Component.onCompleted: checked = adblockConfig.readEntry(&amp;quot;adBlockEnabled&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This corresponds to the following snippet in you active-webbrowserrc config file (for example i ~/.kde4/share/config/):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[adblock]&lt;br /&gt;
adBlockEnabled=true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ConfigModel will sync() the config file 5 seconds after a writeEntry(...) call, or on destruction of the module (for example by loading another module or page into the SettingsItem.&lt;br /&gt;
&lt;br /&gt;
If you find yourself needing more advanced features from C++ code, you can extend your settings module using a C++ plugin. Of course you can choose to use both, the already provided KConfig bindings, and an additional plugin.&lt;br /&gt;
&lt;br /&gt;
== Extending your Settings Module with with C++ ==&lt;br /&gt;
In some cases, you will find a pure declarative settings module too limited. By extending a settings module with C++ functionality, you can implement functionality in a C++ plugin, which gets automatically loaded with your C++ plugin. This loading is done in the SettingsComponent item provided by the ActiveSettings import. You will usually want to use a SettingsItem in your code, like in the above example. SettingsItem encapsulates the module loading mechanism and provides a PageStack interface. When a new settings module is loaded in the UI (by setting SettingsItem &amp;quot;module&amp;quot; property, the .desktop file is checked for an X-KDE-Library entry (X-KDE-Library=active_settings_time in the Time and Date example).&lt;br /&gt;
&lt;br /&gt;
This loads a small plugin, consisting of two classes:&lt;br /&gt;
* A QObject based class, which registers one or more additional Object to the declarative runtime:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TimeSettingsPlugin::TimeSettingsPlugin(QObject *parent, const QVariantList &amp;amp;list)&lt;br /&gt;
    : QObject(parent)&lt;br /&gt;
{&lt;br /&gt;
    qmlRegisterType&amp;lt;TimeSettings&amp;gt;();&lt;br /&gt;
    qmlRegisterType&amp;lt;TimeZone&amp;gt;();&lt;br /&gt;
    qmlRegisterType&amp;lt;TimeSettings&amp;gt;(&amp;quot;org.kde.active.settings&amp;quot;, 0, 1, &amp;quot;TimeSettings&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* One or more QObject-derived classes which export domain specific settings using QProperties, getters and setters. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class TimeSettings : public QObject&lt;br /&gt;
{&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
&lt;br /&gt;
    [...]&lt;br /&gt;
    Q_PROPERTY(bool twentyFour READ twentyFour WRITE setTwentyFour NOTIFY twentyFourChanged)&lt;br /&gt;
&lt;br /&gt;
    public:&lt;br /&gt;
        TimeSettings();&lt;br /&gt;
        virtual ~TimeSettings();&lt;br /&gt;
&lt;br /&gt;
        [...]&lt;br /&gt;
        bool twentyFour();&lt;br /&gt;
&lt;br /&gt;
    public Q_SLOTS:&lt;br /&gt;
        [...]&lt;br /&gt;
        void setTwentyFour(bool t);&lt;br /&gt;
&lt;br /&gt;
    Q_SIGNALS:&lt;br /&gt;
        [...]&lt;br /&gt;
        void twentyFourChanged();&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        TimeSettingsPrivate* d;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The types are basically reimplemented QObjects, which expose settings to the QML parts of your settings module. [http://doc.qt.nokia.com/4.8-snapshot/qml-extending.html Qt's documentation] has more information on how this works exactly.&lt;br /&gt;
&lt;br /&gt;
In your declarative code, you can then import and instantiate these objects.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.kde.active.settings 0.1&lt;br /&gt;
&lt;br /&gt;
TimeSettings {&lt;br /&gt;
    id: timeSettings&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
PlasmaComponents.Switch {&lt;br /&gt;
    id: twentyFourSwitch&lt;br /&gt;
    checked: timeSettings.twentyFour&lt;br /&gt;
    onClicked : timeSettings.twentyFour = checked&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You will typically want to put code for reading the property in the ctor or getter, and code for writing options, or updating other parts of the UI, but of course more complex constructions are also entirely possible, since the settings plugins can basically provide any kind of QML extensions. When writing to configuration files, you should not forget to sync(); your KConfigObject, and to make sure that apps pick up the changed setting, for example by monitoring the configuration file for changes (watch for the &amp;quot;created()&amp;quot; signal, not for the changed signal, as KConfig doesn't directly write to the config file, but to a temorary file and then atomically moves them.) The plugin has minimal build dependencies, so that providing a settings plugin along with your app is very easy.&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings</id>
		<title>Development/Tutorials/Plasma/QML/ActiveSettings</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings"/>
				<updated>2012-01-01T17:14:29Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: /* KConfig Bindings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial teaches you how you can load Active settings modules into your app, and create your own modules.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Active Settings is an app, much like Plasma Desktop's kcmshell that shows and loads configuration modules. These configuration modules are plugins providing a QML package and an optional C++-plugin which exports custom-written configuration objects as QObject to the declarative environment.&lt;br /&gt;
&lt;br /&gt;
You can query available modules using the --list argument to active-settings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ active-settings --list&lt;br /&gt;
org.kde.active.settings.web             Settings for history, caching, etc.&lt;br /&gt;
org.kde.active.settings.configtest      Test Module for the Config Bindings&lt;br /&gt;
org.kde.active.settings.time            Settings for timezone and date display&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can load an individual module by supplying its plugin name as argument to active-settings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
active-settings org.kde.active.settings.time&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
will open the active-settings app and load the &amp;quot;Time and Date&amp;quot; module on startup.&lt;br /&gt;
&lt;br /&gt;
= Architecture =&lt;br /&gt;
The Active Settings app consists of a number of parts, an Active App, which loads a QML package providing the chrome for active-settings, a set of Declarative components which encapsulate loading settings modules and a set of settings modules, which provide the UI and backend code for a specific settings domain (i.e. Time and Date, Browser settings, etc.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Integrating a Settings Module into an App =&lt;br /&gt;
In order to integrate a settings module &amp;quot;inline&amp;quot; into your app, you can use the SettingsItem component, which comes with the ActiveSettings declarative plugin. SettingsItem provides a PageStack (from PlasmaComponents) with a bit of additional API, the module property. Creating an Item with a settings module is as easy as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.SettingsItem {&lt;br /&gt;
    id: webSettingsItem&lt;br /&gt;
    module: &amp;quot;org.kde.active.settings.time&amp;quot;&lt;br /&gt;
    anchors { ... }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to speed up loading your app, you will want to lazy-load the settings module. This is very easy by using the PageStack features that SettingsItem encapsulates:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.SettingsItem {&lt;br /&gt;
    id: settingsItem&lt;br /&gt;
    initialPage: someOtherItem&lt;br /&gt;
    anchors { [...] }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
PlasmaComponents.Button {&lt;br /&gt;
    // This button toggles the settings item and someOtherPage&lt;br /&gt;
    [...]&lt;br /&gt;
    onClicked: {&lt;br /&gt;
        if (settingsItem.module != &amp;quot;org.kde.active.settings.web&amp;quot;) {&lt;br /&gt;
            settingsItem.module = &amp;quot;org.kde.active.settings.web&amp;quot;&lt;br /&gt;
        } else {&lt;br /&gt;
            // Switching back...&lt;br /&gt;
            settingsItem.replace(someOtherItem);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
    id: someOtherItem&lt;br /&gt;
    /* this guy is shown before any module is loaded */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Creating Your Own Settings Module =&lt;br /&gt;
&lt;br /&gt;
== Simple, QML-only Module ==&lt;br /&gt;
Writing a basic ActiveSettings configuration module is as simple as creating a Plasma Package, using the X-KDE-ServiceTypes &amp;quot;Active/SettingsModule&amp;quot;. The service type registers your package as settings module, so active-settings will find (and list) it, and so it can be loaded using the SettingsItem QML binding. A simple active settings package will look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── contents&lt;br /&gt;
│   └── ui&lt;br /&gt;
│       └── Web.qml&lt;br /&gt;
└── metadata.desktop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The metadata.desktop file holds the plugin information, which script to load from the plugin initially, and a bunch of metadata, just like normal Plasma Packages. A simple metadata.desktop file will look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Name=Web and Browser&lt;br /&gt;
Comment=Settings for history, caching, etc.&lt;br /&gt;
Encoding=UTF-8&lt;br /&gt;
Type=Service&lt;br /&gt;
Icon=preferences-system-network&lt;br /&gt;
X-KDE-ServiceTypes=Active/SettingsModule&lt;br /&gt;
X-KDE-PluginInfo-Author=Sebastian Kügler&lt;br /&gt;
X-KDE-PluginInfo-Email=sebas@kde.org&lt;br /&gt;
X-KDE-PluginInfo-Name=org.kde.active.settings.web&lt;br /&gt;
X-KDE-PluginInfo-Version=1.0&lt;br /&gt;
X-KDE-PluginInfo-Website=http://plasma-active.org&lt;br /&gt;
X-KDE-PluginInfo-Category=Online Services&lt;br /&gt;
X-KDE-PluginInfo-License=GPL&lt;br /&gt;
X-Plasma-MainScript=ui/Web.qml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The interesting bits, specific to active-settings are the plugin name, the package name and the mainscript. The plugin name is used to find the package, and will translates to the &amp;quot;module&amp;quot; property of SettingsItem.&lt;br /&gt;
Web.qml points to a normal Item { [...] } in a file, normal rules apply here.&lt;br /&gt;
&lt;br /&gt;
The CMakeLists.txt file takes care of proper installation and will be needed in order to install and package your settings module. It looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
install(DIRECTORY web/ DESTINATION \&lt;br /&gt;
    ${DATA_INSTALL_DIR}/plasma/packages/org.kde.active.settings.web)&lt;br /&gt;
install(FILES web/metadata.desktop \&lt;br /&gt;
    DESTINATION ${SERVICES_INSTALL_DIR} RENAME plasma-package-org.kde.active.settings.web.desktop)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure the names of the .desktop files in CMakeLists.txt are correct, since incorrect names lead to problems finding and loading your package, or even to conflicts between different modules. In case of doubt check active-settings --list for already installed modules.&lt;br /&gt;
After you installed the plugin (or changed its metadata) you'll need to run &amp;quot;kbuildsycoca4&amp;quot; in order to update the plugin metainformation cache.&lt;br /&gt;
&lt;br /&gt;
== KConfig Bindings ==&lt;br /&gt;
Active Settings provides declarative bindings for KConfigGroup. This means that you can instantiate KConfig objects in your QML code, read and write settings. For many basic use-cases, this provides enough flexibility to do everything that's needed. The browser settings module uses this mechanism:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.kde.plasma.components 0.1 as PlasmaComponents&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.ConfigModel {&lt;br /&gt;
    id: adblockConfig&lt;br /&gt;
    file: &amp;quot;active-webbrowserrc&amp;quot;&lt;br /&gt;
    group: &amp;quot;adblock&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
[...]&lt;br /&gt;
PlasmaComponents.Switch {&lt;br /&gt;
    [...]&lt;br /&gt;
    onClicked: adblockConfig.writeEntry(&amp;quot;adBlockEnabled&amp;quot;, checked);&lt;br /&gt;
    Component.onCompleted: checked = adblockConfig.readEntry(&amp;quot;adBlockEnabled&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This corresponds to the following snippet in you active-webbrowserrc config file (for example i ~/.kde4/share/config/):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[adblock]&lt;br /&gt;
adBlockEnabled=true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you find yourself needing more advanced features from C++ code, you can extend your settings module using a C++ plugin. Of course you can choose to use both, the already provided KConfig bindings, and an additional plugin.&lt;br /&gt;
&lt;br /&gt;
== Extending your Settings Module with with C++ ==&lt;br /&gt;
In some cases, you will find a pure declarative settings module too limited. By extending a settings module with C++ functionality, you can implement functionality in a C++ plugin, which gets automatically loaded with your C++ plugin. This loading is done in the SettingsComponent item provided by the ActiveSettings import. You will usually want to use a SettingsItem in your code, like in the above example. SettingsItem encapsulates the module loading mechanism and provides a PageStack interface. When a new settings module is loaded in the UI (by setting SettingsItem &amp;quot;module&amp;quot; property, the .desktop file is checked for an X-KDE-Library entry (X-KDE-Library=active_settings_time in the Time and Date example).&lt;br /&gt;
&lt;br /&gt;
This loads a small plugin, consisting of two classes:&lt;br /&gt;
* A QObject based class, which registers one or more additional Object to the declarative runtime:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TimeSettingsPlugin::TimeSettingsPlugin(QObject *parent, const QVariantList &amp;amp;list)&lt;br /&gt;
    : QObject(parent)&lt;br /&gt;
{&lt;br /&gt;
    qmlRegisterType&amp;lt;TimeSettings&amp;gt;();&lt;br /&gt;
    qmlRegisterType&amp;lt;TimeZone&amp;gt;();&lt;br /&gt;
    qmlRegisterType&amp;lt;TimeSettings&amp;gt;(&amp;quot;org.kde.active.settings&amp;quot;, 0, 1, &amp;quot;TimeSettings&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* One or more QObject-derived classes which export domain specific settings using QProperties, getters and setters. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class TimeSettings : public QObject&lt;br /&gt;
{&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
&lt;br /&gt;
    [...]&lt;br /&gt;
    Q_PROPERTY(bool twentyFour READ twentyFour WRITE setTwentyFour NOTIFY twentyFourChanged)&lt;br /&gt;
&lt;br /&gt;
    public:&lt;br /&gt;
        TimeSettings();&lt;br /&gt;
        virtual ~TimeSettings();&lt;br /&gt;
&lt;br /&gt;
        [...]&lt;br /&gt;
        bool twentyFour();&lt;br /&gt;
&lt;br /&gt;
    public Q_SLOTS:&lt;br /&gt;
        [...]&lt;br /&gt;
        void setTwentyFour(bool t);&lt;br /&gt;
&lt;br /&gt;
    Q_SIGNALS:&lt;br /&gt;
        [...]&lt;br /&gt;
        void twentyFourChanged();&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        TimeSettingsPrivate* d;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The types are basically reimplemented QObjects, which expose settings to the QML parts of your settings module. [http://doc.qt.nokia.com/4.8-snapshot/qml-extending.html Qt's documentation] has more information on how this works exactly.&lt;br /&gt;
&lt;br /&gt;
In your declarative code, you can then import and instantiate these objects.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.kde.active.settings 0.1&lt;br /&gt;
&lt;br /&gt;
TimeSettings {&lt;br /&gt;
    id: timeSettings&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
PlasmaComponents.Switch {&lt;br /&gt;
    id: twentyFourSwitch&lt;br /&gt;
    checked: timeSettings.twentyFour&lt;br /&gt;
    onClicked : timeSettings.twentyFour = checked&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You will typically want to put code for reading the property in the ctor or getter, and code for writing options, or updating other parts of the UI, but of course more complex constructions are also entirely possible, since the settings plugins can basically provide any kind of QML extensions. When writing to configuration files, you should not forget to sync(); your KConfigObject, and to make sure that apps pick up the changed setting, for example by monitoring the configuration file for changes (watch for the &amp;quot;created()&amp;quot; signal, not for the changed signal, as KConfig doesn't directly write to the config file, but to a temorary file and then atomically moves them.) The plugin has minimal build dependencies, so that providing a settings plugin along with your app is very easy.&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings</id>
		<title>Development/Tutorials/Plasma/QML/ActiveSettings</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings"/>
				<updated>2012-01-01T17:12:41Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: /* KConfig Bindings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial teaches you how you can load Active settings modules into your app, and create your own modules.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Active Settings is an app, much like Plasma Desktop's kcmshell that shows and loads configuration modules. These configuration modules are plugins providing a QML package and an optional C++-plugin which exports custom-written configuration objects as QObject to the declarative environment.&lt;br /&gt;
&lt;br /&gt;
You can query available modules using the --list argument to active-settings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ active-settings --list&lt;br /&gt;
org.kde.active.settings.web             Settings for history, caching, etc.&lt;br /&gt;
org.kde.active.settings.configtest      Test Module for the Config Bindings&lt;br /&gt;
org.kde.active.settings.time            Settings for timezone and date display&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can load an individual module by supplying its plugin name as argument to active-settings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
active-settings org.kde.active.settings.time&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
will open the active-settings app and load the &amp;quot;Time and Date&amp;quot; module on startup.&lt;br /&gt;
&lt;br /&gt;
= Architecture =&lt;br /&gt;
The Active Settings app consists of a number of parts, an Active App, which loads a QML package providing the chrome for active-settings, a set of Declarative components which encapsulate loading settings modules and a set of settings modules, which provide the UI and backend code for a specific settings domain (i.e. Time and Date, Browser settings, etc.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Integrating a Settings Module into an App =&lt;br /&gt;
In order to integrate a settings module &amp;quot;inline&amp;quot; into your app, you can use the SettingsItem component, which comes with the ActiveSettings declarative plugin. SettingsItem provides a PageStack (from PlasmaComponents) with a bit of additional API, the module property. Creating an Item with a settings module is as easy as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.SettingsItem {&lt;br /&gt;
    id: webSettingsItem&lt;br /&gt;
    module: &amp;quot;org.kde.active.settings.time&amp;quot;&lt;br /&gt;
    anchors { ... }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to speed up loading your app, you will want to lazy-load the settings module. This is very easy by using the PageStack features that SettingsItem encapsulates:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.SettingsItem {&lt;br /&gt;
    id: settingsItem&lt;br /&gt;
    initialPage: someOtherItem&lt;br /&gt;
    anchors { [...] }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
PlasmaComponents.Button {&lt;br /&gt;
    // This button toggles the settings item and someOtherPage&lt;br /&gt;
    [...]&lt;br /&gt;
    onClicked: {&lt;br /&gt;
        if (settingsItem.module != &amp;quot;org.kde.active.settings.web&amp;quot;) {&lt;br /&gt;
            settingsItem.module = &amp;quot;org.kde.active.settings.web&amp;quot;&lt;br /&gt;
        } else {&lt;br /&gt;
            // Switching back...&lt;br /&gt;
            settingsItem.replace(someOtherItem);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
    id: someOtherItem&lt;br /&gt;
    /* this guy is shown before any module is loaded */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Creating Your Own Settings Module =&lt;br /&gt;
&lt;br /&gt;
== Simple, QML-only Module ==&lt;br /&gt;
Writing a basic ActiveSettings configuration module is as simple as creating a Plasma Package, using the X-KDE-ServiceTypes &amp;quot;Active/SettingsModule&amp;quot;. The service type registers your package as settings module, so active-settings will find (and list) it, and so it can be loaded using the SettingsItem QML binding. A simple active settings package will look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── contents&lt;br /&gt;
│   └── ui&lt;br /&gt;
│       └── Web.qml&lt;br /&gt;
└── metadata.desktop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The metadata.desktop file holds the plugin information, which script to load from the plugin initially, and a bunch of metadata, just like normal Plasma Packages. A simple metadata.desktop file will look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Name=Web and Browser&lt;br /&gt;
Comment=Settings for history, caching, etc.&lt;br /&gt;
Encoding=UTF-8&lt;br /&gt;
Type=Service&lt;br /&gt;
Icon=preferences-system-network&lt;br /&gt;
X-KDE-ServiceTypes=Active/SettingsModule&lt;br /&gt;
X-KDE-PluginInfo-Author=Sebastian Kügler&lt;br /&gt;
X-KDE-PluginInfo-Email=sebas@kde.org&lt;br /&gt;
X-KDE-PluginInfo-Name=org.kde.active.settings.web&lt;br /&gt;
X-KDE-PluginInfo-Version=1.0&lt;br /&gt;
X-KDE-PluginInfo-Website=http://plasma-active.org&lt;br /&gt;
X-KDE-PluginInfo-Category=Online Services&lt;br /&gt;
X-KDE-PluginInfo-License=GPL&lt;br /&gt;
X-Plasma-MainScript=ui/Web.qml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The interesting bits, specific to active-settings are the plugin name, the package name and the mainscript. The plugin name is used to find the package, and will translates to the &amp;quot;module&amp;quot; property of SettingsItem.&lt;br /&gt;
Web.qml points to a normal Item { [...] } in a file, normal rules apply here.&lt;br /&gt;
&lt;br /&gt;
The CMakeLists.txt file takes care of proper installation and will be needed in order to install and package your settings module. It looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
install(DIRECTORY web/ DESTINATION \&lt;br /&gt;
    ${DATA_INSTALL_DIR}/plasma/packages/org.kde.active.settings.web)&lt;br /&gt;
install(FILES web/metadata.desktop \&lt;br /&gt;
    DESTINATION ${SERVICES_INSTALL_DIR} RENAME plasma-package-org.kde.active.settings.web.desktop)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure the names of the .desktop files in CMakeLists.txt are correct, since incorrect names lead to problems finding and loading your package, or even to conflicts between different modules. In case of doubt check active-settings --list for already installed modules.&lt;br /&gt;
After you installed the plugin (or changed its metadata) you'll need to run &amp;quot;kbuildsycoca4&amp;quot; in order to update the plugin metainformation cache.&lt;br /&gt;
&lt;br /&gt;
== KConfig Bindings ==&lt;br /&gt;
Active Settings provides declarative bindings for KConfigGroup. This means that you can instantiate KConfig objects in your QML code, read and write settings. For many basic use-cases, this provides enough flexibility to do everything that's needed. The browser settings module uses this mechanism:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.kde.plasma.components 0.1 as PlasmaComponents&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.ConfigModel {&lt;br /&gt;
    id: adblockConfig&lt;br /&gt;
    file: &amp;quot;active-webbrowserrc&amp;quot;&lt;br /&gt;
    group: &amp;quot;adblock&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
[...]&lt;br /&gt;
PlasmaComponents.Switch {&lt;br /&gt;
    [...]&lt;br /&gt;
    onClicked: adblockConfig.writeEntry(&amp;quot;adBlockEnabled&amp;quot;, checked);&lt;br /&gt;
    Component.onCompleted: checked = adblockConfig.readEntry(&amp;quot;adBlockEnabled&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you find yourself needing more advanced features from C++ code, you can extend your settings module using a C++ plugin. Of course you can choose to use both, the already provided KConfig bindings, and an additional plugin.&lt;br /&gt;
&lt;br /&gt;
== Extending your Settings Module with with C++ ==&lt;br /&gt;
In some cases, you will find a pure declarative settings module too limited. By extending a settings module with C++ functionality, you can implement functionality in a C++ plugin, which gets automatically loaded with your C++ plugin. This loading is done in the SettingsComponent item provided by the ActiveSettings import. You will usually want to use a SettingsItem in your code, like in the above example. SettingsItem encapsulates the module loading mechanism and provides a PageStack interface. When a new settings module is loaded in the UI (by setting SettingsItem &amp;quot;module&amp;quot; property, the .desktop file is checked for an X-KDE-Library entry (X-KDE-Library=active_settings_time in the Time and Date example).&lt;br /&gt;
&lt;br /&gt;
This loads a small plugin, consisting of two classes:&lt;br /&gt;
* A QObject based class, which registers one or more additional Object to the declarative runtime:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TimeSettingsPlugin::TimeSettingsPlugin(QObject *parent, const QVariantList &amp;amp;list)&lt;br /&gt;
    : QObject(parent)&lt;br /&gt;
{&lt;br /&gt;
    qmlRegisterType&amp;lt;TimeSettings&amp;gt;();&lt;br /&gt;
    qmlRegisterType&amp;lt;TimeZone&amp;gt;();&lt;br /&gt;
    qmlRegisterType&amp;lt;TimeSettings&amp;gt;(&amp;quot;org.kde.active.settings&amp;quot;, 0, 1, &amp;quot;TimeSettings&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* One or more QObject-derived classes which export domain specific settings using QProperties, getters and setters. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class TimeSettings : public QObject&lt;br /&gt;
{&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
&lt;br /&gt;
    [...]&lt;br /&gt;
    Q_PROPERTY(bool twentyFour READ twentyFour WRITE setTwentyFour NOTIFY twentyFourChanged)&lt;br /&gt;
&lt;br /&gt;
    public:&lt;br /&gt;
        TimeSettings();&lt;br /&gt;
        virtual ~TimeSettings();&lt;br /&gt;
&lt;br /&gt;
        [...]&lt;br /&gt;
        bool twentyFour();&lt;br /&gt;
&lt;br /&gt;
    public Q_SLOTS:&lt;br /&gt;
        [...]&lt;br /&gt;
        void setTwentyFour(bool t);&lt;br /&gt;
&lt;br /&gt;
    Q_SIGNALS:&lt;br /&gt;
        [...]&lt;br /&gt;
        void twentyFourChanged();&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        TimeSettingsPrivate* d;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The types are basically reimplemented QObjects, which expose settings to the QML parts of your settings module. [http://doc.qt.nokia.com/4.8-snapshot/qml-extending.html Qt's documentation] has more information on how this works exactly.&lt;br /&gt;
&lt;br /&gt;
In your declarative code, you can then import and instantiate these objects.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.kde.active.settings 0.1&lt;br /&gt;
&lt;br /&gt;
TimeSettings {&lt;br /&gt;
    id: timeSettings&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
PlasmaComponents.Switch {&lt;br /&gt;
    id: twentyFourSwitch&lt;br /&gt;
    checked: timeSettings.twentyFour&lt;br /&gt;
    onClicked : timeSettings.twentyFour = checked&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You will typically want to put code for reading the property in the ctor or getter, and code for writing options, or updating other parts of the UI, but of course more complex constructions are also entirely possible, since the settings plugins can basically provide any kind of QML extensions. When writing to configuration files, you should not forget to sync(); your KConfigObject, and to make sure that apps pick up the changed setting, for example by monitoring the configuration file for changes (watch for the &amp;quot;created()&amp;quot; signal, not for the changed signal, as KConfig doesn't directly write to the config file, but to a temorary file and then atomically moves them.) The plugin has minimal build dependencies, so that providing a settings plugin along with your app is very easy.&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings</id>
		<title>Development/Tutorials/Plasma/QML/ActiveSettings</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings"/>
				<updated>2012-01-01T17:04:57Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: /* Extending your Settings Module with with C++ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial teaches you how you can load Active settings modules into your app, and create your own modules.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Active Settings is an app, much like Plasma Desktop's kcmshell that shows and loads configuration modules. These configuration modules are plugins providing a QML package and an optional C++-plugin which exports custom-written configuration objects as QObject to the declarative environment.&lt;br /&gt;
&lt;br /&gt;
You can query available modules using the --list argument to active-settings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ active-settings --list&lt;br /&gt;
org.kde.active.settings.web             Settings for history, caching, etc.&lt;br /&gt;
org.kde.active.settings.configtest      Test Module for the Config Bindings&lt;br /&gt;
org.kde.active.settings.time            Settings for timezone and date display&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can load an individual module by supplying its plugin name as argument to active-settings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
active-settings org.kde.active.settings.time&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
will open the active-settings app and load the &amp;quot;Time and Date&amp;quot; module on startup.&lt;br /&gt;
&lt;br /&gt;
= Architecture =&lt;br /&gt;
The Active Settings app consists of a number of parts, an Active App, which loads a QML package providing the chrome for active-settings, a set of Declarative components which encapsulate loading settings modules and a set of settings modules, which provide the UI and backend code for a specific settings domain (i.e. Time and Date, Browser settings, etc.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Integrating a Settings Module into an App =&lt;br /&gt;
In order to integrate a settings module &amp;quot;inline&amp;quot; into your app, you can use the SettingsItem component, which comes with the ActiveSettings declarative plugin. SettingsItem provides a PageStack (from PlasmaComponents) with a bit of additional API, the module property. Creating an Item with a settings module is as easy as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.SettingsItem {&lt;br /&gt;
    id: webSettingsItem&lt;br /&gt;
    module: &amp;quot;org.kde.active.settings.time&amp;quot;&lt;br /&gt;
    anchors { ... }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to speed up loading your app, you will want to lazy-load the settings module. This is very easy by using the PageStack features that SettingsItem encapsulates:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.SettingsItem {&lt;br /&gt;
    id: settingsItem&lt;br /&gt;
    initialPage: someOtherItem&lt;br /&gt;
    anchors { [...] }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
PlasmaComponents.Button {&lt;br /&gt;
    // This button toggles the settings item and someOtherPage&lt;br /&gt;
    [...]&lt;br /&gt;
    onClicked: {&lt;br /&gt;
        if (settingsItem.module != &amp;quot;org.kde.active.settings.web&amp;quot;) {&lt;br /&gt;
            settingsItem.module = &amp;quot;org.kde.active.settings.web&amp;quot;&lt;br /&gt;
        } else {&lt;br /&gt;
            // Switching back...&lt;br /&gt;
            settingsItem.replace(someOtherItem);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
    id: someOtherItem&lt;br /&gt;
    /* this guy is shown before any module is loaded */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Creating Your Own Settings Module =&lt;br /&gt;
&lt;br /&gt;
== Simple, QML-only Module ==&lt;br /&gt;
Writing a basic ActiveSettings configuration module is as simple as creating a Plasma Package, using the X-KDE-ServiceTypes &amp;quot;Active/SettingsModule&amp;quot;. The service type registers your package as settings module, so active-settings will find (and list) it, and so it can be loaded using the SettingsItem QML binding. A simple active settings package will look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── contents&lt;br /&gt;
│   └── ui&lt;br /&gt;
│       └── Web.qml&lt;br /&gt;
└── metadata.desktop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The metadata.desktop file holds the plugin information, which script to load from the plugin initially, and a bunch of metadata, just like normal Plasma Packages. A simple metadata.desktop file will look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Name=Web and Browser&lt;br /&gt;
Comment=Settings for history, caching, etc.&lt;br /&gt;
Encoding=UTF-8&lt;br /&gt;
Type=Service&lt;br /&gt;
Icon=preferences-system-network&lt;br /&gt;
X-KDE-ServiceTypes=Active/SettingsModule&lt;br /&gt;
X-KDE-PluginInfo-Author=Sebastian Kügler&lt;br /&gt;
X-KDE-PluginInfo-Email=sebas@kde.org&lt;br /&gt;
X-KDE-PluginInfo-Name=org.kde.active.settings.web&lt;br /&gt;
X-KDE-PluginInfo-Version=1.0&lt;br /&gt;
X-KDE-PluginInfo-Website=http://plasma-active.org&lt;br /&gt;
X-KDE-PluginInfo-Category=Online Services&lt;br /&gt;
X-KDE-PluginInfo-License=GPL&lt;br /&gt;
X-Plasma-MainScript=ui/Web.qml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The interesting bits, specific to active-settings are the plugin name, the package name and the mainscript. The plugin name is used to find the package, and will translates to the &amp;quot;module&amp;quot; property of SettingsItem.&lt;br /&gt;
Web.qml points to a normal Item { [...] } in a file, normal rules apply here.&lt;br /&gt;
&lt;br /&gt;
The CMakeLists.txt file takes care of proper installation and will be needed in order to install and package your settings module. It looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
install(DIRECTORY web/ DESTINATION \&lt;br /&gt;
    ${DATA_INSTALL_DIR}/plasma/packages/org.kde.active.settings.web)&lt;br /&gt;
install(FILES web/metadata.desktop \&lt;br /&gt;
    DESTINATION ${SERVICES_INSTALL_DIR} RENAME plasma-package-org.kde.active.settings.web.desktop)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure the names of the .desktop files in CMakeLists.txt are correct, since incorrect names lead to problems finding and loading your package, or even to conflicts between different modules. In case of doubt check active-settings --list for already installed modules.&lt;br /&gt;
After you installed the plugin (or changed its metadata) you'll need to run &amp;quot;kbuildsycoca4&amp;quot; in order to update the plugin metainformation cache.&lt;br /&gt;
&lt;br /&gt;
== KConfig Bindings ==&lt;br /&gt;
&lt;br /&gt;
== Extending your Settings Module with with C++ ==&lt;br /&gt;
In some cases, you will find a pure declarative settings module too limited. By extending a settings module with C++ functionality, you can implement functionality in a C++ plugin, which gets automatically loaded with your C++ plugin. This loading is done in the SettingsComponent item provided by the ActiveSettings import. You will usually want to use a SettingsItem in your code, like in the above example. SettingsItem encapsulates the module loading mechanism and provides a PageStack interface. When a new settings module is loaded in the UI (by setting SettingsItem &amp;quot;module&amp;quot; property, the .desktop file is checked for an X-KDE-Library entry (X-KDE-Library=active_settings_time in the Time and Date example).&lt;br /&gt;
&lt;br /&gt;
This loads a small plugin, consisting of two classes:&lt;br /&gt;
* A QObject based class, which registers one or more additional Object to the declarative runtime:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TimeSettingsPlugin::TimeSettingsPlugin(QObject *parent, const QVariantList &amp;amp;list)&lt;br /&gt;
    : QObject(parent)&lt;br /&gt;
{&lt;br /&gt;
    qmlRegisterType&amp;lt;TimeSettings&amp;gt;();&lt;br /&gt;
    qmlRegisterType&amp;lt;TimeZone&amp;gt;();&lt;br /&gt;
    qmlRegisterType&amp;lt;TimeSettings&amp;gt;(&amp;quot;org.kde.active.settings&amp;quot;, 0, 1, &amp;quot;TimeSettings&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* One or more QObject-derived classes which export domain specific settings using QProperties, getters and setters. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class TimeSettings : public QObject&lt;br /&gt;
{&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
&lt;br /&gt;
    [...]&lt;br /&gt;
    Q_PROPERTY(bool twentyFour READ twentyFour WRITE setTwentyFour NOTIFY twentyFourChanged)&lt;br /&gt;
&lt;br /&gt;
    public:&lt;br /&gt;
        TimeSettings();&lt;br /&gt;
        virtual ~TimeSettings();&lt;br /&gt;
&lt;br /&gt;
        [...]&lt;br /&gt;
        bool twentyFour();&lt;br /&gt;
&lt;br /&gt;
    public Q_SLOTS:&lt;br /&gt;
        [...]&lt;br /&gt;
        void setTwentyFour(bool t);&lt;br /&gt;
&lt;br /&gt;
    Q_SIGNALS:&lt;br /&gt;
        [...]&lt;br /&gt;
        void twentyFourChanged();&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
        TimeSettingsPrivate* d;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The types are basically reimplemented QObjects, which expose settings to the QML parts of your settings module. [http://doc.qt.nokia.com/4.8-snapshot/qml-extending.html Qt's documentation] has more information on how this works exactly.&lt;br /&gt;
&lt;br /&gt;
In your declarative code, you can then import and instantiate these objects.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.kde.active.settings 0.1&lt;br /&gt;
&lt;br /&gt;
TimeSettings {&lt;br /&gt;
    id: timeSettings&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
PlasmaComponents.Switch {&lt;br /&gt;
    id: twentyFourSwitch&lt;br /&gt;
    checked: timeSettings.twentyFour&lt;br /&gt;
    onClicked : timeSettings.twentyFour = checked&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You will typically want to put code for reading the property in the ctor or getter, and code for writing options, or updating other parts of the UI, but of course more complex constructions are also entirely possible, since the settings plugins can basically provide any kind of QML extensions. When writing to configuration files, you should not forget to sync(); your KConfigObject, and to make sure that apps pick up the changed setting, for example by monitoring the configuration file for changes (watch for the &amp;quot;created()&amp;quot; signal, not for the changed signal, as KConfig doesn't directly write to the config file, but to a temorary file and then atomically moves them.) The plugin has minimal build dependencies, so that providing a settings plugin along with your app is very easy.&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings</id>
		<title>Development/Tutorials/Plasma/QML/ActiveSettings</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings"/>
				<updated>2012-01-01T16:55:09Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: /* Extending your Settings Module with with C++ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial teaches you how you can load Active settings modules into your app, and create your own modules.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Active Settings is an app, much like Plasma Desktop's kcmshell that shows and loads configuration modules. These configuration modules are plugins providing a QML package and an optional C++-plugin which exports custom-written configuration objects as QObject to the declarative environment.&lt;br /&gt;
&lt;br /&gt;
You can query available modules using the --list argument to active-settings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ active-settings --list&lt;br /&gt;
org.kde.active.settings.web             Settings for history, caching, etc.&lt;br /&gt;
org.kde.active.settings.configtest      Test Module for the Config Bindings&lt;br /&gt;
org.kde.active.settings.time            Settings for timezone and date display&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can load an individual module by supplying its plugin name as argument to active-settings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
active-settings org.kde.active.settings.time&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
will open the active-settings app and load the &amp;quot;Time and Date&amp;quot; module on startup.&lt;br /&gt;
&lt;br /&gt;
= Architecture =&lt;br /&gt;
The Active Settings app consists of a number of parts, an Active App, which loads a QML package providing the chrome for active-settings, a set of Declarative components which encapsulate loading settings modules and a set of settings modules, which provide the UI and backend code for a specific settings domain (i.e. Time and Date, Browser settings, etc.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Integrating a Settings Module into an App =&lt;br /&gt;
In order to integrate a settings module &amp;quot;inline&amp;quot; into your app, you can use the SettingsItem component, which comes with the ActiveSettings declarative plugin. SettingsItem provides a PageStack (from PlasmaComponents) with a bit of additional API, the module property. Creating an Item with a settings module is as easy as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.SettingsItem {&lt;br /&gt;
    id: webSettingsItem&lt;br /&gt;
    module: &amp;quot;org.kde.active.settings.time&amp;quot;&lt;br /&gt;
    anchors { ... }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to speed up loading your app, you will want to lazy-load the settings module. This is very easy by using the PageStack features that SettingsItem encapsulates:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.SettingsItem {&lt;br /&gt;
    id: settingsItem&lt;br /&gt;
    initialPage: someOtherItem&lt;br /&gt;
    anchors { [...] }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
PlasmaComponents.Button {&lt;br /&gt;
    // This button toggles the settings item and someOtherPage&lt;br /&gt;
    [...]&lt;br /&gt;
    onClicked: {&lt;br /&gt;
        if (settingsItem.module != &amp;quot;org.kde.active.settings.web&amp;quot;) {&lt;br /&gt;
            settingsItem.module = &amp;quot;org.kde.active.settings.web&amp;quot;&lt;br /&gt;
        } else {&lt;br /&gt;
            // Switching back...&lt;br /&gt;
            settingsItem.replace(someOtherItem);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
    id: someOtherItem&lt;br /&gt;
    /* this guy is shown before any module is loaded */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Creating Your Own Settings Module =&lt;br /&gt;
&lt;br /&gt;
== Simple, QML-only Module ==&lt;br /&gt;
Writing a basic ActiveSettings configuration module is as simple as creating a Plasma Package, using the X-KDE-ServiceTypes &amp;quot;Active/SettingsModule&amp;quot;. The service type registers your package as settings module, so active-settings will find (and list) it, and so it can be loaded using the SettingsItem QML binding. A simple active settings package will look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── contents&lt;br /&gt;
│   └── ui&lt;br /&gt;
│       └── Web.qml&lt;br /&gt;
└── metadata.desktop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The metadata.desktop file holds the plugin information, which script to load from the plugin initially, and a bunch of metadata, just like normal Plasma Packages. A simple metadata.desktop file will look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Name=Web and Browser&lt;br /&gt;
Comment=Settings for history, caching, etc.&lt;br /&gt;
Encoding=UTF-8&lt;br /&gt;
Type=Service&lt;br /&gt;
Icon=preferences-system-network&lt;br /&gt;
X-KDE-ServiceTypes=Active/SettingsModule&lt;br /&gt;
X-KDE-PluginInfo-Author=Sebastian Kügler&lt;br /&gt;
X-KDE-PluginInfo-Email=sebas@kde.org&lt;br /&gt;
X-KDE-PluginInfo-Name=org.kde.active.settings.web&lt;br /&gt;
X-KDE-PluginInfo-Version=1.0&lt;br /&gt;
X-KDE-PluginInfo-Website=http://plasma-active.org&lt;br /&gt;
X-KDE-PluginInfo-Category=Online Services&lt;br /&gt;
X-KDE-PluginInfo-License=GPL&lt;br /&gt;
X-Plasma-MainScript=ui/Web.qml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The interesting bits, specific to active-settings are the plugin name, the package name and the mainscript. The plugin name is used to find the package, and will translates to the &amp;quot;module&amp;quot; property of SettingsItem.&lt;br /&gt;
Web.qml points to a normal Item { [...] } in a file, normal rules apply here.&lt;br /&gt;
&lt;br /&gt;
The CMakeLists.txt file takes care of proper installation and will be needed in order to install and package your settings module. It looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
install(DIRECTORY web/ DESTINATION \&lt;br /&gt;
    ${DATA_INSTALL_DIR}/plasma/packages/org.kde.active.settings.web)&lt;br /&gt;
install(FILES web/metadata.desktop \&lt;br /&gt;
    DESTINATION ${SERVICES_INSTALL_DIR} RENAME plasma-package-org.kde.active.settings.web.desktop)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure the names of the .desktop files in CMakeLists.txt are correct, since incorrect names lead to problems finding and loading your package, or even to conflicts between different modules. In case of doubt check active-settings --list for already installed modules.&lt;br /&gt;
After you installed the plugin (or changed its metadata) you'll need to run &amp;quot;kbuildsycoca4&amp;quot; in order to update the plugin metainformation cache.&lt;br /&gt;
&lt;br /&gt;
== KConfig Bindings ==&lt;br /&gt;
&lt;br /&gt;
== Extending your Settings Module with with C++ ==&lt;br /&gt;
In some cases, you will find a pure declarative settings module too limited. By extending a settings module with C++ functionality, you can implement functionality in a C++ plugin, which gets automatically loaded with your C++ plugin. This loading is done in the SettingsComponent item provided by the ActiveSettings import. You will usually want to use a SettingsItem in your code, like in the above example. SettingsItem encapsulates the module loading mechanism and provides a PageStack interface. When a new settings module is loaded in the UI (by setting SettingsItem &amp;quot;module&amp;quot; property, the .desktop file is checked for an X-KDE-Library entry (X-KDE-Library=active_settings_time in the Time and Date example).&lt;br /&gt;
&lt;br /&gt;
This loads a small plugin, consisting of two classes:&lt;br /&gt;
* A QObject based class, which registers one or more additional Object to the declarative runtime:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TimeSettingsPlugin::TimeSettingsPlugin(QObject *parent, const QVariantList &amp;amp;list)&lt;br /&gt;
    : QObject(parent)&lt;br /&gt;
{&lt;br /&gt;
    qmlRegisterType&amp;lt;TimeSettings&amp;gt;();&lt;br /&gt;
    qmlRegisterType&amp;lt;TimeZone&amp;gt;();&lt;br /&gt;
    qmlRegisterType&amp;lt;TimeSettings&amp;gt;(&amp;quot;org.kde.active.settings&amp;quot;, 0, 1, &amp;quot;TimeSettings&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The types are basically reimplemented QObjects, which expose settings to the QML parts of your settings module.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.kde.active.settings 0.1&lt;br /&gt;
&lt;br /&gt;
TimeSettings {&lt;br /&gt;
    id: timeSettings&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
PlasmaComponents.Switch {&lt;br /&gt;
    id: twentyFourSwitch&lt;br /&gt;
    checked: timeSettings.twentyFour&lt;br /&gt;
    onClicked : timeSettings.twentyFour = checked&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You will typically want to put code for reading the property in the ctor or getter, and code for writing options, or updating other parts of the UI, but of course more complex constructions are also entirely possible, since the settings plugins can basically provide any kind of QML extensions. The plugin has minimal build dependencies, so that providing a settings plugin along with your app is very easy.&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings</id>
		<title>Development/Tutorials/Plasma/QML/ActiveSettings</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings"/>
				<updated>2011-12-30T17:22:30Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: moah installation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial teaches you how you can load Active settings modules into your app, and create your own modules.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Active Settings is an app, much like Plasma Desktop's kcmshell that shows and loads configuration modules. These configuration modules are plugins providing a QML package and an optional C++-plugin which exports custom-written configuration objects as QObject to the declarative environment.&lt;br /&gt;
&lt;br /&gt;
You can query available modules using the --list argument to active-settings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ active-settings --list&lt;br /&gt;
org.kde.active.settings.web             Settings for history, caching, etc.&lt;br /&gt;
org.kde.active.settings.configtest      Test Module for the Config Bindings&lt;br /&gt;
org.kde.active.settings.time            Settings for timezone and date display&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can load an individual module by supplying its plugin name as argument to active-settings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
active-settings org.kde.active.settings.time&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
will open the active-settings app and load the &amp;quot;Time and Date&amp;quot; module on startup.&lt;br /&gt;
&lt;br /&gt;
= Architecture =&lt;br /&gt;
The Active Settings app consists of a number of parts, an Active App, which loads a QML package providing the chrome for active-settings, a set of Declarative components which encapsulate loading settings modules and a set of settings modules, which provide the UI and backend code for a specific settings domain (i.e. Time and Date, Browser settings, etc.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Integrating a Settings Module into an App =&lt;br /&gt;
In order to integrate a settings module &amp;quot;inline&amp;quot; into your app, you can use the SettingsItem component, which comes with the ActiveSettings declarative plugin. SettingsItem provides a PageStack (from PlasmaComponents) with a bit of additional API, the module property. Creating an Item with a settings module is as easy as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.SettingsItem {&lt;br /&gt;
    id: webSettingsItem&lt;br /&gt;
    module: &amp;quot;org.kde.active.settings.time&amp;quot;&lt;br /&gt;
    anchors { ... }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to speed up loading your app, you will want to lazy-load the settings module. This is very easy by using the PageStack features that SettingsItem encapsulates:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.SettingsItem {&lt;br /&gt;
    id: settingsItem&lt;br /&gt;
    initialPage: someOtherItem&lt;br /&gt;
    anchors { [...] }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
PlasmaComponents.Button {&lt;br /&gt;
    // This button toggles the settings item and someOtherPage&lt;br /&gt;
    [...]&lt;br /&gt;
    onClicked: {&lt;br /&gt;
        if (settingsItem.module != &amp;quot;org.kde.active.settings.web&amp;quot;) {&lt;br /&gt;
            settingsItem.module = &amp;quot;org.kde.active.settings.web&amp;quot;&lt;br /&gt;
        } else {&lt;br /&gt;
            // Switching back...&lt;br /&gt;
            settingsItem.replace(someOtherItem);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
    id: someOtherItem&lt;br /&gt;
    /* this guy is shown before any module is loaded */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Creating Your Own Settings Module =&lt;br /&gt;
&lt;br /&gt;
== Simple, QML-only Module ==&lt;br /&gt;
Writing a basic ActiveSettings configuration module is as simple as creating a Plasma Package, using the X-KDE-ServiceTypes &amp;quot;Active/SettingsModule&amp;quot;. The service type registers your package as settings module, so active-settings will find (and list) it, and so it can be loaded using the SettingsItem QML binding. A simple active settings package will look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── contents&lt;br /&gt;
│   └── ui&lt;br /&gt;
│       └── Web.qml&lt;br /&gt;
└── metadata.desktop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The metadata.desktop file holds the plugin information, which script to load from the plugin initially, and a bunch of metadata, just like normal Plasma Packages. A simple metadata.desktop file will look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Name=Web and Browser&lt;br /&gt;
Comment=Settings for history, caching, etc.&lt;br /&gt;
Encoding=UTF-8&lt;br /&gt;
Type=Service&lt;br /&gt;
Icon=preferences-system-network&lt;br /&gt;
X-KDE-ServiceTypes=Active/SettingsModule&lt;br /&gt;
X-KDE-PluginInfo-Author=Sebastian Kügler&lt;br /&gt;
X-KDE-PluginInfo-Email=sebas@kde.org&lt;br /&gt;
X-KDE-PluginInfo-Name=org.kde.active.settings.web&lt;br /&gt;
X-KDE-PluginInfo-Version=1.0&lt;br /&gt;
X-KDE-PluginInfo-Website=http://plasma-active.org&lt;br /&gt;
X-KDE-PluginInfo-Category=Online Services&lt;br /&gt;
X-KDE-PluginInfo-License=GPL&lt;br /&gt;
X-Plasma-MainScript=ui/Web.qml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The interesting bits, specific to active-settings are the plugin name, the package name and the mainscript. The plugin name is used to find the package, and will translates to the &amp;quot;module&amp;quot; property of SettingsItem.&lt;br /&gt;
Web.qml points to a normal Item { [...] } in a file, normal rules apply here.&lt;br /&gt;
&lt;br /&gt;
The CMakeLists.txt file takes care of proper installation and will be needed in order to install and package your settings module. It looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
install(DIRECTORY web/ DESTINATION \&lt;br /&gt;
    ${DATA_INSTALL_DIR}/plasma/packages/org.kde.active.settings.web)&lt;br /&gt;
install(FILES web/metadata.desktop \&lt;br /&gt;
    DESTINATION ${SERVICES_INSTALL_DIR} RENAME plasma-package-org.kde.active.settings.web.desktop)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure the names of the .desktop files in CMakeLists.txt are correct, since incorrect names lead to problems finding and loading your package, or even to conflicts between different modules. In case of doubt check active-settings --list for already installed modules.&lt;br /&gt;
After you installed the plugin (or changed its metadata) you'll need to run &amp;quot;kbuildsycoca4&amp;quot; in order to update the plugin metainformation cache.&lt;br /&gt;
&lt;br /&gt;
== KConfig Bindings ==&lt;br /&gt;
&lt;br /&gt;
== Extending your Settings Module with with C++ ==&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings</id>
		<title>Development/Tutorials/Plasma/QML/ActiveSettings</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings"/>
				<updated>2011-12-30T17:19:57Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: installation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial teaches you how you can load Active settings modules into your app, and create your own modules.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Active Settings is an app, much like Plasma Desktop's kcmshell that shows and loads configuration modules. These configuration modules are plugins providing a QML package and an optional C++-plugin which exports custom-written configuration objects as QObject to the declarative environment.&lt;br /&gt;
&lt;br /&gt;
You can query available modules using the --list argument to active-settings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ active-settings --list&lt;br /&gt;
org.kde.active.settings.web             Settings for history, caching, etc.&lt;br /&gt;
org.kde.active.settings.configtest      Test Module for the Config Bindings&lt;br /&gt;
org.kde.active.settings.time            Settings for timezone and date display&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can load an individual module by supplying its plugin name as argument to active-settings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
active-settings org.kde.active.settings.time&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
will open the active-settings app and load the &amp;quot;Time and Date&amp;quot; module on startup.&lt;br /&gt;
&lt;br /&gt;
= Architecture =&lt;br /&gt;
The Active Settings app consists of a number of parts, an Active App, which loads a QML package providing the chrome for active-settings, a set of Declarative components which encapsulate loading settings modules and a set of settings modules, which provide the UI and backend code for a specific settings domain (i.e. Time and Date, Browser settings, etc.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Integrating a Settings Module into an App =&lt;br /&gt;
In order to integrate a settings module &amp;quot;inline&amp;quot; into your app, you can use the SettingsItem component, which comes with the ActiveSettings declarative plugin. SettingsItem provides a PageStack (from PlasmaComponents) with a bit of additional API, the module property. Creating an Item with a settings module is as easy as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.SettingsItem {&lt;br /&gt;
    id: webSettingsItem&lt;br /&gt;
    module: &amp;quot;org.kde.active.settings.time&amp;quot;&lt;br /&gt;
    anchors { ... }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to speed up loading your app, you will want to lazy-load the settings module. This is very easy by using the PageStack features that SettingsItem encapsulates:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.SettingsItem {&lt;br /&gt;
    id: settingsItem&lt;br /&gt;
    initialPage: someOtherItem&lt;br /&gt;
    anchors { [...] }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
PlasmaComponents.Button {&lt;br /&gt;
    // This button toggles the settings item and someOtherPage&lt;br /&gt;
    [...]&lt;br /&gt;
    onClicked: {&lt;br /&gt;
        if (settingsItem.module != &amp;quot;org.kde.active.settings.web&amp;quot;) {&lt;br /&gt;
            settingsItem.module = &amp;quot;org.kde.active.settings.web&amp;quot;&lt;br /&gt;
        } else {&lt;br /&gt;
            // Switching back...&lt;br /&gt;
            settingsItem.replace(someOtherItem);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
    id: someOtherItem&lt;br /&gt;
    /* this guy is shown before any module is loaded */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Creating Your Own Settings Module =&lt;br /&gt;
&lt;br /&gt;
== Simple, QML-only Module ==&lt;br /&gt;
Writing a basic ActiveSettings configuration module is as simple as creating a Plasma Package, using the X-KDE-ServiceTypes &amp;quot;Active/SettingsModule&amp;quot;. The service type registers your package as settings module, so active-settings will find (and list) it, and so it can be loaded using the SettingsItem QML binding. A simple active settings package will look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── contents&lt;br /&gt;
│   └── ui&lt;br /&gt;
│       └── Web.qml&lt;br /&gt;
└── metadata.desktop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The metadata.desktop file holds the plugin information, which script to load from the plugin initially, and a bunch of metadata, just like normal Plasma Packages. A simple metadata.desktop file will look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Name=Web and Browser&lt;br /&gt;
Comment=Settings for history, caching, etc.&lt;br /&gt;
Encoding=UTF-8&lt;br /&gt;
Type=Service&lt;br /&gt;
Icon=preferences-system-network&lt;br /&gt;
X-KDE-ServiceTypes=Active/SettingsModule&lt;br /&gt;
X-KDE-PluginInfo-Author=Sebastian Kügler&lt;br /&gt;
X-KDE-PluginInfo-Email=sebas@kde.org&lt;br /&gt;
X-KDE-PluginInfo-Name=org.kde.active.settings.web&lt;br /&gt;
X-KDE-PluginInfo-Version=1.0&lt;br /&gt;
X-KDE-PluginInfo-Website=http://plasma-active.org&lt;br /&gt;
X-KDE-PluginInfo-Category=Online Services&lt;br /&gt;
X-KDE-PluginInfo-License=GPL&lt;br /&gt;
X-Plasma-MainScript=ui/Web.qml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The interesting bits, specific to active-settings are the plugin name, the package name and the mainscript. The plugin name is used to find the package, and will translates to the &amp;quot;module&amp;quot; property of SettingsItem.&lt;br /&gt;
Web.qml points to a normal Item { [...] } in a file, normal rules apply here.&lt;br /&gt;
&lt;br /&gt;
The CMakeLists.txt file takes care of proper installation and will be needed in order to install and package your settings module. It looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
install(DIRECTORY web/ DESTINATION \&lt;br /&gt;
    ${DATA_INSTALL_DIR}/plasma/packages/org.kde.active.settings.web)&lt;br /&gt;
install(FILES web/metadata.desktop \&lt;br /&gt;
    DESTINATION ${SERVICES_INSTALL_DIR} RENAME plasma-package-org.kde.active.settings.web.desktop)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== KConfig Bindings ==&lt;br /&gt;
&lt;br /&gt;
== Extending your Settings Module with with C++ ==&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings</id>
		<title>Development/Tutorials/Plasma/QML/ActiveSettings</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings"/>
				<updated>2011-12-30T17:04:40Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: /* Integrating a Settings Module into an App */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial teaches you how you can load Active settings modules into your app, and create your own modules.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Active Settings is an app, much like Plasma Desktop's kcmshell that shows and loads configuration modules. These configuration modules are plugins providing a QML package and an optional C++-plugin which exports custom-written configuration objects as QObject to the declarative environment.&lt;br /&gt;
&lt;br /&gt;
You can query available modules using the --list argument to active-settings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ active-settings --list&lt;br /&gt;
org.kde.active.settings.web             Settings for history, caching, etc.&lt;br /&gt;
org.kde.active.settings.configtest      Test Module for the Config Bindings&lt;br /&gt;
org.kde.active.settings.time            Settings for timezone and date display&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can load an individual module by supplying its plugin name as argument to active-settings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
active-settings org.kde.active.settings.time&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
will open the active-settings app and load the &amp;quot;Time and Date&amp;quot; module on startup.&lt;br /&gt;
&lt;br /&gt;
= Architecture =&lt;br /&gt;
The Active Settings app consists of a number of parts, an Active App, which loads a QML package providing the chrome for active-settings, a set of Declarative components which encapsulate loading settings modules and a set of settings modules, which provide the UI and backend code for a specific settings domain (i.e. Time and Date, Browser settings, etc.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Integrating a Settings Module into an App =&lt;br /&gt;
In order to integrate a settings module &amp;quot;inline&amp;quot; into your app, you can use the SettingsItem component, which comes with the ActiveSettings declarative plugin. SettingsItem provides a PageStack (from PlasmaComponents) with a bit of additional API, the module property. Creating an Item with a settings module is as easy as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.SettingsItem {&lt;br /&gt;
    id: webSettingsItem&lt;br /&gt;
    module: &amp;quot;org.kde.active.settings.time&amp;quot;&lt;br /&gt;
    anchors { ... }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to speed up loading your app, you will want to lazy-load the settings module. This is very easy by using the PageStack features that SettingsItem encapsulates:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.SettingsItem {&lt;br /&gt;
    id: settingsItem&lt;br /&gt;
    initialPage: someOtherItem&lt;br /&gt;
    anchors { [...] }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
PlasmaComponents.Button {&lt;br /&gt;
    // This button toggles the settings item and someOtherPage&lt;br /&gt;
    [...]&lt;br /&gt;
    onClicked: {&lt;br /&gt;
        if (settingsItem.module != &amp;quot;org.kde.active.settings.web&amp;quot;) {&lt;br /&gt;
            settingsItem.module = &amp;quot;org.kde.active.settings.web&amp;quot;&lt;br /&gt;
        } else {&lt;br /&gt;
            // Switching back...&lt;br /&gt;
            settingsItem.replace(someOtherItem);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
    id: someOtherItem&lt;br /&gt;
    /* this guy is shown before any module is loaded */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Creating Your Own Settings Module =&lt;br /&gt;
&lt;br /&gt;
== Simple, QML-only Module ==&lt;br /&gt;
&lt;br /&gt;
== Extending your Settings Module with with C++ ==&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings</id>
		<title>Development/Tutorials/Plasma/QML/ActiveSettings</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings"/>
				<updated>2011-12-30T16:58:18Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: example for inlining a settings module&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial teaches you how you can load Active settings modules into your app, and create your own modules.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Active Settings is an app, much like Plasma Desktop's kcmshell that shows and loads configuration modules. These configuration modules are plugins providing a QML package and an optional C++-plugin which exports custom-written configuration objects as QObject to the declarative environment.&lt;br /&gt;
&lt;br /&gt;
You can query available modules using the --list argument to active-settings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ active-settings --list&lt;br /&gt;
org.kde.active.settings.web             Settings for history, caching, etc.&lt;br /&gt;
org.kde.active.settings.configtest      Test Module for the Config Bindings&lt;br /&gt;
org.kde.active.settings.time            Settings for timezone and date display&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can load an individual module by supplying its plugin name as argument to active-settings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
active-settings org.kde.active.settings.time&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
will open the active-settings app and load the &amp;quot;Time and Date&amp;quot; module on startup.&lt;br /&gt;
&lt;br /&gt;
= Architecture =&lt;br /&gt;
The Active Settings app consists of a number of parts, an Active App, which loads a QML package providing the chrome for active-settings, a set of Declarative components which encapsulate loading settings modules and a set of settings modules, which provide the UI and backend code for a specific settings domain (i.e. Time and Date, Browser settings, etc.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Integrating a Settings Module into an App =&lt;br /&gt;
In order to integrate a settings module &amp;quot;inline&amp;quot; into your app, you can use the SettingsItem component, which comes with the ActiveSettings declarative plugin. SettingsItem provides a PageStack (from PlasmaComponents) with a bit of additional API, the module property. Creating an Item with a settings module is as easy as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import org.kde.active.settings 0.1 as ActiveSettings&lt;br /&gt;
[...]&lt;br /&gt;
ActiveSettings.SettingsItem {&lt;br /&gt;
    id: webSettingsItem&lt;br /&gt;
    module: &amp;quot;org.kde.active.settings.time&amp;quot;&lt;br /&gt;
    anchors { ... }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Creating Your Own Settings Module =&lt;br /&gt;
&lt;br /&gt;
== Simple, QML-only Module ==&lt;br /&gt;
&lt;br /&gt;
== Extending your Settings Module with with C++ ==&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings</id>
		<title>Development/Tutorials/Plasma/QML/ActiveSettings</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings"/>
				<updated>2011-12-30T16:53:40Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: a bit of structure to fill&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial teaches you how you can load Active settings modules into your app, and create your own modules.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Active Settings is an app, much like Plasma Desktop's kcmshell that shows and loads configuration modules. These configuration modules are plugins providing a QML package and an optional C++-plugin which exports custom-written configuration objects as QObject to the declarative environment.&lt;br /&gt;
&lt;br /&gt;
You can query available modules using the --list argument to active-settings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ active-settings --list&lt;br /&gt;
org.kde.active.settings.web             Settings for history, caching, etc.&lt;br /&gt;
org.kde.active.settings.configtest      Test Module for the Config Bindings&lt;br /&gt;
org.kde.active.settings.time            Settings for timezone and date display&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can load an individual module by supplying its plugin name as argument to active-settings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
active-settings org.kde.active.settings.time&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
will open the active-settings app and load the &amp;quot;Time and Date&amp;quot; module on startup.&lt;br /&gt;
&lt;br /&gt;
= Architecture =&lt;br /&gt;
The Active Settings app consists of a number of parts, an Active App, which loads a QML package providing the chrome for active-settings, a set of Declarative components which encapsulate loading settings modules and a set of settings modules, which provide the UI and backend code for a specific settings domain (i.e. Time and Date, Browser settings, etc.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Integrating a Settings Module into an App =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Creating Your Own Settings Module =&lt;br /&gt;
&lt;br /&gt;
== Simple, QML-only Module ==&lt;br /&gt;
&lt;br /&gt;
== Extending your Settings Module with with C++ ==&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings</id>
		<title>Development/Tutorials/Plasma/QML/ActiveSettings</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings"/>
				<updated>2011-12-30T16:49:07Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: /* Architecture */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial teaches you how you can load Active settings modules into your app, and create your own modules.&lt;br /&gt;
&lt;br /&gt;
= Architecture =&lt;br /&gt;
Active Settings is an app, much like Plasma Desktop's kcmshell that shows and loads configuration modules. These configuration modules are plugins providing a QML package and an optional C++-plugin which exports custom-written configuration objects as QObject to the declarative environment.&lt;br /&gt;
&lt;br /&gt;
You can query available modules using the --list argument to active-settings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ active-settings --list&lt;br /&gt;
org.kde.active.settings.web             Settings for history, caching, etc.&lt;br /&gt;
org.kde.active.settings.configtest      Test Module for the Config Bindings&lt;br /&gt;
org.kde.active.settings.time            Settings for timezone and date display&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can load an individual module by supplying its plugin name as argument to active-settings:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
active-settings org.kde.active.settings.time&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
will open the active-settings app and load the &amp;quot;Time and Date&amp;quot; module on startup.&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings</id>
		<title>Development/Tutorials/Plasma/QML/ActiveSettings</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings"/>
				<updated>2011-12-30T16:47:54Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial teaches you how you can load Active settings modules into your app, and create your own modules.&lt;br /&gt;
&lt;br /&gt;
= Architecture =&lt;br /&gt;
Active Settings is an app, much like Plasma Desktop's kcmshell that shows and loads configuration modules. These configuration modules are plugins providing a QML package and an optional C++-plugin which exports custom-written configuration objects as QObject to the declarative environment.&lt;br /&gt;
&lt;br /&gt;
You can query available modules using the --list argument to active-settings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ active-settings --list                                               org.kde.active.settings.web             Settings for history, caching, etc.&lt;br /&gt;
org.kde.active.settings.configtest              Test Module for the Config Bindings&lt;br /&gt;
org.kde.active.settings.time            Settings for timezone and date display&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can load an individual module by supplying its plugin name as argument to active-settings:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
active-settings org.kde.active.settings.time&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
will open the active-settings app and load the &amp;quot;Time and Date&amp;quot; module on startup.&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings</id>
		<title>Development/Tutorials/Plasma/QML/ActiveSettings</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/ActiveSettings"/>
				<updated>2011-12-30T16:36:32Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: start active-settings docu&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial teaches you how you can load Active settings modules into your app, and create your own modules.&lt;br /&gt;
&lt;br /&gt;
= Architecture =&lt;br /&gt;
Active Settings is an app, much like Plasma Desktop's kcmshell that shows and loads configuration modules. These configuration modules are plugins providing a QML package and an optional C++-plugin which exports custom-written configuration objects as QObject to the declarative environment.&lt;br /&gt;
&lt;br /&gt;
You can query available modules using the --list argument to active-settings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
$ active-settings --list                                               org.kde.active.settings.web             Settings for history, caching, etc.&lt;br /&gt;
org.kde.active.settings.configtest              Test Module for the Config Bindings&lt;br /&gt;
org.kde.active.settings.time            Settings for timezone and date display&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can load an individual module by supplying its plugin name as argument to active-settings:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
active-settings org.kde.active.settings.time&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
will open the active-settings app and load the &amp;quot;Time and Date&amp;quot; module on startup.&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Schedules/KDE4/4.8_Feature_Plan</id>
		<title>Schedules/KDE4/4.8 Feature Plan</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Schedules/KDE4/4.8_Feature_Plan"/>
				<updated>2011-10-25T09:42:37Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: webthumbnails&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of planned features for the SC 4.8 release. &lt;br /&gt;
&lt;br /&gt;
See also: &lt;br /&gt;
&lt;br /&gt;
*[[Schedules/KDE4/4.8 Release Schedule]] &lt;br /&gt;
*[[Schedules/KDE4/4.8 Release Goals]] &lt;br /&gt;
*[[Schedules/KDE4/4.7 Feature Plan]] (previous major release)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; Legend: &lt;br /&gt;
&lt;br /&gt;
*todo =&amp;amp;gt; not started yet &lt;br /&gt;
*in-progress =&amp;amp;gt; started, but not completed yet &lt;br /&gt;
*done =&amp;amp;gt; completed&lt;br /&gt;
&lt;br /&gt;
__TOC__ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-workspace =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|KWin|Take over screensaver/locking management from KRunner|alex.merry@kdemail.net|Alex Merry}}&lt;br /&gt;
{{FeatureInProgress|KCM|make mouse cursor size configurable (http://git.reviewboard.kde.org/r/101701/)|SommerLuk@gmail.com|Lukas Sommer}}&lt;br /&gt;
{{FeatureDone|powerdevil|Remove Desktop Effects Management|drf@kde.org|Dario Freddi}}&lt;br /&gt;
{{FeatureInProgress|powerdevil|Allow static profiles only|drf@kde.org|Dario Freddi}}&lt;br /&gt;
{{FeatureInProgress|powerdevil|Allow activity interaction|drf@kde.org|Dario Freddi}}&lt;br /&gt;
{{FeatureTodo|Plasma|Add MPRIS2 support to nowplaying|alex.merry@kdemail.net|Alex Merry}}&lt;br /&gt;
{{FeatureInProgress|Plasma|Allow task grouping on the taskbar to work together with kwin window tabbing|akreuzkamp@web.de|Anton Kreuzkamp}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-runtime =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|ksecretsserviced|KSecretsService daemon implementing the freedesktop.org secrets API. KDE applications will want to use the related kdelibs API (see below)|kde@rusu.info|Valentin Rusu}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|DrKonqi|Better duplicate detection|mat69@gmx.net|Matthias Fuchs}}&lt;br /&gt;
{{FeatureInProgress|KIO Thumbnails|webthumbnails plugin|sebas@kde.org|Sebastian Kügler}}&lt;br /&gt;
{{FeatureInProgress|DrKonqi|Scripting support|mat69@gmx.net|Matthias Fuchs}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdelibs =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Kate Part|Line modification system|dhaumann@kde.org|Dominik Haumann}}&lt;br /&gt;
{{FeatureDone|Kate Part|Modeline Editor|dhaumann@kde.org|Dominik Haumann}}&lt;br /&gt;
{{FeatureDone|Kate Part|Reliable code folding|adrian.lungu89@gmail.com|Adrian Lungu}}&lt;br /&gt;
{{FeatureDone|Kate Part|Improved vi input mode|svatoslav1@gmail.com|Svyatoslav Kuzmich}}&lt;br /&gt;
{{FeatureInProgress|KIO|PreviewJob supports URLs|sebas@kde.org|Sebastian Kügler}}&lt;br /&gt;
{{FeatureInProgress|kdeui|KSecretsService API addition|kde@rusu.info|Valentin Rusu}}&lt;br /&gt;
{{FeatureInProgress|kdeui/util|Connect KWallet class to KSecretsService client API|kde@rusu.info|Valentin Rusu}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-baseapps =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|Dolphin|Implement new view-engine for Dolphin 2.0 (see http://ppenz.blogspot.com/2011/08/introducing-dolphin-20.html)|peter.penz19@gmail.com|Peter Penz}}&lt;br /&gt;
{{FeatureTodo|Dolphin|Implement support for back/forward mouse buttons|sebasti@n-doerner.de|Sebastian Dörner}}&lt;br /&gt;
{{FeatureDone|Kate|Search &amp;amp; Replace in files plugin|kare.sars@iki.fi|Kåre Särs}}&lt;br /&gt;
{{FeatureInProgress|Kate|Make GDB target selection behave like the build plugin |kare.sars@iki.fi|Kåre Särs}}&lt;br /&gt;
{{FeatureInProgress|Kate|Add convenience options for remote debugging|kare.sars@iki.fi|Kåre Särs}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeedu  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|KTouch|New organisation of keyboard and lecture files according to languages|peter.ruethemann@gmail.com|Rüthemann Peter}}&lt;br /&gt;
{{FeatureInProgress|KTouch|New organisation of menu system: Training, Statistic, Settings|peter.ruethemann@gmail.com|Rüthemann Peter}}&lt;br /&gt;
{{FeatureTodo|KTouch|End of lecture statistics|peter.ruethemann@gmail.com|Rüthemann Peter}}&lt;br /&gt;
{{FeatureDone|Rocs|Alignment Actions to minimize crossing graph edges|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureTodo|Rocs|Project Files to combine graphs and algorithms|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureTodo|Rocs|Stepped Execution of Algorithms|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureInProgress|Rocs|Resurrect import-/export-features|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureInProgress|Rocs|User Interface Cleanup|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureInProgress|Cantor|Add Qalculate backend|matteo@agostinelli.me|Matteo Agostinelli}}&lt;br /&gt;
{{FeatureDone|Marble|Marble Runner plugins for Parsing files|tgridel@freedotfr|Thibaut Gridel}}&lt;br /&gt;
{{FeatureDone|Marble|(GSoC) OSM file rendering|oblaukhov.konstantin@gmail.com|Konstantin Oblaukhov}}&lt;br /&gt;
{{FeatureDone|Marble|Marble Graphics Scene (Performance of Vector Drawing)|oblaukhov.konstantin@gmail.com|Konstantin Oblaukhov}}&lt;br /&gt;
{{FeatureDone|Marble|Gps Info Plugin|tgridel@freedotfr|Thibaut Gridel}}&lt;br /&gt;
{{FeatureDone|Marble|Improve LatLonEdit to allow input as Radian and DM|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureInProgress|Marble|Routing API|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureInProgress|Marble|Adjustable Map Orientation (Rotation in Screen Plane)|bbeschow@cs.tu-berlin.de|Bernhard Beschow}}&lt;br /&gt;
{{FeatureInProgress|Marble|Speedometer Plugin|bbeschow@cs.tu-berlin.de|Bernhard Beschow}}&lt;br /&gt;
{{FeatureInProgress|Marble|Plasma Runner for geo coords and Marble bookmarks|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureInProgress|Marble|Make bookmark editor support editing the lonlat coordinates|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Marble|Fix GeoDataCoordinates parsing from a QString|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|KTurtle|Add modulo command|nielsslot@gmaildotcom|Niels Slot}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdepim  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo&lt;br /&gt;
|attachment:/ kio-slave&lt;br /&gt;
|Implement kio-slave to access (email) attachments in Akonadi&lt;br /&gt;
|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|KAlarm|Port to Akonadi|djarvie@kde.org|David Jarvie}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo&lt;br /&gt;
|sieve: implement wizard&lt;br /&gt;
|Implement wizard to help user to create sieve script&lt;br /&gt;
|montel@kde.org|Montel Laurent}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress&lt;br /&gt;
|HTML Replies&lt;br /&gt;
|Give messagecomposer (especially for KMail) the ability to compose replies in HTML&lt;br /&gt;
|nyblom@kde.org|Torgny Nyblom}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdesdk  =&lt;br /&gt;
&lt;br /&gt;
{| cellspa/cing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|Okteta|Add a general KPart adapter to Kasten, than finish port of Okteta KPart to Okteta Kasten|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add global toggle option for the offset display, hex or decimal|kossebau@kde.org|Friedrich W. H. Kossebau}} &lt;br /&gt;
{{FeatureTodo|Okteta|Add Kate-like combined dialogs to query for actions on files|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add Kate-like search tool|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add Okular like embedded notifications|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for import by drop, both url and data|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for memory mapping of files and 64-bit addressing|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for jobs like io, printing, string search or filter|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add view profiles, incl. editor/manager|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|copy again puts also a value or char variant of the data to clipboard|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Improve the titels of the changes to the bytearray to be more descriptive, best using ids to avoid text string|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Make all user interaction in the KastenCore managers plugin-based|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Merge row and column widgets into one|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Store bookmarks|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Store bookmarks and other view settings for next load|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add custom datatypes to structures tool|alex.richardson@gmx.de|Alex Richardson}}&lt;br /&gt;
{{FeatureInProgress|Okteta|Add Flags Datatype to structures tool|alex.richardson@gmx.de|Alex Richardson}}&lt;br /&gt;
{{FeatureInProgress|dolphin-plugins|Mercurial plugin for Dolphin|vishesh3y@gmail.com|Vishesh Yadav}} &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdegames=&lt;br /&gt;
{| cellspa/cing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureDone|Libkdegames|Improve graphics performance in all games by standardizing on the use of Qt Raster Graphics.|stefan.majewsky@googlemail.com|Stefan Majewsky}}{{FeatureInProgress|KSudoku|Add a new generator and solver to KSudoku, based on published algorithms. This will provide a full range of puzzle difficulties, rather than mainly easy puzzles, and will address bug 217925 and its duplicates 228614 and 237262 (now nearly two years old).|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureInProgress|KSudoku|Re-implement the puzzle-symmetry feature.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureInProgress|KSudoku|Re-order the puzzle types on the welcome screen.  Use KDE Games Difficulty combo-box instead of a slider. Save user's choices of puzzle between sessions.  Do minor tidy-ups of the user interface.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureInProgress|KGoldrunner|Add the championship level &amp;quot;Gold Rush&amp;quot; game, with Traditional rules, contributed by Gabriel Miltschitzky.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureInProgress|KGoldrunner|Add the championship level &amp;quot;Jail Break&amp;quot; game, with KGoldrunner rules, contributed by Gabriel Miltschitzky.|iandw.au@gmail.com|Ian Wadham}}|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdegraphics=&lt;br /&gt;
{| cellspa/cing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureInProgress|Okular|Reset Form Action support|aacid@kde.org|Albert Astals Cid}}&lt;br /&gt;
{{FeatureInProgress|Gwenview|Animated image transitions|agateau@kde.org|Aurélien Gâteau}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeutils=&lt;br /&gt;
{| cellspa/cing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureInProgress|ksecrets|A suite of tools related to the KSecretsService infrastructure|kde@rusu.info|Valentin Rusu}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdenetwork=&lt;br /&gt;
{| cellspa/cing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureInProgress|KGet|Better interaction for torrents if they are seeding and other downloads stopped because of that|mat69@gmx.net|Matthias Fuchs}}&lt;br /&gt;
{{FeatureInProgress|KGet|Class that handles deleting files|mat69@gmx.net|Matthias Fuchs}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeplasma-addons =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|Kimpanel|Port kimpanel to DataEngine based one|wengxt@gmail.com|Xuetian Weng}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Schedules/KDE4/4.8_Feature_Plan</id>
		<title>Schedules/KDE4/4.8 Feature Plan</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Schedules/KDE4/4.8_Feature_Plan"/>
				<updated>2011-10-25T09:41:43Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: previewjob urls&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of planned features for the SC 4.8 release. &lt;br /&gt;
&lt;br /&gt;
See also: &lt;br /&gt;
&lt;br /&gt;
*[[Schedules/KDE4/4.8 Release Schedule]] &lt;br /&gt;
*[[Schedules/KDE4/4.8 Release Goals]] &lt;br /&gt;
*[[Schedules/KDE4/4.7 Feature Plan]] (previous major release)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; Legend: &lt;br /&gt;
&lt;br /&gt;
*todo =&amp;amp;gt; not started yet &lt;br /&gt;
*in-progress =&amp;amp;gt; started, but not completed yet &lt;br /&gt;
*done =&amp;amp;gt; completed&lt;br /&gt;
&lt;br /&gt;
__TOC__ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-workspace =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|KWin|Take over screensaver/locking management from KRunner|alex.merry@kdemail.net|Alex Merry}}&lt;br /&gt;
{{FeatureInProgress|KCM|make mouse cursor size configurable (http://git.reviewboard.kde.org/r/101701/)|SommerLuk@gmail.com|Lukas Sommer}}&lt;br /&gt;
{{FeatureDone|powerdevil|Remove Desktop Effects Management|drf@kde.org|Dario Freddi}}&lt;br /&gt;
{{FeatureInProgress|powerdevil|Allow static profiles only|drf@kde.org|Dario Freddi}}&lt;br /&gt;
{{FeatureInProgress|powerdevil|Allow activity interaction|drf@kde.org|Dario Freddi}}&lt;br /&gt;
{{FeatureTodo|Plasma|Add MPRIS2 support to nowplaying|alex.merry@kdemail.net|Alex Merry}}&lt;br /&gt;
{{FeatureInProgress|Plasma|Allow task grouping on the taskbar to work together with kwin window tabbing|akreuzkamp@web.de|Anton Kreuzkamp}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-runtime =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|ksecretsserviced|KSecretsService daemon implementing the freedesktop.org secrets API. KDE applications will want to use the related kdelibs API (see below)|kde@rusu.info|Valentin Rusu}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|DrKonqi|Better duplicate detection|mat69@gmx.net|Matthias Fuchs}}&lt;br /&gt;
{{FeatureInProgress|DrKonqi|Scripting support|mat69@gmx.net|Matthias Fuchs}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdelibs =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureDone|Kate Part|Line modification system|dhaumann@kde.org|Dominik Haumann}}&lt;br /&gt;
{{FeatureDone|Kate Part|Modeline Editor|dhaumann@kde.org|Dominik Haumann}}&lt;br /&gt;
{{FeatureDone|Kate Part|Reliable code folding|adrian.lungu89@gmail.com|Adrian Lungu}}&lt;br /&gt;
{{FeatureDone|Kate Part|Improved vi input mode|svatoslav1@gmail.com|Svyatoslav Kuzmich}}&lt;br /&gt;
{{FeatureInProgress|KIO|PreviewJob supports URLs|sebas@kde.org|Sebastian Kügler}}&lt;br /&gt;
{{FeatureInProgress|kdeui|KSecretsService API addition|kde@rusu.info|Valentin Rusu}}&lt;br /&gt;
{{FeatureInProgress|kdeui/util|Connect KWallet class to KSecretsService client API|kde@rusu.info|Valentin Rusu}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kde-baseapps =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|Dolphin|Implement new view-engine for Dolphin 2.0 (see http://ppenz.blogspot.com/2011/08/introducing-dolphin-20.html)|peter.penz19@gmail.com|Peter Penz}}&lt;br /&gt;
{{FeatureTodo|Dolphin|Implement support for back/forward mouse buttons|sebasti@n-doerner.de|Sebastian Dörner}}&lt;br /&gt;
{{FeatureDone|Kate|Search &amp;amp; Replace in files plugin|kare.sars@iki.fi|Kåre Särs}}&lt;br /&gt;
{{FeatureInProgress|Kate|Make GDB target selection behave like the build plugin |kare.sars@iki.fi|Kåre Särs}}&lt;br /&gt;
{{FeatureInProgress|Kate|Add convenience options for remote debugging|kare.sars@iki.fi|Kåre Särs}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeedu  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|KTouch|New organisation of keyboard and lecture files according to languages|peter.ruethemann@gmail.com|Rüthemann Peter}}&lt;br /&gt;
{{FeatureInProgress|KTouch|New organisation of menu system: Training, Statistic, Settings|peter.ruethemann@gmail.com|Rüthemann Peter}}&lt;br /&gt;
{{FeatureTodo|KTouch|End of lecture statistics|peter.ruethemann@gmail.com|Rüthemann Peter}}&lt;br /&gt;
{{FeatureDone|Rocs|Alignment Actions to minimize crossing graph edges|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureTodo|Rocs|Project Files to combine graphs and algorithms|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureTodo|Rocs|Stepped Execution of Algorithms|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureInProgress|Rocs|Resurrect import-/export-features|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureInProgress|Rocs|User Interface Cleanup|cola@uni-paderborn.de|Andreas Cord-Landwehr}}&lt;br /&gt;
{{FeatureInProgress|Cantor|Add Qalculate backend|matteo@agostinelli.me|Matteo Agostinelli}}&lt;br /&gt;
{{FeatureDone|Marble|Marble Runner plugins for Parsing files|tgridel@freedotfr|Thibaut Gridel}}&lt;br /&gt;
{{FeatureDone|Marble|(GSoC) OSM file rendering|oblaukhov.konstantin@gmail.com|Konstantin Oblaukhov}}&lt;br /&gt;
{{FeatureDone|Marble|Marble Graphics Scene (Performance of Vector Drawing)|oblaukhov.konstantin@gmail.com|Konstantin Oblaukhov}}&lt;br /&gt;
{{FeatureDone|Marble|Gps Info Plugin|tgridel@freedotfr|Thibaut Gridel}}&lt;br /&gt;
{{FeatureDone|Marble|Improve LatLonEdit to allow input as Radian and DM|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureInProgress|Marble|Routing API|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureInProgress|Marble|Adjustable Map Orientation (Rotation in Screen Plane)|bbeschow@cs.tu-berlin.de|Bernhard Beschow}}&lt;br /&gt;
{{FeatureInProgress|Marble|Speedometer Plugin|bbeschow@cs.tu-berlin.de|Bernhard Beschow}}&lt;br /&gt;
{{FeatureInProgress|Marble|Plasma Runner for geo coords and Marble bookmarks|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureInProgress|Marble|Make bookmark editor support editing the lonlat coordinates|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Marble|Fix GeoDataCoordinates parsing from a QString|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|KTurtle|Add modulo command|nielsslot@gmaildotcom|Niels Slot}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdepim  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo&lt;br /&gt;
|attachment:/ kio-slave&lt;br /&gt;
|Implement kio-slave to access (email) attachments in Akonadi&lt;br /&gt;
|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|KAlarm|Port to Akonadi|djarvie@kde.org|David Jarvie}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureTodo&lt;br /&gt;
|sieve: implement wizard&lt;br /&gt;
|Implement wizard to help user to create sieve script&lt;br /&gt;
|montel@kde.org|Montel Laurent}}&lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress&lt;br /&gt;
|HTML Replies&lt;br /&gt;
|Give messagecomposer (especially for KMail) the ability to compose replies in HTML&lt;br /&gt;
|nyblom@kde.org|Torgny Nyblom}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdesdk  =&lt;br /&gt;
&lt;br /&gt;
{| cellspa/cing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|Okteta|Add a general KPart adapter to Kasten, than finish port of Okteta KPart to Okteta Kasten|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add global toggle option for the offset display, hex or decimal|kossebau@kde.org|Friedrich W. H. Kossebau}} &lt;br /&gt;
{{FeatureTodo|Okteta|Add Kate-like combined dialogs to query for actions on files|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add Kate-like search tool|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add Okular like embedded notifications|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for import by drop, both url and data|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for memory mapping of files and 64-bit addressing|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for jobs like io, printing, string search or filter|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add view profiles, incl. editor/manager|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|copy again puts also a value or char variant of the data to clipboard|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Improve the titels of the changes to the bytearray to be more descriptive, best using ids to avoid text string|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Make all user interaction in the KastenCore managers plugin-based|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Merge row and column widgets into one|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Store bookmarks|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Store bookmarks and other view settings for next load|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add custom datatypes to structures tool|alex.richardson@gmx.de|Alex Richardson}}&lt;br /&gt;
{{FeatureInProgress|Okteta|Add Flags Datatype to structures tool|alex.richardson@gmx.de|Alex Richardson}}&lt;br /&gt;
{{FeatureInProgress|dolphin-plugins|Mercurial plugin for Dolphin|vishesh3y@gmail.com|Vishesh Yadav}} &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdegames=&lt;br /&gt;
{| cellspa/cing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureDone|Libkdegames|Improve graphics performance in all games by standardizing on the use of Qt Raster Graphics.|stefan.majewsky@googlemail.com|Stefan Majewsky}}{{FeatureInProgress|KSudoku|Add a new generator and solver to KSudoku, based on published algorithms. This will provide a full range of puzzle difficulties, rather than mainly easy puzzles, and will address bug 217925 and its duplicates 228614 and 237262 (now nearly two years old).|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureInProgress|KSudoku|Re-implement the puzzle-symmetry feature.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureInProgress|KSudoku|Re-order the puzzle types on the welcome screen.  Use KDE Games Difficulty combo-box instead of a slider. Save user's choices of puzzle between sessions.  Do minor tidy-ups of the user interface.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureInProgress|KGoldrunner|Add the championship level &amp;quot;Gold Rush&amp;quot; game, with Traditional rules, contributed by Gabriel Miltschitzky.|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureInProgress|KGoldrunner|Add the championship level &amp;quot;Jail Break&amp;quot; game, with KGoldrunner rules, contributed by Gabriel Miltschitzky.|iandw.au@gmail.com|Ian Wadham}}|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdegraphics=&lt;br /&gt;
{| cellspa/cing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureInProgress|Okular|Reset Form Action support|aacid@kde.org|Albert Astals Cid}}&lt;br /&gt;
{{FeatureInProgress|Gwenview|Animated image transitions|agateau@kde.org|Aurélien Gâteau}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeutils=&lt;br /&gt;
{| cellspa/cing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureInProgress|ksecrets|A suite of tools related to the KSecretsService infrastructure|kde@rusu.info|Valentin Rusu}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdenetwork=&lt;br /&gt;
{| cellspa/cing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureInProgress|KGet|Better interaction for torrents if they are seeding and other downloads stopped because of that|mat69@gmx.net|Matthias Fuchs}}&lt;br /&gt;
{{FeatureInProgress|KGet|Class that handles deleting files|mat69@gmx.net|Matthias Fuchs}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeplasma-addons =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
&lt;br /&gt;
{{FeatureInProgress|Kimpanel|Port kimpanel to DataEngine based one|wengxt@gmail.com|Xuetian Weng}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Review_Board</id>
		<title>Development/Review Board</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Review_Board"/>
				<updated>2011-03-21T12:11:40Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: added note where to download post-review&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KDE Review Board =&lt;br /&gt;
&lt;br /&gt;
KDE currently uses the [http://www.reviewboard.org/ Review Board] software for performing reviews on code changes.&lt;br /&gt;
&lt;br /&gt;
There are separate versions of Review Board for use with Git and Subversion:&lt;br /&gt;
* [http://git.reviewboard.kde.org KDE Git Review Board]&lt;br /&gt;
* [http://svn.reviewboard.kde.org KDE Subversion Review Board]&lt;br /&gt;
&lt;br /&gt;
Note that currently http://reviewboard.kde.org/ defaults to the Subversion version but this is scheduled to change so it is recommended to always use the git or svn prefix to be sure.&lt;br /&gt;
&lt;br /&gt;
== Using ReviewBoard and post-review with Git ==&lt;br /&gt;
&lt;br /&gt;
Every Git Project repository has its own entry on the KDE Git Review Board.&lt;br /&gt;
&lt;br /&gt;
=== Creating your changeset ===&lt;br /&gt;
&lt;br /&gt;
To create your changeset, you probably want to work in a separate branch - or even in your clone. This is actually suggested and the proper way to do changesets in Git. You can create any number of commits, amend them, and do whatever you want to do - it won't affect the next steps, as you will submit the whole branch for review.&lt;br /&gt;
&lt;br /&gt;
Before proceeding it is good practice to rebase your branch onto the branch you want to target for the merge. So, supposing you want to target &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt;, make sure it is up-to-date with the remote and then run, and want to publish a review for a local branch:&lt;br /&gt;
&lt;br /&gt;
 git rebase master&lt;br /&gt;
&lt;br /&gt;
If you want to post a review for merging a non local branch, you might want to run the following:&lt;br /&gt;
&lt;br /&gt;
 git merge master&lt;br /&gt;
&lt;br /&gt;
=== Using post-review to post changes for review ===&lt;br /&gt;
&lt;br /&gt;
Once you are done with the above, it is time to post the changes to ReviewBoard. The easiest and most comfortable way to do that is &amp;lt;tt&amp;gt;[http://www.reviewboard.org/docs/manual/dev/users/tools/post-review/ post-review]&amp;lt;/tt&amp;gt;, a handy command line tool which takes care of creating review requests for you. (You can find a package for openSUSE [https://build.opensuse.org/package/binary?arch=i586&amp;amp;filename=rbtools-0.8-5.1.i586.rpm&amp;amp;package=rbtools&amp;amp;project=home%3Aflavio_castelli&amp;amp;repository=openSUSE_11.4 here], note that it is built for i586 but works on other arches, too. It's a python script.)&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
&lt;br /&gt;
The following has to be done only once to make your local clone fit for use with &amp;lt;tt&amp;gt;post-review&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
First of all, you have to tell it about the ReviewBoard server. If your project does not ship with a &amp;lt;tt&amp;gt;.reviewboardrc&amp;lt;/tt&amp;gt; file (encourage the project manager to add one!), the first thing you have to run is:&lt;br /&gt;
&lt;br /&gt;
 git config reviewboard.url https://git.reviewboard.kde.org&lt;br /&gt;
&lt;br /&gt;
ReviewBoard currently only knows the project repositories by their git:// URLs, making it necessary to have a remote using the git:// URL in your clone. If your &amp;lt;tt&amp;gt;origin&amp;lt;/tt&amp;gt; remote is already using the git:// URL, you are all set. If not you need to add another remote now. &lt;br /&gt;
&lt;br /&gt;
Let's suppose you are looking to have some changes to [https://projects.kde.org/projects/extragear/multimedia/amarok Amarok] reviewed, and the URL of your &amp;lt;tt&amp;gt;origin&amp;lt;/tt&amp;gt; remote is &amp;lt;tt&amp;gt;git@git.kde.org:amarok&amp;lt;/tt&amp;gt;. To add another remote using the git:// URL you might run:&lt;br /&gt;
&lt;br /&gt;
 git remote add anonupstream git://anongit.kde.org/amarok&lt;br /&gt;
 git fetch anonupstream&lt;br /&gt;
&lt;br /&gt;
If your &amp;lt;tt&amp;gt;origin&amp;lt;/tt&amp;gt; remote was already using the git:// url, substitute &amp;lt;tt&amp;gt;anonupstream&amp;lt;/tt&amp;gt; with &amp;lt;tt&amp;gt;origin&amp;lt;/tt&amp;gt; throughout the rest of this tutorial.&lt;br /&gt;
&lt;br /&gt;
==== Creating the review request ====&lt;br /&gt;
&lt;br /&gt;
You are now ready to create the review request. The &amp;lt;tt&amp;gt;post-review&amp;lt;/tt&amp;gt; command should look something like this:&lt;br /&gt;
&lt;br /&gt;
 post-review --parent=master --tracking-branch=anonupstream/master&lt;br /&gt;
&lt;br /&gt;
This command tells &amp;lt;tt&amp;gt;post-review&amp;lt;/tt&amp;gt; that your branch is based upon &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt;, and it is set to track the remote branch &amp;lt;tt&amp;gt;anonupstream/master&amp;lt;/tt&amp;gt;. You can also give &amp;lt;tt&amp;gt;post-review&amp;lt;/tt&amp;gt; some more arguments to avoid using the web interface later - have a look at the [http://www.reviewboard.org/docs/manual/dev/users/tools/post-review/ user manual] for more on that.&lt;br /&gt;
&lt;br /&gt;
After the command has been run a web address will be shown in the terminal, pointing at your review request.&lt;br /&gt;
&lt;br /&gt;
==== Updating a review request ====&lt;br /&gt;
&lt;br /&gt;
If you need to update an existing review request you can invoke &amp;lt;tt&amp;gt;post-review&amp;lt;/tt&amp;gt; with an additional &amp;lt;tt&amp;gt;-r&amp;lt;/tt&amp;gt; argument, which should be the numeric id of the review request you want to update. Supposing you want to update review request 54, you would run:&lt;br /&gt;
&lt;br /&gt;
 post-review --parent=master --tracking-branch=anonupstream/master -r 54&lt;br /&gt;
&lt;br /&gt;
==== Creating a ReviewBoard-compatible diff ====&lt;br /&gt;
&lt;br /&gt;
In some rare cases you simply want to generate a diff and submit it to ReviewBoard later. You can do that by running:&lt;br /&gt;
&lt;br /&gt;
 post-review --parent=master -n &amp;gt; your-patch.patch&lt;br /&gt;
&lt;br /&gt;
=== Closing a review request ===&lt;br /&gt;
&lt;br /&gt;
To close a review request, you can either use the ReviewBoard web interface or more conveniently, right in a commit. This is done by using the REVIEW keyword followed by the review ID you want to close. For example, to close review 54, you would put&lt;br /&gt;
&lt;br /&gt;
 REVIEW: 54&lt;br /&gt;
&lt;br /&gt;
in your commit. A message will also be posted to ReviewBoard indicating the commit SHA1 that closed the request.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using Review Board With Subversion ==&lt;br /&gt;
&lt;br /&gt;
Not all KDE Subversion projects use Review Board so first you need to check if the project you've created the patch for is actually using reviewboard. For this, go to the [http://svn.reviewboard.kde.org/groups/ groups section] and see if the project's group is listed there. If it is listed there, you should use the reviewboard, otherwise send the patch by other means.&lt;br /&gt;
&lt;br /&gt;
For sending a patch, you first need to register. Then simply click ''[http://svn.reviewboard.kde.org/r/new/ New Review Request]'' and fill out the form. The most important parts of the form are:&lt;br /&gt;
&lt;br /&gt;
* '''The actual patch'''. You need to upload the patch you've created earlier here&lt;br /&gt;
* '''The SVN base path'''. This is needed for the inline patch display to work. This can be a bit tricky, if you are unfamiliar with KDE's SVN layout, check [http://websvn.kde.org WebSVN]. For example, if you're ''svn diff'ing'' from &amp;lt;tt&amp;gt;/path/to/your/copy/of/kdelibs/cmake/modules&amp;lt;/tt&amp;gt;, the base path should be &amp;lt;tt&amp;gt;/trunk/KDE/kdelibs/cmake/modules&amp;lt;/tt&amp;gt;. If you still don't know the correct base path, ask a developer on IRC. You can also edit the review request later.&lt;br /&gt;
* '''A summary of the patch'''. This should be short, it will show up as subject of the notification emails.&lt;br /&gt;
* '''A description of the patch'''. This can be longer.&lt;br /&gt;
* '''The group(s)'''. Make sure you enter the correct group '''ID''' here, as seen earlier on the [http://reviewboard.kde.org/groups/ groups page].&lt;br /&gt;
&lt;br /&gt;
After you completed the form, a notification mail will be sent to the developers and they will answer you.&lt;br /&gt;
&lt;br /&gt;
/!\ You need to use svn diff in english, if your system is not english, please do LC_ALL=C svn diff&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Plasma/QML/GettingStarted</id>
		<title>Development/Tutorials/Plasma/QML/GettingStarted</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Plasma/QML/GettingStarted"/>
				<updated>2011-03-16T15:45:15Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: add anchor part of QML howto&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Abstract ==&lt;br /&gt;
&lt;br /&gt;
Writing a plasma applet in QML is very easy, in fact, with KDE 4.6 and Qt 4.7 it just works.&lt;br /&gt;
&lt;br /&gt;
== QML Basics ==&lt;br /&gt;
&lt;br /&gt;
=== Layouts ===&lt;br /&gt;
&lt;br /&gt;
==== Row and Column ====&lt;br /&gt;
&lt;br /&gt;
==== Anchors ====&lt;br /&gt;
Anchor layouts offer a nice way of grouping UI elements nicely together. The idea is that you connect edges or corners of one element to the edge or corner of another widget.&lt;br /&gt;
Some examples:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import Qt 4.7&lt;br /&gt;
import org.kde.plasma.graphicswidgets 0.1 as PlasmaWidgets&lt;br /&gt;
import org.kde.plasma.core 0.1 as PlasmaCore&lt;br /&gt;
import org.kde.plasma.graphicslayouts 4.7 as GraphicsLayouts&lt;br /&gt;
&lt;br /&gt;
QGraphicsWidget {&lt;br /&gt;
    preferredSize: &amp;quot;200x300&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    Text {&lt;br /&gt;
        id: first&lt;br /&gt;
        text: i18n(&amp;quot;1st line&amp;quot;)&lt;br /&gt;
        anchors { top: parent.top;&lt;br /&gt;
                  left: parent.left;&lt;br /&gt;
                  right: parent.right;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    Text {&lt;br /&gt;
        id: second&lt;br /&gt;
        text: i18n(&amp;quot;2nd line&amp;quot;)&lt;br /&gt;
        anchors { top: first.bottom;&lt;br /&gt;
                  left: parent.left;&lt;br /&gt;
                  right: parent.right;&lt;br /&gt;
                  bottom: parent.bottom;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Buttons ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Animations ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Package Structure ==&lt;br /&gt;
&lt;br /&gt;
You create a .desktop file and the .qml file. They have to be in the usual plasma package structure.&lt;br /&gt;
&lt;br /&gt;
plasmoid-qml/metadata.desktop&lt;br /&gt;
plasmoid-qml/contents/ui/main.qml&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;metadata.desktop&amp;lt;/tt&amp;gt; ===&lt;br /&gt;
&amp;lt;code ini&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Name=Hello QML&lt;br /&gt;
Comment=A hello world widget in QML&lt;br /&gt;
Icon=chronometer&lt;br /&gt;
&lt;br /&gt;
X-Plasma-API=declarativeappletscript&lt;br /&gt;
X-Plasma-MainScript=ui/main.qml&lt;br /&gt;
X-Plasma-DefaultSize=200,100&lt;br /&gt;
&lt;br /&gt;
X-KDE-PluginInfo-Author=Frederik Gladhorn&lt;br /&gt;
X-KDE-PluginInfo-Email=gladhorn@kde.org&lt;br /&gt;
X-KDE-PluginInfo-Website=http://plasma.kde.org/&lt;br /&gt;
X-KDE-PluginInfo-Category=Examples&lt;br /&gt;
X-KDE-PluginInfo-Name=org.kde.hello-qml&lt;br /&gt;
X-KDE-PluginInfo-Version=0.0&lt;br /&gt;
&lt;br /&gt;
X-KDE-PluginInfo-Depends=&lt;br /&gt;
X-KDE-PluginInfo-License=GPL&lt;br /&gt;
X-KDE-PluginInfo-EnabledByDefault=true&lt;br /&gt;
X-KDE-ServiceTypes=Plasma/Applet&lt;br /&gt;
Type=Service&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===  &amp;lt;tt&amp;gt;main.qml&amp;lt;/tt&amp;gt; ===&lt;br /&gt;
&amp;lt;code javascript&amp;gt;&lt;br /&gt;
import Qt 4.7&lt;br /&gt;
&lt;br /&gt;
Text {&lt;br /&gt;
    text: &amp;quot;Hello world!&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing ==&lt;br /&gt;
You can install your plasmoid:&lt;br /&gt;
plasmapkg --install plasmoid-qml&lt;br /&gt;
&lt;br /&gt;
== plasmoidviewer ==&lt;br /&gt;
You can run it in plasmoidviewer as usual:&lt;br /&gt;
plasmoidviewer plasmoid-qml&lt;br /&gt;
&lt;br /&gt;
== qmlviewer ==&lt;br /&gt;
It's possible to use Plasma specific imports in qml files loaded by qmlviewer:&lt;br /&gt;
&lt;br /&gt;
qmlviewer -I /usr/lib/kde4/imports/ plasmoid-qml/contents/qml/main.qml &lt;br /&gt;
&lt;br /&gt;
Where the -I is the path to the plasma plugin for qml. Try to look for the path of &lt;br /&gt;
/usr/lib/kde4/imports/org/kde/plasma/graphicswidgets/libgraphicswidgetsbindingsplugin.so&lt;br /&gt;
and use everything up to org of that path.&lt;br /&gt;
&lt;br /&gt;
Hovewer it's '''strongly discouraged''' to use qmlviewer to develop plasmoids, because some features won't be available there:&lt;br /&gt;
* localization with i18n()&lt;br /&gt;
* access to the global ''plasmoid'' object&lt;br /&gt;
* device specific qml files imported with plasmapackage:// urls&lt;br /&gt;
* bindings for qicons, KJobs, services and KConfig&lt;br /&gt;
&lt;br /&gt;
= Features only available in Plasma widgets =&lt;br /&gt;
In order to have a better integration with the KDE platform and to reach an higher degree of expressivity, the stock features of QML have been expanded with the following features, that strictly follow the Plasmoid JavaScript API:&lt;br /&gt;
&lt;br /&gt;
== Plasmoid object ==&lt;br /&gt;
Every QML plasmoid will have an object called ''plasmoid'', that will give access to the configuration, the formfactor, immutability and so on. It offers the same api as the object with the same name in the Javascript API.&lt;br /&gt;
&lt;br /&gt;
== Localization ==&lt;br /&gt;
It's possible to localize strings with the usual i18n(), i18nc(), i18np() global functions&lt;br /&gt;
&lt;br /&gt;
== Extra types ==&lt;br /&gt;
Some extra types are available from withing JavaScript, namely&lt;br /&gt;
&lt;br /&gt;
* KConfigGroup: it's an object with its cnfig keys readable and writable as properties&lt;br /&gt;
* QIcon: can be constructed with QIcon(&amp;quot;fdo name&amp;quot;) such as QIcon(&amp;quot;konqueror&amp;quot;)&lt;br /&gt;
* KJob&lt;br /&gt;
* Plasma Service api&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Plasma specific imports =&lt;br /&gt;
To use some Plasma specific features is necessary to use some particular QML imports.&lt;br /&gt;
&lt;br /&gt;
== Plasma Core ==&lt;br /&gt;
org.kde.plasma.core&lt;br /&gt;
This is the import that lets you access to the most important Plasma Core features.&lt;br /&gt;
&lt;br /&gt;
=== DataSource ===&lt;br /&gt;
Used to connect to a dataengine&lt;br /&gt;
&lt;br /&gt;
=== DataModel ===&lt;br /&gt;
Attaches to a DataSource, makes possible to use a dataengine as a model for a QML ListView, GridView, PathView and so on&lt;br /&gt;
&lt;br /&gt;
=== Svg ===&lt;br /&gt;
Loads a Plasma Svg, it's not the visual item&lt;br /&gt;
&lt;br /&gt;
=== SvgItem ===&lt;br /&gt;
Visual item that paints a Svg&lt;br /&gt;
&lt;br /&gt;
=== FrameSvg ===&lt;br /&gt;
Loads a Plasma FrameSvg, it's not the visual item.&lt;br /&gt;
&lt;br /&gt;
=== FrameSvgItem ===&lt;br /&gt;
Visual item that displays a Plasma FrameSvg&lt;br /&gt;
&lt;br /&gt;
== Extra Qt features ==&lt;br /&gt;
org.kde.qtextraimports&lt;br /&gt;
&lt;br /&gt;
* QPixmapItem&lt;br /&gt;
* QImageItem&lt;br /&gt;
* QIconItem&lt;br /&gt;
&lt;br /&gt;
== Plasma Widgets in QML ==&lt;br /&gt;
To use plasma widgets, you simply add an import line for them.&lt;br /&gt;
All properties, signals and slots from ordinary Plasma widgets are available there.&lt;br /&gt;
Those widgets are provided as a transition tool, intended to be replaced by the Plasma version of QtComponents.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code javascript&amp;gt;&lt;br /&gt;
import Qt 4.7&lt;br /&gt;
import org.kde.plasma.graphicswidgets 0.1 as PlasmaWidgets&lt;br /&gt;
&lt;br /&gt;
Item {&lt;br /&gt;
    width: 64&lt;br /&gt;
    height: 64&lt;br /&gt;
    PlasmaWidgets.IconWidget {&lt;br /&gt;
        id: icon&lt;br /&gt;
        Component.onCompleted: setIcon(&amp;quot;flag-red&amp;quot;)&lt;br /&gt;
        anchors.centerIn: parent&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Silk/Selkie</id>
		<title>Projects/Silk/Selkie</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Silk/Selkie"/>
				<updated>2011-01-19T11:28:30Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: /* Where is the code? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Selkie - Standalone Web Application =&lt;br /&gt;
== What is Selkie? ==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Selkie is a standalone web application shell. With Selkie, you can use Web Applications as first-class citizens on your desktop. Selkie WebApps appear as full applications in your desktop. Entries of these web applications are added to the start menu, then can be found in KRunner on the KDE desktop, they appear as their own entry in the taskbar and window-switching machinery.&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Selkie allows you to create customized web application. You can add actions to Selkie applications that can be triggered from the toolbar, or on loading webpages. With these actions, you can &amp;quot;inject&amp;quot; Javascript and run them in the context of the website. This allows you to manipulate the contents and behavior of your web application at runtime. Selkie plugins do not contain any &amp;quot;compiled&amp;quot; or native code. The plugins are simple .desktop files that contain the information about a specific webapp. Likewise, actions are .desktop Files as well. They either contain a JavaScript one-liner or point to a Javascript file which is then executed &amp;quot;inside&amp;quot; your web application. From these scripts, you can also access functions Silk offers you, such as triggering notifications on the desktop, or logging to the console.&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Selkie is built using WebKit and makes use of KDE's plugin system and Toolbar / Action system. Selkie can load and execute greasemonkey scripts as well, so there are literally hundreds of actions available.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How does Selkie work? ==&lt;br /&gt;
Selkie has four main components. Selkie itself is the application that can run a number of web applications (&amp;quot;WebApps&amp;quot;). Those WebApps are plugins that can be loaded into Silk. The WebApp plugins contain meta information about the web application (icon, name, comment, plugin name). The plugins also contain information about the WebApp itself, such as at which page to start, or which URLs should be opened in the WebApp itself. This allows for sand-boxing the web application and opening external URLs in the default web browser.&lt;br /&gt;
&lt;br /&gt;
== Where is the code? ==&lt;br /&gt;
Selkie is developed inside the Project Silk git repository on Gitorious.org. You need a recent Qt (&amp;gt;=4.5) and KDE development tools and headers installed (4.3.x should do).&lt;br /&gt;
*[[ssh://git@git.kde.org/silk|Project Silk on Gitorious]]&lt;br /&gt;
&lt;br /&gt;
== Is it stable? ==&lt;br /&gt;
Not at all. It eats kittens and babies. Selkie is not feature-complete, nor widely tested either, it is in a proof-of-concept stage. The code is currently in a &amp;quot;proof-of-concept&amp;quot; stage, but not feature-complete. You can already create WebApps and actions for them, filtering based on URLs and wildcards has been implemented. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating Web Applications ==&lt;br /&gt;
Creating WebApps by adapting the .desktop files by hand is possible, an editor for WebApps is in its very early beginnings.&lt;br /&gt;
&lt;br /&gt;
=== Setting up the Selkie Web Application ===&lt;br /&gt;
WebApps consist of configuration settings and Actions. The settings for a webapp are read from a .desktop file.&lt;br /&gt;
&lt;br /&gt;
Usually, a webapp will create on, two or more desktop files:&lt;br /&gt;
&lt;br /&gt;
* A .desktop file to launch the webapplication, for example from the Menu and from Krunner:&lt;br /&gt;
** Needs to be of type Application&lt;br /&gt;
** Should have the webapps Name, GenericName and Comment&lt;br /&gt;
** An Icon for the webapp&lt;br /&gt;
&lt;br /&gt;
A file could look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Name=ReviewBoard&lt;br /&gt;
GenericName=KDE's ReviewBoard&lt;br /&gt;
Comment=KDE's ReviewBoard Instance&lt;br /&gt;
Exec=selkie reviewboard&lt;br /&gt;
Icon=kstars&lt;br /&gt;
Type=Application&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* A .desktop file describing the plugin, holding site-specific settings:&lt;br /&gt;
** Has to be of Type=Service&lt;br /&gt;
** startUrl, AllowedBases&lt;br /&gt;
** KPluginInfo metadata, most importantly: X-KDE-PluginInfo-Name, which is used as parameter to selkie&lt;br /&gt;
** config options, starting with: X-Silk- (These config options are defined in services/silk-webapp.desktop, which is the ServiceType for Silk/Webapp&lt;br /&gt;
&lt;br /&gt;
The plugin .desktop file typically looks like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Name=Review Board&lt;br /&gt;
Comment=KDE's ReviewBoard Instance&lt;br /&gt;
Icon=kstars&lt;br /&gt;
Type=Service&lt;br /&gt;
&lt;br /&gt;
X-KDE-ServiceTypes=Silk/WebApp&lt;br /&gt;
&lt;br /&gt;
X-KDE-PluginInfo-Author=Sebastian Kügler&lt;br /&gt;
X-KDE-PluginInfo-Email=sebas@kde.org&lt;br /&gt;
X-KDE-PluginInfo-Name=reviewboard&lt;br /&gt;
X-KDE-PluginInfo-Version=0.01&lt;br /&gt;
X-KDE-PluginInfo-Website=http://kde.org/&lt;br /&gt;
X-KDE-PluginInfo-Category=Development&lt;br /&gt;
X-KDE-PluginInfo-License=GPL&lt;br /&gt;
X-KDE-PluginInfo-EnabledByDefault=true&lt;br /&gt;
&lt;br /&gt;
X-Silk-StartUrl=http://reviewboard.kde.org/r/&lt;br /&gt;
X-Silk-AllowedBases=http://reviewboard.kde.org/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The StartUrl is the initial URL to show when the application starts. All activated links (through clicks, or redirects) that have their basePath in X-Silk-AllowedBases. This option can contain a list of URLs, separated by &amp;quot;,&amp;quot; (a comma). For some sites, adding the address as https:// makes sense as well, possibly also other subdomains.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Defining Actions ===&lt;br /&gt;
Actions apply to a specific site, and within this site to a URL. Actions can be shown for some URLs and hidden for others. An action can be triggered by the user, and will execute a piece of JavaScript in the website's context. This way, you can &amp;quot;inject&amp;quot; JavaScript into the running website, for example to hide certain elements or trigger functions. to invoke an action in the website's own JavaScript API.&lt;br /&gt;
The webapplication, after starting the service-specific plugin, scans for plugins of the type Silk/WebApp/Action, and creates Actions from the .desktop files. An action plugin can provide a JavaScript one-liner to run (window.location = 'http://that.domain/some_page' to jump to a location). It's also possible to provide a JavaScript file for more complex things. An example for this is the togglesidebar.js script in the silk service directory.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Comment=Toggle the Chrome in Gitorious Interface&lt;br /&gt;
Icon=view-sidetree&lt;br /&gt;
Name=Toggle Chrome&lt;br /&gt;
Type=Service&lt;br /&gt;
&lt;br /&gt;
X-KDE-PluginInfo-Name=silk-commitlog&lt;br /&gt;
X-KDE-ServiceTypes=Silk/WebApp/Action&lt;br /&gt;
&lt;br /&gt;
X-Silk-ScriptFile=togglesidebar.js&lt;br /&gt;
X-Silk-ShowOnUrl=http://gitorious.org/&lt;br /&gt;
X-Silk-TriggerOnUrl=http://gitorious.org/&lt;br /&gt;
X-Silk-WebApp=silk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The KPluginInfo entries are needed to identify the plugin from there on (X-KDE-PluginInfo-Name), and to retrieve this action (X-KDE-ServiceTypes). Not setting the ServiceType of your plugin correctly means that the plugin won't be found.&lt;br /&gt;
&lt;br /&gt;
Actions in a nutshell:&lt;br /&gt;
** You need one silk-webapp-myplugin-myaction.desktop file per action, containing name, icon and options for triggering and enabling the action&lt;br /&gt;
** Possibly a script if you're using the X-Silk-ScriptFile option&lt;br /&gt;
** or a one-line in the form of &amp;lt;pre&amp;gt;X-Silk-Script=window.location = 'http://mail.google.com/mail/?view=cm&amp;amp;fs=1&amp;amp;tf=1'&amp;lt;/pre&amp;gt; (if both options are given, the one-liner will be preferred, the file will be ignored). Note: this should be changed to run the one-liner after the script has been included.&lt;br /&gt;
** every files needs to be installed via CMakeLists.txt&lt;br /&gt;
&lt;br /&gt;
=== Installation of WebApps and Actions ===&lt;br /&gt;
&lt;br /&gt;
In CMakeLists.txt, you need to add the .desktop files.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
install( FILES selkie-test.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} )&lt;br /&gt;
install( FILES silk-webapp-test.desktop DESTINATION ${SERVICES_INSTALL_DIR})&lt;br /&gt;
&lt;br /&gt;
install( FILES silk-webapp-test-toolbar.desktop DESTINATION ${SERVICES_INSTALL_DIR})&lt;br /&gt;
install(FILES toolbaraction.js DESTINATION ${DATA_INSTALL_DIR}/silk-webapp/test/)&lt;br /&gt;
&lt;br /&gt;
install( FILES silk-webapp-test-trigger.desktop DESTINATION ${SERVICES_INSTALL_DIR})&lt;br /&gt;
install(FILES triggeraction.js DESTINATION ${DATA_INSTALL_DIR}/silk-webapp/test/)&lt;br /&gt;
&lt;br /&gt;
install( FILES silk-webapp-test-wildcard.desktop DESTINATION ${SERVICES_INSTALL_DIR})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An action will have 1 entry for the desktop file, and one optionally for a .js file, if you're using the ScriptFile option. Make sure you install the .desktop files into their respective locations: the apps directory for the launcher, the service directory for your site plugin, and your additional files into the data install dir. Every plugin should install into a subdirectory called /silk-webapp/myplugin -- if you don't install it there, it won't be found by the application.&lt;br /&gt;
Also, after changing an installed .desktop file, you'll usually want to run 'kbuildsycoca4' to refresh the cached services, often your changes won't have effect immediately if you don't refresh the database.&lt;br /&gt;
&lt;br /&gt;
=== Creating Local WebApps ===&lt;br /&gt;
You can also create local applications with Silk, by just providing a bunch of HTML files, image data and a start location. For pure client side apps, this can be enough to create simply local standalone webapps. &lt;br /&gt;
Install these files like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Install the test sites files&lt;br /&gt;
install(FILES testsite/mountain.html DESTINATION ${DATA_INSTALL_DIR}/silk-webapp/test/testsite/)&lt;br /&gt;
install(FILES testsite/selkie.html DESTINATION ${DATA_INSTALL_DIR}/silk-webapp/test/testsite/)&lt;br /&gt;
install(FILES testsite/beach.html DESTINATION ${DATA_INSTALL_DIR}/silk-webapp/test/testsite/)&lt;br /&gt;
install(FILES testsite/default.css DESTINATION ${DATA_INSTALL_DIR}/silk-webapp/test/testsite/)&lt;br /&gt;
install(FILES testsite/randa-view.jpg DESTINATION ${DATA_INSTALL_DIR}/silk-webapp/test/testsite/)&lt;br /&gt;
install(FILES testsite/recife.jpg DESTINATION ${DATA_INSTALL_DIR}/silk-webapp/test/testsite/)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The start, and action urls can be speficifed by relative paths, i.e. in the below case silk-webapp-testsite.desktop&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X-Silk-StartUrl=testsite/selkie.html&lt;br /&gt;
X-Silk-AllowedBases=testsite/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Selkie service directory, you can find more examples how to build custom web applications. Have a look at &amp;quot;selkie test&amp;quot; for a demo.&lt;br /&gt;
&lt;br /&gt;
= Status / TODO =&lt;br /&gt;
*loading plugins as actions works for simple cases&lt;br /&gt;
* loading javascript files from plugins works&lt;br /&gt;
* showing and hiding action button (parenturls + wildcards matching, works)&lt;br /&gt;
* triggering (parenturls and wildcards work)&lt;br /&gt;
* actions should have a &amp;quot;persistant&amp;quot; flag to execute them on every new page load, within a context&lt;br /&gt;
* some way of automating the creation of those things (apps + actions) (webappeditor, in progress)&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Silk</id>
		<title>Projects/Silk</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Silk"/>
				<updated>2011-01-19T11:28:04Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: s/gitorious/git.kde.org&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Projects/Silk}}&lt;br /&gt;
&lt;br /&gt;
==== Project Silk ====&lt;br /&gt;
&lt;br /&gt;
The following is based on notes from meeting 9 July 2009.&lt;br /&gt;
&lt;br /&gt;
The basic aim of project silk is to deeply integrate online content and communication into the user experience.&lt;br /&gt;
&lt;br /&gt;
== Goal and Concept ==&lt;br /&gt;
The goal of Project Silk is deep coupling of the web with the user experience while overcoming limitations of the browser. &amp;quot;Freeing the Web From the Browser&amp;quot;, so to say. Project Silk takes the opposite direction of Google's Chrome OS, instead of making the browser the Operating System, we integrate the content and the communication deeply into the desktop and application&lt;br /&gt;
&lt;br /&gt;
Slogan: &amp;quot;Freeing the Web from the Browser&amp;quot;, &amp;quot;A New User Interface (Face) for the Web&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== What the user gets ==&lt;br /&gt;
* the Social Desktop, have your friends on the desktop&lt;br /&gt;
* Public transport See [http://www.kde-look.org/content/show.php/PublicTransport?content=106175] for example&lt;br /&gt;
* Online news&lt;br /&gt;
* Online shopping (Amazon API，TaoBao Open Platform API)&lt;br /&gt;
* Geoweb: Where are we?&lt;br /&gt;
* Bookmarked synched across devices&lt;br /&gt;
** What's here? Categories: Culture, shopping, food and drink, friends near here, weather forecast, public transport, translation, wikitravel, localphone, ATM, hotels (with booking), local phone numbers (taxi, police, doctors, tourist info, sports (passive, active), social activities (local church, etc.) nearby internet access.&lt;br /&gt;
*** Food support could know of dietry requirements&lt;br /&gt;
** Opening times: Shows your current location (using geolocation dataengine and marble / openstreetmap) and shops of an interesting category (supermarkets, for example). Opening times are visualized using colours, for example green means: open for at least two more hours, blue for &amp;quot;open for at least 30 minutes, orange: closes in 10 minutes, red: closed. Makes it easy to find a suitable shop. Unsolved: where to get the info about shops / opening times.&lt;br /&gt;
** Local translations&lt;br /&gt;
* All this with the ability to feedback&lt;br /&gt;
* I'm going to visit XYZ, cache me all the data I need and create a printable overview.&lt;br /&gt;
* Mobile phone tarrifs, dialing prefixes&lt;br /&gt;
* Local prices - what does hotel, food, travel etc. cost here?&lt;br /&gt;
* libocs (my location, nearby etc.)&lt;br /&gt;
* CIA world fact book&lt;br /&gt;
* the newspaper containment in our plasma-netbook shell&lt;br /&gt;
* Travel help: an small application that asks where you're going, and then pulls in information from various locations, much like a dynamic travel guide. This information is then cached (you might not find an Internet connection directly!). Pieces of information that would be useful: maps of the city you're visiting (thanks openstreetmap), phone numbers (the local country code, taxis, doctors, hotels, restaurants, ...) As a bonus, there would be the option to compile a three page summary pdf to print so you don't have to open up your netbook / laptop all the time.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
* a webkit-based Konqueror&lt;br /&gt;
* libweb&lt;br /&gt;
* Silk integration for existing technologies&lt;br /&gt;
* applications and applets integrating web content&lt;br /&gt;
* new concepts of remixing content from the web&lt;br /&gt;
&lt;br /&gt;
== webkit-based Konqueror ==&lt;br /&gt;
During Akademy, there was much discussion and also already some code to make the webkit kpart ready for prime-time. A fully working, modern and integrated browser is one of the most important pillars of Project Silk. Konqueror will be using webkit, making it fully working with all major websites. Info about webkit in Konqueror: &lt;br /&gt;
http://techbase.kde.org/Projects/WebKit&lt;br /&gt;
&lt;br /&gt;
== libweb ==&lt;br /&gt;
&lt;br /&gt;
libweb provides the plumbing for applications to easily integrate content from the web by offering a KDE-style API. Think of Solid or Phonon, but for the web. libweb is not so much one library, but a collection of reusable components and sublibraries. It will be a library containing utility classes for integrating online content and services into KDE. Here are some ideas of things it could contain:&lt;br /&gt;
&lt;br /&gt;
* MediaWiki Query class (done)&lt;br /&gt;
* webslices, individual parts of webpages as Q(Graphics)Widgets&lt;br /&gt;
* webpage thumbnailer (done)&lt;br /&gt;
* webpage metadata class with previews&lt;br /&gt;
* standalone webapps&lt;br /&gt;
* bookmarks with update notification (&amp;quot;this webpage has changed since your last visit&amp;quot;) (in progress as SoC?)&lt;br /&gt;
* Base class for implementing REST apis with site-specific implementations (much like Cornelius OCS lib that's used in the opendesktop dataengine) &lt;br /&gt;
* online news / RSS lib (done)&lt;br /&gt;
* libgeoweb, combining geolocation with webservices to retrieve data relevant to your current location, or to where you're travelling to)&lt;br /&gt;
* social web API, plugging into different social networks (openDesktop, facebook, linkedIn) (in progress)&lt;br /&gt;
* public transport API (standardized way of getting at this information, different backends to get at the data)&lt;br /&gt;
* online shopping API (+ different backends)&lt;br /&gt;
* online multimedia content (streaming audio, video, music store): see Amarok&lt;br /&gt;
** Useful info on the youtube api http://techblog.ironfroggy.com/2009/07/how-to-use-youtube-data-api.html&lt;br /&gt;
* SOAP API (useful for corporate web apis)&lt;br /&gt;
* Monitor webpages + change notifications&lt;br /&gt;
* See Kevin's work on QtJolie&lt;br /&gt;
** http://www.grancanariadesktopsummit.org/node/132&lt;br /&gt;
** http://www.jolie-lang.org&lt;br /&gt;
&lt;br /&gt;
The challenge for libweb is to keep it smooth and well-structured. It would be too easy to just dump everything web-related in there, we need to think about how the whole thing should look like for developers.&lt;br /&gt;
&lt;br /&gt;
Backends for the service APIs (public transport, online shopping, ...) we offer in libweb should be written in scripting languages for so far possible, so we can easily distribute and update them through GHNS, much like the comic plasma applet does with its per-site comic scriptlets.&lt;br /&gt;
&lt;br /&gt;
== Silk integration components ==&lt;br /&gt;
* tagging and indexing of visited webpages in the desktop search / nepomuk&lt;br /&gt;
* akonadi resources for interesting services (google contacts, del.icious bookmarks, linkedin and facebook contacts, ...)&lt;br /&gt;
* wikipedia runner for KRunner (done :-))&lt;br /&gt;
* web identity configuration (central openID config, easy configuration of webservices (think of a button for GMail which then creates an akonadi resource, pulls in email and shows that in Lion Mail on the desktop, or similar, instead of pointing the IMAP config to the GMail server), controls the settings for microblogging, blogging, facebook, google.&lt;br /&gt;
* a flickr (or rather web-gallery) browser&lt;br /&gt;
* a standalone web video viewer [[http://flavio.tordini.org/minitube||Minitube]] looks interesting (alediaferia is working a dataengine for video)&lt;br /&gt;
* microblogging app / applet (done)&lt;br /&gt;
* Plasma dataengines and applets&lt;br /&gt;
* [[Projects/Silk/Selkie|Selkie]], a sitespecific browser, offering an interface customized for running standalone webapps, uses site-specific bookmarks, offers toolbar actions matching a specific site, instead of location bars and back/forward buttons. (in progress)&lt;br /&gt;
&lt;br /&gt;
== Why is Silk better than a webbrowser ==&lt;br /&gt;
* offline usage and caching, even if limited&lt;br /&gt;
* richer UI (usage of modern graphics capabilities)&lt;br /&gt;
* most webpages only work on a full computer and maybe on a netbook), smaller devices often suffer there&lt;br /&gt;
* we can optimize content for small and large screen sizes&lt;br /&gt;
* we can make things compatible for different input devices (ever tried google maps on a touchscreen?)&lt;br /&gt;
* coherent theming&lt;br /&gt;
* full product thinking (hi Aaron!) by integrating interesting services by default)&lt;br /&gt;
* better development platform (not bound to JavaScript / Ajax)&lt;br /&gt;
&lt;br /&gt;
== Research Topics ==&lt;br /&gt;
* What does already exist, where?&lt;br /&gt;
* In how far can we make use of existing API, existing service protocols? &lt;br /&gt;
* How do we promote Freedom with Silk?&lt;br /&gt;
* What business models does it allow? &lt;br /&gt;
* Where can we get corporate buy-in?&lt;br /&gt;
* Where does real-time collaboration stand here?&lt;br /&gt;
&lt;br /&gt;
== How do we tackle Project Silk ==&lt;br /&gt;
The idea is to fly under the public radar for some time.&lt;br /&gt;
Once we have the first bits in place, we announce it as the next multi-year vision for KDE and try to get everybody on board with a big PR splash. (Flying under the radar for a bit will help -- announcing vapourware wouldn't be cool, if we show that we've already some momentum, it'll work much better. Silk is very much a movement towards deep integration, not a one-off or a single application. We have the technologies in place to keep an edge over competitors, and we have the developer community in place to create small plugins to support a wide variety of (even local and niche) services. &lt;br /&gt;
&lt;br /&gt;
== Where's the Code? ==&lt;br /&gt;
Silk components are hosted in the Project Silk repository on git.kde.org. Keep in mind that many applications that make the desktop &amp;quot;silk&amp;quot; are integrated into the applications or Plasma already. This git repo collects the bits that aren't (yet).&lt;br /&gt;
* [[ssh://git@git.kde.org/silk|Project Silk on git.kde.org]]&lt;br /&gt;
The code is highly experimental, it eats kittens alive. You've been warned.&lt;br /&gt;
&lt;br /&gt;
== How can we get people on board? ==&lt;br /&gt;
* Blog about the concepts&lt;br /&gt;
* Invite interested developers to a mailinglist&lt;br /&gt;
* Organize a Silk developer sprint&lt;br /&gt;
* Contact people who have been working on &amp;quot;webby&amp;quot; stuff in KDE (done, in progress)&lt;br /&gt;
* Divide libweb and the SIL (Silk Integration Layer) into small subtasks&lt;br /&gt;
* Provide a git repo with the bits and pieces to get cracking (done)&lt;br /&gt;
&lt;br /&gt;
== Mailinglist and IRC ==&lt;br /&gt;
* kde-silk mailinglist: [https://mail.kde.org/mailman/listinfo/kde-silk subscribe] [http://kde.markmail.org/search/?q=kde-silk Archive]&lt;br /&gt;
* #kde-silk on Freenode.net&lt;br /&gt;
&lt;br /&gt;
== Why Silk? ==&lt;br /&gt;
(Spider)webs are made of it.&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Silk</id>
		<title>Projects/Silk</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Silk"/>
				<updated>2010-07-09T11:24:14Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: opening times&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Projects/Silk}}&lt;br /&gt;
&lt;br /&gt;
==== Project Silk ====&lt;br /&gt;
&lt;br /&gt;
The following is based on notes from meeting 9 July 2009.&lt;br /&gt;
&lt;br /&gt;
The basic aim of project silk is to deeply integrate online content and communication into the user experience.&lt;br /&gt;
&lt;br /&gt;
== Goal and Concept ==&lt;br /&gt;
The goal of Project Silk is deep coupling of the web with the user experience while overcoming limitations of the browser. &amp;quot;Freeing the Web From the Browser&amp;quot;, so to say. Project Silk takes the opposite direction of Google's Chrome OS, instead of making the browser the Operating System, we integrate the content and the communication deeply into the desktop and application&lt;br /&gt;
&lt;br /&gt;
Slogan: &amp;quot;Freeing the Web from the Browser&amp;quot;, &amp;quot;A New User Interface (Face) for the Web&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== What the user gets ==&lt;br /&gt;
* the Social Desktop, have your friends on the desktop&lt;br /&gt;
* Public transport See [http://www.kde-look.org/content/show.php/PublicTransport?content=106175] for example&lt;br /&gt;
* Online news&lt;br /&gt;
* Online shopping (Amazon API，TaoBao Open Platform API)&lt;br /&gt;
* Geoweb: Where are we?&lt;br /&gt;
* Bookmarked synched across devices&lt;br /&gt;
** What's here? Categories: Culture, shopping, food and drink, friends near here, weather forecast, public transport, translation, wikitravel, localphone, ATM, hotels (with booking), local phone numbers (taxi, police, doctors, tourist info, sports (passive, active), social activities (local church, etc.) nearby internet access.&lt;br /&gt;
*** Food support could know of dietry requirements&lt;br /&gt;
** Opening times: Shows your current location (using geolocation dataengine and marble / openstreetmap) and shops of an interesting category (supermarkets, for example). Opening times are visualized using colours, for example green means: open for at least two more hours, blue for &amp;quot;open for at least 30 minutes, orange: closes in 10 minutes, red: closed. Makes it easy to find a suitable shop. Unsolved: where to get the info about shops / opening times.&lt;br /&gt;
** Local translations&lt;br /&gt;
* All this with the ability to feedback&lt;br /&gt;
* I'm going to visit XYZ, cache me all the data I need and create a printable overview.&lt;br /&gt;
* Mobile phone tarrifs, dialing prefixes&lt;br /&gt;
* Local prices - what does hotel, food, travel etc. cost here?&lt;br /&gt;
* libocs (my location, nearby etc.)&lt;br /&gt;
* CIA world fact book&lt;br /&gt;
* the newspaper containment in our plasma-netbook shell&lt;br /&gt;
* Travel help: an small application that asks where you're going, and then pulls in information from various locations, much like a dynamic travel guide. This information is then cached (you might not find an Internet connection directly!). Pieces of information that would be useful: maps of the city you're visiting (thanks openstreetmap), phone numbers (the local country code, taxis, doctors, hotels, restaurants, ...) As a bonus, there would be the option to compile a three page summary pdf to print so you don't have to open up your netbook / laptop all the time.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
* a webkit-based Konqueror&lt;br /&gt;
* libweb&lt;br /&gt;
* Silk integration for existing technologies&lt;br /&gt;
* applications and applets integrating web content&lt;br /&gt;
* new concepts of remixing content from the web&lt;br /&gt;
&lt;br /&gt;
== webkit-based Konqueror ==&lt;br /&gt;
During Akademy, there was much discussion and also already some code to make the webkit kpart ready for prime-time. A fully working, modern and integrated browser is one of the most important pillars of Project Silk. Konqueror will be using webkit, making it fully working with all major websites. Info about webkit in Konqueror: &lt;br /&gt;
http://techbase.kde.org/Projects/WebKit&lt;br /&gt;
&lt;br /&gt;
== libweb ==&lt;br /&gt;
&lt;br /&gt;
libweb provides the plumbing for applications to easily integrate content from the web by offering a KDE-style API. Think of Solid or Phonon, but for the web. libweb is not so much one library, but a collection of reusable components and sublibraries. It will be a library containing utility classes for integrating online content and services into KDE. Here are some ideas of things it could contain:&lt;br /&gt;
&lt;br /&gt;
* MediaWiki Query class (done)&lt;br /&gt;
* webslices, individual parts of webpages as Q(Graphics)Widgets&lt;br /&gt;
* webpage thumbnailer (done)&lt;br /&gt;
* webpage metadata class with previews&lt;br /&gt;
* standalone webapps&lt;br /&gt;
* bookmarks with update notification (&amp;quot;this webpage has changed since your last visit&amp;quot;) (in progress as SoC?)&lt;br /&gt;
* Base class for implementing REST apis with site-specific implementations (much like Cornelius OCS lib that's used in the opendesktop dataengine) &lt;br /&gt;
* online news / RSS lib (done)&lt;br /&gt;
* libgeoweb, combining geolocation with webservices to retrieve data relevant to your current location, or to where you're travelling to)&lt;br /&gt;
* social web API, plugging into different social networks (openDesktop, facebook, linkedIn) (in progress)&lt;br /&gt;
* public transport API (standardized way of getting at this information, different backends to get at the data)&lt;br /&gt;
* online shopping API (+ different backends)&lt;br /&gt;
* online multimedia content (streaming audio, video, music store): see Amarok&lt;br /&gt;
** Useful info on the youtube api http://techblog.ironfroggy.com/2009/07/how-to-use-youtube-data-api.html&lt;br /&gt;
* SOAP API (useful for corporate web apis)&lt;br /&gt;
* Monitor webpages + change notifications&lt;br /&gt;
* See Kevin's work on QtJolie&lt;br /&gt;
** http://www.grancanariadesktopsummit.org/node/132&lt;br /&gt;
** http://www.jolie-lang.org&lt;br /&gt;
&lt;br /&gt;
The challenge for libweb is to keep it smooth and well-structured. It would be too easy to just dump everything web-related in there, we need to think about how the whole thing should look like for developers.&lt;br /&gt;
&lt;br /&gt;
Backends for the service APIs (public transport, online shopping, ...) we offer in libweb should be written in scripting languages for so far possible, so we can easily distribute and update them through GHNS, much like the comic plasma applet does with its per-site comic scriptlets.&lt;br /&gt;
&lt;br /&gt;
== Silk integration components ==&lt;br /&gt;
* tagging and indexing of visited webpages in the desktop search / nepomuk&lt;br /&gt;
* akonadi resources for interesting services (google contacts, del.icious bookmarks, linkedin and facebook contacts, ...)&lt;br /&gt;
* wikipedia runner for KRunner (done :-))&lt;br /&gt;
* web identity configuration (central openID config, easy configuration of webservices (think of a button for GMail which then creates an akonadi resource, pulls in email and shows that in Lion Mail on the desktop, or similar, instead of pointing the IMAP config to the GMail server), controls the settings for microblogging, blogging, facebook, google.&lt;br /&gt;
* a flickr (or rather web-gallery) browser&lt;br /&gt;
* a standalone web video viewer [[http://flavio.tordini.org/minitube||Minitube]] looks interesting (alediaferia is working a dataengine for video)&lt;br /&gt;
* microblogging app / applet (done)&lt;br /&gt;
* Plasma dataengines and applets&lt;br /&gt;
* [[Projects/Silk/Selkie|Selkie]], a sitespecific browser, offering an interface customized for running standalone webapps, uses site-specific bookmarks, offers toolbar actions matching a specific site, instead of location bars and back/forward buttons. (in progress)&lt;br /&gt;
&lt;br /&gt;
== Why is Silk better than a webbrowser ==&lt;br /&gt;
* offline usage and caching, even if limited&lt;br /&gt;
* richer UI (usage of modern graphics capabilities)&lt;br /&gt;
* most webpages only work on a full computer and maybe on a netbook), smaller devices often suffer there&lt;br /&gt;
* we can optimize content for small and large screen sizes&lt;br /&gt;
* we can make things compatible for differnet input devices (ever tried google maps on a touchscreen?)&lt;br /&gt;
* coherent theming&lt;br /&gt;
* full product thinking (hi Aaron!) by integrating interesting services by default)&lt;br /&gt;
* better development platform (not bound to JavaScript / Ajax)&lt;br /&gt;
&lt;br /&gt;
== Research Topics ==&lt;br /&gt;
* What does already exist, where?&lt;br /&gt;
* In how far can we make use of existing API, existing service protocols? &lt;br /&gt;
* How do we promote Freedom with Silk?&lt;br /&gt;
* What business models does it allow? &lt;br /&gt;
* Where can we get corporate buy-in?&lt;br /&gt;
* Where does real-time collaboration stand here?&lt;br /&gt;
&lt;br /&gt;
== How do we tackle Project Silk ==&lt;br /&gt;
The idea is to fly under the public radar for some time.&lt;br /&gt;
Once we have the first bits in place, we announce it as the next multi-year vision for KDE and try to get everybody on board with a big PR splash. (Flying under the radar for a bit will help -- announcing vapourware wouldn't be cool, if we show that we've already some momentum, it'll work much better. Silk is very much a movement towards deep integration, not a one-off or a single application. We have the technologies in place to keep an edge over competitors, and we have the developer community in place to create small plugins to support a wide variety of (even local and niche) services. &lt;br /&gt;
&lt;br /&gt;
== Where's the Code? ==&lt;br /&gt;
Silk components are hosted in the Project Silk repository on Gitorius. Keep in mind that many applications that make the desktop &amp;quot;silk&amp;quot; are integrated into the applications or Plasma already. This git repo collects the bits that aren't (yet).&lt;br /&gt;
* [[http://gitorious.org/project-silk|Project Silk on Gitorious]]&lt;br /&gt;
The code is highly experimental, it eats kittens alive. You've been warned.&lt;br /&gt;
&lt;br /&gt;
== How can we get people on board? ==&lt;br /&gt;
* Blog about the concepts&lt;br /&gt;
* Invite interested developers to a mailinglist&lt;br /&gt;
* Organize a Silk developer sprint&lt;br /&gt;
* Contact people who have been working on &amp;quot;webby&amp;quot; stuff in KDE (done, in progress)&lt;br /&gt;
* Divide libweb and the SIL (Silk Integration Layer) into small subtasks&lt;br /&gt;
* Provide a git repo with the bits and pieces to get cracking (done)&lt;br /&gt;
&lt;br /&gt;
== Mailinglist and IRC ==&lt;br /&gt;
* kde-silk mailinglist: [https://mail.kde.org/mailman/listinfo/kde-silk subscribe] [http://kde.markmail.org/search/?q=kde-silk Archive]&lt;br /&gt;
* #kde-silk on Freenode.net&lt;br /&gt;
&lt;br /&gt;
== Why Silk? ==&lt;br /&gt;
(Spider)webs are made of it.&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Silk</id>
		<title>Projects/Silk</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Silk"/>
				<updated>2010-05-20T13:58:52Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: added bookmarks&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Projects/Silk}}&lt;br /&gt;
&lt;br /&gt;
==== Project Silk ====&lt;br /&gt;
&lt;br /&gt;
The following is based on notes from meeting 9 July 2009.&lt;br /&gt;
&lt;br /&gt;
The basic aim of project silk is to deeply integrate online content and communication into the user experience.&lt;br /&gt;
&lt;br /&gt;
== Goal and Concept ==&lt;br /&gt;
The goal of Project Silk is deep coupling of the web with the user experience while overcoming limitations of the browser. &amp;quot;Freeing the Web From the Browser&amp;quot;, so to say. Project Silk takes the opposite direction of Google's Chrome OS, instead of making the browser the Operating System, we integrate the content and the communication deeply into the desktop and application&lt;br /&gt;
&lt;br /&gt;
Slogan: &amp;quot;Freeing the Web from the Browser&amp;quot;, &amp;quot;A New User Interface (Face) for the Web&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== What the user gets ==&lt;br /&gt;
* the Social Desktop, have your friends on the desktop&lt;br /&gt;
* Public transport See [http://www.kde-look.org/content/show.php/PublicTransport?content=106175] for example&lt;br /&gt;
* Online news&lt;br /&gt;
* Online shopping (Amazon API，TaoBao Open Platform API)&lt;br /&gt;
* Geoweb: Where are we?&lt;br /&gt;
* Bookmarked synched across devices&lt;br /&gt;
** What's here? Categories: Culture, shopping, food and drink, friends near here, weather forecast, public transport, translation, wikitravel, localphone, ATM, hotels (with booking), local phone numbers (taxi, police, doctors, tourist info, sports (passive, active), social activities (local church, etc.) nearby internet access.&lt;br /&gt;
*** Food support could know of dietry requirements&lt;br /&gt;
** Local translations&lt;br /&gt;
* All this with the ability to feedback&lt;br /&gt;
* I'm going to visit XYZ, cache me all the data I need and create a printable overview.&lt;br /&gt;
* Mobile phone tarrifs, dialing prefixes&lt;br /&gt;
* Local prices - what does hotel, food, travel etc. cost here?&lt;br /&gt;
* libocs (my location, nearby etc.)&lt;br /&gt;
* CIA world fact book&lt;br /&gt;
* the newspaper containment in our plasma-netbook shell&lt;br /&gt;
* Travel help: an small application that asks where you're going, and then pulls in information from various locations, much like a dynamic travel guide. This information is then cached (you might not find an Internet connection directly!). Pieces of information that would be useful: maps of the city you're visiting (thanks openstreetmap), phone numbers (the local country code, taxis, doctors, hotels, restaurants, ...) As a bonus, there would be the option to compile a three page summary pdf to print so you don't have to open up your netbook / laptop all the time.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
* a webkit-based Konqueror&lt;br /&gt;
* libweb&lt;br /&gt;
* Silk integration for existing technologies&lt;br /&gt;
* applications and applets integrating web content&lt;br /&gt;
* new concepts of remixing content from the web&lt;br /&gt;
&lt;br /&gt;
== webkit-based Konqueror ==&lt;br /&gt;
During Akademy, there was much discussion and also already some code to make the webkit kpart ready for prime-time. A fully working, modern and integrated browser is one of the most important pillars of Project Silk. Konqueror will be using webkit, making it fully working with all major websites. Info about webkit in Konqueror: &lt;br /&gt;
http://techbase.kde.org/Projects/WebKit&lt;br /&gt;
&lt;br /&gt;
== libweb ==&lt;br /&gt;
&lt;br /&gt;
libweb provides the plumbing for applications to easily integrate content from the web by offering a KDE-style API. Think of Solid or Phonon, but for the web. libweb is not so much one library, but a collection of reusable components and sublibraries. It will be a library containing utility classes for integrating online content and services into KDE. Here are some ideas of things it could contain:&lt;br /&gt;
&lt;br /&gt;
* MediaWiki Query class (done)&lt;br /&gt;
* webslices, individual parts of webpages as Q(Graphics)Widgets&lt;br /&gt;
* webpage thumbnailer (done)&lt;br /&gt;
* webpage metadata class with previews&lt;br /&gt;
* standalone webapps&lt;br /&gt;
* bookmarks with update notification (&amp;quot;this webpage has changed since your last visit&amp;quot;) (in progress as SoC?)&lt;br /&gt;
* Base class for implementing REST apis with site-specific implementations (much like Cornelius OCS lib that's used in the opendesktop dataengine) &lt;br /&gt;
* online news / RSS lib (done)&lt;br /&gt;
* libgeoweb, combining geolocation with webservices to retrieve data relevant to your current location, or to where you're travelling to)&lt;br /&gt;
* social web API, plugging into different social networks (openDesktop, facebook, linkedIn) (in progress)&lt;br /&gt;
* public transport API (standardized way of getting at this information, different backends to get at the data)&lt;br /&gt;
* online shopping API (+ different backends)&lt;br /&gt;
* online multimedia content (streaming audio, video, music store): see Amarok&lt;br /&gt;
** Useful info on the youtube api http://techblog.ironfroggy.com/2009/07/how-to-use-youtube-data-api.html&lt;br /&gt;
* SOAP API (useful for corporate web apis)&lt;br /&gt;
* Monitor webpages + change notifications&lt;br /&gt;
* See Kevin's work on QtJolie&lt;br /&gt;
** http://www.grancanariadesktopsummit.org/node/132&lt;br /&gt;
** http://www.jolie-lang.org&lt;br /&gt;
&lt;br /&gt;
The challenge for libweb is to keep it smooth and well-structured. It would be too easy to just dump everything web-related in there, we need to think about how the whole thing should look like for developers.&lt;br /&gt;
&lt;br /&gt;
Backends for the service APIs (public transport, online shopping, ...) we offer in libweb should be written in scripting languages for so far possible, so we can easily distribute and update them through GHNS, much like the comic plasma applet does with its per-site comic scriptlets.&lt;br /&gt;
&lt;br /&gt;
== Silk integration components ==&lt;br /&gt;
* tagging and indexing of visited webpages in the desktop search / nepomuk&lt;br /&gt;
* akonadi resources for interesting services (google contacts, del.icious bookmarks, linkedin and facebook contacts, ...)&lt;br /&gt;
* wikipedia runner for KRunner (done :-))&lt;br /&gt;
* web identity configuration (central openID config, easy configuration of webservices (think of a button for GMail which then creates an akonadi resource, pulls in email and shows that in Lion Mail on the desktop, or similar, instead of pointing the IMAP config to the GMail server), controls the settings for microblogging, blogging, facebook, google.&lt;br /&gt;
* a flickr (or rather web-gallery) browser&lt;br /&gt;
* a standalone web video viewer [[http://flavio.tordini.org/minitube||Minitube]] looks interesting (alediaferia is working a dataengine for video)&lt;br /&gt;
* microblogging app / applet (done)&lt;br /&gt;
* Plasma dataengines and applets&lt;br /&gt;
* [[Projects/Silk/Selkie|Selkie]], a sitespecific browser, offering an interface customized for running standalone webapps, uses site-specific bookmarks, offers toolbar actions matching a specific site, instead of location bars and back/forward buttons. (in progress)&lt;br /&gt;
&lt;br /&gt;
== Why is Silk better than a webbrowser ==&lt;br /&gt;
* offline usage and caching, even if limited&lt;br /&gt;
* richer UI (usage of modern graphics capabilities)&lt;br /&gt;
* most webpages only work on a full computer and maybe on a netbook), smaller devices often suffer there&lt;br /&gt;
* we can optimize content for small and large screen sizes&lt;br /&gt;
* we can make things compatible for differnet input devices (ever tried google maps on a touchscreen?)&lt;br /&gt;
* coherent theming&lt;br /&gt;
* full product thinking (hi Aaron!) by integrating interesting services by default)&lt;br /&gt;
* better development platform (not bound to JavaScript / Ajax)&lt;br /&gt;
&lt;br /&gt;
== Research Topics ==&lt;br /&gt;
* What does already exist, where?&lt;br /&gt;
* In how far can we make use of existing API, existing service protocols? &lt;br /&gt;
* How do we promote Freedom with Silk?&lt;br /&gt;
* What business models does it allow? &lt;br /&gt;
* Where can we get corporate buy-in?&lt;br /&gt;
* Where does real-time collaboration stand here?&lt;br /&gt;
&lt;br /&gt;
== How do we tackle Project Silk ==&lt;br /&gt;
The idea is to fly under the public radar for some time.&lt;br /&gt;
Once we have the first bits in place, we announce it as the next multi-year vision for KDE and try to get everybody on board with a big PR splash. (Flying under the radar for a bit will help -- announcing vapourware wouldn't be cool, if we show that we've already some momentum, it'll work much better. Silk is very much a movement towards deep integration, not a one-off or a single application. We have the technologies in place to keep an edge over competitors, and we have the developer community in place to create small plugins to support a wide variety of (even local and niche) services. &lt;br /&gt;
&lt;br /&gt;
== Where's the Code? ==&lt;br /&gt;
Silk components are hosted in the Project Silk repository on Gitorius. Keep in mind that many applications that make the desktop &amp;quot;silk&amp;quot; are integrated into the applications or Plasma already. This git repo collects the bits that aren't (yet).&lt;br /&gt;
* [[http://gitorious.org/project-silk|Project Silk on Gitorious]]&lt;br /&gt;
The code is highly experimental, it eats kittens alive. You've been warned.&lt;br /&gt;
&lt;br /&gt;
== How can we get people on board? ==&lt;br /&gt;
* Blog about the concepts&lt;br /&gt;
* Invite interested developers to a mailinglist&lt;br /&gt;
* Organize a Silk developer sprint&lt;br /&gt;
* Contact people who have been working on &amp;quot;webby&amp;quot; stuff in KDE (done, in progress)&lt;br /&gt;
* Divide libweb and the SIL (Silk Integration Layer) into small subtasks&lt;br /&gt;
* Provide a git repo with the bits and pieces to get cracking (done)&lt;br /&gt;
&lt;br /&gt;
== Mailinglist and IRC ==&lt;br /&gt;
* kde-silk mailinglist: [https://mail.kde.org/mailman/listinfo/kde-silk subscribe] [http://kde.markmail.org/search/?q=kde-silk Archive]&lt;br /&gt;
* #kde-silk on Freenode.net&lt;br /&gt;
&lt;br /&gt;
== Why Silk? ==&lt;br /&gt;
(Spider)webs are made of it.&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Schedules/KDE4/4.5_Feature_Plan</id>
		<title>Schedules/KDE4/4.5 Feature Plan</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Schedules/KDE4/4.5_Feature_Plan"/>
				<updated>2010-04-25T15:50:25Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: add nm plasmoid&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of planned features for the SC 4.5 release. &lt;br /&gt;
&lt;br /&gt;
See also: &lt;br /&gt;
&lt;br /&gt;
*[[Schedules/KDE4/4.5 Release Schedule]] &lt;br /&gt;
*[[Schedules/KDE4/4.5 Release Goals]] &lt;br /&gt;
*[[Schedules/KDE4/4.4 Feature Plan]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; Legend: &lt;br /&gt;
&lt;br /&gt;
*todo =&amp;amp;gt; not started yet &lt;br /&gt;
*in-progress =&amp;amp;gt; started, but not completed yet &lt;br /&gt;
*done =&amp;amp;gt; completed&lt;br /&gt;
&lt;br /&gt;
__TOC__ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeadmin  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|system-config-printer-kde|Restore feature parity with KDEPrint3 where possible.||Jonathan Riddell, John Layt}} &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeartwork  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdebase-apps  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|Konqueror|Improvements in session-management|edulix@gmail.com|Eduardo Robles Elvira}} &lt;br /&gt;
{{FeatureTodo|Konqueror|Improvements in tab-bar widget|edulix@gmail.com|Eduardo Robles Elvira}} &lt;br /&gt;
{{FeatureInProgress|Konqueror|New Konqueror bookmarks using Akonadi and Nepomuk, awesome bar|edulix@gmail.com|Eduardo Robles Elvira}} &lt;br /&gt;
{{FeatureInProgress|Konsole|Finish implementing tab context menu|kurt.hindenburg@gmail.com|Kurt Hindenburg}}&lt;br /&gt;
{{FeatureInProgress|Konsole|Allow setting tab profile from file on command-line|kurt.hindenburg@gmail.com|Kurt Hindenburg}}&lt;br /&gt;
{{FeatureInProgress|Konsole|Adds support for SHELL_SESSION_ID|kurt.hindenburg@gmail.com|Kurt Hindenburg}}&lt;br /&gt;
{{FeatureInProgress|Konsole|Modernize menu layout|sasch.pe@gmx.de|Sascha Peilicke}}&lt;br /&gt;
{{FeatureInProgress|Konsole|Move to KTabWidget|sasch.pe@gmx.de|Sascha Peilicke}}&lt;br /&gt;
{{FeatureInProgress|print-manager|New Print manager KCM and applet replacement, using C++|dantti85-pk@yahoo.com.br|Daniel Nicoletti}} &lt;br /&gt;
{{FeatureDone|Dolphin|Drag and drop on tabs|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureInProgress|Dolphin|Make view sub-menus available as toolbar buttons|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureInProgress|Dolphin|Smooth scrolling|fredrik@kde.org|Fredrik Höglund}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdebase-runtime  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|KWallet|Single Sign On using PAM|lemma@confuego.org|Michael Leupold}}&lt;br /&gt;
{{FeatureTodo|network kioslave|Backend for LISa|kossebau@kde.org|Friedrich Kossebau}}&lt;br /&gt;
{{FeatureTodo|network kioslave|Backend for SMB|kossebau@kde.org|Friedrich Kossebau}}&lt;br /&gt;
{{FeatureTodo|network kioslave|Integrate with remote and zeroconf kioslaves|kossebau@kde.org|Friedrich Kossebau}}&lt;br /&gt;
{{FeatureTodo|Locale KCM|Add support for new KLocale features (see kdelibs section) including Digit Groups, AM/PM, etc.  Improvements to usability of existing money display options.|john@layt.net|John Layt}}&lt;br /&gt;
{{FeatureInProgress|network kioslave|Backend for UPnP|kossebau@kde.org|Friedrich Kossebau}}&lt;br /&gt;
{{FeatureTodo|network kioslave| Backend to discover bluetooth devices and they services |edulix@gmail.com|Eduardo Robles Elvira}}&lt;br /&gt;
{{FeatureInProgress|bluetooth kioslave|Backend to browse bluetooth devices|edulix@gmail.com|Eduardo Robles Elvira}}&lt;br /&gt;
{{FeatureDone|Nepomuk|Monitor file system changes via inotify|trueg@kde.org|Sebastian Trueg}}&lt;br /&gt;
|}&lt;br /&gt;
{{FeatureTodo|KNotify|Route solid errors via knotify to the device notifier|wilderkde@gmail.com|Jacopo De Simoi}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdebase-workspace  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: center;&amp;quot; colspan=&amp;quot;4&amp;quot; | Non-Plasma, Non-KWin &lt;br /&gt;
{{FeatureTodo|Icons KCM|More configurable icon sizes|christoph@maxiom.de|Christoph Feck}} &lt;br /&gt;
{{FeatureTodo|Fonts KCM|More configurable fonts|christoph@maxiom.de|Christoph Feck}} &lt;br /&gt;
{{FeatureTodo|Solid|Write a new Bluetooth backend |alex@eyeos.org|Alex Fiestas}} &lt;br /&gt;
{{FeatureTodo|Screenedges|Screenedges handling outside of kwin/plasma|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureInProgress|Oxygen style|Move window using left-mouse button on windows' empty areas|hugo@oxygen-icons.org|Hugo Pereira Da Costa}}&lt;br /&gt;
{{FeatureInProgress|Oxygen configuration|Oxygen style and decoration standalone expert configuration tool|hugo@oxygen-icons.org|Hugo Pereira Da Costa}}&lt;br /&gt;
{{FeatureInProgress|Free Space Notifier Daemon|Small daemon that warns you when your home has almost no space left|knuckles@gmail.com|Ivo Anjo}}&lt;br /&gt;
{{FeatureInProgress|Activities Daemons|Daemons to handle info about activities (kded daemon and a nepomuk service)|ivan.cukic@kde.org|Ivan Cukic}}&lt;br /&gt;
{{FeatureInProgress|Systemsettings|driconf KCM|fredrik@kde.org|Fredrik Höglund}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: center;&amp;quot; colspan=&amp;quot;4&amp;quot; | Plasma &lt;br /&gt;
{{FeatureInProgress|systemtray/taskmanager|port the systray and tasks applet to windows|windows@kde.org|kde windows}}&lt;br /&gt;
{{FeatureInProgress|systemtray|monochrome statusnotifier based systray icons support|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureTodo|systemtray|sort icons by category|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureInProgress|systemtray|put hidden icons in a popup menu|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureInProgress|tasks dataengine|export all informations needed to build an applet comparable to the current one|matthieu_gallien@yahoo.fr|Matthieu Gallien}}&lt;br /&gt;
{{FeatureDone|notifications|split systemtray and notifications applet|notmart@gmail.com|Marco Martin}}  &lt;br /&gt;
{{FeatureInProgress|notifications|new look and behaviour for notifications|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureDone|notifications|support for remote applets for notifications|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureDone|netbook/SAL|use QStandardModels|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureInProgress|netbook/SAL|support for drag and drop of items|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureTodo|netbook/SAL|package manager invocation from the toolbox|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureTodo|netbook/Workspace KCM|New default options for KWin: tabbox as present windows, that will be set as regular grid|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureTodo|libplasma/extenders|put extendergroups in scrollwidgets|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureTodo|libplasma/extenders|possibility to detach exteneritems as standalone windows|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureInProgress|libplasma/theme|more transparent dialogs when the blur effect is enabled|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureInProgress|libplasma/desktop|Activity Manager UI|chani@kde.org|Chani}}&lt;br /&gt;
{{FeatureTodo|accounts applet|a plasma widget that is a central place to add accounts to social sites like identica and opendesktop, optimized for the netbook shell|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureTodo|libplasma|Improvements to Calendar/Clock widgets. Improved config ui. Allow multiple holidays on same day. Allow multiple Holiday Regions. Weekends. etc.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|folderview|&amp;quot;Open folder&amp;quot; icon to open folder into pop-up at request instead of automatically.|bigras.bruno@gmail.com|Bruno Bigras}}&lt;br /&gt;
{{FeatureTodo|folderview|Extend the configuration UI for nepomuksearch|fredrik@kde.org|Fredrik Höglund}}&lt;br /&gt;
{{FeatureInProgress|Extend Calendar DataEngine with Akonadi calendar incidents|Allows to query calendar events/todos from Akonadi in Plasma|gladhornKDEorg|Frederik Gladhorn}}&lt;br /&gt;
{{FeatureDone|calculator|Added optional libqalculate support in the calculator runner|agostinelli@gmail.com|Matteo Agostinelli}}&lt;br /&gt;
{{FeatureInProgress|KRunner|Add some advanced sorting to KRunner using Nepomuk|l.appelhans@gmx.de|Lukas Appelhans}}&lt;br /&gt;
{{FeatureTodo|KRunner|Improve keyboard navigation &amp;amp; command history interaction|wilderkde@gmail.com|Jacopo De Simoi}}&lt;br /&gt;
{{FeatureInProgress|device-notifier|Route all solid error notifications via knotify to the device notifier|wilderkde@gmail.com|Jacopo De Simoi}}&lt;br /&gt;
{{FeatureInProgress|device-notifier|Detailed (HAL) error notifications in the device notifier|wilderkde@gmail.com|Jacopo De Simoi}}&lt;br /&gt;
{{FeatureInProgress|Plasma::Theme|Themed CSS support|sebas@kde.org|Sebastian Kügler}}&lt;br /&gt;
{{FeatureTodo|battery|Weighted charge information for multiple batteries|sebas@kde.org|Sebastian Kügler}}&lt;br /&gt;
{{FeatureInProgress|crystal|New desktop search widget|sebas@kde.org|Sebastian Kügler}}&lt;br /&gt;
{{FeatureInProgress|networkmanagement|Network management Plasmoid|sebas@kde.org|Sebastian Kügler}}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: center;&amp;quot; colspan=&amp;quot;4&amp;quot; | KWin&lt;br /&gt;
{{FeatureTodo|Tiling|Merge window tiling branch|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureInProgress|KWin|New flag to exclude windows from switchers|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureDone|KCM Decoration|New decoration kcm with previews and GHNS|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureDone|Aurorae|Port Aurorae to GraphicsView and KDecoration|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureInProgress|Aurorae|Better themeing support|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureTodo|Aurorae|Window tabbing support|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureTodo|Aurorae|Decorations on window sides|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureTodo|Aurorae|Autohiding decoration for maximized windows|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureTodo|kwin|hide windows from other activities|chani@kde.org|Chani}}&lt;br /&gt;
{{FeatureTodo|Effects|Move features from present windows to libkwineffects to make them available in desktop grid|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureTodo|Effects|Add close window button to each window in present windows/desktop grid|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureTodo|Window Tabbing/libtaskmanager|Announce window groups to be used for grouping in tasks applet|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureTodo|KWin/plasma|New window type for Plasma dashboard|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureDone|Effects|New blur effect|fredrik@kde.org|Fredrik Höglund}}&lt;br /&gt;
{{FeatureInProgress|Effects|High quality scaling shader for the taskbar thumbnails|fredrik@kde.org|Fredrik Höglund}}&lt;br /&gt;
{{FeatureTodo|KWin|Hint for defining the window snap rect|fredrik@kde.org|Fredrik Höglund}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeedu  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|KStars|Display Comet Magnitudes whenever possible|akarshsimha@gmail.com|Akarsh Simha}} &lt;br /&gt;
{{FeatureTodo|KStars|Information links in-place for each technical term|akarshsimha@gmail.com|Akarsh Simha}} {{FeatureTodo|KStars|Tool to suggest star-hopping techniques???|akarshsimha@gmail.com|Akarsh Simha}} &lt;br /&gt;
{{FeatureTodo|KStars|Extend conjunction tool to have one object unspecified, but have a genre of objects specified instead|akarshsimha@gmail.com|Akarsh Simha}} &lt;br /&gt;
{{FeatureTodo|KStars|Simulate Lunar Eclipses|akarshsimha@gmail.com|Akarsh Simha}} &lt;br /&gt;
{{FeatureTodo|KStars|Simulate Satellites and Iridium Flares|akarshsimha@gmail.com|Akarsh Simha}} &lt;br /&gt;
{{FeatureTodo|KStars|Social and Geographical Integration for KStars|akarshsimha@gmail.com|Akarsh Simha}} &lt;br /&gt;
{{FeatureTodo|KStars|Marble widget for Geolocation tool|mboquien@free.fr|Médéric Boquien}} &lt;br /&gt;
{{FeatureTodo|KStars|Better printed star charts|kstars@30doradus.org|Jason Harris}} &lt;br /&gt;
{{FeatureTodo|KStars|Better rendering of comets/asteroids|kstars@30doradus.org|Jason Harris}} &lt;br /&gt;
{{FeatureTodo|KStars|Texture mapping of the skymap???|kstars@30doradus.org|Jason Harris}} &lt;br /&gt;
{{FeatureTodo|Marble|Add proper support for GPX waypoints, tracks and routes display|anders@alweb.dk|Anders Lund}}&lt;br /&gt;
{{FeatureTodo|Marble|Export map to MxN pixel bitmap|inge@lysator.liu.se|Inge Wallin}}&lt;br /&gt;
{{FeatureTodo|Marble|Map Contents translation|tackat@kde.org|Torsten Rahn}}&lt;br /&gt;
{{FeatureTodo|Kalzium|Port Kalzium to use QGV based periodic table widget|mhanwell@kde.org|Marcus D. Hanwell}}&lt;br /&gt;
{{FeatureDone|Marble|Support OpenStreetMap Nominatim as search backend (MarbleRunner)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureInProgress|Marble|Generalized Animations with GeoDataLookAt support|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureInProgress|Marble|Online-Routing|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureInProgress|Marble|GPS improvements|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureInProgress|Marble|Maemo Support|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureInProgress|Marble|GeoGraphicsScene for Online Service Plugins|bastianholst@gmx.de|Bastian Holst}}&lt;br /&gt;
{{FeatureInProgress|Marble|Download region|jmho@c-xx.com|Jens-Michael Hoffmann}}&lt;br /&gt;
{{FeatureInProgress|Marble|Implement sun locator blendings as derived classes of Marble::Blending|jmho@c-xx.com|Jens-Michael Hoffmann}}&lt;br /&gt;
{{FeatureInProgress|Marble|Configurable texture layer blending|jmho@c-xx.com|Jens-Michael Hoffmann}}&lt;br /&gt;
{{FeatureInProgress|Marble|Import geonames city data|sonu.itbhu@gmail.com|Harshit Jain}}&lt;br /&gt;
{{FeatureInProgress|Marble|Add new icons for online services|gabrieljoel@gmail.com|Gabriel Joel Perez}}&lt;br /&gt;
{{FeatureInProgress|Marble|Download Progressbar in Qt-only version|akssps011@gmail.com|Siddharth Srivastava}}&lt;br /&gt;
{{FeatureInProgress|Marble|Bookmark support|anik.varshney@gmail.com|Kumar Anik Varshney}}&lt;br /&gt;
{{FeatureInProgress|Marble|Various Marble speed improvements|rahn@kde.org|Torsten Rahn, Ariya Hidayat}}&lt;br /&gt;
{{FeatureDone|KAlgebra|Type checker for expressions to statically detect errors|aleixpol@kde.org|Aleix Pol}}&lt;br /&gt;
{{FeatureInProgress|KAlgebra|Support for drawing implicit curves|percy.camilo.ta@gmail.com|Percy Camilo Triveño Aucahuasi}}&lt;br /&gt;
{{FeatureInProgress|Parley|Parley practice mode rewritten|gladhornKDEorg|Daniel Laidig, Frederik Gladhorn}}&lt;br /&gt;
{{FeatureTodo|Cantor|import and polish Qalculate! backend|mail@milianw.de|Milian Wolff}}&lt;br /&gt;
{{FeatureInProgress|KTurtle|Implement GHNS download support|nielsslot@gmail.com|Niels Slot}}&lt;br /&gt;
{{FeatureTodo|KTurtle|Implement GHNS upload support|nielsslot@gmail.com|Niels Slot}}&lt;br /&gt;
{{FeatureDone|Rocs|Node beautification in SVG|tcanabrava@kde.org|Tomaz Canabrava}}&lt;br /&gt;
{{FeatureDone|Rocs|Threads for not blocking the UI|tcanabrava@kde.org|Tomaz Canabrava}}&lt;br /&gt;
{{FeatureDone|Rocs|Redesigned the UI for better usability|tcanabrava@kde.org|Tomaz Canabrava}}&lt;br /&gt;
{{FeatureDone|Rocs|Plugin System|wiglot@gmail.com|Wagner Reck}}&lt;br /&gt;
{{FeatureDone|Rocs|Small plugins as examples|wiglot@gmail.com|Wagner Reck}}&lt;br /&gt;
{{FeatureDone|Rocs|Multiple Script support|tcanabrava@kde.org|Tomaz Canabrava}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdegames  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureDone|KBounce|Difficulty levels|ascherfy@gmail.com|Andreas Scherf}}&lt;br /&gt;
{{FeatureDone|KBounce|Random images as background|ascherfy@gmail.com|Andreas Scherf}}&lt;br /&gt;
{{FeatureTodo|KBreakOut|Level Sets|fela.kde@gmail.com|Fela Winkelmolen}} {{FeatureTodo|KBreakOut|Sound|fela.kde@gmail.com|Fela Winkelmolen}} {{FeatureTodo|KGoldrunner|Add the Demolition game (20 levels)|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureTodo|Kolf|Replace with Kolf 2 (help on coding and artwork desired)|majewsky@gmx.net|Stefan Majewsky}} &lt;br /&gt;
{{FeatureTodo|KsirK|rewrite AI code or at least correct most problems related in bug #170777. Volunteers wanted!|kleag@free.fr|Gaël de Chalendar}} &lt;br /&gt;
{{FeatureTodo|KsirK|Boost playing over Jabber|kleag@free.fr|Gaël de Chalendar}}&lt;br /&gt;
{{FeatureTodo|KSquares|Re-write computer player, make it act faster and more intelligent|ewoerner@kde.org|Eckhart Wörner}} &lt;br /&gt;
{{FeatureTodo|KSquares|Add more types of boards: hexagonal, triangular|ewoerner@kde.org|Eckhart Wörner}} &lt;br /&gt;
{{FeatureTodo|KSudoku|Import new engine|joselb@gmx.net|Johannes Bergmeier}} &lt;br /&gt;
{{FeatureTodo|KSudoku|Port game to new engine|joselb@gmx.net|Johannes Bergmeier}} &lt;br /&gt;
{{FeatureTodo|KSudoku|Adapt view to show information provided by engine|joselb@gmx.net|Johannes Bergmeier}} &lt;br /&gt;
{{FeatureTodo|KSudoku|Add new actions to GUI|joselb@gmx.net|Johannes Bergmeier}}&lt;br /&gt;
{{FeatureTodo|Granatier|Arena Editor|k.hias@gmx.de|Mathias Kraus}}&lt;br /&gt;
{{FeatureInProgress|Kajongg|New traditional Mahjongg for four players|wolfgang@rohdewald.de|Wolfang Rohdewald}}&lt;br /&gt;
{{FeatureTodo|Kajongg|Default voices for computer players|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureTodo|Kajongg|Make playing against computer suspendable/resumable|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureDone|Kigo|Load SGF games from command line and register to mimetype 'application/x-go-sgf'|sasch.pe@gmx.de|Sascha Peilicke}}&lt;br /&gt;
{{FeatureInProgress|Kigo|Fix KNewStuff provider issues|sasch.pe@gmx.de|Sascha Peilicke}}&lt;br /&gt;
{{FeatureInProgress|KTuberling|A new &amp;quot;fast switch&amp;quot; between playgrounds|alex@eyeos.org|Alex Fiestas}}&lt;br /&gt;
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}233784 Optimize size of puzzle files in default collection]|majewsky@gmx.net|Stefan Majewsky}} &lt;br /&gt;
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}211859 Recieve new puzzles over KNewStuff]|majewsky@gmx.net|Stefan Majewsky}} &lt;br /&gt;
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}211861 Introduce handicap as a means to configure difficulty]|majewsky@gmx.net|Stefan Majewsky}} &lt;br /&gt;
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}211866 Implement puzzle piles to organize pieces]|majewsky@gmx.net|Stefan Majewsky}} &lt;br /&gt;
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}212814 Quick piece grouping]|majewsky@gmx.net|Stefan Majewsky}} &lt;br /&gt;
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}213774 Add magnifying glass]|majewsky@gmx.net|Stefan Majewsky}} &lt;br /&gt;
{{FeatureDone|Palapeli|Rewrite puzzle table mouse interaction stack|majewsky@gmx.net|Stefan Majewsky}}&lt;br /&gt;
{{FeatureDone|Palapeli|Cleanup config dialog code|majewsky@gmx.net|Stefan Majewsky}}&lt;br /&gt;
{{FeatureTodo|Konquest|Merge the patch by Sean D'Epagnier to implement many features like map editing|pinaraf@pinaraf.info|Pierre Ducroquet}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdegraphics  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|libkdcraw|Make color management options more flexible|marcel.wiesweg@gmx.de|Marcel Wiesweg}} &lt;br /&gt;
{{FeatureDone|libksane|Improve auto-selection|kare.sars@iki.fi|K&amp;amp;aring;re S&amp;amp;auml;rs}} &lt;br /&gt;
{{FeatureInProgress|libksane|Highlight scanned area|kare.sars@iki.fi|K&amp;amp;aring;re S&amp;amp;auml;rs}} &lt;br /&gt;
{{FeatureTodo|libksane|Add public API for available devices|kare.sars@iki.fi|K&amp;amp;aring;re S&amp;amp;auml;rs}} &lt;br /&gt;
{{FeatureTodo|gwenview|Show Nepomuk info in image meta info|agateau@kde.org|Aurelien Gateau}} &lt;br /&gt;
{{FeatureTodo|gwenview|Persistent changes|agateau@kde.org|Aurelien Gateau}}&lt;br /&gt;
{{FeatureTodo|okular|Thumb creators via Okular Core|harsh@harshj.com|Harsh J}} &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdelibs  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|katepart|Add visual block mode and make the basic commands support it|ehambergαgmail.com|Erlend Hamberg}}&lt;br /&gt;
{{FeatureTodo|katepart|context dependent indenters|mail@milianw.de|Milian Wolff}}&lt;br /&gt;
{{FeatureTodo|katepart|scripting configuration, esp. for indenters|mail@milianw.de|Milian Wolff}}&lt;br /&gt;
{{FeatureTodo|katepart|list of available scripts and indenters|mail@milianw.de|Milian Wolff}}&lt;br /&gt;
{{FeatureTodo|katepart|GHNS for scripts/indenters|mail@milianw.de|Milian Wolff}}&lt;br /&gt;
{{FeatureTodo|katepart|easier writing of indenters, esp. by automatically reloading them when changed|mail@milianw.de|Milian Wolff}}&lt;br /&gt;
{{FeatureTodo|katepart|extend list of available default styles for highlighting, remove hardcoded colors from existing XML files|mail@milianw.de|Milian Wolff}}&lt;br /&gt;
{{FeatureTodo|katepart|improve AutoBrace plugin|mail@milianw.de|Milian Wolff}}&lt;br /&gt;
{{FeatureInProgress|katepart/ktexteditor|defaultvalues, regular expressions, mirroring master, scripting of templates|jowenn(you_know)kde(here_too)org|Joseph Wenninger}}&lt;br /&gt;
{{FeatureInProgress|ktexteditor plugin|InsaneHTML_LE (zencoding like selector input (light edition)|jowenn(you_know)kde(here_too)org|Joseph Wenninger}}&lt;br /&gt;
{{FeatureTodo|katepart|replace smart cursor/ranges API|cullmann@kde.org|Christoph Cullmann}}&lt;br /&gt;
{{FeatureTodo|kdeui|API to integrate KStatusNotifierItem and KNotification: both as class api and DBus specification API|davide.bettio@kdemail.net|Davide Bettio}}&lt;br /&gt;
{{FeatureTodo|KCalendarSystem|Add new astronomical calculation support classes to be used in kdelibs to build new astronomically based calendar systems, and in kdepim to build new version of libkholiday.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|KCalendarSystem|Add new calendar systems: Bahaii, Coptic, Ethiopean, Chinese, Japanese, Buddhist, etc.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|kdecore|Group policy (Windows) backend for KAuth|drf@kde.org|Dario Freddi}}&lt;br /&gt;
{{FeatureTodo|KDEPrint|If no file printing support in Qt4.5, migrate FilePrinter class from Okular to enable file printing for all apps via QPrinter.  To be discussed on k-c-d first.|john@layt.net|John Layt}}&lt;br /&gt;
{{FeatureTodo|KDEPrint|Add framework for standard actions for 'Send to...' for e-mail, fax, etc by printing to PDF/PS.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|kdeui|Implement caps-lock warning for password entry widgets|lemma@confuego.org|Michael Leupold}}&lt;br /&gt;
{{FeatureTodo|KLocale|Implement support for number grouping other than thousands using LC_NUMERIC and LC_MONETARY formats, e.g. India 00 00 000 and China 0000 0000.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|KLocale|Add configuration for AM/PM symbols.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|KLocale|Full POSIX compliant format support for date, time, numbers and money.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|KLocale|Implement more 'named' date/time formats, e.g. ISO, UnixTimestamp, RFC3339, etc.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|KLocale|Add Full date format in addition to existing short and long.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|KLocale|Add default colour to optionally display negative numbers.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|KLocale|Implement separate backends for each supported platform/desktop to use platform localisation in place of KDE locale.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|KLocale|Implement support for additional Country Code standards: ISO Alpha 3, ISO Numeric 3, FIPS-10.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|KLocale|Implement support for Country Code sub-regions, i.e. States/Provinces/etc. Needed for new KHolidays.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|kdeui|Improvements to KDatePicker/KDateTable for feature parity with Plasma Calendar widget, i.e. holiday support, select calendar system, etc.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|kdeui|DBus interface in StatusNotifierItem to connect it with freedesktop notifications instances|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureTodo|Khtml|Improvements in kwallet integration|edulix@gmail.com|Eduardo Robles Elvira}}&lt;br /&gt;
{{FeatureTodo|Khtml|Basic audio/video tag support|germain@ebooksfrance.org|Michael Howell and Germain Garand}} &lt;br /&gt;
{{FeatureTodo|Khtml|Implement more of DOM3's CSSOM View module|germain@ebooksfrance.org|Germain Garand}}&lt;br /&gt;
{{FeatureDone|KNewStuff|Improved Download Dialog, multiple previews, better integration of details, changelog is displayed|gladhornKDEorg|Frederik Gladhorn}}&lt;br /&gt;
{{FeatureInProgress|KNewStuff|Icon view mode|gladhornKDEorg|Reza Shah, Frederik Gladhorn}}&lt;br /&gt;
{{FeatureDone|KNewStuff|Upload dialog rewritten: It now supports updating of old uploads, previews, most data that can be entered on the website and allows direct login to the account|gladhornKDEorg|Frederik Gladhorn}}&lt;br /&gt;
{{FeatureTodo|kdeui|Social About Dialog|teo@kde.org|Téo Mrnjavac}}&lt;br /&gt;
{{FeatureTodo|kdeui|Generic find bar widget|sasch.pe@gmx.de|Sascha Peilicke}}&lt;br /&gt;
{{FeatureTodo|kio|SSL client certificate support|ahartmetz@gmail.com|Andreas Hartmetz}}&lt;br /&gt;
{{FeatureTodo|kio|SSL root certificate list GUI + backend|ahartmetz@gmail.com|Andreas Hartmetz}}&lt;br /&gt;
{{FeatureDone|kio|Add &amp;quot;apply to all&amp;quot; checkbox in renamedialog and allow for automatic renaming|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureInProgress|kio|Port renamedialog to KFileMetaDataWidget|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureInProgress|kio|Don't select extension in renamedialog|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureDone|kio|Better listing of applications in file &amp;quot;open with&amp;quot; context menu|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureInProgress|kio|Context menu entry to open all files in their default applications|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureDone|kfile|Scroll wheel support for breadcrumb bar|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureInProgress|kfile|Show all sub-folders in breadcrumb bar|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureInProgress|kfile|Middle-click on subfolder in the breadcrumb bar to open in a new tab|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureTodo|kfile|Easier access to protocols in breadcrumb bar|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureTodo|kfile|Show sub-sub-folders (and so on) in breadcrumb bar|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureInProgress|kdecore|Generic shared-memory cache|mpyne@kde.org|Michael Pyne}}&lt;br /&gt;
{{FeatureInProgress|kdeui|Redesigned icon cache|mpyne@kde.org|Michael Pyne}}&lt;br /&gt;
{{FeatureTodo|kdeui|Support alpha channel in KColor classes|christoph@maxiom.de|Christoph Feck}}&lt;br /&gt;
{{FeatureDone|nepomuk|Redesigned Nepomuk::TagWidget which can now actually be used by applications|trueg@kde.org|Sebastian Trueg}}&lt;br /&gt;
{{FeatureInProgress|kio|Remember downloads via Nepomuk|trueg@kde.org|Sebastian Trueg}}&lt;br /&gt;
{{FeatureDone|solid|Broadcast mount/unmount messages across processes|wilderkde@gmail.com|Jacopo De Simoi}}&lt;br /&gt;
{{FeatureTodo|solid|Add parent matching to predicate parsing|wilderkde@gmail.com|Jacopo De Simoi}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdemultimedia  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|JuK|Remove Qt/KDE3 support lib requirements -- will move to KDE 4.5 feature plan|mpyne@kde.org|Michael Pyne}}&lt;br /&gt;
{{FeatureTodo|JuK|Allow setting covers directly from URLs supported by KIO - drag/drop already allows this however -- will move to KDE 4.5 feature plan|mpyne.org|Michael Pyne}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdenetwork  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|Kopete|UPnp Support|mattr@kde.org|Matt Rogers}} &lt;br /&gt;
{{FeatureTodo|Kopete|Jabber Jingle video support|detlev.casanova@gmail.com|Detlev Casanova}} &lt;br /&gt;
{{FeatureTodo|Kopete|Jabber Jingle ICE support|detlev.casanova@gmail.com|Detlev Casanova}} &lt;br /&gt;
{{FeatureTodo|Kopete|Add support for urls to Bonjour plugin|kossebau@kde.org|Friedrich W. H. Kossebau}} &lt;br /&gt;
{{FeatureTodo|Kopete|Rich text support for ICQ|kedgedev@gmail.com|Roman Jarosz}} &lt;br /&gt;
{{FeatureDone|Kopete|Extended video controls|fschaefer.oss(at)googlemail.com|Frank Schaefer}} &lt;br /&gt;
{{FeatureTodo|Krdc|Connection status screen and reconnect|murraytony@gmail.com|Tony Murray}}&lt;br /&gt;
{{FeatureDone|Krdc|Much improved new connection screen: more info, sortable, interactive, and better use of space|murraytony@gmail.com|Tony Murray}}&lt;br /&gt;
{{FeatureInProgress|KGet|Use plasma notifications to show the progress|mat69@gmx.net|Matthias Fuchs}}&lt;br /&gt;
{{FeatureDone|KGet|Refaktor Torrent-Plugin to base on the newly created libktorrent from extragear|l.appelhans@gmx.de|Lukas Appelhans}}&lt;br /&gt;
{{FeatureInProgress|KGet|Better error handling|l.appelhans@gmx.de|Lukas Appelhans}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeplasma-addons  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|knowledgebase|port knowledgebase plasmoid to new engine|ewoerner@kde.org|Eckhart Wörner}} &lt;br /&gt;
{{FeatureTodo|knowledgebase|Add categories|ewoerner@kde.org|Eckhart Wörner}} &lt;br /&gt;
{{FeatureDone|Bookmarks widget|New|kossebau@kde.org|Friedrich W. H. Kossebau}} &lt;br /&gt;
{{FeatureDone|Mandelbrot Wallpaper|Performance improvements|jacob.benoit.1@gmail.com|Benoit Jacob}} &lt;br /&gt;
{{FeatureDone|Mandelbrot Wallpaper|Rendering improvements (through dithering, extra iterations, and better/simpler formulas)|jacob.benoit.1@gmail.com|Benoit Jacob}}&lt;br /&gt;
{{FeatureDone|Mandelbrot Wallpaper|Allow to import/export parameters and to export to PNG images|jacob.benoit.1@gmail.com|Benoit Jacob}}&lt;br /&gt;
{{FeatureDone|Comic Applet|Add option to show &amp;quot;text&amp;quot;, &amp;quot;icons&amp;quot; or both &amp;quot;text and icons&amp;quot; for tabs|mat69@gmx.net|Matthias Fuchs}}&lt;br /&gt;
{{FeatureDone|Comic Applet|Prefetch next and previous comic strip (thx to Miha Cancula)|mat69@gmx.net|Matthias Fuchs}}&lt;br /&gt;
{{FeatureDone|Character Runner|New|akreuzkamp@web.de|Anton Kreuzkamp}}&lt;br /&gt;
{{FeatureInProgress|KDE Observatory|Performance improvements, new data engine|sandroandrade@kde.org|Sandro Andrade}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdesdk  =&lt;br /&gt;
&lt;br /&gt;
{| cellspa/cing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|Lokalize|Integrate snowball stemmer for glossary|shafff@NOSPAMukr.net|Nick Shaforostoff}} &lt;br /&gt;
{{FeatureTodo|Lokalize|Continue implementing XLIFF spec|shafff@NOSPAMukr.net|Nick Shaforostoff}} &lt;br /&gt;
{{FeatureTodo|Lokalize|Segmentation [editing] functionality|shafff@NOSPAMukr.net |Nick Shaforostoff}} &lt;br /&gt;
{{FeatureTodo|Lokalize|Remote translation memories|shafff@NOSPAMukr.net|Nick Shaforostoff}} &lt;br /&gt;
{{FeatureTodo|Lokalize|Integrate with nepomuk (fast stats retrieval, tag cloud - incl sharing!)|shafff@NOSPAMukr.net|Nick Shaforostoff}} &lt;br /&gt;
{{FeatureInProgress|Kate|Replace old snippet plugin through TNG plugin and enhance the usability of the new plugin|jowenn(you_know)kde(here_too)org|Joseph Wenninger}}&lt;br /&gt;
{{FeatureInProgress|Kate|Port the old XML completion plugin (xmltools)|tomastrnka@gmx.com|Tomáš Trnka}} &lt;br /&gt;
{{FeatureInProgress|Umbrello|Add a code importing wizzard|andi.fischer@NOSPAMhispeed.ch|Andi Fischer}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeutils  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|Ark|Add an options dialog (maybe)|haraldhv@stud.ntnu.no|Harald Hvaal}}&lt;br /&gt;
{{FeatureTodo|Ark|Simplify Kerfuffle's API (jobs, interfaces etc) and try to make it stable|kubito@gmail.com|Raphael Kubo da Costa}}&lt;br /&gt;
{{FeatureTodo|Ark|Support for custom options from the compression interface (eg. a slider for selecting compression level for rar files)|haraldhv@stud.ntnu.no|Harald Hvaal}}&lt;br /&gt;
{{FeatureTodo|Ark|Add feedback for the latest operation in the status bar|kubito@gmail.com|Raphael Kubo da Costa}}&lt;br /&gt;
{{FeatureTodo|Ark|Try multiple plugins for each archive type before failing|kubito@gmail.com|Raphael Kubo da Costa}}&lt;br /&gt;
{{FeatureTodo|Ark|Make the internal previewer optional|kubito@gmail.com|Raphael Kubo da Costa}}&lt;br /&gt;
{{FeatureTodo|Ark|Add a &amp;quot;Preview with...&amp;quot; context menu item|kubito@gmail.com|Raphael Kubo da Costa}}&lt;br /&gt;
{{FeatureTodo|Ark|Make Kerfuffle really thread-safe (and use threads in less places)|kubito@gmail.com|Raphael Kubo da Costa}}&lt;br /&gt;
{{FeatureTodo|Ark|Get rid of the Observer code in Kerfuffle|kubito@gmail.com|Raphael Kubo da Costa}}&lt;br /&gt;
{{FeatureTodo|Ark|Make error reporting work as expected in Kerfuffle|kubito@gmail.com|Raphael Kubo da Costa}}&lt;br /&gt;
{{FeatureTodo|KGpg|Make keyserver actions possible to use on multiple keyservers at once|kde@opensource.sf-tec.de|Rolf Eike Beer}}&lt;br /&gt;
{{FeatureTodo|Okteta|add Kate-like search tool|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for import by drop, both url and data|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|copy again puts also a value or char variant of the data to clipboard|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for memory mapping of files and 64-bit addressing|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for jobs like io, printing, string search or filter|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add Okular like embedded notifications|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Store bookmarks and other view settings for next load|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add global toggle option for the offset display, hex or decimal|kossebau@kde.org|Friedrich W. H. Kossebau}} &lt;br /&gt;
{{FeatureTodo|Okteta|Add Kate-like combined dialogs to query for actions on files|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Improve the titels of the changes to the bytearray to be more descriptive, best using ids to avoid text string|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Merge row and column widgets into one|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add a general KPart adapter to Kasten, than finish port of Okteta KPart to Okteta Kasten|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Make all user interaction in the KastenCore managers plugin-based|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Store bookmarks|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add view profiles, incl. editor/manager|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add KNewStuff support to the structures tool|alex.richardson@gmx.de|Alex Richardson}} &lt;br /&gt;
{{FeatureTodo|printer-applet|Restore feature parity with KDEPrint3 where possible.||Jonathon Riddell, John Layt}} &lt;br /&gt;
{{FeatureDone|kdelirc/kremotecontrol|Transition from KDELirc to KRemoteControl|michael_zanetti@gmx.net|Michael Zanetti}} &lt;br /&gt;
{{FeatureInProgress|KGpg|Add &amp;amp;quot;caff&amp;amp;quot; mode for keysigning|kde@opensource.sf-tec.de|Rolf Eike Beer}}&lt;br /&gt;
{{FeatureInProgress|Okteta|Allow writing structure definitions in JavaScript|alex.richardson@gmx.de|Alex Richardson}} &lt;br /&gt;
{{FeatureInProgress|Okteta|Add possibility to set count of bytes per line/group|kossebau@kde.org|Friedrich W. H. Kossebau}} &lt;br /&gt;
{{FeatureDone|Okteta|new export formats: S-Record, Intel Hex, Base32, Ascii85, Uuencoding, Xxencoding|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureDone|Okteta|add QIODevice for AbstractByteArrayModel and make mimetype detection use this instead of only filename |kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureDone|Okteta|Refactor mouse input to controllers for the bytearray widget|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Other  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Schedules/KDE4/4.5_Feature_Plan</id>
		<title>Schedules/KDE4/4.5 Feature Plan</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Schedules/KDE4/4.5_Feature_Plan"/>
				<updated>2010-04-25T15:48:42Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: added my 4.5 plans&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of planned features for the SC 4.5 release. &lt;br /&gt;
&lt;br /&gt;
See also: &lt;br /&gt;
&lt;br /&gt;
*[[Schedules/KDE4/4.5 Release Schedule]] &lt;br /&gt;
*[[Schedules/KDE4/4.5 Release Goals]] &lt;br /&gt;
*[[Schedules/KDE4/4.4 Feature Plan]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; Legend: &lt;br /&gt;
&lt;br /&gt;
*todo =&amp;amp;gt; not started yet &lt;br /&gt;
*in-progress =&amp;amp;gt; started, but not completed yet &lt;br /&gt;
*done =&amp;amp;gt; completed&lt;br /&gt;
&lt;br /&gt;
__TOC__ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeadmin  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|system-config-printer-kde|Restore feature parity with KDEPrint3 where possible.||Jonathan Riddell, John Layt}} &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeartwork  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdebase-apps  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|Konqueror|Improvements in session-management|edulix@gmail.com|Eduardo Robles Elvira}} &lt;br /&gt;
{{FeatureTodo|Konqueror|Improvements in tab-bar widget|edulix@gmail.com|Eduardo Robles Elvira}} &lt;br /&gt;
{{FeatureInProgress|Konqueror|New Konqueror bookmarks using Akonadi and Nepomuk, awesome bar|edulix@gmail.com|Eduardo Robles Elvira}} &lt;br /&gt;
{{FeatureInProgress|Konsole|Finish implementing tab context menu|kurt.hindenburg@gmail.com|Kurt Hindenburg}}&lt;br /&gt;
{{FeatureInProgress|Konsole|Allow setting tab profile from file on command-line|kurt.hindenburg@gmail.com|Kurt Hindenburg}}&lt;br /&gt;
{{FeatureInProgress|Konsole|Adds support for SHELL_SESSION_ID|kurt.hindenburg@gmail.com|Kurt Hindenburg}}&lt;br /&gt;
{{FeatureInProgress|Konsole|Modernize menu layout|sasch.pe@gmx.de|Sascha Peilicke}}&lt;br /&gt;
{{FeatureInProgress|Konsole|Move to KTabWidget|sasch.pe@gmx.de|Sascha Peilicke}}&lt;br /&gt;
{{FeatureInProgress|print-manager|New Print manager KCM and applet replacement, using C++|dantti85-pk@yahoo.com.br|Daniel Nicoletti}} &lt;br /&gt;
{{FeatureDone|Dolphin|Drag and drop on tabs|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureInProgress|Dolphin|Make view sub-menus available as toolbar buttons|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureInProgress|Dolphin|Smooth scrolling|fredrik@kde.org|Fredrik Höglund}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdebase-runtime  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|KWallet|Single Sign On using PAM|lemma@confuego.org|Michael Leupold}}&lt;br /&gt;
{{FeatureTodo|network kioslave|Backend for LISa|kossebau@kde.org|Friedrich Kossebau}}&lt;br /&gt;
{{FeatureTodo|network kioslave|Backend for SMB|kossebau@kde.org|Friedrich Kossebau}}&lt;br /&gt;
{{FeatureTodo|network kioslave|Integrate with remote and zeroconf kioslaves|kossebau@kde.org|Friedrich Kossebau}}&lt;br /&gt;
{{FeatureTodo|Locale KCM|Add support for new KLocale features (see kdelibs section) including Digit Groups, AM/PM, etc.  Improvements to usability of existing money display options.|john@layt.net|John Layt}}&lt;br /&gt;
{{FeatureInProgress|network kioslave|Backend for UPnP|kossebau@kde.org|Friedrich Kossebau}}&lt;br /&gt;
{{FeatureTodo|network kioslave| Backend to discover bluetooth devices and they services |edulix@gmail.com|Eduardo Robles Elvira}}&lt;br /&gt;
{{FeatureInProgress|bluetooth kioslave|Backend to browse bluetooth devices|edulix@gmail.com|Eduardo Robles Elvira}}&lt;br /&gt;
{{FeatureDone|Nepomuk|Monitor file system changes via inotify|trueg@kde.org|Sebastian Trueg}}&lt;br /&gt;
|}&lt;br /&gt;
{{FeatureTodo|KNotify|Route solid errors via knotify to the device notifier|wilderkde@gmail.com|Jacopo De Simoi}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdebase-workspace  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: center;&amp;quot; colspan=&amp;quot;4&amp;quot; | Non-Plasma, Non-KWin &lt;br /&gt;
{{FeatureTodo|Icons KCM|More configurable icon sizes|christoph@maxiom.de|Christoph Feck}} &lt;br /&gt;
{{FeatureTodo|Fonts KCM|More configurable fonts|christoph@maxiom.de|Christoph Feck}} &lt;br /&gt;
{{FeatureTodo|Solid|Write a new Bluetooth backend |alex@eyeos.org|Alex Fiestas}} &lt;br /&gt;
{{FeatureTodo|Screenedges|Screenedges handling outside of kwin/plasma|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureInProgress|Oxygen style|Move window using left-mouse button on windows' empty areas|hugo@oxygen-icons.org|Hugo Pereira Da Costa}}&lt;br /&gt;
{{FeatureInProgress|Oxygen configuration|Oxygen style and decoration standalone expert configuration tool|hugo@oxygen-icons.org|Hugo Pereira Da Costa}}&lt;br /&gt;
{{FeatureInProgress|Free Space Notifier Daemon|Small daemon that warns you when your home has almost no space left|knuckles@gmail.com|Ivo Anjo}}&lt;br /&gt;
{{FeatureInProgress|Activities Daemons|Daemons to handle info about activities (kded daemon and a nepomuk service)|ivan.cukic@kde.org|Ivan Cukic}}&lt;br /&gt;
{{FeatureInProgress|Systemsettings|driconf KCM|fredrik@kde.org|Fredrik Höglund}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: center;&amp;quot; colspan=&amp;quot;4&amp;quot; | Plasma &lt;br /&gt;
{{FeatureInProgress|systemtray/taskmanager|port the systray and tasks applet to windows|windows@kde.org|kde windows}}&lt;br /&gt;
{{FeatureInProgress|systemtray|monochrome statusnotifier based systray icons support|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureTodo|systemtray|sort icons by category|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureInProgress|systemtray|put hidden icons in a popup menu|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureInProgress|tasks dataengine|export all informations needed to build an applet comparable to the current one|matthieu_gallien@yahoo.fr|Matthieu Gallien}}&lt;br /&gt;
{{FeatureDone|notifications|split systemtray and notifications applet|notmart@gmail.com|Marco Martin}}  &lt;br /&gt;
{{FeatureInProgress|notifications|new look and behaviour for notifications|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureDone|notifications|support for remote applets for notifications|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureDone|netbook/SAL|use QStandardModels|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureInProgress|netbook/SAL|support for drag and drop of items|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureTodo|netbook/SAL|package manager invocation from the toolbox|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureTodo|netbook/Workspace KCM|New default options for KWin: tabbox as present windows, that will be set as regular grid|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureTodo|libplasma/extenders|put extendergroups in scrollwidgets|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureTodo|libplasma/extenders|possibility to detach exteneritems as standalone windows|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureInProgress|libplasma/theme|more transparent dialogs when the blur effect is enabled|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureInProgress|libplasma/desktop|Activity Manager UI|chani@kde.org|Chani}}&lt;br /&gt;
{{FeatureTodo|accounts applet|a plasma widget that is a central place to add accounts to social sites like identica and opendesktop, optimized for the netbook shell|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureTodo|libplasma|Improvements to Calendar/Clock widgets. Improved config ui. Allow multiple holidays on same day. Allow multiple Holiday Regions. Weekends. etc.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|folderview|&amp;quot;Open folder&amp;quot; icon to open folder into pop-up at request instead of automatically.|bigras.bruno@gmail.com|Bruno Bigras}}&lt;br /&gt;
{{FeatureTodo|folderview|Extend the configuration UI for nepomuksearch|fredrik@kde.org|Fredrik Höglund}}&lt;br /&gt;
{{FeatureInProgress|Extend Calendar DataEngine with Akonadi calendar incidents|Allows to query calendar events/todos from Akonadi in Plasma|gladhornKDEorg|Frederik Gladhorn}}&lt;br /&gt;
{{FeatureDone|calculator|Added optional libqalculate support in the calculator runner|agostinelli@gmail.com|Matteo Agostinelli}}&lt;br /&gt;
{{FeatureInProgress|KRunner|Add some advanced sorting to KRunner using Nepomuk|l.appelhans@gmx.de|Lukas Appelhans}}&lt;br /&gt;
{{FeatureTodo|KRunner|Improve keyboard navigation &amp;amp; command history interaction|wilderkde@gmail.com|Jacopo De Simoi}}&lt;br /&gt;
{{FeatureInProgress|device-notifier|Route all solid error notifications via knotify to the device notifier|wilderkde@gmail.com|Jacopo De Simoi}}&lt;br /&gt;
{{FeatureInProgress|device-notifier|Detailed (HAL) error notifications in the device notifier|wilderkde@gmail.com|Jacopo De Simoi}}&lt;br /&gt;
{{FeatureInProgress|Plasma::Theme|Themed CSS support|sebas@kde.org|Sebastian Kügler}}&lt;br /&gt;
{{FeatureTodo|battery|Weighted charge information for multiple batteries|sebas@kde.org|Sebastian Kügler}}&lt;br /&gt;
{{FeatureInProgress|crystal|New desktop search widget|sebas@kde.org|Sebastian Kügler}}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: center;&amp;quot; colspan=&amp;quot;4&amp;quot; | KWin&lt;br /&gt;
{{FeatureTodo|Tiling|Merge window tiling branch|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureInProgress|KWin|New flag to exclude windows from switchers|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureDone|KCM Decoration|New decoration kcm with previews and GHNS|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureDone|Aurorae|Port Aurorae to GraphicsView and KDecoration|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureInProgress|Aurorae|Better themeing support|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureTodo|Aurorae|Window tabbing support|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureTodo|Aurorae|Decorations on window sides|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureTodo|Aurorae|Autohiding decoration for maximized windows|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureTodo|kwin|hide windows from other activities|chani@kde.org|Chani}}&lt;br /&gt;
{{FeatureTodo|Effects|Move features from present windows to libkwineffects to make them available in desktop grid|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureTodo|Effects|Add close window button to each window in present windows/desktop grid|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureTodo|Window Tabbing/libtaskmanager|Announce window groups to be used for grouping in tasks applet|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureTodo|KWin/plasma|New window type for Plasma dashboard|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
{{FeatureDone|Effects|New blur effect|fredrik@kde.org|Fredrik Höglund}}&lt;br /&gt;
{{FeatureInProgress|Effects|High quality scaling shader for the taskbar thumbnails|fredrik@kde.org|Fredrik Höglund}}&lt;br /&gt;
{{FeatureTodo|KWin|Hint for defining the window snap rect|fredrik@kde.org|Fredrik Höglund}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeedu  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|KStars|Display Comet Magnitudes whenever possible|akarshsimha@gmail.com|Akarsh Simha}} &lt;br /&gt;
{{FeatureTodo|KStars|Information links in-place for each technical term|akarshsimha@gmail.com|Akarsh Simha}} {{FeatureTodo|KStars|Tool to suggest star-hopping techniques???|akarshsimha@gmail.com|Akarsh Simha}} &lt;br /&gt;
{{FeatureTodo|KStars|Extend conjunction tool to have one object unspecified, but have a genre of objects specified instead|akarshsimha@gmail.com|Akarsh Simha}} &lt;br /&gt;
{{FeatureTodo|KStars|Simulate Lunar Eclipses|akarshsimha@gmail.com|Akarsh Simha}} &lt;br /&gt;
{{FeatureTodo|KStars|Simulate Satellites and Iridium Flares|akarshsimha@gmail.com|Akarsh Simha}} &lt;br /&gt;
{{FeatureTodo|KStars|Social and Geographical Integration for KStars|akarshsimha@gmail.com|Akarsh Simha}} &lt;br /&gt;
{{FeatureTodo|KStars|Marble widget for Geolocation tool|mboquien@free.fr|Médéric Boquien}} &lt;br /&gt;
{{FeatureTodo|KStars|Better printed star charts|kstars@30doradus.org|Jason Harris}} &lt;br /&gt;
{{FeatureTodo|KStars|Better rendering of comets/asteroids|kstars@30doradus.org|Jason Harris}} &lt;br /&gt;
{{FeatureTodo|KStars|Texture mapping of the skymap???|kstars@30doradus.org|Jason Harris}} &lt;br /&gt;
{{FeatureTodo|Marble|Add proper support for GPX waypoints, tracks and routes display|anders@alweb.dk|Anders Lund}}&lt;br /&gt;
{{FeatureTodo|Marble|Export map to MxN pixel bitmap|inge@lysator.liu.se|Inge Wallin}}&lt;br /&gt;
{{FeatureTodo|Marble|Map Contents translation|tackat@kde.org|Torsten Rahn}}&lt;br /&gt;
{{FeatureTodo|Kalzium|Port Kalzium to use QGV based periodic table widget|mhanwell@kde.org|Marcus D. Hanwell}}&lt;br /&gt;
{{FeatureDone|Marble|Support OpenStreetMap Nominatim as search backend (MarbleRunner)|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureInProgress|Marble|Generalized Animations with GeoDataLookAt support|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureInProgress|Marble|Online-Routing|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureInProgress|Marble|GPS improvements|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureInProgress|Marble|Maemo Support|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
{{FeatureInProgress|Marble|GeoGraphicsScene for Online Service Plugins|bastianholst@gmx.de|Bastian Holst}}&lt;br /&gt;
{{FeatureInProgress|Marble|Download region|jmho@c-xx.com|Jens-Michael Hoffmann}}&lt;br /&gt;
{{FeatureInProgress|Marble|Implement sun locator blendings as derived classes of Marble::Blending|jmho@c-xx.com|Jens-Michael Hoffmann}}&lt;br /&gt;
{{FeatureInProgress|Marble|Configurable texture layer blending|jmho@c-xx.com|Jens-Michael Hoffmann}}&lt;br /&gt;
{{FeatureInProgress|Marble|Import geonames city data|sonu.itbhu@gmail.com|Harshit Jain}}&lt;br /&gt;
{{FeatureInProgress|Marble|Add new icons for online services|gabrieljoel@gmail.com|Gabriel Joel Perez}}&lt;br /&gt;
{{FeatureInProgress|Marble|Download Progressbar in Qt-only version|akssps011@gmail.com|Siddharth Srivastava}}&lt;br /&gt;
{{FeatureInProgress|Marble|Bookmark support|anik.varshney@gmail.com|Kumar Anik Varshney}}&lt;br /&gt;
{{FeatureInProgress|Marble|Various Marble speed improvements|rahn@kde.org|Torsten Rahn, Ariya Hidayat}}&lt;br /&gt;
{{FeatureDone|KAlgebra|Type checker for expressions to statically detect errors|aleixpol@kde.org|Aleix Pol}}&lt;br /&gt;
{{FeatureInProgress|KAlgebra|Support for drawing implicit curves|percy.camilo.ta@gmail.com|Percy Camilo Triveño Aucahuasi}}&lt;br /&gt;
{{FeatureInProgress|Parley|Parley practice mode rewritten|gladhornKDEorg|Daniel Laidig, Frederik Gladhorn}}&lt;br /&gt;
{{FeatureTodo|Cantor|import and polish Qalculate! backend|mail@milianw.de|Milian Wolff}}&lt;br /&gt;
{{FeatureInProgress|KTurtle|Implement GHNS download support|nielsslot@gmail.com|Niels Slot}}&lt;br /&gt;
{{FeatureTodo|KTurtle|Implement GHNS upload support|nielsslot@gmail.com|Niels Slot}}&lt;br /&gt;
{{FeatureDone|Rocs|Node beautification in SVG|tcanabrava@kde.org|Tomaz Canabrava}}&lt;br /&gt;
{{FeatureDone|Rocs|Threads for not blocking the UI|tcanabrava@kde.org|Tomaz Canabrava}}&lt;br /&gt;
{{FeatureDone|Rocs|Redesigned the UI for better usability|tcanabrava@kde.org|Tomaz Canabrava}}&lt;br /&gt;
{{FeatureDone|Rocs|Plugin System|wiglot@gmail.com|Wagner Reck}}&lt;br /&gt;
{{FeatureDone|Rocs|Small plugins as examples|wiglot@gmail.com|Wagner Reck}}&lt;br /&gt;
{{FeatureDone|Rocs|Multiple Script support|tcanabrava@kde.org|Tomaz Canabrava}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdegames  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureDone|KBounce|Difficulty levels|ascherfy@gmail.com|Andreas Scherf}}&lt;br /&gt;
{{FeatureDone|KBounce|Random images as background|ascherfy@gmail.com|Andreas Scherf}}&lt;br /&gt;
{{FeatureTodo|KBreakOut|Level Sets|fela.kde@gmail.com|Fela Winkelmolen}} {{FeatureTodo|KBreakOut|Sound|fela.kde@gmail.com|Fela Winkelmolen}} {{FeatureTodo|KGoldrunner|Add the Demolition game (20 levels)|iandw.au@gmail.com|Ian Wadham}}&lt;br /&gt;
{{FeatureTodo|Kolf|Replace with Kolf 2 (help on coding and artwork desired)|majewsky@gmx.net|Stefan Majewsky}} &lt;br /&gt;
{{FeatureTodo|KsirK|rewrite AI code or at least correct most problems related in bug #170777. Volunteers wanted!|kleag@free.fr|Gaël de Chalendar}} &lt;br /&gt;
{{FeatureTodo|KsirK|Boost playing over Jabber|kleag@free.fr|Gaël de Chalendar}}&lt;br /&gt;
{{FeatureTodo|KSquares|Re-write computer player, make it act faster and more intelligent|ewoerner@kde.org|Eckhart Wörner}} &lt;br /&gt;
{{FeatureTodo|KSquares|Add more types of boards: hexagonal, triangular|ewoerner@kde.org|Eckhart Wörner}} &lt;br /&gt;
{{FeatureTodo|KSudoku|Import new engine|joselb@gmx.net|Johannes Bergmeier}} &lt;br /&gt;
{{FeatureTodo|KSudoku|Port game to new engine|joselb@gmx.net|Johannes Bergmeier}} &lt;br /&gt;
{{FeatureTodo|KSudoku|Adapt view to show information provided by engine|joselb@gmx.net|Johannes Bergmeier}} &lt;br /&gt;
{{FeatureTodo|KSudoku|Add new actions to GUI|joselb@gmx.net|Johannes Bergmeier}}&lt;br /&gt;
{{FeatureTodo|Granatier|Arena Editor|k.hias@gmx.de|Mathias Kraus}}&lt;br /&gt;
{{FeatureInProgress|Kajongg|New traditional Mahjongg for four players|wolfgang@rohdewald.de|Wolfang Rohdewald}}&lt;br /&gt;
{{FeatureTodo|Kajongg|Default voices for computer players|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureTodo|Kajongg|Make playing against computer suspendable/resumable|wolfgang@rohdewald.de|Wolfgang Rohdewald}}&lt;br /&gt;
{{FeatureDone|Kigo|Load SGF games from command line and register to mimetype 'application/x-go-sgf'|sasch.pe@gmx.de|Sascha Peilicke}}&lt;br /&gt;
{{FeatureInProgress|Kigo|Fix KNewStuff provider issues|sasch.pe@gmx.de|Sascha Peilicke}}&lt;br /&gt;
{{FeatureInProgress|KTuberling|A new &amp;quot;fast switch&amp;quot; between playgrounds|alex@eyeos.org|Alex Fiestas}}&lt;br /&gt;
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}233784 Optimize size of puzzle files in default collection]|majewsky@gmx.net|Stefan Majewsky}} &lt;br /&gt;
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}211859 Recieve new puzzles over KNewStuff]|majewsky@gmx.net|Stefan Majewsky}} &lt;br /&gt;
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}211861 Introduce handicap as a means to configure difficulty]|majewsky@gmx.net|Stefan Majewsky}} &lt;br /&gt;
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}211866 Implement puzzle piles to organize pieces]|majewsky@gmx.net|Stefan Majewsky}} &lt;br /&gt;
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}212814 Quick piece grouping]|majewsky@gmx.net|Stefan Majewsky}} &lt;br /&gt;
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}213774 Add magnifying glass]|majewsky@gmx.net|Stefan Majewsky}} &lt;br /&gt;
{{FeatureDone|Palapeli|Rewrite puzzle table mouse interaction stack|majewsky@gmx.net|Stefan Majewsky}}&lt;br /&gt;
{{FeatureDone|Palapeli|Cleanup config dialog code|majewsky@gmx.net|Stefan Majewsky}}&lt;br /&gt;
{{FeatureTodo|Konquest|Merge the patch by Sean D'Epagnier to implement many features like map editing|pinaraf@pinaraf.info|Pierre Ducroquet}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdegraphics  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|libkdcraw|Make color management options more flexible|marcel.wiesweg@gmx.de|Marcel Wiesweg}} &lt;br /&gt;
{{FeatureDone|libksane|Improve auto-selection|kare.sars@iki.fi|K&amp;amp;aring;re S&amp;amp;auml;rs}} &lt;br /&gt;
{{FeatureInProgress|libksane|Highlight scanned area|kare.sars@iki.fi|K&amp;amp;aring;re S&amp;amp;auml;rs}} &lt;br /&gt;
{{FeatureTodo|libksane|Add public API for available devices|kare.sars@iki.fi|K&amp;amp;aring;re S&amp;amp;auml;rs}} &lt;br /&gt;
{{FeatureTodo|gwenview|Show Nepomuk info in image meta info|agateau@kde.org|Aurelien Gateau}} &lt;br /&gt;
{{FeatureTodo|gwenview|Persistent changes|agateau@kde.org|Aurelien Gateau}}&lt;br /&gt;
{{FeatureTodo|okular|Thumb creators via Okular Core|harsh@harshj.com|Harsh J}} &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdelibs  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|katepart|Add visual block mode and make the basic commands support it|ehambergαgmail.com|Erlend Hamberg}}&lt;br /&gt;
{{FeatureTodo|katepart|context dependent indenters|mail@milianw.de|Milian Wolff}}&lt;br /&gt;
{{FeatureTodo|katepart|scripting configuration, esp. for indenters|mail@milianw.de|Milian Wolff}}&lt;br /&gt;
{{FeatureTodo|katepart|list of available scripts and indenters|mail@milianw.de|Milian Wolff}}&lt;br /&gt;
{{FeatureTodo|katepart|GHNS for scripts/indenters|mail@milianw.de|Milian Wolff}}&lt;br /&gt;
{{FeatureTodo|katepart|easier writing of indenters, esp. by automatically reloading them when changed|mail@milianw.de|Milian Wolff}}&lt;br /&gt;
{{FeatureTodo|katepart|extend list of available default styles for highlighting, remove hardcoded colors from existing XML files|mail@milianw.de|Milian Wolff}}&lt;br /&gt;
{{FeatureTodo|katepart|improve AutoBrace plugin|mail@milianw.de|Milian Wolff}}&lt;br /&gt;
{{FeatureInProgress|katepart/ktexteditor|defaultvalues, regular expressions, mirroring master, scripting of templates|jowenn(you_know)kde(here_too)org|Joseph Wenninger}}&lt;br /&gt;
{{FeatureInProgress|ktexteditor plugin|InsaneHTML_LE (zencoding like selector input (light edition)|jowenn(you_know)kde(here_too)org|Joseph Wenninger}}&lt;br /&gt;
{{FeatureTodo|katepart|replace smart cursor/ranges API|cullmann@kde.org|Christoph Cullmann}}&lt;br /&gt;
{{FeatureTodo|kdeui|API to integrate KStatusNotifierItem and KNotification: both as class api and DBus specification API|davide.bettio@kdemail.net|Davide Bettio}}&lt;br /&gt;
{{FeatureTodo|KCalendarSystem|Add new astronomical calculation support classes to be used in kdelibs to build new astronomically based calendar systems, and in kdepim to build new version of libkholiday.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|KCalendarSystem|Add new calendar systems: Bahaii, Coptic, Ethiopean, Chinese, Japanese, Buddhist, etc.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|kdecore|Group policy (Windows) backend for KAuth|drf@kde.org|Dario Freddi}}&lt;br /&gt;
{{FeatureTodo|KDEPrint|If no file printing support in Qt4.5, migrate FilePrinter class from Okular to enable file printing for all apps via QPrinter.  To be discussed on k-c-d first.|john@layt.net|John Layt}}&lt;br /&gt;
{{FeatureTodo|KDEPrint|Add framework for standard actions for 'Send to...' for e-mail, fax, etc by printing to PDF/PS.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|kdeui|Implement caps-lock warning for password entry widgets|lemma@confuego.org|Michael Leupold}}&lt;br /&gt;
{{FeatureTodo|KLocale|Implement support for number grouping other than thousands using LC_NUMERIC and LC_MONETARY formats, e.g. India 00 00 000 and China 0000 0000.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|KLocale|Add configuration for AM/PM symbols.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|KLocale|Full POSIX compliant format support for date, time, numbers and money.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|KLocale|Implement more 'named' date/time formats, e.g. ISO, UnixTimestamp, RFC3339, etc.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|KLocale|Add Full date format in addition to existing short and long.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|KLocale|Add default colour to optionally display negative numbers.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|KLocale|Implement separate backends for each supported platform/desktop to use platform localisation in place of KDE locale.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|KLocale|Implement support for additional Country Code standards: ISO Alpha 3, ISO Numeric 3, FIPS-10.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|KLocale|Implement support for Country Code sub-regions, i.e. States/Provinces/etc. Needed for new KHolidays.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|kdeui|Improvements to KDatePicker/KDateTable for feature parity with Plasma Calendar widget, i.e. holiday support, select calendar system, etc.|john@layt.net|John Layt}} &lt;br /&gt;
{{FeatureTodo|kdeui|DBus interface in StatusNotifierItem to connect it with freedesktop notifications instances|notmart@gmail.com|Marco Martin}}&lt;br /&gt;
{{FeatureTodo|Khtml|Improvements in kwallet integration|edulix@gmail.com|Eduardo Robles Elvira}}&lt;br /&gt;
{{FeatureTodo|Khtml|Basic audio/video tag support|germain@ebooksfrance.org|Michael Howell and Germain Garand}} &lt;br /&gt;
{{FeatureTodo|Khtml|Implement more of DOM3's CSSOM View module|germain@ebooksfrance.org|Germain Garand}}&lt;br /&gt;
{{FeatureDone|KNewStuff|Improved Download Dialog, multiple previews, better integration of details, changelog is displayed|gladhornKDEorg|Frederik Gladhorn}}&lt;br /&gt;
{{FeatureInProgress|KNewStuff|Icon view mode|gladhornKDEorg|Reza Shah, Frederik Gladhorn}}&lt;br /&gt;
{{FeatureDone|KNewStuff|Upload dialog rewritten: It now supports updating of old uploads, previews, most data that can be entered on the website and allows direct login to the account|gladhornKDEorg|Frederik Gladhorn}}&lt;br /&gt;
{{FeatureTodo|kdeui|Social About Dialog|teo@kde.org|Téo Mrnjavac}}&lt;br /&gt;
{{FeatureTodo|kdeui|Generic find bar widget|sasch.pe@gmx.de|Sascha Peilicke}}&lt;br /&gt;
{{FeatureTodo|kio|SSL client certificate support|ahartmetz@gmail.com|Andreas Hartmetz}}&lt;br /&gt;
{{FeatureTodo|kio|SSL root certificate list GUI + backend|ahartmetz@gmail.com|Andreas Hartmetz}}&lt;br /&gt;
{{FeatureDone|kio|Add &amp;quot;apply to all&amp;quot; checkbox in renamedialog and allow for automatic renaming|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureInProgress|kio|Port renamedialog to KFileMetaDataWidget|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureInProgress|kio|Don't select extension in renamedialog|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureDone|kio|Better listing of applications in file &amp;quot;open with&amp;quot; context menu|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureInProgress|kio|Context menu entry to open all files in their default applications|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureDone|kfile|Scroll wheel support for breadcrumb bar|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureInProgress|kfile|Show all sub-folders in breadcrumb bar|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureInProgress|kfile|Middle-click on subfolder in the breadcrumb bar to open in a new tab|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureTodo|kfile|Easier access to protocols in breadcrumb bar|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureTodo|kfile|Show sub-sub-folders (and so on) in breadcrumb bar|toddrme2178@gmail.com|Todd}}&lt;br /&gt;
{{FeatureInProgress|kdecore|Generic shared-memory cache|mpyne@kde.org|Michael Pyne}}&lt;br /&gt;
{{FeatureInProgress|kdeui|Redesigned icon cache|mpyne@kde.org|Michael Pyne}}&lt;br /&gt;
{{FeatureTodo|kdeui|Support alpha channel in KColor classes|christoph@maxiom.de|Christoph Feck}}&lt;br /&gt;
{{FeatureDone|nepomuk|Redesigned Nepomuk::TagWidget which can now actually be used by applications|trueg@kde.org|Sebastian Trueg}}&lt;br /&gt;
{{FeatureInProgress|kio|Remember downloads via Nepomuk|trueg@kde.org|Sebastian Trueg}}&lt;br /&gt;
{{FeatureDone|solid|Broadcast mount/unmount messages across processes|wilderkde@gmail.com|Jacopo De Simoi}}&lt;br /&gt;
{{FeatureTodo|solid|Add parent matching to predicate parsing|wilderkde@gmail.com|Jacopo De Simoi}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdemultimedia  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|JuK|Remove Qt/KDE3 support lib requirements -- will move to KDE 4.5 feature plan|mpyne@kde.org|Michael Pyne}}&lt;br /&gt;
{{FeatureTodo|JuK|Allow setting covers directly from URLs supported by KIO - drag/drop already allows this however -- will move to KDE 4.5 feature plan|mpyne.org|Michael Pyne}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdenetwork  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|Kopete|UPnp Support|mattr@kde.org|Matt Rogers}} &lt;br /&gt;
{{FeatureTodo|Kopete|Jabber Jingle video support|detlev.casanova@gmail.com|Detlev Casanova}} &lt;br /&gt;
{{FeatureTodo|Kopete|Jabber Jingle ICE support|detlev.casanova@gmail.com|Detlev Casanova}} &lt;br /&gt;
{{FeatureTodo|Kopete|Add support for urls to Bonjour plugin|kossebau@kde.org|Friedrich W. H. Kossebau}} &lt;br /&gt;
{{FeatureTodo|Kopete|Rich text support for ICQ|kedgedev@gmail.com|Roman Jarosz}} &lt;br /&gt;
{{FeatureDone|Kopete|Extended video controls|fschaefer.oss(at)googlemail.com|Frank Schaefer}} &lt;br /&gt;
{{FeatureTodo|Krdc|Connection status screen and reconnect|murraytony@gmail.com|Tony Murray}}&lt;br /&gt;
{{FeatureDone|Krdc|Much improved new connection screen: more info, sortable, interactive, and better use of space|murraytony@gmail.com|Tony Murray}}&lt;br /&gt;
{{FeatureInProgress|KGet|Use plasma notifications to show the progress|mat69@gmx.net|Matthias Fuchs}}&lt;br /&gt;
{{FeatureDone|KGet|Refaktor Torrent-Plugin to base on the newly created libktorrent from extragear|l.appelhans@gmx.de|Lukas Appelhans}}&lt;br /&gt;
{{FeatureInProgress|KGet|Better error handling|l.appelhans@gmx.de|Lukas Appelhans}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeplasma-addons  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|knowledgebase|port knowledgebase plasmoid to new engine|ewoerner@kde.org|Eckhart Wörner}} &lt;br /&gt;
{{FeatureTodo|knowledgebase|Add categories|ewoerner@kde.org|Eckhart Wörner}} &lt;br /&gt;
{{FeatureDone|Bookmarks widget|New|kossebau@kde.org|Friedrich W. H. Kossebau}} &lt;br /&gt;
{{FeatureDone|Mandelbrot Wallpaper|Performance improvements|jacob.benoit.1@gmail.com|Benoit Jacob}} &lt;br /&gt;
{{FeatureDone|Mandelbrot Wallpaper|Rendering improvements (through dithering, extra iterations, and better/simpler formulas)|jacob.benoit.1@gmail.com|Benoit Jacob}}&lt;br /&gt;
{{FeatureDone|Mandelbrot Wallpaper|Allow to import/export parameters and to export to PNG images|jacob.benoit.1@gmail.com|Benoit Jacob}}&lt;br /&gt;
{{FeatureDone|Comic Applet|Add option to show &amp;quot;text&amp;quot;, &amp;quot;icons&amp;quot; or both &amp;quot;text and icons&amp;quot; for tabs|mat69@gmx.net|Matthias Fuchs}}&lt;br /&gt;
{{FeatureDone|Comic Applet|Prefetch next and previous comic strip (thx to Miha Cancula)|mat69@gmx.net|Matthias Fuchs}}&lt;br /&gt;
{{FeatureDone|Character Runner|New|akreuzkamp@web.de|Anton Kreuzkamp}}&lt;br /&gt;
{{FeatureInProgress|KDE Observatory|Performance improvements, new data engine|sandroandrade@kde.org|Sandro Andrade}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdesdk  =&lt;br /&gt;
&lt;br /&gt;
{| cellspa/cing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|Lokalize|Integrate snowball stemmer for glossary|shafff@NOSPAMukr.net|Nick Shaforostoff}} &lt;br /&gt;
{{FeatureTodo|Lokalize|Continue implementing XLIFF spec|shafff@NOSPAMukr.net|Nick Shaforostoff}} &lt;br /&gt;
{{FeatureTodo|Lokalize|Segmentation [editing] functionality|shafff@NOSPAMukr.net |Nick Shaforostoff}} &lt;br /&gt;
{{FeatureTodo|Lokalize|Remote translation memories|shafff@NOSPAMukr.net|Nick Shaforostoff}} &lt;br /&gt;
{{FeatureTodo|Lokalize|Integrate with nepomuk (fast stats retrieval, tag cloud - incl sharing!)|shafff@NOSPAMukr.net|Nick Shaforostoff}} &lt;br /&gt;
{{FeatureInProgress|Kate|Replace old snippet plugin through TNG plugin and enhance the usability of the new plugin|jowenn(you_know)kde(here_too)org|Joseph Wenninger}}&lt;br /&gt;
{{FeatureInProgress|Kate|Port the old XML completion plugin (xmltools)|tomastrnka@gmx.com|Tomáš Trnka}} &lt;br /&gt;
{{FeatureInProgress|Umbrello|Add a code importing wizzard|andi.fischer@NOSPAMhispeed.ch|Andi Fischer}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= kdeutils  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact &lt;br /&gt;
{{FeatureTodo|Ark|Add an options dialog (maybe)|haraldhv@stud.ntnu.no|Harald Hvaal}}&lt;br /&gt;
{{FeatureTodo|Ark|Simplify Kerfuffle's API (jobs, interfaces etc) and try to make it stable|kubito@gmail.com|Raphael Kubo da Costa}}&lt;br /&gt;
{{FeatureTodo|Ark|Support for custom options from the compression interface (eg. a slider for selecting compression level for rar files)|haraldhv@stud.ntnu.no|Harald Hvaal}}&lt;br /&gt;
{{FeatureTodo|Ark|Add feedback for the latest operation in the status bar|kubito@gmail.com|Raphael Kubo da Costa}}&lt;br /&gt;
{{FeatureTodo|Ark|Try multiple plugins for each archive type before failing|kubito@gmail.com|Raphael Kubo da Costa}}&lt;br /&gt;
{{FeatureTodo|Ark|Make the internal previewer optional|kubito@gmail.com|Raphael Kubo da Costa}}&lt;br /&gt;
{{FeatureTodo|Ark|Add a &amp;quot;Preview with...&amp;quot; context menu item|kubito@gmail.com|Raphael Kubo da Costa}}&lt;br /&gt;
{{FeatureTodo|Ark|Make Kerfuffle really thread-safe (and use threads in less places)|kubito@gmail.com|Raphael Kubo da Costa}}&lt;br /&gt;
{{FeatureTodo|Ark|Get rid of the Observer code in Kerfuffle|kubito@gmail.com|Raphael Kubo da Costa}}&lt;br /&gt;
{{FeatureTodo|Ark|Make error reporting work as expected in Kerfuffle|kubito@gmail.com|Raphael Kubo da Costa}}&lt;br /&gt;
{{FeatureTodo|KGpg|Make keyserver actions possible to use on multiple keyservers at once|kde@opensource.sf-tec.de|Rolf Eike Beer}}&lt;br /&gt;
{{FeatureTodo|Okteta|add Kate-like search tool|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for import by drop, both url and data|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|copy again puts also a value or char variant of the data to clipboard|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for memory mapping of files and 64-bit addressing|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for jobs like io, printing, string search or filter|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add Okular like embedded notifications|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Store bookmarks and other view settings for next load|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add global toggle option for the offset display, hex or decimal|kossebau@kde.org|Friedrich W. H. Kossebau}} &lt;br /&gt;
{{FeatureTodo|Okteta|Add Kate-like combined dialogs to query for actions on files|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Improve the titels of the changes to the bytearray to be more descriptive, best using ids to avoid text string|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Merge row and column widgets into one|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add a general KPart adapter to Kasten, than finish port of Okteta KPart to Okteta Kasten|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Make all user interaction in the KastenCore managers plugin-based|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Store bookmarks|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add view profiles, incl. editor/manager|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|Add KNewStuff support to the structures tool|alex.richardson@gmx.de|Alex Richardson}} &lt;br /&gt;
{{FeatureTodo|printer-applet|Restore feature parity with KDEPrint3 where possible.||Jonathon Riddell, John Layt}} &lt;br /&gt;
{{FeatureDone|kdelirc/kremotecontrol|Transition from KDELirc to KRemoteControl|michael_zanetti@gmx.net|Michael Zanetti}} &lt;br /&gt;
{{FeatureInProgress|KGpg|Add &amp;amp;quot;caff&amp;amp;quot; mode for keysigning|kde@opensource.sf-tec.de|Rolf Eike Beer}}&lt;br /&gt;
{{FeatureInProgress|Okteta|Allow writing structure definitions in JavaScript|alex.richardson@gmx.de|Alex Richardson}} &lt;br /&gt;
{{FeatureInProgress|Okteta|Add possibility to set count of bytes per line/group|kossebau@kde.org|Friedrich W. H. Kossebau}} &lt;br /&gt;
{{FeatureDone|Okteta|new export formats: S-Record, Intel Hex, Base32, Ascii85, Uuencoding, Xxencoding|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureDone|Okteta|add QIODevice for AbstractByteArrayModel and make mimetype detection use this instead of only filename |kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureDone|Okteta|Refactor mouse input to controllers for the bytearray widget|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Other  =&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;&amp;quot;&lt;br /&gt;
! Status &lt;br /&gt;
! Project &lt;br /&gt;
! Description &lt;br /&gt;
! Contact&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Plasma/Tokamak4</id>
		<title>Projects/Plasma/Tokamak4</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Plasma/Tokamak4"/>
				<updated>2010-02-18T18:07:25Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: added silk presentation, network management breakout&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Tokamak 4 Oxygen 3 2010==&lt;br /&gt;
&lt;br /&gt;
The fourth Tokamak Plasma Meeting and the third Oxygen Gathering will take place in Nuremberg, Germany on February 19th to 26th.&lt;br /&gt;
&lt;br /&gt;
===Location===&lt;br /&gt;
&lt;br /&gt;
We will be hosted by Novell in the openSUSE offices in Nuremberg.  The community space includes a large meeting room with AV infrastructure, a cafe-style area and a hacking bar.  And of course you benefit from being only metres away from the KDE SVN server.&lt;br /&gt;
&lt;br /&gt;
SUSE Linux Products GmbH&amp;lt;br/&amp;gt;&lt;br /&gt;
Maxfeldstr. 5&amp;lt;br/&amp;gt;&lt;br /&gt;
90409 Nuernberg&amp;lt;br/&amp;gt;&lt;br /&gt;
Germany&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The tram stop is where it says 'Pirckheimer Straße':&lt;br /&gt;
&lt;br /&gt;
http://barcampnuernberg.pbworks.com/f/1163943919/karte_nuremberg_detail.jpg&lt;br /&gt;
&lt;br /&gt;
===Accomodation===&lt;br /&gt;
&lt;br /&gt;
Accommodation has been organised in the Berufsförderungswerk Nuernberg (Nuremberg Professional Training College) and the youth hostel in the historic Imperial Stables in Nuremberg's castle!  Echoes of Nove Hrady...&lt;br /&gt;
&lt;br /&gt;
====Accommodation Friday + Saturday====&lt;br /&gt;
(change to #2/depart on Sunday)&lt;br /&gt;
&lt;br /&gt;
Kossebau Friedrich&amp;lt;br/&amp;gt;&lt;br /&gt;
Gladhorn Fredrik&amp;lt;br/&amp;gt;&lt;br /&gt;
Appelhans Lukas&amp;lt;br/&amp;gt;&lt;br /&gt;
Gräßlin Martin&amp;lt;br/&amp;gt;&lt;br /&gt;
Kügler Sebastian&amp;lt;br/&amp;gt;&lt;br /&gt;
Cavalcanti Adenilson&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
are staying in &lt;br /&gt;
 	&lt;br /&gt;
Hotel Astoria&amp;lt;br/&amp;gt;&lt;br /&gt;
Weidenkellerstraße 4&amp;lt;br/&amp;gt;&lt;br /&gt;
D - 90443 Nürnberg&amp;lt;br/&amp;gt;&lt;br /&gt;
Tel.  +49  (0) 911 - 208505&amp;lt;br/&amp;gt;&lt;br /&gt;
Fax  +49  (0) 911 - 243670&amp;lt;br/&amp;gt;&lt;br /&gt;
Email: info@hotel-astoria-nuernberg.de&amp;lt;br/&amp;gt;&lt;br /&gt;
http://www.hotel-astoria-nuernberg.de&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Everyone else is in &lt;br /&gt;
&lt;br /&gt;
Berufsförderungswerk Nürnberg &lt;br /&gt;
gemeinnützige GmbH&amp;lt;br/&amp;gt;&lt;br /&gt;
Schleswiger Str. 101&amp;lt;br/&amp;gt;&lt;br /&gt;
90427 Nürnberg&amp;lt;br/&amp;gt;&lt;br /&gt;
phone +49 911 938-6&amp;lt;br/&amp;gt;&lt;br /&gt;
http://www.bfw-nuernberg.de&lt;br /&gt;
&lt;br /&gt;
You can check in at any time, and there is free wifi in the reception area and most rooms.&lt;br /&gt;
&lt;br /&gt;
====Accommodation Sunday to Friday====&lt;br /&gt;
Jugendherberge Nürnberg &amp;lt;br/&amp;gt;&lt;br /&gt;
Burg 2 &amp;lt;br/&amp;gt;&lt;br /&gt;
90403 Nürnberg &amp;lt;br/&amp;gt;&lt;br /&gt;
phone  +49 911 230936-12 &amp;lt;br/&amp;gt;&lt;br /&gt;
http://www.jugendherberge.de/jh/bayern/nuernberg/&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Map===&lt;br /&gt;
[http://maps.google.com/maps/ms?ie=UTF&amp;amp;msa=0&amp;amp;msid=101167196505765855700.00047e0f3db239908f72f Tokamak 4 Location Map] shows where things are.  Note that the accommodation for the first 2 nights (Friday and Saturday) is not the same as for the rest of the week.&lt;br /&gt;
&lt;br /&gt;
===Travelling===&lt;br /&gt;
&lt;br /&gt;
Nuremberg is easily reachable by air or by train.  The nearest airports for intercontinental flights are Frankfurt and Munich, and Nuremberg is served from other European hubs such as Paris Charles De Gaulle and Amsterdam.  Nuremberg is only a few hours by train from most of the rest of central Europe.&lt;br /&gt;
&lt;br /&gt;
You can reach the SUSE office in 6 minutes by tram from the rail station by taking the number 8 tram towards 'Thon' from the tram interchange in front of the railway station, follow the square 'Tram' signs.  Alight at 'Maxfeldstr' as shown on the signs inside the tram and go to the SUSE office at Maxfeldstr. 5.  &lt;br /&gt;
&lt;br /&gt;
From the airport, a taxi will cost 10-14 EUR and takes about 10 minutes.  Alternatively, take the U2 metro from outside Arrivals (any train), alight at 'Rennweg', leave the station by the south exit (in the direction of travel, go to the tram stop in the middle of the road on your right as you exit the metro, and get the number 8 tram towards 'Thon' as above.&lt;br /&gt;
&lt;br /&gt;
===Public Transport===&lt;br /&gt;
Nuernberg has a pretty good general public transport information site that covers bus, tram, local trains and underground/metro with some info in English: [http://vgn.de Nuernberg public transport information].  A single journey costs 2EUR, a 10er strip costs 9.20EUR.  Buy tickets from multilingual touchscreen vending machines before you get on the bus/tram/underground, and single tickets are already validates.  A 10er strip needs stamping, 2 units per single journey for an adult.&lt;br /&gt;
&lt;br /&gt;
====Airport -&amp;gt; BFW====&lt;br /&gt;
You probably don't want to do this if you are tired after a long flight.  Although it is short and easy you have to find the right stop for the 26 at the interchange at Thon.  A taxi cab will be under 10EUR.  About every half an hour until midnight:&lt;br /&gt;
&lt;br /&gt;
Get the 32 bus towards Thon, get off at Thon (last stop).  Then get the 26 bus towards Berufsförderungswerk (last stop).  This drops you at the entrance to the BFW, take the side entrance to the Gaestehaus.&lt;br /&gt;
&lt;br /&gt;
====BFW -&amp;gt; Airport====&lt;br /&gt;
Get the 26 bus towards Thon, get off at Thon (last stop).  Then get the 32 bus towards Flughafen (the airport, the last stop).&lt;br /&gt;
&lt;br /&gt;
====BFW -&amp;gt; SUSE====&lt;br /&gt;
Get the 26 bus towards Thon, get off at Thon (last stop).  Then get the 9 tram towards Doku-Zentrum.   Get off at Maxfeldstr.  The SUSE building is the large blue building on the right.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====BFW -&amp;gt; Rail station====&lt;br /&gt;
Get the 26 bus towards Thon, get off at Thon (last stop).  Then get the 9 tram towards Doku-Zentrum.   Get off at Maxfeldstr.  The SUSE building is the large blue building on the right.&lt;br /&gt;
&lt;br /&gt;
====SUSE (or Rail station) -&amp;gt; BFW====&lt;br /&gt;
Get the 9 Tram towards Thon, get off at Thon (last stop).  Then get the 26 bus towards Berufsförderungswerk (last stop).  This drops you at the entrance to the BFW, take the side entrance to the Gaestehaus.&lt;br /&gt;
&lt;br /&gt;
====Airport -&amp;gt; Hotel Astoria====&lt;br /&gt;
Get the U2 Underground (only one direction, Röthenbach).  Get off at Opernhaus.  Walk to Weidenkellerstr. 4 (see map above and hotel website).&lt;br /&gt;
&lt;br /&gt;
====Hotel Astoria -&amp;gt; Airport====&lt;br /&gt;
Walk to Opernhaus underground, get the U2 Underground toward Flughafen (every 2nd train goes to the airport and have an aeroplane symbol on the destination board).&lt;br /&gt;
&lt;br /&gt;
====Astoria -&amp;gt; SUSE====&lt;br /&gt;
Either print out the map and address, and walk through the city center (about 10 minutes), or get the U2 toward Flughafen or Ziegelstein, get off at Hauptbahnhof, follow the signs towards Tram at street level, get the 9 Tram towards Thon, get off at Maxfeldstr.   The SUSE building is the large blue building on the right. (every 7 or 15 minutes until midnight, about 20 minutes)&lt;br /&gt;
&lt;br /&gt;
====SUSE -&amp;gt; Astoria====&lt;br /&gt;
Get the 9 Tram towards Doku-Zentrum, change at Hauptbahnhof, get the U2 towards Röthenbach, get off at Opernhaus.&lt;br /&gt;
&lt;br /&gt;
===By Car===&lt;br /&gt;
You have a navi, right?  Or see the [http://www.novell.com/de-de/company/contact/gs-nuernberg/index.html Novell directions].  Address above, you can park in the basement garage, we'll get you a guest pass if you come to the office within opening hours, otherwise let Will know in advance.&lt;br /&gt;
&lt;br /&gt;
==Participants==&lt;br /&gt;
=== Participants ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Email&lt;br /&gt;
!Arrival&lt;br /&gt;
!Depart&lt;br /&gt;
!Cost&lt;br /&gt;
!Sponsor?&lt;br /&gt;
!Hotel?&lt;br /&gt;
!Food&lt;br /&gt;
!Work&lt;br /&gt;
!Airport&lt;br /&gt;
!Flights&lt;br /&gt;
|-&lt;br /&gt;
|Aaron&amp;amp;nbsp;Seigo&lt;br /&gt;
|aseigo@kde.org&lt;br /&gt;
|TBD&lt;br /&gt;
|TBD&lt;br /&gt;
|~$1300?&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|vegetarian&lt;br /&gt;
|Overall facilitation&lt;br /&gt;
|In LH 924 14:15 / Out LH 921 07:00&lt;br /&gt;
|-&lt;br /&gt;
|Marco Martin&lt;br /&gt;
|notmart@gmail.com&lt;br /&gt;
|19&lt;br /&gt;
|26&lt;br /&gt;
|93€&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|whatever coding and else, Plasma mobile&lt;br /&gt;
|Nuremberg (NUE)&lt;br /&gt;
|In ABB8403 19:20 / Out ABB8403 08:35&lt;br /&gt;
|-&lt;br /&gt;
|Ivan Čukić&lt;br /&gt;
|ivan.cukic@kde.org&lt;br /&gt;
|19.2&lt;br /&gt;
|26.2&lt;br /&gt;
|approx €250&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|nepomuk activities merging, libfavorite...&lt;br /&gt;
|Nuremberg (NUE)&lt;br /&gt;
|In LH3405, LH938 12:05 / Out LH943, LH3402 12:45&lt;br /&gt;
|-&lt;br /&gt;
|Artur de Souza&lt;br /&gt;
|asouza@kde.org&lt;br /&gt;
|20&lt;br /&gt;
|26&lt;br /&gt;
|~1000 euros&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|coding, mobile, bug fixing, etc...&lt;br /&gt;
|-&lt;br /&gt;
|Nuno Pinheiro&lt;br /&gt;
|nuno@oxygen-icons.org&lt;br /&gt;
|19&lt;br /&gt;
|24&lt;br /&gt;
|aprox 250€&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|whatever artwork, mobile, planing, etc....&lt;br /&gt;
|-&lt;br /&gt;
|Chani&lt;br /&gt;
|chani@kde.org&lt;br /&gt;
|19 (20:16)&lt;br /&gt;
|26 (11:25)&lt;br /&gt;
|~$1300&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|vegetarian&lt;br /&gt;
|activity management / js / random bugs&lt;br /&gt;
|In: train. Out: NUE&lt;br /&gt;
|Out: Delta 9500&lt;br /&gt;
|-&lt;br /&gt;
|Martin Gräßlin&lt;br /&gt;
|kde@martin-graesslin.com&lt;br /&gt;
|19.&lt;br /&gt;
|21.&lt;br /&gt;
|0&lt;br /&gt;
|no&lt;br /&gt;
|yes&lt;br /&gt;
|&lt;br /&gt;
|KWin on embedded devices&lt;br /&gt;
|-&lt;br /&gt;
|Lukas Appelhans&lt;br /&gt;
|l.appelhans@gmx.de&lt;br /&gt;
|19. - 18:24&lt;br /&gt;
|21. - 17:33&lt;br /&gt;
|~150€&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|Quicklaunch-Applet, KGet-Applets, Shaman/Aqpm-Applets, Raptor?&lt;br /&gt;
|-&lt;br /&gt;
|Frank Karlitschek&lt;br /&gt;
|karlitschek@kde.org&lt;br /&gt;
|19&lt;br /&gt;
|26&lt;br /&gt;
|50EUR&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|Social Desktop&lt;br /&gt;
|-&lt;br /&gt;
|Dario Freddi&lt;br /&gt;
|drf@kde.org&lt;br /&gt;
|19&lt;br /&gt;
|22&lt;br /&gt;
|~150€&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|stuff that nobody wants to do, as usual&lt;br /&gt;
|Nuremberg (NUE)&lt;br /&gt;
|In ABB8403 19:20 / Out ABB8404 16:55&lt;br /&gt;
|-&lt;br /&gt;
|Riccardo Iaconelli&lt;br /&gt;
|riccardo@kde.org&lt;br /&gt;
|19&lt;br /&gt;
|21&lt;br /&gt;
|TBD, I suppose ~150-200€&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|plasmoids, art, ideas, fun :-)&lt;br /&gt;
|-&lt;br /&gt;
|Sebastian Kügler&lt;br /&gt;
|sebas@kde.org&lt;br /&gt;
|19th&lt;br /&gt;
|26th&lt;br /&gt;
|~100€&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|Power- and networkmanagement, web integration, PIM stuff&lt;br /&gt;
|-&lt;br /&gt;
|Davide Bettio&lt;br /&gt;
|davide.bettio@kdemail.net&lt;br /&gt;
|TBD, probably 19th&lt;br /&gt;
|TBD, I don't know&lt;br /&gt;
|TBD, I suppose ~150-200€&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|TBD&lt;br /&gt;
|-&lt;br /&gt;
|Will Stephenson&lt;br /&gt;
|wstephenson@kde.org&lt;br /&gt;
|Local&lt;br /&gt;
|Local&lt;br /&gt;
|0&lt;br /&gt;
|no&lt;br /&gt;
|no&lt;br /&gt;
|whatever&lt;br /&gt;
|Keeping everyone else happy, networkmanagement&lt;br /&gt;
|N/A&lt;br /&gt;
|I can see the venue from my kitchen&lt;br /&gt;
|-&lt;br /&gt;
|Eugene Trounev&lt;br /&gt;
|eugene.trouenv@gmail.com&lt;br /&gt;
|19-11:15&lt;br /&gt;
|26-11:50&lt;br /&gt;
|$1,126.97 CAD&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|no meat. fish, eggs, and milk are OK&lt;br /&gt;
|various artowrk (like wallpapers), designs and more&lt;br /&gt;
|Nuremberg(NUE)&lt;br /&gt;
|In AC9268/Out AC9195&lt;br /&gt;
|-&lt;br /&gt;
|Igor Trindade Oliveira&lt;br /&gt;
|igor_trindade@yahoo.com.br&lt;br /&gt;
|18&lt;br /&gt;
|26&lt;br /&gt;
|900 euros&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|coding, animations, netbook etc...&lt;br /&gt;
|Frankfurt&lt;br /&gt;
|In JJ8070, arrival 14hs&lt;br /&gt;
|-&lt;br /&gt;
|Frederik Gladhorn&lt;br /&gt;
|gladhorn@kde.org&lt;br /&gt;
|19.2.&lt;br /&gt;
|26.2.&lt;br /&gt;
|~50 euros&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|opendesktop integration&lt;br /&gt;
|-&lt;br /&gt;
|Martin Zilz&lt;br /&gt;
|oore.mofux@gmx.de&lt;br /&gt;
|TBD (20.?)&lt;br /&gt;
|TBD (24.?)&lt;br /&gt;
|~150 euros&lt;br /&gt;
|no&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|arts, ux, freaky out of the box stuff&lt;br /&gt;
|-&lt;br /&gt;
|Luboš Luňák&lt;br /&gt;
|l.lunak@suse.cz&lt;br /&gt;
|19&lt;br /&gt;
|23&lt;br /&gt;
|~100 euros&lt;br /&gt;
|no&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|KWin&lt;br /&gt;
|-&lt;br /&gt;
|Alexis Menard&lt;br /&gt;
|menard@kde.org&lt;br /&gt;
|19&lt;br /&gt;
|26&lt;br /&gt;
|Approved by Nokia -&amp;gt; 0&lt;br /&gt;
|no&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|Plasma-Mobile and Qt&lt;br /&gt;
|Nuremberg(NUE)&lt;br /&gt;
|-&lt;br /&gt;
|Friedrich Kossebau&lt;br /&gt;
|kossebau@kde.org&lt;br /&gt;
|19. - 16:28 (train)&lt;br /&gt;
|26. - 16:33 (train)&lt;br /&gt;
|max. 100 EUR&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|Plasmoids (one of): Timeline, Khalkhi (Porting to KDE4), Network devices&lt;br /&gt;
|-&lt;br /&gt;
|Adenilson Cavalcanti&lt;br /&gt;
|cavalcantii@gmail.com&lt;br /&gt;
|18&lt;br /&gt;
|26&lt;br /&gt;
|900 euros&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|carnivorous&lt;br /&gt;
|coding, animations, etc&lt;br /&gt;
|Frankfurt&lt;br /&gt;
|In JJ8070, arrival 14hs&lt;br /&gt;
|-&lt;br /&gt;
|Richard Moore&lt;br /&gt;
|rich@kde.org&lt;br /&gt;
|19&lt;br /&gt;
|24&lt;br /&gt;
|I'll pay for flight&lt;br /&gt;
| accommodation only&lt;br /&gt;
|yes&lt;br /&gt;
|yes please&lt;br /&gt;
|silky stuff, api review etc.&lt;br /&gt;
| NUE&lt;br /&gt;
| In LH4869, LH 0938. Out LH0939, LH4864&lt;br /&gt;
|-&lt;br /&gt;
|Sandro Andrade&lt;br /&gt;
|sandroandrade@kde.org&lt;br /&gt;
|20th 1825 &lt;br /&gt;
|27th 0955&lt;br /&gt;
|~1000 euros&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|preferably vegetarian&lt;br /&gt;
|plasmoids, data engines, and plasmate interest&lt;br /&gt;
|Nuremberg (NUE)&lt;br /&gt;
|In TP7784 / Out TP7795&lt;br /&gt;
|-&lt;br /&gt;
|Kevin Ottens&lt;br /&gt;
|ervin@kde.org&lt;br /&gt;
|19&lt;br /&gt;
|26&lt;br /&gt;
|~200 euros&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|no seafood&lt;br /&gt;
|mobile, api review, solid if times permit&lt;br /&gt;
|Nuremberg (NUE)&lt;br /&gt;
|In LH946 22:10 / Out LH929 14:45&lt;br /&gt;
|-&lt;br /&gt;
|Harald Fernengel&lt;br /&gt;
|harry@kdevelop.org&lt;br /&gt;
|20&lt;br /&gt;
|20&lt;br /&gt;
|0 euros&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|&lt;br /&gt;
|Qt on Maemo Q&amp;amp;A&lt;br /&gt;
|Train&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Special Needs==&lt;br /&gt;
* Laptop/desktop for hacking with KDE trunk on it for: Lukas Appelhans&lt;br /&gt;
* Helpful for hacking on the 3 Intel devices (not vital, but would preed thing up especially the ethernet adaptor):&lt;br /&gt;
** usb hub (preferably powered)&lt;br /&gt;
** usb-to-ethernet adaptor (unreliable drivers for the internal wifi)&lt;br /&gt;
** extra storage/file transfer can be done with the ethernet adaptor of with microsd/thumbdrives&lt;br /&gt;
** usb keyboards and mice would ease things a bit too since it supports them&lt;br /&gt;
* For presentations a video camera would be nice, preferably with a remote microphone. (available in openSuse offices?). (It would be wonderful for those of us that cannot attend, so don't please don't forget us ;-) -sreich).&lt;br /&gt;
&lt;br /&gt;
==Topics==&lt;br /&gt;
&lt;br /&gt;
We will be focusing on the KDE SC 4.5 release of Plasma, with a particular attention on feature completion, polishing and quality improvements across the code base. Activities and Plasma Mobile will also be topics of interest.&lt;br /&gt;
&lt;br /&gt;
Oxygen, finishing it up for 4.5 plans for the future.&lt;br /&gt;
&lt;br /&gt;
===Opening Day Presentations===&lt;br /&gt;
* Plasma mobile: State of art (Alexis)&lt;br /&gt;
* Plasma netbook: State and road ahead - most important work still to be done (Marco Martin)&lt;br /&gt;
&lt;br /&gt;
* Context: [Details later] (Chani and Ivan)&lt;br /&gt;
* Shaman - Bringing software management into the workspace and into 2010 [if time permits] (Dario and Lukas)&lt;br /&gt;
* Oxygen what it was, what it will be?&lt;br /&gt;
* Silk - Freeing the Web from the Browser&lt;br /&gt;
&lt;br /&gt;
===Development Topics===&lt;br /&gt;
* ZUI replacement in plasma-desktop&lt;br /&gt;
* Plasma Mobile&lt;br /&gt;
* Plasma Netbook&lt;br /&gt;
* Plasma Media Center&lt;br /&gt;
* Plasmate&lt;br /&gt;
* Applet handles as plugins?&lt;br /&gt;
* Moving the toolboxes out of libplasma&lt;br /&gt;
* Plasma::Storage (data, passwords, ..?)&lt;br /&gt;
* Dataengines caching&lt;br /&gt;
* Plasma wallpaper scripting&lt;br /&gt;
* Focus and drag&amp;amp;drop issues&lt;br /&gt;
* Store/load containment layouts&lt;br /&gt;
* RTL&lt;br /&gt;
* use of configChanged() in widgets&lt;br /&gt;
* reusable widgets for groups of iconized items (like the entries in the taskbar)&lt;br /&gt;
* guidelines (with code support) for consistent looking rows of different widgets (e.g. like with bars on the top of the screen, as known from mobiles' UI or the Mac UI)&lt;br /&gt;
* Plasma OSD service&lt;br /&gt;
* GSoC&lt;br /&gt;
* http://techbase.kde.org/Projects/Plasma/Plasmoid-Issues&lt;br /&gt;
* application dashboards using View/Corona/Newspaper&lt;br /&gt;
* window types, focus styles&lt;br /&gt;
* screen edge management&lt;br /&gt;
* Containment, Wallpaper, Mouse Action scripting?&lt;br /&gt;
* welcome plasmoid, finally?&lt;br /&gt;
* website authentication&lt;br /&gt;
* continuing on with dejargonizing (inc kwin, with the use of &amp;quot;compositing&amp;quot; instead of &amp;quot;Desktop Efects&amp;quot;, e.g.)&lt;br /&gt;
* javascript test coverage&lt;br /&gt;
&lt;br /&gt;
=== Breakout Groups ===&lt;br /&gt;
Starting on day two we will split up into small groups to focus on specific topics and challenges. The breakout group tracks will start with short presentations designed to share important information about the topic of interest to get everybody up to speed. A schedule for each of the presentations will be posted closer to the start of Tokamak 4.&lt;br /&gt;
&lt;br /&gt;
Some people will stay with a specific track for the duration of Tokamak 4, but everyone is welcome to drift between the different breakout groups to bring their needs and ideas to bear.&lt;br /&gt;
&lt;br /&gt;
==== Plasma Mobile ====&lt;br /&gt;
;Topic&lt;br /&gt;
:Plasma shells on devices with small screens and designed for mobility. The focus use case will be touch screen driven smartphones.&lt;br /&gt;
&lt;br /&gt;
;Duration&lt;br /&gt;
:All week&lt;br /&gt;
&lt;br /&gt;
;Facilitator&lt;br /&gt;
:Marco/Kevin&lt;br /&gt;
&lt;br /&gt;
;Presentations&lt;br /&gt;
:Moblin SDK, Marco, Day 2&lt;br /&gt;
:Maemo SDK, Alexis, Day 2&lt;br /&gt;
&lt;br /&gt;
;Participants&lt;br /&gt;
:Marco&lt;br /&gt;
:Alexis&lt;br /&gt;
:Aaron&lt;br /&gt;
:Nuno Pinheiro&lt;br /&gt;
:Kevin&lt;br /&gt;
:Artur&lt;br /&gt;
:Aaron Seigo&lt;br /&gt;
:Eugene Trounev [it-s]&lt;br /&gt;
:Chani&lt;br /&gt;
:Sandro&lt;br /&gt;
:Dario&lt;br /&gt;
&lt;br /&gt;
==== Context and Activities ====&lt;br /&gt;
;Topic&lt;br /&gt;
:The behind-the-scenes orchestration of environment-wide Context as well as the UI presentation of them (and/or their activities?) to the user&lt;br /&gt;
&lt;br /&gt;
;Duration&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
;Facilitator&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
;Presentations&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
;Participants&lt;br /&gt;
:Ivan Čukić&lt;br /&gt;
: Chani&lt;br /&gt;
: Marco (as much as the mobile one permits)&lt;br /&gt;
:Aaron Seigo&lt;br /&gt;
&lt;br /&gt;
==== Oxygen ====&lt;br /&gt;
;Topic &lt;br /&gt;
:Desktop themes, widgets styles, window decorations, icons, coherent branding, sites, Plasma panels, how can we clean them?&lt;br /&gt;
:What is next? Helium? Fixing kde app's UI's one by one? &lt;br /&gt;
&lt;br /&gt;
;Duration&lt;br /&gt;
:All week&lt;br /&gt;
&lt;br /&gt;
;Facilitator&lt;br /&gt;
:Nuno Pinheiro (19-24)&lt;br /&gt;
&lt;br /&gt;
;Presentations&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
;Participants&lt;br /&gt;
:Nuno Pinheiro&lt;br /&gt;
:Marco (as much as the mobile one permits)&lt;br /&gt;
:Aaron Seigo&lt;br /&gt;
:Eugene Trounev [it-s]&lt;br /&gt;
&lt;br /&gt;
==== KWin ====&lt;br /&gt;
;Topic&lt;br /&gt;
:The present and future of the window manager component of the KDE Workspace.&lt;br /&gt;
&lt;br /&gt;
;Duration&lt;br /&gt;
:All week&lt;br /&gt;
&lt;br /&gt;
;Facilitator&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
;Presentations&lt;br /&gt;
:Areas In Which Plasma Desktop Should Get Out of the Way and KWin Should Step In, Aaron, Day ?&lt;br /&gt;
&lt;br /&gt;
;Participants&lt;br /&gt;
:Nuno Pinheiro&lt;br /&gt;
:Marco&lt;br /&gt;
:Aaron Seigo&lt;br /&gt;
:Eugene Trounev [it-s]&lt;br /&gt;
&lt;br /&gt;
==== Application Menus ====&lt;br /&gt;
;Topic&lt;br /&gt;
:Sharing Application Menu specific code, Nepomuk integration, new menu structure (TOM?)&lt;br /&gt;
&lt;br /&gt;
;Duration&lt;br /&gt;
:Half-day&lt;br /&gt;
&lt;br /&gt;
;Facilitator&lt;br /&gt;
:Lukas&lt;br /&gt;
&lt;br /&gt;
;Presentations&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
;Participants&lt;br /&gt;
:Lukas&lt;br /&gt;
:Ivan Čukić&lt;br /&gt;
:Riccardo&lt;br /&gt;
:Dario&lt;br /&gt;
:Nuno Pinheiro&lt;br /&gt;
:Eugene Trounev [it-s]&lt;br /&gt;
&lt;br /&gt;
==== Network Management ====&lt;br /&gt;
;Topic&lt;br /&gt;
:Finishing the Network Management component in Plasma&lt;br /&gt;
&lt;br /&gt;
;Goal&lt;br /&gt;
:Get very close to a first releasable version, make it ready for move into a released module&lt;br /&gt;
&lt;br /&gt;
;Duration&lt;br /&gt;
: 4 days (?!?)&lt;br /&gt;
&lt;br /&gt;
;Facilitator&lt;br /&gt;
: sebas&lt;br /&gt;
&lt;br /&gt;
;Participants&lt;br /&gt;
:Will&lt;br /&gt;
:Kevin&lt;br /&gt;
:Aurelien (remote)&lt;br /&gt;
:Shantanu (remote)&lt;br /&gt;
:sebas&lt;br /&gt;
&lt;br /&gt;
===Socials===&lt;br /&gt;
Saturday - thai buffet?&lt;br /&gt;
 &lt;br /&gt;
On Tuesday there will be a dinner sponsored by openSUSE at Herr Lenz restaurant&lt;br /&gt;
&lt;br /&gt;
Thursday - End of Tokamak party at Downtown?&lt;br /&gt;
&lt;br /&gt;
=== Open Tokamak ===&lt;br /&gt;
On Saturday we'll also plan the presentations, If there will be enough interests some talks could be redone/improvised for the public.&lt;br /&gt;
&lt;br /&gt;
On Monday, we'll have an Open Evening at Tokamak. Visitors are welcome to join us that evening for presentations.  See [http://news.opensuse.org/2010/02/11/meet-the-kde-plasma-developers-at-suse-feb-22 openSUSE News] for details.&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Plasma/Tokamak4</id>
		<title>Projects/Plasma/Tokamak4</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Plasma/Tokamak4"/>
				<updated>2010-01-05T11:10:15Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: add open day stuff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Tokamak 4 Oxygen 3 2010==&lt;br /&gt;
&lt;br /&gt;
The fourth Tokamak Plasma Meeting and the third Oxygen Gathering will take place in Nuremberg, Germany on February 19th to 26th.&lt;br /&gt;
&lt;br /&gt;
===Location===&lt;br /&gt;
&lt;br /&gt;
We will be hosted by Novell in the OpenSuse community space in Nuremberg. Details forthcoming.&lt;br /&gt;
&lt;br /&gt;
===Accomodation===&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
===Traveling===&lt;br /&gt;
&lt;br /&gt;
==Participants==&lt;br /&gt;
=== Participants ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Email&lt;br /&gt;
!Arrival&lt;br /&gt;
!Depart&lt;br /&gt;
!Cost&lt;br /&gt;
!Sponsor?&lt;br /&gt;
!Hotel?&lt;br /&gt;
!Food&lt;br /&gt;
!Work&lt;br /&gt;
!Airport&lt;br /&gt;
!Flights&lt;br /&gt;
|-&lt;br /&gt;
|Aaron&amp;amp;nbsp;Seigo&lt;br /&gt;
|aseigo@kde.org&lt;br /&gt;
|TBD&lt;br /&gt;
|TBD&lt;br /&gt;
|~$1300?&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|vegetarian&lt;br /&gt;
|Overall facilitation&lt;br /&gt;
|-&lt;br /&gt;
|Marco Martin&lt;br /&gt;
|notmart@gmail.com&lt;br /&gt;
|TBD&lt;br /&gt;
|TBD&lt;br /&gt;
|~100€&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|whatever coding and else&lt;br /&gt;
|-&lt;br /&gt;
|Ivan Cukic&lt;br /&gt;
|ivan.cukic@kde.org&lt;br /&gt;
|19.2&lt;br /&gt;
|26.2&lt;br /&gt;
|approx €250&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|whatever coding and else&lt;br /&gt;
|-&lt;br /&gt;
|Artur de Souza&lt;br /&gt;
|asouza@kde.org&lt;br /&gt;
|TBD&lt;br /&gt;
|TBD&lt;br /&gt;
|~1000 euros&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|coding, mobile, bug fixing, etc...&lt;br /&gt;
|-&lt;br /&gt;
|Nuno Pinheiro&lt;br /&gt;
|nuno@oxygen-icons.org&lt;br /&gt;
|19&lt;br /&gt;
|24&lt;br /&gt;
|aprox 250€&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|whatever artwork, mobile, planing, etc....&lt;br /&gt;
|-&lt;br /&gt;
|Chani&lt;br /&gt;
|chani@kde.org&lt;br /&gt;
|TBD&lt;br /&gt;
|TBD&lt;br /&gt;
|~$1300&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|vegetarian&lt;br /&gt;
|activity management / js / random bugs&lt;br /&gt;
|-&lt;br /&gt;
|Martin Gräßlin&lt;br /&gt;
|kde@martin-graesslin.com&lt;br /&gt;
|19.&lt;br /&gt;
|21.&lt;br /&gt;
|0&lt;br /&gt;
|no&lt;br /&gt;
|yes&lt;br /&gt;
|&lt;br /&gt;
|KWin on embedded devices&lt;br /&gt;
|-&lt;br /&gt;
|Lukas Appelhans&lt;br /&gt;
|l.appelhans@gmx.de&lt;br /&gt;
|19.&lt;br /&gt;
|TBD but maybe 21.&lt;br /&gt;
|~150€&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|Quicklaunch-Applet, KGet-Applets, Shaman/Aqpm-Applets, Raptor?&lt;br /&gt;
|-&lt;br /&gt;
|Frank Karlitschek&lt;br /&gt;
|karlitschek@kde.org&lt;br /&gt;
|TBD&lt;br /&gt;
|TBD&lt;br /&gt;
|TBD&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|Social Desktop&lt;br /&gt;
|-&lt;br /&gt;
|Dario Freddi&lt;br /&gt;
|drf@kde.org&lt;br /&gt;
|19&lt;br /&gt;
|TBD, probably 21-22&lt;br /&gt;
|TBD, I suppose ~150-200€&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|stuff that nobody wants to do, as usual&lt;br /&gt;
|-&lt;br /&gt;
|Riccardo Iaconelli&lt;br /&gt;
|riccardo@kde.org&lt;br /&gt;
|TBD, very probably 19&lt;br /&gt;
|TBD, probably 24? (depends on school)&lt;br /&gt;
|TBD, I suppose ~150-200€&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|plasmoids, art, ideas, fun :-)&lt;br /&gt;
|-&lt;br /&gt;
|Sebastian Kügler&lt;br /&gt;
|sebas@kde.org&lt;br /&gt;
|19th&lt;br /&gt;
|probably 27th&lt;br /&gt;
|~100€&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|Power- and networkmanagement, web integration, PIM stuff&lt;br /&gt;
|-&lt;br /&gt;
|Davide Bettio&lt;br /&gt;
|davide.bettio@kdemail.net&lt;br /&gt;
|TBD, probably 19th&lt;br /&gt;
|TBD, I don't know&lt;br /&gt;
|TBD, I suppose ~150-200€&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|TBD&lt;br /&gt;
|-&lt;br /&gt;
|Will Stephenson&lt;br /&gt;
|wstephenson@kde.org&lt;br /&gt;
|Local&lt;br /&gt;
|Local&lt;br /&gt;
|0&lt;br /&gt;
|no&lt;br /&gt;
|no&lt;br /&gt;
|whatever&lt;br /&gt;
|Keeping everyone else happy, networkmanagement&lt;br /&gt;
|N/A&lt;br /&gt;
|I can see the venue from my kitchen&lt;br /&gt;
|-&lt;br /&gt;
|Eugene Trounev&lt;br /&gt;
|eugene.trouenv@gmail.com&lt;br /&gt;
|19-11:15&lt;br /&gt;
|26-11:50&lt;br /&gt;
|$1,126.97 CAD&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|no meat. fish, eggs, and milk are OK&lt;br /&gt;
|various artowrk (like wallpapers), designs and more&lt;br /&gt;
|Nuremberg(NUE)&lt;br /&gt;
|In AC9268/Out AC9195&lt;br /&gt;
|-&lt;br /&gt;
|Hugo Pereira Da Costa&lt;br /&gt;
|hugo@oxygen-icons.org&lt;br /&gt;
|TBD&lt;br /&gt;
|TBD&lt;br /&gt;
|Plain ticket, from NY. Not checked yet&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|wathever&lt;br /&gt;
|Meeting people, drinking beers with Nuno, hacking||&lt;br /&gt;
|-&lt;br /&gt;
|Igor Trindade Oliveira&lt;br /&gt;
|igor_trindade@yahoo.com.br&lt;br /&gt;
|TBD&lt;br /&gt;
|TBD&lt;br /&gt;
|~800 euros&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|coding, animations, netbook etc...&lt;br /&gt;
|-&lt;br /&gt;
|Frederik Gladhorn&lt;br /&gt;
|gladhorn@kde.org&lt;br /&gt;
|19.2.&lt;br /&gt;
|26.2.&lt;br /&gt;
|~50 euros&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|opendesktop integration&lt;br /&gt;
|-&lt;br /&gt;
|Martin Zilz&lt;br /&gt;
|oore.mofux@gmx.de&lt;br /&gt;
|TBD&lt;br /&gt;
|TBD&lt;br /&gt;
|~100 euros&lt;br /&gt;
|no&lt;br /&gt;
|yes&lt;br /&gt;
|whatever&lt;br /&gt;
|arts, ux, freaky out of the box stuff&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Special Needs==&lt;br /&gt;
* Laptop/desktop for hacking with KDE trunk on it for: Lukas Appelhans&lt;br /&gt;
&lt;br /&gt;
==Topics==&lt;br /&gt;
&lt;br /&gt;
We will be focusing on the KDE SC 4.5 release of Plasma, with a particular attention on feature completion, polishing and quality improvements across the code base. Activities and Plasma Mobile will also be topics of interest.&lt;br /&gt;
&lt;br /&gt;
Oxygen, finishing it up for 4.5 plans for the future.&lt;br /&gt;
&lt;br /&gt;
===Opening Day Presentations===&lt;br /&gt;
&lt;br /&gt;
===Development Topics===&lt;br /&gt;
* ZUI replacement in plasma-desktop&lt;br /&gt;
* Plasma Mobile&lt;br /&gt;
* Plasma Media Center&lt;br /&gt;
* Plasmate&lt;br /&gt;
* Applet handles as plugins?&lt;br /&gt;
* Moving the toolboxes out of libplasma&lt;br /&gt;
* Plasma::Storage&lt;br /&gt;
* Plasma wallpaper scripting&lt;br /&gt;
&lt;br /&gt;
===Socials===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Open Tokamak ===&lt;br /&gt;
On Saturday, we'll have an Open Day at Tokamak. Visitors are welcome to join us that day, and possibly for evening/night-time activities. On Saturday we'll also plan the presentations.&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Schedules/KDE4/4.4_Release_Goals</id>
		<title>Schedules/KDE4/4.4 Release Goals</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Schedules/KDE4/4.4_Release_Goals"/>
				<updated>2009-12-03T01:36:07Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: /* PIM / Groupware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page reflects the changelog of KDE Software Compilation 4.4.&lt;br /&gt;
&lt;br /&gt;
= Plasma Workspace =&lt;br /&gt;
== Basic Functionality and Work-flow ==&lt;br /&gt;
* Storage devices can now automatically be mounted&lt;br /&gt;
* Widgets can be published on the network and be accessed remotely&lt;br /&gt;
* Desktop configuration is now scriptable using JavaScript&lt;br /&gt;
* Browsing through recent notifications&lt;br /&gt;
* Work-flow and layout improvements in the device manager widget&lt;br /&gt;
* System tray items can now be automatically shown or hidden&lt;br /&gt;
* New Plasma Netbook shell (Technology Preview)&lt;br /&gt;
* Applets can now be associated to an application (e.g. picture frame with gwenview, etc.) Makes it possible to open the associated application using an icon on the hover bar&lt;br /&gt;
* Mouse action plugins allow flexible interaction configuration&lt;br /&gt;
* New widget explorer improves the work-flow of adding widgets to the desktop&lt;br /&gt;
* Plasma widgets can now be added to the system tray&lt;br /&gt;
* Wallpapers can now be set using drag&amp;amp;drop&lt;br /&gt;
** Support for dropping remote content to use as wallpapers or create a desktop widget&lt;br /&gt;
* KNetworkmanager: new Network Management frontend&lt;br /&gt;
** Additionally, a richer Plasma widget as technology preview&lt;br /&gt;
&lt;br /&gt;
== User Interface ==&lt;br /&gt;
* Kinetic scrolling&lt;br /&gt;
* Taskbar entries, window buttons and other elements of the Plasma interface now have sublte animations&lt;br /&gt;
* Animation of popups uses OpenGL for animations&lt;br /&gt;
* Improved KMix on-screen display&lt;br /&gt;
* Improved layout for the battery widget's popup&lt;br /&gt;
* Taskbar previews are now clickable&lt;br /&gt;
* Desktop theme configuration has been moved to System Settings -&amp;gt; Style&lt;br /&gt;
* Plasma's default Air theme has been further polished and improved&lt;br /&gt;
&lt;br /&gt;
== Window &amp;amp; Compositing Manager ==&lt;br /&gt;
* New: Window maximizing and tiling by snapping to the screen-edges (&amp;quot;Aero Snap&amp;quot;)&lt;br /&gt;
* Native window tabs: Arbitrary windows can be grouped in tabs&lt;br /&gt;
* Window Management Plugin for KRunner&lt;br /&gt;
* Subtle animations in the window decoration, and other options to customize the window behavior&lt;br /&gt;
* Alt+Tab window switching improvements&lt;br /&gt;
* Improvements in present windows, flip switch, logout effect&lt;br /&gt;
&lt;br /&gt;
== Other widgets and addons ==&lt;br /&gt;
===Widgets===&lt;br /&gt;
* NEW Blackboard: a simple paint canvas, it's possible to paint with the mouse or with multitouch events on platforms that supports them&lt;br /&gt;
* NEW KDE Observatory: keep track of the development of your favorite KDE projects&lt;br /&gt;
* NEW KIMPanel: KDE Input Method Panel for multibyte input&lt;br /&gt;
* NEW Knowledge Base: query the knowledgebase of opendesktop.org&lt;br /&gt;
* NEW On-screen keyboard&lt;br /&gt;
* NEW OpenDesktop.org Activities: activity infomration from opendesktop.org&lt;br /&gt;
* NEW Qalculate math expression evaluator, based on libqalculate&lt;br /&gt;
* NEW Spellcheck: a quick spell checking area&lt;br /&gt;
* NEW Webslice: a plasmoid displaying a part of a web page&lt;br /&gt;
* NEW Window list&lt;br /&gt;
* Battery: Improved layout, better support for bigger fonts&lt;br /&gt;
* Device notifier&lt;br /&gt;
** Visual revamp to make it look and feel more Plasma&lt;br /&gt;
** Supports non-removable volumes&lt;br /&gt;
** Can show/hide devices from the interface&lt;br /&gt;
** Popup autohides after 10s of inactivity&lt;br /&gt;
* Picture Frame: now supports loading and displaying of remote images&lt;br /&gt;
* Microblog: can view replies and direct messages&lt;br /&gt;
* Quicklaunch: ascending and descending sort for applications in quicklaunch applet.&lt;br /&gt;
* SystemTray&lt;br /&gt;
** Now can embed other Plasma widgets&lt;br /&gt;
** Supports the finalized version of the StatusNotifier specification&lt;br /&gt;
** Old notifications remains accessible for a while, separated by application name, browseable with a tabbar widget&lt;br /&gt;
* Tasks&lt;br /&gt;
** Clicking on a window preview now activates that window&lt;br /&gt;
** Mouse over on a window preview highlights the window if the highlight windows KWin effect is activated&lt;br /&gt;
** Control+click on a window group launches the KWin present windows effect if activated&lt;br /&gt;
** New taskbar animations&lt;br /&gt;
* Weather widget now supports wetter.com&lt;br /&gt;
&lt;br /&gt;
=== KRunner ===&lt;br /&gt;
* NEW audioplayercontrol: control any MPRIS enabled audio application (amarok is the default)&lt;br /&gt;
* NEW plasma-desktop: &amp;quot;desktop console [script file]&amp;quot; triggers the interactive scripting window&lt;br /&gt;
* NEW solid: devices and hotplug support using Solid&lt;br /&gt;
* NEW mediawiki: generic mediawiki searching with .desktop files for wikipedia, techbase, wikitravel and userbase by default&lt;br /&gt;
* NEW windows: switch between and control windows and desktops&lt;br /&gt;
* Service runner: a query on a freedesktop application category, like &amp;quot;network&amp;quot; will show all applications of that category&lt;br /&gt;
* Bookmarks runner:&lt;br /&gt;
** The query &amp;quot;bookmarks&amp;quot; (or its translation) lists all the bookmarks&lt;br /&gt;
** Also supports Firefox' bookmarks&lt;br /&gt;
* Contacts runner: the query &amp;quot;contacts&amp;quot; shows all contacts&lt;br /&gt;
&lt;br /&gt;
===Other===&lt;br /&gt;
* NEW Pastebin dataengine&lt;br /&gt;
* DataEngines can now also be written in JavaScript&lt;br /&gt;
* Image wallpaper combobox has been replaced with a nicer view.&lt;br /&gt;
* Image wallpaper offers 'Next Wallpaper Image' contextual action in slide-show mode.&lt;br /&gt;
&lt;br /&gt;
= KDE Development Platform =&lt;br /&gt;
* KAuth: Authorization framework, harnesses PolicyKit, currently used in Font installer and System Activity&lt;br /&gt;
* Multitouch resize, rotate and move on platforms that support multitouch&lt;br /&gt;
* New high-level animation API in Plasma, based on Qt Kinetic&lt;br /&gt;
* Nepomuk Semantic Desktop: &lt;br /&gt;
** New Virtuoso storage backend, significantly faster and more scalable&lt;br /&gt;
** Nepomuk: KIO slave for querying Nepomuk resources&lt;br /&gt;
** Nepomuk is now able to search on non-mounted media&lt;br /&gt;
* libksane (scanner library): basic scanner support for Windows&lt;br /&gt;
* Improved exiv2 support in libkexiv2&lt;br /&gt;
* Printing: Add Odd/Even page selection and server-side page selection when using CUPS&lt;br /&gt;
* KDE integration of QtWebKit (cookies, proxies, etc. but not KPart)&lt;br /&gt;
* Thumbnail previews for Comicbook format&lt;br /&gt;
* New calendar systems: Indian Civil (Saka), Pure Julian, Pure Gregorian&lt;br /&gt;
&lt;br /&gt;
= KDE Applications =&lt;br /&gt;
== Basic ==&lt;br /&gt;
* Dolphin File Manager: &lt;br /&gt;
** Integrated searching&lt;br /&gt;
** Version control integration&lt;br /&gt;
** New timeline view, accessible as timeline:/, showing files by modification date&lt;br /&gt;
* Gwenview Image Viewer&lt;br /&gt;
** Image thumbnails on Folders&lt;br /&gt;
** Reworked start page&lt;br /&gt;
** New picture importing tool&lt;br /&gt;
&lt;br /&gt;
== PIM / Groupware ==&lt;br /&gt;
* KAddressbook now uses Akonadi for storing contacts&lt;br /&gt;
* KMail:&lt;br /&gt;
** Archiving of emails&lt;br /&gt;
** Improved recipient picker&lt;br /&gt;
** Searching by tag&lt;br /&gt;
** Clickable HTML statusbar&lt;br /&gt;
** Collapsible recipient fields&lt;br /&gt;
** Error messages are now passive, less disturbant to workflow&lt;br /&gt;
** Templating improvements for e.g. signatures&lt;br /&gt;
&lt;br /&gt;
== Accessibility ==&lt;br /&gt;
* KDE's text-to-speach subsystem now uses Speech Dispatcher for synthesis&lt;br /&gt;
&lt;br /&gt;
== Educational &amp;amp; Games ==&lt;br /&gt;
* New Edu app: Cantor&lt;br /&gt;
* New Edu app: Rocs&lt;br /&gt;
* New game: Granatier (bomberman game)&lt;br /&gt;
* New game: Palapeli (puzzle game)&lt;br /&gt;
* KStars: new observation plan manager&lt;br /&gt;
* KAlgebra &lt;br /&gt;
** Support for lists&lt;br /&gt;
** Better MathML presentation support, lambda expressions, jump detections&lt;br /&gt;
** New 2d parametric function plotting&lt;br /&gt;
&lt;br /&gt;
== Network ==&lt;br /&gt;
* Kopete: Create avatars from a webcam&lt;br /&gt;
* KRDC Remote Desktop Client: &lt;br /&gt;
** Telepathy Tubes support&lt;br /&gt;
** Full screen switching&lt;br /&gt;
* KGet Download Manager: &lt;br /&gt;
** better support for verification of downloaded files&lt;br /&gt;
** Broken downloads can be repaired&lt;br /&gt;
** Support for adding mirrors, moving and renaming files while downloading&lt;br /&gt;
** New assistant to create metalinks&lt;br /&gt;
&lt;br /&gt;
== Utilities ==&lt;br /&gt;
* Okteta Hex Editor:&lt;br /&gt;
** NEW Analyzing/Editing with user-defineable data structure templates&lt;br /&gt;
** NEW Editing of values in the decoding table now possible&lt;br /&gt;
** NEW Split views&lt;br /&gt;
** NEW Storing of bookmarks&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Schedules/KDE4/4.4_Release_Goals</id>
		<title>Schedules/KDE4/4.4 Release Goals</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Schedules/KDE4/4.4_Release_Goals"/>
				<updated>2009-12-03T01:35:15Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: add gwenview&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page reflects the changelog of KDE Software Compilation 4.4.&lt;br /&gt;
&lt;br /&gt;
= Plasma Workspace =&lt;br /&gt;
== Basic Functionality and Work-flow ==&lt;br /&gt;
* Storage devices can now automatically be mounted&lt;br /&gt;
* Widgets can be published on the network and be accessed remotely&lt;br /&gt;
* Desktop configuration is now scriptable using JavaScript&lt;br /&gt;
* Browsing through recent notifications&lt;br /&gt;
* Work-flow and layout improvements in the device manager widget&lt;br /&gt;
* System tray items can now be automatically shown or hidden&lt;br /&gt;
* New Plasma Netbook shell (Technology Preview)&lt;br /&gt;
* Applets can now be associated to an application (e.g. picture frame with gwenview, etc.) Makes it possible to open the associated application using an icon on the hover bar&lt;br /&gt;
* Mouse action plugins allow flexible interaction configuration&lt;br /&gt;
* New widget explorer improves the work-flow of adding widgets to the desktop&lt;br /&gt;
* Plasma widgets can now be added to the system tray&lt;br /&gt;
* Wallpapers can now be set using drag&amp;amp;drop&lt;br /&gt;
** Support for dropping remote content to use as wallpapers or create a desktop widget&lt;br /&gt;
* KNetworkmanager: new Network Management frontend&lt;br /&gt;
** Additionally, a richer Plasma widget as technology preview&lt;br /&gt;
&lt;br /&gt;
== User Interface ==&lt;br /&gt;
* Kinetic scrolling&lt;br /&gt;
* Taskbar entries, window buttons and other elements of the Plasma interface now have sublte animations&lt;br /&gt;
* Animation of popups uses OpenGL for animations&lt;br /&gt;
* Improved KMix on-screen display&lt;br /&gt;
* Improved layout for the battery widget's popup&lt;br /&gt;
* Taskbar previews are now clickable&lt;br /&gt;
* Desktop theme configuration has been moved to System Settings -&amp;gt; Style&lt;br /&gt;
* Plasma's default Air theme has been further polished and improved&lt;br /&gt;
&lt;br /&gt;
== Window &amp;amp; Compositing Manager ==&lt;br /&gt;
* New: Window maximizing and tiling by snapping to the screen-edges (&amp;quot;Aero Snap&amp;quot;)&lt;br /&gt;
* Native window tabs: Arbitrary windows can be grouped in tabs&lt;br /&gt;
* Window Management Plugin for KRunner&lt;br /&gt;
* Subtle animations in the window decoration, and other options to customize the window behavior&lt;br /&gt;
* Alt+Tab window switching improvements&lt;br /&gt;
* Improvements in present windows, flip switch, logout effect&lt;br /&gt;
&lt;br /&gt;
== Other widgets and addons ==&lt;br /&gt;
===Widgets===&lt;br /&gt;
* NEW Blackboard: a simple paint canvas, it's possible to paint with the mouse or with multitouch events on platforms that supports them&lt;br /&gt;
* NEW KDE Observatory: keep track of the development of your favorite KDE projects&lt;br /&gt;
* NEW KIMPanel: KDE Input Method Panel for multibyte input&lt;br /&gt;
* NEW Knowledge Base: query the knowledgebase of opendesktop.org&lt;br /&gt;
* NEW On-screen keyboard&lt;br /&gt;
* NEW OpenDesktop.org Activities: activity infomration from opendesktop.org&lt;br /&gt;
* NEW Qalculate math expression evaluator, based on libqalculate&lt;br /&gt;
* NEW Spellcheck: a quick spell checking area&lt;br /&gt;
* NEW Webslice: a plasmoid displaying a part of a web page&lt;br /&gt;
* NEW Window list&lt;br /&gt;
* Battery: Improved layout, better support for bigger fonts&lt;br /&gt;
* Device notifier&lt;br /&gt;
** Visual revamp to make it look and feel more Plasma&lt;br /&gt;
** Supports non-removable volumes&lt;br /&gt;
** Can show/hide devices from the interface&lt;br /&gt;
** Popup autohides after 10s of inactivity&lt;br /&gt;
* Picture Frame: now supports loading and displaying of remote images&lt;br /&gt;
* Microblog: can view replies and direct messages&lt;br /&gt;
* Quicklaunch: ascending and descending sort for applications in quicklaunch applet.&lt;br /&gt;
* SystemTray&lt;br /&gt;
** Now can embed other Plasma widgets&lt;br /&gt;
** Supports the finalized version of the StatusNotifier specification&lt;br /&gt;
** Old notifications remains accessible for a while, separated by application name, browseable with a tabbar widget&lt;br /&gt;
* Tasks&lt;br /&gt;
** Clicking on a window preview now activates that window&lt;br /&gt;
** Mouse over on a window preview highlights the window if the highlight windows KWin effect is activated&lt;br /&gt;
** Control+click on a window group launches the KWin present windows effect if activated&lt;br /&gt;
** New taskbar animations&lt;br /&gt;
* Weather widget now supports wetter.com&lt;br /&gt;
&lt;br /&gt;
=== KRunner ===&lt;br /&gt;
* NEW audioplayercontrol: control any MPRIS enabled audio application (amarok is the default)&lt;br /&gt;
* NEW plasma-desktop: &amp;quot;desktop console [script file]&amp;quot; triggers the interactive scripting window&lt;br /&gt;
* NEW solid: devices and hotplug support using Solid&lt;br /&gt;
* NEW mediawiki: generic mediawiki searching with .desktop files for wikipedia, techbase, wikitravel and userbase by default&lt;br /&gt;
* NEW windows: switch between and control windows and desktops&lt;br /&gt;
* Service runner: a query on a freedesktop application category, like &amp;quot;network&amp;quot; will show all applications of that category&lt;br /&gt;
* Bookmarks runner:&lt;br /&gt;
** The query &amp;quot;bookmarks&amp;quot; (or its translation) lists all the bookmarks&lt;br /&gt;
** Also supports Firefox' bookmarks&lt;br /&gt;
* Contacts runner: the query &amp;quot;contacts&amp;quot; shows all contacts&lt;br /&gt;
&lt;br /&gt;
===Other===&lt;br /&gt;
* NEW Pastebin dataengine&lt;br /&gt;
* DataEngines can now also be written in JavaScript&lt;br /&gt;
* Image wallpaper combobox has been replaced with a nicer view.&lt;br /&gt;
* Image wallpaper offers 'Next Wallpaper Image' contextual action in slide-show mode.&lt;br /&gt;
&lt;br /&gt;
= KDE Development Platform =&lt;br /&gt;
* KAuth: Authorization framework, harnesses PolicyKit, currently used in Font installer and System Activity&lt;br /&gt;
* Multitouch resize, rotate and move on platforms that support multitouch&lt;br /&gt;
* New high-level animation API in Plasma, based on Qt Kinetic&lt;br /&gt;
* Nepomuk Semantic Desktop: &lt;br /&gt;
** New Virtuoso storage backend, significantly faster and more scalable&lt;br /&gt;
** Nepomuk: KIO slave for querying Nepomuk resources&lt;br /&gt;
** Nepomuk is now able to search on non-mounted media&lt;br /&gt;
* libksane (scanner library): basic scanner support for Windows&lt;br /&gt;
* Improved exiv2 support in libkexiv2&lt;br /&gt;
* Printing: Add Odd/Even page selection and server-side page selection when using CUPS&lt;br /&gt;
* KDE integration of QtWebKit (cookies, proxies, etc. but not KPart)&lt;br /&gt;
* Thumbnail previews for Comicbook format&lt;br /&gt;
* New calendar systems: Indian Civil (Saka), Pure Julian, Pure Gregorian&lt;br /&gt;
&lt;br /&gt;
= KDE Applications =&lt;br /&gt;
== Basic ==&lt;br /&gt;
* Dolphin File Manager: &lt;br /&gt;
** Integrated searching&lt;br /&gt;
** Version control integration&lt;br /&gt;
** New timeline view, accessible as timeline:/, showing files by modification date&lt;br /&gt;
* Gwenview Image Viewer&lt;br /&gt;
** Image thumbnails on Folders&lt;br /&gt;
** Reworked start page&lt;br /&gt;
** New picture importing tool&lt;br /&gt;
&lt;br /&gt;
== PIM / Groupware ==&lt;br /&gt;
* New: KAddressbook rewritten using Akonadi&lt;br /&gt;
* KMail:&lt;br /&gt;
** Archiving of emails&lt;br /&gt;
** Improved recipient picker&lt;br /&gt;
** searching by tag&lt;br /&gt;
** Clickable HTML statusbar&lt;br /&gt;
** Collapsible recipient fields&lt;br /&gt;
** Error messages are now passive, less disturbant to workflow&lt;br /&gt;
** Templating improvements for e.g. signatures&lt;br /&gt;
&lt;br /&gt;
== Accessibility ==&lt;br /&gt;
* KDE's text-to-speach subsystem now uses Speech Dispatcher for synthesis&lt;br /&gt;
&lt;br /&gt;
== Educational &amp;amp; Games ==&lt;br /&gt;
* New Edu app: Cantor&lt;br /&gt;
* New Edu app: Rocs&lt;br /&gt;
* New game: Granatier (bomberman game)&lt;br /&gt;
* New game: Palapeli (puzzle game)&lt;br /&gt;
* KStars: new observation plan manager&lt;br /&gt;
* KAlgebra &lt;br /&gt;
** Support for lists&lt;br /&gt;
** Better MathML presentation support, lambda expressions, jump detections&lt;br /&gt;
** New 2d parametric function plotting&lt;br /&gt;
&lt;br /&gt;
== Network ==&lt;br /&gt;
* Kopete: Create avatars from a webcam&lt;br /&gt;
* KRDC Remote Desktop Client: &lt;br /&gt;
** Telepathy Tubes support&lt;br /&gt;
** Full screen switching&lt;br /&gt;
* KGet Download Manager: &lt;br /&gt;
** better support for verification of downloaded files&lt;br /&gt;
** Broken downloads can be repaired&lt;br /&gt;
** Support for adding mirrors, moving and renaming files while downloading&lt;br /&gt;
** New assistant to create metalinks&lt;br /&gt;
&lt;br /&gt;
== Utilities ==&lt;br /&gt;
* Okteta Hex Editor:&lt;br /&gt;
** NEW Analyzing/Editing with user-defineable data structure templates&lt;br /&gt;
** NEW Editing of values in the decoding table now possible&lt;br /&gt;
** NEW Split views&lt;br /&gt;
** NEW Storing of bookmarks&lt;/div&gt;</summary>
		<author><name>Sebas</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Schedules/KDE4/4.4_Release_Goals</id>
		<title>Schedules/KDE4/4.4 Release Goals</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Schedules/KDE4/4.4_Release_Goals"/>
				<updated>2009-12-03T01:22:25Z</updated>
		
		<summary type="html">&lt;p&gt;Sebas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page reflects the changelog of KDE Software Compilation 4.4.&lt;br /&gt;
&lt;br /&gt;
= Plasma Workspace =&lt;br /&gt;
== Basic Functionality and Work-flow ==&lt;br /&gt;
* Storage devices can now automatically be mounted&lt;br /&gt;
* Widgets can be published on the network and be accessed remotely&lt;br /&gt;
* Desktop configuration is now scriptable using JavaScript&lt;br /&gt;
* Browsing through recent notifications&lt;br /&gt;
* Work-flow and layout improvements in the device manager widget&lt;br /&gt;
* System tray items can now be automatically shown or hidden&lt;br /&gt;
* New Plasma Netbook shell (Technology Preview)&lt;br /&gt;
* Applets can now be associated to an application (e.g. picture frame with gwenview, etc.) Makes it possible