gwenhywfar
4.3.3
|
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