[glade] Added adaptor to the gladeui plugin for editing GladeEditorSkeletons.



commit d1f777a5ef6a1cf13f71e525f755198f204e81d7
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date:   Sat Apr 13 20:31:23 2013 +0900

    Added adaptor to the gladeui plugin for editing GladeEditorSkeletons.

 plugins/gladeui/Makefile.am                   |  21 +++++
 plugins/gladeui/glade-glade-editor-skeleton.c | 115 ++++++++++++++++++++++++++
 plugins/gladeui/gladeui.xml                   |  21 ++++-
 3 files changed, 154 insertions(+), 3 deletions(-)
---
diff --git a/plugins/gladeui/Makefile.am b/plugins/gladeui/Makefile.am
index a645e3a..4705e2f 100644
--- a/plugins/gladeui/Makefile.am
+++ b/plugins/gladeui/Makefile.am
@@ -1,3 +1,24 @@
+
+libgladeui = $(top_builddir)/gladeui/libgladeui-2.la
+
+# libgladegtk
+
+gladeglade_LTLIBRARIES = libgladeglade.la
+gladegladedir = $(pkglibdir)/modules
+
+libgladeglade_la_CPPFLAGS =   \
+       -I$(top_srcdir)    \
+       -I$(top_builddir)  \
+       -DG_LOG_DOMAIN=\"GladeUI-Glade\" \
+       $(GTK_CFLAGS)                  \
+       $(PLUGINS_WARN_CFLAGS)         \
+       $(AM_CPPFLAGS)
+
+libgladeglade_la_CFLAGS      = $(AM_CFLAGS)
+libgladeglade_la_LDFLAGS     = -module -avoid-version $(AM_LDFLAGS)
+libgladeglade_la_LIBADD      = $(libgladeui) $(GTK_LIBS)
+libgladeglade_la_SOURCES     = glade-glade-editor-skeleton.c
+
 catalogsdir = $(pkgdatadir)/catalogs
 
 catalogs_DATA = gladeui.xml
diff --git a/plugins/gladeui/glade-glade-editor-skeleton.c b/plugins/gladeui/glade-glade-editor-skeleton.c
new file mode 100644
index 0000000..77a047a
--- /dev/null
+++ b/plugins/gladeui/glade-glade-editor-skeleton.c
@@ -0,0 +1,115 @@
+/*
+ * glade-glade-editor-skeleton.c
+ *
+ * Copyright (C) 2013 Tristan Van Berkom.
+ *
+ * Author:
+ *   Tristan Van Berkom <tvb gnome org>
+ *
+ * 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 program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include <config.h>
+#include <gladeui/glade.h>
+
+#define GLADE_TAG_SKELETON_EDITORS "child-editors"
+#define GLADE_TAG_SKELETON_EDITOR  "editor"
+
+void
+glade_glade_editor_skeleton_read_widget (GladeWidgetAdaptor *adaptor,
+                                        GladeWidget        *widget,
+                                        GladeXmlNode       *node)
+{
+  GladeXmlNode *editors_node;
+  GladeProperty *property;
+  gchar *string = NULL;
+
+  GWA_GET_CLASS (GTK_TYPE_BOX)->read_widget (adaptor, widget, node);
+
+  if ((editors_node =
+       glade_xml_search_child (node, GLADE_TAG_SKELETON_EDITORS)) != NULL)
+    {
+      GladeXmlNode *node;
+
+      for (node = glade_xml_node_get_children (editors_node);
+           node; node = glade_xml_node_next (node))
+        {
+          gchar *widget_name, *tmp;
+
+          if (!glade_xml_node_verify (node, GLADE_TAG_SKELETON_EDITOR))
+            continue;
+
+          widget_name = glade_xml_get_property_string_required (node, GLADE_XML_TAG_ID, NULL);
+
+          if (string == NULL)
+            string = widget_name;
+          else if (widget_name != NULL)
+            {
+              tmp =
+                  g_strdup_printf ("%s%s%s", string, GPC_OBJECT_DELIMITER,
+                                   widget_name);
+              string = (g_free (string), tmp);
+              g_free (widget_name);
+            }
+        }
+    }
+
+  if (string)
+    {
+      property = glade_widget_get_property (widget, "editors");
+      g_assert (property);
+
+      /* we must synchronize this directly after loading this project
+       * (i.e. lookup the actual objects after they've been parsed and
+       * are present).
+       */
+      g_object_set_data_full (G_OBJECT (property),
+                              "glade-loaded-object", string, g_free);
+    }
+}
+
+void
+glade_glade_editor_skeleton_write_widget_after (GladeWidgetAdaptor *adaptor,
+                                               GladeWidget        *widget,
+                                               GladeXmlContext    *context,
+                                               GladeXmlNode       *node)
+{
+  GladeXmlNode *widgets_node, *widget_node;
+  GList *editors = NULL, *list;
+  GladeWidget *awidget;
+
+  GWA_GET_CLASS (GTK_TYPE_BOX)->write_widget_after (adaptor, widget, context, node);
+
+  widgets_node = glade_xml_node_new (context, GLADE_TAG_SKELETON_EDITORS);
+
+  if (glade_widget_property_get (widget, "editors", &editors))
+    {
+      for (list = editors; list; list = list->next)
+        {
+          awidget = glade_widget_get_from_gobject (list->data);
+          widget_node = glade_xml_node_new (context, GLADE_TAG_SKELETON_EDITOR);
+          glade_xml_node_append_child (widgets_node, widget_node);
+          glade_xml_node_set_property_string (widget_node, GLADE_XML_TAG_ID,
+                                              glade_widget_get_name (awidget));
+        }
+    }
+
+  if (!glade_xml_node_get_children (widgets_node))
+    glade_xml_node_delete (widgets_node);
+  else
+    glade_xml_node_append_child (node, widgets_node);
+
+}
diff --git a/plugins/gladeui/gladeui.xml b/plugins/gladeui/gladeui.xml
index 1f752a2..04fe8db 100644
--- a/plugins/gladeui/gladeui.xml
+++ b/plugins/gladeui/gladeui.xml
@@ -1,6 +1,6 @@
 <glade-catalog name="gladeui"
               depends="gtk+"
