gwenhywfar  4.99.8beta
gtk3/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 Gtk3Gui_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 
254  flags=GWEN_Widget_GetFlags(w);
255  wParent=GWEN_Widget_Tree_GetParent(w);
256 
257  /* create widget */
258  store=gtk_list_store_new(1, G_TYPE_STRING);
259  if (flags & GWEN_WIDGET_FLAGS_READONLY)
260  g=gtk_combo_box_new_with_model(GTK_TREE_MODEL(store));
261  else
262  {
263  /* TODO: why the heck does *this* combo box have two columns in the list?? */
264  g=gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(store));
265  gtk_combo_box_set_entry_text_column (GTK_COMBO_BOX(g), 0);
266  }
267  g_object_unref(store);
268 
269  cr=gtk_cell_renderer_text_new();
270  gtk_cell_layout_pack_start(GTK_CELL_LAYOUT (g), cr, TRUE);
271  gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(g), cr, "text", 0, NULL);
272 
276 
279 
284 
285  g_signal_connect(g,
286  "changed",
287  G_CALLBACK (changed_handler),
288  w);
289 
290  if (wParent)
291  GWEN_Widget_AddChildGuiWidget(wParent, w);
292 
293  return 0;
294 }
295 
296 
GWEN_WIDGET_TYPE GWEN_Widget_GetType(const GWEN_WIDGET *w)
Definition: widget.c:175
GWEN_STRINGLIST * entries
int Gtk3Gui_WComboBox_Setup(GWEN_WIDGET *w)
void GWEN_StringList_Clear(GWEN_STRINGLIST *sl)
Definition: stringlist.c:214
#define GWEN_ERROR_INVALID
Definition: error.h:67
#define GTK3_DIALOG_WIDGET_REAL
#define GTK3_DIALOG_WIDGET_CONTENT
const char * GWEN_Widget_GetName(const GWEN_WIDGET *w)
Definition: widget.c:294
GWEN_WIDGET_SETCHARPROPERTY_FN GWEN_Widget_SetSetCharPropertyFn(GWEN_WIDGET *w, GWEN_WIDGET_SETCHARPROPERTY_FN fn)
Definition: widget.c:663
GWEN_WIDGET_GETCHARPROPERTY_FN GWEN_Widget_SetGetCharPropertyFn(GWEN_WIDGET *w, GWEN_WIDGET_GETCHARPROPERTY_FN fn)
Definition: widget.c:677
GWEN_DIALOG_PROPERTY
Definition: dialog.h:215
#define GWEN_FREE_OBJECT(varname)
Definition: memory.h:92
#define NULL
Definition: binreloc.c:290
static GWENHYWFAR_CB int Gtk3Gui_WComboBox_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal)
uint32_t GWEN_Widget_GetFlags(const GWEN_WIDGET *w)
Definition: widget.c:143
#define DBG_WARN(dbg_logger, format, args...)
Definition: debug.h:118
#define GWEN_LOGDOMAIN
Definition: logger.h:35
#define GWEN_WIDGET_FLAGS_READONLY
Definition: dialog.h:63
void GWEN_Widget_SetImplData(GWEN_WIDGET *w, int index, void *ptr)
Store a pointer with the widget.
Definition: widget.c:131
const char * GWEN_StringList_StringAt(const GWEN_STRINGLIST *sl, int idx)
Definition: stringlist.c:671
GWEN_WIDGET_GETINTPROPERTY_FN GWEN_Widget_SetGetIntPropertyFn(GWEN_WIDGET *w, GWEN_WIDGET_GETINTPROPERTY_FN fn)
Definition: widget.c:649
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
Definition: stringlist.c:57
#define GWEN_NEW_OBJECT(typ, varname)
Definition: memory.h:86
void * GWEN_Widget_GetImplData(const GWEN_WIDGET *w, int index)
Definition: widget.c:118
GWEN_DIALOG * GWEN_Widget_GetDialog(const GWEN_WIDGET *w)
Definition: widget.c:90
static void GWENHYWFAR_CB Gtk3Gui_WComboBox_FreeData(void *bp, void *p)
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
Definition: stringlist.c:230
#define GWENHYWFAR_CB
Definition: gwenhywfarapi.h:89
GWEN_WIDGET_SETINTPROPERTY_FN GWEN_Widget_SetSetIntPropertyFn(GWEN_WIDGET *w, GWEN_WIDGET_SETINTPROPERTY_FN fn)
Definition: widget.c:635
GWEN_DIALOG * GWEN_Widget_GetTopDialog(const GWEN_WIDGET *w)
Definition: widget.c:99
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
Definition: stringlist.h:54
static GWENHYWFAR_CB int Gtk3Gui_WComboBox_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue)
struct GWEN_WIDGET GWEN_WIDGET
Definition: widget_be.h:34
static void changed_handler(GtkWidget *comboBox, gpointer data)
int GWEN_Widget_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild)
Definition: widget.c:767
int GWEN_Dialog_EmitSignal(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender)
Definition: dialog.c:258
static GWENHYWFAR_CB int Gtk3Gui_WComboBox_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal)
#define GWEN_INHERIT(bt, t)
Definition: inherit.h:264
const char * GWEN_Widget_Type_toString(GWEN_WIDGET_TYPE t)
Definition: widget.c:413
static GWENHYWFAR_CB const char * Gtk3Gui_WComboBox_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue)
void Gtk3Gui_Dialog_Leave(GWEN_DIALOG *dlg, int result)
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
Definition: inherit.h:292
GWEN_STRINGLIST * GWEN_StringList_new(void)
Definition: stringlist.c:46
#define GWEN_INHERIT_GETDATA(bt, t, element)
Definition: inherit.h:271