]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/gtkmathview-bonobo/src/control-factory.c
* changed name to control factory
[helm.git] / helm / gtkmathview-bonobo / src / control-factory.c
diff --git a/helm/gtkmathview-bonobo/src/control-factory.c b/helm/gtkmathview-bonobo/src/control-factory.c
new file mode 100644 (file)
index 0000000..3b24af7
--- /dev/null
@@ -0,0 +1,269 @@
+
+#include <bonobo.h>
+
+#if 1
+#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;
+
+
+/*static char *
+make_reg_id(const char *iid)
+{
+       char *id;
+       id = bonobo_activation_make_registration_id(iid,Display_String(gdk_display));
+       return id;
+}*/
+
+static void
+get_prop(BonoboPropertyBag     *bag,
+        BonoboArg      *arg,
+        guint          arg_id,
+        CORBA_Environment *ev,
+        gpointer       user_data)
+{
+  GtkMathView *math_view;
+
+  g_return_if_fail(GTK_IS_MATH_VIEW(user_data));
+
+  math_view = GTK_MATH_VIEW(user_data);
+
+  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);
+      }
+      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);      
+      }
+      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);
+      }
+      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);
+      }                
+      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);
+      }
+      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);
+      }
+      break;
+    case MATH_VIEW_FONT_MANAGER:
+      {gint i = (gint) gtk_math_view_get_font_manager_type(math_view);
+      BONOBO_ARG_SET_INT(arg,i);
+      }
+      break;
+    default:
+      g_assert(FALSE);
+    }
+}
+
+static void
+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));
+
+  math_view = GTK_MATH_VIEW(user_data);
+
+  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);
+      }
+      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);
+      }
+      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);
+      }
+      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);
+      }
+      break;
+    case MATH_VIEW_FONT_MANAGER:
+      {
+       gint i = (gint) gtk_math_view_get_font_manager_type(math_view);
+       BONOBO_ARG_SET_INT(arg,i);
+      }
+      break;
+    default:
+      g_assert(FALSE);
+    }
+}
+
+static BonoboControl*
+instantiate_func(void)
+{
+  BonoboControl *control;
+  GtkWidget *math_view;
+  BonoboPropertyBag *prop_bag;
+       
+  math_view = gtk_math_view_new(NULL,NULL);
+
+  gtk_widget_show(math_view);
+
+  control = bonobo_control_new(math_view);
+
+  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,
+                         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);
+  return control;
+}
+
+static void 
+notify_property_bag(GtkMathView *math_view,gpointer data)
+{
+  BonoboPropertyBag *prop_bag;
+  BonoboArg    *arg;
+
+  g_return_if_fail(BONOBO_IS_PROPERTY_BAG(data));
+  prop_bag = BONOBO_PROPERTY_BAG(data);
+
+  //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_property_bag_notify_listeners(prop_bag,);
+}