gwenhywfar  4.3.3
w_spinbox.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 typedef struct W_SPINBOX W_SPINBOX;
00013 struct W_SPINBOX {
00014   GtkAdjustment *adjustment;
00015 };
00016 
00017 
00018 GWEN_INHERIT(GWEN_WIDGET, W_SPINBOX)
00019 
00020 
00021 
00022 static GWENHYWFAR_CB
00023 int Gtk2Gui_WSpinBox_SetIntProperty(GWEN_WIDGET *w,
00024                                         GWEN_DIALOG_PROPERTY prop,
00025                                         int index,
00026                                         int value,
00027                                         int doSignal) {
00028   GtkWidget *g;
00029   W_SPINBOX *xw;
00030 
00031   assert(w);
00032   xw=GWEN_INHERIT_GETDATA(GWEN_WIDGET, W_SPINBOX, w);
00033   assert(xw);
00034 
00035   g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00036   assert(g);
00037 
00038   switch(prop) {
00039   case GWEN_DialogProperty_Enabled:
00040     gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE);
00041     return 0;
00042   
00043   case GWEN_DialogProperty_Focus:
00044     gtk_widget_grab_focus(GTK_WIDGET(g));
00045     return 0;
00046 
00047   case GWEN_DialogProperty_Width:
00048   case GWEN_DialogProperty_Height:
00049     /* just ignore these for now */
00050     return 0;
00051 
00052   case GWEN_DialogProperty_Value:
00053     gtk_adjustment_set_value(GTK_ADJUSTMENT(xw->adjustment), value);
00054     return 0;
00055 
00056   case GWEN_DialogProperty_MinValue:
00057     gtk_adjustment_set_lower(GTK_ADJUSTMENT(xw->adjustment), value);
00058     return 0;
00059 
00060   case GWEN_DialogProperty_MaxValue:
00061     gtk_adjustment_set_upper(GTK_ADJUSTMENT(xw->adjustment), value);
00062     return 0;
00063 
00064   default:
00065     break;
00066   }
00067 
00068   DBG_WARN(GWEN_LOGDOMAIN,
00069            "Function is not appropriate for this type of widget (%s)",
00070            GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00071   return GWEN_ERROR_INVALID;
00072 }
00073 
00074 
00075 
00076 
00077 static GWENHYWFAR_CB
00078 int Gtk2Gui_WSpinBox_GetIntProperty(GWEN_WIDGET *w,
00079                                         GWEN_DIALOG_PROPERTY prop,
00080                                         int index,
00081                                         int defaultValue) {
00082   GtkWidget *g;
00083   W_SPINBOX *xw;
00084 
00085   assert(w);
00086   xw=GWEN_INHERIT_GETDATA(GWEN_WIDGET, W_SPINBOX, w);
00087   assert(xw);
00088 
00089   g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00090   assert(g);
00091 
00092   switch(prop) {
00093   case GWEN_DialogProperty_Enabled:
00094     return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0;
00095 
00096   case GWEN_DialogProperty_Focus:
00097     return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0;
00098     return 0;
00099 
00100   case GWEN_DialogProperty_Width:
00101   case GWEN_DialogProperty_Height:
00102     /* just ignore these for now */
00103     return 0;
00104 
00105   case GWEN_DialogProperty_Value:
00106     return gtk_adjustment_get_value(GTK_ADJUSTMENT(xw->adjustment));
00107 
00108   case GWEN_DialogProperty_MinValue:
00109     return gtk_adjustment_get_lower(GTK_ADJUSTMENT(xw->adjustment));
00110 
00111   case GWEN_DialogProperty_MaxValue:
00112     return gtk_adjustment_get_upper(GTK_ADJUSTMENT(xw->adjustment));
00113 
00114   default:
00115     break;
00116   }
00117 
00118   DBG_WARN(GWEN_LOGDOMAIN,
00119            "Function is not appropriate for this type of widget (%s)",
00120            GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00121   return defaultValue;
00122 }
00123 
00124 
00125 
00126 static GWENHYWFAR_CB
00127 int Gtk2Gui_WSpinBox_SetCharProperty(GWEN_WIDGET *w,
00128                                          GWEN_DIALOG_PROPERTY prop,
00129                                          int index,
00130                                          const char *value,
00131                                          int doSignal) {
00132   DBG_WARN(GWEN_LOGDOMAIN,
00133            "Function is not appropriate for this type of widget (%s)",
00134            GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00135   return GWEN_ERROR_INVALID;
00136 }
00137 
00138 
00139 
00140 static GWENHYWFAR_CB
00141 const char* Gtk2Gui_WSpinBox_GetCharProperty(GWEN_WIDGET *w,
00142                                                  GWEN_DIALOG_PROPERTY prop,
00143                                                  int index,
00144                                                  const char *defaultValue) {
00145   DBG_WARN(GWEN_LOGDOMAIN,
00146            "Function is not appropriate for this type of widget (%s)",
00147            GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00148   return defaultValue;
00149 }
00150 
00151 
00152 
00153 static void GWENHYWFAR_CB Gtk2Gui_WSpinBox_FreeData(void *bp, void *p) {
00154   W_SPINBOX *xw;
00155 
00156   xw=(W_SPINBOX*) p;
00157   GWEN_FREE_OBJECT(xw);
00158 }
00159 
00160 
00161 
00162 static void Gtk2Gui_WSpinBox_Changed_handler(GtkAdjustment *adjustment, gpointer data) {
00163   GWEN_WIDGET *w;
00164   int rv;
00165 
00166   w=data;
00167   assert(w);
00168   rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w),
00169                             GWEN_DialogEvent_TypeValueChanged,
00170                             GWEN_Widget_GetName(w));
00171   if (rv==GWEN_DialogEvent_ResultAccept)
00172     Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1);
00173   else if (rv==GWEN_DialogEvent_ResultReject)
00174     Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0);
00175 }
00176 
00177 
00178 
00179 int Gtk2Gui_WSpinBox_Setup(GWEN_WIDGET *w) {
00180   GtkWidget *g;
00181   const char *s;
00182   uint32_t flags;
00183   GWEN_WIDGET *wParent;
00184   W_SPINBOX *xw;
00185   gulong changed_handler_id;
00186 
00187   GWEN_NEW_OBJECT(W_SPINBOX, xw);
00188   GWEN_INHERIT_SETDATA(GWEN_WIDGET, W_SPINBOX, w, xw, Gtk2Gui_WSpinBox_FreeData);
00189 
00190   flags=GWEN_Widget_GetFlags(w);
00191   wParent=GWEN_Widget_Tree_GetParent(w);
00192   s=GWEN_Widget_GetText(w, 0);
00193 
00194   xw->adjustment=GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 100.0, 1.0, 5.0, 5.0));
00195   g=gtk_spin_button_new(xw->adjustment, 1.0, 0);
00196   GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g);
00197   GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g);
00198 
00199   GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WSpinBox_SetIntProperty);
00200   GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WSpinBox_GetIntProperty);
00201   GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WSpinBox_SetCharProperty);
00202   GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WSpinBox_GetCharProperty);
00203 
00204   changed_handler_id=g_signal_connect(g,
00205                                       "value-changed",
00206                                       G_CALLBACK (Gtk2Gui_WSpinBox_Changed_handler),
00207                                       w);
00208 
00209   if (wParent)
00210     GWEN_Widget_AddChildGuiWidget(wParent, w);
00211 
00212   return 0;
00213 }
00214 
00215