X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fgtkmathview-bonobo%2Fsrc%2Fcontrol-factory.c;h=847d9f4f6106358b2fa0848aba85fa3cef10f208;hb=3f88b5fffc17ecc8b3cb1645f9be846e740c8a3a;hp=5039e34ac2a374c8e8c671b2ba948b5d74d59dd8;hpb=775e2dbe1ee2f56bb3947e1ff85401a7c6c13b4d;p=helm.git diff --git a/helm/gtkmathview-bonobo/src/control-factory.c b/helm/gtkmathview-bonobo/src/control-factory.c index 5039e34ac..847d9f4f6 100644 --- a/helm/gtkmathview-bonobo/src/control-factory.c +++ b/helm/gtkmathview-bonobo/src/control-factory.c @@ -1,252 +1,266 @@ +/* This file is part of GtkMathView-Bonobo, a Bonobo wrapper for GtkMathView. + * Copyright (C) 2003 Luca Padovani + * Pouria Masoudi + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * For more information, please visit the project's home page + * http://helm.cs.unibo.it/gtkmathview-bonobo + * or send an email to + */ + +#include #include #include - #include #include "control-factory.h" +#include "control-data.h" +#include "persist-file.h" +#include "persist-stream.h" +#include "handlers.h" +#include "view.h" -enum { - MATH_VIEW_WIDTH, - MATH_VIEW_HEIGHT, - MATH_VIEW_TOP_X, - MATH_VIEW_TOP_Y, - MATH_VIEW_FONT_SIZE, - MATH_VIEW_ANTI_ALIASING, - MATH_VIEW_TRANSPARENCY, - MATH_VIEW_VERBOSITY, - MATH_VIEW_FONT_MANAGER -} math_args; - - -/*static char * -make_reg_id(const char *iid) -{ - char *id; - id = bonobo_activation_make_registration_id(iid,Display_String(gdk_display)); - return id; -}*/ +enum + { + MATH_VIEW_WIDTH, + MATH_VIEW_HEIGHT, + MATH_VIEW_TOP_X, + MATH_VIEW_TOP_Y, + MATH_VIEW_FONT_SIZE, + MATH_VIEW_VERBOSITY, + MATH_VIEW_ID_NS_URI, + MATH_VIEW_ID_NAME + } math_args; static void -get_prop(BonoboPropertyBag *bag, - BonoboArg *arg, - guint arg_id, +get_prop(BonoboPropertyBag* bag, + BonoboArg* arg, + guint arg_id, CORBA_Environment *ev, - gpointer user_data) + gpointer user_data) { - GtkMathView *math_view; - - g_return_if_fail(GTK_IS_MATH_VIEW(user_data)); + GtkMathViewControlData* control_data = user_data; + g_assert(control_data != NULL); - math_view = GTK_MATH_VIEW(user_data); - - switch(arg_id) + switch (arg_id) { case MATH_VIEW_WIDTH: - { - gint i = gtk_math_view_get_width(math_view); - g_assert(arg->_type == BONOBO_ARG_INT); - BONOBO_ARG_SET_INT(arg,i); - } + BONOBO_ARG_SET_INT(arg, gtk_math_view_get_width(control_data->math_view)); break; case MATH_VIEW_HEIGHT: - { - guint i = gtk_math_view_get_height(math_view); - - g_assert(arg->_type == BONOBO_ARG_INT); - BONOBO_ARG_SET_INT(arg,i); - } + BONOBO_ARG_SET_INT(arg, gtk_math_view_get_height(control_data->math_view)); break; case MATH_VIEW_TOP_X: { - guint new_top_y,new_top_x; - - g_assert(arg->_type == BONOBO_ARG_INT); - gtk_math_view_get_top(math_view,&new_top_x, &new_top_y); - BONOBO_ARG_SET_INT(arg,new_top_x); + guint top_x; + gtk_math_view_get_top(control_data->math_view, &top_x, NULL); + BONOBO_ARG_SET_INT(arg, top_x); } break; case MATH_VIEW_TOP_Y: { - guint new_top_y,new_top_x; - - g_assert(arg->_type == BONOBO_ARG_INT); - gtk_math_view_get_top(math_view,&new_top_x,&new_top_y); - BONOBO_ARG_SET_INT(arg,new_top_y); + guint top_y; + gtk_math_view_get_top(control_data->math_view, NULL, &top_y); + BONOBO_ARG_SET_INT(arg, top_y); } break; case MATH_VIEW_FONT_SIZE: - { - guint i = gtk_math_view_get_font_size(math_view); - g_assert(arg->_type == BONOBO_ARG_INT); - - BONOBO_ARG_SET_INT(arg,i); - } + BONOBO_ARG_SET_INT(arg, gtk_math_view_get_font_size(control_data->math_view)); break; - case MATH_VIEW_ANTI_ALIASING: - { - gboolean i = gtk_math_view_get_anti_aliasing(math_view); - g_assert(arg->_type == BONOBO_ARG_BOOLEAN); - - BONOBO_ARG_SET_BOOLEAN(arg,i); - } + case MATH_VIEW_VERBOSITY: + BONOBO_ARG_SET_INT(arg, gtk_math_view_get_log_verbosity(control_data->math_view)); break; - case MATH_VIEW_TRANSPARENCY: + case MATH_VIEW_ID_NS_URI: { - gboolean i = gtk_math_view_get_transparency(math_view); - g_assert(arg->_type == BONOBO_ARG_BOOLEAN); - - BONOBO_ARG_SET_BOOLEAN(arg,i); + gchar* id_ns_uri = gtk_math_view_control_data_get_id_ns_uri(control_data); + BONOBO_ARG_SET_STRING(arg, id_ns_uri); + g_free(id_ns_uri); } break; - case MATH_VIEW_VERBOSITY: + case MATH_VIEW_ID_NAME: { - gint i = gtk_math_view_get_log_verbosity(math_view); - g_assert(arg->_type == BONOBO_ARG_INT); - - BONOBO_ARG_SET_INT(arg,i); - } - break; - case MATH_VIEW_FONT_MANAGER: - {gint i = (gint) gtk_math_view_get_font_manager_type(math_view); - BONOBO_ARG_SET_INT(arg,i); + gchar* id_name = gtk_math_view_control_data_get_id_name(control_data); + BONOBO_ARG_SET_STRING(arg, id_name); + g_free(id_name); } break; default: - g_assert(FALSE); + bonobo_exception_set (ev, ex_Bonobo_PropertyBag_NotFound); + break; } } static void -set_prop(BonoboPropertyBag *bag, - const BonoboArg *arg, - guint arg_id, - CORBA_Environment *ev, - gpointer user_data) +set_prop(BonoboPropertyBag* bag, + const BonoboArg* arg, + guint arg_id, + CORBA_Environment* ev, + gpointer user_data) { - GtkMathView *math_view; - - g_return_if_fail(GTK_IS_MATH_VIEW(user_data)); + GtkMathViewControlData *control_data = user_data; + g_assert(control_data != NULL); - math_view = GTK_MATH_VIEW(user_data); - - switch(arg_id) + switch (arg_id) { - /*case MATH_VIEW_WIDTH: - g_assert(arg->_type == BONOBO_ARG_INT); - - guint i = gtk_math_view_set_width(math_view); - BONOBO_ARG_SET_INT(arg,i); - break; - case MATH_VIEW_HEIGHT: - g_assert(arg->_type == BONOBO_ARG_INT); - - guint i = gtk_math_view_get_height(math_view); - BONOBO_ARG_SET_INT(arg,i); - break;*/ case MATH_VIEW_TOP_X: { guint old_top_y; - g_assert(arg->_type == BONOBO_ARG_INT); - - gtk_math_view_get_top(math_view, NULL, &old_top_y); - gtk_math_view_set_top(math_view, BONOBO_ARG_GET_INT(arg), old_top_y); + gtk_math_view_get_top(control_data->math_view, NULL, &old_top_y); + gtk_math_view_set_top(control_data->math_view, BONOBO_ARG_GET_INT(arg), old_top_y); } break; case MATH_VIEW_TOP_Y: { guint old_top_x; - g_assert(arg->_type == BONOBO_ARG_INT); - - gtk_math_view_get_top(math_view, &old_top_x, NULL); - gtk_math_view_set_top(math_view, BONOBO_ARG_GET_INT(arg), old_top_x); + gtk_math_view_get_top(control_data->math_view, &old_top_x, NULL); + gtk_math_view_set_top(control_data->math_view, BONOBO_ARG_GET_INT(arg), old_top_x); } break; case MATH_VIEW_FONT_SIZE: - { - guint i = gtk_math_view_get_font_size(math_view); - g_assert(arg->_type == BONOBO_ARG_INT); - - BONOBO_ARG_SET_INT(arg,i); - } - break; - case MATH_VIEW_ANTI_ALIASING: - { - gboolean i = gtk_math_view_get_anti_aliasing(math_view); - g_assert(arg->_type == BONOBO_ARG_BOOLEAN); - - BONOBO_ARG_SET_BOOLEAN(arg,i); - } - break; - case MATH_VIEW_TRANSPARENCY: - { - gboolean i = gtk_math_view_get_transparency(math_view); - g_assert(arg->_type == BONOBO_ARG_BOOLEAN); - - BONOBO_ARG_SET_BOOLEAN(arg,i); - } + gtk_math_view_set_font_size(control_data->math_view, BONOBO_ARG_GET_INT(arg)); break; case MATH_VIEW_VERBOSITY: - { - gint i = gtk_math_view_get_log_verbosity(math_view); - g_assert(arg->_type == BONOBO_ARG_INT); - - BONOBO_ARG_SET_INT(arg,i); - } + gtk_math_view_set_log_verbosity(control_data->math_view, BONOBO_ARG_GET_INT(arg)); break; - case MATH_VIEW_FONT_MANAGER: - { - gint i = (gint) gtk_math_view_get_font_manager_type(math_view); - BONOBO_ARG_SET_INT(arg,i); - } + case MATH_VIEW_ID_NS_URI: + gtk_math_view_control_data_set_id_ns_uri(control_data, BONOBO_ARG_GET_STRING(arg)); + break; + case MATH_VIEW_ID_NAME: + gtk_math_view_control_data_set_id_name(control_data, BONOBO_ARG_GET_STRING(arg)); break; default: - g_assert(FALSE); + bonobo_exception_set (ev, ex_Bonobo_PropertyBag_NotFound); + break; } } -static BonoboObject* -gtk_math_view_control_factory(BonoboGenericFactory* factory, const gchar* component_id, gpointer closure) +static void +control_destroy(BonoboObject *object, GtkMathViewControlData *cd) { - BonoboControl *control; - BonoboPropertyBag *prop_bag; + gtk_math_view_control_data_destroy(cd); +} + +static void +gtk_math_view_control_init(BonoboControl *control, GtkWidget *scrolled_window) +{ + GtkMathViewControlData *control_data; GtkWidget *math_view; + Bonobo_UIContainer remote_ui_container; + BonoboUIComponent *ui_component; + + BonoboPropertyBag *prop_bag; BonoboObject *persist_file; - + BonoboObject *persist_stream; + View* view; + math_view = gtk_math_view_new(NULL,NULL); gtk_widget_show(math_view); + + control_data = gtk_math_view_control_data_new((GtkMathView*)math_view); + + g_signal_connect (control, "destroy", G_CALLBACK (control_destroy), control_data); + + gtk_container_add(GTK_CONTAINER (scrolled_window), GTK_WIDGET (control_data->math_view)); - control = bonobo_control_new(math_view); + view = view_new(control_data); + bonobo_object_add_interface(BONOBO_OBJECT(control), BONOBO_OBJECT(view)); persist_file = gtk_math_view_persist_file_new(GTK_MATH_VIEW(math_view)); bonobo_object_add_interface(BONOBO_OBJECT(control), persist_file); - prop_bag = bonobo_property_bag_new(get_prop, set_prop, math_view); + persist_stream = gtk_math_view_persist_stream_new(GTK_MATH_VIEW(math_view)); + bonobo_object_add_interface(BONOBO_OBJECT(control), persist_stream); + + prop_bag = bonobo_property_bag_new(get_prop, set_prop, control_data); bonobo_control_set_properties(control, BONOBO_OBJREF(prop_bag), NULL); - bonobo_property_bag_add(prop_bag,"width",MATH_VIEW_WIDTH,BONOBO_ARG_INT, - NULL,"width",0); - bonobo_property_bag_add(prop_bag,"height",MATH_VIEW_HEIGHT,BONOBO_ARG_INT, - NULL,"height",0); - bonobo_property_bag_add(prop_bag,"top_x",MATH_VIEW_TOP_X,BONOBO_ARG_INT, - NULL,"top_x",0); - bonobo_property_bag_add(prop_bag,"top_y",MATH_VIEW_TOP_Y,BONOBO_ARG_INT, - NULL,"top_y",0); - bonobo_property_bag_add(prop_bag,"font_size",MATH_VIEW_FONT_SIZE,BONOBO_ARG_INT, - NULL,"font_size",0); - bonobo_property_bag_add(prop_bag,"anti_aliasing",MATH_VIEW_ANTI_ALIASING,BONOBO_ARG_BOOLEAN, - NULL,"anti_aliasing",0); - bonobo_property_bag_add(prop_bag,"transparency",MATH_VIEW_TRANSPARENCY,BONOBO_ARG_BOOLEAN, - NULL,"transparency",0); - bonobo_property_bag_add(prop_bag,"verbosity",MATH_VIEW_VERBOSITY,BONOBO_ARG_INT, - NULL,"verbosity",0); - bonobo_property_bag_add(prop_bag,"font_manager",MATH_VIEW_FONT_MANAGER,BONOBO_ARG_NULL, - NULL,"font_manager",0); + bonobo_property_bag_add(prop_bag, "width", + MATH_VIEW_WIDTH, BONOBO_ARG_INT, + NULL, + "Width of the view", 0); + bonobo_property_bag_add(prop_bag, "height", + MATH_VIEW_HEIGHT, BONOBO_ARG_INT, + NULL, + "Height of the view", 0); + bonobo_property_bag_add(prop_bag, "top-x", + MATH_VIEW_TOP_X, BONOBO_ARG_INT, + NULL, + "X coordinate of the top-left corner", 0); + bonobo_property_bag_add(prop_bag, "top-y", + MATH_VIEW_TOP_Y, BONOBO_ARG_INT, + NULL, + "Y coordinate of the top-left corner", 0); + bonobo_property_bag_add(prop_bag, "font-size", + MATH_VIEW_FONT_SIZE, BONOBO_ARG_INT, + NULL, + "Default font size", 0); + bonobo_property_bag_add(prop_bag,"verbosity", + MATH_VIEW_VERBOSITY, BONOBO_ARG_INT, + NULL, + "Verbosity level", 0); + bonobo_property_bag_add(prop_bag, "id-ns-uri", + MATH_VIEW_ID_NS_URI, BONOBO_ARG_STRING, + NULL, + "Namespace URI of ID attribute", 0); + bonobo_property_bag_add(prop_bag, "id-name", + MATH_VIEW_ID_NAME, BONOBO_ARG_STRING, + NULL, + "Name of ID attribute", 0); bonobo_object_unref(BONOBO_OBJECT(prop_bag)); + + g_signal_connect(control,"set_frame", G_CALLBACK(set_frame), control_data); + g_signal_connect(control_data->math_view, "click", G_CALLBACK (click_cb), + control_data); + g_signal_connect(control_data->math_view, "select_begin", G_CALLBACK(select_begin_cb), + control_data); + g_signal_connect(control_data->math_view, "select_over", G_CALLBACK(select_over_cb), + control_data); + g_signal_connect(control_data->math_view, "select_end", G_CALLBACK(select_end_cb), + control_data); + g_signal_connect(control_data->math_view, "select_abort", G_CALLBACK(select_abort_cb), + control_data); +} - return BONOBO_OBJECT(control); +static BonoboObject* +gtk_math_view_control_factory(BonoboGenericFactory* factory, const gchar* component_id, + gpointer closure) +{ + BonoboControl *control; + GtkWidget *scrolled_window; + + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), + GTK_SHADOW_IN); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (scrolled_window), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_widget_show_all (scrolled_window); + + control = bonobo_control_new(scrolled_window); + + if(control) + { + gtk_math_view_control_init(control,scrolled_window); + return BONOBO_OBJECT(control); + } + else + return NULL; } -BONOBO_ACTIVATION_SHLIB_FACTORY (CONTROL_FACTORY_ID, "GtkMathView Factory", gtk_math_view_control_factory, NULL); +BONOBO_ACTIVATION_SHLIB_FACTORY (CONTROL_FACTORY_ID, "GtkMathView Factory", + gtk_math_view_control_factory, NULL);