changeset 21282:a14c663152cc

Use gobject properties for labels.
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Fri, 09 Nov 2007 01:45:10 +0000
parents d7d3f31d52fb
children 406aa3be6b32
files finch/libgnt/gntlabel.c
diffstat 1 files changed, 69 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/finch/libgnt/gntlabel.c	Tue Nov 06 21:19:19 2007 +0000
+++ b/finch/libgnt/gntlabel.c	Fri Nov 09 01:45:10 2007 +0000
@@ -27,6 +27,13 @@
 
 enum
 {
+	PROP_0,
+	PROP_TEXT,
+	PROP_TEXT_FLAG
+};
+
+enum
+{
 	SIGS = 1,
 };
 
@@ -61,14 +68,72 @@
 }
 
 static void
+gnt_label_set_property(GObject *obj, guint prop_id, const GValue *value,
+		GParamSpec *spec)
+{
+	GntLabel *label = GNT_LABEL(obj);
+	switch (prop_id) {
+		case PROP_TEXT:
+			g_free(label->text);
+			label->text = gnt_util_onscreen_fit_string(g_value_get_string(value), -1);
+			break;
+		case PROP_TEXT_FLAG:
+			label->flags = g_value_get_int(value);
+			break;
+		default:
+			g_return_if_reached();
+			break;
+	}
+}
+
+static void
+gnt_label_get_property(GObject *obj, guint prop_id, GValue *value,
+		GParamSpec *spec)
+{
+	GntLabel *label = GNT_LABEL(obj);
+	switch (prop_id) {
+		case PROP_TEXT:
+			g_value_set_string(value, label->text);
+			break;
+		case PROP_TEXT_FLAG:
+			g_value_set_int(value, label->flags);
+			break;
+		default:
+			break;
+	}
+}
+
+static void
 gnt_label_class_init(GntLabelClass *klass)
 {
+	GObjectClass *gclass = G_OBJECT_CLASS(klass);
+
 	parent_class = GNT_WIDGET_CLASS(klass);
 	parent_class->destroy = gnt_label_destroy;
 	parent_class->draw = gnt_label_draw;
 	parent_class->map = NULL;
 	parent_class->size_request = gnt_label_size_request;
 
+	gclass->set_property = gnt_label_set_property;
+	gclass->get_property = gnt_label_get_property;
+
+	g_object_class_install_property(gclass,
+			PROP_TEXT,
+			g_param_spec_string("text", "Text",
+				"The text for the label.",
+				NULL,
+				G_PARAM_READWRITE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB
+			)
+		);
+
+	g_object_class_install_property(gclass,
+			PROP_TEXT_FLAG,
+			g_param_spec_int("text-flag", "Text flag",
+				"Text attribute to use when displaying the text in the label.",
+				GNT_TEXT_FLAG_NORMAL, GNT_TEXT_FLAG_HIGHLIGHT, GNT_TEXT_FLAG_NORMAL,
+				G_PARAM_READWRITE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB
+			)
+		);
 	GNTDEBUG;
 }
 
@@ -76,6 +141,8 @@
 gnt_label_init(GTypeInstance *instance, gpointer class)
 {
 	GntWidget *widget = GNT_WIDGET(instance);
+	gnt_widget_set_take_focus(widget, FALSE);
+	GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_NO_BORDER | GNT_WIDGET_NO_SHADOW);
 	GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_GROW_X);
 	widget->priv.minw = 3;
 	widget->priv.minh = 1;
@@ -120,21 +187,13 @@
 
 GntWidget *gnt_label_new_with_format(const char *text, GntTextFormatFlags flags)
 {
-	GntWidget *widget = g_object_new(GNT_TYPE_LABEL, NULL);
-	GntLabel *label = GNT_LABEL(widget);
-
-	label->text = gnt_util_onscreen_fit_string(text, -1);
-	label->flags = flags;
-	gnt_widget_set_take_focus(widget, FALSE);
-	GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_NO_BORDER | GNT_WIDGET_NO_SHADOW);
-
+	GntWidget *widget = g_object_new(GNT_TYPE_LABEL, "text-flag", flags, "text", text, NULL);
 	return widget;
 }
 
 void gnt_label_set_text(GntLabel *label, const char *text)
 {
-	g_free(label->text);
-	label->text = gnt_util_onscreen_fit_string(text, -1);
+	g_object_set(label, "text", text, NULL);
 
 	if (GNT_WIDGET(label)->window)
 	{