[glade] Added true-string and false-string properties Start using default height and biggest width of both t
- From: Juan Pablo Ugarte <jpu src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glade] Added true-string and false-string properties Start using default height and biggest width of both t
- Date: Mon, 1 Apr 2013 19:35:23 +0000 (UTC)
commit 9b100d8ef5e421166a5ceaf028b17b859164e113
Author: Juan Pablo Ugarte <juanpablougarte gmail com>
Date: Mon Apr 1 16:33:37 2013 -0300
Added true-string and false-string properties
Start using default height and biggest width of both true and false string including normal button
paddings
gladeui/glade-bool-toggle.c | 153 +++++++++++++++++++++++++++++++++----------
gladeui/glade-bool-toggle.h | 7 +-
2 files changed, 121 insertions(+), 39 deletions(-)
---
diff --git a/gladeui/glade-bool-toggle.c b/gladeui/glade-bool-toggle.c
index 8038ef6..af918f5 100644
--- a/gladeui/glade-bool-toggle.c
+++ b/gladeui/glade-bool-toggle.c
@@ -25,19 +25,48 @@
#include <config.h>
#endif
-#define TRUE_STRING _("<span color='green'>✓</span>True")
-#define FALSE_STRING _("<span color='red'>✗</span>False")
-
#include "glade-bool-toggle.h"
#include <glib/gi18n-lib.h>
+enum
+{
+ PROP_0,
+ PROP_TRUE_STRING,
+ PROP_FALSE_STRING
+};
+
+struct _GladeBoolTogglePrivate
+{
+ gchar *true_string;
+ gchar *false_string;
+};
+
+#define GLADE_BOOL_TOGGLE_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), \
+ GLADE_TYPE_BOOL_TOGGLE, \
+ GladeBoolTogglePrivate))
+#define GLADE_BOOL_TOGGLE_PRIVATE(object) (((GladeBoolToggle*)object)->priv)
+
G_DEFINE_TYPE (GladeBoolToggle, glade_bool_toggle, GTK_TYPE_TOGGLE_BUTTON);
+
+/* translators: This is the string used in boolean property editor toggle button when is active */
+#define TRUE_STRING _("<span color='green'>✓</span>True")
+
+/* translators: This is the string used in boolean property editor toggle button when is not active */
+#define FALSE_STRING _("<span color='red'>✗</span>False")
+
static void
glade_bool_toggle_init (GladeBoolToggle *toggle)
{
+ GladeBoolTogglePrivate *priv = GLADE_BOOL_TOGGLE_GET_PRIVATE (toggle);
GtkWidget *label = gtk_label_new ("");
- gtk_label_set_markup (GTK_LABEL (label), FALSE_STRING);
+
+ toggle->priv = priv;
+
+ priv->true_string = g_strdup (TRUE_STRING);
+ priv->false_string = g_strdup (FALSE_STRING);
+
+ gtk_label_set_markup (GTK_LABEL (label), priv->false_string);
gtk_container_add (GTK_CONTAINER (toggle), label);
gtk_widget_show (label);
}
@@ -49,32 +78,36 @@ glade_bool_toggle_finalize (GObject *object)
}
static gint
-layout_get_value (PangoLayout *layout, const gchar *string, gboolean width)
+layout_get_value (PangoLayout *layout, const gchar *string)
{
PangoRectangle rect;
pango_layout_set_markup (layout, string, -1);
pango_layout_get_extents (layout, NULL, &rect);
pango_extents_to_pixels (&rect, NULL);
- return width ? rect.width : rect.height;
+ return rect.width;
}
static void
-glade_bool_toggle_get_preferred_size (GtkWidget *widget,
- gboolean width,
- gint *minimum,
- gint *natural)
+glade_bool_toggle_get_preferred_width (GtkWidget *widget,
+ gint *minimum,
+ gint *natural)
{
- PangoLayout *layout;
- gint value, tmp;
+ GladeBoolTogglePrivate *priv = GLADE_BOOL_TOGGLE_PRIVATE (widget);
+ PangoLayout *layout = gtk_widget_create_pango_layout (widget, "");
+ GtkWidget *label = gtk_bin_get_child (GTK_BIN (widget));
+ gint value, width, true_width, false_width;
+
+ GTK_WIDGET_CLASS (glade_bool_toggle_parent_class)->get_preferred_width (widget, &width, NULL);
+
+ true_width = layout_get_value (layout, priv->true_string);
+ false_width = layout_get_value (layout, priv->false_string);
- layout = gtk_widget_create_pango_layout (widget, "");
-
- value = MAX (layout_get_value (layout, TRUE_STRING, width),
- layout_get_value (layout, FALSE_STRING, width));
+ if (g_strcmp0 (gtk_label_get_label (GTK_LABEL (label)), priv->true_string))
+ value = width - false_width;
+ else
+ value = width - true_width;
- /* Add some extra spacing */
- tmp = layout_get_value (layout, (width) ? "-" : "'", TRUE);
- value += (width) ? tmp*2 : tmp;
+ value += MAX (true_width, false_width);
g_object_unref (layout);
@@ -86,32 +119,65 @@ glade_bool_toggle_get_preferred_size (GtkWidget *widget,
}
static void
-glade_bool_toggle_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+glade_bool_toggle_toggled (GtkToggleButton *toggle_button)
{
- glade_bool_toggle_get_preferred_size (widget, TRUE, minimum, natural);
+ GladeBoolTogglePrivate *priv = GLADE_BOOL_TOGGLE_PRIVATE (toggle_button);
+ GtkWidget *label = gtk_bin_get_child (GTK_BIN (toggle_button));
+
+ if (GTK_IS_LABEL (label))
+ {
+ if (gtk_toggle_button_get_active (toggle_button))
+ gtk_label_set_markup (GTK_LABEL (label), priv->true_string);
+ else
+ gtk_label_set_markup (GTK_LABEL (label), priv->false_string);
+ }
}
static void
-glade_bool_toggle_get_preferred_height (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+glade_bool_toggle_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
{
- glade_bool_toggle_get_preferred_size (widget, FALSE, minimum, natural);
+ GladeBoolTogglePrivate *priv = GLADE_BOOL_TOGGLE_PRIVATE (object);
+
+ switch (prop_id)
+ {
+ case PROP_TRUE_STRING:
+ g_free (priv->true_string);
+ priv->true_string = g_value_dup_string (value);
+ glade_bool_toggle_toggled (GTK_TOGGLE_BUTTON (object));
+ break;
+ case PROP_FALSE_STRING:
+ g_free (priv->false_string);
+ priv->false_string = g_value_dup_string (value);
+ glade_bool_toggle_toggled (GTK_TOGGLE_BUTTON (object));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
}
static void
-glade_bool_toggle_toggled (GtkToggleButton *toggle_button)
+glade_bool_toggle_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
{
- GtkWidget *label = gtk_bin_get_child (GTK_BIN (toggle_button));
-
- if (GTK_IS_LABEL (label))
+ GladeBoolTogglePrivate *priv = GLADE_BOOL_TOGGLE_PRIVATE (object);
+
+ switch (prop_id)
{
- if (gtk_toggle_button_get_active (toggle_button))
- gtk_label_set_markup (GTK_LABEL (label), TRUE_STRING);
- else
- gtk_label_set_markup (GTK_LABEL (label), FALSE_STRING);
+ case PROP_TRUE_STRING:
+ g_value_set_string (value, priv->true_string);
+ break;
+ case PROP_FALSE_STRING:
+ g_value_set_string (value, priv->false_string);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
}
}
@@ -122,10 +188,25 @@ glade_bool_toggle_class_init (GladeBoolToggleClass *klass)
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
GtkToggleButtonClass *toggle_class = GTK_TOGGLE_BUTTON_CLASS (klass);
+ object_class->get_property = glade_bool_toggle_get_property;
+ object_class->set_property = glade_bool_toggle_set_property;
object_class->finalize = glade_bool_toggle_finalize;
widget_class->get_preferred_width = glade_bool_toggle_get_preferred_width;
- widget_class->get_preferred_height = glade_bool_toggle_get_preferred_height;
toggle_class->toggled = glade_bool_toggle_toggled;
+
+ g_object_class_install_property (object_class, PROP_TRUE_STRING,
+ g_param_spec_string ("true-string", "True string",
+ "String to use when toggled",
+ TRUE_STRING,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class, PROP_FALSE_STRING,
+ g_param_spec_string ("false-string", "False string",
+ "String to use when not toggled",
+ FALSE_STRING,
+ G_PARAM_READWRITE));
+
+ g_type_class_add_private (object_class, sizeof (GladeBoolTogglePrivate));
}
GtkWidget *
diff --git a/gladeui/glade-bool-toggle.h b/gladeui/glade-bool-toggle.h
index 186c5b3..ae1f6e2 100644
--- a/gladeui/glade-bool-toggle.h
+++ b/gladeui/glade-bool-toggle.h
@@ -35,8 +35,9 @@ G_BEGIN_DECLS
#define GLADE_IS_BOOL_TOGGLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GLADE_TYPE_BOOL_TOGGLE))
#define GLADE_BOOL_TOGGLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GLADE_TYPE_BOOL_TOGGLE,
GladeBoolToggleClass))
-typedef struct _GladeBoolToggleClass GladeBoolToggleClass;
-typedef struct _GladeBoolToggle GladeBoolToggle;
+typedef struct _GladeBoolToggle GladeBoolToggle;
+typedef struct _GladeBoolTogglePrivate GladeBoolTogglePrivate;
+typedef struct _GladeBoolToggleClass GladeBoolToggleClass;
struct _GladeBoolToggleClass
{
@@ -46,7 +47,7 @@ struct _GladeBoolToggleClass
struct _GladeBoolToggle
{
GtkToggleButton parent_instance;
- gpointer priv;
+ GladeBoolTogglePrivate *priv;
};
GType glade_bool_toggle_get_type (void) G_GNUC_CONST;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]