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