Salome HOME
Auto-formatting according to the defined code standard.
[modules/shaper.git] / src / Config / Config_FeatureReader.cpp
1 /*
2  * Config_FeatureReader.cpp
3  *
4  *  Created on: Mar 20, 2014
5  *      Author: sbh
6  */
7
8 #include <Config_FeatureReader.h>
9
10 #include <Event_Loop.hxx>
11
12 #include <libxml\parser.h>
13 #include <libxml\tree.h>
14
15 #ifdef _DEBUG
16 #include <iostream>
17 #endif
18
19 //Hardcoded xml entities
20 // * Nodes
21 const static char* NODE_WORKBENCH = "workbench";
22 const static char* NODE_GROUP = "group";
23 const static char* NODE_FEATURE = "feature";
24
25 // * Properties
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";
34
35 Config_FeatureReader::Config_FeatureReader(const std::string& theXmlFile)
36     : Config_XMLReader(theXmlFile), m_fetchWidgetCfg(false)
37 {
38 #ifdef _DEBUG
39   if(!Event_Loop::Loop()) {
40     std::cout << "Config_FeatureReader::importWorkbench: "
41     << "No event loop registered" << std::endl;
42   }
43 #endif
44 }
45
46 Config_FeatureReader::~Config_FeatureReader()
47 {
48 }
49
50 std::string Config_FeatureReader::featureWidgetCfg(std::string theFeatureName)
51 {
52   m_fetchWidgetCfg = true;
53   readAll();
54   m_fetchWidgetCfg = false;
55   return m_widgetCfg;
56 }
57
58 void Config_FeatureReader::processNode(xmlNodePtr theNode)
59 {
60   if (isNode(theNode, NODE_FEATURE, NULL)) {
61     if (m_fetchWidgetCfg) {
62       xmlBufferPtr buffer = xmlBufferCreate();
63       int size = xmlNodeDump(buffer, theNode->doc, theNode, 0, 1);
64       m_widgetCfg = std::string((char*) buffer->content);
65     } else {
66       Event_Loop* aEvLoop = Event_Loop::Loop();
67       Config_FeatureMessage aMessage(aEvLoop->EventByName("menu_item"), this);
68       fillFeature(theNode, aMessage);
69       aEvLoop->Send(aMessage);
70     }
71   }
72   //The m_last* variables always defined before fillFeature() call. XML is a tree.
73   if (isNode(theNode, NODE_GROUP, NULL)) {
74     m_lastGroup = getProperty(theNode, _ID);
75   }
76   if (isNode(theNode, NODE_WORKBENCH, NULL)) {
77     m_lastWorkbench = getProperty(theNode, _ID);
78   }
79 }
80
81 bool Config_FeatureReader::processChildren(xmlNodePtr theNode)
82 {
83   return isNode(theNode, NODE_WORKBENCH, NODE_GROUP, NULL);
84 }
85
86 void Config_FeatureReader::fillFeature(xmlNodePtr theRoot, Config_FeatureMessage& outFtMessage)
87 {
88   outFtMessage.setId(getProperty(theRoot, _ID));
89   outFtMessage.setText(getProperty(theRoot, FEATURE_TEXT));
90   outFtMessage.setTooltip(getProperty(theRoot, FEATURE_TOOLTIP));
91   outFtMessage.setIcon(getProperty(theRoot, FEATURE_ICON));
92   outFtMessage.setKeysequence(getProperty(theRoot, FEATURE_KEYSEQUENCE));
93   outFtMessage.setGroupId(m_lastGroup);
94   outFtMessage.setWorkbenchId(m_lastWorkbench);
95
96 }