X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_ParamSpinBox.cpp;h=1fdad51d3682ff889c22d401bd96be370ce285e5;hb=c93898acb58bc77dbfef4f5cba260885d31379fe;hp=5ad7c1dcf3b88203317d95d6c4b9372e72dd5c29;hpb=b900918cef83bb82217e7221c7ff0ad9d8a6dbe9;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_ParamSpinBox.cpp b/src/ModuleBase/ModuleBase_ParamSpinBox.cpp index 5ad7c1dcf..1fdad51d3 100644 --- a/src/ModuleBase/ModuleBase_ParamSpinBox.cpp +++ b/src/ModuleBase/ModuleBase_ParamSpinBox.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -11,6 +12,7 @@ #include #include +#include /*! \class ModuleBase_ParamSpinBox @@ -27,9 +29,7 @@ */ ModuleBase_ParamSpinBox::ModuleBase_ParamSpinBox(QWidget* theParent, int thePrecision) : ModuleBase_DoubleSpinBox(theParent, thePrecision), - myAcceptVariables(true), - myHasVariables(false), - myDefaultValue(0.) + myAcceptVariables(true) { connectSignalsAndSlots(); } @@ -52,17 +52,7 @@ ModuleBase_ParamSpinBox::~ModuleBase_ParamSpinBox() */ void ModuleBase_ParamSpinBox::stepBy(int steps) { - QString str = text(); - QString pref = prefix(); - QString suff = suffix(); - - if (pref.length() && str.startsWith(pref)) - str = str.right(str.length() - pref.length()); - if (suff.length() && str.endsWith(suff)) - str = str.left(str.length() - suff.length()); - - QRegExp varNameMask("([a-z]|[A-Z]|_).*"); - if (varNameMask.exactMatch(str)) + if (hasVariable()) return; ModuleBase_DoubleSpinBox::stepBy(steps); @@ -73,28 +63,8 @@ void ModuleBase_ParamSpinBox::stepBy(int steps) */ void ModuleBase_ParamSpinBox::connectSignalsAndSlots() { - connect(this, SIGNAL(editingFinished()), - this, SLOT(onEditingFinished())); - connect(this, SIGNAL(valueChanged(const QString&)), this, SLOT(onTextChanged(const QString&))); - - //connect(lineEdit(), SIGNAL(textChanged(const QString&)), - // this, SLOT(onTextChanged(const QString&))); - - //connect(lineEdit(), SIGNAL(textChanged(const QString&)), - // this, SIGNAL(textChanged(const QString&))); -} - -/*! - \brief This function is called when editing is finished. - */ -void ModuleBase_ParamSpinBox::onEditingFinished() -{ - if (myTextValue.isNull()) - myTextValue = text(); - - setText(myTextValue); } /*! @@ -103,14 +73,6 @@ void ModuleBase_ParamSpinBox::onEditingFinished() void ModuleBase_ParamSpinBox::onTextChanged(const QString& text) { myTextValue = text; - - double value = 0; - if (isValid(text, value) == Acceptable) { - myCorrectValue = text; - myHasVariables = true; - } else { - myHasVariables = false; - } } /*! @@ -121,24 +83,20 @@ void ModuleBase_ParamSpinBox::onTextChanged(const QString& text) */ double ModuleBase_ParamSpinBox::valueFromText(const QString& theText) const { - double aValue = 0; - if (isValid(theText, aValue) == Acceptable) - return aValue; + if (!hasVariable(theText)) + return ModuleBase_DoubleSpinBox::valueFromText(theText); - return defaultValue(); + double aValue = 0; + findVariable(theText, aValue); + return aValue; } -/*! - \brief This function is used by the spin box whenever it needs to display - the given value. - - \param val spin box value - \return text representation of the value - \sa valueFromText() - */ -QString ModuleBase_ParamSpinBox::textFromValue(double val) const +QString ModuleBase_ParamSpinBox::textFromValue (double theValue) const { - return ModuleBase_DoubleSpinBox::textFromValue(val); + if (hasVariable(myTextValue)){ + return myTextValue; + } + return ModuleBase_DoubleSpinBox::textFromValue(theValue); } /*! @@ -149,6 +107,10 @@ QString ModuleBase_ParamSpinBox::textFromValue(double val) const */ QValidator::State ModuleBase_ParamSpinBox::validate(QString& str, int& pos) const { + // Trying to interpret the current input text as a numeric value + if (!hasVariable(str)) + return ModuleBase_DoubleSpinBox::validate(str, pos); + QValidator::State res = QValidator::Invalid; // Considering the input text as a variable name @@ -166,23 +128,9 @@ QValidator::State ModuleBase_ParamSpinBox::validate(QString& str, int& pos) cons res = QValidator::Intermediate; } } - - // Trying to interpret the current input text as a numeric value - if (res == QValidator::Invalid) - res = ModuleBase_DoubleSpinBox::validate(str, pos); - return res; } -/*! - \brief This function is used to set a default value for this spinbox. - \param value default value - */ -void ModuleBase_ParamSpinBox::setDefaultValue(const double value) -{ - myDefaultValue = value; -} - /*! \brief This function is used to set a current value for this spinbox. \param value current value @@ -191,8 +139,7 @@ void ModuleBase_ParamSpinBox::setValue(const double value) { ModuleBase_DoubleSpinBox::setValue(value); - myCorrectValue = ModuleBase_DoubleSpinBox::textFromValue(value); - myTextValue = myCorrectValue; + myTextValue = ModuleBase_DoubleSpinBox::textFromValue(value); } /*! @@ -222,9 +169,15 @@ bool ModuleBase_ParamSpinBox::isAcceptVariables() const return myAcceptVariables; } -bool ModuleBase_ParamSpinBox::hasVariables() const +bool ModuleBase_ParamSpinBox::hasVariable() const { - return myHasVariables; + return hasVariable(myTextValue); +} + +bool ModuleBase_ParamSpinBox::hasVariable(const QString& theText) const +{ + QRegExp varNameMask("([a-z]|[A-Z]|_).*"); + return varNameMask.exactMatch(theText); } /*! @@ -234,7 +187,7 @@ bool ModuleBase_ParamSpinBox::hasVariables() const ModuleBase_ParamSpinBox::State ModuleBase_ParamSpinBox::isValid(const QString& theText, double& theValue) const { - if (!findVariable(theText, theValue)) { + if (hasVariable() && !findVariable(theText, theValue)) { bool ok = false; theValue = locale().toDouble(theText, &ok); if (!ok) { @@ -248,18 +201,6 @@ ModuleBase_ParamSpinBox::State ModuleBase_ParamSpinBox::isValid(const QString& t return Acceptable; } -/*! - \brief This function return a default acceptable value (commonly, 0.0). - \return default acceptable value - */ -double ModuleBase_ParamSpinBox::defaultValue() const -{ - if (minimum() > myDefaultValue || maximum() < myDefaultValue) - return minimum(); - - return myDefaultValue; -} - /*! \brief This function is used to check that string value lies within predefined range. \return check status @@ -277,16 +218,7 @@ bool ModuleBase_ParamSpinBox::findVariable(const QString& theName, double& outValue) const { - SessionPtr aSession = ModelAPI_Session::get(); - DocumentPtr aDocument = aSession->activeDocument(); - ObjectPtr aParamObj = aDocument->objectByName(ModelAPI_ResultParameter::group(), - theName.toStdString()); - ResultParameterPtr aParam = std::dynamic_pointer_cast(aParamObj); - if(!aParam.get()) - return false; - AttributeDoublePtr aValueAttribute = aParam->data()->real(ModelAPI_ResultParameter::VALUE()); - outValue = aValueAttribute->value(); - return true; + return ModelAPI_Tools::findVariable(theName.toStdString(), outValue); } /*! @@ -304,7 +236,10 @@ void ModuleBase_ParamSpinBox::keyPressEvent(QKeyEvent* e) /*! \brief This function is called when the spinbox recieves show event. */ -void ModuleBase_ParamSpinBox::showEvent(QShowEvent*) +void ModuleBase_ParamSpinBox::showEvent(QShowEvent* theEvent) { - setText(myTextValue); + ModuleBase_DoubleSpinBox::showEvent(theEvent); + if (hasVariable(myTextValue)) { + setText(myTextValue); + } }