Blame plugins/gtk+/glade-gtk-label.c

Packit 1e8aac
/*
Packit 1e8aac
 * glade-gtk-label.c - GladeWidgetAdaptor for GtkLabel
Packit 1e8aac
 *
Packit 1e8aac
 * Copyright (C) 2013 Tristan Van Berkom
Packit 1e8aac
 *
Packit 1e8aac
 * Authors:
Packit 1e8aac
 *      Tristan Van Berkom <tristan.van.berkom@gmail.com>
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
#include <config.h>
Packit 1e8aac
#include <glib/gi18n-lib.h>
Packit 1e8aac
#include <gladeui/glade.h>
Packit 1e8aac
Packit 1e8aac
#include "glade-label-editor.h"
Packit 1e8aac
#include "glade-attributes.h"
Packit 1e8aac
#include "glade-gtk.h"
Packit 1e8aac
Packit 1e8aac
void
Packit 1e8aac
glade_gtk_label_post_create (GladeWidgetAdaptor * adaptor,
Packit 1e8aac
                             GObject * object, GladeCreateReason reason)
Packit 1e8aac
{
Packit 1e8aac
  GladeWidget *glabel = glade_widget_get_from_gobject (object);
Packit 1e8aac
Packit 1e8aac
  if (reason == GLADE_CREATE_USER)
Packit 1e8aac
    glade_widget_property_set_sensitive (glabel, "mnemonic-widget", FALSE,
Packit 1e8aac
                                         MNEMONIC_INSENSITIVE_MSG);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_gtk_label_set_label (GObject * object, const GValue * value)
Packit 1e8aac
{
Packit 1e8aac
  GladeWidget *glabel;
Packit 1e8aac
  gboolean use_markup = FALSE, use_underline = FALSE;
Packit 1e8aac
Packit 1e8aac
  glabel = glade_widget_get_from_gobject (object);
Packit 1e8aac
  glade_widget_property_get (glabel, "use-markup", &use_markup);
Packit 1e8aac
Packit 1e8aac
  if (use_markup)
Packit 1e8aac
    gtk_label_set_markup (GTK_LABEL (object), g_value_get_string (value));
Packit 1e8aac
  else
Packit 1e8aac
    gtk_label_set_text (GTK_LABEL (object), g_value_get_string (value));
Packit 1e8aac
Packit 1e8aac
  glade_widget_property_get (glabel, "use-underline", &use_underline);
Packit 1e8aac
  if (use_underline)
Packit 1e8aac
    gtk_label_set_use_underline (GTK_LABEL (object), use_underline);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_gtk_label_set_attributes (GObject * object, const GValue * value)
Packit 1e8aac
{
Packit 1e8aac
  GladeAttribute *gattr;
Packit 1e8aac
  PangoAttribute *attribute;
Packit 1e8aac
  PangoLanguage *language;
Packit 1e8aac
  PangoFontDescription *font_desc;
Packit 1e8aac
  PangoAttrList *attrs = NULL;
Packit 1e8aac
  GdkColor *color;
Packit 1e8aac
  GList *list;
Packit 1e8aac
Packit 1e8aac
  for (list = g_value_get_boxed (value); list; list = list->next)
Packit 1e8aac
    {
Packit 1e8aac
      gattr = list->data;
Packit 1e8aac
Packit 1e8aac
      attribute = NULL;
Packit 1e8aac
Packit 1e8aac
      switch (gattr->type)
Packit 1e8aac
        {
Packit 1e8aac
            /* PangoFontDescription */
Packit 1e8aac
          case PANGO_ATTR_FONT_DESC:
Packit 1e8aac
	    if ((font_desc = 
Packit 1e8aac
		 pango_font_description_from_string (g_value_get_string (&gattr->value))))
Packit 1e8aac
	      {
Packit 1e8aac
		attribute = pango_attr_font_desc_new (font_desc);
Packit 1e8aac
		pango_font_description_free (font_desc);
Packit 1e8aac
	      }
Packit 1e8aac
	    break;
Packit 1e8aac
Packit 1e8aac
            /* PangoAttrLanguage */
Packit 1e8aac
          case PANGO_ATTR_LANGUAGE:
Packit 1e8aac
            if ((language =
Packit 1e8aac
                 pango_language_from_string (g_value_get_string (&gattr->value))))
Packit 1e8aac
	      attribute = pango_attr_language_new (language);
Packit 1e8aac
            break;
