1 /***************************************************************************
2 begin : Sun May 16 2010
3 copyright : (C) 2010 by Martin Preuss
4 email : martin@libchipcard.de
5
6 ***************************************************************************
7 * Please see toplevel file COPYING for license details *
8 ***************************************************************************/
9
10
11
12 typedef struct W_SPINBOX W_SPINBOX;
13 struct W_SPINBOX {
14 GtkAdjustment *adjustment;
15 };
16
17
GWEN_INHERIT(GWEN_WIDGET,W_SPINBOX)18 GWEN_INHERIT(GWEN_WIDGET, W_SPINBOX)
19
20
21
22 static GWENHYWFAR_CB
23 int Gtk2Gui_WSpinBox_SetIntProperty(GWEN_WIDGET *w,
24 GWEN_DIALOG_PROPERTY prop,
25 GWEN_UNUSED int index,
26 int value,
27 GWEN_UNUSED int doSignal)
28 {
29 GtkWidget *g;
30 W_SPINBOX *xw;
31
32 assert(w);
33 xw=GWEN_INHERIT_GETDATA(GWEN_WIDGET, W_SPINBOX, w);
34 assert(xw);
35
36 g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
37 assert(g);
38
39 switch (prop) {
40 case GWEN_DialogProperty_Enabled:
41 gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE);
42 return 0;
43
44 case GWEN_DialogProperty_Focus:
45 gtk_widget_grab_focus(GTK_WIDGET(g));
46 return 0;
47
48 case GWEN_DialogProperty_Width:
49 case GWEN_DialogProperty_Height:
50 /* just ignore these for now */
51 return 0;
52
53 case GWEN_DialogProperty_Value:
54 gtk_adjustment_set_value(GTK_ADJUSTMENT(xw->adjustment), value);
55 return 0;
56
57 case GWEN_DialogProperty_MinValue:
58 gtk_adjustment_set_lower(GTK_ADJUSTMENT(xw->adjustment), value);
59 return 0;
60
61 case GWEN_DialogProperty_MaxValue:
62 gtk_adjustment_set_upper(GTK_ADJUSTMENT(xw->adjustment), value);
63 return 0;
64
65 default:
66 break;
67 }
68
69 DBG_WARN(GWEN_LOGDOMAIN,
70 "Function is not appropriate for this type of widget (%s)",
71 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
72 return GWEN_ERROR_INVALID;
73 }
74
75
76
77
78 static GWENHYWFAR_CB
Gtk2Gui_WSpinBox_GetIntProperty(GWEN_WIDGET * w,GWEN_DIALOG_PROPERTY prop,GWEN_UNUSED int index,int defaultValue)79 int Gtk2Gui_WSpinBox_GetIntProperty(GWEN_WIDGET *w,
80 GWEN_DIALOG_PROPERTY prop,
81 GWEN_UNUSED int index,
82 int defaultValue)
83 {
84 GtkWidget *g;
85 W_SPINBOX *xw;
86
87 assert(w);
88 xw=GWEN_INHERIT_GETDATA(GWEN_WIDGET, W_SPINBOX, w);
89 assert(xw);
90
91 g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
92 assert(g);
93
94 switch (prop) {
95 case GWEN_DialogProperty_Enabled:
96 return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0;
97
98 case GWEN_DialogProperty_Focus:
99 return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0;
100 return 0;
101
102 case GWEN_DialogProperty_Width:
103 case GWEN_DialogProperty_Height:
104 /* just ignore these for now */
105 return 0;
106
107 case GWEN_DialogProperty_Value:
108 return gtk_adjustment_get_value(GTK_ADJUSTMENT(xw->adjustment));
109
110 case GWEN_DialogProperty_MinValue:
111 return gtk_adjustment_get_lower(GTK_ADJUSTMENT(xw->adjustment));
112
113 case GWEN_DialogProperty_MaxValue:
114 return gtk_adjustment_get_upper(GTK_ADJUSTMENT(xw->adjustment));
115
116 default:
117 break;
118 }
119
120 DBG_WARN(GWEN_LOGDOMAIN,
121 "Function is not appropriate for this type of widget (%s)",
122 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
123 return defaultValue;
124 }
125
126
127
128 static GWENHYWFAR_CB
Gtk2Gui_WSpinBox_SetCharProperty(GWEN_WIDGET * w,GWEN_UNUSED GWEN_DIALOG_PROPERTY prop,GWEN_UNUSED int index,GWEN_UNUSED const char * value,GWEN_UNUSED int doSignal)129 int Gtk2Gui_WSpinBox_SetCharProperty(GWEN_WIDGET *w,
130 GWEN_UNUSED GWEN_DIALOG_PROPERTY prop,
131 GWEN_UNUSED int index,
132 GWEN_UNUSED const char *value,
133 GWEN_UNUSED int doSignal)
134 {
135 DBG_WARN(GWEN_LOGDOMAIN,
136 "Function is not appropriate for this type of widget (%s)",
137 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
138 return GWEN_ERROR_INVALID;
139 }
140
141
142
143 static GWENHYWFAR_CB
Gtk2Gui_WSpinBox_GetCharProperty(GWEN_WIDGET * w,GWEN_UNUSED GWEN_DIALOG_PROPERTY prop,GWEN_UNUSED int index,const char * defaultValue)144 const char *Gtk2Gui_WSpinBox_GetCharProperty(GWEN_WIDGET *w,
145 GWEN_UNUSED GWEN_DIALOG_PROPERTY prop,
146 GWEN_UNUSED int index,
147 const char *defaultValue)
148 {
149 DBG_WARN(GWEN_LOGDOMAIN,
150 "Function is not appropriate for this type of widget (%s)",
151 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
152 return defaultValue;
153 }
154
155
156
Gtk2Gui_WSpinBox_FreeData(GWEN_UNUSED void * bp,void * p)157 static void GWENHYWFAR_CB Gtk2Gui_WSpinBox_FreeData(GWEN_UNUSED void *bp, void *p)
158 {
159 W_SPINBOX *xw;
160
161 xw=(W_SPINBOX *) p;
162 GWEN_FREE_OBJECT(xw);
163 }
164
165
166
Gtk2Gui_WSpinBox_Changed_handler(GWEN_UNUSED GtkAdjustment * adjustment,gpointer data)167 static void Gtk2Gui_WSpinBox_Changed_handler(GWEN_UNUSED GtkAdjustment *adjustment, gpointer data)
168 {
169 GWEN_WIDGET *w;
170 int rv;
171
172 w=data;
173 assert(w);
174 rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w),
175 GWEN_DialogEvent_TypeValueChanged,
176 GWEN_Widget_GetName(w));
177 if (rv==GWEN_DialogEvent_ResultAccept)
178 Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1);
179 else if (rv==GWEN_DialogEvent_ResultReject)
180 Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0);
181 }
182
183
184
Gtk2Gui_WSpinBox_Setup(GWEN_WIDGET * w)185 int Gtk2Gui_WSpinBox_Setup(GWEN_WIDGET *w)
186 {
187 GtkWidget *g;
188 /*const char *s;*/
189 /*uint32_t flags;*/
190 GWEN_WIDGET *wParent;
191 W_SPINBOX *xw;
192 /*gulong changed_handler_id;*/
193
194 GWEN_NEW_OBJECT(W_SPINBOX, xw);
195 GWEN_INHERIT_SETDATA(GWEN_WIDGET, W_SPINBOX, w, xw, Gtk2Gui_WSpinBox_FreeData);
196
197 /*flags=GWEN_Widget_GetFlags(w);*/
198 wParent=GWEN_Widget_Tree_GetParent(w);
199 /*s=GWEN_Widget_GetText(w, 0);*/
200
201 xw->adjustment=GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 100.0, 1.0, 5.0, 5.0));
202 g=gtk_spin_button_new(xw->adjustment, 1.0, 0);
203 GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void *) g);
204 GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void *) g);
205
206 GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WSpinBox_SetIntProperty);
207 GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WSpinBox_GetIntProperty);
208 GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WSpinBox_SetCharProperty);
209 GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WSpinBox_GetCharProperty);
210
211 /*changed_handler_id=*/g_signal_connect(g,
212 "value-changed",
213 G_CALLBACK(Gtk2Gui_WSpinBox_Changed_handler),
214 w);
215
216 if (wParent)
217 GWEN_Widget_AddChildGuiWidget(wParent, w);
218
219 return 0;
220 }
221
222
223