gwenhywfar 4.0.3

w_stack.c

Go to the documentation of this file.
00001 /***************************************************************************
00002     begin       : Sun May 16 2010
00003     copyright   : (C) 2010 by Martin Preuss
00004     email       : martin@libchipcard.de
00005 
00006  ***************************************************************************
00007  *          Please see toplevel file COPYING for license details           *
00008  ***************************************************************************/
00009 
00010 
00011 
00012 /*
00013  * Note: This is a special use case for gtk_notebook.
00014  * To use it as a WidgetStack we have to disable drawing od tabs
00015  * and borders by calling:
00016  * - gtk_notebook_set_show_tabs(GTK_NOTEBOOK(g), FALSE);
00017  * - gtk_notebook_set_show_border(GTK_NOTEBOOK(g), FALSE);
00018  *
00019  */
00020 
00021 
00022 
00023 static GWENHYWFAR_CB
00024 int Gtk2Gui_WStack_SetIntProperty(GWEN_WIDGET *w,
00025                                     GWEN_DIALOG_PROPERTY prop,
00026                                     int index,
00027                                     int value,
00028                                     int doSignal) {
00029   GtkWidget *g;
00030 
00031   g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00032   assert(g);
00033 
00034   switch(prop) {
00035   case GWEN_DialogProperty_Enabled:
00036     gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE);
00037     return 0;
00038   
00039   case GWEN_DialogProperty_Focus:
00040     gtk_widget_grab_focus(GTK_WIDGET(g));
00041     return 0;
00042 
00043   case GWEN_DialogProperty_Value:
00044     gtk_notebook_set_current_page(GTK_NOTEBOOK(g), value);
00045     return 0;
00046 
00047   default:
00048     break;
00049   }
00050 
00051   DBG_WARN(GWEN_LOGDOMAIN,
00052            "Function is not appropriate for this type of widget (%s)",
00053            GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00054   return GWEN_ERROR_INVALID;
00055 }
00056 
00057 
00058 
00059 
00060 static GWENHYWFAR_CB
00061 int Gtk2Gui_WStack_GetIntProperty(GWEN_WIDGET *w,
00062                                     GWEN_DIALOG_PROPERTY prop,
00063                                     int index,
00064                                     int defaultValue) {
00065   GtkWidget *g;
00066 
00067   g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00068   assert(g);
00069 
00070   switch(prop) {
00071   case GWEN_DialogProperty_Enabled:
00072     return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0;
00073 
00074   case GWEN_DialogProperty_Focus:
00075     return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0;
00076     return 0;
00077 
00078   case GWEN_DialogProperty_Value:
00079     return gtk_notebook_get_current_page(GTK_NOTEBOOK(g));
00080 
00081   default:
00082     break;
00083   }
00084 
00085   DBG_WARN(GWEN_LOGDOMAIN,
00086            "Function is not appropriate for this type of widget (%s)",
00087            GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00088   return defaultValue;
00089 }
00090 
00091 
00092 
00093 static GWENHYWFAR_CB
00094 int Gtk2Gui_WStack_SetCharProperty(GWEN_WIDGET *w,
00095                                      GWEN_DIALOG_PROPERTY prop,
00096                                      int index,
00097                                      const char *value,
00098                                      int doSignal) {
00099   GtkWidget *g;
00100 
00101   g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00102   assert(g);
00103 
00104   DBG_WARN(GWEN_LOGDOMAIN,
00105            "Function is not appropriate for this type of widget (%s)",
00106            GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00107   return GWEN_ERROR_INVALID;
00108 }
00109 
00110 
00111 
00112 static GWENHYWFAR_CB
00113 const char* Gtk2Gui_WStack_GetCharProperty(GWEN_WIDGET *w,
00114                                              GWEN_DIALOG_PROPERTY prop,
00115                                              int index,
00116                                              const char *defaultValue) {
00117   GtkWidget *g;
00118 
00119   g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00120   assert(g);
00121 
00122   DBG_WARN(GWEN_LOGDOMAIN,
00123            "Function is not appropriate for this type of widget (%s)",
00124            GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00125   return defaultValue;
00126 }
00127 
00128 
00129 
00130 static GWENHYWFAR_CB
00131 int Gtk2Gui_WStack_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild) {
00132   GtkWidget *g;
00133   GtkWidget *gChild;
00134 
00135   g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00136   assert(g);
00137 
00138   gChild=GTK_WIDGET(GWEN_Widget_GetImplData(wChild, GTK2_DIALOG_WIDGET_REAL));
00139   assert(gChild);
00140 
00141   gtk_notebook_append_page(GTK_NOTEBOOK(g), gChild, NULL);
00142 
00143   return 0;
00144 }
00145 
00146 
00147 
00148 int Gtk2Gui_WStack_Setup(GWEN_WIDGET *w) {
00149   GtkWidget *g;
00150   uint32_t flags;
00151   GWEN_WIDGET *wParent;
00152 
00153   flags=GWEN_Widget_GetFlags(w);
00154   wParent=GWEN_Widget_Tree_GetParent(w);
00155 
00156   g=gtk_notebook_new();
00157   gtk_notebook_set_show_tabs(GTK_NOTEBOOK(g), FALSE);
00158   gtk_notebook_set_show_border(GTK_NOTEBOOK(g), FALSE);
00159 
00160   GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g);
00161   GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g);
00162 
00163   GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WStack_SetIntProperty);
00164   GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WStack_GetIntProperty);
00165   GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WStack_SetCharProperty);
00166   GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WStack_GetCharProperty);
00167   GWEN_Widget_SetAddChildGuiWidgetFn(w, Gtk2Gui_WStack_AddChildGuiWidget);
00168 
00169   if (wParent)
00170     GWEN_Widget_AddChildGuiWidget(wParent, w);
00171 
00172   return 0;
00173 }
00174 
00175