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