]> matita.cs.unibo.it Git - helm.git/blob - helm/gtkmathview-bonobo/src/control-factory.c
* added first version of persist stream implementation (not yet working)
[helm.git] / helm / gtkmathview-bonobo / src / control-factory.c
1 #include <bonobo.h>
2 #include <bonobo/bonobo-shlib-factory.h>
3 #include <gtkmathview.h>
4 #include "control-factory.h"
5
6 enum {
7   MATH_VIEW_WIDTH,
8   MATH_VIEW_HEIGHT,
9   MATH_VIEW_TOP_X,
10   MATH_VIEW_TOP_Y,
11   MATH_VIEW_FONT_SIZE,
12   MATH_VIEW_ANTI_ALIASING,
13   MATH_VIEW_TRANSPARENCY,
14   MATH_VIEW_VERBOSITY,
15   MATH_VIEW_FONT_MANAGER
16 } math_args;
17
18
19 /*static char *
20 make_reg_id(const char *iid)
21 {
22         char *id;
23         id = bonobo_activation_make_registration_id(iid,Display_String(gdk_display));
24         return id;
25 }*/
26
27 static void
28 get_prop(BonoboPropertyBag      *bag,
29          BonoboArg      *arg,
30          guint          arg_id,
31          CORBA_Environment *ev,
32          gpointer       user_data)
33 {
34   GtkMathView *math_view;
35
36   g_return_if_fail(GTK_IS_MATH_VIEW(user_data));
37
38   math_view = GTK_MATH_VIEW(user_data);
39
40   switch(arg_id)
41     {
42     case MATH_VIEW_WIDTH:
43       {
44         gint i = gtk_math_view_get_width(math_view);
45         g_assert(arg->_type == BONOBO_ARG_INT);
46         BONOBO_ARG_SET_INT(arg,i);
47       }
48       break;
49     case MATH_VIEW_HEIGHT:
50       {
51         guint i = gtk_math_view_get_height(math_view);
52                         
53         g_assert(arg->_type == BONOBO_ARG_INT);
54         BONOBO_ARG_SET_INT(arg,i);      
55       }
56       break;
57     case MATH_VIEW_TOP_X:
58       {
59         guint new_top_y,new_top_x;
60                         
61         g_assert(arg->_type == BONOBO_ARG_INT);
62         gtk_math_view_get_top(math_view,&new_top_x, &new_top_y);
63         BONOBO_ARG_SET_INT(arg,new_top_x);
64       }
65       break;
66     case MATH_VIEW_TOP_Y:
67       {
68         guint new_top_y,new_top_x;
69
70         g_assert(arg->_type == BONOBO_ARG_INT);
71         gtk_math_view_get_top(math_view,&new_top_x,&new_top_y);
72         BONOBO_ARG_SET_INT(arg,new_top_y);
73       }         
74       break;
75     case MATH_VIEW_FONT_SIZE:
76       {
77         guint i = gtk_math_view_get_font_size(math_view);
78         g_assert(arg->_type == BONOBO_ARG_INT);
79                         
80         BONOBO_ARG_SET_INT(arg,i);
81       }
82       break;
83     case MATH_VIEW_ANTI_ALIASING:
84       {
85         gboolean i = gtk_math_view_get_anti_aliasing(math_view);
86         g_assert(arg->_type == BONOBO_ARG_BOOLEAN);
87                         
88         BONOBO_ARG_SET_BOOLEAN(arg,i);
89       }
90       break;
91     case MATH_VIEW_TRANSPARENCY:
92       {
93         gboolean i = gtk_math_view_get_transparency(math_view);
94         g_assert(arg->_type == BONOBO_ARG_BOOLEAN);
95                         
96         BONOBO_ARG_SET_BOOLEAN(arg,i);
97       }
98       break;
99     case MATH_VIEW_VERBOSITY:
100       {
101         gint i = gtk_math_view_get_log_verbosity(math_view);
102         g_assert(arg->_type == BONOBO_ARG_INT);
103                         
104         BONOBO_ARG_SET_INT(arg,i);
105       }
106       break;
107     case MATH_VIEW_FONT_MANAGER:
108       {
109           gint i = (gint) gtk_math_view_get_font_manager_type(math_view);
110           BONOBO_ARG_SET_INT(arg,i);
111       }
112       break;
113     default:
114       g_assert(FALSE);
115     }
116 }
117
118 static void
119 set_prop(BonoboPropertyBag      *bag,
120          const BonoboArg        *arg,
121          guint          arg_id,
122          CORBA_Environment *ev,
123          gpointer       user_data)
124 {
125   GtkMathView *math_view;
126
127   g_return_if_fail(GTK_IS_MATH_VIEW(user_data));
128
129   math_view = GTK_MATH_VIEW(user_data);
130
131   switch(arg_id)
132     {
133       /*case MATH_VIEW_WIDTH:
134         g_assert(arg->_type == BONOBO_ARG_INT);
135                         
136         guint i = gtk_math_view_set_width(math_view);
137         BONOBO_ARG_SET_INT(arg,i);
138         break;
139         case MATH_VIEW_HEIGHT:
140         g_assert(arg->_type == BONOBO_ARG_INT);
141                         
142         guint i = gtk_math_view_get_height(math_view);
143         BONOBO_ARG_SET_INT(arg,i);      
144         break;*/
145     case MATH_VIEW_TOP_X:
146       {
147         guint old_top_y;
148         g_assert(arg->_type == BONOBO_ARG_INT);
149                         
150         gtk_math_view_get_top(math_view, NULL, &old_top_y);
151         gtk_math_view_set_top(math_view, BONOBO_ARG_GET_INT(arg), old_top_y);
152       }
153       break;
154     case MATH_VIEW_TOP_Y:
155       {
156         guint old_top_x;
157         g_assert(arg->_type == BONOBO_ARG_INT);
158
159         gtk_math_view_get_top(math_view, &old_top_x, NULL);
160         gtk_math_view_set_top(math_view, BONOBO_ARG_GET_INT(arg), old_top_x);
161       }
162       break;
163     case MATH_VIEW_FONT_SIZE:
164       {
165         guint i = gtk_math_view_get_font_size(math_view);
166         g_assert(arg->_type == BONOBO_ARG_INT);
167                         
168         BONOBO_ARG_SET_INT(arg,i);
169       }
170       break;
171     case MATH_VIEW_ANTI_ALIASING:
172       {
173         gboolean i = gtk_math_view_get_anti_aliasing(math_view);
174         g_assert(arg->_type == BONOBO_ARG_BOOLEAN);
175                         
176         BONOBO_ARG_SET_BOOLEAN(arg,i);
177       }
178       break;
179     case MATH_VIEW_TRANSPARENCY:
180       {
181         gboolean i = gtk_math_view_get_transparency(math_view);
182         g_assert(arg->_type == BONOBO_ARG_BOOLEAN);
183                         
184         BONOBO_ARG_SET_BOOLEAN(arg,i);
185       }
186       break;
187     case MATH_VIEW_VERBOSITY:
188       {
189         gint i = gtk_math_view_get_log_verbosity(math_view);
190         g_assert(arg->_type == BONOBO_ARG_INT);
191                         
192         BONOBO_ARG_SET_INT(arg,i);
193       }
194       break;
195     case MATH_VIEW_FONT_MANAGER:
196       {
197         gint i = (gint) gtk_math_view_get_font_manager_type(math_view);
198         BONOBO_ARG_SET_INT(arg,i);
199       }
200       break;
201     default:
202       bonobo_exception_set (ev, ex_Bonobo_PropertyBag_NotFound);
203       break;
204     }
205 }
206
207 static BonoboObject*
208 gtk_math_view_control_factory(BonoboGenericFactory* factory, const gchar* component_id, gpointer closure)
209 {
210   BonoboControl *control;
211   BonoboPropertyBag *prop_bag;
212   GtkWidget *math_view;
213   BonoboObject *persist_file;
214   BonoboObject *persist_stream;
215         
216   math_view = gtk_math_view_new(NULL,NULL);
217   gtk_widget_show(math_view);
218
219   control = bonobo_control_new(math_view);
220
221   persist_file = gtk_math_view_persist_file_new(GTK_MATH_VIEW(math_view));
222   bonobo_object_add_interface(BONOBO_OBJECT(control), persist_file);
223
224   persist_stream = gtk_math_view_persist_stream_new(GTK_MATH_VIEW(math_view));
225   bonobo_object_add_interface(BONOBO_OBJECT(control), persist_stream);
226
227   prop_bag = bonobo_property_bag_new(get_prop, set_prop, math_view);
228   bonobo_control_set_properties(control, BONOBO_OBJREF(prop_bag), NULL);
229         
230   bonobo_property_bag_add(prop_bag,"width",MATH_VIEW_WIDTH,BONOBO_ARG_INT,
231                           NULL,"width",0);
232   bonobo_property_bag_add(prop_bag,"height",MATH_VIEW_HEIGHT,BONOBO_ARG_INT,
233                           NULL,"height",0);
234   bonobo_property_bag_add(prop_bag,"top_x",MATH_VIEW_TOP_X,BONOBO_ARG_INT,
235                           NULL,"top_x",0);
236   bonobo_property_bag_add(prop_bag,"top_y",MATH_VIEW_TOP_Y,BONOBO_ARG_INT,
237                           NULL,"top_y",0);
238   bonobo_property_bag_add(prop_bag,"font_size",MATH_VIEW_FONT_SIZE,BONOBO_ARG_INT,
239                           NULL,"font_size",0);
240   bonobo_property_bag_add(prop_bag,"anti_aliasing",MATH_VIEW_ANTI_ALIASING,BONOBO_ARG_BOOLEAN,
241                           NULL,"anti_aliasing",0);
242   bonobo_property_bag_add(prop_bag,"transparency",MATH_VIEW_TRANSPARENCY,BONOBO_ARG_BOOLEAN,
243                           NULL,"transparency",0);
244   bonobo_property_bag_add(prop_bag,"verbosity",MATH_VIEW_VERBOSITY,BONOBO_ARG_INT,
245                           NULL,"verbosity",0);
246   bonobo_property_bag_add(prop_bag,"font_manager",MATH_VIEW_FONT_MANAGER,BONOBO_ARG_INT,
247                           NULL,"font_manager",0);
248
249   bonobo_object_unref(BONOBO_OBJECT(prop_bag));
250   //bonobo_object_unref(BONOBO_OBJECT(persist_file));
251   //bonobo_object_unref(BONOBO_OBJECT(persist_stream));
252
253   return BONOBO_OBJECT(control);
254 }
255
256 BONOBO_ACTIVATION_SHLIB_FACTORY (CONTROL_FACTORY_ID, "GtkMathView Factory", gtk_math_view_control_factory, NULL);
257