-              library="gladeui-2">
+              library="gladeglade">
   <glade-widget-classes>
     <!-- Main Glade User Interface Components -->
     <glade-widget-class name="GladeEditor" generic-name="propertyeditor" title="Property Editor" 
icon-name="widget-gtk-notebook"/>
@@ -8,9 +8,24 @@
     <glade-widget-class name="GladeInspector" generic-name="inspector" title="Inspector" 
icon-name="widget-gtk-treeview"/>
 
     <!-- Glade Editor Components -->
+    <glade-widget-class name="GladeEditorSkeleton" generic-name="skeleton"
+                       title="Editor Skeleton" icon-name="widget-gtk-frame">
+      <read-widget-function>glade_glade_editor_skeleton_read_widget</read-widget-function>
+      
<write-widget-after-function>glade_glade_editor_skeleton_write_widget_after</write-widget-after-function>
+      <properties>
+       <property id="editors" name="Editors" ignore="True" save="False">
+         <parameter-spec>
+           <type>GladeParamObjects</type>
+           <value-type>GladeEditable</value-type>
+         </parameter-spec>
+         <tooltip>List of editors which are children to this skeleton</tooltip>
+       </property>
+      </properties>
+    </glade-widget-class>
+
     <glade-widget-class name="GladePropertyLabel" generic-name="propertylabel" title="Property Label" 
icon-name="widget-gtk-label"/>
     <glade-widget-class name="GladePropertyShell" generic-name="propertyshell"
-                       title="Property Shell" icon-name="widget-gtk-frame" use-placeholders="False">
+                       title="Property Shell" icon-name="widget-gtk-entry" use-placeholders="False">
       <properties>
        <property id="orientation" disabled="True"/>
        <property id="size" disabled="True"/>
@@ -18,7 +33,6 @@
        <property id="homogenous" disabled="True"/>
       </properties>
     </glade-widget-class>
-
   </glade-widget-classes>
   
   <glade-widget-group name="gladeui-main" title="Glade Embed Widgets">
@@ -31,6 +45,7 @@
 
     <default-palette-state expanded="False"/>
 
+    <glade-widget-class-ref name="GladeEditorSkeleton"/>
     <glade-widget-class-ref name="GladePropertyLabel"/>
     <glade-widget-class-ref name="GladePropertyShell"/>
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]