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