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