gwenhywfar  4.6.0beta
gtk2_gui.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 #ifdef HAVE_CONFIG_H
11 # include <config.h>
12 #endif
13 
14 
15 #include "gtk2_gui_p.h"
16 #include "gtk2_gui_dialog_l.h"
17 
18 #include <assert.h>
19 
20 #include <gwenhywfar/inherit.h>
21 #include <gwenhywfar/debug.h>
22 #include <gwenhywfar/gui_be.h>
23 #include <gwenhywfar/i18n.h>
24 
25 #include <gwenhywfar/text.h>
26 #include <gwenhywfar/mdigest.h>
27 #include <gwenhywfar/debug.h>
28 
29 
30 #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg)
31 
32 
33 
34 GWEN_INHERIT(GWEN_GUI, GTK2_GUI)
35 
36 
37 
39  GWEN_GUI *gui;
40  GTK2_GUI *xgui;
41 
42  gui=GWEN_Gui_new();
43  GWEN_NEW_OBJECT(GTK2_GUI, xgui);
44  GWEN_INHERIT_SETDATA(GWEN_GUI, GTK2_GUI, gui, xgui, Gtk2_Gui_FreeData);
45 
48  xgui->execDialogFn=GWEN_Gui_SetExecDialogFn(gui, GTK2_Gui_ExecDialog);
49  xgui->openDialogFn=GWEN_Gui_SetOpenDialogFn(gui, GTK2_Gui_OpenDialog);
50  xgui->closeDialogFn=GWEN_Gui_SetCloseDialogFn(gui, GTK2_Gui_CloseDialog);
51  xgui->runDialogFn=GWEN_Gui_SetRunDialogFn(gui, GTK2_Gui_RunDialog);
52  xgui->getFileNameDialogFn=GWEN_Gui_SetGetFileNameFn(gui, GTK2_Gui_GetFileName);
53 
54  return gui;
55 }
56 
57 
58 
59 GWENHYWFAR_CB void Gtk2_Gui_FreeData(void *bp, void *p) {
60  GTK2_GUI *xgui;
61 
62  xgui=(GTK2_GUI*) p;
63 
64  GWEN_FREE_OBJECT(xgui);
65 }
66 
67 
68 
70  GWEN_DIALOG *dlg,
71  uint32_t guiid) {
72  int rv;
73 
74  assert(dlg);
75  rv=GTK2_Gui_OpenDialog(gui, dlg, guiid);
76  if (rv<0) {
77  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
78  return rv;
79  }
80 
81  rv=GTK2_Gui_RunDialog(gui, dlg, 1);
82  GTK2_Gui_CloseDialog(gui, dlg);
83  if (rv<0) {
84  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
85  return rv;
86  }
87 
88  return rv;
89 }
90 
91 
92 
94  GWEN_DIALOG *dlg,
95  uint32_t guiid) {
96  int rv;
97  GtkWidget *g;
98 
99  assert(dlg);
101  rv=Gtk2Gui_Dialog_Setup(dlg, NULL);
102  if (rv<0) {
103  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
105  return rv;
106  }
107 
109  if (g==NULL) {
110  DBG_ERROR(GWEN_LOGDOMAIN, "No main widget");
112  return GWEN_ERROR_INVALID;
113  }
114 
116  if (rv<0) {
117  DBG_INFO(GWEN_LOGDOMAIN, "Error initializing dialog: %d", rv);
119  return rv;
120  }
121 
122  /* show dialog */
123  gtk_widget_show_all(g);
124 
125  return 0;
126 }
127 
128 
129 
131  GtkWidget *g;
132  int rv;
133 
134  assert(dlg);
136  if (g==NULL) {
137  DBG_ERROR(GWEN_LOGDOMAIN, "No main widget");
139  return GWEN_ERROR_INVALID;
140  }
141 
142  /* hide dialog */
143  gtk_widget_hide_all(g);
144 
145  /* send fini signal to dialog */
147  if (rv<0) {
148  DBG_INFO(GWEN_LOGDOMAIN, "Error deinitializing dialog: %d", rv);
150  return rv;
151  }
152 
154  return 0;
155 }
156 
157 
158 
159 GWENHYWFAR_CB int GTK2_Gui_RunDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, int untilEnd) {
160  int rv;
161 
162  assert(dlg);
163  rv=GTK2_Gui_Dialog_Run(dlg, untilEnd);
164  if (rv<0) {
165  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
166  return rv;
167  }
168  return rv;
169 }
170 
171 
172 
174  const char *caption,
176  uint32_t flags,
177  const char *patterns,
178  GWEN_BUFFER *pathBuffer,
179  uint32_t guiid) {
180  char *folder=NULL;
181  char *fileName=NULL;
182 
183  if (GWEN_Buffer_GetUsedBytes(pathBuffer)) {
184  folder=strdup(GWEN_Buffer_GetStart(pathBuffer));
185  fileName=strchr(folder, GWEN_DIR_SEPARATOR);
186  if (fileName) {
187  *fileName=0;
188  fileName++;
189  if (*fileName==0)
190  fileName=NULL;
191  }
192  }
193 
194  switch(fnt) {
196  GtkWidget *dialog;
197 
198  if (!(caption && *caption))
199  caption=I18N("Open File");
200  dialog=gtk_file_chooser_dialog_new (caption,
201  NULL,
202  GTK_FILE_CHOOSER_ACTION_OPEN,
203  GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
204  GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
205  NULL);
206  if (folder && *folder)
207  gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (dialog), folder);
208  if (fileName && *fileName)
209  gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), fileName);
210 
211  if (gtk_dialog_run(GTK_DIALOG(dialog))==GTK_RESPONSE_ACCEPT) {
212  char *filename;
213 
214  filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
215  GWEN_Buffer_Reset(pathBuffer);
216  GWEN_Buffer_AppendString(pathBuffer, filename);
217  g_free (filename);
218  gtk_widget_destroy (dialog);
219  free(folder);
220  return 0;
221  }
222  gtk_widget_destroy (dialog);
223  free(folder);
225  }
226 
228  GtkWidget *dialog;
229 
230  if (!(caption && *caption))
231  caption=I18N("Save File");
232  dialog=gtk_file_chooser_dialog_new (caption,
233  NULL,
234  GTK_FILE_CHOOSER_ACTION_SAVE,
235  GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
236  GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
237  NULL);
238  gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
239  if (folder && *folder)
240  gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (dialog), folder);
241  if (fileName && *fileName)
242  gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), fileName);
243 
244  if (gtk_dialog_run(GTK_DIALOG(dialog))==GTK_RESPONSE_ACCEPT) {
245  char *filename;
246 
247  filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
248  GWEN_Buffer_Reset(pathBuffer);
249  GWEN_Buffer_AppendString(pathBuffer, filename);
250  g_free(filename);
251  gtk_widget_destroy(dialog);
252  free(folder);
253  return 0;
254  }
255  gtk_widget_destroy (dialog);
256  free(folder);
258  }
259 
261  GtkWidget *dialog;
262 
263  if (!(caption && *caption))
264  caption=I18N("Select Folder");
265  dialog=gtk_file_chooser_dialog_new (caption,
266  NULL,
267  GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
268  GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
269  GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
270  NULL);
271  if (gtk_dialog_run(GTK_DIALOG(dialog))==GTK_RESPONSE_ACCEPT) {
272  char *filename;
273 
274  filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
275  GWEN_Buffer_Reset(pathBuffer);
276  GWEN_Buffer_AppendString(pathBuffer, filename);
277  g_free (filename);
278  gtk_widget_destroy (dialog);
279  free(folder);
280  return 0;
281  }
282  gtk_widget_destroy (dialog);
283  free(folder);
285  }
286 
287  default:
288  break;
289  }
290  free(folder);
291 
293 }
294 
295 
296 
297 
298