#include "acidlaunch.h" /* convert a text boolean value into a numeric value */ static bool stringToBool(char* text) { bool result = false; if(!strcmp("true", text)) result = true; if(!strcmp("yes", text)) result = true; if(!strcmp("1", text)) result = true; return result; } /* parse the node from the XML file */ void ConfigNode::parseNodes(xmlNodePtr node) { node = node->xmlChildrenNode; while(node) { handleNode(node); node = node->next; } } void ConfigNode::handleNode(xmlNodePtr child) { cerr << "WARNING: unhandled node:\n"; cerr << " name: " << child->name << " value: " << xmlNodeGetContent(child) << endl; } ConfigNode::ConfigNode(xmlNodePtr node) {} AppIconNode::AppIconNode(xmlNodePtr node) : ConfigNode(node) {} void AppIconNode::handleNode(xmlNodePtr child) { xmlChar* value = xmlNodeGetContent(child); if(!xmlStrcmp(child->name, (const xmlChar*)"name")) { setName(value); } else if(!xmlStrcmp(child->name, (const xmlChar*)"icon")) { setIcon(value); } else if(!xmlStrcmp(child->name, (const xmlChar*)"command")) { setCommand(value); } free(value); } LauncherTabNode::LauncherTabNode(xmlNodePtr node) : ConfigNode(node) {} void LauncherTabNode::handleNode(xmlNodePtr child) { xmlChar* value = xmlNodeGetContent(child); if(!xmlStrcmp(child->name, (const xmlChar*)"appicon")) { AppIconNode* app = new AppIconNode(child); app->parseNodes(child); append(app); } else if(!xmlStrcmp(child->name, (const xmlChar*)"title")) { setTitle(value); } free(value); } LauncherNode::LauncherNode(xmlNodePtr node) : _vertical(false), _xsize(25), _ysize(25), _xpos(-1), _ypos(-1), _width(1), _withdrawn(false), _bgcolor(0x6060a0), ConfigNode(node) {} void LauncherNode::handleNode(xmlNodePtr child) { xmlChar* value = xmlNodeGetContent(child); if(!xmlStrcmp(child->name, (const xmlChar*)"tab")) { LauncherTabNode* tab = new LauncherTabNode(child); tab->parseNodes(child); append(tab); } else if(!xmlStrcmp(child->name, (const xmlChar*)"orientation")) { if(!xmlStrcmp(value, (const xmlChar*)"vertical")) { setIsVertical(true); } else { setIsVertical(false); } } else if(!xmlStrcmp(child->name, (const xmlChar*)"withdrawn")) { if(stringToBool((char*)value)) { setIsWithdrawn(true); } else { setIsWithdrawn(false); } } else if(!xmlStrcmp(child->name, (const xmlChar*)"xsize")) { setxSize(atoi((char*)value)); } else if(!xmlStrcmp(child->name, (const xmlChar*)"ysize")) { setySize(atoi((char*)value)); } else if(!xmlStrcmp(child->name, (const xmlChar*)"width")) { setWidth(atoi((char*)value)); } else if(!xmlStrcmp(child->name, (const xmlChar*)"bgcolor") || !xmlStrcmp(child->name, (const xmlChar*)"bgcolour")) { setBgColor(strtoul((const char*)value, NULL, 0)); } else if(!xmlStrcmp(child->name, (const xmlChar*)"xpos")) { setxPos(atoi((char*)value)); } else if(!xmlStrcmp(child->name, (const xmlChar*)"ypos")) { setyPos(atoi((char*)value)); } free(value); } AcidLaunchNode::AcidLaunchNode(xmlNodePtr node) : ConfigNode(node) {} void AcidLaunchNode::handleNode(xmlNodePtr child) { if(!xmlStrcmp(child->name, (const xmlChar*)"launcher")) { LauncherNode* launcher = new LauncherNode(child); launcher->parseNodes(child); append(launcher); } } ConfigNode::~ConfigNode() { list::const_iterator iter; for(iter=children().begin(); iter!=children().end(); iter++) { delete (*iter); } } void ConfigNode::dumpChildren() { list::const_iterator iter; for(iter=children().begin(); iter!=children().end(); iter++) { (*iter)->dump(); (*iter)->dumpChildren(); } }