]> matita.cs.unibo.it Git - helm.git/blob - helm/gtkmathview-bonobo/src/control-factory.c
* added test View interface. It is basically empty but eventually it will host
[helm.git] / helm / gtkmathview-bonobo / src / control-factory.c
1
2 #include <bonobo.h>
3 #include <bonobo/bonobo-shlib-factory.h>
4 #include <gtkmathview.h>
5 #include "control-factory.h"
6 #include "view.h"
7
8 typedef struct _GtkMathViewControlData
9 {
10         GtkMathView *math_view;
11 } GtkMathViewControlData;
12
13 enum {
14   MATH_VIEW_WIDTH,
15   MATH_VIEW_HEIGHT,
16   MATH_VIEW_TOP_X,
17   MATH_VIEW_TOP_Y,
18   MATH_VIEW_FONT_SIZE,
19   MATH_VIEW_ANTI_ALIASING,
20   MATH_VIEW_TRANSPARENCY,
21   MATH_VIEW_VERBOSITY,
22   MATH_VIEW_FONT_MANAGER
23 } math_args;
24
25
26 static GtkMathViewControlData*
27 gtk_math_view_control_data_new(GtkMathView *math_view)
28 {
29         GtkMathViewControlData *cd = g_new(GtkMathViewControlData,1);
30         cd->math_view = math_view;
31         return cd;
32 }
33
34 static void
35 gtk_math_view_control_data_destroy(GtkMathViewControlData* cd)
36 {
37         //gtk_object_unref(cd->math_view);
38         cd->math_view = NULL;
39
40         g_free(cd);
41 }
42
43 static void
44 get_prop(BonoboPropertyBag      *bag,
45          BonoboArg      *arg,
46          guint          arg_id,
47          CORBA_Environment *ev,
48          gpointer       user_data)
49 {
50   GtkMathView *math_view;
51
52   g_return_if_fail(GTK_IS_MATH_VIEW(user_data));
53
54   math_view = GTK_MATH_VIEW(user_data);
55
56   switch(arg_id)
57     {
58     case MATH_VIEW_WIDTH:
59       {
60         gint i = gtk_math_view_get_width(math_view);
61         g_assert(arg->_type == BONOBO_ARG_INT);
62         BONOBO_ARG_SET_INT(arg,i);
63       }
64       break;
65     case MATH_VIEW_HEIGHT:
66       {
67         guint i = gtk_math_view_get_height(math_view);
68                         
69         g_assert(arg->_type == BONOBO_ARG_INT);
70         BONOBO_ARG_SET_INT(arg,i);      
71       }
72       break;
73     case MATH_VIEW_TOP_X:
74       {
75         guint new_top_y,new_top_x;
76                         
77         g_assert(arg->_type == BONOBO_ARG_INT);
78         gtk_math_view_get_top(math_view,&new_top_x, &new_top_y);
79         BONOBO_ARG_SET_INT(arg,new_top_x);
80       }
81       break;
82     case MATH_VIEW_TOP_Y:
83       {
84         guint new_top_y,new_top_x;
85
86         g_assert(arg->_type == BONOBO_ARG_INT);
87         gtk_math_view_get_top(math_view,&new_top_x,&new_top_y);
88         BONOBO_ARG_SET_INT(arg,new_top_y);
89       }         
90       break;
91     case MATH_VIEW_FONT_SIZE:
92       {
93         guint i = gtk_math_view_get_font_size(math_view);
94         g_assert(arg->_type == BONOBO_ARG_INT);
95                         
96         BONOBO_ARG_SET_INT(arg,i);
97       }
98       break;
99     case MATH_VIEW_ANTI_ALIASING:
100       {
101         gboolean i = gtk_math_view_get_anti_aliasing(math_view);
102         g_assert(arg->_type == BONOBO_ARG_BOOLEAN);
103                         
104         BONOBO_ARG_SET_BOOLEAN(arg,i);
105       }
106       break;
107     case MATH_VIEW_TRANSPARENCY:
108       {
109         gboolean i = gtk_math_view_get_transparency(math_view);
110         g_assert(arg->_type == BONOBO_ARG_BOOLEAN);
111                         
112         BONOBO_ARG_SET_BOOLEAN(arg,i);
113       }
114       break;
115     case MATH_VIEW_VERBOSITY:
116       {
117         gint i = gtk_math_view_get_log_verbosity(math_view);
118         g_assert(arg->_type == BONOBO_ARG_INT);
119                         
120         BONOBO_ARG_SET_INT(arg,i);
121       }
122       break;
123     case MATH_VIEW_FONT_MANAGER:
124       {
125           gint i = (gint) gtk_math_view_get_font_manager_type(math_view);
126           BONOBO_ARG_SET_INT(arg,i);
127       }
128       break;
129     default:
130       g_assert(FALSE);
131     }
132 }
133
134 static void
135 set_prop(BonoboPropertyBag      *bag,
136          const BonoboArg        *arg,
137          guint          arg_id,
138          CORBA_Environment *ev,
139          gpointer       user_data)
140 {
141   GtkMathView *math_view;
142
143   g_return_if_fail(GTK_IS_MATH_VIEW(user_data));
144
145   math_view = GTK_MATH_VIEW(user_data);
146
147   switch(arg_id)
148     {
149     case MATH_VIEW_TOP_X:
150       {
151         guint old_top_y;
152         g_assert(arg->_type == BONOBO_ARG_INT);
153                         
154         gtk_math_view_get_top(math_view, NULL, &old_top_y);
155         gtk_math_view_set_top(math_view, BONOBO_ARG_GET_INT(arg), old_top_y);
156       }
157       break;
158     case MATH_VIEW_TOP_Y:
159       {
160         guint old_top_x;
161         g_assert(arg->_type == BONOBO_ARG_INT);
162
163         gtk_math_view_get_top(math_view, &old_top_x, NULL);
164         gtk_math_view_set_top(math_view, BONOBO_ARG_GET_INT(arg), old_top_x);
165       }
166       break;
167     case MATH_VIEW_FONT_SIZE:
168       {
169         guint i = gtk_math_view_get_font_size(math_view);
170         g_assert(arg->_type == BONOBO_ARG_INT);
171                         
172         BONOBO_ARG_SET_INT(arg,i);
173       }
174       break;
175     case MATH_VIEW_ANTI_ALIASING:
176       {
177         gboolean i = gtk_math_view_get_anti_aliasing(math_view);
178         g_assert(arg->_type == BONOBO_ARG_BOOLEAN);
179                         
180         BONOBO_ARG_SET_BOOLEAN(arg,i);
181       }
182       break;
183     case MATH_VIEW_TRANSPARENCY:
184       {
185         gboolean i = gtk_math_view_get_transparency(math_view);
186         g_assert(arg->_type == BONOBO_ARG_BOOLEAN);
187                         
188         BONOBO_ARG_SET_BOOLEAN(arg,i);
189       }
190       break;
191     case MATH_VIEW_VERBOSITY:
192       {
193         gint i = gtk_math_view_get_log_verbosity(math_view);
194         g_assert(arg->_type == BONOBO_ARG_INT);
195                         
196         BONOBO_ARG_SET_INT(arg,i);
197       }
198       break;
199     case MATH_VIEW_FONT_MANAGER:
200       {
201         gint i = (gint) gtk_math_view_get_font_manager_type(math_view);
202         BONOBO_ARG_SET_INT(arg,i);
203       }
204       break;
205     default:
206       bonobo_exception_set (ev, ex_Bonobo_PropertyBag_NotFound);
207       break;
208     }
209 }
210
211 static void 
212 control_destroy(BonoboObject *object,GtkMathViewControlData *cd)
213 {
214         gtk_math_view_control_data_destroy(cd);
215 }
216
217 static void 
218 set_frame(BonoboControl *control,gpointer data)
219 {
220     Bonobo_UIContainer remote_ui_container;
221     BonoboUIComponent *ui_component;
222     GtkMathViewControlData *control_data;
223     GtkWidget *scrolled_window;
224     Bonobo_ControlFrame frame;
225     
226     control_data = (GtkMathViewControlData *) data;
227 }
228
229 static void 
230 gtk_math_view_control_init(BonoboControl *control,GtkWidget *scrolled_window)
231 {
232   GtkMathViewControlData *control_data;
233   GtkWidget *math_view;
234   Bonobo_UIContainer remote_ui_container;
235   BonoboUIComponent *ui_component;
236   
237   BonoboPropertyBag *prop_bag;
238   BonoboObject *persist_file;
239   BonoboObject *persist_stream;
240   View* view;
241
242   math_view = gtk_math_view_new(NULL,NULL);
243   gtk_widget_show(math_view);
244   
245   control_data = gtk_math_view_control_data_new((GtkMathView*)math_view);
246   g_signal_connect (control, "destroy", G_CALLBACK (control_destroy), control_data);
247   
248   gtk_container_add(GTK_CONTAINER (scrolled_window), GTK_WIDGET (control_data->math_view));
249
250   view = view_new();
251   bonobo_object_add_interface(BONOBO_OBJECT(control), BONOBO_OBJECT(view));
252
253   persist_file = gtk_math_view_persist_file_new(GTK_MATH_VIEW(math_view));
254   bonobo_object_add_interface(BONOBO_OBJECT(control), persist_file);
255
256   persist_stream = gtk_math_view_persist_stream_new(GTK_MATH_VIEW(math_view));
257   bonobo_object_add_interface(BONOBO_OBJECT(control), persist_stream);
258
259   prop_bag = bonobo_property_bag_new(get_prop, set_prop, math_view);
260   bonobo_control_set_properties(control, BONOBO_OBJREF(prop_bag), NULL);
261         
262   bonobo_property_bag_add(prop_bag,"width",MATH_VIEW_WIDTH,BONOBO_ARG_INT,
263                           NULL,"width",0);
264   bonobo_property_bag_add(prop_bag,"height",MATH_VIEW_HEIGHT,BONOBO_ARG_INT,
265                           NULL,"height",0);
266   bonobo_property_bag_add(prop_bag,"top_x",MATH_VIEW_TOP_X,BONOBO_ARG_INT,
267                           NULL,"top_x",0);
268   bonobo_property_bag_add(prop_bag,"top_y",MATH_VIEW_TOP_Y,BONOBO_ARG_INT,
269                           NULL,"top_y",0);
270   bonobo_property_bag_add(prop_bag,"font_size",MATH_VIEW_FONT_SIZE,BONOBO_ARG_INT,
271                           NULL,"font_size",0);
272   bonobo_property_bag_add(prop_bag,"anti_aliasing",MATH_VIEW_ANTI_ALIASING,BONOBO_ARG_BOOLEAN,
273                           NULL,"anti_aliasing",0);
274   bonobo_property_bag_add(prop_bag,"transparency",MATH_VIEW_TRANSPARENCY,BONOBO_ARG_BOOLEAN,
275                           NULL,"transparency",0);
276   bonobo_property_bag_add(prop_bag,"verbosity",MATH_VIEW_VERBOSITY,BONOBO_ARG_INT,
277                           NULL,"verbosity",0);
278   bonobo_property_bag_add(prop_bag,"font_manager",MATH_VIEW_FONT_MANAGER,BONOBO_ARG_INT,
279                           NULL,"font_manager",0);
280
281   bonobo_object_unref(BONOBO_OBJECT(prop_bag));
282   
283   g_signal_connect(control,"set_frame",G_CALLBACK(set_frame),control_data);
284 }
285
286 static BonoboObject*
287 gtk_math_view_control_factory(BonoboGenericFactory* factory, const gchar* component_id, gpointer closure)
288 {
289   BonoboControl *control;
290   GtkWidget *scrolled_window;
291   
292   scrolled_window = gtk_scrolled_window_new (NULL, NULL);
293   gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_IN);
294   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
295   gtk_widget_show_all (scrolled_window);
296   
297   control = bonobo_control_new(scrolled_window);
298
299   if(control)
300   {
301           gtk_math_view_control_init(control,scrolled_window);
302           return BONOBO_OBJECT(control);
303   }
304   else
305           return NULL;
306 }
307
308 BONOBO_ACTIVATION_SHLIB_FACTORY (CONTROL_FACTORY_ID, "GtkMathView Factory", gtk_math_view_control_factory, NULL);
309