]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/gtkmathview-bonobo/src/view.c
ocaml 3.09 transition
[helm.git] / helm / gtkmathview-bonobo / src / view.c
index dc8226e39c97c22970a51af2a3db22b86c4dc815..068558d25077b59e957a5158beec93cd78a900ef 100644 (file)
@@ -1,6 +1,32 @@
+/* This file is part of GtkMathView-Bonobo, a Bonobo wrapper for GtkMathView.
+ * Copyright (C) 2003 Luca Padovani <lpadovan@cs.unibo.it>
+ *                    Pouria Masoudi <pmasoudi@cs.unibo.it>
+ * 
+ * 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 <lpadovan@cs.unibo.it>
+ */
 
 #include <config.h>
 
+#define HAVE_GMETADOM
+#include <gtkmathview.h>
+
+#include "aux.h"
 #include "view.h"
 
 static GObjectClass* view_parent_class;
@@ -11,22 +37,279 @@ view_object_finalize(GObject* object)
   View* view = VIEW(object);
   /* free resources */
   view_parent_class->finalize(object);
+  return;
 }
 
 static void
-impl_view_freeze(PortableServer_Servant  servant,
+impl_view_freeze(PortableServer_Servant servant,
                 CORBA_Environment *ev)
 {
   View* view = VIEW (bonobo_object (servant));
-  printf("called freeze\n");
+  gtk_math_view_freeze(view->control_data->math_view);
+  return;
 }
 
 static void
-impl_view_thaw(PortableServer_Servant  servant,
+impl_view_thaw(PortableServer_Servant servant,
+              CORBA_Environment *ev)
+{
+  View* view = VIEW (bonobo_object (servant));
+  gtk_math_view_thaw(view->control_data->math_view);
+  return;
+}
+
+static CORBA_boolean
+impl_view_load(PortableServer_Servant servant,
+              const CORBA_char *uri,
               CORBA_Environment *ev)
 {
   View* view = VIEW (bonobo_object (servant));
-  printf("called thaw\n");
+  return gtk_math_view_load_uri(view->control_data->math_view, uri);
+}
+
+static void
+impl_view_unload(PortableServer_Servant servant,
+                 CORBA_Environment *ev)
+{
+  View* view = VIEW (bonobo_object (servant));
+  gtk_math_view_unload(view->control_data->math_view);
+}
+
+static void
+impl_view_setIdAttribute (PortableServer_Servant servant,
+                         const CORBA_char *ns,
+                         const CORBA_char *name,
+                         CORBA_Environment *ev)
+{
+  View* view = VIEW (bonobo_object (servant));
+  gtk_math_view_control_data_set_id_attribute(view->control_data, ns, name);
+}
+
+static void
+impl_view_getIdAttribute (PortableServer_Servant servant,
+                         CORBA_string *ns,
+                         CORBA_string *name,
+                         CORBA_Environment *ev)
+{
+  View* view = VIEW (bonobo_object (servant));
+  if (view->control_data->id_ns_uri != NULL)
+    *ns = CORBA_string_dup(view->control_data->id_ns_uri->str);
+  else
+    *ns = NULL;
+
+  if (view->control_data->id_name != NULL)
+    *name = CORBA_string_dup(view->control_data->id_name);
+  else
+    *name = NULL;
+}
+
+static void 
+impl_view_select(PortableServer_Servant servant,
+                const CORBA_char *id,
+                CORBA_Environment *ev)
+{
+  View* view = VIEW (bonobo_object (servant));
+  GdomeElement* root = gtk_math_view_get_root_element(view->control_data->math_view);
+  if (root != NULL)
+    {
+      GdomeException exc = 0;
+      GdomeElement* el = find_element_by_id(root,
+                                           view->control_data->id_ns_uri,
+                                           view->control_data->id_name,
+                                           id);
+      if (el != NULL)
+       {
+         gtk_math_view_select(view->control_data->math_view, el);
+         gdome_el_unref(el, &exc);
+         g_assert(exc == 0);
+       }
+      gdome_el_unref(root, &exc);
+      g_assert(exc == 0);
+    }
+}
+      
+static void 
+impl_view_unselect(PortableServer_Servant servant,
+                  const CORBA_char *id,
+                  CORBA_Environment *ev)
+{
+  View* view = VIEW (bonobo_object (servant));
+  GdomeElement* root = gtk_math_view_get_root_element(view->control_data->math_view);
+  if (root != NULL)
+    {
+      GdomeException exc = 0;
+      GdomeElement* el = find_element_by_id(root,
+                                           view->control_data->id_ns_uri,
+                                           view->control_data->id_name,
+                                           id);
+      if (el != NULL)
+       {
+         gtk_math_view_unselect(view->control_data->math_view, el);
+         gdome_el_unref(el, &exc);
+         g_assert(exc == 0);
+       }
+      gdome_el_unref(root, &exc);
+      g_assert(exc == 0);
+    }
+}
+      
+static CORBA_boolean 
+impl_view_isSelected(PortableServer_Servant servant,
+                    const CORBA_char *id,
+                    CORBA_Environment *ev)
+{
+  View* view = VIEW (bonobo_object (servant));
+  GdomeElement* root = gtk_math_view_get_root_element(view->control_data->math_view);
+  CORBA_boolean res = CORBA_FALSE;
+  if (root != NULL)
+    {
+      GdomeException exc = 0;
+      GdomeElement* el = find_element_by_id(root,
+                                           view->control_data->id_ns_uri,
+                                           view->control_data->id_name,
+                                           id);
+      if (el != NULL)
+       {
+         res = gtk_math_view_is_selected(view->control_data->math_view, el) ? CORBA_TRUE : CORBA_FALSE;
+         gdome_el_unref(el, &exc);
+         g_assert(exc == 0);
+       }
+      gdome_el_unref(root, &exc);
+      g_assert(exc == 0);
+    }
+  return res;
+}
+
+static CORBA_boolean
+impl_view_elementCoords(PortableServer_Servant servant,
+                       const CORBA_char *id,
+                       CORBA_short *x, CORBA_short *y,
+                       CORBA_Environment *ev)
+{
+  View* view = VIEW (bonobo_object (servant));
+  GdomeElement* root = gtk_math_view_get_root_element(view->control_data->math_view);
+  CORBA_boolean res = CORBA_FALSE;
+  if (root != NULL)
+    {
+      GdomeException exc = 0;
+      GdomeElement* el = find_element_by_id(root,
+                                           view->control_data->id_ns_uri,
+                                           view->control_data->id_name,
+                                           id);
+      if (el != NULL)
+       {
+         gint xx;
+         gint yy;
+         res = gtk_math_view_get_element_coords(view->control_data->math_view, el, &xx, &yy) ? CORBA_TRUE : CORBA_FALSE;
+         gdome_el_unref(el, &exc);
+         g_assert(exc == 0);
+         *x = xx;
+         *y = yy;
+       }
+      gdome_el_unref(root, &exc);
+      g_assert(exc == 0);
+    }
+  return res;
+}
+
+static CORBA_boolean 
+impl_view_elementBoundingBox(PortableServer_Servant servant,
+                             const CORBA_char *id,
+                             CORBA_short *width, CORBA_short *height, CORBA_short *depth,
+                             CORBA_Environment *ev)
+{
+  View* view = VIEW (bonobo_object (servant));
+  GdomeElement* root = gtk_math_view_get_root_element(view->control_data->math_view);
+  CORBA_boolean res = CORBA_FALSE;
+  if (root != NULL)
+    {
+      GdomeException exc = 0;
+      GdomeElement* el = find_element_by_id(root,
+                                           view->control_data->id_ns_uri,
+                                           view->control_data->id_name,
+                                           id);
+      if (el != NULL)
+       {
+         gint w;
+         gint h;
+         gint d;
+         res = gtk_math_view_get_element_bounding_box(view->control_data->math_view, el, &w, &h, &d) ? CORBA_TRUE : CORBA_FALSE;
+         gdome_el_unref(el, &exc);
+         g_assert(exc == 0);
+         *width = w;
+         *height = h;
+         *depth = d;
+       }
+      gdome_el_unref(root, &exc);
+      g_assert(exc == 0);
+    }
+  return res;
+}
+
+static void 
+impl_view_getSize(PortableServer_Servant servant,
+                  CORBA_short *width, CORBA_short *height,
+                  CORBA_Environment *ev)
+{
+  View* view = VIEW (bonobo_object (servant));
+  *width = gtk_math_view_get_width(view->control_data->math_view);
+  *height = gtk_math_view_get_height(view->control_data->math_view);
+}
+
+static void 
+impl_view_getTop(PortableServer_Servant servant,
+                 CORBA_short *x, CORBA_short *y,
+                 CORBA_Environment *ev)
+{
+  View* view = VIEW (bonobo_object (servant));
+  gint xx;
+  gint yy;
+  gtk_math_view_get_top(view->control_data->math_view, &xx, &yy);
+  *x = xx;
+  *y = yy;
+}
+
+static void 
+impl_view_setTop (PortableServer_Servant servant,
+                  CORBA_short x, CORBA_short y,
+                  CORBA_Environment *ev)
+{
+  View* view = VIEW (bonobo_object (servant));
+  gtk_math_view_set_top(view->control_data->math_view, x, y);
+}
+
+static void 
+impl_view_setDefaultFontSize(PortableServer_Servant servant,
+                             CORBA_short size,
+                             CORBA_Environment *ev)
+{
+  View* view = VIEW (bonobo_object (servant));
+  gtk_math_view_set_font_size(view->control_data->math_view, size);
+}
+
+static short 
+impl_view_getDefaultFontSize(PortableServer_Servant servant,
+                             CORBA_Environment *ev)
+{
+  View* view = VIEW (bonobo_object (servant));
+  return gtk_math_view_get_font_size(view->control_data->math_view);
+}
+
+static void 
+impl_view_setVerbosity(PortableServer_Servant servant,
+                       const CORBA_short level,
+                       CORBA_Environment *ev)
+{
+  View* view = VIEW (bonobo_object (servant));
+  gtk_math_view_set_log_verbosity(view->control_data->math_view, level); 
+}
+
+static short 
+impl_view_getVerbosity(PortableServer_Servant servant,
+                       CORBA_Environment *ev)
+{
+  View* view = VIEW (bonobo_object (servant));
+  return gtk_math_view_get_log_verbosity(view->control_data->math_view);
 }
 
 static void
@@ -40,6 +323,22 @@ view_class_init(ViewClass* klass)
   
   epv->freeze = impl_view_freeze;
   epv->thaw = impl_view_thaw;
+  epv->load = impl_view_load;
+  epv->unload = impl_view_unload;
+  epv->setIdAttribute = impl_view_setIdAttribute;
+  epv->getIdAttribute = impl_view_getIdAttribute;
+  epv->select = impl_view_select;
+  epv->unselect = impl_view_unselect;
+  epv->isSelected = impl_view_isSelected;
+  epv->elementCoords = impl_view_elementCoords;
+  epv->elementBoundingBox = impl_view_elementBoundingBox;
+  epv->getSize = impl_view_getSize;
+  epv->getTop = impl_view_getTop;
+  epv->setTop = impl_view_setTop;
+  epv->setDefaultFontSize = impl_view_setDefaultFontSize;
+  epv->getDefaultFontSize = impl_view_getDefaultFontSize;
+  epv->setVerbosity = impl_view_setVerbosity;
+  epv->getVerbosity = impl_view_getVerbosity;
 }
 
 static void
@@ -48,11 +347,15 @@ view_init(View* view)
   /* do some initialization */
 }
 
-BONOBO_TYPE_FUNC_FULL (View, GNOME_GtkMathView_View, BONOBO_TYPE_OBJECT, view)
-
 View*
-view_new()
+view_new(GtkMathViewControlData* control_data)
 {
-  View* view = g_object_new(VIEW_TYPE, NULL);
+  View* view;
+  g_return_val_if_fail(control_data != NULL, NULL);
+  view = g_object_new(VIEW_TYPE, NULL);
+  view->control_data = control_data;
   return view;
 }                     
+
+BONOBO_TYPE_FUNC_FULL (View, GNOME_GtkMathView_View, BONOBO_TYPE_OBJECT, view)
+