6 #include "control-factory.h"
8 static GtkWidget *control;
10 typedef enum{LOAD_STREAM,LOAD_FILE,NONE}FileSelectionOp;
12 struct FileSelectionInfo {
13 BonoboWidget* control;
16 FileSelectionOp Operations;
20 static struct FileSelectionInfo file_selection_info = { NULL, NULL,NONE};
23 file_selection_destroy_cb (GtkWidget *widget,gpointer data)
25 file_selection_info.widget = NULL;
30 load_through_persist_file (const gchar *filename,
31 Bonobo_PersistFile pfile)
34 CORBA_exception_init (&ev);
35 Bonobo_PersistFile_load (pfile, filename, &ev);
36 if (ev._major != CORBA_NO_EXCEPTION)
37 g_warning ("Cannot load.");
38 CORBA_exception_free (&ev);
42 load_through_persist_stream(const gchar *filename,
43 Bonobo_PersistStream pstream)
45 BonoboObject *stream = NULL;
47 CORBA_exception_init (&ev);
51 g_warning ("Couldn't load `%s'\n", filename);
53 Bonobo_Stream corba_stream;
54 //corba_stream = bonobo_object_corba_objref (stream);
55 //Bonobo_Stream_truncate (corba_stream, 0, &ev);
56 Bonobo_PersistStream_load (pstream, corba_stream,"",&ev);
58 Bonobo_Unknown_unref (pstream, &ev);
59 CORBA_Object_release (pstream, &ev);
60 CORBA_exception_free (&ev);
64 file_selection_ok_cb (GtkWidget *widget,
67 CORBA_Object interface;
68 const gchar *interface_name;
71 if (file_selection_info.Operations == LOAD_FILE)
72 interface_name = "IDL:Bonobo/PersistFile:1.0";
73 else if(file_selection_info.Operations == LOAD_STREAM)
74 interface_name = "IDL:Bonobo/PersistStream:1.0";
75 else printf("failed to get operation type\n");
77 CORBA_exception_init (&ev);
78 interface = Bonobo_Unknown_queryInterface (bonobo_widget_get_objref (file_selection_info.control),
80 CORBA_exception_free (&ev);
82 if (interface == CORBA_OBJECT_NIL)
84 g_warning ("The Control does not seem to support `%s'.", interface_name);
89 fname = gtk_file_selection_get_filename
90 (GTK_FILE_SELECTION (file_selection_info.widget));
91 switch (file_selection_info.Operations) {
93 load_through_persist_stream (fname, interface);
96 load_through_persist_file (fname, interface);
101 gtk_widget_destroy (file_selection_info.widget);
105 open_dialog (BonoboWindow *app,
106 FileSelectionOp operation)
109 BonoboWidget *control;
111 control = BONOBO_WIDGET (bonobo_window_get_contents (app));
113 if (file_selection_info.widget != NULL) {
114 gdk_window_show (GTK_WIDGET (file_selection_info.widget)->window);
118 if(operation == LOAD_STREAM)
119 widget = gtk_file_selection_new(_("Open Stream...."));
120 if(operation == LOAD_FILE)
121 widget = gtk_file_selection_new (_("Open file..."));
123 gtk_window_set_transient_for (GTK_WINDOW (widget),
126 file_selection_info.widget = widget;
127 file_selection_info.control = control;
128 file_selection_info.Operations = operation;
130 g_signal_connect_object (GTK_FILE_SELECTION (widget)->cancel_button,
131 "clicked", G_CALLBACK (gtk_widget_destroy), widget, G_CONNECT_AFTER);
133 g_signal_connect (GTK_FILE_SELECTION (widget)->ok_button, "clicked", G_CALLBACK (file_selection_ok_cb), NULL);
135 g_signal_connect (file_selection_info.widget, "destroy", G_CALLBACK (file_selection_destroy_cb), NULL);
137 gtk_widget_show (file_selection_info.widget);
140 /* "Open through persist file" dialog. */
142 open_through_persist_file_cb (GtkWidget *widget,
145 open_dialog (BONOBO_WINDOW (data),LOAD_FILE);
149 open_through_persist_stream_cb(GtkWidget *widget,
152 open_dialog(BONOBO_WINDOW(data),LOAD_STREAM);
156 exit_cb (GtkWidget *widget,
159 gtk_widget_destroy (GTK_WIDGET (data));
164 get_size(GtkWidget *widget,
168 BonoboWidget* control;
169 BonoboControlFrame* control_frame;
171 Bonobo_PropertyBag prop_bag;
173 control = BONOBO_WIDGET (bonobo_window_get_contents (BONOBO_WINDOW (data)));
174 control_frame = bonobo_widget_get_control_frame(BONOBO_WIDGET(control));
175 prop_bag = bonobo_control_frame_get_control_property_bag(control_frame, NULL);
177 width = bonobo_pbclient_get_long(prop_bag,"width",NULL);
178 height = bonobo_pbclient_get_long(prop_bag,"height",NULL);
180 printf("Width: %d Height: %d\n",width,height);
182 bonobo_object_release_unref (prop_bag,NULL);
187 get_top(GtkWidget *widget,
191 BonoboWidget* control;
192 BonoboControlFrame* control_frame;
193 Bonobo_PropertyBag prop_bag;
195 control = BONOBO_WIDGET(bonobo_window_get_contents(BONOBO_WINDOW(data)));
196 control_frame = bonobo_widget_get_control_frame(BONOBO_WIDGET(control));
197 prop_bag = bonobo_control_frame_get_control_property_bag(control_frame,NULL);
199 top_x = bonobo_pbclient_get_long(prop_bag,"top_x",NULL);
200 top_y = bonobo_pbclient_get_long(prop_bag,"top_y",NULL);
202 printf("Top X: %d ,Top Y: %d\n",top_x,top_y);
204 bonobo_object_release_unref(prop_bag,NULL);
208 get_font_size(GtkWidget *widget,
212 BonoboWidget* control;
213 BonoboControlFrame* control_frame;
214 Bonobo_PropertyBag prop_bag;
216 control = BONOBO_WIDGET(bonobo_window_get_contents(BONOBO_WINDOW(data)));
217 control_frame = bonobo_widget_get_control_frame(BONOBO_WIDGET(control));
218 prop_bag = bonobo_control_frame_get_control_property_bag(control_frame,NULL);
220 font_size = bonobo_pbclient_get_long(prop_bag,"font_size",NULL);
222 printf("FontSize : %d\n",font_size);
224 bonobo_object_release_unref(prop_bag,NULL);
228 get_antialiasing(GtkWidget *widget,
231 gboolean antialiasing;
232 BonoboWidget* control;
233 BonoboControlFrame* control_frame;
234 Bonobo_PropertyBag prop_bag;
236 control = BONOBO_WIDGET(bonobo_window_get_contents(BONOBO_WINDOW(data)));
237 control_frame = bonobo_widget_get_control_frame(BONOBO_WIDGET(control));
238 prop_bag = bonobo_control_frame_get_control_property_bag(control_frame,NULL);
240 antialiasing = bonobo_pbclient_get_boolean(prop_bag,"anti_aliasing",NULL);
242 if(antialiasing == TRUE)
243 printf("Antialiasing is set\n");
244 else if(antialiasing == FALSE)
245 printf("Antialiasing is not set\n");
247 bonobo_object_release_unref(prop_bag,NULL);
251 get_transparency(GtkWidget *widget,
254 gboolean transparency;
255 BonoboWidget* control;
256 BonoboControlFrame* control_frame;
257 Bonobo_PropertyBag prop_bag;
259 control = BONOBO_WIDGET(bonobo_window_get_contents(BONOBO_WINDOW(data)));
260 control_frame = bonobo_widget_get_control_frame(BONOBO_WIDGET(control));
261 prop_bag = bonobo_control_frame_get_control_property_bag(control_frame,NULL);
263 transparency = bonobo_pbclient_get_boolean(prop_bag,"transparency",NULL);
265 if(transparency == TRUE)
266 printf("Transparency is set\n");
267 else if(transparency == FALSE)
268 printf("Transparency is not set\n");
270 bonobo_object_release_unref(prop_bag,NULL);
274 get_verbosity(GtkWidget *widget,
278 BonoboWidget* control;
279 BonoboControlFrame* control_frame;
280 Bonobo_PropertyBag prop_bag;
282 control = BONOBO_WIDGET(bonobo_window_get_contents(BONOBO_WINDOW(data)));
283 control_frame = bonobo_widget_get_control_frame(BONOBO_WIDGET(control));
284 prop_bag = bonobo_control_frame_get_control_property_bag(control_frame,NULL);
286 verbosity = bonobo_pbclient_get_long(prop_bag,"verbosity",NULL);
288 printf("Verbosity: %d\n",verbosity);
290 bonobo_object_release_unref(prop_bag,NULL);
294 get_font_manager(GtkWidget *widget,
298 BonoboWidget* control;
299 BonoboControlFrame* control_frame;
300 Bonobo_PropertyBag prop_bag;
302 control = BONOBO_WIDGET(bonobo_window_get_contents(BONOBO_WINDOW(data)));
303 control_frame = bonobo_widget_get_control_frame(BONOBO_WIDGET(control));
304 prop_bag = bonobo_control_frame_get_control_property_bag(control_frame,NULL);
306 font_manager = bonobo_pbclient_get_long(prop_bag,"font_manager",NULL);
308 printf("Font_manager: %d\n",font_manager);
310 bonobo_object_release_unref(prop_bag,NULL);
313 static BonoboUIVerb verbs [] = {
314 BONOBO_UI_UNSAFE_VERB ("OpenFile", open_through_persist_file_cb),
315 BONOBO_UI_UNSAFE_VERB ("OpenStream", open_through_persist_stream_cb),
316 BONOBO_UI_UNSAFE_VERB ("Size", get_size),
317 BONOBO_UI_UNSAFE_VERB ("Top", get_top),
318 BONOBO_UI_UNSAFE_VERB ("Font Size", get_font_size),
319 BONOBO_UI_UNSAFE_VERB ("AntiAliasing", get_antialiasing),
320 BONOBO_UI_UNSAFE_VERB ("Transparency", get_transparency),
321 BONOBO_UI_UNSAFE_VERB ("Verbosity", get_verbosity),
322 BONOBO_UI_UNSAFE_VERB ("Font Manager", get_font_manager),
323 BONOBO_UI_UNSAFE_VERB ("FileExit", exit_cb),
327 /* A dirty, non-translatable hack */
331 " <cmd name=\"FileExit\" _label=\"Exit\" _tip=\"Exit the program\""
332 " pixtype=\"stock\" pixname=\"Exit\" accel=\"*Control*q\"/>"
333 " <cmd name=\"FormatHTML\" _label=\"HTML mode\" type=\"toggle\" _tip=\"HTML Format switch\"/>"
336 " <submenu name=\"File\" _label=\"_File\">"
337 " <menuitem name=\"OpenFile\" verb=\"\" _label=\"Open (PersistFile)\" _tip=\"Open using the PersistFile interface\""
338 " pixtype=\"stock\" pixname=\"Open\"/>"
339 " <menuitem name=\"SaveFile\" verb=\"\" _label=\"Save (PersistFile)\" _tip=\"Save using the PersistFile interface\""
340 " pixtype=\"stock\" pixname=\"Save\"/>"
342 " <menuitem name=\"OpenStream\" verb=\"\" _label=\"_Open Stream (PersistStream)\" _tip=\"Open using the PersistStream interface\""
343 " pixtype=\"stock\" pixname=\"Open Stream\"/>"
344 " <menuitem name=\"SaveStream\" verb=\"\" _label=\"_Save (PersistStream)\" _tip=\"Save using the PersistStream interface\""
345 " pixtype=\"stock\" pixname=\"Save\"/>"
346 " <menuitem name=\"SavePlainStream\" verb=\"\" _label=\"Save _plain(PersistStream)\" _tip=\"Save using the PersistStream interface\""
347 " pixtype=\"stock\" pixname=\"Save\"/>"
349 " <menuitem name=\"ViewHTMLSource\" verb=\"\" _label=\"View HTML Source\" _tip=\"View the html source of the current document\"/>"
350 " <menuitem name=\"ViewHTMLSourceHTML\" verb=\"\" _label=\"View HTML Output\" _tip=\"View the html source of the current document as html\"/>"
351 " <menuitem name=\"ViewPlainSource\" verb=\"\" _label=\"View PLAIN Source\" _tip=\"View the plain text source of the current document\"/>"
353 " <menuitem name=\"FileExit\" verb=\"\" _label=\"E_xit\"/>"
355 " <placeholder name=\"Component\"/>"
356 " <submenu name=\"PropertyBags\" _label=\"Property_Bags\">"
357 " <menuitem name=\"Size\" verb=\"\" _label=\"Size(PropertyBag)\" _tip=\"Get size\""
358 " pixtype=\"stock\" pixname=\"Get Size\"/>"
360 " <menuitem name=\"Top\" verb=\"\" _label=\"Top(PropertyBag)\" _tip=\"Get Top\""
361 " pixtype=\"stock\" pixname=\"Get Top\"/>"
363 " <menuitem name=\"Font Size\" verb=\"\" _label=\"Font Size(PropertyBag)\" _tip=\"Get FontSize\""
364 " pixtype=\"stock\" pixname=\"Get FontSize\"/>"
366 " <menuitem name=\"AntiAliasing\" verb=\"\" _label=\"AntiAliasing(PropertyBag)\" _tip=\"Get AntiAliasing\""
367 " pixtype=\"stock\" pixname=\"Get AntiAliasing\"/>"
369 " <menuitem name=\"Transparency\" verb=\"\" _label=\"Transparency(PropertyBag)\" _tip=\"Get Transparency\""
370 " pixtype=\"stock\" pixname=\"Get Transparency\"/>"
372 " <menuitem name=\"Verbosity\" verb=\"\" _label=\"Verbosity(PropertyBag)\" _tip=\"Get Verbosity\""
373 " pixtype=\"stock\" pixname=\"Get Verbosity\"/>"
375 " <menuitem name=\"Font Manager\" verb=\"\" _label=\"Font Manager(PropertyBag)\" _tip=\"Get FontManager\""
376 " pixtype=\"stock\" pixname=\"Get FontManager\"/>"
379 " <placeholder name=\"FormatParagraph\"/>"
382 " <dockitem name=\"Toolbar\" behavior=\"exclusive\">"
387 app_delete_cb (GtkWidget *widget, GdkEvent *event, gpointer dummy)
389 gtk_widget_destroy (GTK_WIDGET (widget));
396 container_create (void)
400 BonoboUIComponent *component;
401 BonoboUIContainer *container;
402 CORBA_Environment ev;
405 win = bonobo_window_new ("test-editor",
406 "GtkMathView Control Test");
407 window = GTK_WINDOW (win);
409 container = bonobo_window_get_ui_container (BONOBO_WINDOW (win));
411 g_signal_connect (window, "delete_event", G_CALLBACK (app_delete_cb), NULL);
413 gtk_window_set_default_size (window, 600, 440);
414 gtk_window_set_resizable (window, TRUE);
416 component = bonobo_ui_component_new ("test");
417 bonobo_running_context_auto_exit_unref (BONOBO_OBJECT (component));
419 bonobo_ui_component_set_container (component, BONOBO_OBJREF (container), NULL);
420 bonobo_ui_component_add_verb_list_with_data (component, verbs, win);
421 bonobo_ui_component_set_translate (component, "/", ui, NULL);
423 control = bonobo_widget_new_control (CONTROL_ID, BONOBO_OBJREF (container));
426 g_error ("Cannot get `%s'.", CONTROL_ID);
428 bonobo_window_set_contents (BONOBO_WINDOW (win), control);
430 gtk_widget_show_all (GTK_WIDGET (window));
432 CORBA_exception_init (&ev);
438 load_file (const gchar *fname)
440 CORBA_Object interface;
441 CORBA_Environment ev;
443 printf ("loading: %s\n", fname);
444 CORBA_exception_init (&ev);
445 interface = Bonobo_Unknown_queryInterface (bonobo_widget_get_objref (BONOBO_WIDGET (control)),
446 "IDL:Bonobo/PersistFile:1.0", &ev);
447 CORBA_exception_free (&ev);
448 load_through_persist_file (fname, interface);
454 load_file_stream(const gchar *fname)
456 CORBA_Object interface;
457 CORBA_Environment ev;
459 printf("loading with stream %s\n",fname);
460 CORBA_exception_init(&ev);
461 interface = Bonobo_Unknown_queryInterface(bonobo_widget_get_objref(BONOBO_WIDGET(control)),
462 "IDL:Bonobo/PersistStream:1.0",&ev);
464 CORBA_exception_free(&ev);
465 load_through_persist_stream(fname,interface);
472 install_property_bag_listener (BonoboWidget *control, BonoboWindow *bonobo_win)
474 Bonobo_Listener corba_listener;
475 BonoboListener *listener;
476 BonoboControlFrame *control_frame;
477 CORBA_Environment ev;
478 Bonobo_PropertyBag prop_bag;
480 CORBA_exception_init(&ev);
482 control_frame = bonobo_widget_get_control_frame(BONOBO_WIDGET(control));
484 g_error("can't find control frame\n");
486 prop_bag = bonobo_control_frame_get_control_property_bag(control_frame, NULL);
487 if(prop_bag == CORBA_OBJECT_NIL)
488 g_error("can't connect to property bag\n");
490 //connect a listener to the property bag
491 bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn) width_changed,
492 "Bonobo/Property:change:width",NULL,bonobo_win);
494 bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn)height_changed,
495 "Bonobo/Property:change:height",NULL,bonobo_win);
496 bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn)top_x_changed,
497 "Bonobo/Property:change:top_x",NULL,bonobo_win);
498 bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn)top_y_changed,
499 "Bonobo/Property:change:top_y",NULL,bonobo_win);
500 bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn)font_size_changed,
501 "Bonobo/Property:change:font_size",NULL,bonobo_win);
502 bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn)anti_aliasing_changed,
503 "Bonobo/Property:change:anti_aliasing",NULL,bonobo_win);
504 bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn)transparency_changed,
505 "Bonobo/Property:change:transparency",NULL,bonobo_win);
506 bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn)verbosity_changed,
507 "Bonobo/Property:change:verbosity",NULL,bonobo_win);
508 bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn)font_manager_changed,
509 "Bonobo/Property:change:font_manager",NULL,bonobo_win);
510 CORBA_exception_free(&ev);
515 main (int argc, char **argv)
517 gnome_program_init("test-editor", VERSION, LIBGNOMEUI_MODULE, argc, argv,
518 GNOME_PROGRAM_STANDARD_PROPERTIES,
519 GNOME_PARAM_HUMAN_READABLE_NAME, _("GtkMathView Test Container"),
524 /* We can't make any CORBA calls unless we're in the main loop. So we
525 delay creating the container here. */
526 gtk_idle_add ((GtkFunction) container_create, NULL);
527 if (argc > 1 && *argv [argc - 1] != '-')
528 gtk_idle_add ((GtkFunction) load_file, argv [argc - 1]);
533 return bonobo_ui_debug_shutdown ();