]> matita.cs.unibo.it Git - helm.git/blob - helm/gtkmathview-bonobo/test/main.c
* added first version of persist stream implementation (not yet working)
[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 (stream == NULL) 
50     {
51         g_warning ("Couldn't load `%s'\n", filename);
52     } else*/ {
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);
57     }
58     Bonobo_Unknown_unref (pstream, &ev);
59     CORBA_Object_release (pstream, &ev);
60     CORBA_exception_free (&ev);
61 }
62
63 static void
64 file_selection_ok_cb (GtkWidget *widget,
65                       gpointer data)
66 {
67   CORBA_Object interface;
68   const gchar *interface_name;
69   CORBA_Environment ev;
70
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");
76
77   CORBA_exception_init (&ev);
78   interface = Bonobo_Unknown_queryInterface (bonobo_widget_get_objref (file_selection_info.control),
79                                              interface_name, &ev);
80   CORBA_exception_free (&ev);
81
82   if (interface == CORBA_OBJECT_NIL)
83     {
84       g_warning ("The Control does not seem to support `%s'.", interface_name);
85     } 
86   else  
87     {
88        const gchar *fname;
89        fname = gtk_file_selection_get_filename
90        (GTK_FILE_SELECTION (file_selection_info.widget));
91        switch (file_selection_info.Operations) {
92            case LOAD_STREAM:
93                load_through_persist_stream (fname, interface);
94                break;
95            case LOAD_FILE:
96                load_through_persist_file (fname, interface);
97                break;
98        }
99     }
100   
101   gtk_widget_destroy (file_selection_info.widget);
102 }
103
104 static void
105 open_dialog (BonoboWindow *app,
106              FileSelectionOp operation)
107 {
108   GtkWidget    *widget;
109   BonoboWidget *control;
110
111   control = BONOBO_WIDGET (bonobo_window_get_contents (app));
112
113   if (file_selection_info.widget != NULL) {
114     gdk_window_show (GTK_WIDGET (file_selection_info.widget)->window);
115     return;
116   }
117
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..."));
122
123   gtk_window_set_transient_for (GTK_WINDOW (widget),
124                                 GTK_WINDOW (app));
125
126   file_selection_info.widget = widget;
127   file_selection_info.control = control;
128   file_selection_info.Operations = operation;
129
130   g_signal_connect_object (GTK_FILE_SELECTION (widget)->cancel_button,
131                            "clicked", G_CALLBACK (gtk_widget_destroy), widget, G_CONNECT_AFTER);
132   
133   g_signal_connect (GTK_FILE_SELECTION (widget)->ok_button, "clicked", G_CALLBACK (file_selection_ok_cb), NULL);
134   
135   g_signal_connect (file_selection_info.widget, "destroy", G_CALLBACK (file_selection_destroy_cb), NULL);
136
137   gtk_widget_show (file_selection_info.widget);
138 }
139
140 /* "Open through persist file" dialog.  */
141 static void
142 open_through_persist_file_cb (GtkWidget *widget,
143                               gpointer data)
144 {
145   open_dialog (BONOBO_WINDOW (data),LOAD_FILE);
146 }
147
148 static void 
149 open_through_persist_stream_cb(GtkWidget *widget,
150                                gpointer data)
151 {
152     open_dialog(BONOBO_WINDOW(data),LOAD_STREAM);
153 }
154
155 static void
156 exit_cb (GtkWidget *widget,
157          gpointer data)
158 {
159   gtk_widget_destroy (GTK_WIDGET (data));
160   bonobo_main_quit ();
161 }
162
163 static void 
164 get_size(GtkWidget *widget,
165                 gpointer data)
166 {
167     gint width,height;
168     BonoboWidget* control;
169     BonoboControlFrame* control_frame;
170
171         Bonobo_PropertyBag prop_bag;
172
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);
176
177         width = bonobo_pbclient_get_long(prop_bag,"width",NULL);
178     height = bonobo_pbclient_get_long(prop_bag,"height",NULL);
179     
180     printf("Width: %d Height: %d\n",width,height);
181     
182     bonobo_object_release_unref (prop_bag,NULL);
183
184 };
185
186 static void
187 get_top(GtkWidget *widget,
188         gpointer data)
189 {
190     gint top_x,top_y;
191     BonoboWidget* control;
192     BonoboControlFrame* control_frame;
193     Bonobo_PropertyBag prop_bag;
194
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);
198
199     top_x = bonobo_pbclient_get_long(prop_bag,"top_x",NULL);
200     top_y = bonobo_pbclient_get_long(prop_bag,"top_y",NULL);
201
202     printf("Top X: %d ,Top Y: %d\n",top_x,top_y);
203
204     bonobo_object_release_unref(prop_bag,NULL);
205 }
206
207 static void 
208 get_font_size(GtkWidget *widget,
209               gpointer data)
210 {
211     gint font_size;
212     BonoboWidget* control;
213     BonoboControlFrame* control_frame;
214     Bonobo_PropertyBag prop_bag;
215
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);
219
220     font_size = bonobo_pbclient_get_long(prop_bag,"font_size",NULL);
221
222     printf("FontSize : %d\n",font_size);
223
224     bonobo_object_release_unref(prop_bag,NULL);
225 }
226
227 static void 
228 get_antialiasing(GtkWidget *widget,
229                  gpointer data)
230 {
231     gboolean antialiasing;
232     BonoboWidget* control;
233     BonoboControlFrame* control_frame;
234     Bonobo_PropertyBag prop_bag;
235
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);
239
240     antialiasing = bonobo_pbclient_get_boolean(prop_bag,"anti_aliasing",NULL);
241
242     if(antialiasing == TRUE)
243         printf("Antialiasing is set\n");
244     else if(antialiasing == FALSE)
245         printf("Antialiasing is not set\n");
246     
247     bonobo_object_release_unref(prop_bag,NULL);
248 }
249
250 static void 
251 get_transparency(GtkWidget *widget,
252                  gpointer data)
253 {
254     gboolean transparency;
255     BonoboWidget* control;
256     BonoboControlFrame* control_frame;
257     Bonobo_PropertyBag prop_bag;
258
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);
262
263     transparency = bonobo_pbclient_get_boolean(prop_bag,"transparency",NULL);
264
265     if(transparency == TRUE)
266         printf("Transparency is set\n");
267     else if(transparency == FALSE)
268         printf("Transparency is not set\n");
269
270     bonobo_object_release_unref(prop_bag,NULL);
271 }
272
273 static void 
274 get_verbosity(GtkWidget *widget,
275               gpointer data)
276 {
277     gint verbosity;
278     BonoboWidget* control;
279     BonoboControlFrame* control_frame;
280     Bonobo_PropertyBag prop_bag;
281
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);
285
286     verbosity = bonobo_pbclient_get_long(prop_bag,"verbosity",NULL);
287
288     printf("Verbosity: %d\n",verbosity);
289
290     bonobo_object_release_unref(prop_bag,NULL);
291 }
292
293 static void
294 get_font_manager(GtkWidget *widget,
295                  gpointer data)
296 {
297     gint font_manager;
298     BonoboWidget* control;
299     BonoboControlFrame* control_frame;
300     Bonobo_PropertyBag prop_bag;
301
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);
305
306     font_manager = bonobo_pbclient_get_long(prop_bag,"font_manager",NULL);
307
308     printf("Font_manager: %d\n",font_manager);
309
310     bonobo_object_release_unref(prop_bag,NULL);
311 }
312
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),
324   BONOBO_UI_VERB_END
325 };
326
327 /* A dirty, non-translatable hack */
328 static char ui [] = 
329 "<Root>"
330 "       <commands>"
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\"/>"
334 "       </commands>"
335 "       <menu>"
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\"/>"
341 "                       <separator/>"
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\"/>"
348 "                       <separator/>"
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\"/>"
352 "                       <separator/>"
353 "                       <menuitem name=\"FileExit\" verb=\"\" _label=\"E_xit\"/>"
354 "               </submenu>"
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\"/>"
359
360 "                       <menuitem name=\"Top\" verb=\"\" _label=\"Top(PropertyBag)\" _tip=\"Get Top\""
361 "                       pixtype=\"stock\" pixname=\"Get Top\"/>"
362
363 "                       <menuitem name=\"Font Size\" verb=\"\" _label=\"Font Size(PropertyBag)\" _tip=\"Get FontSize\""
364 "                       pixtype=\"stock\" pixname=\"Get FontSize\"/>"
365
366 "                       <menuitem name=\"AntiAliasing\" verb=\"\" _label=\"AntiAliasing(PropertyBag)\" _tip=\"Get AntiAliasing\""
367 "                       pixtype=\"stock\" pixname=\"Get AntiAliasing\"/>"
368
369 "                       <menuitem name=\"Transparency\" verb=\"\" _label=\"Transparency(PropertyBag)\" _tip=\"Get Transparency\""
370 "                       pixtype=\"stock\" pixname=\"Get Transparency\"/>"
371
372 "                       <menuitem name=\"Verbosity\" verb=\"\" _label=\"Verbosity(PropertyBag)\" _tip=\"Get Verbosity\""
373 "                       pixtype=\"stock\" pixname=\"Get Verbosity\"/>"
374
375 "                       <menuitem name=\"Font Manager\" verb=\"\" _label=\"Font Manager(PropertyBag)\" _tip=\"Get FontManager\""
376 "                       pixtype=\"stock\" pixname=\"Get FontManager\"/>"
377
378 "                       <separator/>"
379 "                       <placeholder name=\"FormatParagraph\"/>"
380 "               </submenu>"
381 "       </menu>"
382 "       <dockitem name=\"Toolbar\" behavior=\"exclusive\">"
383 "       </dockitem>"
384 "</Root>";
385
386 static int
387 app_delete_cb (GtkWidget *widget, GdkEvent *event, gpointer dummy)
388 {
389   gtk_widget_destroy (GTK_WIDGET (widget));
390   bonobo_main_quit ();
391
392   return FALSE;
393 }
394
395 static guint
396 container_create (void)
397 {
398   GtkWidget *win;
399   GtkWindow *window;
400   BonoboUIComponent *component;
401   BonoboUIContainer *container;
402   CORBA_Environment ev;
403   
404
405   win = bonobo_window_new ("test-editor",
406                            "GtkMathView Control Test");
407   window = GTK_WINDOW (win);
408
409   container = bonobo_window_get_ui_container (BONOBO_WINDOW (win));
410
411   g_signal_connect (window, "delete_event", G_CALLBACK (app_delete_cb), NULL);
412
413   gtk_window_set_default_size (window, 600, 440);
414   gtk_window_set_resizable (window, TRUE);
415
416   component = bonobo_ui_component_new ("test");
417   bonobo_running_context_auto_exit_unref (BONOBO_OBJECT (component));
418
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);
422   
423   control = bonobo_widget_new_control (CONTROL_ID, BONOBO_OBJREF (container));
424
425   if (control == NULL)
426     g_error ("Cannot get `%s'.", CONTROL_ID);
427
428   bonobo_window_set_contents (BONOBO_WINDOW (win), control);
429
430   gtk_widget_show_all (GTK_WIDGET (window));
431
432   CORBA_exception_init (&ev);
433
434   return FALSE;
435 }
436
437 static gint
438 load_file (const gchar *fname)
439 {
440   CORBA_Object interface;
441   CORBA_Environment ev;
442
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);
449
450   return FALSE;
451 }
452
453 static gint 
454 load_file_stream(const gchar *fname)
455 {
456     CORBA_Object interface;
457     CORBA_Environment ev;
458
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);
463
464     CORBA_exception_free(&ev);
465     load_through_persist_stream(fname,interface);
466
467     return FALSE;
468 }
469
470 /*
471 static void
472 install_property_bag_listener (BonoboWidget *control, BonoboWindow *bonobo_win)
473 {
474     Bonobo_Listener corba_listener;
475     BonoboListener *listener;
476     BonoboControlFrame *control_frame;
477     CORBA_Environment ev;
478     Bonobo_PropertyBag prop_bag;
479
480     CORBA_exception_init(&ev);
481
482     control_frame = bonobo_widget_get_control_frame(BONOBO_WIDGET(control));
483     if(!control_frame)
484         g_error("can't find control frame\n");
485
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");
489
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);
493
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);
511 }*/
512
513
514 int
515 main (int argc, char **argv)
516 {
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"),                     
520                      NULL);
521
522   bonobo_activate ();
523
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]);
529
530   bonobo_activate ();
531   bonobo_main ();
532
533   return bonobo_ui_debug_shutdown ();
534 }