Updated Indonesian translation
[empathy-mirror.git] / libempathy-gtk / empathy-roster-group.c
blob753655ab56329e60d5f87eb8eefa91ec487e7653
1 #include "config.h"
2 #include "empathy-roster-group.h"
4 #include <telepathy-glib/telepathy-glib.h>
6 G_DEFINE_TYPE (EmpathyRosterGroup, empathy_roster_group, GTK_TYPE_LIST_BOX_ROW)
8 enum
10 PROP_NAME = 1,
11 PROP_ICON,
12 N_PROPS
16 enum
18 LAST_SIGNAL
21 static guint signals[LAST_SIGNAL];
24 struct _EmpathyRosterGroupPriv
26 gchar *name;
27 gchar *icon_name;
29 /* Widgets associated with this group. EmpathyRosterGroup is not responsible
30 * of packing/displaying these widgets. This hash table is a just a set
31 * to keep track of them. */
32 GHashTable *widgets;
35 static void
36 empathy_roster_group_get_property (GObject *object,
37 guint property_id,
38 GValue *value,
39 GParamSpec *pspec)
41 EmpathyRosterGroup *self = EMPATHY_ROSTER_GROUP (object);
43 switch (property_id)
45 case PROP_NAME:
46 g_value_set_string (value, self->priv->name);
47 break;
48 case PROP_ICON:
49 g_value_set_string (value, self->priv->icon_name);
50 break;
51 default:
52 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
53 break;
57 static void
58 empathy_roster_group_set_property (GObject *object,
59 guint property_id,
60 const GValue *value,
61 GParamSpec *pspec)
63 EmpathyRosterGroup *self = EMPATHY_ROSTER_GROUP (object);
65 switch (property_id)
67 case PROP_NAME:
68 g_assert (self->priv->name == NULL); /* construct-only */
69 self->priv->name = g_value_dup_string (value);
70 break;
71 case PROP_ICON:
72 g_assert (self->priv->icon_name == NULL); /* construct-only */
73 self->priv->icon_name = g_value_dup_string (value);
74 break;
75 default:
76 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
77 break;
81 static void
82 empathy_roster_group_constructed (GObject *object)
84 EmpathyRosterGroup *self = EMPATHY_ROSTER_GROUP (object);
85 void (*chain_up) (GObject *) =
86 ((GObjectClass *) empathy_roster_group_parent_class)->constructed;
87 gchar *tmp;
88 GtkWidget *box, *label;
90 if (chain_up != NULL)
91 chain_up (object);
93 g_assert (self->priv->name != NULL);
95 box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
97 /* Icon, if any */
98 if (!tp_str_empty (self->priv->icon_name))
100 GtkWidget *icon;
102 icon = gtk_image_new_from_icon_name (self->priv->icon_name,
103 GTK_ICON_SIZE_MENU);
105 if (icon != NULL)
106 gtk_box_pack_start (GTK_BOX (box), icon, FALSE, FALSE, 0);
109 /* Label */
110 tmp = g_strdup_printf ("<b>%s</b>", self->priv->name);
111 label = gtk_label_new (tmp);
112 g_free (tmp);
114 gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
115 gtk_box_pack_start (GTK_BOX (box), label, TRUE, TRUE, 0);
117 gtk_widget_show_all (box);
119 gtk_expander_set_label_widget (self->expander, box);
122 static void
123 empathy_roster_group_dispose (GObject *object)
125 EmpathyRosterGroup *self = EMPATHY_ROSTER_GROUP (object);
126 void (*chain_up) (GObject *) =
127 ((GObjectClass *) empathy_roster_group_parent_class)->dispose;
129 tp_clear_pointer (&self->priv->widgets, g_hash_table_unref);
131 if (chain_up != NULL)
132 chain_up (object);
135 static void
136 empathy_roster_group_finalize (GObject *object)
138 EmpathyRosterGroup *self = EMPATHY_ROSTER_GROUP (object);
139 void (*chain_up) (GObject *) =
140 ((GObjectClass *) empathy_roster_group_parent_class)->finalize;
142 g_free (self->priv->name);
143 g_free (self->priv->icon_name);
145 if (chain_up != NULL)
146 chain_up (object);
149 static void
150 empathy_roster_group_class_init (
151 EmpathyRosterGroupClass *klass)
153 GObjectClass *oclass = G_OBJECT_CLASS (klass);
154 GParamSpec *spec;
156 oclass->get_property = empathy_roster_group_get_property;
157 oclass->set_property = empathy_roster_group_set_property;
158 oclass->constructed = empathy_roster_group_constructed;
159 oclass->dispose = empathy_roster_group_dispose;
160 oclass->finalize = empathy_roster_group_finalize;
162 spec = g_param_spec_string ("name", "Name",
163 "Group name",
164 NULL,
165 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
166 g_object_class_install_property (oclass, PROP_NAME, spec);
168 spec = g_param_spec_string ("icon", "Icon",
169 "Icon name",
170 NULL,
171 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
172 g_object_class_install_property (oclass, PROP_ICON, spec);
174 g_type_class_add_private (klass, sizeof (EmpathyRosterGroupPriv));
177 static void
178 empathy_roster_group_init (EmpathyRosterGroup *self)
180 self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
181 EMPATHY_TYPE_ROSTER_GROUP, EmpathyRosterGroupPriv);
183 self->priv->widgets = g_hash_table_new (NULL, NULL);
185 self->expander = GTK_EXPANDER (gtk_expander_new (NULL));
186 gtk_expander_set_use_markup (self->expander, TRUE);
187 gtk_expander_set_expanded (self->expander, TRUE);
188 gtk_widget_show (GTK_WIDGET (self->expander));
190 gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (self->expander));
193 GtkWidget *
194 empathy_roster_group_new (const gchar *name,
195 const gchar *icon)
197 return g_object_new (EMPATHY_TYPE_ROSTER_GROUP,
198 "name", name,
199 "icon", icon,
200 NULL);
203 const gchar *
204 empathy_roster_group_get_name (EmpathyRosterGroup *self)
206 return self->priv->name;
209 guint
210 empathy_roster_group_add_widget (EmpathyRosterGroup *self,
211 GtkWidget *widget)
213 g_return_val_if_fail (GTK_IS_WIDGET (widget), 0);
215 g_hash_table_add (self->priv->widgets, widget);
217 return empathy_roster_group_get_widgets_count (self);
220 guint
221 empathy_roster_group_remove_widget (EmpathyRosterGroup *self,
222 GtkWidget *widget)
224 g_return_val_if_fail (GTK_IS_WIDGET (widget), 0);
226 g_hash_table_remove (self->priv->widgets, widget);
228 return empathy_roster_group_get_widgets_count (self);
231 guint
232 empathy_roster_group_get_widgets_count (EmpathyRosterGroup *self)
234 return g_hash_table_size (self->priv->widgets);
237 GList *
238 empathy_roster_group_get_widgets (EmpathyRosterGroup *self)
240 return g_hash_table_get_keys (self->priv->widgets);