2 * Config_FeatureReader.cpp
4 * Created on: Mar 20, 2014
8 #include <Config_FeatureReader.h>
10 #include <Event_Loop.h>
12 #include <libxml\parser.h>
13 #include <libxml\tree.h>
19 //Hardcoded xml entities
21 const static char* NODE_WORKBENCH = "workbench";
22 const static char* NODE_GROUP = "group";
23 const static char* NODE_FEATURE = "feature";
26 const static char* _ID = "id";
27 //const static char* WORKBENCH_ID = "id";
28 //const static char* GROUP_ID = "id";
29 //const static char* FEATURE_ID = "id";
30 const static char* FEATURE_TEXT = "text";
31 const static char* FEATURE_TOOLTIP = "tooltip";
32 const static char* FEATURE_ICON = "icon";
33 const static char* FEATURE_KEYSEQUENCE = "keysequence";
35 Config_FeatureReader::Config_FeatureReader(const std::string& theXmlFile)
36 : Config_XMLReader(theXmlFile),
37 myFetchWidgetCfg(false)
42 if (!Event_Loop::loop()) {
43 std::cout << "Config_FeatureReader::importWorkbench: "
44 << "No event loop registered" << std::endl;
49 Config_FeatureReader::Config_FeatureReader(const std::string& theXmlFile,
50 const std::string& theLibraryName)
51 : Config_XMLReader(theXmlFile),
52 myLibraryName(theLibraryName),
53 myFetchWidgetCfg(false)
56 if (!Event_Loop::loop()) {
57 std::cout << "Config_FeatureReader::importWorkbench: "
58 << "No event loop registered" << std::endl;
63 Config_FeatureReader::~Config_FeatureReader()
67 std::string Config_FeatureReader::featureWidgetCfg(std::string theFeatureName)
69 myFetchWidgetCfg = true;
71 myFetchWidgetCfg = false;
75 void Config_FeatureReader::processNode(xmlNodePtr theNode)
77 static Event_ID aMenuItemEvent = Event_Loop::eventByName("RegisterFeature");
78 if (isNode(theNode, NODE_FEATURE, NULL)) {
79 if (myFetchWidgetCfg) {
80 xmlBufferPtr buffer = xmlBufferCreate();
81 int size = xmlNodeDump(buffer, theNode->doc, theNode, 0, 1);
82 myWidgetCfg = std::string((char*) buffer->content);
84 Event_Loop* aEvLoop = Event_Loop::loop();
85 Config_FeatureMessage aMessage(aMenuItemEvent, this);
86 fillFeature(theNode, aMessage);
87 aEvLoop->send(aMessage);
90 //The m_last* variables always defined before fillFeature() call. XML is a tree.
91 if (isNode(theNode, NODE_GROUP, NULL)) {
92 myLastGroup = getProperty(theNode, _ID);
94 if (isNode(theNode, NODE_WORKBENCH, NULL)) {
95 myLastWorkbench = getProperty(theNode, _ID);
99 bool Config_FeatureReader::processChildren(xmlNodePtr theNode)
101 return isNode(theNode, NODE_WORKBENCH, NODE_GROUP, NULL);
104 void Config_FeatureReader::fillFeature(xmlNodePtr theRoot, Config_FeatureMessage& outFtMessage)
106 outFtMessage.setId(getProperty(theRoot, _ID));
107 outFtMessage.setText(getProperty(theRoot, FEATURE_TEXT));
108 outFtMessage.setTooltip(getProperty(theRoot, FEATURE_TOOLTIP));
109 outFtMessage.setIcon(getProperty(theRoot, FEATURE_ICON));
110 outFtMessage.setKeysequence(getProperty(theRoot, FEATURE_KEYSEQUENCE));
111 outFtMessage.setGroupId(myLastGroup);
112 outFtMessage.setWorkbenchId(myLastWorkbench);
113 outFtMessage.setPluginLibrary(myLibraryName);