Blame plugins/gladeui/glade-glade-editor-skeleton.c

Packit 1e8aac
/*
Packit 1e8aac
 * glade-glade-editor-skeleton.c
Packit 1e8aac
 *
Packit 1e8aac
 * Copyright (C) 2013 Tristan Van Berkom.
Packit 1e8aac
 *
Packit 1e8aac
 * Author:
Packit 1e8aac
 *   Tristan Van Berkom <tvb@gnome.org>
Packit 1e8aac
 *
Packit 1e8aac
 * This library is free software; you can redistribute it and/or modify it
Packit 1e8aac
 * under the terms of the GNU Lesser General Public License as
Packit 1e8aac
 * published by the Free Software Foundation; either version 2.1 of
Packit 1e8aac
 * the License, or (at your option) any later version.
Packit 1e8aac
 *
Packit 1e8aac
 * This library is distributed in the hope that it will be useful, but
Packit 1e8aac
 * WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 1e8aac
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 1e8aac
 * Lesser General Public License for more details.
Packit 1e8aac
 *
Packit 1e8aac
 * You should have received a copy of the GNU Lesser General Public 
Packit 1e8aac
 * License along with this program; if not, write to the Free Software
Packit 1e8aac
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Packit 1e8aac
 *
Packit 1e8aac
 */
Packit 1e8aac
Packit 1e8aac
#include <config.h>
Packit 1e8aac
#include <gladeui/glade.h>
Packit 1e8aac
Packit 1e8aac
#define GLADE_TAG_SKELETON_EDITORS "child-editors"
Packit 1e8aac
#define GLADE_TAG_SKELETON_EDITOR  "editor"
Packit 1e8aac
Packit 1e8aac
void
Packit 1e8aac
glade_glade_editor_skeleton_read_widget (GladeWidgetAdaptor *adaptor,
Packit 1e8aac
					 GladeWidget        *widget,
Packit 1e8aac
					 GladeXmlNode       *node)
Packit 1e8aac
{
Packit 1e8aac
  GladeXmlNode *editors_node;
Packit 1e8aac
  GladeProperty *property;
Packit 1e8aac
  gchar *string = NULL;
Packit 1e8aac
Packit 1e8aac
  GWA_GET_CLASS (GTK_TYPE_BOX)->read_widget (adaptor, widget, node);
Packit 1e8aac
Packit 1e8aac
  if ((editors_node =
Packit 1e8aac
       glade_xml_search_child (node, GLADE_TAG_SKELETON_EDITORS)) != NULL)
Packit 1e8aac
    {
Packit 1e8aac
      GladeXmlNode *node;
Packit 1e8aac
Packit 1e8aac
      for (node = glade_xml_node_get_children (editors_node);
Packit 1e8aac
           node; node = glade_xml_node_next (node))
Packit 1e8aac
        {
Packit 1e8aac
          gchar *widget_name, *tmp;
Packit 1e8aac
Packit 1e8aac
          if (!glade_xml_node_verify (node, GLADE_TAG_SKELETON_EDITOR))
Packit 1e8aac
            continue;
Packit 1e8aac
Packit 1e8aac
          widget_name = glade_xml_get_property_string_required (node, GLADE_XML_TAG_ID, NULL);
Packit 1e8aac
Packit 1e8aac
          if (string == NULL)
Packit 1e8aac
            string = widget_name;
Packit 1e8aac
          else if (widget_name != NULL)
Packit 1e8aac
            {
Packit 1e8aac
              tmp =
Packit 1e8aac
                  g_strdup_printf ("%s%s%s", string, GPC_OBJECT_DELIMITER,
Packit 1e8aac
                                   widget_name);
Packit 1e8aac
              string = (g_free (string), tmp);
Packit 1e8aac
              g_free (widget_name);
Packit 1e8aac
            }
Packit 1e8aac
        }
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  if (string)
Packit 1e8aac
    {
Packit 1e8aac
      property = glade_widget_get_property (widget, "editors");
Packit 1e8aac
      g_assert (property);
Packit 1e8aac
Packit 1e8aac
      /* we must synchronize this directly after loading this project
Packit 1e8aac
       * (i.e. lookup the actual objects after they've been parsed and
Packit 1e8aac
       * are present).
Packit 1e8aac
       */
Packit 1e8aac
      g_object_set_data_full (G_OBJECT (property),
Packit 1e8aac
                              "glade-loaded-object", string, g_free);
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
void
Packit 1e8aac
glade_glade_editor_skeleton_write_widget_after (GladeWidgetAdaptor *adaptor,
Packit 1e8aac
						GladeWidget        *widget,
Packit 1e8aac
						GladeXmlContext    *context,
Packit 1e8aac
						GladeXmlNode       *node)
Packit 1e8aac
{
Packit 1e8aac
  GladeXmlNode *widgets_node, *widget_node;
Packit 1e8aac
  GList *editors = NULL, *list;
Packit 1e8aac
  GladeWidget *awidget;
Packit 1e8aac
Packit 1e8aac
  GWA_GET_CLASS (GTK_TYPE_BOX)->write_widget_after (adaptor, widget, context, node);
Packit 1e8aac
Packit 1e8aac
  widgets_node = glade_xml_node_new (context, GLADE_TAG_SKELETON_EDITORS);
Packit 1e8aac
Packit 1e8aac
  if (glade_widget_property_get (widget, "editors", &editors))
Packit 1e8aac
    {
Packit 1e8aac
      for (list = editors; list; list = list->next)
Packit 1e8aac
        {
Packit 1e8aac
          awidget = glade_widget_get_from_gobject (list->data);
Packit 1e8aac
          widget_node = glade_xml_node_new (context, GLADE_TAG_SKELETON_EDITOR);
Packit 1e8aac
          glade_xml_node_append_child (widgets_node, widget_node);
Packit 1e8aac
          glade_xml_node_set_property_string (widget_node, GLADE_XML_TAG_ID,
Packit 1e8aac
                                              glade_widget_get_name (awidget));
Packit 1e8aac
        }
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  if (!glade_xml_node_get_children (widgets_node))
Packit 1e8aac
    glade_xml_node_delete (widgets_node);
Packit 1e8aac
  else
Packit 1e8aac
    glade_xml_node_append_child (node, widgets_node);
Packit 1e8aac
Packit 1e8aac
}