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