Blame gladeui/glade-property-label.c

Packit 1e8aac
/*
Packit 1e8aac
 * Copyright (C) 2013 Tristan Van Berkom.
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
 * Authors:
Packit 1e8aac
 *   Tristan Van Berkom <tvb@gnome.org>
Packit 1e8aac
 */
Packit 1e8aac
Packit 1e8aac
#ifdef HAVE_CONFIG_H
Packit 1e8aac
#include <config.h>
Packit 1e8aac
#endif
Packit 1e8aac
Packit 1e8aac
#include <glib/gi18n-lib.h>
Packit 1e8aac
Packit 1e8aac
#include "glade.h"
Packit 1e8aac
#include "glade-widget.h"
Packit 1e8aac
#include "glade-popup.h"
Packit 1e8aac
#include "glade-editable.h"
Packit 1e8aac
#include "glade-property-label.h"
Packit 1e8aac
Packit 1e8aac
/* GObjectClass */
Packit 1e8aac
static void      glade_property_label_finalize          (GObject         *object);
Packit 1e8aac
static void      glade_property_label_dispose           (GObject         *object);
Packit 1e8aac
static void      glade_property_label_set_real_property (GObject         *object,
Packit 1e8aac
							 guint            prop_id,
Packit 1e8aac
							 const GValue    *value,
Packit 1e8aac
							 GParamSpec      *pspec);
Packit 1e8aac
static void      glade_property_label_get_real_property (GObject         *object,
Packit 1e8aac
							 guint            prop_id,
Packit 1e8aac
							 GValue          *value,
Packit 1e8aac
							 GParamSpec      *pspec);
Packit 1e8aac
Packit 1e8aac
/* GtkWidgetClass */
Packit 1e8aac
static gint      glade_property_label_button_press      (GtkWidget       *widget,
Packit 1e8aac
							 GdkEventButton  *event);
