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
34GWEN_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
#define NULL
Definition: binreloc.c:300
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
Definition: buffer.c:650
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition: buffer.c:989
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
Definition: buffer.c:277
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:235
#define DBG_INFO(dbg_logger, format, args...)
Definition: debug.h:181
#define DBG_ERROR(dbg_logger, format, args...)
Definition: debug.h:97
int GWEN_Dialog_EmitSignalToAll(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender)
Definition: dialog.c:330
struct GWEN_DIALOG GWEN_DIALOG
Definition: dialog.h:54
@ GWEN_DialogEvent_TypeInit
Definition: dialog.h:99
@ GWEN_DialogEvent_TypeFini
Definition: dialog.h:100
#define GWEN_ERROR_INVALID
Definition: error.h:67
#define GWEN_ERROR_USER_ABORTED
Definition: error.h:65
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:38
GWENHYWFAR_CB int GTK3_Gui_OpenDialog(GWEN_UNUSED GWEN_GUI *gui, GWEN_DIALOG *dlg, GWEN_UNUSED uint32_t guiid)
Definition: gtk3_gui.c:96
GWENHYWFAR_CB int GTK3_Gui_RunDialog(GWEN_UNUSED GWEN_GUI *gui, GWEN_DIALOG *dlg, int untilEnd)
Definition: gtk3_gui.c:164
GWENHYWFAR_CB int GTK3_Gui_ExecDialog(GWEN_GUI *gui, GWEN_DIALOG *dlg, uint32_t guiid)
Definition: gtk3_gui.c:71
GWENHYWFAR_CB void Gtk3_Gui_FreeData(GWEN_UNUSED void *bp, void *p)
Definition: gtk3_gui.c:60
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
GWEN_GUI * Gtk3_Gui_new()
Definition: gtk3_gui.c:38
#define I18N(msg)
Definition: gtk3_gui.c:30
GWENHYWFAR_CB int GTK3_Gui_CloseDialog(GWEN_UNUSED GWEN_GUI *gui, GWEN_DIALOG *dlg)
Definition: gtk3_gui.c:134
void Gtk3Gui_Dialog_Unextend(GWEN_DIALOG *dlg)
int GTK3_Gui_Dialog_Run(GWEN_DIALOG *dlg, int untilEnd)
int Gtk3Gui_Dialog_Setup(GWEN_DIALOG *dlg, GWEN_UNUSED GtkWidget *parentWindow)
void Gtk3Gui_Dialog_Extend(GWEN_DIALOG *dlg)
GtkWidget * Gtk3Gui_Dialog_GetMainWidget(const GWEN_DIALOG *dlg)
GWEN_GUI * GWEN_Gui_new(void)
Definition: gui.c:99
void GWEN_Gui_AddFlags(GWEN_GUI *gui, uint32_t fl)
Definition: gui.c:211
GWEN_GUI_FILENAME_TYPE
Definition: gui.h:949
@ GWEN_Gui_FileNameType_OpenDirectory
Definition: gui.h:952
@ GWEN_Gui_FileNameType_SaveFileName
Definition: gui.h:951
@ GWEN_Gui_FileNameType_OpenFileName
Definition: gui.h:950
#define GWEN_GUI_FLAGS_DIALOGSUPPORTED
Definition: gui.h:1001
struct GWEN_GUI GWEN_GUI
Definition: gui.h:176
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_API void GWEN_Gui_UseDialogs(GWEN_GUI *gui)
Definition: gui_dialogs.c:29
GWENHYWFAR_API GWEN_GUI_EXEC_DIALOG_FN GWEN_Gui_SetExecDialogFn(GWEN_GUI *gui, GWEN_GUI_EXEC_DIALOG_FN f)
Definition: gui_virtual.c:221
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_CLOSE_DIALOG_FN GWEN_Gui_SetCloseDialogFn(GWEN_GUI *gui, GWEN_GUI_CLOSE_DIALOG_FN f)
Definition: gui_virtual.c:247
GWENHYWFAR_API GWEN_GUI_OPEN_DIALOG_FN GWEN_Gui_SetOpenDialogFn(GWEN_GUI *gui, GWEN_GUI_OPEN_DIALOG_FN f)
Definition: gui_virtual.c:234
#define GWEN_UNUSED
#define GWEN_DIR_SEPARATOR
#define GWENHYWFAR_CB
Definition: gwenhywfarapi.h:89
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
Definition: inherit.h:292
#define GWEN_INHERIT(bt, t)
Definition: inherit.h:264
#define GWEN_LOGDOMAIN
Definition: logger.h:35
#define GWEN_FREE_OBJECT(varname)
Definition: memory.h:61
#define GWEN_NEW_OBJECT(typ, varname)
Definition: memory.h:55