30#define DISABLE_DEBUGLOG
37#include <gwenhywfar/text.h>
38#include <gwenhywfar/pathmanager.h>
39#include <gwenhywfar/debug.h>
40#include <gwenhywfar/i18n.h>
65 if (dialogId && *dialogId)
66 dlg->dialogId=strdup(dialogId);
68 dlg->i18nDomain=strdup(PACKAGE);
70 dlg->widgets=GWEN_Widget_Tree_new();
81 dlg->dbPreferences=db;
91 const char *pmLibName,
92 const char *pmDataDir,
140 assert(dlg->refCount);
142 if (dlg->refCount>1) {
156 GWEN_Widget_Tree_free(dlg->widgets);
158 free(dlg->i18nDomain);
175 assert(dlg->refCount);
177 return dlg->parentDialog;
185 assert(dlg->refCount);
187 return dlg->dialogId;
195 assert(dlg->refCount);
205 assert(dlg->refCount);
215 assert(dlg->refCount);
217 free(dlg->i18nDomain);
219 dlg->i18nDomain=strdup(s);
221 dlg->i18nDomain=strdup(PACKAGE);
229 assert(dlg->refCount);
231 return dlg->i18nDomain;
239 assert(dlg->refCount);
249 assert(dlg->refCount);
258 const char *pathName,
298 assert(dlg->refCount);
300 return dlg->mediaPaths;
311 assert(dlg->refCount);
313 oh=dlg->signalHandler;
314 dlg->signalHandler=fn;
345 assert(dlg->refCount);
347 oh=dlg->signalHandler2;
348 dlg->signalHandler2=fn;
359 const char *stringArg)
362 assert(dlg->refCount);
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);
370 (dlg->dialogId)?(dlg->dialogId):
"-unnamed-");
381 const char *stringArg)
385 int anyDialogHasHandledThisSignal=0;
388 assert(dlg->refCount);
394 anyDialogHasHandledThisSignal=1;
401 if (dlg->signalHandler2) {
402 rv=(dlg->signalHandler2)(dlg, t, sender, intArg, stringArg);
404 anyDialogHasHandledThisSignal=1;
409 else if (dlg->signalHandler) {
410 rv=(dlg->signalHandler)(dlg, t, sender);
412 anyDialogHasHandledThisSignal=1;
418 if (anyDialogHasHandledThisSignal)
427 const char *parentName,
438 subRoot=GWEN_Widget_Tree_GetFirst(subdlg->widgets);
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);
449 subdlg->parentWidget=wparent;
452 subdlg->parentDialog=dlg;
483 GWEN_Widget_Tree_AddChild(wparent, w);
485 GWEN_Widget_Tree_Add(dlg->widgets, w);
509 assert(dlg->refCount);
511 assert(dlg->widgets);
512 GWEN_Widget_Tree_Clear(dlg->widgets);
521 GWEN_Widget_Tree_free(dlg->widgets);
572 assert(dlg->refCount);
573 assert(dlg->widgets);
576 if (dlg->parentWidget)
579 w=GWEN_Widget_Tree_GetFirst(dlg->widgets);
581 if (dlg->firstSubWidget)
582 w=dlg->firstSubWidget;
584 w=GWEN_Widget_Tree_GetFirst(dlg->widgets);
586 if (name==
NULL || *name==0)
595 if (s && *s && strcasecmp(s, name)==0)
597 w=GWEN_Widget_Tree_GetBelow(w);
610 assert(dlg->refCount);
611 assert(dlg->widgets);
613 if (dlg->parentWidget)
616 w=GWEN_Widget_Tree_GetFirst(dlg->widgets);
621 w=GWEN_Widget_Tree_GetBelow(w);
632 assert(dlg->refCount);
633 assert(dlg->widgets);
646 assert(dlg->refCount);
648 oh=dlg->setIntPropertyFn;
649 dlg->setIntPropertyFn=fn;
661 assert(dlg->refCount);
663 oh=dlg->getIntPropertyFn;
664 dlg->getIntPropertyFn=fn;
676 assert(dlg->refCount);
678 oh=dlg->setCharPropertyFn;
679 dlg->setCharPropertyFn=fn;
691 assert(dlg->refCount);
693 oh=dlg->getCharPropertyFn;
694 dlg->getCharPropertyFn=fn;
713 assert(dlg->refCount);
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);
742 assert(dlg->refCount);
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);
753 return defaultProperty;
757 return defaultProperty;
772 assert(dlg->refCount);
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);
796 const char *defaultProperty)
801 assert(dlg->refCount);
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);
812 return defaultProperty;
816 return defaultProperty;
827 GWEN_Widget_Tree_Del(w);
968 const char *dname=
NULL;
972 for (i=0; i<indent; i++)
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);
983 c=GWEN_Widget_Tree_GetNext(c);
993 w=GWEN_Widget_Tree_GetFirst(dlg->widgets);
1005 assert(dlg->refCount);
1007 return dlg->dbPreferences;
1015 const char *widgetName,
1016 const char *variablePrefix,
1022 uint32_t posInBuffer;
1032 for (i=0; i<maxColumns; i++) {
1036 if (j<minColumnSize)
1045 for (i=0; i<maxColumns; i++) {
1068 const char *widgetName,
1069 const char *variablePrefix,
1075 uint32_t posInBuffer;
1085 for (i=0; i<maxColumns; i++) {
1087 if (j<minColumnSize)
1122 res=(
char *) malloc(len+1);
1124 memmove(res, s, len);
1143 int lengthOfDataToMatch;
1145 lengthOfDataToMatch=strlen(dataToMatch);
1146 for (idx=0; ; idx++) {
1158 if (len && len==lengthOfDataToMatch && strncasecmp(s, dataToMatch, len)==0)
1161 else if (strcasecmp(s, dataToMatch)==0)
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
uint32_t GWEN_Buffer_GetPos(const GWEN_BUFFER *bf)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
int GWEN_Buffer_Crop(GWEN_BUFFER *bf, uint32_t pos, uint32_t l)
int GWEN_DB_DeleteVar(GWEN_DB_NODE *n, const char *path)
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
int GWEN_DB_SetIntValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, int val)
int GWEN_DB_GetIntValue(GWEN_DB_NODE *n, const char *path, int idx, int defVal)
void GWEN_DB_Group_free(GWEN_DB_NODE *n)
#define GWEN_DB_FLAGS_DEFAULT
#define GWEN_DB_FLAGS_OVERWRITE_VARS
struct GWEN_DB_NODE GWEN_DB_NODE
#define DBG_WARN(dbg_logger, format, args...)
#define DBG_INFO(dbg_logger, format, args...)
#define DBG_ERROR(dbg_logger, format, args...)
void GWEN_Dialog_SetWidgetRows(GWEN_DIALOG *dlg, const char *name, int i)
int GWEN_Dialog_ReadXml(GWEN_DIALOG *dlg, GWEN_XMLNODE *node)
int GWEN_Dialog_ListGetItemMatchingFirstColumn(GWEN_DIALOG *dlg, const char *widgetName, const char *dataToMatch)
int GWEN_Dialog_EmitSignalToAll2(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender, int intArg, const char *stringArg)
const char * GWEN_Dialog_GetWidgetText(const GWEN_DIALOG *dlg, const char *name)
GWEN_WIDGET * GWEN_Dialog_FindWidgetByName(const GWEN_DIALOG *dlg, const char *name)
void GWEN_Dialog_SetWidgetFlags(GWEN_DIALOG *dlg, const char *name, uint32_t fl)
GWEN_WIDGET_TREE * GWEN_Dialog_GetWidgets(const GWEN_DIALOG *dlg)
GWEN_WIDGET * GWEN_Dialog_FindWidgetByImplData(const GWEN_DIALOG *dlg, int index, const void *ptr)
void GWEN_Dialog_SetWidgetText(GWEN_DIALOG *dlg, const char *name, const char *t)
GWEN_DIALOG_SIGNALHANDLER2 GWEN_Dialog_SetSignalHandler2(GWEN_DIALOG *dlg, GWEN_DIALOG_SIGNALHANDLER2 fn)
GWEN_DIALOG_GETINTPROPERTY_FN GWEN_Dialog_SetGetIntPropertyFn(GWEN_DIALOG *dlg, GWEN_DIALOG_GETINTPROPERTY_FN fn)
const char * GWEN_Dialog_GetI18nDomain(const GWEN_DIALOG *dlg)
GWEN_STRINGLIST * GWEN_Dialog_GetMediaPaths(const GWEN_DIALOG *dlg)
const char * GWEN_Dialog_GetId(const GWEN_DIALOG *dlg)
int GWEN_Dialog_SetIntProperty(GWEN_DIALOG *dlg, const char *name, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal)
GWEN_DIALOG_SIGNALHANDLER GWEN_Dialog_SetSignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_SIGNALHANDLER fn)
void GWEN_Dialog_SetWidgetColumns(GWEN_DIALOG *dlg, const char *name, int i)
int GWEN_Dialog_RemoveWidget(GWEN_DIALOG *dlg, const char *name)
GWEN_DIALOG * GWEN_Dialog_GetParentDialog(const GWEN_DIALOG *dlg)
GWEN_DIALOG_SETINTPROPERTY_FN GWEN_Dialog_SetSetIntPropertyFn(GWEN_DIALOG *dlg, GWEN_DIALOG_SETINTPROPERTY_FN fn)
static void GWEN_Dialog_DumpWidget(const GWEN_WIDGET *w, FILE *f, unsigned int indent)
GWEN_DIALOG_GETCHARPROPERTY_FN GWEN_Dialog_SetGetCharPropertyFn(GWEN_DIALOG *dlg, GWEN_DIALOG_GETCHARPROPERTY_FN fn)
int GWEN_Dialog_SetCharProperty(GWEN_DIALOG *dlg, const char *name, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal)
void GWEN_Dialog_AddMediaPath(GWEN_DIALOG *dlg, const char *s)
void GWEN_Dialog_AddWidgetFlags(GWEN_DIALOG *dlg, const char *name, uint32_t fl)
uint32_t GWEN_Dialog_GetWidgetFlags(const GWEN_DIALOG *dlg, const char *name)
int GWEN_Dialog_GetWidgetRows(const GWEN_DIALOG *dlg, const char *name)
void GWEN_Dialog_SetGuiId(GWEN_DIALOG *dlg, uint32_t guiid)
void GWEN_Dialog_ListWriteColumnSettings(GWEN_DIALOG *dlg, const char *widgetName, const char *variablePrefix, int maxColumns, int minColumnSize, GWEN_DB_NODE *dbPrefs)
GWEN_DIALOG * GWEN_Dialog_CreateAndLoadWithPath(const char *dialogId, const char *pmLibName, const char *pmDataDir, const char *fileName)
int GWEN_Dialog__ReadXmlWidget(GWEN_DIALOG *dlg, GWEN_WIDGET *wparent, GWEN_XMLNODE *node)
int GWEN_Dialog_EmitSignal2(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender, int intArg, const char *stringArg)
void GWEN_Dialog_ListReadColumnSettings(GWEN_DIALOG *dlg, const char *widgetName, const char *variablePrefix, int maxColumns, int minColumnSize, GWEN_DB_NODE *dbPrefs)
int GWEN_Dialog_GetWidgetColumns(const GWEN_DIALOG *dlg, const char *name)
GWEN_DB_NODE * GWEN_Dialog_GetPreferences(const GWEN_DIALOG *dlg)
uint32_t GWEN_Dialog_GetGuiId(const GWEN_DIALOG *dlg)
void GWEN_Dialog_AddMediaPathsFromPathManager(GWEN_DIALOG *dlg, const char *destlib, const char *pathName, const char *relPath)
void GWEN_Dialog_free(GWEN_DIALOG *dlg)
void GWEN_Dialog_SetI18nDomain(GWEN_DIALOG *dlg, const char *s)
GWEN_DIALOG * GWEN_Dialog_new(const char *dialogId)
int GWEN_Dialog_EmitSignalToAll(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender)
void GWEN_Dialog_SubWidgetFlags(GWEN_DIALOG *dlg, const char *name, uint32_t fl)
GWEN_DIALOG_SETCHARPROPERTY_FN GWEN_Dialog_SetSetCharPropertyFn(GWEN_DIALOG *dlg, GWEN_DIALOG_SETCHARPROPERTY_FN fn)
int GWEN_Dialog_GetIntProperty(GWEN_DIALOG *dlg, const char *name, GWEN_DIALOG_PROPERTY prop, int index, int defaultProperty)
int GWEN_Dialog_AddSubDialog(GWEN_DIALOG *dlg, const char *parentName, GWEN_DIALOG *subdlg)
int GWEN_Dialog_ReadXmlFile(GWEN_DIALOG *dlg, const char *fname)
const char * GWEN_Dialog_GetCharProperty(GWEN_DIALOG *dlg, const char *name, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultProperty)
char * GWEN_Dialog_ListGetFirstColumnData(GWEN_DIALOG *dlg, const char *widgetName, int row)
const char * GWEN_Dialog_TranslateString(const GWEN_DIALOG *dlg, const char *s)
void GWEN_Dialog_Dump(const GWEN_DIALOG *dlg, FILE *f, unsigned int indent)
int GWEN_Dialog_EmitSignal(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender)
int GWENHYWFAR_CB(* GWEN_DIALOG_SIGNALHANDLER2)(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender, int intArg, const char *stringArg)
@ GWEN_DialogEvent_ResultHandled
@ GWEN_DialogEvent_ResultNotHandled
@ GWEN_DialogSortDirection_None
@ GWEN_DialogSortDirection_Up
struct GWEN_DIALOG GWEN_DIALOG
@ GWEN_DialogProperty_ColumnWidth
@ GWEN_DialogProperty_SortDirection
@ GWEN_DialogProperty_Value
int GWENHYWFAR_CB(* GWEN_DIALOG_SIGNALHANDLER)(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender)
const char *GWENHYWFAR_CB(* GWEN_DIALOG_GETCHARPROPERTY_FN)(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue)
int GWENHYWFAR_CB(* GWEN_DIALOG_GETINTPROPERTY_FN)(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue)
int GWENHYWFAR_CB(* GWEN_DIALOG_SETCHARPROPERTY_FN)(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal)
int GWENHYWFAR_CB(* GWEN_DIALOG_SETINTPROPERTY_FN)(GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal)
#define GWEN_ERROR_NOT_IMPLEMENTED
#define GWEN_ERROR_NOT_FOUND
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
GWENHYWFAR_API int GWEN_Gui_WriteDialogPrefs(const char *groupName, GWEN_DB_NODE *db)
GWENHYWFAR_API int GWEN_Gui_ReadDialogPrefs(const char *groupName, const char *altName, GWEN_DB_NODE **pDb)
#define GWEN_DIR_SEPARATOR_S
const char * GWEN_I18N_Translate(const char *txtdom, const char *text)
#define GWEN_INHERIT_FUNCTIONS(t)
#define GWEN_INHERIT_INIT(t, element)
#define GWEN_INHERIT_FINI(t, element)
#define GWEN_LIST_FINI(t, element)
#define GWEN_LIST_FUNCTIONS(t, pr)
#define GWEN_LIST_INIT(t, element)
#define GWEN_LIST2_FUNCTIONS(t, pr)
GWEN_DIALOG * GWEN_Dialog_List_First(const GWEN_DIALOG_LIST *l)
GWEN_DIALOG_LIST * GWEN_Dialog_List_new()
void GWEN_Dialog_List_Add(GWEN_DIALOG *element, GWEN_DIALOG_LIST *list)
void GWEN_Dialog_List_free(GWEN_DIALOG_LIST *l)
GWEN_DIALOG * GWEN_Dialog_List_Next(const GWEN_DIALOG *element)
#define GWEN_FREE_OBJECT(varname)
#define GWEN_NEW_OBJECT(typ, varname)
GWEN_STRINGLIST * GWEN_PathManager_GetPaths(const char *destLib, const char *pathName)
int GWEN_PathManager_FindFile(const char *destLib, const char *pathName, const char *fileName, GWEN_BUFFER *fbuf)
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
const char * GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se)
GWEN_STRINGLISTENTRY * GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se)
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
GWEN_STRINGLIST * GWEN_StringList_new(void)
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
const char * GWEN_XMLNode_GetProperty(const GWEN_XMLNODE *n, const char *name, const char *defaultValue)
GWEN_XMLNODE * GWEN_XMLNode_FindFirstTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
GWEN_XMLNODE * GWEN_XMLNode_new(GWEN_XMLNODE_TYPE t, const char *data)
GWEN_XMLNODE * GWEN_XMLNode_FindNextTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
void GWEN_XMLNode_free(GWEN_XMLNODE *n)
#define GWEN_XML_FLAGS_HANDLE_HEADERS
struct GWEN__XMLNODE GWEN_XMLNODE
#define GWEN_XML_FLAGS_DEFAULT
GWENHYWFAR_API int GWEN_XML_ReadFile(GWEN_XMLNODE *n, const char *filepath, uint32_t flags)