Packit 1e8aac
            /* PangoAttrInt */
Packit 1e8aac
          case PANGO_ATTR_STYLE:
Packit 1e8aac
            attribute =
Packit 1e8aac
                pango_attr_style_new (g_value_get_enum (&(gattr->value)));
Packit 1e8aac
            break;
Packit 1e8aac
          case PANGO_ATTR_WEIGHT:
Packit 1e8aac
            attribute =
Packit 1e8aac
                pango_attr_weight_new (g_value_get_enum (&(gattr->value)));
Packit 1e8aac
            break;
Packit 1e8aac
          case PANGO_ATTR_VARIANT:
Packit 1e8aac
            attribute =
Packit 1e8aac
                pango_attr_variant_new (g_value_get_enum (&(gattr->value)));
Packit 1e8aac
            break;
Packit 1e8aac
          case PANGO_ATTR_STRETCH:
Packit 1e8aac
            attribute =
Packit 1e8aac
                pango_attr_stretch_new (g_value_get_enum (&(gattr->value)));
Packit 1e8aac
            break;
Packit 1e8aac
          case PANGO_ATTR_UNDERLINE:
Packit 1e8aac
            attribute =
Packit 1e8aac
                pango_attr_underline_new (g_value_get_boolean
Packit 1e8aac
                                          (&(gattr->value)));
Packit 1e8aac
            break;
Packit 1e8aac
          case PANGO_ATTR_STRIKETHROUGH:
Packit 1e8aac
            attribute =
Packit 1e8aac
                pango_attr_strikethrough_new (g_value_get_boolean
Packit 1e8aac
                                              (&(gattr->value)));
Packit 1e8aac
            break;
Packit 1e8aac
          case PANGO_ATTR_GRAVITY:
Packit 1e8aac
            attribute =
Packit 1e8aac
                pango_attr_gravity_new (g_value_get_enum (&(gattr->value)));
Packit 1e8aac
            break;
Packit 1e8aac
          case PANGO_ATTR_GRAVITY_HINT:
Packit 1e8aac
            attribute =
Packit 1e8aac
                pango_attr_gravity_hint_new (g_value_get_enum
Packit 1e8aac
                                             (&(gattr->value)));
Packit 1e8aac
            break;
Packit 1e8aac
Packit 1e8aac
            /* PangoAttrString */
Packit 1e8aac
          case PANGO_ATTR_FAMILY:
Packit 1e8aac
            attribute =
Packit 1e8aac
                pango_attr_family_new (g_value_get_string (&(gattr->value)));
Packit 1e8aac
            break;
Packit 1e8aac
Packit 1e8aac
            /* PangoAttrSize */
Packit 1e8aac
          case PANGO_ATTR_SIZE:
Packit 1e8aac
            attribute = pango_attr_size_new (g_value_get_int (&(gattr->value)));
Packit 1e8aac
            break;
Packit 1e8aac
          case PANGO_ATTR_ABSOLUTE_SIZE:
Packit 1e8aac
            attribute =
Packit 1e8aac
                pango_attr_size_new_absolute (g_value_get_int
Packit 1e8aac
                                              (&(gattr->value)));
Packit 1e8aac
            break;
Packit 1e8aac
Packit 1e8aac
            /* PangoAttrColor */
Packit 1e8aac
          case PANGO_ATTR_FOREGROUND:
Packit 1e8aac
            color = g_value_get_boxed (&(gattr->value));
Packit 1e8aac
            attribute =
Packit 1e8aac
                pango_attr_foreground_new (color->red, color->green,
Packit 1e8aac
                                           color->blue);
Packit 1e8aac
            break;
Packit 1e8aac
          case PANGO_ATTR_BACKGROUND:
Packit 1e8aac
            color = g_value_get_boxed (&(gattr->value));
Packit 1e8aac
            attribute =
Packit 1e8aac
                pango_attr_background_new (color->red, color->green,
Packit 1e8aac
                                           color->blue);
Packit 1e8aac
            break;
Packit 1e8aac
          case PANGO_ATTR_UNDERLINE_COLOR:
Packit 1e8aac
            color = g_value_get_boxed (&(gattr->value));
Packit 1e8aac
            attribute =
Packit 1e8aac
                pango_attr_underline_color_new (color->red, color->green,
Packit 1e8aac
                                                color->blue);
Packit 1e8aac
            break;
