gwenhywfar  4.7.0beta
w_combobox.c
Go to the documentation of this file.
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 typedef struct W_COMBOBOX W_COMBOBOX;
12 struct W_COMBOBOX {
14 };
15 
16 
18 
19 
20 
21 
22 static GWENHYWFAR_CB
25  int index,
26  int value,
27  int doSignal) {
28  GtkWidget *g;
29  W_COMBOBOX *xw;
30 
31  assert(w);
33  assert(xw);
34 
36  assert(g);
37 
38  switch(prop) {
40  gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE);
41  return 0;
42 
44  gtk_widget_grab_focus(GTK_WIDGET(g));
45  return 0;
46 
48  gtk_combo_box_set_active(GTK_COMBO_BOX(g), value);
49  return 0;
50 
52  GtkListStore *store;
53 
54  store=GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(g)));
55  assert(store);
56  gtk_list_store_clear(store);
58  return 0;
59  }
60 
61 
62  default:
63  break;
64  }
65 
67  "Function is not appropriate for this type of widget (%s)",
69  return GWEN_ERROR_INVALID;
70 }
71 
72 
73 
74 
75 static GWENHYWFAR_CB
78  int index,
79  int defaultValue) {
80  GtkWidget *g;
81 
83  assert(g);
84 
85  switch(prop) {
87  return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0;
88 
90  return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0;
91  return 0;
92 
94  gint i;
95 
96  i=gtk_combo_box_get_active(GTK_COMBO_BOX(g));
97  if (i==-1)
98  return defaultValue;
99  else
100  return i;
101  }
102 
104  GtkListStore *store;
105  gint i;
106 
107  store=GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(g)));
108  assert(store);
109  i=gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), NULL);
110  return i;
111  }
112 
113  default:
114  break;
115  }
116 
118  "Function is not appropriate for this type of widget (%s)",
120  return defaultValue;
121 }
122 
123 
124 
125 static GWENHYWFAR_CB
128  int index,
129  const char *value,
130  int doSignal) {
131  GtkWidget *g;
132  W_COMBOBOX *xw;
133 
134  assert(w);
136  assert(xw);
137 
139  assert(g);
140 
141  switch(prop) {
143  /* undefined */
144  break;
145 
147  GtkListStore *store;
148  GtkTreeIter iter;
149 
150  store=GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(g)));
151  assert(store);
152 
153  gtk_list_store_append(store, &iter);
154  gtk_list_store_set(store, &iter, 0, value, -1);
155  GWEN_StringList_AppendString(xw->entries, value, 0, 0);
156  return 0;
157  }
158 
160  GtkListStore *store;
161 
162  store=GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(g)));
163  assert(store);
164  gtk_list_store_clear(store);
166  return 0;
167  }
168 
169  default:
170  break;
171  }
172 
174  "Function is not appropriate for this type of widget (%s)",
176  return GWEN_ERROR_INVALID;
177 }
178 
179 
180 
181 static GWENHYWFAR_CB
184  int index,
185  const char *defaultValue) {
186  GtkWidget *g;
187  W_COMBOBOX *xw;
188 
189  assert(w);
191  assert(xw);
192 
194  assert(g);
195 
196  switch(prop) {
198  const char *s;
199 
200  s=GWEN_StringList_StringAt(xw->entries, index);
201  if (s && *s)
202  return s;
203  else
204  return defaultValue;
205  }
206 
207  default:
208  break;
209  }
210 
212  "Function is not appropriate for this type of widget (%s)",
214  return defaultValue;
215 }
216 
217 
218 
219 static void changed_handler(GtkWidget *comboBox, gpointer data) {
220  GWEN_WIDGET *w;
221  int rv;
222 
223  w=data;
224  assert(w);
230  else if (rv==GWEN_DialogEvent_ResultReject)
232 }
233 
234 
235 
236 static void GWENHYWFAR_CB Gtk2Gui_WComboBox_FreeData(void *bp, void *p) {
237  W_COMBOBOX *xw;
238 
239  xw=(W_COMBOBOX*) p;
241  GWEN_FREE_OBJECT(xw);
242 }
243 
244 
245 
247  W_COMBOBOX *xw;
248  GtkWidget *g;
249  GtkCellRenderer *cr;
250  GtkListStore *store;
251  uint32_t flags;
252  GWEN_WIDGET *wParent;
253  gulong changed_handler_id;
254 
255  flags=GWEN_Widget_GetFlags(w);
256  wParent=GWEN_Widget_Tree_GetParent(w);
257 
258  /* create widget */
259  store=gtk_list_store_new(1, G_TYPE_STRING);
260  if (flags & GWEN_WIDGET_FLAGS_READONLY)
261  g=gtk_combo_box_new_with_model(GTK_TREE_MODEL(store));
262  else
263  /* TODO: why the heck does *this* combo box have two columns in the list?? */
264  g=gtk_combo_box_entry_new_with_model(GTK_TREE_MODEL(store), 0);
265  g_object_unref(store);
266 
267  cr=gtk_cell_renderer_text_new();
268  gtk_cell_layout_pack_start(GTK_CELL_LAYOUT (g), cr, TRUE);
269  gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(g), cr, "text", 0, NULL);
270 
274 
277 
282 
283  changed_handler_id=g_signal_connect(g,
284  "changed",
285  G_CALLBACK (changed_handler),
286  w);
287 
288  if (wParent)
289  GWEN_Widget_AddChildGuiWidget(wParent, w);
290 
291  return 0;
292 }
293 
294