|
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 |
}
|