Salome HOME
Issue #1834: Fix length of lines
[modules/shaper.git] / src / Config / Config_PropManager.cpp
1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
2
3 // File:        Config_PropManager.cpp
4 // Created:     13 Aug 2014
5 // Author:      Vitaly SMETANNIKOV
6
7 #include "Config_PropManager.h"
8
9 std::vector<int> stringToRGB(const std::string& theColor);
10 int stringToInteger(const std::string& theInt);
11 double stringToDouble(const std::string& theDouble);
12 bool stringToBoolean(const std::string& theInt);
13
14 Config_Properties Config_PropManager::myProps;
15
16 Config_Prop* Config_PropManager::registerProp(const std::string& theSection, 
17                                               const std::string& theName,
18                                               const std::string& theTitle,
19                                               Config_Prop::PropType theType,
20                                               const std::string& theDefaultValue)
21 {
22   Config_Prop* aProp = findProp(theSection, theName);
23
24   if (aProp) {
25     if (aProp->value() == "") {
26       aProp->setValue(theDefaultValue);
27     }
28     if (aProp->defaultValue() == "") {
29       aProp->setDefaultValue(theDefaultValue);
30     }
31     if (aProp->type() == Config_Prop::Disabled) {
32       aProp->setType(theType);
33       aProp->setTitle(theTitle);
34     }
35   }
36   else {
37     aProp = new Config_Prop(theSection, theName, theTitle, theType, theDefaultValue);
38     myProps.push_back(aProp);
39   }
40   return aProp;
41 }
42
43 Config_Prop* Config_PropManager::findProp(const std::string& theSection, const std::string& theName)
44 {
45   Config_Properties::const_iterator aIt;
46   for (aIt = myProps.cbegin(); aIt != myProps.cend(); ++aIt) {
47     Config_Prop* aProp = (*aIt);
48     if ((aProp->section() == theSection) && (aProp->name() == theName))
49       return aProp;
50   }
51   return NULL;
52 }
53
54 Config_Properties Config_PropManager::getProperties()
55 {
56   Config_Properties aRes;
57   Config_Properties::const_iterator aIt;
58   for (aIt = myProps.cbegin(); aIt != myProps.cend(); aIt++) {
59     Config_Prop* aProp = (*aIt);
60     if (aProp->type() != Config_Prop::Disabled)
61       aRes.push_back(aProp);
62   }
63   return aRes;
64 }
65
66 std::list<std::string> Config_PropManager::getSections()
67 {
68   // Return only non disabled sections
69   std::list<std::string> aSections;
70   Config_Properties::const_iterator aIt;
71   for (aIt = myProps.cbegin(); aIt != myProps.cend(); aIt++) {
72     const Config_Prop* aProp = (*aIt);
73     if (aProp->type() != Config_Prop::Disabled)
74       aSections.push_back(aProp->section());
75   }
76   aSections.unique();
77   return aSections;
78 }
79
80 Config_Properties Config_PropManager::getProperties(const std::string& theSection)
81 {
82   Config_Properties aRes;
83   Config_Properties::iterator aIt;
84   for (aIt = myProps.begin(); aIt != myProps.end(); aIt++) {
85     Config_Prop* aProp = (*aIt);
86     if ((aProp->section() == theSection) && (aProp->type() != Config_Prop::Disabled))
87       aRes.push_back(aProp);
88   }
89   return aRes;
90 }
91
92 std::string Config_PropManager::string(const std::string& theSection, const std::string& theName,
93                                        const std::string& theDefault)
94 {
95   Config_Properties aProps = getProperties(theSection);
96   Config_Properties::const_iterator aIt;
97   for (aIt = aProps.cbegin(); aIt != aProps.cend(); aIt++) {
98     Config_Prop* aProp = (*aIt);
99     if (aProp->name() == theName)
100       return aProp->value();
101   }
102   return theDefault;
103 }
104
105 std::vector<int> Config_PropManager::color(const std::string& theSection,
106                                            const std::string& theName,
107                                            const std::string& theDefault)
108 {
109   std::string aStr = string(theSection, theName, theDefault);
110   return stringToRGB(aStr);
111 }
112
113 int Config_PropManager::integer(const std::string& theSection, const std::string& theName,
114                                 const std::string& theDefault)
115 {
116   std::string aStr = string(theSection, theName, theDefault);
117   return stringToInteger(aStr);
118 }
119
120 double Config_PropManager::real(const std::string& theSection, const std::string& theName,
121                                 const std::string& theDefault)
122 {
123   std::string aStr = string(theSection, theName, theDefault);
124   return stringToDouble(aStr);
125 }
126
127 bool Config_PropManager::boolean(const std::string& theSection,
128                                  const std::string& theName,
129                                  const std::string& theDefault)
130 {
131   std::string aStr = string(theSection, theName, theDefault);
132   return stringToBoolean(aStr);
133 }
134
135 std::vector<int> stringToRGB(const std::string& theColor)
136 {
137   std::vector<int> aRes(3);
138
139   if (theColor[0] == '#') {
140     char aBuf[3];
141     char* aP;
142     aBuf[2] = '\0';
143
144     aBuf[0] = theColor[1];
145     aBuf[1] = theColor[2];
146     aRes[0] = strtol(aBuf, &aP, 16);
147
148     aBuf[0] = theColor[3];
149     aBuf[1] = theColor[4];
150     aRes[1] = strtol(aBuf, &aP, 16);
151
152     aBuf[0] = theColor[5];
153     aBuf[1] = theColor[6];
154     aRes[2] = strtol(aBuf, &aP, 16);
155   } else {
156     int aPos = (int)theColor.find(",");
157     char aBuf[10];
158     // Get Red
159     std::size_t length = theColor.copy(aBuf, aPos, 0);
160     aBuf[length] = '\0';
161     aRes[0] = atoi(aBuf);
162
163     // Get Green
164     int aNPos = (int)theColor.find(",", aPos + 1);
165     length = theColor.copy(aBuf, aNPos - aPos - 1, aPos + 1);
166     aBuf[length] = '\0';
167     aRes[1] = atoi(aBuf);
168
169     // Get Green
170     length = theColor.copy(aBuf, theColor.length() - aNPos - 1, aNPos + 1);
171     aBuf[length] = '\0';
172     aRes[2] = atoi(aBuf);
173   }
174   return aRes;
175 }
176
177 int stringToInteger(const std::string& theInt)
178 {
179   return atoi(theInt.c_str());
180 }
181
182 double stringToDouble(const std::string& theDouble)
183 {
184   char* p;
185   return strtod(theDouble.c_str(), &p);
186 }
187
188 bool stringToBoolean(const std::string& theBoolean)
189 {
190   return theBoolean == "true";
191 }