#include <config.h>
#include <stdio.h>
#include <libbonobo.h>
static Bonobo_PropertyBag pb;
static CORBA_Environment ev;
static Bonobo_PropertyBag pb;
static char *
simple_print_type (CORBA_TypeCode tc)
{
static char s[1024];
switch (tc->kind) {
case CORBA_tk_boolean:
g_snprintf (s, sizeof (s), "boolean");
break;
case CORBA_tk_short:
g_snprintf (s, sizeof (s), "short");
break;
case CORBA_tk_ushort:
g_snprintf (s, sizeof (s), "ushort");
break;
case CORBA_tk_long:
g_snprintf (s, sizeof (s), "long");
break;
case CORBA_tk_ulong:
g_snprintf (s, sizeof (s), "ulong");
break;
case CORBA_tk_float:
g_snprintf (s, sizeof (s), "float");
break;
case CORBA_tk_double:
g_snprintf (s, sizeof (s), "double");
break;
case CORBA_tk_string:
g_snprintf (s, sizeof (s), "string");
break;
default:
g_snprintf (s, sizeof (s), "Unknown");
break;
}
return s;
}
static char *
simple_print_value (char *name, CORBA_TypeCode tc)
{
static char s[1024];
switch (tc->kind) {
case CORBA_tk_boolean:
g_snprintf (s, sizeof (s), "%s",
bonobo_pbclient_get_boolean (pb, name, NULL) ?
"True" : "False");
break;
case CORBA_tk_long:
g_snprintf (s, sizeof (s), "%d",
bonobo_pbclient_get_long (pb, name, NULL));
break;
case CORBA_tk_float:
g_snprintf (s, sizeof (s), "%f",
bonobo_pbclient_get_float (pb, name, NULL));
break;
case CORBA_tk_double:
g_snprintf (s, sizeof (s), "%f",
bonobo_pbclient_get_double (pb, name, NULL));
break;
case CORBA_tk_string:
g_snprintf (s, sizeof (s), "%s",
bonobo_pbclient_get_string (pb, name, NULL));
break;
default:
g_snprintf (s, sizeof (s), "Unknown");
break;
}
return s;
}
static char *
simple_print_default_value (char *name, CORBA_TypeCode tc)
{
static char s[1024];
switch (tc->kind) {
case CORBA_tk_boolean:
g_snprintf (s, sizeof (s), "%s",
bonobo_pbclient_get_default_boolean (pb, name, NULL) ?
"True" : "False");
break;
case CORBA_tk_long:
g_snprintf (s, sizeof (s), "%d",
bonobo_pbclient_get_default_long (pb, name, NULL));
break;
case CORBA_tk_float:
g_snprintf (s, sizeof (s), "%f",
bonobo_pbclient_get_default_float (pb, name, NULL));
break;
case CORBA_tk_double:
g_snprintf (s, sizeof (s), "%f",
bonobo_pbclient_get_default_double (pb, name, NULL));
break;
case CORBA_tk_string:
g_snprintf (s, sizeof (s), "%s",
bonobo_pbclient_get_default_string (pb, name, NULL));
break;
default:
g_snprintf (s, sizeof (s), "Unknown");
break;
}
return s;
}
static char *
simple_print_read_only (char *name)
{
Bonobo_PropertyFlags flags;
flags = bonobo_pbclient_get_flags (pb, name, NULL);
return (flags & Bonobo_PROPERTY_READABLE) ?
"ReadOnly" : "ReadWrite";
}
static void
print_props (void)
{
GList *props;
GList *l;
props = bonobo_pbclient_get_keys (pb, NULL);
for (l = props; l != NULL; l = l->next) {
CORBA_TypeCode tc;
char *name = l->data;
tc = bonobo_pbclient_get_type (pb, name, NULL);
g_print ("%s [%s] %s %s %s\n",
name,
simple_print_type (tc),
simple_print_value (name, tc),
simple_print_default_value (name, tc),
simple_print_read_only (name));
CORBA_Object_release ((CORBA_Object) tc, NULL);
}
bonobo_pbclient_free_keys (props);
}
static guint
create_bag_client (void)
{
print_props ();
bonobo_pbclient_set_boolean (pb, "boolean-test", FALSE, NULL);
bonobo_pbclient_set_long (pb, "long-test", 3, NULL);
bonobo_pbclient_set_float (pb, "float-test", 0.00001, NULL);
bonobo_pbclient_set_double (pb, "double-test", 2.0001, NULL);
bonobo_pbclient_set_string (pb, "string-test",
"life is a wonderful gift", NULL);
bonobo_pbclient_set (
pb, NULL,
"boolean-test", TC_CORBA_boolean, FALSE,
"long-test", TC_CORBA_long, 3,
"float-test", TC_CORBA_float, 0.00001,
"double-test", TC_CORBA_double, 2.0001,
"string-test", TC_CORBA_string, "you are a precious flower",
NULL);
{
CORBA_any a;
CORBA_boolean b = TRUE;
a._type = TC_CORBA_boolean;
a._value = &b;
bonobo_pbclient_set_value_async
(pb, "boolean-test", &a, NULL);
}
bonobo_main_quit ();
return FALSE;
}
int
main (int argc, char **argv)
{
CORBA_ORB orb;
CORBA_exception_init (&ev);
if (!bonobo_init (&argc, argv))
g_error ("Could not initialize Bonobo");
orb = bonobo_orb ();
{
int size;
char ior [1024];
FILE *infile = fopen ("iorfile","rb");
if (!infile)
g_error ("Start the server before running the client");
size = fread (ior,1,1024,infile);
fclose (infile);
ior [size] = '\0'; /* insure that string is terminated correctly */
pb = CORBA_ORB_string_to_object (orb, ior, &ev);
g_assert (ev._major == CORBA_NO_EXCEPTION);
}
if (pb == CORBA_OBJECT_NIL ||
CORBA_Object_non_existent (pb, &ev)) {
g_error ("Could not bind to PropertyBag object");
return 1;
}
g_idle_add ((GSourceFunc) create_bag_client, NULL);
bonobo_main ();
bonobo_object_release_unref (pb, NULL);
return bonobo_debug_shutdown ();
}
syntax highlighted by Code2HTML, v. 0.9.1