X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_WidgetPointInput.cpp;h=faf5ff52791e14db8726cac27fafe84c1298773d;hb=3c521abdcd7ca02cf3a2575dea7ee8f6ce97130e;hp=1c41a1ab5010f733087bca48a5212dc131c2b57c;hpb=e65bf14e2ff3cf853884bf8998fadcece6e3b34c;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_WidgetPointInput.cpp b/src/ModuleBase/ModuleBase_WidgetPointInput.cpp index 1c41a1ab5..faf5ff527 100644 --- a/src/ModuleBase/ModuleBase_WidgetPointInput.cpp +++ b/src/ModuleBase/ModuleBase_WidgetPointInput.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2017 CEA/DEN, EDF R&D +// Copyright (C) 2014-2019 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 @@ -12,10 +12,9 @@ // // 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 +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or -// email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // #include "ModuleBase_WidgetPointInput.h" @@ -34,19 +33,35 @@ #include #include -ModuleBase_WidgetPointInput::ModuleBase_WidgetPointInput(QWidget* theParent, ModuleBase_IWorkshop* theWorkshop, + +#define ERR_STRING "ERROR" + +ModuleBase_WidgetPointInput::ModuleBase_WidgetPointInput(QWidget* theParent, + ModuleBase_IWorkshop* theWorkshop, const Config_WidgetAPI* theData) : ModuleBase_WidgetSelector(theParent, theWorkshop, theData) { + myDefaultValue[0] = 0; + myDefaultValue[1] = 0; + myDefaultValue[2] = 0; bool aAcceptVariables = theData->getBooleanAttribute(DOUBLE_WDG_ACCEPT_EXPRESSIONS, true); + std::string aDefValuesStr = theData->getProperty(ATTR_DEFAULT); + if (!aDefValuesStr.empty()) { + QString aDefVal(aDefValuesStr.c_str()); + QStringList aStrArray = aDefVal.split(';', QString::SkipEmptyParts); + if (aStrArray.length() == 3) { + for (int i = 0; i < 3; i++) + myDefaultValue[i] = aStrArray.at(i).toDouble(); + } + } QFormLayout* aMainlayout = new QFormLayout(this); ModuleBase_Tools::adjustMargins(aMainlayout); myXSpin = new ModuleBase_ParamSpinBox(this); myXSpin->setAcceptVariables(aAcceptVariables); myXSpin->setToolTip("X coordinate"); - myXSpin->setValue(0); + myXSpin->setValue(myDefaultValue[0]); QLabel* aXLbl = new QLabel(this); aXLbl->setPixmap(QPixmap(":pictures/x_size.png")); aMainlayout->addRow(aXLbl, myXSpin); @@ -54,7 +69,7 @@ ModuleBase_WidgetPointInput::ModuleBase_WidgetPointInput(QWidget* theParent, Mod myYSpin = new ModuleBase_ParamSpinBox(this); myYSpin->setAcceptVariables(aAcceptVariables); myYSpin->setToolTip("Y coordinate"); - myYSpin->setValue(0); + myYSpin->setValue(myDefaultValue[1]); QLabel* aYLbl = new QLabel(this); aYLbl->setPixmap(QPixmap(":pictures/y_size.png")); aMainlayout->addRow(aYLbl, myYSpin); @@ -62,10 +77,14 @@ ModuleBase_WidgetPointInput::ModuleBase_WidgetPointInput(QWidget* theParent, Mod myZSpin = new ModuleBase_ParamSpinBox(this); myZSpin->setAcceptVariables(aAcceptVariables); myZSpin->setToolTip("Z coordinate"); - myZSpin->setValue(0); + myZSpin->setValue(myDefaultValue[2]); QLabel* aZLbl = new QLabel(this); aZLbl->setPixmap(QPixmap(":pictures/z_size.png")); aMainlayout->addRow(aZLbl, myZSpin); + + connect(myXSpin, SIGNAL(textChanged(const QString&)), this, SIGNAL(valuesModified())); + connect(myYSpin, SIGNAL(textChanged(const QString&)), this, SIGNAL(valuesModified())); + connect(myZSpin, SIGNAL(textChanged(const QString&)), this, SIGNAL(valuesModified())); } ModuleBase_WidgetPointInput::~ModuleBase_WidgetPointInput() @@ -84,17 +103,60 @@ QList ModuleBase_WidgetPointInput::getControls() const return aList; } +std::string getParmText(ModuleBase_ParamSpinBox* theSpin, FeaturePtr& theParam) +{ + QString aText = theSpin->text(); + if (aText.contains('=')) { + if (!theParam.get()) { + theParam = ModuleBase_Tools::createParameter(aText); + if (!theParam.get()) { + return ERR_STRING; + } + } + else { + ModuleBase_Tools::editParameter(theParam, aText); + } + aText = aText.split('=').at(0); + } + return aText.toStdString(); +} + //******************************************************************** bool ModuleBase_WidgetPointInput::storeValueCustom() { AttributePointPtr aAttr = std::dynamic_pointer_cast(attribute()); if (aAttr.get()) { - if (myXSpin->hasVariable() || myYSpin->hasVariable() || myZSpin->hasVariable()) { - aAttr->setText(myXSpin->text().toStdString(), - myYSpin->text().toStdString(), myZSpin->text().toStdString()); + if (aAttr->isInitialized()) { + if (myXSpin->hasVariable() || myYSpin->hasVariable() || myZSpin->hasVariable()) { + std::string aXText = getParmText(myXSpin, myXParam); + if (aXText == ERR_STRING) { + aAttr->setExpressionError(0, "Parameter cannot be created"); + aAttr->setExpressionInvalid(0, true); + updateObject(myFeature); + return false; + } + std::string aYText = getParmText(myYSpin, myYParam); + if (aYText == ERR_STRING) { + aAttr->setExpressionError(1, "Parameter cannot be created"); + aAttr->setExpressionInvalid(1, true); + updateObject(myFeature); + return false; + } + std::string aZText = getParmText(myZSpin, myZParam); + if (aZText == ERR_STRING) { + aAttr->setExpressionError(2, "Parameter cannot be created"); + aAttr->setExpressionInvalid(2, true); + updateObject(myFeature); + return false; + } + aAttr->setText(aXText, aYText, aZText); + } else { + aAttr->setValue(myXSpin->value(), myYSpin->value(), myZSpin->value()); + } } else { - aAttr->setValue(myXSpin->value(), myYSpin->value(), myZSpin->value()); + aAttr->setValue(myDefaultValue[0], myDefaultValue[1], myDefaultValue[2]); } + updateObject(myFeature); return true; } return false; @@ -105,23 +167,34 @@ bool ModuleBase_WidgetPointInput::restoreValueCustom() { AttributePointPtr aAttr = std::dynamic_pointer_cast(attribute()); if (aAttr.get()) { - std::string aXText = aAttr->textX(); - if (aXText.empty()) { - myXSpin->setValue(aAttr->x()); - } else { - myXSpin->setText(aXText.c_str()); - } - std::string aYText = aAttr->textY(); - if (aYText.empty()) { - myYSpin->setValue(aAttr->y()); - } else { - myYSpin->setText(aYText.c_str()); + if (aAttr->isInitialized()) { + std::string aXText = aAttr->textX(); + if (aXText.empty()) { + myXSpin->setValue(aAttr->x()); + } + else { + myXSpin->setText(aXText.c_str()); + } + std::string aYText = aAttr->textY(); + if (aYText.empty()) { + myYSpin->setValue(aAttr->y()); + } + else { + myYSpin->setText(aYText.c_str()); + } + std::string aZText = aAttr->textZ(); + if (aZText.empty()) { + myZSpin->setValue(aAttr->z()); + } + else { + myZSpin->setText(aZText.c_str()); + } } - std::string aZText = aAttr->textZ(); - if (aZText.empty()) { - myZSpin->setValue(aAttr->z()); - } else { - myZSpin->setText(aZText.c_str()); + else { + aAttr->setValue(myDefaultValue[0], myDefaultValue[1], myDefaultValue[2]); + myXSpin->setValue(myDefaultValue[0]); + myYSpin->setValue(myDefaultValue[1]); + myZSpin->setValue(myDefaultValue[2]); } return true; } @@ -145,16 +218,29 @@ QIntList ModuleBase_WidgetPointInput::shapeTypes() const //******************************************************************** bool ModuleBase_WidgetPointInput -::setSelectionCustom(const std::shared_ptr& thePrs) +::setSelection(QList>& theValues, + const bool theToValidate) { - GeomShapePtr aShape = thePrs->shape(); - if (aShape->isVertex()) { - GeomVertexPtr aVertex(new GeomAPI_Vertex(aShape)); - GeomPointPtr aPnt = aVertex->point(); - myXSpin->setValue(aPnt->x()); - myYSpin->setValue(aPnt->y()); - myZSpin->setValue(aPnt->z()); - return true; + if (theValues.size() == 1) { + GeomShapePtr aShape = theValues.first()->shape(); + if (aShape.get() && aShape->isVertex()) { + GeomVertexPtr aVertex(new GeomAPI_Vertex(aShape)); + GeomPointPtr aPnt = aVertex->point(); + myXSpin->setValue(aPnt->x()); + myYSpin->setValue(aPnt->y()); + myZSpin->setValue(aPnt->z()); + return true; + } } return false; } + +//******************************************************************** +bool ModuleBase_WidgetPointInput::processEnter() +{ + bool isModified = getValueState() == ModifiedInPP; + if (isModified) { + emit valuesChanged(); + } + return isModified; +}