00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00026 #include <glib.h>
00027 #include <gtk/gtk.h>
00028
00029 #include <liberdm/display.h>
00030 #include <libergtk/ergtk.h>
00031
00032 #include "connectionMgrLog.h"
00033 #include "displayStatus.h"
00034 #include "gtkSettingItem.h"
00035 #include "gtkInfoItem.h"
00036
00037 #define LOGPRINTF CN_LOGPRINTF
00038
00039
00040
00041 static void gtk_infoitem_class_init(GtkInfoItemClass * klass);
00042 static void gtk_infoitem_init(GtkInfoItem * item);
00043
00044
00045 static void on_button_toggled(GtkToggleButton* button, gpointer data);
00046
00047
00048
00049 GtkWidget *gtk_infoitem_new(gboolean with_button)
00050 {
00051 GtkInfoItem* item;
00052
00053 item = (GtkInfoItem*) g_object_new(GTK_INFOITEM_TYPE, NULL);
00054
00055 if (!with_button)
00056 {
00057 gtk_widget_destroy(item->button);
00058 item->button = NULL;
00059
00060 gtk_widget_set_size_request( item->label,
00061 INFOITEM_TEXT_WIDTH + INFOITEM_BUTTON_WIDTH,
00062 INFOITEM_TEXT_HEIGHT );
00063 }
00064
00065 return GTK_WIDGET(item);
00066 }
00067
00068
00069 GType gtk_infoitem_get_type(void)
00070 {
00071 static GType infoitem_type = 0;
00072
00073 if (!infoitem_type)
00074 {
00075 static const GTypeInfo infoitem_info = {
00076 sizeof(GtkInfoItemClass),
00077 NULL,
00078 NULL,
00079 (GClassInitFunc) gtk_infoitem_class_init,
00080 NULL,
00081 NULL,
00082 sizeof(GtkInfoItem),
00083 0,
00084 (GInstanceInitFunc) gtk_infoitem_init,
00085 };
00086
00087 infoitem_type = g_type_register_static(GTK_TYPE_EVENT_BOX,
00088 "InfoItem",
00089 &infoitem_info,
00090 0);
00091 }
00092 return infoitem_type;
00093 }
00094
00095
00096 static void gtk_infoitem_class_init(GtkInfoItemClass * klass)
00097 {
00098 GtkObjectClass *object_class;
00099
00100 object_class = (GtkObjectClass *) klass;
00101 }
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116 static void gtk_infoitem_init(GtkInfoItem * item)
00117 {
00118 GtkWidget *background;
00119 GtkWidget *alignment;
00120 GtkWidget *hbox;
00121 GtkWidget *widget;
00122
00123 gtk_widget_set_size_request(GTK_WIDGET(item),
00124 INFOITEM_REQ_WIDTH, INFOITEM_REQ_HEIGHT);
00125
00126
00127
00128 widget = gtk_event_box_new();
00129 gtk_widget_set_name(widget, "infoitem_background");
00130 gtk_container_add(GTK_CONTAINER(item), widget);
00131 background = widget;
00132
00133
00134 alignment = gtk_alignment_new(0.0, 0.0, 0.0, 0.0);
00135 gtk_alignment_set_padding(GTK_ALIGNMENT(alignment),
00136 INFOITEM_BORDER_TOP,
00137 INFOITEM_BORDER_BOTTOM,
00138 INFOITEM_BORDER_LEFT,
00139 INFOITEM_BORDER_RIGHT );
00140 gtk_container_add(GTK_CONTAINER(background), alignment);
00141
00142
00143 widget = gtk_hbox_new(FALSE, INFOITEM_HBOX_SPACING);
00144 gtk_container_add(GTK_CONTAINER(alignment), widget);
00145 hbox = widget;
00146
00147
00148 widget = gtk_event_box_new();
00149 gtk_widget_set_name(widget, "infoitem_icon");
00150 gtk_widget_set_size_request(widget,
00151 INFOITEM_ICON_IMG_WIDTH, INFOITEM_ICON_IMG_HEIGHT);
00152 gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 0);
00153 gtk_widget_show(widget);
00154 item->icon = widget;
00155
00156
00157 widget = gtk_label_new("");
00158 gtk_widget_set_name(widget, "infoitem_text");
00159 gtk_widget_set_size_request(widget,
00160 INFOITEM_TEXT_WIDTH, INFOITEM_TEXT_HEIGHT);
00161 gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.0);
00162 gtk_label_set_single_line_mode(GTK_LABEL(widget), FALSE);
00163 gtk_label_set_line_wrap(GTK_LABEL(widget), TRUE);
00164 gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 0);
00165 gtk_widget_show(widget);
00166 item->label = widget;
00167
00168
00169 widget = gtk_alignment_new(1.0, 1.0, 0, 0);
00170 gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 0);
00171 gtk_widget_show(widget);
00172 alignment = widget;
00173
00174
00175 widget = ergtk_toggle_button_new_with_label("");
00176 gtk_widget_set_size_request(widget,
00177 INFOITEM_BUTTON_WIDTH, INFOITEM_BUTTON_HEIGHT);
00178 gtk_container_add(GTK_CONTAINER(alignment), widget);
00179 gtk_widget_show(widget);
00180 item->button = widget;
00181
00182 g_signal_connect_after(G_OBJECT(widget), "toggled",
00183 G_CALLBACK(on_button_toggled), item);
00184
00185
00186 gtk_widget_show_all(GTK_WIDGET(item));
00187 }
00188
00189
00190
00191 void gtk_infoitem_set_icon(GtkInfoItem *item, infoItemIcon_t icon)
00192 {
00193 GtkWidget *widget;
00194 const char * name;
00195
00196 g_return_if_fail((item != NULL) && IS_GTK_INFOITEM(item));
00197
00198 widget = item->icon;
00199 g_return_if_fail(widget != NULL);
00200
00201 switch (icon)
00202 {
00203 case iconInfo_e:
00204 name = "infoitem_icon";
00205 break;
00206 case iconOk_e:
00207 name = "infoitem_ok_icon";
00208 break;
00209 case iconFailed_e:
00210 name = "infoitem_failed_icon";
00211 break;
00212 default:
00213 name = "infoitem_icon";
00214 break;
00215 }
00216
00217 gtk_widget_set_name(widget, name);
00218 }
00219
00220 void gtk_infoitem_set_text(GtkInfoItem* item, const gchar* text)
00221 {
00222 gtk_label_set_text(GTK_LABEL(item->label), text);
00223 gdk_flush();
00224 }
00225
00226 void gtk_infoitem_set_buttontext(GtkInfoItem* item, const gchar* text)
00227 {
00228 g_return_if_fail(item->button != NULL);
00229 gtk_button_set_label(GTK_BUTTON(item->button), text);
00230 }
00231
00232 void gtk_infoitem_set_buttonstate(GtkInfoItem* item, const gboolean active)
00233 {
00234 g_return_if_fail(item->button != NULL);
00235 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(item->button), active);
00236 }
00237
00238
00239
00240 void gtk_infoitem_callback_on_buttonclicked(GtkInfoItem* item,
00241 on_infoitem_buttonclicked_t* callback)
00242 {
00243 item->callback_on_buttonclicked = callback;
00244 }
00245
00246
00247
00248 static void on_button_toggled(GtkToggleButton* button, gpointer data)
00249 {
00250 LOGPRINTF("entry");
00251
00252 GtkInfoItem* item = GTK_INFOITEM(data);
00253 g_return_if_fail(item != NULL);
00254
00255 gboolean active;
00256
00257
00258 if (item->callback_on_buttonclicked)
00259 {
00260 active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
00261 item->callback_on_buttonclicked(GTK_WIDGET(item), active);
00262 }
00263 }
00264