#include class ConfigNode { private: list _children; public: ConfigNode(xmlNodePtr node); void parseNodes(xmlNodePtr node); virtual void handleNode(xmlNodePtr child); virtual ~ConfigNode(); const list & children() { return _children; } void append(ConfigNode* app) { if(app) _children.push_back(app); } virtual void dump() {} void dumpChildren(); }; class AppIconNode : public ConfigNode { private: string _icon; string _name; string _command; public: AppIconNode(xmlNodePtr node); void handleNode(xmlNodePtr child); const string& icon() const { return _icon; } void setIcon(const string& x) { _icon = x; } const string& name() const { return _name; } void setName(const string& x) { _name = x; } const string& command() const { return _command; } void setCommand(const string& x) { _command = x; } void setCommand(xmlChar* x) { _command = (char*)x; } void setIcon(xmlChar* x) { _icon = (char*)x; } void setName(xmlChar* x) { _name = (char*)x; } void dump() { cerr << "AppIconNode: " << "name: " << _name << " command: " << _command << " icon: " << _icon << endl; } }; class LauncherTabNode : public ConfigNode { private: string _title; public: LauncherTabNode(xmlNodePtr node); void handleNode(xmlNodePtr child); const string& title() const { return _title; } void setTitle(const string& x) { _title = x; } void setTitle(xmlChar* x) { _title = (char*)x; } void dump() { cerr << "LauncherTabNode: title: " << _title << endl; } }; class LauncherNode : public ConfigNode { private: bool _vertical; bool _withdrawn; unsigned int _xsize; unsigned int _ysize; unsigned int _width; unsigned int _bgcolor; int _xpos; int _ypos; public: LauncherNode(xmlNodePtr node); void handleNode(xmlNodePtr child); bool isVertical() const { return _vertical; } void setIsVertical(bool x) { _vertical = x; } bool isWithdrawn() const { return _withdrawn; } void setIsWithdrawn(bool x) { _withdrawn = x; } unsigned int xSize() const { return _xsize; } void setxSize(unsigned int x) { _xsize = x; } unsigned int ySize() const { return _ysize; } void setySize(unsigned int x) { _ysize = x; } unsigned int width() const { return _width; } void setWidth(unsigned int x) { _width = x; } unsigned int bgColor() const { return _bgcolor; } void setBgColor(unsigned int x) { _bgcolor = x; } unsigned int xPos() const { return _xpos; } void setxPos(unsigned int x) { _xpos = x; } unsigned int yPos() const { return _ypos; } void setyPos(unsigned int x) { _ypos = x; } void dump() { cerr << "LauncherNode: xsize: " << _xsize << " ysize: " << _ysize << " xpos: " << _xpos << " ypos: " << _ypos << " width: " << _width << " withdrawn: " << _withdrawn << " vertical: " << _vertical << " bgcolor: " << _bgcolor << endl; } }; class AcidLaunchNode : public ConfigNode { public: AcidLaunchNode(xmlNodePtr node); void handleNode(xmlNodePtr child); }; class ConfigTree { private: ConfigNode* _tree; public: // create empty tree ConfigTree(); // create tree from document ConfigTree(const string& filename); bool readFile(const string& filename); bool writeFile(const string& filename); };