gwenhywfar  4.99.8beta
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  GWEN_GUI *gui;
40  GTK3_GUI *xgui;
41 
42  gui=GWEN_Gui_new();
43  GWEN_NEW_OBJECT(GTK3_GUI, xgui);
44  GWEN_INHERIT_SETDATA(GWEN_GUI, GTK3_GUI, gui, xgui, Gtk3_Gui_FreeData);
45 
48  xgui->execDialogFn=GWEN_Gui_SetExecDialogFn(gui, GTK3_Gui_ExecDialog);
49  xgui->openDialogFn=GWEN_Gui_SetOpenDialogFn(gui, GTK3_Gui_OpenDialog);
50  xgui->closeDialogFn=GWEN_Gui_SetCloseDialogFn(gui, GTK3_Gui_CloseDialog);
51  xgui->runDialogFn=GWEN_Gui_SetRunDialogFn(gui, GTK3_Gui_RunDialog);
52  xgui->getFileNameDialogFn=GWEN_Gui_SetGetFileNameFn(gui, GTK3_Gui_GetFileName);
53 
54  return gui;
55 }
56 
57 
58 
59 GWENHYWFAR_CB void Gtk3_Gui_FreeData(void *bp, void *p) {
60  GTK3_GUI *xgui;
61 
62  xgui=(GTK3_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=GTK3_Gui_OpenDialog(gui, dlg, guiid);
76  if (rv<0) {
77  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
78  return rv;
79  }
80 
81  rv=GTK3_Gui_RunDialog(gui, dlg, 1);
82  GTK3_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=Gtk3Gui_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(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 GTK3_Gui_RunDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, int untilEnd) {
160  int rv;
161 
162  assert(dlg);
163  rv=GTK3_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  "_Cancel", GTK_RESPONSE_CANCEL,
204  "_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  "_Cancel", GTK_RESPONSE_CANCEL,
236  "_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  "_Cancel", GTK_RESPONSE_CANCEL,
269  "_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 
GWEN_GUI_CLOSE_DIALOG_FN GWEN_Gui_SetCloseDialogFn(GWEN_GUI *gui, GWEN_GUI_CLOSE_DIALOG_FN f)
Definition: gui.c:571
GWENHYWFAR_CB int GTK3_Gui_CloseDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg)
Definition: gtk3_gui.c:130
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:223
GtkWidget * Gtk3Gui_Dialog_GetMainWidget(const GWEN_DIALOG *dlg)
#define GWEN_ERROR_INVALID
Definition: error.h:67
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
Definition: buffer.c:266
GWENHYWFAR_CB int GTK3_Gui_RunDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, int untilEnd)
Definition: gtk3_gui.c:159
GWEN_GUI_GET_FILENAME_FN GWEN_Gui_SetGetFileNameFn(GWEN_GUI *gui, GWEN_GUI_GET_FILENAME_FN f)
Definition: gui.c:621
GWENHYWFAR_CB int GTK3_Gui_ExecDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, uint32_t guiid)
Definition: gtk3_gui.c:69
#define GWEN_FREE_OBJECT(varname)
Definition: memory.h:92
#define NULL
Definition: binreloc.c:290
void GWEN_Gui_AddFlags(GWEN_GUI *gui, uint32_t fl)
Definition: gui.c:674
GWENHYWFAR_CB int GTK3_Gui_OpenDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, uint32_t guiid)
Definition: gtk3_gui.c:93
#define GWEN_LOGDOMAIN
Definition: logger.h:35
void Gtk3Gui_Dialog_Extend(GWEN_DIALOG *dlg)
struct GWEN_DIALOG GWEN_DIALOG
Definition: dialog.h:54
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
Definition: buffer.c:684
GWEN_GUI_RUN_DIALOG_FN GWEN_Gui_SetRunDialogFn(GWEN_GUI *gui, GWEN_GUI_RUN_DIALOG_FN f)
Definition: gui.c:583
void Gtk3Gui_Dialog_Unextend(GWEN_DIALOG *dlg)
int Gtk3Gui_Dialog_Setup(GWEN_DIALOG *dlg, GtkWidget *parentWindow)
GWEN_GUI_FILENAME_TYPE
Definition: gui.h:936
#define GWEN_NEW_OBJECT(typ, varname)
Definition: memory.h:86
#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:275
void GWEN_Gui_UseDialogs(GWEN_GUI *gui)
Definition: gui.c:128
GWEN_GUI_OPEN_DIALOG_FN GWEN_Gui_SetOpenDialogFn(GWEN_GUI *gui, GWEN_GUI_OPEN_DIALOG_FN f)
Definition: gui.c:559
#define GWEN_GUI_FLAGS_DIALOGSUPPORTED
Definition: gui.h:988
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:41
#define DBG_ERROR(dbg_logger, format, args...)
Definition: debug.h:97
GWEN_GUI * GWEN_Gui_new(void)
Definition: gui.c:78
#define GWEN_DIR_SEPARATOR
#define DBG_INFO(dbg_logger, format, args...)
Definition: debug.h:164
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
GWEN_GUI * Gtk3_Gui_new()
Definition: gtk3_gui.c:38
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
Definition: inherit.h:292
GWENHYWFAR_CB void Gtk3_Gui_FreeData(void *bp, void *p)
Definition: gtk3_gui.c:59
GWEN_GUI_EXEC_DIALOG_FN GWEN_Gui_SetExecDialogFn(GWEN_GUI *gui, GWEN_GUI_EXEC_DIALOG_FN f)
Definition: gui.c:547
GWENHYWFAR_CB int GTK3_Gui_GetFileName(GWEN_GUI *gui, const char *caption, GWEN_GUI_FILENAME_TYPE fnt, uint32_t flags, const char *patterns, GWEN_BUFFER *pathBuffer, uint32_t guiid)
Definition: gtk3_gui.c:173
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition: buffer.c:1014