static void AB_SetupDialog_ActivateProviders(GWEN_DIALOG *dlg) { AB_SETUP_DIALOG *xdlg; GWEN_PLUGIN_DESCRIPTION_LIST2 *pdl; assert(dlg); xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, AB_SETUP_DIALOG, dlg); assert(xdlg); if (xdlg->providersInUse) AB_Provider_List2_free(xdlg->providersInUse); xdlg->providersInUse=AB_Provider_List2_new(); pdl=AB_Banking_GetProviderDescrs(xdlg->banking); if (pdl) { GWEN_PLUGIN_DESCRIPTION_LIST2_ITERATOR *it; it=GWEN_PluginDescription_List2_First(pdl); if (it) { GWEN_PLUGIN_DESCRIPTION *pd; pd=GWEN_PluginDescription_List2Iterator_Data(it); while (pd) { const char *pName; pName=GWEN_PluginDescription_GetName(pd); if (pName && *pName) { AB_PROVIDER *pro; pro=AB_Banking_BeginUseProvider(xdlg->banking, pName); if (pro) { DBG_INFO(AQBANKING_LOGDOMAIN, "Adding provider %s", pName); AB_Provider_List2_PushBack(xdlg->providersInUse, pro); } else { DBG_INFO(AQBANKING_LOGDOMAIN, "Provider %s not available", pName); } } pd=GWEN_PluginDescription_List2Iterator_Next(it); } GWEN_PluginDescription_List2Iterator_free(it); } GWEN_PluginDescription_List2_free(pdl); } }
GWEN_DIALOG *AB_SetupNewUserDialog_new(AB_BANKING *ab) { GWEN_DIALOG *dlg; AB_SETUP_NEWUSER_DIALOG *xdlg; GWEN_BUFFER *fbuf; int rv; GWEN_XMLNODE *n; GWEN_XMLNODE *nDialog; GWEN_PLUGIN_DESCRIPTION_LIST2 *providers; GWEN_DIALOG_LIST *subDialogs=NULL; dlg=GWEN_Dialog_new("ab_setup_newuser"); GWEN_NEW_OBJECT(AB_SETUP_NEWUSER_DIALOG, xdlg); GWEN_INHERIT_SETDATA(GWEN_DIALOG, AB_SETUP_NEWUSER_DIALOG, dlg, xdlg, AB_SetupNewUserDialog_FreeData); GWEN_Dialog_SetSignalHandler(dlg, AB_SetupNewUserDialog_SignalHandler); xdlg->backendDialogs=GWEN_Dialog_List2_new(); xdlg->backendRadioNames=GWEN_StringList_new(); xdlg->backendNames=GWEN_StringList_new(); /* get path of dialog description file */ fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_PathManager_FindFile(AB_PM_LIBNAME, AB_PM_DATADIR, "aqbanking/dialogs/dlg_setup_newuser.dlg", fbuf); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "Dialog description file not found (%d).", rv); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } /* read XML file, extend it */ n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); rv=GWEN_XML_ReadFile(n, GWEN_Buffer_GetStart(fbuf), GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_HANDLE_HEADERS); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_XMLNode_free(n); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } nDialog=GWEN_XMLNode_FindFirstTag(n, "dialog", NULL, NULL); if (nDialog==NULL) { DBG_INFO(AQBANKING_LOGDOMAIN, "Dialog element not found in XML file [%s]", GWEN_Buffer_GetStart(fbuf)); GWEN_XMLNode_free(n); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } providers=AB_Banking_GetProviderDescrs(ab); if (providers) { GWEN_XMLNODE *nBackendRadioWidget; nBackendRadioWidget=GWEN_XMLNode_FindFirstTag(nDialog, "widget", "name", "dialogVLayout"); if (nBackendRadioWidget) nBackendRadioWidget=GWEN_XMLNode_FindFirstTag(nBackendRadioWidget, "widget", "name", "wiz_stack"); if (nBackendRadioWidget) nBackendRadioWidget=GWEN_XMLNode_FindFirstTag(nBackendRadioWidget, "widget", "name", "backendRadioWidget"); subDialogs=GWEN_Dialog_List_new(); if (nBackendRadioWidget) { GWEN_PLUGIN_DESCRIPTION_LIST2_ITERATOR *pit; pit=GWEN_PluginDescription_List2_First(providers); if (pit) { GWEN_PLUGIN_DESCRIPTION *pd; pd=GWEN_PluginDescription_List2Iterator_Data(pit); while(pd) { const char *name; name=GWEN_PluginDescription_GetName(pd); if (name && *name) { AB_PROVIDER *pro; pro=AB_Banking_GetProvider(ab, name); if (pro) { GWEN_DIALOG *cdlg; GWEN_BUFFER *tbuf; GWEN_XMLNODE *wn; const char *s; if (AB_Provider_GetFlags(pro) & AB_PROVIDER_FLAGS_HAS_USERTYPE_DIALOG) { cdlg=AB_ProviderGetUserTypeDialog(pro); if (cdlg==NULL) { DBG_WARN(AQBANKING_LOGDOMAIN, "Backend [%s] does not return a userType dialog, using default", name); cdlg=AB_UserTypePageDefaultDialog_new(ab); } } else cdlg=AB_UserTypePageDefaultDialog_new(ab); tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, "backend_"); GWEN_Buffer_AppendString(tbuf, name); GWEN_Buffer_AppendString(tbuf, "_radio"); wn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "widget"); GWEN_XMLNode_SetProperty(wn, "type", "radioButton"); GWEN_XMLNode_SetProperty(wn, "name", GWEN_Buffer_GetStart(tbuf)); GWEN_StringList_AppendString(xdlg->backendRadioNames, GWEN_Buffer_GetStart(tbuf), 0, 0); GWEN_StringList_AppendString(xdlg->backendNames, name, 0, 0); s=GWEN_PluginDescription_GetShortDescr(pd); if (!(s && *s)) s=name; GWEN_XMLNode_SetProperty(wn, "text", I18N(s)); GWEN_XMLNode_SetProperty(wn, "groupId", "999999"); GWEN_XMLNode_SetProperty(wn, "flags", "fillX justifyLeft"); GWEN_XMLNode_AddChild(nBackendRadioWidget, wn); GWEN_Dialog_List_Add(cdlg, subDialogs); } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Could not activate backend [%s]", name); } } pd=GWEN_PluginDescription_List2Iterator_Next(pit); } GWEN_PluginDescription_List2Iterator_free(pit); } } else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Dialog description does not contain path [dialogVLayout/wiz_stack/backendRadioWidget]"); GWEN_XMLNode_Dump(nDialog, 2); GWEN_XMLNode_free(n); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } } /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXml(dlg, nDialog); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d).", rv); GWEN_Dialog_List_free(subDialogs); GWEN_XMLNode_free(n); GWEN_Buffer_free(fbuf); GWEN_Dialog_free(dlg); return NULL; } GWEN_XMLNode_free(n); GWEN_Buffer_free(fbuf); /* insert pages for each backend */ if (GWEN_Dialog_List_GetCount(subDialogs)) { GWEN_DIALOG *cdlg; while ( (cdlg=GWEN_Dialog_List_First(subDialogs)) ) { GWEN_Dialog_List_Del(cdlg); DBG_NOTICE(AQBANKING_LOGDOMAIN, "Adding dialog %s", GWEN_Dialog_GetId(cdlg)); rv=GWEN_Dialog_AddSubDialog(dlg, "wiz_stack", cdlg); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Dialog_List_free(subDialogs); GWEN_Dialog_free(cdlg); GWEN_Dialog_free(dlg); return NULL; } GWEN_Dialog_List2_PushBack(xdlg->backendDialogs, cdlg); } } GWEN_Dialog_List_free(subDialogs); xdlg->banking=ab; /* done */ return dlg; }