Packit 1e8aac
          case PANGO_ATTR_STRIKETHROUGH_COLOR:
Packit 1e8aac
            color = g_value_get_boxed (&(gattr->value));
Packit 1e8aac
            attribute =
Packit 1e8aac
                pango_attr_strikethrough_color_new (color->red, color->green,
Packit 1e8aac
                                                    color->blue);
Packit 1e8aac
            break;
Packit 1e8aac
Packit 1e8aac
            /* PangoAttrShape */
Packit 1e8aac
          case PANGO_ATTR_SHAPE:
Packit 1e8aac
            /* Unsupported for now */
Packit 1e8aac
            break;
Packit 1e8aac
            /* PangoAttrFloat */
Packit 1e8aac
          case PANGO_ATTR_SCALE:
Packit 1e8aac
            attribute =
Packit 1e8aac
                pango_attr_scale_new (g_value_get_double (&(gattr->value)));
Packit 1e8aac
            break;
Packit 1e8aac
Packit 1e8aac
          case PANGO_ATTR_INVALID:
Packit 1e8aac
          case PANGO_ATTR_LETTER_SPACING:
Packit 1e8aac
          case PANGO_ATTR_RISE:
Packit 1e8aac
          case PANGO_ATTR_FALLBACK:
Packit 1e8aac
          default:
Packit 1e8aac
            break;
Packit 1e8aac
        }
Packit 1e8aac
Packit 1e8aac
      if (attribute)
Packit 1e8aac
        {
Packit 1e8aac
          if (!attrs)
Packit 1e8aac
            attrs = pango_attr_list_new ();
Packit 1e8aac
          pango_attr_list_insert (attrs, attribute);
Packit 1e8aac
Packit 1e8aac
        }
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  gtk_label_set_attributes (GTK_LABEL (object), attrs);
Packit 1e8aac
Packit 1e8aac
  pango_attr_list_unref (attrs);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_gtk_label_set_content_mode (GObject * object, const GValue * value)
