void Environment::xmlConfigure(xmlNode *fNode) { int fEmbeddedSkin = 0; while (fNode) { if (!strcmp((char *) fNode->name, "Menu")) { SubMenuNode *t = new SubMenuNode(); t->xmlConfigure(fNode->children); setTopMenu(t); setCurrentMenu(t); } else if (!strcmp((char *) fNode->name, "Resources")) { Resources *t = new Resources(); t->xmlConfigure(fNode->children); setResources(t); fEmbeddedSkin = 1; } else if (!strcmp((char *) fNode->name, "Elements")) { Elements *t = new Elements(); t->xmlConfigure(fNode->children); setElements(t); fEmbeddedSkin = 1; } else if (!strcmp((char *) fNode->name, "Dialog")) { Generic *t = new Generic(); t->xmlConfigure(fNode->children); setDialog(t); } else if (!strcmp((char *) fNode->name, "LogFile")) { setLogFileName((char *) fNode->children->content); } fNode = fNode->next; } if (fEmbeddedSkin) { mResources->loadResources(); mElements->associateResources(mResources); } }
int Environment::loadSkin(char *fSkinDirectory) { Elements *fOldElements = mElements; Resources *fOldResources = mResources; struct stat sbuf; char buf[255]; sprintf(buf, "%sskin.xml", fSkinDirectory); printf("Loading %s\n", buf); if (stat(buf, &sbuf)) { return 0; } xmlDoc *theDoc = 0; xmlNode *theRoot = 0; theDoc = xmlReadFile(buf, NULL, 0); if (theDoc == NULL) { return 0; } theRoot = xmlDocGetRootElement(theDoc); xmlNode *fNode = theRoot->children; while (fNode) { if (!strcmp((char *) fNode->name, "Resources") && fNode->children) { Resources *t = new Resources(); t->xmlConfigure(fNode->children); setResources(t); } else if (!strcmp((char *) fNode->name, "Elements") && fNode->children) { Elements *t = new Elements(); t->xmlConfigure(fNode->children); setElements(t); } fNode = fNode->next; } if (fOldElements != mElements && fOldElements) { delete fOldElements; } if (fOldResources != mResources && fOldResources) { delete fOldResources; } setSkinPath(fSkinDirectory); debugPrint(" Loading resources\n"); mResources->loadResources(); debugPrint(" Associating resources & elements\n"); mElements->associateResources(mResources); xmlFreeDoc(theDoc); return 1; }