00001
00002
00003
00004
00005
00006
00007
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
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
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