aboutsummaryrefslogtreecommitdiff
path: root/libcontextprovider/doc/html/index.html
blob: cfa4b00f0e2338d59d300203427d6fddc44dd338 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libcontextprovider: Providing values for Context properties</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li class="current"><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
</div>
<div class="contents">
<h1>Providing values for Context properties</h1><p>This library implements the provider side of the ContextKit's D-Bus protocol. It has both a C++ and a C interface, so you can choose which you prefer. For the documentation of the C API, see <a class="el" href="capi.html">CApi</a>.</p>
<p>The C++ interface consists mainly of the three classes: <a class="el" href="class_context_provider_1_1_service.html" title="A Service object is a proxy representing a service on D-Bus that implements the ContextKit...">Service</a>, <a class="el" href="class_context_provider_1_1_property.html" title="A Property object represents a context property, i.e., a key-value pair.">Property</a>, and <a class="el" href="class_context_provider_1_1_group.html" title="Groups the firstSubscriberAppeared and lastSubscriberDisappeared from multiple Property...">Group</a> in the namespace <a class="el" href="namespace_context_provider.html">ContextProvider</a>. They are declared in the <a class="el" href="namespace_context_provider.html">ContextProvider</a> header file.</p>
<p>Thus, you would typically gain access to the classes like this</p>
<div class="fragment"><pre class="fragment"><span class="preprocessor">  #include &lt;<a class="code" href="_context_provider.html">ContextProvider</a>&gt;</span>

  <span class="keyword">using namespace </span>ContextProvider;

  Service myService (...);
</pre></div><p>If you prefer not to have generic names like "Service" in your code, you can of course skip the "using" declaration and refer to the classes as "ContextProvider::Service", etc. If that is too long, consider a namespace alias like this:</p>
<div class="fragment"><pre class="fragment"><span class="preprocessor">  #include &lt;<a class="code" href="_context_provider.html">ContextProvider</a>&gt;</span>

  <span class="keyword">namespace </span>CP = ContextProvider;

  CP::Service myService (...);
</pre></div><p>The basic pattern to use this library is to create a <a class="el" href="class_context_provider_1_1_service.html" title="A Service object is a proxy representing a service on D-Bus that implements the ContextKit...">Service</a> instance to represent you on D-Bus and then to add <a class="el" href="class_context_provider_1_1_property.html" title="A Property object represents a context property, i.e., a key-value pair.">Property</a> instances to it for the keys that you want to provide. Once this is done, you can call <a class="el" href="class_context_provider_1_1_property.html#a44c5ff15b11d53d2a44bc77cacb41314" title="Sets the property value to QVariant v.">Property::setValue()</a> and <a class="el" href="class_context_provider_1_1_property.html#aa65dc7374559b7a7d86034b8c9ef9807" title="Unsets the value.">Property::unsetValue()</a> at any time to change the value of the property.</p>
<p>Communication with clients happens asynchronously and this library needs a running event loop for that.</p>
<p>Thus, a simple provider might look like this:</p>
<div class="fragment"><pre class="fragment"><span class="preprocessor">  #include &lt;<a class="code" href="_context_provider.html">ContextProvider</a>&gt;</span>

  <span class="keyword">using namespace </span>ContextProvider;

  <span class="keywordtype">void</span> main(<span class="keywordtype">int</span> <a class="code" href="contextc_8cpp.html#ad1447518f4372828b8435ae82e48499e">argc</a>, <span class="keywordtype">char</span> **<a class="code" href="contextc_8cpp.html#a34d7542664850bdf79197020d3e9532f">argv</a>)
  {
      QApplication <a class="code" href="contextc_8cpp.html#ab751c4ea835b01f1db167e4fbc8f042d">app</a>(argc, argv);

      Service myService(QDBusConnection::SessionBus, <span class="stringliteral">&quot;com.example.simple&quot;</span>);
      Property myProperty(myService, <span class="stringliteral">&quot;Example.Simple&quot;</span>);

      <span class="comment">// set initial value of property</span>
      myProperty.set(100);

      <a class="code" href="contextc_8cpp.html#ab751c4ea835b01f1db167e4fbc8f042d">app</a>.exec();
  }
</pre></div><p>If you need to know when someone actually subscribes to one of your properties, you can connect to the firstSubscriberAppeared and lastSubscriberDisappeared signals of the <a class="el" href="class_context_provider_1_1_property.html" title="A Property object represents a context property, i.e., a key-value pair.">Property</a> instances. You can also use a <a class="el" href="class_context_provider_1_1_group.html" title="Groups the firstSubscriberAppeared and lastSubscriberDisappeared from multiple Property...">Group</a> if you are only interested in whether at least one of a set of <a class="el" href="class_context_provider_1_1_property.html" title="A Property object represents a context property, i.e., a key-value pair.">Property</a> objects is subscribed to.</p>
<h2><a class="anchor" id="PropNames">
Valid property names</a></h2>
<p>Context FW maintains a list of core properties. If you are providing a core property, you need to name it as it is described in the core property list (e.g., Screen.TopEdge).</p>
<p>If you want to provide a non-core property, its name must be a valid name for a D-Bus object path (e.g., /com/mycompany/screen/topedge). A valid D-Bus object path starts with / and contains zero or more elements separated by / . Each element must only contain the following characters: [A-Z][a-z][0-9]_ </p>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on Mon Nov 9 15:30:51 2009 for libcontextprovider by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>