]> matita.cs.unibo.it Git - helm.git/blob - helm/gtkmathview-bonobo/src/control-factory.c
* some code cleanup
[helm.git] / helm / gtkmathview-bonobo / src / control-factory.c
1 /* This file is part of GtkMathView-Bonobo, a Bonobo wrapper for GtkMathView.
2  * Copyright (C) 2003 Luca Padovani <lpadovan@cs.unibo.it>
3  *                    Pouria Masoudi <pmasoudi@cs.unibo.it>
4  * 
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  * 
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  * 
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18  *
19  * For more information, please visit the project's home page
20  * http://helm.cs.unibo.it/gtkmathview-bonobo
21  * or send an email to <lpadovan@cs.unibo.it>
22  */
23
24 #include <config.h>
25
26 #include <bonobo.h>
27 #include <bonobo/bonobo-shlib-factory.h>
28 #include <gtkmathview.h>
29
30 #include "control-factory.h"
31 #include "control-data.h"
32 #include "persist-file.h"
33 #include "persist-stream.h"
34 #include "handlers.h"
35 #include "view.h"
36
37 enum
38   {
39     MATH_VIEW_WIDTH,
40     MATH_VIEW_HEIGHT,
41     MATH_VIEW_TOP_X,
42     MATH_VIEW_TOP_Y,
43     MATH_VIEW_FONT_SIZE,
44     MATH_VIEW_VERBOSITY,
45     MATH_VIEW_ID_NS_URI,
46     MATH_VIEW_ID_NAME
47   } math_args;
48
49 static void
50 get_prop(BonoboPropertyBag* bag,
51          BonoboArg* arg,
52          guint arg_id,
53          CORBA_Environment *ev,
54          gpointer user_data)
55 {
56   GtkMathViewControlData* control_data = user_data;
57   g_assert(control_data != NULL);
58
59   switch (arg_id)
60     {
61     case MATH_VIEW_WIDTH:
62       BONOBO_ARG_SET_INT(arg, gtk_math_view_get_width(control_data->math_view));
63       break;
64     case MATH_VIEW_HEIGHT:
65       BONOBO_ARG_SET_INT(arg, gtk_math_view_get_height(control_data->math_view));
66       break;
67     case MATH_VIEW_TOP_X:
68       {
69         guint top_x;
70         gtk_math_view_get_top(control_data->math_view, &top_x, NULL);
71         BONOBO_ARG_SET_INT(arg, top_x);
72       }
73       break;
74     case MATH_VIEW_TOP_Y:
75       {
76         guint top_y;
77         gtk_math_view_get_top(control_data->math_view, NULL, &top_y);
78         BONOBO_ARG_SET_INT(arg, top_y);
79       }         
80       break;
81     case MATH_VIEW_FONT_SIZE:
82       BONOBO_ARG_SET_INT(arg, gtk_math_view_get_font_size(control_data->math_view));
83       break;
84     case MATH_VIEW_VERBOSITY:
85       BONOBO_ARG_SET_INT(arg, gtk_math_view_get_log_verbosity(control_data->math_view));
86       break;
87     case MATH_VIEW_ID_NS_URI:
88       {
89         gchar* id_ns_uri = gtk_math_view_control_data_get_id_ns_uri(control_data);
90         BONOBO_ARG_SET_STRING(arg, id_ns_uri);
91         g_free(id_ns_uri);
92       }
93       break;
94     case MATH_VIEW_ID_NAME:
95       {
96         gchar* id_name = gtk_math_view_control_data_get_id_name(control_data);
97         BONOBO_ARG_SET_STRING(arg, id_name);
98         g_free(id_name);
99       }
100       break;
101     default:
102       bonobo_exception_set (ev, ex_Bonobo_PropertyBag_NotFound);
103       break;
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   GtkMathViewControlData *control_data = user_data;
115   g_assert(control_data != NULL);
116
117   switch (arg_id)
118     {
119     case MATH_VIEW_TOP_X:
120       {
121         guint old_top_y;
122         gtk_math_view_get_top(control_data->math_view, NULL, &old_top_y);
123         gtk_math_view_set_top(control_data->math_view, BONOBO_ARG_GET_INT(arg), old_top_y);
124       }
125       break;
126     case MATH_VIEW_TOP_Y:
127       {
128         guint old_top_x;
129         gtk_math_view_get_top(control_data->math_view, &old_top_x, NULL);
130         gtk_math_view_set_top(control_data->math_view, BONOBO_ARG_GET_INT(arg), old_top_x);
131       }
132       break;
133     case MATH_VIEW_FONT_SIZE:
134       gtk_math_view_set_font_size(control_data->math_view, BONOBO_ARG_GET_INT(arg));
135       break;
136     case MATH_VIEW_VERBOSITY:
137       gtk_math_view_set_log_verbosity(control_data->math_view, BONOBO_ARG_GET_INT(arg));
138       break;
139     case MATH_VIEW_ID_NS_URI:
140       gtk_math_view_control_data_set_id_ns_uri(control_data, BONOBO_ARG_GET_STRING(arg));
141       break;
142     case MATH_VIEW_ID_NAME:
143       gtk_math_view_control_data_set_id_name(control_data, BONOBO_ARG_GET_STRING(arg));
144       break;
145     default:
146       bonobo_exception_set (ev, ex_Bonobo_PropertyBag_NotFound);
147       break;
148     }
149 }
150
151 static void 
152 control_destroy(BonoboObject *object, GtkMathViewControlData *cd)
153 {
154   gtk_math_view_control_data_destroy(cd);
155 }
156
157 static void 
158 gtk_math_view_control_init(BonoboControl *control, GtkWidget *scrolled_window)
159 {
160   GtkMathViewControlData *control_data;
161   GtkWidget *math_view;
162   Bonobo_UIContainer remote_ui_container;
163   BonoboUIComponent *ui_component;
164   
165   BonoboPropertyBag *prop_bag;
166   BonoboObject *persist_file;
167   BonoboObject *persist_stream;
168   View* view;
169
170   math_view = gtk_math_view_new(NULL,NULL);
171   gtk_widget_show(math_view);
172   
173   control_data = gtk_math_view_control_data_new((GtkMathView*)math_view);
174   
175   g_signal_connect (control, "destroy", G_CALLBACK (control_destroy), control_data);
176   
177   gtk_container_add(GTK_CONTAINER (scrolled_window), GTK_WIDGET (control_data->math_view));
178
179   view = view_new(control_data);
180   bonobo_object_add_interface(BONOBO_OBJECT(control), BONOBO_OBJECT(view));
181
182   persist_file = gtk_math_view_persist_file_new(GTK_MATH_VIEW(math_view));
183   bonobo_object_add_interface(BONOBO_OBJECT(control), persist_file);
184
185   persist_stream = gtk_math_view_persist_stream_new(GTK_MATH_VIEW(math_view));
186   bonobo_object_add_interface(BONOBO_OBJECT(control), persist_stream);
187
188   prop_bag = bonobo_property_bag_new(get_prop, set_prop, control_data);
189   bonobo_control_set_properties(control, BONOBO_OBJREF(prop_bag), NULL);
190         
191   bonobo_property_bag_add(prop_bag, "width",
192                           MATH_VIEW_WIDTH, BONOBO_ARG_INT,
193                           NULL,
194                           "Width of the view", 0);
195   bonobo_property_bag_add(prop_bag, "height",
196                           MATH_VIEW_HEIGHT, BONOBO_ARG_INT,
197                           NULL,
198                           "Height of the view", 0);
199   bonobo_property_bag_add(prop_bag, "top-x",
200                           MATH_VIEW_TOP_X, BONOBO_ARG_INT,
201                           NULL,
202                           "X coordinate of the top-left corner", 0);
203   bonobo_property_bag_add(prop_bag, "top-y",
204                           MATH_VIEW_TOP_Y, BONOBO_ARG_INT,
205                           NULL, 
206                           "Y coordinate of the top-left corner", 0);
207   bonobo_property_bag_add(prop_bag, "font-size",
208                           MATH_VIEW_FONT_SIZE, BONOBO_ARG_INT,
209                           NULL,
210                           "Default font size", 0);
211   bonobo_property_bag_add(prop_bag,"verbosity",
212                           MATH_VIEW_VERBOSITY, BONOBO_ARG_INT,
213                           NULL,
214                           "Verbosity level", 0);
215   bonobo_property_bag_add(prop_bag, "id-ns-uri",
216                           MATH_VIEW_ID_NS_URI, BONOBO_ARG_STRING,
217                           NULL,
218                           "Namespace URI of ID attribute", 0);
219   bonobo_property_bag_add(prop_bag, "id-name",
220                           MATH_VIEW_ID_NAME, BONOBO_ARG_STRING,
221                           NULL,
222                           "Name of ID attribute", 0);
223
224   bonobo_object_unref(BONOBO_OBJECT(prop_bag));
225   
226   g_signal_connect(control,"set_frame", G_CALLBACK(set_frame), control_data);
227   g_signal_connect(control_data->math_view, "click", G_CALLBACK (click_cb),
228                    control_data);
229   g_signal_connect(control_data->math_view, "select_begin", G_CALLBACK(select_begin_cb),
230                    control_data);
231   g_signal_connect(control_data->math_view, "select_over", G_CALLBACK(select_over_cb),
232                    control_data);
233   g_signal_connect(control_data->math_view, "select_end", G_CALLBACK(select_end_cb),
234                    control_data);
235   g_signal_connect(control_data->math_view, "select_abort", G_CALLBACK(select_abort_cb),
236                    control_data);
237 }
238
239 static BonoboObject*
240 gtk_math_view_control_factory(BonoboGenericFactory* factory, const gchar* component_id,
241                               gpointer closure)
242 {
243   BonoboControl *control;
244   GtkWidget *scrolled_window;
245   
246   scrolled_window = gtk_scrolled_window_new (NULL, NULL);
247   gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window),
248                                        GTK_SHADOW_IN);
249   gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (scrolled_window),
250                                  GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
251   gtk_widget_show_all (scrolled_window);
252   
253   control = bonobo_control_new(scrolled_window);
254
255   if(control)
256     {
257       gtk_math_view_control_init(control,scrolled_window);
258       return BONOBO_OBJECT(control);
259     }
260   else
261     return NULL;
262 }
263
264 BONOBO_ACTIVATION_SHLIB_FACTORY (CONTROL_FACTORY_ID, "GtkMathView Factory",
265                                  gtk_math_view_control_factory, NULL);
266