gwenhywfar  5.10.1
dialog.c
Go to the documentation of this file.
1 /***************************************************************************
2  begin : Wed Jan 20 2010
3  copyright : (C) 2019 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 #include <strings.h>
45 
46 
48 GWEN_LIST_FUNCTIONS(GWEN_DIALOG, GWEN_Dialog)
50 
51 
52 
53 
54 GWEN_DIALOG *GWEN_Dialog_new(const char *dialogId)
55 {
56  GWEN_DIALOG *dlg;
57  int rv;
58  GWEN_DB_NODE *db=NULL;
59 
61  dlg->refCount=1;
64 
65  if (dialogId && *dialogId)
66  dlg->dialogId=strdup(dialogId);
67 
68  dlg->i18nDomain=strdup(PACKAGE);
69 
70  dlg->widgets=GWEN_Widget_Tree_new();
71 
72  dlg->subDialogs=GWEN_Dialog_List_new();
73 
74  /* try to load preferences */
75  rv=GWEN_Gui_ReadDialogPrefs(dialogId, NULL, &db);
76  if (rv<0) {
77  DBG_WARN(GWEN_LOGDOMAIN, "Could not read dialog preferences (%d)", rv);
78  dlg->dbPreferences=GWEN_DB_Group_new("preferences");
79  }
80  else {
81  dlg->dbPreferences=db;
82  }
83  dlg->mediaPaths=GWEN_StringList_new();
84 
85  return dlg;
86 }
87 
88 
89 
91  const char *pmLibName,
92  const char *pmDataDir,
93  const char *fileName)
94 {
95  GWEN_DIALOG *dlg;
96  GWEN_BUFFER *fbuf;
97  int rv;
98 
99  assert(dialogId);
100  assert(pmLibName);
101  assert(pmDataDir);
102  assert(fileName);
103 
104  dlg=GWEN_Dialog_new(dialogId);
105  if (dlg==NULL) {
106  DBG_ERROR(GWEN_LOGDOMAIN, "Could not create dialog");
107  return NULL;
108  }
109 
110  /* get path of dialog description file */
111  fbuf=GWEN_Buffer_new(0, 256, 0, 1);
112  rv=GWEN_PathManager_FindFile(pmLibName, pmDataDir, fileName, fbuf);
113  if (rv<0) {
114  DBG_ERROR(GWEN_LOGDOMAIN, "Dialog description file not found (%d).", rv);
115  GWEN_Buffer_free(fbuf);
116  GWEN_Dialog_free(dlg);
117  return NULL;
118  }
119 
120  /* read dialog from dialog description file */
122  if (rv<0) {
123  DBG_INFO(GWEN_LOGDOMAIN, "here (%d).", rv);
124  GWEN_Buffer_free(fbuf);
125  GWEN_Dialog_free(dlg);
126  return NULL;
127  }
128  DBG_INFO(GWEN_LOGDOMAIN, "Dialog \"%s\" loaded from \"%s\"", dialogId, GWEN_Buffer_GetStart(fbuf));
129  GWEN_Buffer_free(fbuf);
130 
131  return dlg;
132 }
133 
134 
135 
136 
138 {
139  if (dlg) {
140  assert(dlg->refCount);
141 
142  if (dlg->refCount>1) {
143  dlg->refCount--;
144  }
145  else {
146  int rv;
147 
148  /* try to save preferences */
149  rv=GWEN_Gui_WriteDialogPrefs(dlg->dialogId, dlg->dbPreferences);
150  if (rv<0) {
151  DBG_WARN(GWEN_LOGDOMAIN, "Could not write dialog preferences (%d)", rv);
152  }
153 
156  GWEN_Widget_Tree_free(dlg->widgets);
157  free(dlg->dialogId);
158  free(dlg->i18nDomain);
159  dlg->refCount=0;
160  GWEN_Dialog_List_free(dlg->subDialogs);
161 
162  GWEN_DB_Group_free(dlg->dbPreferences);
163  GWEN_StringList_free(dlg->mediaPaths);
164 
165  GWEN_FREE_OBJECT(dlg);
166  }
167  }
168 }
169 
170 
171 
173 {
174  assert(dlg);
175  assert(dlg->refCount);
176 
177  return dlg->parentDialog;
178 }
179 
180 
181 
182 const char *GWEN_Dialog_GetId(const GWEN_DIALOG *dlg)
183 {
184  assert(dlg);
185  assert(dlg->refCount);
186 
187  return dlg->dialogId;
188 }
189 
190 
191 
192 uint32_t GWEN_Dialog_GetGuiId(const GWEN_DIALOG *dlg)
193 {
194  assert(dlg);
195  assert(dlg->refCount);
196 
197  return dlg->guiId;
198 }
199 
200 
201 
202 void GWEN_Dialog_SetGuiId(GWEN_DIALOG *dlg, uint32_t guiid)
203 {
204  assert(dlg);
205  assert(dlg->refCount);
206 
207  dlg->guiId=guiid;
208 }
209 
210 
211 
212 void GWEN_Dialog_SetI18nDomain(GWEN_DIALOG *dlg, const char *s)
213 {
214  assert(dlg);
215  assert(dlg->refCount);
216 
217  free(dlg->i18nDomain);
218  if (s)
219  dlg->i18nDomain=strdup(s);
220  else
221  dlg->i18nDomain=strdup(PACKAGE);
222 }
223 
224 
225 
226 const char *GWEN_Dialog_GetI18nDomain(const GWEN_DIALOG *dlg)
227 {
228  assert(dlg);
229  assert(dlg->refCount);
230 
231  return dlg->i18nDomain;
232 }
233 
234 
235 
236 const char *GWEN_Dialog_TranslateString(const GWEN_DIALOG *dlg, const char *s)
237 {
238  assert(dlg);
239  assert(dlg->refCount);
240 
241  return GWEN_I18N_Translate(dlg->i18nDomain, s);
242 }
243 
244 
245 
246 void GWEN_Dialog_AddMediaPath(GWEN_DIALOG *dlg, const char *s)
247 {
248  assert(dlg);
249  assert(dlg->refCount);
250 
251  GWEN_StringList_AppendString(dlg->mediaPaths, s, 0, 1);
252 }
253 
254 
255 
257  const char *destlib,
258  const char *pathName,
259  const char *relPath)
260 {
261  GWEN_STRINGLIST *sl;
262 
263  sl=GWEN_PathManager_GetPaths(destlib, pathName);
264  if (sl) {
267  if (se) {
268  GWEN_BUFFER *tbuf;
269 
270  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
271  while (se) {
272  const char *s;
273 
275  assert(s);
276  if (relPath) {
277  GWEN_Buffer_AppendString(tbuf, s);
279  GWEN_Buffer_AppendString(tbuf, relPath);
280  GWEN_StringList_AppendString(dlg->mediaPaths, GWEN_Buffer_GetStart(tbuf), 0, 1);
281  GWEN_Buffer_Reset(tbuf);
282  }
283  else
284  GWEN_StringList_AppendString(dlg->mediaPaths, s, 0, 1);
286  }
287  GWEN_Buffer_free(tbuf);
288  }
290  }
291 }
292 
293 
294 
296 {
297  assert(dlg);
298  assert(dlg->refCount);
299 
300  return dlg->mediaPaths;
301 }
302 
303 
304 
307 {
309 
310  assert(dlg);
311  assert(dlg->refCount);
312 
313  oh=dlg->signalHandler;
314  dlg->signalHandler=fn;
315 
316  return oh;
317 }
318 
319 
320 
323  const char *sender)
324 {
325  return GWEN_Dialog_EmitSignal2(dlg, t, sender, -1, NULL);
326 }
327 
328 
329 
332  const char *sender)
333 {
334  return GWEN_Dialog_EmitSignalToAll2(dlg, t, sender, -1, NULL);
335 }
336 
337 
338 
341 {
343 
344  assert(dlg);
345  assert(dlg->refCount);
346 
347  oh=dlg->signalHandler2;
348  dlg->signalHandler2=fn;
349 
350  return oh;
351 }
352 
353 
354 
357  const char *sender,
358  int intArg,
359  const char *stringArg)
360 {
361  assert(dlg);
362  assert(dlg->refCount);
363 
364  if (dlg->signalHandler2)
365  return (dlg->signalHandler2)(dlg, t, sender, intArg, stringArg);
366  else if (dlg->signalHandler)
367  return (dlg->signalHandler)(dlg, t, sender);
368  else {
369  DBG_WARN(GWEN_LOGDOMAIN, "No signal handler in dialog [%s]",
370  (dlg->dialogId)?(dlg->dialogId):"-unnamed-");
372  }
373 }
374 
375 
376 
379  const char *sender,
380  int intArg,
381  const char *stringArg)
382 {
383  int rv;
384  GWEN_DIALOG *subdlg;
385  int anyDialogHasHandledThisSignal=0;
386 
387  assert(dlg);
388  assert(dlg->refCount);
389 
390  subdlg=GWEN_Dialog_List_First(dlg->subDialogs);
391  while (subdlg) {
392  rv=GWEN_Dialog_EmitSignalToAll2(subdlg, t, sender, intArg, stringArg);
394  anyDialogHasHandledThisSignal=1;
397  return rv;
398  subdlg=GWEN_Dialog_List_Next(subdlg);
399  }
400 
401  if (dlg->signalHandler2) {
402  rv=(dlg->signalHandler2)(dlg, t, sender, intArg, stringArg);
404  anyDialogHasHandledThisSignal=1;
407  return rv;
408  }
409  else if (dlg->signalHandler) {
410  rv=(dlg->signalHandler)(dlg, t, sender);
412  anyDialogHasHandledThisSignal=1;
415  return rv;
416  }
417 
418  if (anyDialogHasHandledThisSignal)
420  else
422 }
423 
424 
425 
427  const char *parentName,
428  GWEN_DIALOG *subdlg)
429 {
430  GWEN_WIDGET *wparent;
431 
432  wparent=GWEN_Dialog_FindWidgetByName(dlg, parentName);
433  if (wparent) {
434  GWEN_WIDGET *subRoot;
435  GWEN_WIDGET *cw;
436 
437  /* move all widgets from the below sub dialog's root widget to the parent dialog */
438  subRoot=GWEN_Widget_Tree_GetFirst(subdlg->widgets);
439  if (subRoot) {
440  while ((cw=GWEN_Widget_Tree_GetFirstChild(subRoot))) {
441  if (subdlg->firstSubWidget==NULL)
442  subdlg->firstSubWidget=cw;
443  GWEN_Widget_Tree_Del(cw);
444  GWEN_Widget_Tree_AddChild(wparent, cw);
445  }
446  }
447 
448  /* store pointer to parent widget in dialog */
449  subdlg->parentWidget=wparent;
450 
451  /* store pointer to parent dialog in dialog */
452  subdlg->parentDialog=dlg;
453 
454  GWEN_Dialog_List_Add(subdlg, dlg->subDialogs);
455 
456  return 0;
457  }
458  else {
459  DBG_ERROR(GWEN_LOGDOMAIN, "Parent widget [%s] not found", parentName);
460  return GWEN_ERROR_NOT_FOUND;
461  }
462 }
463 
464 
465 
467  GWEN_WIDGET *wparent,
468  GWEN_XMLNODE *node)
469 {
470  GWEN_XMLNODE *n;
471  GWEN_WIDGET *w;
472  int rv;
473 
474  w=GWEN_Widget_new(dlg);
475  rv=GWEN_Widget_ReadXml(w, node);
476  if (rv<0) {
477  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
478  GWEN_Widget_free(w);
479  return rv;
480  }
481 
482  if (wparent)
483  GWEN_Widget_Tree_AddChild(wparent, w);
484  else
485  GWEN_Widget_Tree_Add(dlg->widgets, w);
486 
487 
488  n=GWEN_XMLNode_FindFirstTag(node, "widget", NULL, NULL);
489  while (n) {
490  int rv;
491 
492  rv=GWEN_Dialog__ReadXmlWidget(dlg, w, n);
493  if (rv<0)
494  return rv;
495  n=GWEN_XMLNode_FindNextTag(n, "widget", NULL, NULL);
496  }
497 
498  return 0;
499 }
500 
501 
502 
504 {
505  int rv;
506  const char *s;
507 
508  assert(dlg);
509  assert(dlg->refCount);
510 
511  assert(dlg->widgets);
512  GWEN_Widget_Tree_Clear(dlg->widgets);
513 
514  s=GWEN_XMLNode_GetProperty(node, "i18n", NULL);
515  if (s && *s)
517 
518  rv=GWEN_Dialog__ReadXmlWidget(dlg, NULL, node);
519  if (rv<0) {
520  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
521  GWEN_Widget_Tree_free(dlg->widgets);
522  dlg->widgets=NULL;
523  return rv;
524  }
525 
526  return 0;
527 }
528 
529 
530 
531 int GWEN_Dialog_ReadXmlFile(GWEN_DIALOG *dlg, const char *fname)
532 {
533  GWEN_XMLNODE *n;
534  GWEN_XMLNODE *nDialog;
535  int rv;
536 
538  rv=GWEN_XML_ReadFile(n, fname,
541  if (rv<0) {
542  DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv);
544  return rv;
545  }
546 
547  nDialog=GWEN_XMLNode_FindFirstTag(n, "dialog", NULL, NULL);
548  if (nDialog==NULL) {
549  DBG_ERROR(GWEN_LOGDOMAIN, "Dialog element not found in XML file [%s]", fname);
551  return rv;
552  }
553 
554  rv=GWEN_Dialog_ReadXml(dlg, nDialog);
555  if (rv<0) {
556  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
558  return rv;
559  }
560 
562  return 0;
563 }
564 
565 
566 
568 {
569  GWEN_WIDGET *w;
570 
571  assert(dlg);
572  assert(dlg->refCount);
573  assert(dlg->widgets);
574 
575 #if 0
576  if (dlg->parentWidget)
577  w=dlg->parentWidget;
578  else
579  w=GWEN_Widget_Tree_GetFirst(dlg->widgets);
580 #else
581  if (dlg->firstSubWidget)
582  w=dlg->firstSubWidget;
583  else {
584  w=GWEN_Widget_Tree_GetFirst(dlg->widgets);
585  /* empty name always corresponds to the root */
586  if (name==NULL || *name==0)
587  return w;
588  }
589 #endif
590 
591  while (w) {
592  const char *s;
593 
594  s=GWEN_Widget_GetName(w);
595  if (s && *s && strcasecmp(s, name)==0)
596  break;
597  w=GWEN_Widget_Tree_GetBelow(w);
598  }
599 
600  return w;
601 }
602 
603 
604 
605 GWEN_WIDGET *GWEN_Dialog_FindWidgetByImplData(const GWEN_DIALOG *dlg, int index, const void *ptr)
606 {
607  GWEN_WIDGET *w;
608 
609  assert(dlg);
610  assert(dlg->refCount);
611  assert(dlg->widgets);
612 
613  if (dlg->parentWidget)
614  w=dlg->parentWidget;
615  else
616  w=GWEN_Widget_Tree_GetFirst(dlg->widgets);
617 
618  while (w) {
619  if (ptr==GWEN_Widget_GetImplData(w, index))
620  break;
621  w=GWEN_Widget_Tree_GetBelow(w);
622  }
623 
624  return w;
625 }
626 
627 
628 
629 GWEN_WIDGET_TREE *GWEN_Dialog_GetWidgets(const GWEN_DIALOG *dlg)
630 {
631  assert(dlg);
632  assert(dlg->refCount);
633  assert(dlg->widgets);
634 
635  return dlg->widgets;
636 }
637 
638 
639 
642 {
644 
645  assert(dlg);
646  assert(dlg->refCount);
647 
648  oh=dlg->setIntPropertyFn;
649  dlg->setIntPropertyFn=fn;
650  return oh;
651 }
652 
653 
654 
657 {
659 
660  assert(dlg);
661  assert(dlg->refCount);
662 
663  oh=dlg->getIntPropertyFn;
664  dlg->getIntPropertyFn=fn;
665  return oh;
666 }
667 
668 
669 
672 {
674 
675  assert(dlg);
676  assert(dlg->refCount);
677 
678  oh=dlg->setCharPropertyFn;
679  dlg->setCharPropertyFn=fn;
680  return oh;
681 }
682 
683 
684 
687 {
689 
690  assert(dlg);
691  assert(dlg->refCount);
692 
693  oh=dlg->getCharPropertyFn;
694  dlg->getCharPropertyFn=fn;
695  return oh;
696 }
697 
698 
699 
700 
701 
702 
704  const char *name,
706  int index,
707  int value,
708  int doSignal)
709 {
710  GWEN_WIDGET *w;
711 
712  assert(dlg);
713  assert(dlg->refCount);
714 
715  w=GWEN_Dialog_FindWidgetByName(dlg, name);
716  if (w) {
717  if (dlg->setIntPropertyFn)
718  return dlg->setIntPropertyFn(dlg, w, prop, index, value, doSignal);
719  else if (dlg->parentDialog && dlg->parentDialog->setIntPropertyFn)
720  return dlg->parentDialog->setIntPropertyFn(dlg->parentDialog, w, prop, index, value, doSignal);
721  }
722  else {
723  DBG_ERROR(GWEN_LOGDOMAIN, "Widget [%s] not found", name);
724  return GWEN_ERROR_NOT_FOUND;
725  }
726 
727  DBG_ERROR(GWEN_LOGDOMAIN, "Function pointer not set");
729 }
730 
731 
732 
734  const char *name,
736  int index,
737  int defaultProperty)
738 {
739  GWEN_WIDGET *w;
740 
741  assert(dlg);
742  assert(dlg->refCount);
743 
744  w=GWEN_Dialog_FindWidgetByName(dlg, name);
745  if (w) {
746  if (dlg->getIntPropertyFn)
747  return dlg->getIntPropertyFn(dlg, w, prop, index, defaultProperty);
748  else if (dlg->parentDialog && dlg->parentDialog->getIntPropertyFn)
749  return dlg->parentDialog->getIntPropertyFn(dlg->parentDialog, w, prop, index, defaultProperty);
750  }
751  else {
752  DBG_ERROR(GWEN_LOGDOMAIN, "Widget [%s] not found", name);
753  return defaultProperty;
754  }
755 
756  DBG_ERROR(GWEN_LOGDOMAIN, "Function pointer not set");
757  return defaultProperty;
758 }
759 
760 
761 
763  const char *name,
765  int index,
766  const char *value,
767  int doSignal)
768 {
769  GWEN_WIDGET *w;
770 
771  assert(dlg);
772  assert(dlg->refCount);
773 
774  w=GWEN_Dialog_FindWidgetByName(dlg, name);
775  if (w) {
776  if (dlg->setCharPropertyFn)
777  return dlg->setCharPropertyFn(dlg, w, prop, index, value, doSignal);
778  else if (dlg->parentDialog && dlg->parentDialog->setCharPropertyFn)
779  return dlg->parentDialog->setCharPropertyFn(dlg->parentDialog, w, prop, index, value, doSignal);
780  }
781  else {
782  DBG_ERROR(GWEN_LOGDOMAIN, "Widget [%s] not found", name);
783  return GWEN_ERROR_NOT_FOUND;
784  }
785 
786  DBG_ERROR(GWEN_LOGDOMAIN, "Function pointer not set");
788 }
789 
790 
791 
793  const char *name,
795  int index,
796  const char *defaultProperty)
797 {
798  GWEN_WIDGET *w;
799 
800  assert(dlg);
801  assert(dlg->refCount);
802 
803  w=GWEN_Dialog_FindWidgetByName(dlg, name);
804  if (w) {
805  if (dlg->getCharPropertyFn)
806  return dlg->getCharPropertyFn(dlg, w, prop, index, defaultProperty);
807  else if (dlg->parentDialog && dlg->parentDialog->getCharPropertyFn)
808  return dlg->parentDialog->getCharPropertyFn(dlg->parentDialog, w, prop, index, defaultProperty);
809  }
810  else {
811  DBG_ERROR(GWEN_LOGDOMAIN, "Widget [%s] not found", name);
812  return defaultProperty;
813  }
814 
815  DBG_ERROR(GWEN_LOGDOMAIN, "Function pointer not set");
816  return defaultProperty;
817 }
818 
819 
820 
821 int GWEN_Dialog_RemoveWidget(GWEN_DIALOG *dlg, const char *name)
822 {
823  GWEN_WIDGET *w;
824 
825  w=GWEN_Dialog_FindWidgetByName(dlg, name);
826  if (w) {
827  GWEN_Widget_Tree_Del(w);
828  GWEN_Widget_free(w);
829  return 0;
830  }
831 
832  return GWEN_ERROR_NOT_FOUND;
833 }
834 
835 
836 uint32_t GWEN_Dialog_GetWidgetFlags(const GWEN_DIALOG *dlg, const char *name)
837 {
838  GWEN_WIDGET *w;
839 
840  w=GWEN_Dialog_FindWidgetByName(dlg, name);
841  if (w) {
842  return GWEN_Widget_GetFlags(w);
843  }
844 
845  return 0;
846 }
847 
848 
849 
850 void GWEN_Dialog_SetWidgetFlags(GWEN_DIALOG *dlg, const char *name, uint32_t fl)
851 {
852  GWEN_WIDGET *w;
853 
854  w=GWEN_Dialog_FindWidgetByName(dlg, name);
855  if (w) {
856  GWEN_Widget_SetFlags(w, fl);
857  }
858 }
859 
860 
861 
862 void GWEN_Dialog_AddWidgetFlags(GWEN_DIALOG *dlg, const char *name, uint32_t fl)
863 {
864  GWEN_WIDGET *w;
865 
866  w=GWEN_Dialog_FindWidgetByName(dlg, name);
867  if (w) {
868  GWEN_Widget_AddFlags(w, fl);
869  }
870 }
871 
872 
873 
874 void GWEN_Dialog_SubWidgetFlags(GWEN_DIALOG *dlg, const char *name, uint32_t fl)
875 {
876  GWEN_WIDGET *w;
877 
878  w=GWEN_Dialog_FindWidgetByName(dlg, name);
879  if (w) {
880  GWEN_Widget_SubFlags(w, fl);
881  }
882 }
883 
884 
885 
886 int GWEN_Dialog_GetWidgetColumns(const GWEN_DIALOG *dlg, const char *name)
887 {
888  GWEN_WIDGET *w;
889 
890  w=GWEN_Dialog_FindWidgetByName(dlg, name);
891  if (w) {
892  return GWEN_Widget_GetColumns(w);
893  }
894 
895  return -1;
896 }
897 
898 
899 
900 void GWEN_Dialog_SetWidgetColumns(GWEN_DIALOG *dlg, const char *name, int i)
901 {
902  GWEN_WIDGET *w;
903 
904  w=GWEN_Dialog_FindWidgetByName(dlg, name);
905  if (w) {
907  }
908 }
909 
910 
911 
912 int GWEN_Dialog_GetWidgetRows(const GWEN_DIALOG *dlg, const char *name)
913 {
914  GWEN_WIDGET *w;
915 
916  w=GWEN_Dialog_FindWidgetByName(dlg, name);
917  if (w) {
918  return GWEN_Widget_GetRows(w);
919  }
920 
921  return -1;
922 }
923 
924 
925 
926 void GWEN_Dialog_SetWidgetRows(GWEN_DIALOG *dlg, const char *name, int i)
927 {
928  GWEN_WIDGET *w;
929 
930  w=GWEN_Dialog_FindWidgetByName(dlg, name);
931  if (w) {
932  GWEN_Widget_SetRows(w, i);
933  }
934 }
935 
936 
937 
938 void GWEN_Dialog_SetWidgetText(GWEN_DIALOG *dlg, const char *name, const char *t)
939 {
940  GWEN_WIDGET *w;
941 
942  w=GWEN_Dialog_FindWidgetByName(dlg, name);
943  if (w) {
944  GWEN_Widget_SetText(w, 0, t);
945  }
946 }
947 
948 
949 
950 const char *GWEN_Dialog_GetWidgetText(const GWEN_DIALOG *dlg, const char *name)
951 {
952  GWEN_WIDGET *w;
953 
954  w=GWEN_Dialog_FindWidgetByName(dlg, name);
955  if (w) {
956  return GWEN_Widget_GetText(w, 0);
957  }
958 
959  return NULL;
960 }
961 
962 
963 
964 static void GWEN_Dialog_DumpWidget(const GWEN_WIDGET *w, FILE *f, unsigned int indent)
965 {
966  int i;
967  const char *s;
968  const char *dname=NULL;
969  GWEN_DIALOG *dlg;
970  const GWEN_WIDGET *c;
971 
972  for (i=0; i<indent; i++)
973  fprintf(f, " ");
974  s=GWEN_Widget_GetName(w);
975  dlg=GWEN_Widget_GetDialog(w);
976  if (dlg)
977  dname=GWEN_Dialog_GetId(dlg);
978 
979  fprintf(f, "Widget %s: %d [%s]\n", s?s:"unnamed", GWEN_Widget_GetType(w), dname?dname:"no dialog");
980  c=GWEN_Widget_Tree_GetFirstChild(w);
981  while (c) {
982  GWEN_Dialog_DumpWidget(c, f, indent+2);
983  c=GWEN_Widget_Tree_GetNext(c);
984  }
985 }
986 
987 
988 
989 void GWEN_Dialog_Dump(const GWEN_DIALOG *dlg, FILE *f, unsigned int indent)
990 {
991  GWEN_WIDGET *w;
992 
993  w=GWEN_Widget_Tree_GetFirst(dlg->widgets);
994  GWEN_Dialog_DumpWidget(w, f, indent);
995 }
996 
997 
998 
999 
1000 
1001 
1003 {
1004  assert(dlg);
1005  assert(dlg->refCount);
1006 
1007  return dlg->dbPreferences;
1008 }
1009 
1010 
1011 
1012 
1013 
1015  const char *widgetName,
1016  const char *variablePrefix,
1017  int maxColumns,
1018  int minColumnSize,
1019  GWEN_DB_NODE *dbPrefs)
1020 {
1021  GWEN_BUFFER *nameBuf;
1022  uint32_t posInBuffer;
1023  int i;
1024 
1025  nameBuf=GWEN_Buffer_new(0, 256, 0, 1);
1026  GWEN_Buffer_AppendString(nameBuf, variablePrefix);
1027  posInBuffer=GWEN_Buffer_GetPos(nameBuf);
1028 
1029  /* write column sizes */
1030  GWEN_Buffer_AppendString(nameBuf, "columns");
1031  GWEN_DB_DeleteVar(dbPrefs, GWEN_Buffer_GetStart(nameBuf));
1032  for (i=0; i<maxColumns; i++) {
1033  int j;
1034 
1035  j=GWEN_Dialog_GetIntProperty(dlg, "wiz_importer_list", GWEN_DialogProperty_ColumnWidth, i, -1);
1036  if (j<minColumnSize)
1037  j=minColumnSize;
1039  }
1040 
1041  /* determine column to sort by */
1042  GWEN_Buffer_Crop(nameBuf, 0, posInBuffer);
1043  GWEN_Buffer_AppendString(nameBuf, "sortbycolumn");
1045  for (i=0; i<maxColumns; i++) {
1046  int j;
1047 
1050 
1052 
1053  GWEN_Buffer_Crop(nameBuf, 0, posInBuffer);
1054  GWEN_Buffer_AppendString(nameBuf, "sortdir");
1055  GWEN_DB_SetIntValue(dbPrefs,
1057  GWEN_Buffer_GetStart(nameBuf),
1058  (j==GWEN_DialogSortDirection_Up)?1:0);
1059  break;
1060  }
1061  }
1062  GWEN_Buffer_free(nameBuf);
1063 }
1064 
1065 
1066 
1068  const char *widgetName,
1069  const char *variablePrefix,
1070  int maxColumns,
1071  int minColumnSize,
1072  GWEN_DB_NODE *dbPrefs)
1073 {
1074  GWEN_BUFFER *nameBuf;
1075  uint32_t posInBuffer;
1076  int i;
1077  int j;
1078 
1079  nameBuf=GWEN_Buffer_new(0, 256, 0, 1);
1080  GWEN_Buffer_AppendString(nameBuf, variablePrefix);
1081  posInBuffer=GWEN_Buffer_GetPos(nameBuf);
1082 
1083  /* read column sizes */
1084  GWEN_Buffer_AppendString(nameBuf, "columns");
1085  for (i=0; i<maxColumns; i++) {
1086  j=GWEN_DB_GetIntValue(dbPrefs, GWEN_Buffer_GetStart(nameBuf), i, -1);
1087  if (j<minColumnSize)
1088  j=minColumnSize;
1090  }
1091 
1092  /* determine column to sort by */
1093  GWEN_Buffer_Crop(nameBuf, 0, posInBuffer);
1094  GWEN_Buffer_AppendString(nameBuf, "sortbycolumn");
1095  i=GWEN_DB_GetIntValue(dbPrefs, GWEN_Buffer_GetStart(nameBuf), 0, -1);
1096  GWEN_Buffer_Crop(nameBuf, 0, posInBuffer);
1097  GWEN_Buffer_AppendString(nameBuf, "sortdir");
1098  j=GWEN_DB_GetIntValue(dbPrefs, GWEN_Buffer_GetStart(nameBuf), 0, -1);
1099  if (i>=0 && j>=0)
1101  GWEN_Buffer_free(nameBuf);
1102 }
1103 
1104 
1105 
1106 char *GWEN_Dialog_ListGetFirstColumnData(GWEN_DIALOG *dlg, const char *widgetName, int row)
1107 {
1108  const char *s;
1109 
1111  if (s && *s) {
1112  const char *p;
1113 
1114  p=strchr(s, '\t');
1115  if (p) {
1116  int len;
1117 
1118  len=(int)(p-s);
1119  if (len) {
1120  char *res;
1121 
1122  res=(char *) malloc(len+1);
1123  assert(res);
1124  memmove(res, s, len);
1125  res[len]=0;
1126  return res;
1127  }
1128  }
1129  else
1130  /* no tab, use the whole line */
1131  return strdup(s);
1132  }
1133 
1134  return NULL;
1135 }
1136 
1137 
1138 
1139 int GWEN_Dialog_ListGetItemMatchingFirstColumn(GWEN_DIALOG *dlg, const char *widgetName, const char *dataToMatch)
1140 {
1141  if (dataToMatch) {
1142  int idx;
1143  int lengthOfDataToMatch;
1144 
1145  lengthOfDataToMatch=strlen(dataToMatch);
1146  for (idx=0; ; idx++) {
1147  const char *s;
1148 
1150  if (s && *s) {
1151  const char *p;
1152 
1153  p=strchr(s, '\t');
1154  if (p) {
1155  int len;
1156 
1157  len=(int)(p-s);
1158  if (len && len==lengthOfDataToMatch && strncasecmp(s, dataToMatch, len)==0)
1159  return idx;
1160  }
1161  else if (strcasecmp(s, dataToMatch)==0)
1162  return idx;
1163  }
1164  else
1165  break;
1166  }
1167  }
1168 
1169  return -1;
1170 }
1171 
1172 
1173 
1174 
1175 
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:900
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:235
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
Definition: stringlist.h:53
#define GWEN_DB_FLAGS_OVERWRITE_VARS
Definition: db.h:121
#define GWEN_LIST2_FUNCTIONS(t, pr)
Definition: list2.h:99
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:117
void GWEN_DB_Group_free(GWEN_DB_NODE *n)
Definition: db.c:421
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:794
static void GWEN_Dialog_DumpWidget(const GWEN_WIDGET *w, FILE *f, unsigned int indent)
Definition: dialog.c:964
GWEN_WIDGET_TREE * GWEN_Dialog_GetWidgets(const GWEN_DIALOG *dlg)
Definition: dialog.c:629
GWEN_DIALOG_SETINTPROPERTY_FN GWEN_Dialog_SetSetIntPropertyFn(GWEN_DIALOG *dlg, GWEN_DIALOG_SETINTPROPERTY_FN fn)
Definition: dialog.c:640
GWEN_DIALOG * GWEN_Dialog_List_First(const GWEN_DIALOG_LIST *l)
GWEN_DIALOG_PROPERTY
Definition: dialog.h:260
#define GWEN_FREE_OBJECT(varname)
Definition: memory.h:61
#define NULL
Definition: binreloc.c:300
int GWEN_Dialog_RemoveWidget(GWEN_DIALOG *dlg, const char *name)
Definition: dialog.c:821
void GWEN_Widget_SetFlags(GWEN_WIDGET *w, uint32_t fl)
Definition: widget.c:158
GWENHYWFAR_API int GWEN_XML_ReadFile(GWEN_XMLNODE *n, const char *filepath, uint32_t flags)
Definition: xmlrw.c:1297
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:862
uint32_t GWEN_Widget_GetFlags(const GWEN_WIDGET *w)
Definition: widget.c:149
GWEN_DIALOG_EVENTTYPE
Definition: dialog.h:98
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:125
int GWEN_Dialog_EmitSignalToAll2(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender, int intArg, const char *stringArg)
Definition: dialog.c:377
const char * GWEN_Dialog_TranslateString(const GWEN_DIALOG *dlg, const char *s)
Definition: dialog.c:236
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:305
#define GWEN_LOGDOMAIN
Definition: logger.h:35
GWEN_DB_NODE * GWEN_Dialog_GetPreferences(const GWEN_DIALOG *dlg)
Definition: dialog.c:1002
uint32_t GWEN_Buffer_GetPos(const GWEN_BUFFER *bf)
Definition: buffer.c:253
GWEN_XMLNODE * GWEN_XMLNode_new(GWEN_XMLNODE_TYPE t, const char *data)
Definition: xml.c:144
int GWEN_Dialog_EmitSignal2(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender, int intArg, const char *stringArg)
Definition: dialog.c:355
uint32_t GWEN_Dialog_GetWidgetFlags(const GWEN_DIALOG *dlg, const char *name)
Definition: dialog.c:836
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
Definition: buffer.c:42
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:390
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
Definition: buffer.c:650
const char * GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se)
Definition: stringlist.c:406
int GWEN_Dialog__ReadXmlWidget(GWEN_DIALOG *dlg, GWEN_WIDGET *wparent, GWEN_XMLNODE *node)
Definition: dialog.c:466
const char * GWEN_Dialog_GetId(const GWEN_DIALOG *dlg)
Definition: dialog.c:182
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:938
int GWENHYWFAR_CB(* GWEN_DIALOG_SIGNALHANDLER2)(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender, int intArg, const char *stringArg)
Definition: dialog.h:140
GWEN_WIDGET * GWEN_Dialog_FindWidgetByName(const GWEN_DIALOG *dlg, const char *name)
Definition: dialog.c:567
void GWEN_Dialog_ListReadColumnSettings(GWEN_DIALOG *dlg, const char *widgetName, const char *variablePrefix, int maxColumns, int minColumnSize, GWEN_DB_NODE *dbPrefs)
Definition: dialog.c:1067
void GWEN_Dialog_ListWriteColumnSettings(GWEN_DIALOG *dlg, const char *widgetName, const char *variablePrefix, int maxColumns, int minColumnSize, GWEN_DB_NODE *dbPrefs)
Definition: dialog.c:1014
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
Definition: stringlist.c:62
GWEN_XMLNODE * GWEN_XMLNode_FindFirstTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
Definition: xml.c:776
GWEN_WIDGET * GWEN_Dialog_FindWidgetByImplData(const GWEN_DIALOG *dlg, int index, const void *ptr)
Definition: dialog.c:605
void GWEN_Dialog_SetWidgetRows(GWEN_DIALOG *dlg, const char *name, int i)
Definition: dialog.c:926
#define GWEN_NEW_OBJECT(typ, varname)
Definition: memory.h:55
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:245
int GWEN_Dialog_GetIntProperty(GWEN_DIALOG *dlg, const char *name, GWEN_DIALOG_PROPERTY prop, int index, int defaultProperty)
Definition: dialog.c:733
int GWEN_Dialog_EmitSignalToAll(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender)
Definition: dialog.c:330
void GWEN_Dialog_SetI18nDomain(GWEN_DIALOG *dlg, const char *s)
Definition: dialog.c:212
GWENHYWFAR_API int GWEN_Gui_WriteDialogPrefs(const char *groupName, GWEN_DB_NODE *db)
Definition: gui_virtual.c:639
void GWEN_Dialog_SetWidgetFlags(GWEN_DIALOG *dlg, const char *name, uint32_t fl)
Definition: dialog.c:850
GWEN_STRINGLIST * GWEN_Dialog_GetMediaPaths(const GWEN_DIALOG *dlg)
Definition: dialog.c:295
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
Definition: stringlist.h:56
void GWEN_Dialog_SetGuiId(GWEN_DIALOG *dlg, uint32_t guiid)
Definition: dialog.c:202
int GWENHYWFAR_CB(* GWEN_DIALOG_SIGNALHANDLER)(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender)
Definition: dialog.h:132
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:670
void GWEN_Buffer_free(GWEN_BUFFER *bf)
Definition: buffer.c:89
int GWEN_DB_DeleteVar(GWEN_DB_NODE *n, const char *path)
Definition: db.c:899
void GWEN_XMLNode_free(GWEN_XMLNODE *n)
Definition: xml.c:160
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:38
void GWEN_Dialog_Dump(const GWEN_DIALOG *dlg, FILE *f, unsigned int indent)
Definition: dialog.c:989
GWEN_DIALOG_LIST * GWEN_Dialog_List_new()
const char * GWEN_Dialog_GetI18nDomain(const GWEN_DIALOG *dlg)
Definition: dialog.c:226
int GWEN_Buffer_Crop(GWEN_BUFFER *bf, uint32_t pos, uint32_t l)
Definition: buffer.c:947
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:321
#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:792
int GWEN_Dialog_SetIntProperty(GWEN_DIALOG *dlg, const char *name, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal)
Definition: dialog.c:703
int GWEN_Widget_ReadXml(GWEN_WIDGET *w, GWEN_XMLNODE *node)
Definition: widget.c:604
int GWEN_Dialog_ReadXml(GWEN_DIALOG *dlg, GWEN_XMLNODE *node)
Definition: dialog.c:503
GWEN_DIALOG * GWEN_Dialog_new(const char *dialogId)
Definition: dialog.c:54
GWEN_STRINGLISTENTRY * GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se)
Definition: stringlist.c:398
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:762
#define GWEN_ERROR_NOT_FOUND
Definition: error.h:89
const char * GWEN_I18N_Translate(const char *txtdom, const char *text)
Definition: i18n.c:255
void GWEN_Dialog_AddMediaPath(GWEN_DIALOG *dlg, const char *s)
Definition: dialog.c:246
int GWEN_Dialog_GetWidgetRows(const GWEN_DIALOG *dlg, const char *name)
Definition: dialog.c:912
const char * GWEN_Dialog_GetWidgetText(const GWEN_DIALOG *dlg, const char *name)
Definition: dialog.c:950
#define DBG_INFO(dbg_logger, format, args...)
Definition: debug.h:181
void GWEN_Dialog_SubWidgetFlags(GWEN_DIALOG *dlg, const char *name, uint32_t fl)
Definition: dialog.c:874
int GWEN_Dialog_ListGetItemMatchingFirstColumn(GWEN_DIALOG *dlg, const char *widgetName, const char *dataToMatch)
Definition: dialog.c:1139
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:172
int GWEN_Dialog_GetWidgetColumns(const GWEN_DIALOG *dlg, const char *name)
Definition: dialog.c:886
#define GWEN_LIST_INIT(t, element)
Definition: list1.h:465
char * GWEN_Dialog_ListGetFirstColumnData(GWEN_DIALOG *dlg, const char *widgetName, int row)
Definition: dialog.c:1106
int GWEN_Dialog_AddSubDialog(GWEN_DIALOG *dlg, const char *parentName, GWEN_DIALOG *subdlg)
Definition: dialog.c:426
int GWEN_DB_GetIntValue(GWEN_DB_NODE *n, const char *path, int idx, int defVal)
Definition: db.c:1163
#define GWEN_XML_FLAGS_HANDLE_HEADERS
Definition: xml.h:94
GWENHYWFAR_API int GWEN_Gui_ReadDialogPrefs(const char *groupName, const char *altName, GWEN_DB_NODE **pDb)
Definition: gui_virtual.c:625
void GWEN_Dialog_AddMediaPathsFromPathManager(GWEN_DIALOG *dlg, const char *destlib, const char *pathName, const char *relPath)
Definition: dialog.c:256
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
Definition: db.c:173
void GWEN_Dialog_free(GWEN_DIALOG *dlg)
Definition: dialog.c:137
int GWEN_Dialog_ReadXmlFile(GWEN_DIALOG *dlg, const char *fname)
Definition: dialog.c:531
uint32_t GWEN_Dialog_GetGuiId(const GWEN_DIALOG *dlg)
Definition: dialog.c:192
int GWEN_DB_SetIntValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, int val)
Definition: db.c:1202
#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:655
int GWEN_PathManager_FindFile(const char *destLib, const char *pathName, const char *fileName, GWEN_BUFFER *fbuf)
Definition: pathmanager.c:541
GWEN_DIALOG_SIGNALHANDLER2 GWEN_Dialog_SetSignalHandler2(GWEN_DIALOG *dlg, GWEN_DIALOG_SIGNALHANDLER2 fn)
Definition: dialog.c:339
GWEN_STRINGLIST * GWEN_StringList_new(void)
Definition: stringlist.c:50
GWEN_DIALOG_GETCHARPROPERTY_FN GWEN_Dialog_SetGetCharPropertyFn(GWEN_DIALOG *dlg, GWEN_DIALOG_GETCHARPROPERTY_FN fn)
Definition: dialog.c:685
GWEN_DIALOG * GWEN_Dialog_CreateAndLoadWithPath(const char *dialogId, const char *pmLibName, const char *pmDataDir, const char *fileName)
Definition: dialog.c:90
#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:156
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition: buffer.c:989
#define GWEN_DB_FLAGS_DEFAULT
Definition: db.h:168
#define GWEN_ERROR_NOT_IMPLEMENTED
Definition: error.h:108