Commit 79c6ce0e authored by Tristan Van Berkom's avatar Tristan Van Berkom

GladeEditorProperty & GladePropertyShell: Added "custom-text" property

Allows overriding the text which might show up in a GladeEpropCheck
(or any item label created by a GladeEditorProperty, which might be
created by a GladePropertyShell).
parent 7e3ad235
......@@ -57,7 +57,8 @@ enum
PROP_0,
PROP_PROPERTY_CLASS,
PROP_USE_COMMAND,
PROP_DISABLE_CHECK
PROP_DISABLE_CHECK,
PROP_CUSTOM_TEXT
};
enum
......@@ -90,8 +91,10 @@ struct _GladeEditorPropertyPrivate
gulong sensitive_id; /* signal connection id for sensitivity changes */
gulong changed_id; /* signal connection id for value changes */
gulong enabled_id; /* signal connection id for enable/disable changes */
gboolean loading; /* True during glade_editor_property_load calls, this
gchar *custom_text; /* Custom text to display in the property label */
guint loading : 1; /* True during glade_editor_property_load calls, this
* is used to avoid feedback from input widgets.
*/
guint committing : 1; /* True while the editor property itself is applying
......@@ -190,6 +193,38 @@ glade_editor_property_commit_no_callback (GladeEditorProperty *eprop,
g_signal_handler_unblock (G_OBJECT (eprop->priv->property), eprop->priv->changed_id);
}
void
glade_editor_property_set_custom_text (GladeEditorProperty *eprop,
const gchar *custom_text)
{
GladeEditorPropertyPrivate *priv;
g_return_if_fail (GLADE_IS_EDITOR_PROPERTY (eprop));
priv = eprop->priv;
if (g_strcmp0 (priv->custom_text, custom_text) != 0)
{
g_free (priv->custom_text);
priv->custom_text = g_strdup (custom_text);
if (priv->item_label)
glade_property_label_set_custom_text (GLADE_PROPERTY_LABEL (priv->item_label),
custom_text);
g_object_notify (G_OBJECT (eprop), "custom-text");
}
}
const gchar *
glade_editor_property_get_custom_text (GladeEditorProperty *eprop)
{
g_return_val_if_fail (GLADE_IS_EDITOR_PROPERTY (eprop), NULL);
return eprop->priv->custom_text;
}
GtkWidget *
glade_editor_property_get_item_label (GladeEditorProperty *eprop)
{
......@@ -371,6 +406,8 @@ glade_editor_property_finalize (GObject *object)
/* detatch from loaded property */
glade_editor_property_load_common (eprop, NULL);
g_free (eprop->priv->custom_text);
G_OBJECT_CLASS (table_class)->finalize (object);
}
......@@ -415,6 +452,9 @@ glade_editor_property_set_property (GObject *object,
gtk_widget_show (eprop->priv->check);
}
break;
case PROP_CUSTOM_TEXT:
glade_editor_property_set_custom_text (eprop, g_value_get_string (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
......@@ -440,6 +480,9 @@ glade_editor_property_real_get_property (GObject *object,
case PROP_DISABLE_CHECK:
g_value_set_boolean (value, eprop->priv->disable_check);
break;
case PROP_CUSTOM_TEXT:
g_value_set_string (value, eprop->priv->custom_text);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
......@@ -642,6 +685,13 @@ glade_editor_property_class_init (GladeEditorPropertyClass *eprop_class)
_("Whether to explicitly disable the check button"),
FALSE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
g_object_class_install_property
(object_class, PROP_CUSTOM_TEXT,
g_param_spec_string
("custom-text", _("Custom Text"),
_("Custom Text to display in the property label"),
NULL, G_PARAM_READWRITE));
g_type_class_add_private (eprop_class, sizeof (GladeEditorPropertyPrivate));
}
......@@ -2388,7 +2438,6 @@ typedef struct
GladeEditorProperty parent_instance;
GtkWidget *button;
GtkWidget *label;
} GladeEPropCheck;
GLADE_MAKE_EPROP (GladeEPropCheck, glade_eprop_check)
......@@ -2408,20 +2457,9 @@ glade_eprop_check_finalize (GObject *object)
static void
glade_eprop_check_load (GladeEditorProperty *eprop, GladeProperty *property)
{
GladeEPropCheck *eprop_check = GLADE_EPROP_CHECK (eprop);
GladeWidget *widget;
/* Chain up first */
editor_property_class->load (eprop, property);
/* Load the inner label */
if (property)
{
widget = glade_property_get_widget (property);
if (widget)
glade_editable_load (GLADE_EDITABLE (eprop_check->label), widget);
}
if (property)
{
GladeEPropCheck *eprop_check = GLADE_EPROP_CHECK (eprop);
......@@ -2453,22 +2491,26 @@ glade_eprop_check_create_input (GladeEditorProperty *eprop)
{
GladeEPropCheck *eprop_check = GLADE_EPROP_CHECK (eprop);
GladePropertyClass *pclass;
GtkWidget *label;
pclass = eprop->priv->klass;
/* Add the property label as the check button's child */
eprop_check->label = glade_property_label_new ();
glade_property_label_set_property_name (GLADE_PROPERTY_LABEL (eprop_check->label),
label = glade_editor_property_get_item_label (eprop);
glade_property_label_set_property_name (GLADE_PROPERTY_LABEL (label),
glade_property_class_id (pclass));
glade_property_label_set_packing (GLADE_PROPERTY_LABEL (eprop_check->label),
glade_property_label_set_packing (GLADE_PROPERTY_LABEL (label),
glade_property_class_get_is_packing (pclass));
glade_property_label_set_append_colon (GLADE_PROPERTY_LABEL (eprop_check->label), FALSE);
gtk_widget_show (eprop_check->label);
glade_property_label_set_append_colon (GLADE_PROPERTY_LABEL (label), FALSE);
glade_property_label_set_custom_text (GLADE_PROPERTY_LABEL (label),
eprop->priv->custom_text);
gtk_widget_show (label);
eprop_check->button = gtk_check_button_new ();
gtk_button_set_focus_on_click (GTK_BUTTON (eprop_check->button), FALSE);
gtk_container_add (GTK_CONTAINER (eprop_check->button), eprop_check->label);
gtk_container_add (GTK_CONTAINER (eprop_check->button), label);
gtk_widget_set_halign (eprop_check->button, GTK_ALIGN_START);
gtk_widget_set_valign (eprop_check->button, GTK_ALIGN_CENTER);
......
......@@ -107,9 +107,11 @@ void glade_editor_property_load_by_widget (GladeEditorProperty *
void glade_editor_property_commit (GladeEditorProperty *eprop,
GValue *value);
void glade_editor_property_commit_no_callback (GladeEditorProperty *eprop,
GValue *value);
void glade_editor_property_set_custom_text(GladeEditorProperty *eprop,
const gchar *custom_text);
const gchar *glade_editor_property_get_custom_text(GladeEditorProperty *eprop);
GtkWidget *glade_editor_property_get_item_label (GladeEditorProperty *eprop);
GladePropertyClass *glade_editor_property_get_pclass (GladeEditorProperty *eprop);
......
......@@ -57,6 +57,7 @@ struct _GladePropertyShellPrivate
/* Properties, used to load the internal editor */
GType editor_type;
gchar *property_name;
gchar *custom_text;
guint packing : 1;
guint use_command : 1;
};
......@@ -66,7 +67,8 @@ enum {
PROP_PROPERTY_NAME,
PROP_PACKING,
PROP_USE_COMMAND,
PROP_EDITOR_TYPE
PROP_EDITOR_TYPE,
PROP_CUSTOM_TEXT
};
enum
......@@ -129,6 +131,12 @@ glade_property_shell_class_init (GladePropertyShellClass *class)
_("Specify the actual editor property type name to use for this shell"),
NULL, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property
(gobject_class, PROP_CUSTOM_TEXT,
g_param_spec_string ("custom-text", _("Custom Text"),
_("Custom Text to display in the property label"),
NULL, G_PARAM_READWRITE));
/**
* GladePropertyShell::pre-commit:
* @gladeeditorproperty: the #GladeEditorProperty which changed value
......@@ -174,6 +182,7 @@ glade_property_shell_finalize (GObject *object)
GladePropertyShell *shell = GLADE_PROPERTY_SHELL (object);
g_free (shell->priv->property_name);
g_free (shell->priv->custom_text);
G_OBJECT_CLASS (glade_property_shell_parent_class)->finalize (object);
}
......@@ -211,6 +220,9 @@ glade_property_shell_set_real_property (GObject *object,
else
priv->editor_type = type;
break;
case PROP_CUSTOM_TEXT:
glade_property_shell_set_custom_text (shell, g_value_get_string (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
......@@ -237,6 +249,9 @@ glade_property_shell_get_real_property (GObject *object,
case PROP_USE_COMMAND:
g_value_set_boolean (value, glade_property_shell_get_use_command (shell));
break;
case PROP_CUSTOM_TEXT:
g_value_set_string (value, glade_property_shell_get_custom_text (shell));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
......@@ -284,6 +299,8 @@ glade_property_shell_set_eprop (GladePropertyShell *shell,
if (priv->property_editor)
{
glade_editor_property_set_custom_text (priv->property_editor, priv->custom_text);
priv->pre_commit_id = g_signal_connect (priv->property_editor, "commit",
G_CALLBACK (propagate_pre_commit), shell);
priv->post_commit_id = g_signal_connect_after (priv->property_editor, "commit",
......@@ -410,7 +427,7 @@ glade_property_shell_set_property_name (GladePropertyShell *shell,
priv = shell->priv;
if (g_strcmp0 (priv->property_name, property_name))
if (g_strcmp0 (priv->property_name, property_name) != 0)
{
g_free (priv->property_name);
priv->property_name = g_strdup (property_name);
......@@ -427,6 +444,36 @@ glade_property_shell_get_property_name (GladePropertyShell *shell)
return shell->priv->property_name;
}
void
glade_property_shell_set_custom_text (GladePropertyShell *shell,
const gchar *custom_text)
{
GladePropertyShellPrivate *priv;
g_return_if_fail (GLADE_IS_PROPERTY_SHELL (shell));
priv = shell->priv;
if (g_strcmp0 (priv->custom_text, custom_text) != 0)
{
g_free (priv->custom_text);
priv->custom_text = g_strdup (custom_text);
if (priv->property_editor)
glade_editor_property_set_custom_text (priv->property_editor, custom_text);
g_object_notify (G_OBJECT (shell), "custom-text");
}
}
const gchar *
glade_property_shell_get_custom_text (GladePropertyShell *shell)
{
g_return_val_if_fail (GLADE_IS_PROPERTY_SHELL (shell), NULL);
return shell->priv->custom_text;
}
void
glade_property_shell_set_packing (GladePropertyShell *shell,
gboolean packing)
......
......@@ -59,6 +59,9 @@ GtkWidget *glade_property_shell_new (void);
void glade_property_shell_set_property_name (GladePropertyShell *shell,
const gchar *property_name);
const gchar *glade_property_shell_get_property_name (GladePropertyShell *shell);
void glade_property_shell_set_custom_text (GladePropertyShell *shell,
const gchar *custom_text);
const gchar *glade_property_shell_get_custom_text (GladePropertyShell *shell);
void glade_property_shell_set_packing (GladePropertyShell *shell,
gboolean packing);
gboolean glade_property_shell_get_packing (GladePropertyShell *shell);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment