]> matita.cs.unibo.it Git - helm.git/blob - helm/gtkmathview-bonobo/test/main.c
* a few adjustments and debugging messages added
[helm.git] / helm / gtkmathview-bonobo / test / main.c
1 #include <config.h>
2 #include <gnome.h>
3 #include <bonobo.h>
4 #include <glib.h>
5
6 #include "control-factory.h"
7
8 static GtkWidget *control;
9
10 typedef enum{LOAD_STREAM,LOAD_FILE,NONE}FileSelectionOp;
11
12 struct FileSelectionInfo {
13   BonoboWidget* control;
14   GtkWidget* widget;
15
16   FileSelectionOp Operations;
17 };
18
19
20 static struct FileSelectionInfo file_selection_info = { NULL, NULL,NONE};
21
22 static void
23 file_selection_destroy_cb (GtkWidget *widget,gpointer data)
24 {
25         file_selection_info.widget = NULL;
26 }
27
28
29 static void
30 load_through_persist_file (const gchar *filename,
31                                            Bonobo_PersistFile pfile)
32 {
33         CORBA_Environment ev;
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);
39 }
40
41 static void 
42 load_through_persist_stream(const gchar *filename,
43                             Bonobo_PersistStream pstream)
44 {
45     BonoboObject *stream = NULL;
46     CORBA_Environment ev;
47     CORBA_exception_init (&ev);
48
49 #if 0
50     stream = bonobo_stream_open ("fs", filename,
51                                  Bonobo_Storage_READ, 0);
52 #endif
53
54     /*if (stream == NULL) 
55     {
56         g_warning ("Couldn't load `%s'\n", filename);
57     } else*/ {
58         Bonobo_Stream corba_stream;
59         corba_stream = bonobo_object_corba_objref (stream);
60         Bonobo_Stream_truncate (corba_stream, 0, &ev);
61         Bonobo_PersistStream_load (pstream, corba_stream, "application/mathml+xml", &ev);
62     }
63     Bonobo_Unknown_unref (pstream, &ev);
64     CORBA_Object_release (pstream, &ev);
65     CORBA_exception_free (&ev);
66 }
67
68 static void
69 file_selection_ok_cb (GtkWidget *widget,
70                       gpointer data)
71 {
72   CORBA_Object interface;
73   const gchar *interface_name;
74   CORBA_Environment ev;
75
76   if (file_selection_info.Operations == LOAD_FILE)
77             interface_name = "IDL:Bonobo/PersistFile:1.0";
78   else if(file_selection_info.Operations == LOAD_STREAM)
79       interface_name = "IDL:Bonobo/PersistStream:1.0";
80   else printf("failed to get operation type\n");
81
82   CORBA_exception_init (&ev);
83   interface = Bonobo_Unknown_queryInterface (bonobo_widget_get_objref (file_selection_info.control),
84                                              interface_name, &ev);
85   CORBA_exception_free (&ev);
86
87   if (interface == CORBA_OBJECT_NIL)
88     {
89       g_warning ("The Control does not seem to support `%s'.", interface_name);
90     } 
91   else  
92     {
93        const gchar *fname;
94        fname = gtk_file_selection_get_filename
95        (GTK_FILE_SELECTION (file_selection_info.widget));
96        switch (file_selection_info.Operations) {
97            case LOAD_STREAM:
98              load_through_persist_stream (fname, interface);
99              break;
100            case LOAD_FILE:
101                load_through_persist_file (fname, interface);
102                break;
103        }
104     }
105   
106   gtk_widget_destroy (file_selection_info.widget);
107 }
108
109 static void
110 open_dialog (BonoboWindow *app,
111              FileSelectionOp operation)
112 {
113   GtkWidget    *widget;
114   BonoboWidget *control;
115
116   control = BONOBO_WIDGET (bonobo_window_get_contents (app));
117
118   if (file_selection_info.widget != NULL) {
119     gdk_window_show (GTK_WIDGET (file_selection_info.widget)->window);
120     return;
121   }
122
123   if(operation == LOAD_STREAM)
124       widget = gtk_file_selection_new(_("Open Stream...."));
125   if(operation == LOAD_FILE)
126       widget = gtk_file_selection_new (_("Open file..."));
127
128   gtk_window_set_transient_for (GTK_WINDOW (widget),
129                                 GTK_WINDOW (app));
130
131   file_selection_info.widget = widget;
132   file_selection_info.control = control;
133   file_selection_info.Operations = operation;
134
135   g_signal_connect_object (GTK_FILE_SELECTION (widget)->cancel_button,
136                            "clicked", G_CALLBACK (gtk_widget_destroy), widget, G_CONNECT_AFTER);
137   
138   g_signal_connect (GTK_FILE_SELECTION (widget)->ok_button, "clicked", G_CALLBACK (file_selection_ok_cb), NULL);
139   
140   g_signal_connect (file_selection_info.widget, "destroy", G_CALLBACK (file_selection_destroy_cb), NULL);
141
142   gtk_widget_show (file_selection_info.widget);
143 }
144
145 /* "Open through persist file" dialog.  */
146 static void
147 open_through_persist_file_cb (GtkWidget *widget,
148                               gpointer data)
149 {
150   open_dialog (BONOBO_WINDOW (data),LOAD_FILE);
151 }
152
153 static void 
154 open_through_persist_stream_cb(GtkWidget *widget,
155                                gpointer data)
156 {
157     open_dialog(BONOBO_WINDOW(data),LOAD_STREAM);
158 }
159
160 static void
161 exit_cb (GtkWidget *widget,
162          gpointer data)
163 {
164   gtk_widget_destroy (GTK_WIDGET (data));
165   bonobo_main_quit ();
166 }
167
168 static void 
169 get_size(GtkWidget *widget,
170                 gpointer data)
171 {
172     gint width,height;
173     BonoboWidget* control;
174     BonoboControlFrame* control_frame;
175
176         Bonobo_PropertyBag prop_bag;
177
178     control = BONOBO_WIDGET (bonobo_window_get_contents (BONOBO_WINDOW (data)));
179     control_frame = bonobo_widget_get_control_frame(BONOBO_WIDGET(control));
180     prop_bag = bonobo_control_frame_get_control_property_bag(control_frame, NULL);
181
182         width = bonobo_pbclient_get_long(prop_bag,"width",NULL);
183     height = bonobo_pbclient_get_long(prop_bag,"height",NULL);
184     
185     printf("Width: %d Height: %d\n",width,height);
186     
187     bonobo_object_release_unref (prop_bag,NULL);
188
189 };
190
191 static void
192 get_top(GtkWidget *widget,
193         gpointer data)
194 {
195     gint top_x,top_y;
196     BonoboWidget* control;
197     BonoboControlFrame* control_frame;
198     Bonobo_PropertyBag prop_bag;
199
200     control = BONOBO_WIDGET(bonobo_window_get_contents(BONOBO_WINDOW(data)));
201     control_frame = bonobo_widget_get_control_frame(BONOBO_WIDGET(control));
202     prop_bag = bonobo_control_frame_get_control_property_bag(control_frame,NULL);
203
204     top_x = bonobo_pbclient_get_long(prop_bag,"top_x",NULL);
205     top_y = bonobo_pbclient_get_long(prop_bag,"top_y",NULL);
206
207     printf("Top X: %d ,Top Y: %d\n",top_x,top_y);
208
209     bonobo_object_release_unref(prop_bag,NULL);
210 }
211
212 static void 
213 get_font_size(GtkWidget *widget,
214               gpointer data)
215 {
216     gint font_size;
217     BonoboWidget* control;
218     BonoboControlFrame* control_frame;
219     Bonobo_PropertyBag prop_bag;
220
221     control = BONOBO_WIDGET(bonobo_window_get_contents(BONOBO_WINDOW(data)));
222     control_frame = bonobo_widget_get_control_frame(BONOBO_WIDGET(control));
223     prop_bag = bonobo_control_frame_get_control_property_bag(control_frame,NULL);
224
225     font_size = bonobo_pbclient_get_long(prop_bag,"font_size",NULL);
226
227     printf("FontSize : %d\n",font_size);
228
229     bonobo_object_release_unref(prop_bag,NULL);
230 }
231
232 static void 
233 get_antialiasing(GtkWidget *widget,
234                  gpointer data)
235 {
236     gboolean antialiasing;
237     BonoboWidget* control;
238     BonoboControlFrame* control_frame;
239     Bonobo_PropertyBag prop_bag;
240
241     control = BONOBO_WIDGET(bonobo_window_get_contents(BONOBO_WINDOW(data)));
242     control_frame = bonobo_widget_get_control_frame(BONOBO_WIDGET(control));
243     prop_bag = bonobo_control_frame_get_control_property_bag(control_frame,NULL);
244
245     antialiasing = bonobo_pbclient_get_boolean(prop_bag,"anti_aliasing",NULL);
246
247     if(antialiasing == TRUE)
248         printf("Antialiasing is set\n");
249     else if(antialiasing == FALSE)
250         printf("Antialiasing is not set\n");
251     
252     bonobo_object_release_unref(prop_bag,NULL);
253 }
254
255 static void 
256 get_transparency(GtkWidget *widget,
257                  gpointer data)
258 {
259     gboolean transparency;
260     BonoboWidget* control;
261     BonoboControlFrame* control_frame;
262     Bonobo_PropertyBag prop_bag;
263
264     control = BONOBO_WIDGET(bonobo_window_get_contents(BONOBO_WINDOW(data)));
265     control_frame = bonobo_widget_get_control_frame(BONOBO_WIDGET(control));
266     prop_bag = bonobo_control_frame_get_control_property_bag(control_frame,NULL);
267
268     transparency = bonobo_pbclient_get_boolean(prop_bag,"transparency",NULL);
269
270     if(transparency == TRUE)
271         printf("Transparency is set\n");
272     else if(transparency == FALSE)
273         printf("Transparency is not set\n");
274
275     bonobo_object_release_unref(prop_bag,NULL);
276 }
277
278 static void 
279 get_verbosity(GtkWidget *widget,
280               gpointer data)
281 {
282     gint verbosity;
283     BonoboWidget* control;
284     BonoboControlFrame* control_frame;
285     Bonobo_PropertyBag prop_bag;
286
287     control = BONOBO_WIDGET(bonobo_window_get_contents(BONOBO_WINDOW(data)));
288     control_frame = bonobo_widget_get_control_frame(BONOBO_WIDGET(control));
289     prop_bag = bonobo_control_frame_get_control_property_bag(control_frame,NULL);
290
291     verbosity = bonobo_pbclient_get_long(prop_bag,"verbosity",NULL);
292
293     printf("Verbosity: %d\n",verbosity);
294
295     bonobo_object_release_unref(prop_bag,NULL);
296 }
297
298 static void
299 get_font_manager(GtkWidget *widget,
300                  gpointer data)
301 {
302     gint font_manager;
303     BonoboWidget* control;
304     BonoboControlFrame* control_frame;
305     Bonobo_PropertyBag prop_bag;
306
307     control = BONOBO_WIDGET(bonobo_window_get_contents(BONOBO_WINDOW(data)));
308     control_frame = bonobo_widget_get_control_frame(BONOBO_WIDGET(control));
309     prop_bag = bonobo_control_frame_get_control_property_bag(control_frame,NULL);
310
311     font_manager = bonobo_pbclient_get_long(prop_bag,"font_manager",NULL);
312
313     printf("Font_manager: %d\n",font_manager);
314
315     bonobo_object_release_unref(prop_bag,NULL);
316 }
317
318 static BonoboUIVerb verbs [] = {
319   BONOBO_UI_UNSAFE_VERB ("OpenFile", open_through_persist_file_cb),
320   BONOBO_UI_UNSAFE_VERB ("OpenStream", open_through_persist_stream_cb),
321   BONOBO_UI_UNSAFE_VERB ("Size", get_size),
322   BONOBO_UI_UNSAFE_VERB ("Top", get_top),
323   BONOBO_UI_UNSAFE_VERB ("Font Size", get_font_size),
324   BONOBO_UI_UNSAFE_VERB ("AntiAliasing", get_antialiasing),
325   BONOBO_UI_UNSAFE_VERB ("Transparency", get_transparency),
326   BONOBO_UI_UNSAFE_VERB ("Verbosity", get_verbosity),
327   BONOBO_UI_UNSAFE_VERB ("Font Manager", get_font_manager),
328   BONOBO_UI_UNSAFE_VERB ("FileExit", exit_cb),
329   BONOBO_UI_VERB_END
330 };
331
332 /* A dirty, non-translatable hack */
333 static char ui [] = 
334 "<Root>"
335 "       <commands>"
336 "               <cmd name=\"FileExit\" _label=\"Exit\" _tip=\"Exit the program\""
337 "                pixtype=\"stock\" pixname=\"Exit\" accel=\"*Control*q\"/>"
338 "               <cmd name=\"FormatHTML\" _label=\"HTML mode\" type=\"toggle\" _tip=\"HTML Format switch\"/>"
339 "       </commands>"
340 "       <menu>"
341 "               <submenu name=\"File\" _label=\"_File\">"
342 "                       <menuitem name=\"OpenFile\" verb=\"\" _label=\"Open (PersistFile)\" _tip=\"Open using the PersistFile interface\""
343 "                       pixtype=\"stock\" pixname=\"Open\"/>"
344 "                       <menuitem name=\"SaveFile\" verb=\"\" _label=\"Save (PersistFile)\" _tip=\"Save using the PersistFile interface\""
345 "                       pixtype=\"stock\" pixname=\"Save\"/>"
346 "                       <separator/>"
347 "                       <menuitem name=\"OpenStream\" verb=\"\" _label=\"_Open Stream (PersistStream)\" _tip=\"Open using the PersistStream interface\""
348 "                       pixtype=\"stock\" pixname=\"Open Stream\"/>"
349 "                       <menuitem name=\"SaveStream\" verb=\"\" _label=\"_Save (PersistStream)\" _tip=\"Save using the PersistStream interface\""
350 "                       pixtype=\"stock\" pixname=\"Save\"/>"
351 "                       <menuitem name=\"SavePlainStream\" verb=\"\" _label=\"Save _plain(PersistStream)\" _tip=\"Save using the PersistStream interface\""
352 "                       pixtype=\"stock\" pixname=\"Save\"/>"
353 "                       <separator/>"
354 "                       <menuitem name=\"ViewHTMLSource\" verb=\"\" _label=\"View HTML Source\" _tip=\"View the html source of the current document\"/>"
355 "                       <menuitem name=\"ViewHTMLSourceHTML\" verb=\"\" _label=\"View HTML Output\" _tip=\"View the html source of the current document as html\"/>"
356 "                       <menuitem name=\"ViewPlainSource\" verb=\"\" _label=\"View PLAIN Source\" _tip=\"View the plain text source of the current document\"/>"
357 "                       <separator/>"
358 "                       <menuitem name=\"FileExit\" verb=\"\" _label=\"E_xit\"/>"
359 "               </submenu>"
360 "               <placeholder name=\"Component\"/>"
361 "               <submenu name=\"PropertyBags\" _label=\"Property_Bags\">"
362 "                       <menuitem name=\"Size\" verb=\"\" _label=\"Size(PropertyBag)\" _tip=\"Get size\""
363 "                       pixtype=\"stock\" pixname=\"Get Size\"/>"
364
365 "                       <menuitem name=\"Top\" verb=\"\" _label=\"Top(PropertyBag)\" _tip=\"Get Top\""
366 "                       pixtype=\"stock\" pixname=\"Get Top\"/>"
367
368 "                       <menuitem name=\"Font Size\" verb=\"\" _label=\"Font Size(PropertyBag)\" _tip=\"Get FontSize\""
369 "                       pixtype=\"stock\" pixname=\"Get FontSize\"/>"
370
371 "                       <menuitem name=\"AntiAliasing\" verb=\"\" _label=\"AntiAliasing(PropertyBag)\" _tip=\"Get AntiAliasing\""
372 "                       pixtype=\"stock\" pixname=\"Get AntiAliasing\"/>"
373
374 "                       <menuitem name=\"Transparency\" verb=\"\" _label=\"Transparency(PropertyBag)\" _tip=\"Get Transparency\""
375 "                       pixtype=\"stock\" pixname=\"Get Transparency\"/>"
376
377 "                       <menuitem name=\"Verbosity\" verb=\"\" _label=\"Verbosity(PropertyBag)\" _tip=\"Get Verbosity\""
378 "                       pixtype=\"stock\" pixname=\"Get Verbosity\"/>"
379
380 "                       <menuitem name=\"Font Manager\" verb=\"\" _label=\"Font Manager(PropertyBag)\" _tip=\"Get FontManager\""
381 "                       pixtype=\"stock\" pixname=\"Get FontManager\"/>"
382
383 "                       <separator/>"
384 "                       <placeholder name=\"FormatParagraph\"/>"
385 "               </submenu>"
386 "       </menu>"
387 "       <dockitem name=\"Toolbar\" behavior=\"exclusive\">"
388 "       </dockitem>"
389 "</Root>";
390
391 static int
392 app_delete_cb (GtkWidget *widget, GdkEvent *event, gpointer dummy)
393 {
394   gtk_widget_destroy (GTK_WIDGET (widget));
395   bonobo_main_quit ();
396
397   return FALSE;
398 }
399
400 static guint
401 container_create (void)
402 {
403   GtkWidget *win;
404   GtkWindow *window;
405   BonoboUIComponent *component;
406   BonoboUIContainer *container;
407   CORBA_Environment ev;
408   
409
410   win = bonobo_window_new ("test-editor",
411                            "GtkMathView Control Test");
412   window = GTK_WINDOW (win);
413
414   container = bonobo_window_get_ui_container (BONOBO_WINDOW (win));
415
416   g_signal_connect (window, "delete_event", G_CALLBACK (app_delete_cb), NULL);
417
418   gtk_window_set_default_size (window, 600, 440);
419   gtk_window_set_resizable (window, TRUE);
420
421   component = bonobo_ui_component_new ("test");
422   bonobo_running_context_auto_exit_unref (BONOBO_OBJECT (component));
423
424   bonobo_ui_component_set_container (component, BONOBO_OBJREF (container), NULL);
425   bonobo_ui_component_add_verb_list_with_data (component, verbs, win);
426   bonobo_ui_component_set_translate (component, "/", ui, NULL);
427   
428   control = bonobo_widget_new_control (CONTROL_ID, BONOBO_OBJREF (container));
429
430   if (control == NULL)
431     g_error ("Cannot get `%s'.", CONTROL_ID);
432
433   bonobo_window_set_contents (BONOBO_WINDOW (win), control);
434
435   gtk_widget_show_all (GTK_WIDGET (window));
436
437   CORBA_exception_init (&ev);
438
439   return FALSE;
440 }
441
442 static gint
443 load_file (const gchar *fname)
444 {
445   CORBA_Object interface;
446   CORBA_Environment ev;
447
448   printf ("loading: %s\n", fname);
449   CORBA_exception_init (&ev);
450   interface = Bonobo_Unknown_queryInterface (bonobo_widget_get_objref (BONOBO_WIDGET (control)),
451                                              "IDL:Bonobo/PersistFile:1.0", &ev);
452   CORBA_exception_free (&ev);
453   load_through_persist_file (fname, interface);
454
455   return FALSE;
456 }
457
458 static gint 
459 load_file_stream(const gchar *fname)
460 {
461     CORBA_Object interface;
462     CORBA_Environment ev;
463
464     printf("loading with stream %s\n",fname);
465     CORBA_exception_init(&ev);
466     interface = Bonobo_Unknown_queryInterface(bonobo_widget_get_objref(BONOBO_WIDGET(control)),
467                                               "IDL:Bonobo/PersistStream:1.0",&ev);
468
469     CORBA_exception_free(&ev);
470     load_through_persist_stream(fname,interface);
471
472     return FALSE;
473 }
474
475 /*
476 static void
477 install_property_bag_listener (BonoboWidget *control, BonoboWindow *bonobo_win)
478 {
479     Bonobo_Listener corba_listener;
480     BonoboListener *listener;
481     BonoboControlFrame *control_frame;
482     CORBA_Environment ev;
483     Bonobo_PropertyBag prop_bag;
484
485     CORBA_exception_init(&ev);
486
487     control_frame = bonobo_widget_get_control_frame(BONOBO_WIDGET(control));
488     if(!control_frame)
489         g_error("can't find control frame\n");
490
491     prop_bag = bonobo_control_frame_get_control_property_bag(control_frame, NULL);
492     if(prop_bag == CORBA_OBJECT_NIL)
493         g_error("can't connect to property bag\n");
494
495     //connect a listener to the property bag
496     bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn) width_changed,
497                                             "Bonobo/Property:change:width",NULL,bonobo_win);
498
499     bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn)height_changed,
500                                             "Bonobo/Property:change:height",NULL,bonobo_win);
501     bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn)top_x_changed,
502                                             "Bonobo/Property:change:top_x",NULL,bonobo_win);
503     bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn)top_y_changed,
504                                             "Bonobo/Property:change:top_y",NULL,bonobo_win);
505     bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn)font_size_changed,
506                                             "Bonobo/Property:change:font_size",NULL,bonobo_win);
507     bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn)anti_aliasing_changed,
508                                             "Bonobo/Property:change:anti_aliasing",NULL,bonobo_win);
509     bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn)transparency_changed,
510                                             "Bonobo/Property:change:transparency",NULL,bonobo_win);
511     bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn)verbosity_changed,
512                                             "Bonobo/Property:change:verbosity",NULL,bonobo_win);
513     bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn)font_manager_changed,
514                                             "Bonobo/Property:change:font_manager",NULL,bonobo_win);
515     CORBA_exception_free(&ev);
516 }*/
517
518
519 int
520 main (int argc, char **argv)
521 {
522   gnome_program_init("test-editor", VERSION, LIBGNOMEUI_MODULE, argc, argv, 
523                      GNOME_PROGRAM_STANDARD_PROPERTIES,
524                      GNOME_PARAM_HUMAN_READABLE_NAME, _("GtkMathView Test Container"),                     
525                      NULL);
526
527   bonobo_activate ();
528
529   /* We can't make any CORBA calls unless we're in the main loop.  So we
530      delay creating the container here. */
531   gtk_idle_add ((GtkFunction) container_create, NULL);
532   if (argc > 1 && *argv [argc - 1] != '-')
533     gtk_idle_add ((GtkFunction) load_file, argv [argc - 1]);
534
535   bonobo_activate ();
536   bonobo_main ();
537
538   return bonobo_ui_debug_shutdown ();
539 }