gwenhywfar  5.10.1
gtk3_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 "gtk3_gui_p.h"
16 #include "gtk3_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, GTK3_GUI)
35 
36 
37 
39 {
40  GWEN_GUI *gui;
41  GTK3_GUI *xgui;
42 
43  gui=GWEN_Gui_new();
44  GWEN_NEW_OBJECT(GTK3_GUI, xgui);
45  GWEN_INHERIT_SETDATA(GWEN_GUI, GTK3_GUI, gui, xgui, Gtk3_Gui_FreeData);
46 
49  xgui->execDialogFn=GWEN_Gui_SetExecDialogFn(gui, GTK3_Gui_ExecDialog);
50  xgui->openDialogFn=GWEN_Gui_SetOpenDialogFn(gui, GTK3_Gui_OpenDialog);
51  xgui->closeDialogFn=GWEN_Gui_SetCloseDialogFn(gui, GTK3_Gui_CloseDialog);
52  xgui->runDialogFn=GWEN_Gui_SetRunDialogFn(gui, GTK3_Gui_RunDialog);
53  xgui->getFileNameDialogFn=GWEN_Gui_SetGetFileNameFn(gui, GTK3_Gui_GetFileName);
54 
55  return gui;
56 }
57 
58 
59 
61 {
62  GTK3_GUI *xgui;
63 
64  xgui=(GTK3_GUI *) p;
65 
66  GWEN_FREE_OBJECT(xgui);
67 }
68 
69 
70 
72  GWEN_DIALOG *dlg,
73  uint32_t guiid)
74 {
75  int rv;
76 
77  assert(dlg);
78  rv=GTK3_Gui_OpenDialog(gui, dlg, guiid);
79  if (rv<0) {
80  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
81  return rv;
82  }
83 
84  rv=GTK3_Gui_RunDialog(gui, dlg, 1);
85  GTK3_Gui_CloseDialog(gui, dlg);
86  if (rv<0) {
87  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
88  return rv;
89  }
90 
91  return rv;
92 }
93 
94 
95 
97  GWEN_DIALOG *dlg,
98  GWEN_UNUSED uint32_t guiid)
99 {
100  int rv;
101  GtkWidget *g;
102 
103  assert(dlg);
105  rv=Gtk3Gui_Dialog_Setup(dlg, NULL);
106  if (rv<0) {
107  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
109  return rv;
110  }
111 
113  if (g==NULL) {
114  DBG_ERROR(GWEN_LOGDOMAIN, "No main widget");
116  return GWEN_ERROR_INVALID;
117  }
118 
120  if (rv<0) {
121  DBG_INFO(GWEN_LOGDOMAIN, "Error initializing dialog: %d", rv);
123  return rv;
124  }
125 
126  /* show dialog */
127  gtk_widget_show_all(g);
128 
129  return 0;
130 }
131 
132 
133 
135 {
136  GtkWidget *g;
137  int rv;
138 
139  assert(dlg);
141  if (g==NULL) {
142  DBG_ERROR(GWEN_LOGDOMAIN, "No main widget");
144  return GWEN_ERROR_INVALID;
145  }
146 
147  /* hide dialog */
148  gtk_widget_hide(g);
149 
150  /* send fini signal to dialog */
152  if (rv<0) {
153  DBG_INFO(GWEN_LOGDOMAIN, "Error deinitializing dialog: %d", rv);
155  return rv;
156  }
157 
159  return 0;
160 }
161 
162 
163 
165 {
166  int rv;
167 
168  assert(dlg);
169  rv=GTK3_Gui_Dialog_Run(dlg, untilEnd);
170  if (rv<0) {
171  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
172  return rv;
173  }
174  return rv;
175 }
176 
177 
178 
180  const char *caption,
182  GWEN_UNUSED uint32_t flags,
183  GWEN_UNUSED const char *patterns,
184  GWEN_BUFFER *pathBuffer,
185  GWEN_UNUSED uint32_t guiid)
186 {
187  char *folder=NULL;
188  char *fileName=NULL;
189 
190  if (GWEN_Buffer_GetUsedBytes(pathBuffer)) {
191  folder=strdup(GWEN_Buffer_GetStart(pathBuffer));
192  fileName=strchr(folder, GWEN_DIR_SEPARATOR);
193  if (fileName) {
194  *fileName=0;
195  fileName++;
196  if (*fileName==0)
197  fileName=NULL;
198  }
199  }
200 
201  switch (fnt) {
203  GtkWidget *dialog;
204 
205  if (!(caption && *caption))
206  caption=I18N("Open File");
207  dialog=gtk_file_chooser_dialog_new(caption,
208  NULL,
209  GTK_FILE_CHOOSER_ACTION_OPEN,
210  "_Cancel", GTK_RESPONSE_CANCEL,
211  "_Open", GTK_RESPONSE_ACCEPT,
212  NULL);
213  if (folder && *folder)
214  gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), folder);
215  if (fileName && *fileName)
216  gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), fileName);
217 
218  if (gtk_dialog_run(GTK_DIALOG(dialog))==GTK_RESPONSE_ACCEPT) {
219  char *filename;
220 
221  filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
222  GWEN_Buffer_Reset(pathBuffer);
223  GWEN_Buffer_AppendString(pathBuffer, filename);
224  g_free(filename);
225  gtk_widget_destroy(dialog);
226  free(folder);
227  return 0;
228  }
229  gtk_widget_destroy(dialog);
230  free(folder);
232  }
233 
235  GtkWidget *dialog;
236 
237  if (!(caption && *caption))
238  caption=I18N("Save File");
239  dialog=gtk_file_chooser_dialog_new(caption,
240  NULL,
241  GTK_FILE_CHOOSER_ACTION_SAVE,
242  "_Cancel", GTK_RESPONSE_CANCEL,
243  "_Open", GTK_RESPONSE_ACCEPT,
244  NULL);
245  gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE);
246  if (folder && *folder)
247  gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), folder);
248  if (fileName && *fileName)
249  gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), fileName);
250 
251  if (gtk_dialog_run(GTK_DIALOG(dialog))==GTK_RESPONSE_ACCEPT) {
252  char *filename;
253 
254  filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
255  GWEN_Buffer_Reset(pathBuffer);
256  GWEN_Buffer_AppendString(pathBuffer, filename);
257  g_free(filename);
258  gtk_widget_destroy(dialog);
259  free(folder);
260  return 0;
261  }
262  gtk_widget_destroy(dialog);
263  free(folder);
265  }
266 
268  GtkWidget *dialog;
269 
270  if (!(caption && *caption))
271  caption=I18N("Select Folder");
272  dialog=gtk_file_chooser_dialog_new(caption,
273  NULL,
274  GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
275  "_Cancel", GTK_RESPONSE_CANCEL,
276  "_Open", GTK_RESPONSE_ACCEPT,
277  NULL);
278  if (gtk_dialog_run(GTK_DIALOG(dialog))==GTK_RESPONSE_ACCEPT) {
279  char *filename;
280 
281  filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
282  GWEN_Buffer_Reset(pathBuffer);
283  GWEN_Buffer_AppendString(pathBuffer, filename);
284  g_free(filename);
285  gtk_widget_destroy(dialog);
286  free(folder);
287  return 0;
288  }
289  gtk_widget_destroy(dialog);
290  free(folder);
292  }
293 
294  default:
295  break;
296  }
297  free(folder);
298 
300 }
301 
302 
303 
304 
305 
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:235
GWENHYWFAR_API GWEN_GUI_OPEN_DIALOG_FN GWEN_Gui_SetOpenDialogFn(GWEN_GUI *gui, GWEN_GUI_OPEN_DIALOG_FN f)
Definition: gui_virtual.c:234
GtkWidget * Gtk3Gui_Dialog_GetMainWidget(const GWEN_DIALOG *dlg)
GWENHYWFAR_CB int GTK3_Gui_OpenDialog(GWEN_UNUSED GWEN_GUI *gui, GWEN_DIALOG *dlg, GWEN_UNUSED uint32_t guiid)
Definition: gtk3_gui.c:96
#define GWEN_ERROR_INVALID
Definition: error.h:67
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
Definition: buffer.c:277
GWENHYWFAR_CB int GTK3_Gui_ExecDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, uint32_t guiid)
Definition: gtk3_gui.c:71
#define GWEN_FREE_OBJECT(varname)
Definition: memory.h:61
#define NULL
Definition: binreloc.c:300
GWENHYWFAR_API GWEN_GUI_GET_FILENAME_FN GWEN_Gui_SetGetFileNameFn(GWEN_GUI *gui, GWEN_GUI_GET_FILENAME_FN f)
Definition: gui_virtual.c:299
GWENHYWFAR_API GWEN_GUI_EXEC_DIALOG_FN GWEN_Gui_SetExecDialogFn(GWEN_GUI *gui, GWEN_GUI_EXEC_DIALOG_FN f)
Definition: gui_virtual.c:221
void GWEN_Gui_AddFlags(GWEN_GUI *gui, uint32_t fl)
Definition: gui.c:211
#define GWEN_LOGDOMAIN
Definition: logger.h:35
void Gtk3Gui_Dialog_Extend(GWEN_DIALOG *dlg)
GWENHYWFAR_CB int GTK3_Gui_RunDialog(GWEN_UNUSED GWEN_GUI *gui, GWEN_DIALOG *dlg, int untilEnd)
Definition: gtk3_gui.c:164
struct GWEN_DIALOG GWEN_DIALOG
Definition: dialog.h:54
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
Definition: buffer.c:650
GWENHYWFAR_API void GWEN_Gui_UseDialogs(GWEN_GUI *gui)
Definition: gui_dialogs.c:29
void Gtk3Gui_Dialog_Unextend(GWEN_DIALOG *dlg)
GWEN_GUI_FILENAME_TYPE
Definition: gui.h:949
#define GWEN_NEW_OBJECT(typ, varname)
Definition: memory.h:55
GWENHYWFAR_CB int GTK3_Gui_CloseDialog(GWEN_UNUSED GWEN_GUI *gui, GWEN_DIALOG *dlg)
Definition: gtk3_gui.c:134
#define I18N(msg)
Definition: gtk3_gui.c:30
#define GWENHYWFAR_CB
Definition: gwenhywfarapi.h:89
int GWEN_Dialog_EmitSignalToAll(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender)
Definition: dialog.c:330
#define GWEN_GUI_FLAGS_DIALOGSUPPORTED
Definition: gui.h:1001
GWENHYWFAR_API GWEN_GUI_CLOSE_DIALOG_FN GWEN_Gui_SetCloseDialogFn(GWEN_GUI *gui, GWEN_GUI_CLOSE_DIALOG_FN f)
Definition: gui_virtual.c:247
GWENHYWFAR_API GWEN_GUI_RUN_DIALOG_FN GWEN_Gui_SetRunDialogFn(GWEN_GUI *gui, GWEN_GUI_RUN_DIALOG_FN f)
Definition: gui_virtual.c:260
GWENHYWFAR_CB int GTK3_Gui_GetFileName(GWEN_UNUSED GWEN_GUI *gui, const char *caption, GWEN_GUI_FILENAME_TYPE fnt, GWEN_UNUSED uint32_t flags, GWEN_UNUSED const char *patterns, GWEN_BUFFER *pathBuffer, GWEN_UNUSED uint32_t guiid)
Definition: gtk3_gui.c:179
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:38
int Gtk3Gui_Dialog_Setup(GWEN_DIALOG *dlg, GWEN_UNUSED GtkWidget *parentWindow)
#define DBG_ERROR(dbg_logger, format, args...)
Definition: debug.h:97
GWEN_GUI * GWEN_Gui_new(void)
Definition: gui.c:99
#define GWEN_DIR_SEPARATOR
#define DBG_INFO(dbg_logger, format, args...)
Definition: debug.h:181
int GTK3_Gui_Dialog_Run(GWEN_DIALOG *dlg, int untilEnd)
struct GWEN_GUI GWEN_GUI
Definition: gui.h:176
#define GWEN_INHERIT(bt, t)
Definition: inherit.h:264
#define GWEN_ERROR_USER_ABORTED
Definition: error.h:65
GWENHYWFAR_CB void Gtk3_Gui_FreeData(GWEN_UNUSED void *bp, void *p)
Definition: gtk3_gui.c:60
GWEN_GUI * Gtk3_Gui_new()
Definition: gtk3_gui.c:38
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
Definition: inherit.h:292
#define GWEN_UNUSED
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition: buffer.c:989