static GtkWidget * control_create (GbWidgetNewData * data, char *obj_id, Bonobo_UIContainer uic) { GtkWidget *widget; BonoboControlFrame *cf; Bonobo_PropertyBag pb; g_return_val_if_fail (obj_id != NULL, NULL); widget = bonobo_widget_new_control (obj_id, uic); g_return_val_if_fail (widget != NULL, NULL); cf = bonobo_widget_get_control_frame (BONOBO_WIDGET (widget)); if (!cf) { g_warning ("Control has no frame!"); gtk_widget_destroy (widget); return NULL; } pb = bonobo_control_frame_get_control_property_bag (cf, NULL); gtk_object_set_data (GTK_OBJECT (widget), GladePropertyBagKey, pb); gtk_object_set_data (GTK_OBJECT (widget), Moniker, g_strdup (obj_id)); /* Make sure the GbWidget for this control is created & registered, and set the real GbWidget for this control. */ data->widget_data->gbwidget = control_get_gb_widget (obj_id); return widget; }
/** * peacock_util_deactivate_bonobo_control: * @control: * * Complementary to above function. **/ void peacock_util_deactivate_bonobo_control (BonoboWidget *control) { BonoboControlFrame *frame; frame = bonobo_widget_get_control_frame (control); bonobo_control_frame_set_autoactivate (frame, FALSE); bonobo_control_frame_control_deactivate (frame); }
static void set_data_and_props (SunOneInvitationList *list, int row) { SunOneInvitationListPrivate *priv = list->priv; BonoboControlFrame *control_frame; Bonobo_PropertyBag prop_bag; ECalComponent *comp; icalcomponent *top_level; char *string; CORBA_Environment ev; if (row == -1) { set_data (BONOBO_WIDGET (priv->control), ""); return; } comp = sunone_invitation_list_model_get_comp (priv->model, row); if (!comp) return; /* Set the from address on the control */ control_frame = bonobo_widget_get_control_frame (BONOBO_WIDGET (priv->control)); prop_bag = bonobo_control_frame_get_control_property_bag (control_frame, NULL); if (prop_bag != CORBA_OBJECT_NIL){ ECalComponentOrganizer organizer; CORBA_exception_init (&ev); e_cal_component_get_organizer (comp, &organizer); bonobo_property_bag_client_set_value_string (prop_bag, "from_address", organizer.value, &ev); CORBA_exception_init (&ev); bonobo_property_bag_client_set_value_gint (prop_bag, "view_only", 1, &ev); Bonobo_Unknown_unref (prop_bag, &ev); CORBA_exception_free (&ev); } /* Send the icalendar code over */ top_level = toplevel_with_zones (list, comp); string = icalcomponent_as_ical_string_r (top_level); set_data (BONOBO_WIDGET (priv->control), string); g_free (string); icalcomponent_free (top_level); }
/* * Writes the source code needed to create this widget. * You have to output everything necessary to create the widget here, though * there are some convenience functions to help. */ static void gb_bonobo_control_write_source (GtkWidget * widget, GbWidgetWriteSourceData * data) { char *moniker = gtk_object_get_data (GTK_OBJECT (widget), Moniker); BonoboControlFrame *cf; Bonobo_PropertyBag pb; GList *key_list, *names; if (data->create_widget) { /* Currently we don't support BonoboWindow, so it will always be NIL, but if we ever do, then it just needs to set bonobo_uic when it is created. */ source_ensure_decl (data, " Bonobo_UIContainer bonobo_uic = CORBA_OBJECT_NIL;\n"); source_add (data, " %s = bonobo_widget_new_control (%s, bonobo_uic);\n", data->wname, source_make_string (moniker, FALSE)); } gb_widget_write_standard_source (widget, data); cf = bonobo_widget_get_control_frame (BONOBO_WIDGET (widget)); if (!cf) return; pb = bonobo_control_frame_get_control_property_bag (cf, NULL); source_ensure_decl (data, " BonoboControlFrame *bonobo_cf;\n"); source_ensure_decl (data, " Bonobo_PropertyBag bonobo_pb;\n"); source_add (data, " bonobo_cf = bonobo_widget_get_control_frame (BONOBO_WIDGET (%s));\n", data->wname); source_add (data, " bonobo_pb = bonobo_control_frame_get_control_property_bag (bonobo_cf, NULL);\n"); key_list = bonobo_pbclient_get_keys (pb, NULL); for (names = key_list; names; names = names->next) { CORBA_TypeCode tc; tc = bonobo_pbclient_get_type (pb, names->data, NULL); switch (tc->kind) { case CORBA_tk_boolean: { gboolean val = bonobo_pbclient_get_boolean (pb, names->data, NULL); source_add (data, " bonobo_pbclient_set_boolean (bonobo_pb, %s, %s, NULL);\n", source_make_string (names->data, FALSE), val ? "TRUE" : "FALSE"); break; } case CORBA_tk_string: { char *val = bonobo_pbclient_get_string (pb, names->data, NULL); source_add (data, " bonobo_pbclient_set_string (bonobo_pb, %s,", source_make_string (names->data, FALSE)); source_add (data, " %s, NULL);\n", source_make_string (val, data->use_gettext)); g_free (val); break; } case CORBA_tk_ulong: { gulong val = bonobo_pbclient_get_ulong (pb, names->data, NULL); source_add (data, " bonobo_pbclient_set_ulong (bonobo_pb, %s, %lu, NULL);\n", source_make_string (names->data, FALSE), val); break; } case CORBA_tk_long: { glong val = bonobo_pbclient_get_long (pb, names->data, NULL); source_add (data, " bonobo_pbclient_set_long (bonobo_pb, %s, %li, NULL);\n", source_make_string (names->data, FALSE), val); break; } case CORBA_tk_short: { gshort val = bonobo_pbclient_get_short (pb, names->data, NULL); source_add (data, " bonobo_pbclient_set_short (bonobo_pb, %s, %i, NULL);\n", source_make_string (names->data, FALSE), val); break; } case CORBA_tk_ushort: { gushort val = bonobo_pbclient_get_ushort (pb, names->data, NULL); source_add (data, " bonobo_pbclient_set_ushort (bonobo_pb, %s, %u, NULL);\n", source_make_string (names->data, FALSE), val); break; } case CORBA_tk_float: { gfloat val = bonobo_pbclient_get_float (pb, names->data, NULL); source_add (data, " bonobo_pbclient_set_float (bonobo_pb, %s, %g, NULL);\n", source_make_string (names->data, FALSE), val); break; } case CORBA_tk_double: { gdouble val = bonobo_pbclient_get_double (pb, names->data, NULL); source_add (data, " bonobo_pbclient_set_double (bonobo_pb, %s, %g, NULL);\n", source_make_string (names->data, FALSE), val); break; } default: g_warning ("Unhandled type %d", tc->kind); break; } } bonobo_pbclient_free_keys (key_list); }
static GtkWidget * glade_bonobo_widget_new (GladeXML *xml, GType widget_type, GladeWidgetInfo *info) { const gchar *control_moniker = NULL; GtkWidget *widget; GObjectClass *oclass; BonoboControlFrame *cf; Bonobo_PropertyBag pb; gint i; for (i = 0; i < info->n_properties; i++) { if (!strcmp (info->properties[i].name, "moniker")) { control_moniker = info->properties[i].value; break; } } if (!control_moniker) { g_warning (G_STRLOC " BonoboWidget doesn't have moniker property"); return NULL; } widget = bonobo_widget_new_control ( control_moniker, CORBA_OBJECT_NIL); if (!widget) { g_warning (G_STRLOC " unknown bonobo control '%s'", control_moniker); return NULL; } oclass = G_OBJECT_GET_CLASS (widget); cf = bonobo_widget_get_control_frame (BONOBO_WIDGET (widget)); if (!cf) { g_warning ("control '%s' has no frame", control_moniker); gtk_widget_unref (widget); return NULL; } pb = bonobo_control_frame_get_control_property_bag (cf, NULL); if (pb == CORBA_OBJECT_NIL) return widget; for (i = 0; i < info->n_properties; i++) { const gchar *name = info->properties[i].name; const gchar *value = info->properties[i].value; GParamSpec *pspec; if (!strcmp (name, "moniker")) continue; pspec = g_object_class_find_property (oclass, name); if (pspec) { GValue gvalue = { 0 }; if (glade_xml_set_value_from_string(xml, pspec, value, &gvalue)) { g_object_set_property(G_OBJECT(widget), name, &gvalue); g_value_unset(&gvalue); } } else if (pb != CORBA_OBJECT_NIL) { CORBA_TypeCode tc = bonobo_property_bag_client_get_property_type (pb, name, NULL); switch (tc->kind) { case CORBA_tk_boolean: bonobo_property_bag_client_set_value_gboolean (pb, name, value[0] == 'T' || value[0] == 'y', NULL); break; case CORBA_tk_string: bonobo_property_bag_client_set_value_string (pb, name, value, NULL); break; case CORBA_tk_long: bonobo_property_bag_client_set_value_glong (pb, name, strtol (value, NULL,0), NULL); break; case CORBA_tk_float: bonobo_property_bag_client_set_value_gfloat (pb, name, strtod (value, NULL), NULL); break; case CORBA_tk_double: bonobo_property_bag_client_set_value_gdouble (pb, name, strtod (value, NULL), NULL); break; default: g_warning ("Unhandled type %d for `%s'", tc->kind, name); break; } } else { g_warning ("could not handle property `%s'", name); } } bonobo_object_release_unref (pb, NULL); return widget; }