]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/gtkmathview-bonobo/src/control-factory.c
* code cleanup
[helm.git] / helm / gtkmathview-bonobo / src / control-factory.c
index 3b24af7eee564c84fde850aa7ac92fd6e6bf6d2f..a209e6854e3e35b15ea11bce6a1884e68b5065ff 100644 (file)
@@ -1,38 +1,31 @@
 
 #include <bonobo.h>
-
-#if 1
+#include <bonobo/bonobo-shlib-factory.h>
 #include <gtkmathview.h>
-#endif
-
-enum {
-  MATH_VIEW_WIDTH,
-  MATH_VIEW_HEIGHT,
-  MATH_VIEW_TOP_X,
-  MATH_VIEW_TOP_Y,
-  MATH_VIEW_TOP,
-  MATH_VIEW_FONT_SIZE,
-  MATH_VIEW_ANTI_ALIASING,
-  MATH_VIEW_TRANSPARENCY,
-  MATH_VIEW_VERBOSITY,
-  MATH_VIEW_FONT_MANAGER
-} math_args;
-
+#include "control-factory.h"
+#include "handlers.h"
+#include "control-data.h"
+#include "view.h"
 
-/*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_ANTI_ALIASING,
+    MATH_VIEW_TRANSPARENCY,
+    MATH_VIEW_VERBOSITY,
+    MATH_VIEW_FONT_MANAGER
+  } math_args;
 
 static void
-get_prop(BonoboPropertyBag     *bag,
-        BonoboArg      *arg,
-        guint          arg_id,
+get_prop(BonoboPropertyBagbag,
+        BonoboArgarg,
+        guint arg_id,
         CORBA_Environment *ev,
-        gpointer       user_data)
+        gpointer user_data)
 {
   GtkMathView *math_view;
 
@@ -40,7 +33,7 @@ get_prop(BonoboPropertyBag    *bag,
 
   math_view = GTK_MATH_VIEW(user_data);
 
-  switch(arg_id)
+  switch (arg_id)
     {
     case MATH_VIEW_WIDTH:
       {
@@ -52,7 +45,6 @@ get_prop(BonoboPropertyBag    *bag,
     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);      
       }
@@ -60,7 +52,6 @@ get_prop(BonoboPropertyBag    *bag,
     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);
@@ -69,7 +60,6 @@ get_prop(BonoboPropertyBag    *bag,
     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);
@@ -79,7 +69,6 @@ get_prop(BonoboPropertyBag    *bag,
       {
        guint i = gtk_math_view_get_font_size(math_view);
        g_assert(arg->_type == BONOBO_ARG_INT);
-                       
        BONOBO_ARG_SET_INT(arg,i);
       }
       break;
@@ -87,7 +76,6 @@ get_prop(BonoboPropertyBag    *bag,
       {
        gboolean i = gtk_math_view_get_anti_aliasing(math_view);
        g_assert(arg->_type == BONOBO_ARG_BOOLEAN);
-                       
        BONOBO_ARG_SET_BOOLEAN(arg,i);
       }
       break;
@@ -95,7 +83,6 @@ get_prop(BonoboPropertyBag    *bag,
       {
        gboolean i = gtk_math_view_get_transparency(math_view);
        g_assert(arg->_type == BONOBO_ARG_BOOLEAN);
-                       
        BONOBO_ARG_SET_BOOLEAN(arg,i);
       }
       break;
@@ -103,13 +90,13 @@ get_prop(BonoboPropertyBag         *bag,
       {
        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);
+      {
+       gint i = (gint) gtk_math_view_get_font_manager_type(math_view);
+       BONOBO_ARG_SET_INT(arg,i);
       }
       break;
     default:
@@ -118,11 +105,11 @@ get_prop(BonoboPropertyBag        *bag,
 }
 
 static void
-set_prop(BonoboPropertyBag     *bag,
-        const BonoboArg        *arg,
-        guint          arg_id,
-        CORBA_Environment *ev,
-        gpointer       user_data)
+set_prop(BonoboPropertyBagbag,
+        const BonoboArgarg,
+        guint arg_id,
+        CORBA_Environmentev,
+        gpointer user_data)
 {
   GtkMathView *math_view;
 
@@ -130,25 +117,12 @@ set_prop(BonoboPropertyBag        *bag,
 
   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);
       }
@@ -157,7 +131,6 @@ set_prop(BonoboPropertyBag  *bag,
       {
        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);
       }
@@ -166,7 +139,6 @@ set_prop(BonoboPropertyBag  *bag,
       {
        guint i = gtk_math_view_get_font_size(math_view);
        g_assert(arg->_type == BONOBO_ARG_INT);
-                       
        BONOBO_ARG_SET_INT(arg,i);
       }
       break;
@@ -174,7 +146,6 @@ set_prop(BonoboPropertyBag  *bag,
       {
        gboolean i = gtk_math_view_get_anti_aliasing(math_view);
        g_assert(arg->_type == BONOBO_ARG_BOOLEAN);
-                       
        BONOBO_ARG_SET_BOOLEAN(arg,i);
       }
       break;
@@ -182,7 +153,6 @@ set_prop(BonoboPropertyBag  *bag,
       {
        gboolean i = gtk_math_view_get_transparency(math_view);
        g_assert(arg->_type == BONOBO_ARG_BOOLEAN);
-                       
        BONOBO_ARG_SET_BOOLEAN(arg,i);
       }
       break;
@@ -190,7 +160,6 @@ set_prop(BonoboPropertyBag  *bag,
       {
        gint i = gtk_math_view_get_log_verbosity(math_view);
        g_assert(arg->_type == BONOBO_ARG_INT);
-                       
        BONOBO_ARG_SET_INT(arg,i);
       }
       break;
@@ -201,69 +170,119 @@ set_prop(BonoboPropertyBag       *bag,
       }
       break;
     default:
-      g_assert(FALSE);
+      bonobo_exceptionset (ev, ex_Bonobo_PropertyBag_NotFound);
+      break;
     }
 }
 
-static BonoboControl*
-instantiate_func(void)
+static void 
+control_destroy(BonoboObject *object, GtkMathViewControlData *cd)
 {
-  BonoboControl *control;
+  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;
-       
-  math_view = gtk_math_view_new(NULL,NULL);
+  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();
+  bonobo_object_add_interface(BONOBO_OBJECT(control), BONOBO_OBJECT(view));
 
-  prop_bag = bonobo_property_bag_new(get_prop, set_prop, math_view);
+  persist_file = gtk_math_view_persist_file_new(GTK_MATH_VIEW(math_view));
+  bonobo_object_add_interface(BONOBO_OBJECT(control), persist_file);
+
+  persist_stream = gtk_math_view_persist_stream_new(GTK_MATH_VIEW(math_view));
+  bonobo_object_add_interface(BONOBO_OBJECT(control), persist_stream);
 
-  bonobo_control_set_properties(control,BONOBO_OBJREF(prop_bag), NULL);
+  prop_bag = bonobo_property_bag_new(get_prop, set_prop, math_view);
+  bonobo_control_set_properties(control, BONOBO_OBJREF(prop_bag), NULL);
        
-  bonobo_property_bag_add(prop_bag,"width",MATH_VIEW_WIDTH,BONOBO_ARG_INT,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  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,
+  bonobo_property_bag_add(prop_bag,"font_manager",
+                         MATH_VIEW_FONT_MANAGER, BONOBO_ARG_INT,
                          NULL,"font_manager",0);
-  return control;
+
+  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);
 }
 
-static void 
-notify_property_bag(GtkMathView *math_view,gpointer data)
+static BonoboObject*
+gtk_math_view_control_factory(BonoboGenericFactory* factory, const gchar* component_id,
+                             gpointer closure)
 {
-  BonoboPropertyBag *prop_bag;
-  BonoboArg    *arg;
+  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);
 
-  g_return_if_fail(BONOBO_IS_PROPERTY_BAG(data));
-  prop_bag = BONOBO_PROPERTY_BAG(data);
+  if(control)
+    {
+      gtk_math_view_control_init(control,scrolled_window);
+      return BONOBO_OBJECT(control);
+    }
+  else
+    return NULL;
+}
 
-  //we use arg to notify the container that somthing has changed
-       
-  arg = bonobo_arg_new(BONOBO_ARG_INT);
-  BONOBO_ARG_SET_INT(arg,0);
+BONOBO_ACTIVATION_SHLIB_FACTORY (CONTROL_FACTORY_ID, "GtkMathView Factory",
+                                gtk_math_view_control_factory, NULL);
 
-  //bonobo_property_bag_notify_listeners(prop_bag,);
-}