Packit 1e8aac
Packit 1e8aac
/* GladeEditableIface */
Packit 1e8aac
static void      glade_property_label_editable_init     (GladeEditableIface *iface);
Packit 1e8aac
Packit 1e8aac
struct _GladePropertyLabelPrivate
Packit 1e8aac
{
Packit 1e8aac
  GladeProperty *property;
Packit 1e8aac
Packit 1e8aac
  GtkWidget     *warning;
Packit 1e8aac
  GtkWidget     *label;
Packit 1e8aac
  GtkWidget     *box;
Packit 1e8aac
Packit 1e8aac
  gulong         tooltip_id;   /* signal connection id for tooltip changes     */
Packit 1e8aac
  gulong         state_id;     /* signal connection id for state changes       */
Packit 1e8aac
  gulong         sensitive_id; /* signal connection id for sensitivity changes */
Packit 1e8aac
  gulong         enabled_id;   /* signal connection id for property enabled changes */
Packit 1e8aac
Packit 1e8aac
  gchar         *property_name; /* The property name to use when loading by GladeWidget */
Packit 1e8aac
Packit 1e8aac
  guint          packing : 1;
Packit 1e8aac
  guint          custom_text : 1;
Packit 1e8aac
  guint          custom_tooltip : 1;
Packit 1e8aac
  guint          append_colon : 1;
Packit 1e8aac
};
Packit 1e8aac
Packit 1e8aac
enum {
Packit 1e8aac
  PROP_0,
Packit 1e8aac
  PROP_PROPERTY,
Packit 1e8aac
  PROP_PROPERTY_NAME,
Packit 1e8aac
  PROP_APPEND_COLON,
Packit 1e8aac
  PROP_PACKING,
Packit 1e8aac
  PROP_CUSTOM_TEXT,
Packit 1e8aac
  PROP_CUSTOM_TOOLTIP,
Packit 1e8aac
};
Packit 1e8aac
Packit 1e8aac
static GladeEditableIface *parent_editable_iface;
Packit 1e8aac
Packit 1e8aac
G_DEFINE_TYPE_WITH_CODE (GladePropertyLabel, glade_property_label, GTK_TYPE_EVENT_BOX,
Packit 1e8aac
                         G_ADD_PRIVATE (GladePropertyLabel)
Packit 1e8aac
			 G_IMPLEMENT_INTERFACE (GLADE_TYPE_EDITABLE,
Packit 1e8aac
                                                glade_property_label_editable_init));
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_property_label_init (GladePropertyLabel *label)
Packit 1e8aac
{
Packit 1e8aac
  label->priv = glade_property_label_get_instance_private (label);
Packit 1e8aac
Packit 1e8aac
  label->priv->packing = FALSE;
Packit 1e8aac
  label->priv->custom_text = FALSE;
Packit 1e8aac
  label->priv->custom_tooltip = FALSE;
Packit 1e8aac
  label->priv->append_colon = TRUE;
Packit 1e8aac
  
Packit 1e8aac
  gtk_widget_init_template (GTK_WIDGET (label));
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_property_label_class_init (GladePropertyLabelClass *class)
Packit 1e8aac
{
Packit 1e8aac
  GObjectClass *gobject_class = G_OBJECT_CLASS (class);
Packit 1e8aac
  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
Packit 1e8aac
  
Packit 1e8aac
  gobject_class->finalize = glade_property_label_finalize;
Packit 1e8aac
  gobject_class->dispose = glade_property_label_dispose;
Packit 1e8aac
  gobject_class->set_property = glade_property_label_set_real_property;
Packit 1e8aac
  gobject_class->get_property = glade_property_label_get_real_property;
Packit 1e8aac
Packit 1e8aac
  widget_class->button_press_event = glade_property_label_button_press;
Packit 1e8aac
Packit 1e8aac
  g_object_class_install_property
Packit 1e8aac
    (gobject_class, PROP_PROPERTY,
Packit 1e8aac
     g_param_spec_object ("property", _("Property"),
Packit 1e8aac
			  _("The GladeProperty to display a label for"),
Packit 1e8aac
			  GLADE_TYPE_PROPERTY, G_PARAM_READWRITE));
Packit 1e8aac
Packit 1e8aac
  g_object_class_install_property
Packit 1e8aac
      (gobject_class, PROP_PROPERTY_NAME,
Packit 1e8aac
       g_param_spec_string ("property-name", _("Property Name"),
Packit 1e8aac
                            /* To Translators: the property name/id to use to get
Packit 1e8aac
                             * the GladeProperty object from the GladeWidget the
Packit 1e8aac
                             * property belongs to.
Packit 1e8aac
                             */
Packit 1e8aac
			    _("The property name to use when loading by widget"),
Packit 1e8aac
			    NULL, G_PARAM_READWRITE));
Packit 1e8aac
Packit 1e8aac
  g_object_class_install_property
Packit 1e8aac
      (gobject_class, PROP_APPEND_COLON,
Packit 1e8aac
       g_param_spec_boolean ("append-colon", _("Append Colon"),
Packit 1e8aac
			     _("Whether to append a colon ':' to the property name"),
Packit 1e8aac
			     TRUE, G_PARAM_READWRITE));
Packit 1e8aac
Packit 1e8aac
  g_object_class_install_property
Packit 1e8aac
      (gobject_class, PROP_PACKING,
Packit 1e8aac
       g_param_spec_boolean ("packing", _("Packing"),
Packit 1e8aac
                             /* To Translators: packing properties or child properties are
Packit 1e8aac
                              * properties introduced by GtkContainer and they are not specific
Packit 1e8aac
                              * to the container or child widget but to the relation.
Packit 1e8aac
                              * For more information see GtkContainer docs.
Packit 1e8aac
                              */
Packit 1e8aac
			     _("Whether the property to load is a packing property or not"),
Packit 1e8aac
			     FALSE, G_PARAM_READWRITE));
Packit 1e8aac
Packit 1e8aac
  g_object_class_install_property
Packit 1e8aac
      (gobject_class, PROP_CUSTOM_TEXT,
Packit 1e8aac
       g_param_spec_string ("custom-text", _("Custom Text"),
Packit 1e8aac
			    _("Custom text to override the property name"),
Packit 1e8aac
			    NULL, G_PARAM_READWRITE));
Packit 1e8aac
Packit 1e8aac
  g_object_class_install_property
Packit 1e8aac
      (gobject_class, PROP_CUSTOM_TOOLTIP,
Packit 1e8aac
       g_param_spec_string ("custom-tooltip", _("Custom Tooltip"),
Packit 1e8aac
			    _("Custom tooltip to override the property description"),
Packit 1e8aac
			    NULL, G_PARAM_READWRITE));
Packit 1e8aac
Packit 1e8aac
  /* Bind to template */
Packit 1e8aac
  gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/gladeui/glade-property-label.ui");
Packit 1e8aac
  gtk_widget_class_bind_template_child_private (widget_class, GladePropertyLabel, box);
Packit 1e8aac
  gtk_widget_class_bind_template_child_private (widget_class, GladePropertyLabel, label);
Packit 1e8aac
  gtk_widget_class_bind_template_child_private (widget_class, GladePropertyLabel, warning);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
Packit 1e8aac
/***********************************************************
Packit 1e8aac
 *                     GObjectClass                        *
Packit 1e8aac
 ***********************************************************/
Packit 1e8aac
static void
Packit 1e8aac
glade_property_label_finalize (GObject *object)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyLabel *label = GLADE_PROPERTY_LABEL (object);
Packit 1e8aac
Packit 1e8aac
  g_free (label->priv->property_name);
Packit 1e8aac
Packit 1e8aac
  G_OBJECT_CLASS (glade_property_label_parent_class)->finalize (object);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_property_label_dispose (GObject *object)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyLabel *label = GLADE_PROPERTY_LABEL (object);
Packit 1e8aac
Packit 1e8aac
  glade_property_label_set_property (label, NULL);
Packit 1e8aac
Packit 1e8aac
  G_OBJECT_CLASS (glade_property_label_parent_class)->dispose (object);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_property_label_set_real_property (GObject         *object,
Packit 1e8aac
					guint            prop_id,
Packit 1e8aac
					const GValue    *value,
Packit 1e8aac
					GParamSpec      *pspec)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyLabel *label = GLADE_PROPERTY_LABEL (object);
Packit 1e8aac
Packit 1e8aac
  switch (prop_id)
Packit 1e8aac
    {
Packit 1e8aac
    case PROP_PROPERTY:
Packit 1e8aac
      glade_property_label_set_property (label, g_value_get_object (value));
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_PROPERTY_NAME:
Packit 1e8aac
      glade_property_label_set_property_name (label, g_value_get_string (value));
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_APPEND_COLON:
Packit 1e8aac
      glade_property_label_set_append_colon (label, g_value_get_boolean (value));
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_PACKING:
Packit 1e8aac
      glade_property_label_set_packing (label, g_value_get_boolean (value));
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_CUSTOM_TEXT:
Packit 1e8aac
      glade_property_label_set_custom_text (label, g_value_get_string (value));
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_CUSTOM_TOOLTIP:
Packit 1e8aac
      glade_property_label_set_custom_tooltip (label, g_value_get_string (value));
Packit 1e8aac
      break;
Packit 1e8aac
    default:
Packit 1e8aac
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
Packit 1e8aac
      break;
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_property_label_get_real_property (GObject         *object,
Packit 1e8aac
					guint            prop_id,
Packit 1e8aac
					GValue          *value,
Packit 1e8aac
					GParamSpec      *pspec)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyLabel *label = GLADE_PROPERTY_LABEL (object);
Packit 1e8aac
Packit 1e8aac
  switch (prop_id)
Packit 1e8aac
    {
Packit 1e8aac
    case PROP_PROPERTY:
Packit 1e8aac
      g_value_set_object (value, glade_property_label_get_property (label));
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_PROPERTY_NAME:
Packit 1e8aac
      g_value_set_string (value, glade_property_label_get_property_name (label));
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_PACKING:
Packit 1e8aac
      g_value_set_boolean (value, glade_property_label_get_packing (label));
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_APPEND_COLON:
Packit 1e8aac
      g_value_set_boolean (value, glade_property_label_get_append_colon (label));
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_CUSTOM_TEXT:
Packit 1e8aac
      g_value_set_string (value, glade_property_label_get_custom_text (label));
Packit 1e8aac
      break;
Packit 1e8aac
    case PROP_CUSTOM_TOOLTIP:
Packit 1e8aac
      g_value_set_string (value, glade_property_label_get_custom_tooltip (label));
Packit 1e8aac
      break;
Packit 1e8aac
    default:
Packit 1e8aac
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
Packit 1e8aac
      break;
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/*******************************************************************************
Packit 1e8aac
 *                            GladeEditableIface                               *                               
Packit 1e8aac
 *******************************************************************************/
Packit 1e8aac
static void
Packit 1e8aac
glade_property_label_load (GladeEditable   *editable,
Packit 1e8aac
			   GladeWidget     *widget)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyLabel *label = GLADE_PROPERTY_LABEL (editable);
Packit 1e8aac
  GladePropertyLabelPrivate *priv;
Packit 1e8aac
  GladeProperty *property;
Packit 1e8aac
Packit 1e8aac
  /* Chain up to default implementation */
Packit 1e8aac
  parent_editable_iface->load (editable, widget);
Packit 1e8aac
Packit 1e8aac
  g_return_if_fail (label->priv->property_name != NULL);
Packit 1e8aac
Packit 1e8aac
  priv = label->priv;
Packit 1e8aac
Packit 1e8aac
  if (widget)
Packit 1e8aac
    {
Packit 1e8aac
      if (priv->packing)
Packit 1e8aac
	property = glade_widget_get_pack_property (widget, priv->property_name);
Packit 1e8aac
      else
Packit 1e8aac
	property = glade_widget_get_property (widget, priv->property_name);
Packit 1e8aac
Packit 1e8aac
      glade_property_label_set_property (label, property);
Packit 1e8aac
    }
Packit 1e8aac
  else
Packit 1e8aac
    glade_property_label_set_property (label, NULL);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_property_label_set_show_name (GladeEditable *editable, gboolean show_name)
Packit 1e8aac
{
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_property_label_editable_init (GladeEditableIface *iface)
Packit 1e8aac
{
Packit 1e8aac
  parent_editable_iface = g_type_default_interface_peek (GLADE_TYPE_EDITABLE);
Packit 1e8aac
Packit 1e8aac
  iface->load = glade_property_label_load;
Packit 1e8aac
  iface->set_show_name = glade_property_label_set_show_name;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/***********************************************************
Packit 1e8aac
 *                     GtkWidgetClass                      *
Packit 1e8aac
 ***********************************************************/
Packit 1e8aac
static gint
Packit 1e8aac
glade_property_label_button_press (GtkWidget       *widget,
Packit 1e8aac
				   GdkEventButton  *event)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyLabel        *label = GLADE_PROPERTY_LABEL (widget);
Packit 1e8aac
  GladePropertyLabelPrivate *priv = label->priv;
Packit 1e8aac
Packit 1e8aac
  if (priv->property && glade_popup_is_popup_event (event))
Packit 1e8aac
    {
Packit 1e8aac
      glade_popup_property_pop (priv->property, event);
Packit 1e8aac
      return TRUE;
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  return FALSE;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/***********************************************************
Packit 1e8aac
 *                        Callbacks                        *
Packit 1e8aac
 ***********************************************************/
Packit 1e8aac
static void
Packit 1e8aac
glade_property_label_tooltip_cb (GladeProperty      *property,
Packit 1e8aac
				 const gchar        *tooltip,
Packit 1e8aac
				 const gchar        *insensitive,
Packit 1e8aac
				 const gchar        *support,
Packit 1e8aac
				 GladePropertyLabel *label)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyLabelPrivate *priv = label->priv;
Packit 1e8aac
  const gchar *choice_tooltip;
Packit 1e8aac
Packit 1e8aac
  if (glade_property_get_sensitive (property))
Packit 1e8aac
    choice_tooltip = tooltip;
Packit 1e8aac
  else
Packit 1e8aac
    choice_tooltip = insensitive;
Packit 1e8aac
Packit 1e8aac
  if (!priv->custom_tooltip)
Packit 1e8aac
    gtk_widget_set_tooltip_text (priv->label, choice_tooltip);
Packit 1e8aac
Packit 1e8aac
  gtk_widget_set_tooltip_text (priv->warning, support);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_property_label_sensitivity_cb (GladeProperty      *property,
Packit 1e8aac
				     GParamSpec         *pspec,
Packit 1e8aac
				     GladePropertyLabel *label)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyLabelPrivate *priv = label->priv;
Packit 1e8aac
  gboolean sensitive;
Packit 1e8aac
Packit 1e8aac
  sensitive = glade_property_get_enabled (property);
Packit 1e8aac
  sensitive = sensitive && glade_property_get_sensitive (priv->property);
Packit 1e8aac
  sensitive = sensitive && (glade_property_get_state (priv->property) & GLADE_STATE_SUPPORT_DISABLED) == 0;
Packit 1e8aac
Packit 1e8aac
  gtk_widget_set_sensitive (priv->box, sensitive);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static PangoAttrList *
Packit 1e8aac
get_modified_attribute (void)
Packit 1e8aac
{
Packit 1e8aac
  static PangoAttrList *attrs = NULL;
Packit 1e8aac
Packit 1e8aac
  if (!attrs)
Packit 1e8aac
    {
Packit 1e8aac
      PangoAttribute *attr;
Packit 1e8aac
Packit 1e8aac
      attrs = pango_attr_list_new ();
Packit 1e8aac
      attr  = pango_attr_style_new (PANGO_STYLE_ITALIC);
Packit 1e8aac
      pango_attr_list_insert (attrs, attr);
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  return attrs;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_property_label_state_cb (GladeProperty      *property,
Packit 1e8aac
			       GParamSpec         *pspec,
Packit 1e8aac
			       GladePropertyLabel *label)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyLabelPrivate *priv = label->priv;
Packit 1e8aac
Packit 1e8aac
  if (!priv->property)
Packit 1e8aac
    return;
Packit 1e8aac
Packit 1e8aac
  /* refresh label */
Packit 1e8aac
  if ((glade_property_get_state (priv->property) & GLADE_STATE_CHANGED) != 0)
Packit 1e8aac
    gtk_label_set_attributes (GTK_LABEL (priv->label), get_modified_attribute());
Packit 1e8aac
  else
Packit 1e8aac
    gtk_label_set_attributes (GTK_LABEL (priv->label), NULL);
Packit 1e8aac
Packit 1e8aac
  /* refresh icon */
Packit 1e8aac
  if ((glade_property_get_state (priv->property) & GLADE_STATE_UNSUPPORTED) != 0)
Packit 1e8aac
    gtk_widget_show (priv->warning);
Packit 1e8aac
  else
Packit 1e8aac
    gtk_widget_hide (priv->warning);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_property_label_property_finalized (GladePropertyLabel *label,
Packit 1e8aac
					 GladeProperty *where_property_was)
Packit 1e8aac
{
Packit 1e8aac
  /* Silent disconnect */
Packit 1e8aac
  label->priv->property = NULL;
Packit 1e8aac
  label->priv->tooltip_id = 0;
Packit 1e8aac
  label->priv->state_id = 0;
Packit 1e8aac
  label->priv->sensitive_id = 0;
Packit 1e8aac
  label->priv->enabled_id = 0;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/***********************************************************
Packit 1e8aac
 *                            API                          *
Packit 1e8aac
 ***********************************************************/
Packit 1e8aac
GtkWidget *
Packit 1e8aac
glade_property_label_new (void)
Packit 1e8aac
{
Packit 1e8aac
  return g_object_new (GLADE_TYPE_PROPERTY_LABEL, NULL);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
void
Packit 1e8aac
glade_property_label_set_property_name (GladePropertyLabel *label,
Packit 1e8aac
					const gchar        *property_name)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyLabelPrivate *priv;
Packit 1e8aac
Packit 1e8aac
  g_return_if_fail (GLADE_IS_PROPERTY_LABEL (label));
Packit 1e8aac
Packit 1e8aac
  priv = label->priv;
Packit 1e8aac
Packit 1e8aac
  if (g_strcmp0 (priv->property_name, property_name))
Packit 1e8aac
    {
Packit 1e8aac
      g_free (priv->property_name);
Packit 1e8aac
      priv->property_name = g_strdup (property_name);
Packit 1e8aac
Packit 1e8aac
      g_object_notify (G_OBJECT (label), "property-name");
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
const gchar *
Packit 1e8aac
glade_property_label_get_property_name (GladePropertyLabel *label)
Packit 1e8aac
{
Packit 1e8aac
  g_return_val_if_fail (GLADE_IS_PROPERTY_LABEL (label), NULL);
Packit 1e8aac
Packit 1e8aac
  return label->priv->property_name;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
void
Packit 1e8aac
glade_property_label_set_append_colon (GladePropertyLabel *label,
Packit 1e8aac
				       gboolean            append_colon)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyLabelPrivate *priv;
Packit 1e8aac
Packit 1e8aac
  g_return_if_fail (GLADE_IS_PROPERTY_LABEL (label));
Packit 1e8aac
Packit 1e8aac
  priv = label->priv;
Packit 1e8aac
Packit 1e8aac
  if (priv->append_colon != append_colon)
Packit 1e8aac
    {
Packit 1e8aac
      priv->append_colon = append_colon;
Packit 1e8aac
Packit 1e8aac
      g_object_notify (G_OBJECT (label), "append-colon");
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
gboolean
Packit 1e8aac
glade_property_label_get_append_colon (GladePropertyLabel *label)
Packit 1e8aac
{
Packit 1e8aac
  g_return_val_if_fail (GLADE_IS_PROPERTY_LABEL (label), FALSE);
Packit 1e8aac
Packit 1e8aac
  return label->priv->append_colon;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
void
Packit 1e8aac
glade_property_label_set_packing (GladePropertyLabel *label,
Packit 1e8aac
				  gboolean            packing)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyLabelPrivate *priv;
Packit 1e8aac
Packit 1e8aac
  g_return_if_fail (GLADE_IS_PROPERTY_LABEL (label));
Packit 1e8aac
Packit 1e8aac
  priv = label->priv;
Packit 1e8aac
Packit 1e8aac
  if (priv->packing != packing)
Packit 1e8aac
    {
Packit 1e8aac
      priv->packing = packing;
Packit 1e8aac
Packit 1e8aac
      g_object_notify (G_OBJECT (label), "packing");
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
gboolean
Packit 1e8aac
glade_property_label_get_packing (GladePropertyLabel *label)
Packit 1e8aac
{
Packit 1e8aac
  g_return_val_if_fail (GLADE_IS_PROPERTY_LABEL (label), FALSE);
Packit 1e8aac
Packit 1e8aac
  return label->priv->packing;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
void
Packit 1e8aac
glade_property_label_set_custom_text (GladePropertyLabel *label,
Packit 1e8aac
				      const gchar        *custom_text)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyLabelPrivate *priv;
Packit 1e8aac
  gboolean changed = FALSE;
Packit 1e8aac
Packit 1e8aac
  g_return_if_fail (GLADE_IS_PROPERTY_LABEL (label));
Packit 1e8aac
Packit 1e8aac
  priv = label->priv;
Packit 1e8aac
Packit 1e8aac
  if (custom_text)
Packit 1e8aac
    {
Packit 1e8aac
      if (!priv->custom_text)
Packit 1e8aac
	changed = TRUE;
Packit 1e8aac
Packit 1e8aac
      priv->custom_text = TRUE;
Packit 1e8aac
Packit 1e8aac
      gtk_label_set_markup (GTK_LABEL (priv->label), custom_text);
Packit 1e8aac
    }
Packit 1e8aac
  else
Packit 1e8aac
    {
Packit 1e8aac
      if (priv->custom_text)
Packit 1e8aac
	changed = TRUE;
Packit 1e8aac
Packit 1e8aac
      priv->custom_text = FALSE;
Packit 1e8aac
Packit 1e8aac
      if (priv->property)
Packit 1e8aac
	  glade_property_label_state_cb (priv->property, NULL, label);
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  if (changed)
Packit 1e8aac
    g_object_notify (G_OBJECT (label), "custom-text");
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
const gchar *
Packit 1e8aac
glade_property_label_get_custom_text (GladePropertyLabel *label)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyLabelPrivate *priv;
Packit 1e8aac
Packit 1e8aac
  g_return_val_if_fail (GLADE_IS_PROPERTY_LABEL (label), NULL);
Packit 1e8aac
Packit 1e8aac
  priv = label->priv;
Packit 1e8aac
Packit 1e8aac
  if (priv->custom_text)
Packit 1e8aac
    return gtk_label_get_text (GTK_LABEL (priv->label));
Packit 1e8aac
Packit 1e8aac
  return NULL;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
void
Packit 1e8aac
glade_property_label_set_custom_tooltip (GladePropertyLabel *label,
Packit 1e8aac
					 const gchar        *custom_tooltip)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyLabelPrivate *priv;
Packit 1e8aac
  gboolean changed = FALSE;
Packit 1e8aac
Packit 1e8aac
  g_return_if_fail (GLADE_IS_PROPERTY_LABEL (label));
Packit 1e8aac
Packit 1e8aac
  priv = label->priv;
Packit 1e8aac
Packit 1e8aac
  if (custom_tooltip)
Packit 1e8aac
    {
Packit 1e8aac
      if (!priv->custom_tooltip)
Packit 1e8aac
	changed = TRUE;
Packit 1e8aac
Packit 1e8aac
      priv->custom_tooltip = TRUE;
Packit 1e8aac
Packit 1e8aac
      gtk_widget_set_tooltip_text (GTK_WIDGET (priv->label), custom_tooltip);
Packit 1e8aac
    }
Packit 1e8aac
  else
Packit 1e8aac
    {
Packit 1e8aac
      if (priv->custom_tooltip)
Packit 1e8aac
	changed = TRUE;
Packit 1e8aac
Packit 1e8aac
      priv->custom_tooltip = FALSE;
Packit 1e8aac
Packit 1e8aac
      if (priv->property)
Packit 1e8aac
	{
Packit 1e8aac
	  GladePropertyClass *pclass = glade_property_get_class (priv->property);
Packit 1e8aac
Packit 1e8aac
	  glade_property_label_tooltip_cb
Packit 1e8aac
	    (priv->property, glade_property_class_get_tooltip (pclass),
Packit 1e8aac
	     glade_propert_get_insensitive_tooltip (priv->property),
Packit 1e8aac
	     glade_property_get_support_warning (priv->property), label);
Packit 1e8aac
	}
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  if (changed)
Packit 1e8aac
    g_object_notify (G_OBJECT (label), "custom-tooltip");
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
const gchar *
Packit 1e8aac
glade_property_label_get_custom_tooltip (GladePropertyLabel *label)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyLabelPrivate *priv;
Packit 1e8aac
Packit 1e8aac
  g_return_val_if_fail (GLADE_IS_PROPERTY_LABEL (label), NULL);
Packit 1e8aac
Packit 1e8aac
  priv = label->priv;
Packit 1e8aac
Packit 1e8aac
  if (priv->custom_tooltip)
Packit 1e8aac
    return gtk_widget_get_tooltip_text (priv->label);
Packit 1e8aac
Packit 1e8aac
  return NULL;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
void
Packit 1e8aac
glade_property_label_set_property (GladePropertyLabel *label,
Packit 1e8aac
				   GladeProperty      *property)
Packit 1e8aac
{
Packit 1e8aac
  GladePropertyLabelPrivate *priv;
Packit 1e8aac
Packit 1e8aac
  g_return_if_fail (GLADE_IS_PROPERTY_LABEL (label));
Packit 1e8aac
  g_return_if_fail (property == NULL || GLADE_IS_PROPERTY (property));
Packit 1e8aac
Packit 1e8aac
  priv = label->priv;
Packit 1e8aac
Packit 1e8aac
  if (priv->property != property)
Packit 1e8aac
    {
Packit 1e8aac
Packit 1e8aac
      /* Disconnect last */
Packit 1e8aac
      if (priv->property)
Packit 1e8aac
	{
Packit 1e8aac
	  if (priv->tooltip_id > 0)
Packit 1e8aac
	    g_signal_handler_disconnect (priv->property, priv->tooltip_id);
Packit 1e8aac
	  if (priv->state_id > 0)
Packit 1e8aac
	    g_signal_handler_disconnect (priv->property, priv->state_id);
Packit 1e8aac
	  if (priv->sensitive_id > 0)
Packit 1e8aac
	    g_signal_handler_disconnect (priv->property, priv->sensitive_id);
Packit 1e8aac
	  if (priv->enabled_id > 0)
Packit 1e8aac
	    g_signal_handler_disconnect (priv->property, priv->enabled_id);
Packit 1e8aac
Packit 1e8aac
	  priv->tooltip_id = 0;
Packit 1e8aac
	  priv->state_id = 0;
Packit 1e8aac
	  priv->sensitive_id = 0;
Packit 1e8aac
	  priv->enabled_id = 0;
Packit 1e8aac
Packit 1e8aac
	  g_object_weak_unref (G_OBJECT (priv->property),
Packit 1e8aac
			       (GWeakNotify) glade_property_label_property_finalized, label);
Packit 1e8aac
	}
Packit 1e8aac
Packit 1e8aac
      priv->property = property;
Packit 1e8aac
Packit 1e8aac
      /* Connect new */
Packit 1e8aac
      if (priv->property)
Packit 1e8aac
	{
Packit 1e8aac
	  GladePropertyClass *pclass = glade_property_get_class (priv->property);
Packit 1e8aac
Packit 1e8aac
	  priv->tooltip_id =
Packit 1e8aac
	    g_signal_connect (G_OBJECT (priv->property),
Packit 1e8aac
			      "tooltip-changed",
Packit 1e8aac
			      G_CALLBACK (glade_property_label_tooltip_cb),
Packit 1e8aac
			      label);
Packit 1e8aac
	  priv->sensitive_id =
Packit 1e8aac
	    g_signal_connect (G_OBJECT (priv->property),
Packit 1e8aac
			      "notify::sensitive",
Packit 1e8aac
			      G_CALLBACK (glade_property_label_sensitivity_cb),
Packit 1e8aac
			      label);
Packit 1e8aac
	  priv->state_id =
Packit 1e8aac
	    g_signal_connect (G_OBJECT (priv->property),
Packit 1e8aac
			      "notify::state",
Packit 1e8aac
			      G_CALLBACK (glade_property_label_state_cb), label);
Packit 1e8aac
	  priv->enabled_id =
Packit 1e8aac
	    g_signal_connect (G_OBJECT (priv->property),
Packit 1e8aac
			      "notify::enabled",
Packit 1e8aac
			      G_CALLBACK (glade_property_label_sensitivity_cb),
Packit 1e8aac
			      label);
Packit 1e8aac
Packit 1e8aac
	  g_object_weak_ref (G_OBJECT (priv->property),
Packit 1e8aac
			     (GWeakNotify) glade_property_label_property_finalized, label);
Packit 1e8aac
Packit 1e8aac
	  /* Load initial tooltips
Packit 1e8aac
	   */
Packit 1e8aac
	  glade_property_label_tooltip_cb
Packit 1e8aac
	    (property, glade_property_class_get_tooltip (pclass),
Packit 1e8aac
	     glade_propert_get_insensitive_tooltip (property),
Packit 1e8aac
	     glade_property_get_support_warning (property), label);
Packit 1e8aac
Packit 1e8aac
	  /* Load initial sensitive state.
Packit 1e8aac
	   */
Packit 1e8aac
	  glade_property_label_sensitivity_cb (property, NULL, label);
Packit 1e8aac
Packit 1e8aac
	  /* Load intial label state
Packit 1e8aac
	   */
Packit 1e8aac
	  glade_property_label_state_cb (property, NULL, label);
Packit 1e8aac
Packit 1e8aac
	  if (!priv->custom_text)
Packit 1e8aac
	    {
Packit 1e8aac
	      if (priv->append_colon)
Packit 1e8aac
		{
Packit 1e8aac
		  gchar *text = g_strdup_printf ("%s:", glade_property_class_get_name (pclass));
Packit 1e8aac
		  gtk_label_set_text (GTK_LABEL (priv->label), text);
Packit 1e8aac
		  g_free (text);
Packit 1e8aac
		}
Packit 1e8aac
	      else
Packit 1e8aac
		{
Packit 1e8aac
		  gtk_label_set_text (GTK_LABEL (priv->label),
Packit 1e8aac
				      glade_property_class_get_name (pclass));
Packit 1e8aac
		}
Packit 1e8aac
	    }
Packit 1e8aac
	}
Packit 1e8aac
Packit 1e8aac
      g_object_notify (G_OBJECT (label), "property");
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
GladeProperty *
Packit 1e8aac
glade_property_label_get_property (GladePropertyLabel *label)
Packit 1e8aac
{
Packit 1e8aac
  g_return_val_if_fail (GLADE_IS_PROPERTY_LABEL (label), NULL);
Packit 1e8aac
Packit 1e8aac
  return label->priv->property;
Packit 1e8aac
}