X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FConfig%2FConfig_PropManager.cpp;h=25745a01d1131d66652c825e451639467f5a7fde;hb=fb5791f033b0e2f0f79693b82464332316ce19b0;hp=4fa3d7090043cbf73b7200b3069ccae48c02fd97;hpb=57c61908ce2c9d9386762d76c7606eeaa7f8a48c;p=modules%2Fshaper.git diff --git a/src/Config/Config_PropManager.cpp b/src/Config/Config_PropManager.cpp index 4fa3d7090..25745a01d 100644 --- a/src/Config/Config_PropManager.cpp +++ b/src/Config/Config_PropManager.cpp @@ -1,42 +1,60 @@ -// File: Config_PropManager.cpp -// Created: 13 Aug 2014 -// Author: Vitaly SMETANNIKOV +// Copyright (C) 2014-2017 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or +// email : webmaster.salome@opencascade.com +// #include "Config_PropManager.h" - - std::vector stringToRGB(const std::string& theColor); int stringToInteger(const std::string& theInt); -double stringToDouble(const std::string& theDouble); - +bool stringToBoolean(const std::string& theInt); Config_Properties Config_PropManager::myProps; - -bool Config_PropManager::registerProp(const std::string& theSection, - const std::string& theName, - const std::string& theTitle, - Config_Prop::PropType theType, - const std::string& theValue) +Config_Prop* Config_PropManager::registerProp(const std::string& theSection, + const std::string& theName, + const std::string& theTitle, + Config_Prop::PropType theType, + const std::string& theDefaultValue) { Config_Prop* aProp = findProp(theSection, theName); + if (aProp) { + if (aProp->value() == "") { + aProp->setValue(theDefaultValue); + } + if (aProp->defaultValue() == "") { + aProp->setDefaultValue(theDefaultValue); + } if (aProp->type() == Config_Prop::Disabled) { aProp->setType(theType); aProp->setTitle(theTitle); - return true; } - return false; } - aProp = new Config_Prop(theSection, theName, theTitle, theType, theValue); - myProps.push_back(aProp); - return true; + else { + aProp = new Config_Prop(theSection, theName, theTitle, theType, theDefaultValue); + myProps.push_back(aProp); + } + return aProp; } -Config_Prop* Config_PropManager::findProp(const std::string& theSection, - const std::string& theName) +Config_Prop* Config_PropManager::findProp(const std::string& theSection, const std::string& theName) { Config_Properties::const_iterator aIt; for (aIt = myProps.cbegin(); aIt != myProps.cend(); ++aIt) { @@ -47,7 +65,6 @@ Config_Prop* Config_PropManager::findProp(const std::string& theSection, return NULL; } - Config_Properties Config_PropManager::getProperties() { Config_Properties aRes; @@ -86,10 +103,7 @@ Config_Properties Config_PropManager::getProperties(const std::string& theSectio return aRes; } - -std::string Config_PropManager::string(const std::string& theSection, - const std::string& theName, - const std::string& theDefault) +std::string Config_PropManager::string(const std::string& theSection, const std::string& theName) { Config_Properties aProps = getProperties(theSection); Config_Properties::const_iterator aIt; @@ -98,35 +112,35 @@ std::string Config_PropManager::string(const std::string& theSection, if (aProp->name() == theName) return aProp->value(); } - return theDefault; + std::string aMsg = "Property " + theSection + ":" + theName + " is not registered"; + throw aMsg.c_str(); } - -std::vector Config_PropManager::color(const std::string& theSection, - const std::string& theName, - const std::string& theDefault) +std::vector Config_PropManager::color(const std::string& theSection, + const std::string& theName) { - std::string aStr = string(theSection, theName, theDefault); + std::string aStr = string(theSection, theName); return stringToRGB(aStr); } -int Config_PropManager::integer(const std::string& theSection, - const std::string& theName, - const std::string& theDefault) +int Config_PropManager::integer(const std::string& theSection, const std::string& theName) { - std::string aStr = string(theSection, theName, theDefault); + std::string aStr = string(theSection, theName); return stringToInteger(aStr); } -double Config_PropManager::real(const std::string& theSection, - const std::string& theName, - const std::string& theDefault) +double Config_PropManager::real(const std::string& theSection, const std::string& theName) { - std::string aStr = string(theSection, theName, theDefault); + std::string aStr = string(theSection, theName); return stringToDouble(aStr); } - +bool Config_PropManager::boolean(const std::string& theSection, + const std::string& theName) +{ + std::string aStr = string(theSection, theName); + return stringToBoolean(aStr); +} std::vector stringToRGB(const std::string& theColor) { @@ -149,7 +163,7 @@ std::vector stringToRGB(const std::string& theColor) aBuf[1] = theColor[6]; aRes[2] = strtol(aBuf, &aP, 16); } else { - int aPos = theColor.find(","); + int aPos = (int)theColor.find(","); char aBuf[10]; // Get Red std::size_t length = theColor.copy(aBuf, aPos, 0); @@ -157,7 +171,7 @@ std::vector stringToRGB(const std::string& theColor) aRes[0] = atoi(aBuf); // Get Green - int aNPos = theColor.find(",", aPos + 1); + int aNPos = (int)theColor.find(",", aPos + 1); length = theColor.copy(aBuf, aNPos - aPos - 1, aPos + 1); aBuf[length] = '\0'; aRes[1] = atoi(aBuf); @@ -175,8 +189,26 @@ int stringToInteger(const std::string& theInt) return atoi(theInt.c_str()); } -double stringToDouble(const std::string& theDouble) +double Config_PropManager::stringToDouble(const std::string& theDouble) { + std::string aStr = theDouble; + + // change locale and convert "," to "." if exists + std::string aCurLocale = setlocale(LC_NUMERIC, 0); + setlocale(LC_NUMERIC, "C"); + int dotpos = (int)aStr.find(','); + if (dotpos != std::string::npos) + aStr.replace(dotpos, 1, "."); + char* p; - return strtod(theDouble.c_str(), &p); + double aValue = strtod(aStr.c_str(), &p); + + // restore locale + setlocale(LC_NUMERIC, aCurLocale.c_str()); + return aValue; +} + +bool stringToBoolean(const std::string& theBoolean) +{ + return theBoolean == "true"; }