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