KGRKJGETMRETU895U-589TY5MIGM5JGB5SDFESFREWTGR54TY
Server : Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 DAV/2 PHP/5.2.17
System : Linux localhost 2.6.18-419.el5 #1 SMP Fri Feb 24 22:47:42 UTC 2017 x86_64
User : nobody ( 99)
PHP Version : 5.2.17
Disable Function : NONE
Directory :  /proc/22697/root/usr/share/gtk-doc/html/libbonobo/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //proc/22697/root/usr/share/gtk-doc/html/libbonobo/properties.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Properties</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
<link rel="start" href="index.html" title="Libbonobo Reference Manual">
<link rel="up" href="property-bags.html" title="Property Bags, Events, Listeners">
<link rel="prev" href="property-bags.html" title="Property Bags, Events, Listeners">
<link rel="next" href="libbonobo-bonobo-event-source.html" title="bonobo-event-source">
<meta name="generator" content="GTK-Doc V1.7 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
<link rel="chapter" href="general.html" title="General">
<link rel="chapter" href="factories.html" title="Objects, Factories, Reference Counting">
<link rel="chapter" href="property-bags.html" title="Property Bags, Events, Listeners">
<link rel="chapter" href="monikers.html" title="Monikers">
<link rel="chapter" href="streams.html" title="Storages and Streams">
<link rel="chapter" href="persist.html" title="Persistency">
<link rel="chapter" href="misc.html" title="Miscellaneous">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
<td><a accesskey="p" href="property-bags.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
<td><a accesskey="u" href="property-bags.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
<th width="100%" align="center">Libbonobo Reference Manual</th>
<td><a accesskey="n" href="libbonobo-bonobo-event-source.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
</tr></table>
<div class="refentry" lang="en">
<a name="properties"></a><div class="titlepage"></div>
<div class="refsect1" lang="en">
<a name="id2714056"></a><h2>Properties</h2>
<p>Bonobo component properties, version 0.1 by Michael
	    Meeks &lt;mmeeks@gnu.org&gt;</p>
<p>A brief discussion of how to use the property API to add
	    a simple to use configuration mechanism to your bonobo
	    component.</p>
<div class="refsect2" lang="en">
<a name="id2714073"></a><h3>Properties and bags</h3>
<p>A property is an attribute that is attached to a
		Bonobo object.  It can have any type, although the
		standard types <span class="type">boolean</span>,
		<span class="type">long</span>, <span class="type">float</span>, double, string
		are handled in a convenient fashion. Properties are
		attached to a <code class="classname">PropertyBag</code>
		object that is attached to your control or component
		in some way.</p>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2715062"></a><h3>BonoboArgs</h3>
<p>A bonobo arg contains the value of a property whilst
		it is 'in flight' between a property and a
		requestor. The bonobo arg system is designed to make
		ORBit's 'any' code easier to use and less error prone
		- it is however simply a wrapper around a
		<span class="type">CORBA_any</span>.</p>
<p>A number of macros and helper functions are provided
		in <code class="filename">bonobo-arg.h</code>. Particularly,
		the type macros of BonoboArgType eg.</p>
<p><code class="literal">BONOBO_ARG_BOOLEAN, BONOBO_ARG_LONG,
		BONOBO_ARG_STRING</code></p>
<p>And a number of access procedures for getting and
		setting standard values from a BonoboArg. Eg. if 'a'
		is a <span class="type">BonoboArg *</span> we should use:</p>
<p><code class="literal">BONOBO_ARG_GET_STRING (a)</code> to get its string value</p>
<p> or </p>
<p><code class="literal">BONOBO_ARG_SET_STRING (a, "GNU")</code>to set its string value</p>
<p>NB. Passing a NULL string to
	    <code class="function">BONOBO_ARG_SET_STRING</code> is equivalent
	    to passing an empty string.</p>
<p> The bonobo-arg code also provides functions for
		mapping <span class="type">GParamSpec</span>s to BonoboArgs and
		vice-versa.</p>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2715153"></a><h3>PropertyBag creation</h3>
<p>To add properties to an object first we must create
		a property bag hence:</p>
<pre class="synopsis">
BonoboPropertyBag *bonobo_property_bag_new (BonoboPropertyGetFn get_prop,
                                            BonoboPropertySetFn set_prop,
                                            gpointer            user_data);
	    </pre>
<p> Each property has a get / set / user_data (GSU)
		triplet that handles that property's behavior. In a
		typical scenario all object properties in a bag
		utilise the same GSU triplet, and are identified
		inside the get / set functions by a unique enumerated
		constant arg_id.  Inside the function this arg_id can
		then be used with a switch statement to provide
		efficient (de)multiplexing of property
		requests. </p>
<p> For particularly obtuse persons wanting more
		flexibility it is possible to specify the GSU triplet
		per property using the add_full variant. </p>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2715189"></a><h3>Property Creation</h3>
<p> Each basic property is created by this function: </p>
<pre class="synopsis">
void bonobo_property_bag_add (BonoboPropertyBag   *pb,
                              const char          *name,
			      int                  idx,
                              BonoboArgType        type,
		              BonoboArg           *default_value,
	    		      const char          *docstring,
                              BonoboPropertyFlags  flags);
	    </pre>
<p> It looks horrendous, but is horribly simple in most
		cases; the idx is the index that will be passed to a
		generic get / set function for this property. The type
		is one of the BonoboArgType macros discussed in
		section 2 which maps to an ORBit TypeCode [ hence any
		arbitary type can be added without the property-bag
		knowing anything about it ( allocation of that type is
		the users responsibility ) ]. Default_value is either
		NULL or a value created thusly:</p>
<pre class="programlisting">
BonoboArg *def = bonobo_arg_new (BONOBO_ARG_DOUBLE);
BONOBO_ARG_SET_DOUBLE (def, 0.3127);
	    </pre>
<p>It's reference is stored in the property_bag.</p>
<p> The rest of the code is internal and extremely
		transparent. In order to implement the get / set
		functions I would copy &amp; paste the sample code in:
		<code class="filename">libbonoboui/samples/controls/bonobo-sample-controls.c.
		</code></p>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2715247"></a><h3>Wrapping GObjects</h3>
<p> If you have already implemented a GObject that
		has the set of properties that you wish to export as
		Bonobo properties then it is trivial to add them to
		the property bag using a transparent mapping. This
		means that you do not have to write any more code,
		simply use:</p>
<pre class="programlisting">
GParamSpec **pspecs;
guint        n_props;

pspecs = g_object_class_list_properties (
      G_OBJECT_GET_CLASS (my_object), &amp;n_props);

bonobo_property_bag_map_params (pb, my_object, pspecs, n_props);

g_free (pspecs)
	    </pre>
</div>
<hr>
<div class="refsect2" lang="en">
<a name="id2715270"></a><h3>Using properties in your client application</h3>
<p>There are some fairly typesafe but convenient vararg
		ways to get remote properties. Example:</p>
<div class="informalexample"><pre class="programlisting">
CORBA_double i;

bonobo_widget_get_property (control, "value",
			    TC_CORBA_double, &amp;i, NULL);
i+= 0.37;
bonobo_widget_set_property (control, "value",
			    TC_CORBA_double, i, NULL);
		</pre></div>
<p>The alternative being the even more type safe version:</p>
<pre class="programlisting">
bonobo_property_bag_client_get_value_gdouble (pb, "value", &amp;i);
	    </pre>
</div>
</div>
</div>
</body>
</html>

Anon7 - 2021