Packit 1e8aac
{
Packit 1e8aac
  GladeLabelContentMode mode = g_value_get_int (value);
Packit 1e8aac
  GladeWidget *glabel;
Packit 1e8aac
Packit 1e8aac
  glabel = glade_widget_get_from_gobject (object);
Packit 1e8aac
Packit 1e8aac
  glade_widget_property_set_sensitive (glabel, "glade-attributes", FALSE,
Packit 1e8aac
                                       NOT_SELECTED_MSG);
Packit 1e8aac
  glade_widget_property_set_sensitive (glabel, "use-markup", FALSE,
Packit 1e8aac
                                       NOT_SELECTED_MSG);
Packit 1e8aac
  glade_widget_property_set_sensitive (glabel, "pattern", FALSE,
Packit 1e8aac
                                       NOT_SELECTED_MSG);
Packit 1e8aac
Packit 1e8aac
  switch (mode)
Packit 1e8aac
    {
Packit 1e8aac
      case GLADE_LABEL_MODE_ATTRIBUTES:
Packit 1e8aac
        glade_widget_property_set_sensitive (glabel, "glade-attributes", TRUE,
Packit 1e8aac
                                             NULL);
Packit 1e8aac
        break;
Packit 1e8aac
      case GLADE_LABEL_MODE_MARKUP:
Packit 1e8aac
        glade_widget_property_set_sensitive (glabel, "use-markup", TRUE, NULL);
Packit 1e8aac
        break;
Packit 1e8aac
      case GLADE_LABEL_MODE_PATTERN:
Packit 1e8aac
        glade_widget_property_set_sensitive (glabel, "pattern", TRUE, NULL);
Packit 1e8aac
        break;
Packit 1e8aac
      default:
Packit 1e8aac
        break;
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_gtk_label_update_lines_sensitivity (GObject * object)
Packit 1e8aac
{
Packit 1e8aac
  GladeWidget *glabel;
Packit 1e8aac
  PangoEllipsizeMode ellipsize_mode;
Packit 1e8aac
  gint wrap_mode;
Packit 1e8aac
Packit 1e8aac
  glabel = glade_widget_get_from_gobject (object);
Packit 1e8aac
Packit 1e8aac
  glade_widget_property_get (glabel, "label-wrap-mode", &wrap_mode);
Packit 1e8aac
  glade_widget_property_get (glabel, "ellipsize", &ellipsize_mode);
Packit 1e8aac
Packit 1e8aac
  if (wrap_mode == GLADE_LABEL_WRAP_MODE && ellipsize_mode != PANGO_ELLIPSIZE_NONE)
Packit 1e8aac
    glade_widget_property_set_sensitive (glabel, "lines", TRUE, NULL);
Packit 1e8aac
  else
Packit 1e8aac
    glade_widget_property_set_sensitive (glabel, "lines", FALSE,
Packit 1e8aac
                                         _("This property only applies if ellipsize and wrapping are enabled"));
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_gtk_label_set_wrap_mode (GObject * object, const GValue * value)
Packit 1e8aac
{
Packit 1e8aac
  GladeLabelWrapMode mode = g_value_get_int (value);
Packit 1e8aac
  GladeWidget *glabel;
Packit 1e8aac
Packit 1e8aac
  glabel = glade_widget_get_from_gobject (object);
Packit 1e8aac
Packit 1e8aac
  glade_widget_property_set_sensitive (glabel, "single-line-mode", FALSE,
Packit 1e8aac
                                       NOT_SELECTED_MSG);
Packit 1e8aac
  glade_widget_property_set_sensitive (glabel, "wrap-mode", FALSE,
Packit 1e8aac
                                       NOT_SELECTED_MSG);
Packit 1e8aac
Packit 1e8aac
  if (mode == GLADE_LABEL_SINGLE_LINE)
Packit 1e8aac
    glade_widget_property_set_sensitive (glabel, "single-line-mode", TRUE,
Packit 1e8aac
                                         NULL);
Packit 1e8aac
  else if (mode == GLADE_LABEL_WRAP_MODE)
Packit 1e8aac
    glade_widget_property_set_sensitive (glabel, "wrap-mode", TRUE, NULL);
Packit 1e8aac
Packit 1e8aac
  glade_gtk_label_update_lines_sensitivity (object);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_gtk_label_set_use_underline (GObject * object, const GValue * value)
Packit 1e8aac
{
Packit 1e8aac
  GladeWidget *glabel;
Packit 1e8aac
Packit 1e8aac
  glabel = glade_widget_get_from_gobject (object);
Packit 1e8aac
Packit 1e8aac
  if (g_value_get_boolean (value))
Packit 1e8aac
    glade_widget_property_set_sensitive (glabel, "mnemonic-widget", TRUE, NULL);
Packit 1e8aac
  else
Packit 1e8aac
    glade_widget_property_set_sensitive (glabel, "mnemonic-widget", FALSE,
Packit 1e8aac
                                         MNEMONIC_INSENSITIVE_MSG);
Packit 1e8aac
Packit 1e8aac
  gtk_label_set_use_underline (GTK_LABEL (object), g_value_get_boolean (value));
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
void
Packit 1e8aac
glade_gtk_label_set_property (GladeWidgetAdaptor * adaptor,
Packit 1e8aac
                              GObject * object,
Packit 1e8aac
                              const gchar * id, const GValue * value)
Packit 1e8aac
{
Packit 1e8aac
  if (!strcmp (id, "label"))
Packit 1e8aac
    glade_gtk_label_set_label (object, value);
Packit 1e8aac
  else if (!strcmp (id, "glade-attributes"))
Packit 1e8aac
    glade_gtk_label_set_attributes (object, value);
Packit 1e8aac
  else if (!strcmp (id, "label-content-mode"))
Packit 1e8aac
    glade_gtk_label_set_content_mode (object, value);
Packit 1e8aac
  else if (!strcmp (id, "label-wrap-mode"))
Packit 1e8aac
    glade_gtk_label_set_wrap_mode (object, value);
Packit 1e8aac
  else if (!strcmp (id, "use-underline"))
Packit 1e8aac
    glade_gtk_label_set_use_underline (object, value);
Packit 1e8aac
  else
Packit 1e8aac
    {
Packit 1e8aac
      if (!strcmp (id, "ellipsize"))
Packit 1e8aac
	glade_gtk_label_update_lines_sensitivity (object);
Packit 1e8aac
Packit 1e8aac
      GWA_GET_CLASS (GTK_TYPE_WIDGET)->set_property (adaptor, object, id, value);
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_gtk_parse_attributes (GladeWidget * widget, GladeXmlNode * node)
Packit 1e8aac
{
Packit 1e8aac
  PangoAttrType attr_type;
Packit 1e8aac
  GladeXmlNode *prop;
Packit 1e8aac
  GladeAttribute *attr;
Packit 1e8aac
  GList *attrs = NULL;
Packit 1e8aac
  gchar *name, *value;
Packit 1e8aac
Packit 1e8aac
  for (prop = glade_xml_node_get_children (node);
Packit 1e8aac
       prop; prop = glade_xml_node_next (prop))
Packit 1e8aac
    {
Packit 1e8aac
      if (!glade_xml_node_verify (prop, GLADE_TAG_ATTRIBUTE))
Packit 1e8aac
        continue;
Packit 1e8aac
Packit 1e8aac
      if (!(name = glade_xml_get_property_string_required
Packit 1e8aac
            (prop, GLADE_XML_TAG_NAME, NULL)))
Packit 1e8aac
        continue;
Packit 1e8aac
Packit 1e8aac
      if (!(value = glade_xml_get_property_string_required
Packit 1e8aac
            (prop, GLADE_TAG_VALUE, NULL)))
Packit 1e8aac
        {
Packit 1e8aac
          /* for a while, Glade was broken and was storing
Packit 1e8aac
           * attributes in the node contents */
Packit 1e8aac
          if (!(value = glade_xml_get_content (prop)))
Packit 1e8aac
            {
Packit 1e8aac
              g_free (name);
Packit 1e8aac
              continue;
Packit 1e8aac
            }
Packit 1e8aac
        }
Packit 1e8aac
Packit 1e8aac
      if ((attr_type =
Packit 1e8aac
           glade_utils_enum_value_from_string (PANGO_TYPE_ATTR_TYPE,
Packit 1e8aac
                                               name)) == 0)
Packit 1e8aac
        continue;
Packit 1e8aac
Packit 1e8aac
      /* Parse attribute and add to list */
Packit 1e8aac
      if ((attr = glade_gtk_attribute_from_string (attr_type, value)) != NULL)
Packit 1e8aac
        attrs = g_list_prepend (attrs, attr);
Packit 1e8aac
Packit 1e8aac
      /* XXX deal with start/end here ... */
Packit 1e8aac
Packit 1e8aac
      g_free (name);
Packit 1e8aac
      g_free (value);
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  glade_widget_property_set (widget, "glade-attributes",
Packit 1e8aac
                             g_list_reverse (attrs));
Packit 1e8aac
  glade_attr_list_free (attrs);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_gtk_label_read_attributes (GladeWidget * widget, GladeXmlNode * node)
Packit 1e8aac
{
Packit 1e8aac
  GladeXmlNode *attrs_node;
Packit 1e8aac
Packit 1e8aac
  if ((attrs_node =
Packit 1e8aac
       glade_xml_search_child (node, GLADE_TAG_ATTRIBUTES)) != NULL)
Packit 1e8aac
    {
Packit 1e8aac
      /* Generic attributes parsing */
Packit 1e8aac
      glade_gtk_parse_attributes (widget, attrs_node);
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
void
Packit 1e8aac
glade_gtk_label_read_widget (GladeWidgetAdaptor * adaptor,
Packit 1e8aac
                             GladeWidget * widget, GladeXmlNode * node)
Packit 1e8aac
{
Packit 1e8aac
  GladeProperty *prop;
Packit 1e8aac
Packit 1e8aac
  if (!(glade_xml_node_verify_silent (node, GLADE_XML_TAG_WIDGET) ||
Packit 1e8aac
	glade_xml_node_verify_silent (node, GLADE_XML_TAG_TEMPLATE)))
Packit 1e8aac
    return;
Packit 1e8aac
Packit 1e8aac
  /* First chain up and read in all the normal properties.. */
Packit 1e8aac
  GWA_GET_CLASS (GTK_TYPE_WIDGET)->read_widget (adaptor, widget, node);
Packit 1e8aac
Packit 1e8aac
  glade_gtk_label_read_attributes (widget, node);
Packit 1e8aac
Packit 1e8aac
  /* sync label property after a load... */
Packit 1e8aac
  prop = glade_widget_get_property (widget, "label");
Packit 1e8aac
  glade_gtk_label_set_label (glade_widget_get_object (widget), 
Packit 1e8aac
			     glade_property_inline_value (prop));
Packit 1e8aac
Packit 1e8aac
  /* Resolve "label-content-mode" virtual control property  */
Packit 1e8aac
  if (!glade_widget_property_original_default (widget, "use-markup"))
Packit 1e8aac
    glade_widget_property_set (widget, "label-content-mode",
Packit 1e8aac
                               GLADE_LABEL_MODE_MARKUP);
Packit 1e8aac
  else if (!glade_widget_property_original_default (widget, "pattern"))
Packit 1e8aac
    glade_widget_property_set (widget, "label-content-mode",
Packit 1e8aac
                               GLADE_LABEL_MODE_PATTERN);
Packit 1e8aac
  else
Packit 1e8aac
    glade_widget_property_set (widget, "label-content-mode",
Packit 1e8aac
                               GLADE_LABEL_MODE_ATTRIBUTES);
Packit 1e8aac
Packit 1e8aac
  /* Resolve "label-wrap-mode" virtual control property  */
Packit 1e8aac
  if (!glade_widget_property_original_default (widget, "single-line-mode"))
Packit 1e8aac
    glade_widget_property_set (widget, "label-wrap-mode",
Packit 1e8aac
                               GLADE_LABEL_SINGLE_LINE);
Packit 1e8aac
  else if (!glade_widget_property_original_default (widget, "wrap"))
Packit 1e8aac
    glade_widget_property_set (widget, "label-wrap-mode",
Packit 1e8aac
                               GLADE_LABEL_WRAP_MODE);
Packit 1e8aac
  else
Packit 1e8aac
    glade_widget_property_set (widget, "label-wrap-mode",
Packit 1e8aac
                               GLADE_LABEL_WRAP_FREE);
Packit 1e8aac
Packit 1e8aac
  if (glade_widget_property_original_default (widget, "use-underline"))
Packit 1e8aac
    glade_widget_property_set_sensitive (widget, "mnemonic-widget",
Packit 1e8aac
                                         FALSE, MNEMONIC_INSENSITIVE_MSG);
Packit 1e8aac
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_gtk_label_write_attributes (GladeWidget * widget,
Packit 1e8aac
                                  GladeXmlContext * context,
Packit 1e8aac
                                  GladeXmlNode * node)
Packit 1e8aac
{
Packit 1e8aac
  GladeXmlNode *attr_node;
Packit 1e8aac
  GList *attrs = NULL, *l;
Packit 1e8aac
  GladeAttribute *gattr;
Packit 1e8aac
  gchar *attr_type;
Packit 1e8aac
  gchar *attr_value;
Packit 1e8aac
Packit 1e8aac
  if (!glade_widget_property_get (widget, "glade-attributes", &attrs) || !attrs)
Packit 1e8aac
    return;
Packit 1e8aac
Packit 1e8aac
  for (l = attrs; l; l = l->next)
Packit 1e8aac
    {
Packit 1e8aac
      gattr = l->data;
Packit 1e8aac
Packit 1e8aac
      attr_type =
Packit 1e8aac
          glade_utils_enum_string_from_value (PANGO_TYPE_ATTR_TYPE,
Packit 1e8aac
                                              gattr->type);
Packit 1e8aac
      attr_value = glade_gtk_string_from_attr (gattr);
Packit 1e8aac
Packit 1e8aac
      attr_node = glade_xml_node_new (context, GLADE_TAG_ATTRIBUTE);
Packit 1e8aac
      glade_xml_node_append_child (node, attr_node);
Packit 1e8aac
Packit 1e8aac
      glade_xml_node_set_property_string (attr_node, GLADE_TAG_NAME, attr_type);
Packit 1e8aac
      glade_xml_node_set_property_string (attr_node, GLADE_TAG_VALUE,
Packit 1e8aac
                                          attr_value);
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
void
Packit 1e8aac
glade_gtk_label_write_widget (GladeWidgetAdaptor * adaptor,
Packit 1e8aac
                              GladeWidget * widget,
Packit 1e8aac
                              GladeXmlContext * context, GladeXmlNode * node)
Packit 1e8aac
{
Packit 1e8aac
  GladeXmlNode *attrs_node;
Packit 1e8aac
Packit 1e8aac
  if (!(glade_xml_node_verify_silent (node, GLADE_XML_TAG_WIDGET) ||
Packit 1e8aac
	glade_xml_node_verify_silent (node, GLADE_XML_TAG_TEMPLATE)))
Packit 1e8aac
    return;
Packit 1e8aac
Packit 1e8aac
  /* First chain up and read in all the normal properties.. */
Packit 1e8aac
  GWA_GET_CLASS (GTK_TYPE_WIDGET)->write_widget (adaptor, widget, context,
Packit 1e8aac
                                                 node);
Packit 1e8aac
Packit 1e8aac
  attrs_node = glade_xml_node_new (context, GLADE_TAG_ATTRIBUTES);
Packit 1e8aac
Packit 1e8aac
  glade_gtk_label_write_attributes (widget, context, attrs_node);
Packit 1e8aac
Packit 1e8aac
  if (!glade_xml_node_get_children (attrs_node))
Packit 1e8aac
    glade_xml_node_delete (attrs_node);
Packit 1e8aac
  else
Packit 1e8aac
    glade_xml_node_append_child (node, attrs_node);
Packit 1e8aac
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
gchar *
Packit 1e8aac
glade_gtk_label_string_from_value (GladeWidgetAdaptor * adaptor,
Packit 1e8aac
                                   GladePropertyClass * klass,
Packit 1e8aac
                                   const GValue * value)
Packit 1e8aac
{
Packit 1e8aac
  GParamSpec          *pspec;
Packit 1e8aac
Packit 1e8aac
  pspec = glade_property_class_get_pspec (klass);
Packit 1e8aac
Packit 1e8aac
  if (pspec->value_type == GLADE_TYPE_ATTR_GLIST)
Packit 1e8aac
    {
Packit 1e8aac
      GList *l, *list = g_value_get_boxed (value);
Packit 1e8aac
      GString *string = g_string_new ("");
Packit 1e8aac
      gchar *str;
Packit 1e8aac
Packit 1e8aac
      for (l = list; l; l = g_list_next (l))
Packit 1e8aac
        {
Packit 1e8aac
          GladeAttribute *attr = l->data;
Packit 1e8aac
Packit 1e8aac
          /* Return something usefull at least to for the backend to compare */
Packit 1e8aac
          gchar *attr_str = glade_gtk_string_from_attr (attr);
Packit 1e8aac
          g_string_append_printf (string, "%d=%s ", attr->type, attr_str);
Packit 1e8aac
          g_free (attr_str);
Packit 1e8aac
        }
Packit 1e8aac
      str = string->str;
Packit 1e8aac
      g_string_free (string, FALSE);
Packit 1e8aac
      return str;
Packit 1e8aac
    }
Packit 1e8aac
  else
Packit 1e8aac
    return GWA_GET_CLASS
Packit 1e8aac
        (GTK_TYPE_WIDGET)->string_from_value (adaptor, klass, value);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
Packit 1e8aac
GladeEditorProperty *
Packit 1e8aac
glade_gtk_label_create_eprop (GladeWidgetAdaptor * adaptor,
Packit 1e8aac
                              GladePropertyClass * klass, gboolean use_command)
Packit 1e8aac
{
Packit 1e8aac
  GladeEditorProperty *eprop;
Packit 1e8aac
  GParamSpec          *pspec;
Packit 1e8aac
Packit 1e8aac
  pspec = glade_property_class_get_pspec (klass);
Packit 1e8aac
Packit 1e8aac
  /* chain up.. */
Packit 1e8aac
  if (pspec->value_type == GLADE_TYPE_ATTR_GLIST)
Packit 1e8aac
    {
Packit 1e8aac
      eprop = g_object_new (GLADE_TYPE_EPROP_ATTRS,
Packit 1e8aac
                            "property-class", klass,
Packit 1e8aac
                            "use-command", use_command, NULL);
Packit 1e8aac
    }
Packit 1e8aac
  else
Packit 1e8aac
    eprop = GWA_GET_CLASS
Packit 1e8aac
        (GTK_TYPE_WIDGET)->create_eprop (adaptor, klass, use_command);
Packit 1e8aac
  return eprop;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
GladeEditable *
Packit 1e8aac
glade_gtk_label_create_editable (GladeWidgetAdaptor * adaptor,
Packit 1e8aac
                                 GladeEditorPageType type)
Packit 1e8aac
{
Packit 1e8aac
  GladeEditable *editable;
Packit 1e8aac
Packit 1e8aac
  if (type == GLADE_PAGE_GENERAL)
Packit 1e8aac
    editable = (GladeEditable *) glade_label_editor_new ();
Packit 1e8aac
  else
Packit 1e8aac
    editable = GWA_GET_CLASS (GTK_TYPE_WIDGET)->create_editable (adaptor, type);
Packit 1e8aac
Packit 1e8aac
  return editable;
Packit 1e8aac
}