Difference between revisions of "Development/Tutorials/Plasma/Services"

Jump to: navigation, search
(Created page with 'cover services, .operations file, .operations dtd spec, perhaps make a service like the pastebin one or something. idk, something easy. also mention how a service can access th...')
 
 
(11 intermediate revisions by 4 users not shown)
Line 1: Line 1:
 +
 +
 +
{{TutorialBrowser|
 +
 +
series=Plasma Tutorial|
 +
 +
name=Writing a Service|
 +
 +
pre=[http://mindview.net/Books/TICPP/ThinkingInCPP2e.html C++], [http://www.trolltech.com/products/qt/ Qt], [[Getting_Started/Build|KDE development environment]]|
 +
 +
next=|
 +
 +
reading=[http://api.kde.org/4.x-api/kdelibs-apidocs/plasma/html/classPlasma_1_1DataEngine.html DataEngine API], [[Development/Tutorials/CMake|CMake Tutorials]], [[Development/Tutorials/Plasma/GettingStarted|Writing a Plasmoid (Tutorial)]], [[Development/Tutorials/Plasma/DataEngines|Writing a Data Engine (Tutorial)]]
 +
}}
 +
 +
==Abstract==
 +
 
cover services, .operations file, .operations dtd spec, perhaps make a service like the pastebin one or something. idk, something easy.  
 
cover services, .operations file, .operations dtd spec, perhaps make a service like the pastebin one or something. idk, something easy.  
 +
 +
http://www.kde.org/standards/kcfg/1.0/kcfg.xsd
  
 
also mention how a service can access the dataengine via it's pointer(I think that's in public api), if it really really needs to(e.g. plasma-kdm can't live without that)
 
also mention how a service can access the dataengine via it's pointer(I think that's in public api), if it really really needs to(e.g. plasma-kdm can't live without that)
 +
 +
==The Plasma Engine Explorer==
 +
 +
A very useful tool for anyone writing services is the Plasma engine explorer. You can use it to see test services by launching them by running
 +
 +
<syntaxhighlight lang="bash">
 +
plasmaengineexplorer
 +
</syntaxhighlight>
 +
 +
If the service you want to test is associated to a source, you can access a dialog to launch the service and set its parameters by using the contextual menu of the source and selecting "Get associated service"
 +
 +
[[Image:Plasma-engine-explorer-task-service.png]]
 +
 +
 +
==The Code==
 +
 +
This tutorial will cover adding a service associated with a source into an existing data engine. Depending on your requirements, you may want a service which is associated with a certain source, and will be able to perform actions based on that source, or you may want a service that simply performs global calls which are not tied to any one source. We will cover the first case, since it is the most prominent.
 +
 +
===The Description of the Service and its parameters===
 +
The service you make yourself and can really have any parameters you want, it's quite flexible. The constructor can be e.g. MyService(QObject* parent, const QString& source), or it can create a custom class which is a custom data source.
 +
====Writing an Operations File====
 +
The operations file is quite core to the service, as it defines which operations are available. It is simply an XML file:
 +
<syntaxhighlight lang="xml">
 +
<?xml version="1.0" encoding="UTF-8"?>
 +
<!DOCTYPE kcfg SYSTEM
 +
    "http://www.kde.org/standards/kcfg/1.0/kcfg.xsd">
 +
<kcfg>
 +
    <group name="setIcon">
 +
        <entry name="Icon" type="String">
 +
            <label>Set the name of the icon for this somesource</label>
 +
        </entry>
 +
    </group>
 +
</kcfg>
 +
</syntaxhighlight>
 +
 +
===The Main Code===
 +
 +
====Responding to Request for the Service Associated to a Source====
 +
 +
====Writing the Code Executing the Action of the Service====
 +
 +
====Building it====
 +
As in the previous DataEngine tutorial, the CMakeLists.txt file is required to build your plugin. To create a service in addition to an engine, only a few lines of code need to be added. We need to add our service's C++ source file to our existing project, then install the operations file that was made.
 +
<syntaxhighlight lang="bash">
 +
set(myproject_SRCS
 +
    myengine.cpp
 +
    myservice.cpp
 +
)
 +
 +
install(FILES org.kde.myprogramsname.service.operations
 +
        DESTINATION ${DATA_INSTALL_DIR}/plasma/services)
 +
</syntaxhighlight>
 +
 +
In the case of "myprogramsname", that is simply e.g. microblog, pastebin, activities or whatever your collection of components is going to be named. (the reverse-domain name is used to prevent conflictions, so try to use it as much as possible).
 +
 +
==Testing==

Latest revision as of 17:42, 19 July 2012


Writing a Service
Tutorial Series   Plasma Tutorial
Previous   C++, Qt, KDE development environment
What's Next  
Further Reading   DataEngine API, CMake Tutorials, Writing a Plasmoid (Tutorial), Writing a Data Engine (Tutorial)

Contents

[edit] Abstract

cover services, .operations file, .operations dtd spec, perhaps make a service like the pastebin one or something. idk, something easy.

http://www.kde.org/standards/kcfg/1.0/kcfg.xsd

also mention how a service can access the dataengine via it's pointer(I think that's in public api), if it really really needs to(e.g. plasma-kdm can't live without that)

[edit] The Plasma Engine Explorer

A very useful tool for anyone writing services is the Plasma engine explorer. You can use it to see test services by launching them by running

plasmaengineexplorer

If the service you want to test is associated to a source, you can access a dialog to launch the service and set its parameters by using the contextual menu of the source and selecting "Get associated service"

Plasma-engine-explorer-task-service.png


[edit] The Code

This tutorial will cover adding a service associated with a source into an existing data engine. Depending on your requirements, you may want a service which is associated with a certain source, and will be able to perform actions based on that source, or you may want a service that simply performs global calls which are not tied to any one source. We will cover the first case, since it is the most prominent.

[edit] The Description of the Service and its parameters

The service you make yourself and can really have any parameters you want, it's quite flexible. The constructor can be e.g. MyService(QObject* parent, const QString& source), or it can create a custom class which is a custom data source.

[edit] Writing an Operations File

The operations file is quite core to the service, as it defines which operations are available. It is simply an XML file:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE kcfg SYSTEM
    "http://www.kde.org/standards/kcfg/1.0/kcfg.xsd">
<kcfg>
    <group name="setIcon">
        <entry name="Icon" type="String">
            <label>Set the name of the icon for this somesource</label>
        </entry>
    </group>
</kcfg>

[edit] The Main Code

[edit] Responding to Request for the Service Associated to a Source

[edit] Writing the Code Executing the Action of the Service

[edit] Building it

As in the previous DataEngine tutorial, the CMakeLists.txt file is required to build your plugin. To create a service in addition to an engine, only a few lines of code need to be added. We need to add our service's C++ source file to our existing project, then install the operations file that was made.

set(myproject_SRCS 
    myengine.cpp
    myservice.cpp
)
 
install(FILES org.kde.myprogramsname.service.operations
        DESTINATION ${DATA_INSTALL_DIR}/plasma/services)

In the case of "myprogramsname", that is simply e.g. microblog, pastebin, activities or whatever your collection of components is going to be named. (the reverse-domain name is used to prevent conflictions, so try to use it as much as possible).

[edit] Testing


This page was last modified on 19 July 2012, at 17:42. This page has been accessed 4,795 times. Content is available under Creative Commons License SA 3.0 as well as the GNU Free Documentation License 1.2.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V.Legal