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