gwenhywfar  4.99.15beta
dialog.c
Go to the documentation of this file.
1 /***************************************************************************
2  begin : Wed Jan 20 2010
3  copyright : (C) 2010 by Martin Preuss
4  email : martin@libchipcard.de
5 
6  ***************************************************************************
7  * *
8  * This library is free software; you can redistribute it and/or *
9  * modify it under the terms of the GNU Lesser General Public *
10  * License as published by the Free Software Foundation; either *
11  * version 2.1 of the License, or (at your option) any later version. *
12  * *
13  * This library is distributed in the hope that it will be useful, *
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
16  * Lesser General Public License for more details. *
17  * *
18  * You should have received a copy of the GNU Lesser General Public *
19  * License along with this library; if not, write to the Free Software *
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, *
21  * MA 02111-1307 USA *
22  * *
23  ***************************************************************************/
24 
25 
26 #ifdef HAVE_CONFIG_H
27 # include <config.h>
28 #endif
29 
30 #define DISABLE_DEBUGLOG
31 
32 
33 #include "dialog_p.h"
34 #include "widget_l.h"
35 #include "gui_l.h"
36 
37 #include <gwenhywfar/text.h>
38 #include <gwenhywfar/pathmanager.h>
39 #include <gwenhywfar/debug.h>
40 #include <gwenhywfar/i18n.h>
41 
42 #include <assert.h>
43 #include <ctype.h>
44 
45 
47 GWEN_LIST_FUNCTIONS(GWEN_DIALOG, GWEN_Dialog)
49 
50 
51 
52 
53 GWEN_DIALOG *GWEN_Dialog_new(const char *dialogId)
54 {
55  GWEN_DIALOG *dlg;
56  int rv;
57  GWEN_DB_NODE *db=NULL;
58 
60  dlg->refCount=1;
63 
64  if (dialogId && *dialogId)
65  dlg->dialogId=strdup(dialogId);
66 
67  dlg->i18nDomain=strdup(PACKAGE);
68 
69  dlg->widgets=GWEN_Widget_Tree_new();
70 
71  dlg->subDialogs=GWEN_Dialog_List_new();
72 
73  /* try to load preferences */
74  rv=GWEN_Gui_ReadDialogPrefs(dialogId, NULL, &db);
75  if (rv<0) {
76  DBG_WARN(GWEN_LOGDOMAIN, "Could not read dialog preferences (%d)", rv);
77  dlg->dbPreferences=GWEN_DB_Group_new("preferences");
78  }
79  else {
80  dlg->dbPreferences=db;
81  }
82  dlg->mediaPaths=GWEN_StringList_new();
83 
84  return dlg;
85 }
86 
87 
88 
90 {
91  if (dlg) {
92  assert(dlg->refCount);
93 
94  if (dlg->refCount>1) {
95  dlg->refCount--;
96  }
97  else {
98  int rv;
99 
100  /* try to save preferences */
101  rv=GWEN_Gui_WriteDialogPrefs(dlg->dialogId, dlg->dbPreferences);
102  if (rv<0) {
103  DBG_WARN(GWEN_LOGDOMAIN, "Could not write dialog preferences (%d)", rv);
104  }
105 
108  GWEN_Widget_Tree_free(dlg->widgets);
109  free(dlg->dialogId);
110  free(dlg->i18nDomain);
111  dlg->refCount=0;
112  GWEN_Dialog_List_free(dlg->subDialogs);
113 
114  GWEN_DB_Group_free(dlg->dbPreferences);
115  GWEN_StringList_free(dlg->mediaPaths);
116 
117  GWEN_FREE_OBJECT(dlg);
118  }
119  }
120 }
121 
122 
123 
125 {
126  assert(dlg);
127  assert(dlg->refCount);
128 
129  return dlg->parentDialog;
130 }
131 
132 
133 
134 const char *GWEN_Dialog_GetId(const GWEN_DIALOG *dlg)
135 {
136  assert(dlg);
137  assert(dlg->refCount);
138 
139  return dlg->dialogId;
140 }
141 
142 
143 
144 uint32_t GWEN_Dialog_GetGuiId(const GWEN_DIALOG *dlg)
145 {
146  assert(dlg);
147  assert(dlg->refCount);
148 
149  return dlg->guiId;
150 }
151 
152 
153 
154 void GWEN_Dialog_SetGuiId(GWEN_DIALOG *dlg, uint32_t guiid)
155 {
156  assert(dlg);
157  assert(dlg->refCount);
158 
159  dlg->guiId=guiid;
160 }
161 
162 
163 
164 void GWEN_Dialog_SetI18nDomain(GWEN_DIALOG *dlg, const char *s)
165 {
166  assert(dlg);
167  assert(dlg->refCount);
168 
169  free(dlg->i18nDomain);
170  if (s)
171  dlg->i18nDomain=strdup(s);
172  else
173  dlg->i18nDomain=strdup(PACKAGE);
174 }
175 
176 
177 
178 const char *GWEN_Dialog_GetI18nDomain(const GWEN_DIALOG *dlg)
179 {
180  assert(dlg);
181  assert(dlg->refCount);
182 
183  return dlg->i18nDomain;
184 }
185 
186 
187 
188 const char *GWEN_Dialog_TranslateString(const GWEN_DIALOG *dlg, const char *s)
189 {
190  assert(dlg);
191  assert(dlg->refCount);
192 
193  return GWEN_I18N_Translate(dlg->i18nDomain, s);
194 }
195 
196 
197 
198 void GWEN_Dialog_AddMediaPath(GWEN_DIALOG *dlg, const char *s)
199 {
200  assert(dlg);
201  assert(dlg->refCount);
202 
203  GWEN_StringList_AppendString(dlg->mediaPaths, s, 0, 1);
204 }
205 
206 
207 
209  const char *destlib,
210  const char *pathName,
211  const char *relPath)
212 {
213  GWEN_STRINGLIST *sl;
214 
215  sl=GWEN_PathManager_GetPaths(destlib, pathName);
216  if (sl) {
219  if (se) {
220  GWEN_BUFFER *tbuf;
221 
222  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
223  while (se) {
224  const char *s;
225 
227  assert(s);
228  if (relPath) {
229  GWEN_Buffer_AppendString(tbuf, s);
231  GWEN_Buffer_AppendString(tbuf, relPath);
232  GWEN_StringList_AppendString(dlg->mediaPaths, GWEN_Buffer_GetStart(tbuf), 0, 1);
233  GWEN_Buffer_Reset(tbuf);
234  }
235  else
236  GWEN_StringList_AppendString(dlg->mediaPaths, s, 0, 1);
238  }
239  GWEN_Buffer_free(tbuf);
240  }
242  }
243 }
244 
245 
246 
248 {
249  assert(dlg);
250  assert(dlg->refCount);
251 
252  return dlg->mediaPaths;
253 }
254 
255 
256 
259 {
261 
262  assert(dlg);
263  assert(dlg->refCount);
264 
265  oh=dlg->signalHandler;
266  dlg->signalHandler=fn;
267 
268  return oh;
269 }
270 
271 
272 
275  const char *sender)
276 {
277  assert(dlg);
278  assert(dlg->refCount);
279 
280  if (dlg->signalHandler)
281  return (dlg->signalHandler)(dlg, t, sender);
282  else {
283  DBG_WARN(GWEN_LOGDOMAIN, "No signal handler in dialog [%s]",
284  (dlg->dialogId)?(dlg->dialogId):"-unnamed-");
286  }
287 }
288 
289 
290 
293  const char *sender)
294 {
295  int rv;
296  GWEN_DIALOG *subdlg;
297 
298  assert(dlg);
299  assert(dlg->refCount);
300 
301  subdlg=GWEN_Dialog_List_First(dlg->subDialogs);
302  while (subdlg) {
303  rv=GWEN_Dialog_EmitSignalToAll(subdlg, t, sender);
306  return rv;
307  subdlg=GWEN_Dialog_List_Next(subdlg);
308  }
309 
310  if (dlg->signalHandler) {
311  rv=(dlg->signalHandler)(dlg, t, sender);
314  return rv;
315  }
316 
318 }
319 
320 
321 
323  const char *parentName,
324  GWEN_DIALOG *subdlg)
325 {
326  GWEN_WIDGET *wparent;
327 
328  wparent=GWEN_Dialog_FindWidgetByName(dlg, parentName);
329  if (wparent) {
330  GWEN_WIDGET *subRoot;
331  GWEN_WIDGET *cw;
332 
333  /* move all widgets from the below sub dialog's root widget to the parent dialog */
334  subRoot=GWEN_Widget_Tree_GetFirst(subdlg->widgets);
335  if (subRoot) {
336  while ((cw=GWEN_Widget_Tree_GetFirstChild(subRoot))) {
337  if (subdlg->firstSubWidget==NULL)
338  subdlg->firstSubWidget=cw;
339  GWEN_Widget_Tree_Del(cw);
340  GWEN_Widget_Tree_AddChild(wparent, cw);
341  }
342  }
343 
344  /* store pointer to parent widget in dialog */
345  subdlg->parentWidget=wparent;
346 
347  /* store pointer to parent dialog in dialog */
348  subdlg->parentDialog=dlg;
349 
350  GWEN_Dialog_List_Add(subdlg, dlg->subDialogs);
351 
352  return 0;
353  }
354  else {
355  DBG_ERROR(GWEN_LOGDOMAIN, "Parent widget [%s] not found", parentName);
356  return GWEN_ERROR_NOT_FOUND;
357  }
358 }
359 
360 
361 
363  GWEN_WIDGET *wparent,
364  GWEN_XMLNODE *node)
365 {
366  GWEN_XMLNODE *n;
367  GWEN_WIDGET *w;
368  int rv;
369 
370  w=GWEN_Widget_new(dlg);
371  rv=GWEN_Widget_ReadXml(w, node);
372  if (rv<0) {
373  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
374  GWEN_Widget_free(w);
375  return rv;
376  }
377 
378  if (wparent)
379  GWEN_Widget_Tree_AddChild(wparent, w);
380  else
381  GWEN_Widget_Tree_Add(dlg->widgets, w);
382 
383 
384  n=GWEN_XMLNode_FindFirstTag(node, "widget", NULL, NULL);
385  while (n) {
386  int rv;
387 
388  rv=GWEN_Dialog__ReadXmlWidget(dlg, w, n);
389  if (rv<0)
390  return rv;
391  n=GWEN_XMLNode_FindNextTag(n, "widget", NULL, NULL);
392  }
393 
394  return 0;
395 }
396 
397 
398 
400 {
401  int rv;
402  const char *s;
403 
404  assert(dlg);
405  assert(dlg->refCount);
406 
407  assert(dlg->widgets);
408  GWEN_Widget_Tree_Clear(dlg->widgets);
409 
410  s=GWEN_XMLNode_GetProperty(node, "i18n", NULL);
411  if (s && *s)
413 
414  rv=GWEN_Dialog__ReadXmlWidget(dlg, NULL, node);
415  if (rv<0) {
416  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
417  GWEN_Widget_Tree_free(dlg->widgets);
418  dlg->widgets=NULL;
419  return rv;
420  }
421 
422  return 0;
423 }
424 
425 
426 
427 int GWEN_Dialog_ReadXmlFile(GWEN_DIALOG *dlg, const char *fname)
428 {
429  GWEN_XMLNODE *n;
430  GWEN_XMLNODE *nDialog;
431  int rv;
432 
434  rv=GWEN_XML_ReadFile(n, fname,
437  if (rv<0) {
438  DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv);
440  return rv;
441  }
442 
443  nDialog=GWEN_XMLNode_FindFirstTag(n, "dialog", NULL, NULL);
444  if (nDialog==NULL) {
445  DBG_ERROR(GWEN_LOGDOMAIN, "Dialog element not found in XML file [%s]", fname);
447  return rv;
448  }
449 
450  rv=GWEN_Dialog_ReadXml(dlg, nDialog);
451  if (rv<0) {
452  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
454  return rv;
455  }
456 
458  return 0;
459 }
460 
461 
462 
464 {
465  GWEN_WIDGET *w;
466 
467  assert(dlg);
468  assert(dlg->refCount);
469  assert(dlg->widgets);
470 
471 #if 0
472  if (dlg->parentWidget)
473  w=dlg->parentWidget;
474  else
475  w=GWEN_Widget_Tree_GetFirst(dlg->widgets);
476 #else
477  if (dlg->firstSubWidget)
478  w=dlg->firstSubWidget;
479  else {
480  w=GWEN_Widget_Tree_GetFirst(dlg->widgets);
481  /* empty name always corresponds to the root */
482  if (name==NULL || *name==0)
483  return w;
484  }
485 #endif
486 
487  while (w) {
488  const char *s;
489 
490  s=GWEN_Widget_GetName(w);
491  if (s && *s && strcasecmp(s, name)==0)
492  break;
493  w=GWEN_Widget_Tree_GetBelow(w);
494  }
495 
496  return w;
497 }
498 
499 
500 
501 GWEN_WIDGET *GWEN_Dialog_FindWidgetByImplData(const GWEN_DIALOG *dlg, int index, const void *ptr)
502 {
503  GWEN_WIDGET *w;
504 
505  assert(dlg);
506  assert(dlg->refCount);
507  assert(dlg->widgets);
508 
509  if (dlg->parentWidget)
510  w=dlg->parentWidget;
511  else
512  w=GWEN_Widget_Tree_GetFirst(dlg->widgets);
513 
514  while (w) {
515  if (ptr==GWEN_Widget_GetImplData(w, index))
516  break;
517  w=GWEN_Widget_Tree_GetBelow(w);
518  }
519 
520  return w;
521 }
522 
523 
524 
525 GWEN_WIDGET_TREE *GWEN_Dialog_GetWidgets(const GWEN_DIALOG *dlg)
526 {
527  assert(dlg);
528  assert(dlg->refCount);
529  assert(dlg->widgets);
530 
531  return dlg->widgets;
532 }
533 
534 
535 
538 {
540 
541  assert(dlg);
542  assert(dlg->refCount);
543 
544  oh=dlg->setIntPropertyFn;
545  dlg->setIntPropertyFn=fn;
546  return oh;
547 }
548 
549 
550 
553 {
555 
556  assert(dlg);
557  assert(dlg->refCount);
558 
559  oh=dlg->getIntPropertyFn;
560  dlg->getIntPropertyFn=fn;
561  return oh;
562 }
563 
564 
565 
568 {
570 
571  assert(dlg);
572  assert(dlg->refCount);
573 
574  oh=dlg->setCharPropertyFn;
575  dlg->setCharPropertyFn=fn;
576  return oh;
577 }
578 
579 
580 
583 {
585 
586  assert(dlg);
587  assert(dlg->refCount);
588 
589  oh=dlg->getCharPropertyFn;
590  dlg->getCharPropertyFn=fn;
591  return oh;
592 }
593 
594 
595 
596 
597 
598 
600  const char *name,
602  int index,
603  int value,
604  int doSignal)
605 {
606  GWEN_WIDGET *w;
607 
608  assert(dlg);
609  assert(dlg->refCount);
610 
611  w=GWEN_Dialog_FindWidgetByName(dlg, name);
612  if (w) {
613  if (dlg->setIntPropertyFn)
614  return dlg->setIntPropertyFn(dlg, w, prop, index, value, doSignal);
615  else if (dlg->parentDialog && dlg->parentDialog->setIntPropertyFn)
616  return dlg->parentDialog->setIntPropertyFn(dlg->parentDialog, w, prop, index, value, doSignal);
617  }
618  else {
619  DBG_ERROR(GWEN_LOGDOMAIN, "Widget [%s] not found", name);
620  return GWEN_ERROR_NOT_FOUND;
621  }
622 
623  DBG_ERROR(GWEN_LOGDOMAIN, "Function pointer not set");
625 }
626 
627 
628 
630  const char *name,
632  int index,
633  int defaultProperty)
634 {
635  GWEN_WIDGET *w;
636 
637  assert(dlg);
638  assert(dlg->refCount);
639 
640  w=GWEN_Dialog_FindWidgetByName(dlg, name);
641  if (w) {
642  if (dlg->getIntPropertyFn)
643  return dlg->getIntPropertyFn(dlg, w, prop, index, defaultProperty);
644  else if (dlg->parentDialog && dlg->parentDialog->getIntPropertyFn)
645  return dlg->parentDialog->getIntPropertyFn(dlg->parentDialog, w, prop, index, defaultProperty);
646  }
647  else {
648  DBG_ERROR(GWEN_LOGDOMAIN, "Widget [%s] not found", name);
649  return defaultProperty;
650  }
651 
652  DBG_ERROR(GWEN_LOGDOMAIN, "Function pointer not set");
653  return defaultProperty;
654 }
655 
656 
657 
659  const char *name,
661  int index,
662  const char *value,
663  int doSignal)
664 {
665  GWEN_WIDGET *w;
666 
667  assert(dlg);
668  assert(dlg->refCount);
669 
670  w=GWEN_Dialog_FindWidgetByName(dlg, name);
671  if (w) {
672  if (dlg->setCharPropertyFn)
673  return dlg->setCharPropertyFn(dlg, w, prop, index, value, doSignal);
674  else if (dlg->parentDialog && dlg->parentDialog->setCharPropertyFn)
675  return dlg->parentDialog->setCharPropertyFn(dlg->parentDialog, w, prop, index, value, doSignal);
676  }
677  else {
678  DBG_ERROR(GWEN_LOGDOMAIN, "Widget [%s] not found", name);
679  return GWEN_ERROR_NOT_FOUND;
680  }
681 
682  DBG_ERROR(GWEN_LOGDOMAIN, "Function pointer not set");
684 }
685 
686 
687 
689  const char *name,
691  int index,
692  const char *defaultProperty)
693 {
694  GWEN_WIDGET *w;
695 
696  assert(dlg);
697  assert(dlg->refCount);
698 
699  w=GWEN_Dialog_FindWidgetByName(dlg, name);
700  if (w) {
701  if (dlg->getCharPropertyFn)
702  return dlg->getCharPropertyFn(dlg, w, prop, index, defaultProperty);
703  else if (dlg->parentDialog && dlg->parentDialog->getCharPropertyFn)
704  return dlg->parentDialog->getCharPropertyFn(dlg->parentDialog, w, prop, index, defaultProperty);
705  }
706  else {
707  DBG_ERROR(GWEN_LOGDOMAIN, "Widget [%s] not found", name);
708  return defaultProperty;
709  }
710 
711  DBG_ERROR(GWEN_LOGDOMAIN, "Function pointer not set");
712  return defaultProperty;
713 }
714 
715 
716 
717 int GWEN_Dialog_RemoveWidget(GWEN_DIALOG *dlg, const char *name)
718 {
719  GWEN_WIDGET *w;
720 
721  w=GWEN_Dialog_FindWidgetByName(dlg, name);
722  if (w) {
723  GWEN_Widget_Tree_Del(w);
724  GWEN_Widget_free(w);
725  return 0;
726  }
727 
728  return GWEN_ERROR_NOT_FOUND;
729 }
730 
731 
732 uint32_t GWEN_Dialog_GetWidgetFlags(const GWEN_DIALOG *dlg, const char *name)
733 {
734  GWEN_WIDGET *w;
735 
736  w=GWEN_Dialog_FindWidgetByName(dlg, name);
737  if (w) {
738  return GWEN_Widget_GetFlags(w);
739  }
740 
741  return 0;
742 }
743 
744 
745 
746 void GWEN_Dialog_SetWidgetFlags(GWEN_DIALOG *dlg, const char *name, uint32_t fl)
747 {
748  GWEN_WIDGET *w;
749 
750  w=GWEN_Dialog_FindWidgetByName(dlg, name);
751  if (w) {
752  GWEN_Widget_SetFlags(w, fl);
753  }
754 }
755 
756 
757 
758 void GWEN_Dialog_AddWidgetFlags(GWEN_DIALOG *dlg, const char *name, uint32_t fl)
759 {
760  GWEN_WIDGET *w;
761 
762  w=GWEN_Dialog_FindWidgetByName(dlg, name);
763  if (w) {
764  GWEN_Widget_AddFlags(w, fl);
765  }
766 }
767 
768 
769 
770 void GWEN_Dialog_SubWidgetFlags(GWEN_DIALOG *dlg, const char *name, uint32_t fl)
771 {
772  GWEN_WIDGET *w;
773 
774  w=GWEN_Dialog_FindWidgetByName(dlg, name);
775  if (w) {
776  GWEN_Widget_SubFlags(w, fl);
777  }
778 }
779 
780 
781 
782 int GWEN_Dialog_GetWidgetColumns(const GWEN_DIALOG *dlg, const char *name)
783 {
784  GWEN_WIDGET *w;
785 
786  w=GWEN_Dialog_FindWidgetByName(dlg, name);
787  if (w) {
788  return GWEN_Widget_GetColumns(w);
789  }
790 
791  return -1;
792 }
793 
794 
795 
796 void GWEN_Dialog_SetWidgetColumns(GWEN_DIALOG *dlg, const char *name, int i)
797 {
798  GWEN_WIDGET *w;
799 
800  w=GWEN_Dialog_FindWidgetByName(dlg, name);
801  if (w) {
803  }
804 }
805 
806 
807 
808 int GWEN_Dialog_GetWidgetRows(const GWEN_DIALOG *dlg, const char *name)
809 {
810  GWEN_WIDGET *w;
811 
812  w=GWEN_Dialog_FindWidgetByName(dlg, name);
813  if (w) {
814  return GWEN_Widget_GetRows(w);
815  }
816 
817  return -1;
818 }
819 
820 
821 
822 void GWEN_Dialog_SetWidgetRows(GWEN_DIALOG *dlg, const char *name, int i)
823 {
824  GWEN_WIDGET *w;
825 
826  w=GWEN_Dialog_FindWidgetByName(dlg, name);
827  if (w) {
828  GWEN_Widget_SetRows(w, i);
829  }
830 }
831 
832 
833 
834 void GWEN_Dialog_SetWidgetText(GWEN_DIALOG *dlg, const char *name, const char *t)
835 {
836  GWEN_WIDGET *w;
837 
838  w=GWEN_Dialog_FindWidgetByName(dlg, name);
839  if (w) {
840  GWEN_Widget_SetText(w, 0, t);
841  }
842 }
843 
844 
845 
846 const char *GWEN_Dialog_GetWidgetText(const GWEN_DIALOG *dlg, const char *name)
847 {
848  GWEN_WIDGET *w;
849 
850  w=GWEN_Dialog_FindWidgetByName(dlg, name);
851  if (w) {
852  return GWEN_Widget_GetText(w, 0);
853  }
854 
855  return NULL;
856 }
857 
858 
859 
860 static void GWEN_Dialog_DumpWidget(const GWEN_WIDGET *w, FILE *f, unsigned int indent)
861 {
862  int i;
863  const char *s;
864  const char *dname=NULL;
865  GWEN_DIALOG *dlg;
866  const GWEN_WIDGET *c;
867 
868  for (i=0; i<indent; i++)
869  fprintf(f, " ");
870  s=GWEN_Widget_GetName(w);
871  dlg=GWEN_Widget_GetDialog(w);
872  if (dlg)
873  dname=GWEN_Dialog_GetId(dlg);
874 
875  fprintf(f, "Widget %s: %d [%s]\n", s?s:"unnamed", GWEN_Widget_GetType(w), dname?dname:"no dialog");
876  c=GWEN_Widget_Tree_GetFirstChild(w);
877  while (c) {
878  GWEN_Dialog_DumpWidget(c, f, indent+2);
879  c=GWEN_Widget_Tree_GetNext(c);
880  }
881 }
882 
883 
884 
885 void GWEN_Dialog_Dump(const GWEN_DIALOG *dlg, FILE *f, unsigned int indent)
886 {
887  GWEN_WIDGET *w;
888 
889  w=GWEN_Widget_Tree_GetFirst(dlg->widgets);
890  GWEN_Dialog_DumpWidget(w, f, indent);
891 }
892 
893 
894 
895 
896 
897 
899 {
900  assert(dlg);
901  assert(dlg->refCount);
902 
903  return dlg->dbPreferences;
904 }
905 
906 
907 
908 
GWEN_WIDGET_TYPE GWEN_Widget_GetType(const GWEN_WIDGET *w)
Definition: widget.c:185
void GWEN_Dialog_SetWidgetColumns(GWEN_DIALOG *dlg, const char *name, int i)
Definition: dialog.c:796
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:235
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
Definition: stringlist.h:51
void GWEN_Widget_SetText(GWEN_WIDGET *w, int idx, const char *s)
Definition: widget.c:304
struct GWEN_DB_NODE GWEN_DB_NODE
Definition: db.h:228
#define GWEN_INHERIT_FINI(t, element)
Definition: inherit.h:238
#define GWEN_XML_FLAGS_DEFAULT
Definition: xml.h:110
void GWEN_DB_Group_free(GWEN_DB_NODE *n)
Definition: db.c:408
GWEN_DIALOG * GWEN_Dialog_List_Next(const GWEN_DIALOG *element)
#define GWEN_DIR_SEPARATOR_S
const char * GWEN_XMLNode_GetProperty(const GWEN_XMLNODE *n, const char *name, const char *defaultValue)
Definition: xml.c:239
const char * GWEN_Widget_GetName(const GWEN_WIDGET *w)
Definition: widget.c:320
GWEN_XMLNODE * GWEN_XMLNode_FindNextTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
Definition: xml.c:754
static void GWEN_Dialog_DumpWidget(const GWEN_WIDGET *w, FILE *f, unsigned int indent)
Definition: dialog.c:860
GWEN_WIDGET_TREE * GWEN_Dialog_GetWidgets(const GWEN_DIALOG *dlg)
Definition: dialog.c:525
GWEN_DIALOG_SETINTPROPERTY_FN GWEN_Dialog_SetSetIntPropertyFn(GWEN_DIALOG *dlg, GWEN_DIALOG_SETINTPROPERTY_FN fn)
Definition: dialog.c:536
GWEN_DIALOG * GWEN_Dialog_List_First(const GWEN_DIALOG_LIST *l)
GWEN_DIALOG_PROPERTY
Definition: dialog.h:215
#define GWEN_FREE_OBJECT(varname)
Definition: memory.h:92
#define NULL
Definition: binreloc.c:297
int GWEN_Dialog_RemoveWidget(GWEN_DIALOG *dlg, const char *name)
Definition: dialog.c:717
void GWEN_Widget_SetFlags(GWEN_WIDGET *w, uint32_t fl)
Definition: widget.c:158
int GWEN_Gui_WriteDialogPrefs(const char *groupName, GWEN_DB_NODE *db)
Definition: gui.c:1544
GWENHYWFAR_API int GWEN_XML_ReadFile(GWEN_XMLNODE *n, const char *filepath, uint32_t flags)
Definition: xmlrw.c:984
void GWEN_Widget_free(GWEN_WIDGET *w)
Definition: widget.c:66
void GWEN_Widget_SubFlags(GWEN_WIDGET *w, uint32_t fl)
Definition: widget.c:176
void GWEN_Dialog_AddWidgetFlags(GWEN_DIALOG *dlg, const char *name, uint32_t fl)
Definition: dialog.c:758
uint32_t GWEN_Widget_GetFlags(const GWEN_WIDGET *w)
Definition: widget.c:149
GWEN_DIALOG_EVENTTYPE
Definition: dialog.h:90
const char *GWENHYWFAR_CB(* GWEN_DIALOG_GETCHARPROPERTY_FN)(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue)
Definition: dialog_be.h:62
#define DBG_WARN(dbg_logger, format, args...)
Definition: debug.h:123
const char * GWEN_Dialog_TranslateString(const GWEN_DIALOG *dlg, const char *s)
Definition: dialog.c:188
int GWEN_Widget_GetRows(const GWEN_WIDGET *w)
Definition: widget.c:221
GWEN_DIALOG_SIGNALHANDLER GWEN_Dialog_SetSignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_SIGNALHANDLER fn)
Definition: dialog.c:257
#define GWEN_LOGDOMAIN
Definition: logger.h:35
GWEN_DB_NODE * GWEN_Dialog_GetPreferences(const GWEN_DIALOG *dlg)
Definition: dialog.c:898
GWEN_XMLNODE * GWEN_XMLNode_new(GWEN_XMLNODE_TYPE t, const char *data)
Definition: xml.c:144
uint32_t GWEN_Dialog_GetWidgetFlags(const GWEN_DIALOG *dlg, const char *name)
Definition: dialog.c:732
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
Definition: buffer.c:38
struct GWEN_DIALOG GWEN_DIALOG
Definition: dialog.h:54
int GWENHYWFAR_CB(* GWEN_DIALOG_GETINTPROPERTY_FN)(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue)
Definition: dialog_be.h:49
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
Definition: stringlist.c:366
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
Definition: buffer.c:719
const char * GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se)
Definition: stringlist.c:382
int GWEN_Dialog__ReadXmlWidget(GWEN_DIALOG *dlg, GWEN_WIDGET *wparent, GWEN_XMLNODE *node)
Definition: dialog.c:362
const char * GWEN_Dialog_GetId(const GWEN_DIALOG *dlg)
Definition: dialog.c:134
void GWEN_Dialog_List_Add(GWEN_DIALOG *element, GWEN_DIALOG_LIST *list)
void GWEN_Dialog_SetWidgetText(GWEN_DIALOG *dlg, const char *name, const char *t)
Definition: dialog.c:834
GWEN_WIDGET * GWEN_Dialog_FindWidgetByName(const GWEN_DIALOG *dlg, const char *name)
Definition: dialog.c:463
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
Definition: stringlist.c:58
GWEN_XMLNODE * GWEN_XMLNode_FindFirstTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
Definition: xml.c:736
GWEN_WIDGET * GWEN_Dialog_FindWidgetByImplData(const GWEN_DIALOG *dlg, int index, const void *ptr)
Definition: dialog.c:501
void GWEN_Dialog_SetWidgetRows(GWEN_DIALOG *dlg, const char *name, int i)
Definition: dialog.c:822
#define GWEN_NEW_OBJECT(typ, varname)
Definition: memory.h:86
void * GWEN_Widget_GetImplData(const GWEN_WIDGET *w, int index)
Definition: widget.c:122
GWEN_DIALOG * GWEN_Widget_GetDialog(const GWEN_WIDGET *w)
Definition: widget.c:92
int GWEN_Widget_GetColumns(const GWEN_WIDGET *w)
Definition: widget.c:203
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
Definition: stringlist.c:241
int GWEN_Dialog_GetIntProperty(GWEN_DIALOG *dlg, const char *name, GWEN_DIALOG_PROPERTY prop, int index, int defaultProperty)
Definition: dialog.c:629
int GWEN_Dialog_EmitSignalToAll(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender)
Definition: dialog.c:291
void GWEN_Dialog_SetI18nDomain(GWEN_DIALOG *dlg, const char *s)
Definition: dialog.c:164
void GWEN_Dialog_SetWidgetFlags(GWEN_DIALOG *dlg, const char *name, uint32_t fl)
Definition: dialog.c:746
GWEN_STRINGLIST * GWEN_Dialog_GetMediaPaths(const GWEN_DIALOG *dlg)
Definition: dialog.c:247
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
Definition: stringlist.h:54
void GWEN_Dialog_SetGuiId(GWEN_DIALOG *dlg, uint32_t guiid)
Definition: dialog.c:154
int GWENHYWFAR_CB(* GWEN_DIALOG_SIGNALHANDLER)(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender)
Definition: dialog.h:122
void GWEN_Widget_SetRows(GWEN_WIDGET *w, int i)
Definition: widget.c:230
void GWEN_Dialog_List_free(GWEN_DIALOG_LIST *l)
#define GWEN_INHERIT_INIT(t, element)
Definition: inherit.h:223
struct GWEN_WIDGET GWEN_WIDGET
Definition: widget_be.h:34
void GWEN_Widget_SetColumns(GWEN_WIDGET *w, int i)
Definition: widget.c:212
GWEN_STRINGLIST * GWEN_PathManager_GetPaths(const char *destLib, const char *pathName)
Definition: pathmanager.c:494
GWEN_DIALOG_SETCHARPROPERTY_FN GWEN_Dialog_SetSetCharPropertyFn(GWEN_DIALOG *dlg, GWEN_DIALOG_SETCHARPROPERTY_FN fn)
Definition: dialog.c:566
void GWEN_Buffer_free(GWEN_BUFFER *bf)
Definition: buffer.c:85
void GWEN_XMLNode_free(GWEN_XMLNODE *n)
Definition: xml.c:160
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:41
GWEN_LIST2_FUNCTIONS(TYPEMAKER2_TYPE, Typemaker2_Type)
void GWEN_Dialog_Dump(const GWEN_DIALOG *dlg, FILE *f, unsigned int indent)
Definition: dialog.c:885
GWEN_DIALOG_LIST * GWEN_Dialog_List_new()
const char * GWEN_Dialog_GetI18nDomain(const GWEN_DIALOG *dlg)
Definition: dialog.c:178
int GWENHYWFAR_CB(* GWEN_DIALOG_SETCHARPROPERTY_FN)(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal)
Definition: dialog_be.h:55
int GWEN_Dialog_EmitSignal(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender)
Definition: dialog.c:273
#define DBG_ERROR(dbg_logger, format, args...)
Definition: debug.h:97
const char * GWEN_Dialog_GetCharProperty(GWEN_DIALOG *dlg, const char *name, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultProperty)
Definition: dialog.c:688
int GWEN_Gui_ReadDialogPrefs(const char *groupName, const char *altName, GWEN_DB_NODE **pDb)
Definition: gui.c:1533
int GWEN_Dialog_SetIntProperty(GWEN_DIALOG *dlg, const char *name, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal)
Definition: dialog.c:599
int GWEN_Widget_ReadXml(GWEN_WIDGET *w, GWEN_XMLNODE *node)
Definition: widget.c:594
int GWEN_Dialog_ReadXml(GWEN_DIALOG *dlg, GWEN_XMLNODE *node)
Definition: dialog.c:399
GWEN_DIALOG * GWEN_Dialog_new(const char *dialogId)
Definition: dialog.c:53
GWEN_STRINGLISTENTRY * GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se)
Definition: stringlist.c:374
GWEN_WIDGET * GWEN_Widget_new(GWEN_DIALOG *dlg)
Definition: widget.c:50
int GWENHYWFAR_CB(* GWEN_DIALOG_SETINTPROPERTY_FN)(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal)
Definition: dialog_be.h:42
int GWEN_Dialog_SetCharProperty(GWEN_DIALOG *dlg, const char *name, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal)
Definition: dialog.c:658
#define GWEN_ERROR_NOT_FOUND
Definition: error.h:89
const char * GWEN_I18N_Translate(const char *txtdom, const char *text)
Definition: i18n.c:253
void GWEN_Dialog_AddMediaPath(GWEN_DIALOG *dlg, const char *s)
Definition: dialog.c:198
int GWEN_Dialog_GetWidgetRows(const GWEN_DIALOG *dlg, const char *name)
Definition: dialog.c:808
const char * GWEN_Dialog_GetWidgetText(const GWEN_DIALOG *dlg, const char *name)
Definition: dialog.c:846
#define DBG_INFO(dbg_logger, format, args...)
Definition: debug.h:177
void GWEN_Dialog_SubWidgetFlags(GWEN_DIALOG *dlg, const char *name, uint32_t fl)
Definition: dialog.c:770
void GWEN_Widget_AddFlags(GWEN_WIDGET *w, uint32_t fl)
Definition: widget.c:167
GWEN_DIALOG * GWEN_Dialog_GetParentDialog(const GWEN_DIALOG *dlg)
Definition: dialog.c:124
int GWEN_Dialog_GetWidgetColumns(const GWEN_DIALOG *dlg, const char *name)
Definition: dialog.c:782
#define GWEN_LIST_INIT(t, element)
Definition: list1.h:465
int GWEN_Dialog_AddSubDialog(GWEN_DIALOG *dlg, const char *parentName, GWEN_DIALOG *subdlg)
Definition: dialog.c:322
#define GWEN_XML_FLAGS_HANDLE_HEADERS
Definition: xml.h:94
void GWEN_Dialog_AddMediaPathsFromPathManager(GWEN_DIALOG *dlg, const char *destlib, const char *pathName, const char *relPath)
Definition: dialog.c:208
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
Definition: db.c:160
void GWEN_Dialog_free(GWEN_DIALOG *dlg)
Definition: dialog.c:89
int GWEN_Dialog_ReadXmlFile(GWEN_DIALOG *dlg, const char *fname)
Definition: dialog.c:427
uint32_t GWEN_Dialog_GetGuiId(const GWEN_DIALOG *dlg)
Definition: dialog.c:144
#define GWEN_LIST_FUNCTIONS(t, pr)
Definition: list1.h:366
GWEN_DIALOG_GETINTPROPERTY_FN GWEN_Dialog_SetGetIntPropertyFn(GWEN_DIALOG *dlg, GWEN_DIALOG_GETINTPROPERTY_FN fn)
Definition: dialog.c:551
GWEN_STRINGLIST * GWEN_StringList_new(void)
Definition: stringlist.c:46
GWEN_DIALOG_GETCHARPROPERTY_FN GWEN_Dialog_SetGetCharPropertyFn(GWEN_DIALOG *dlg, GWEN_DIALOG_GETCHARPROPERTY_FN fn)
Definition: dialog.c:581
#define GWEN_LIST_FINI(t, element)
Definition: list1.h:474
const char * GWEN_Widget_GetText(const GWEN_WIDGET *w, int idx)
Definition: widget.c:293
#define GWEN_INHERIT_FUNCTIONS(t)
Definition: inherit.h:163
struct GWEN__XMLNODE GWEN_XMLNODE
Definition: xml.h:148
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition: buffer.c:1062
#define GWEN_ERROR_NOT_IMPLEMENTED
Definition: error.h:108