-// Copyright (C) 2014-2017 CEA/DEN, EDF R&D
+// Copyright (C) 2014-2023 CEA, EDF
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
//
// 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<mailto:webmaster.salome@opencascade.com>
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
#include "ModuleBase_WidgetPointInput.h"
#include <QFormLayout>
#include <QLabel>
+
+#define ERR_STRING L"ERROR"
+
ModuleBase_WidgetPointInput::ModuleBase_WidgetPointInput(QWidget* theParent,
ModuleBase_IWorkshop* theWorkshop,
const Config_WidgetAPI* theData)
myXSpin = new ModuleBase_ParamSpinBox(this);
myXSpin->setAcceptVariables(aAcceptVariables);
- myXSpin->setToolTip("X coordinate");
+ myXSpin->setToolTip(tr("X coordinate"));
myXSpin->setValue(myDefaultValue[0]);
QLabel* aXLbl = new QLabel(this);
aXLbl->setPixmap(QPixmap(":pictures/x_size.png"));
myYSpin = new ModuleBase_ParamSpinBox(this);
myYSpin->setAcceptVariables(aAcceptVariables);
- myYSpin->setToolTip("Y coordinate");
+ myYSpin->setToolTip(tr("Y coordinate"));
myYSpin->setValue(myDefaultValue[1]);
QLabel* aYLbl = new QLabel(this);
aYLbl->setPixmap(QPixmap(":pictures/y_size.png"));
myZSpin = new ModuleBase_ParamSpinBox(this);
myZSpin->setAcceptVariables(aAcceptVariables);
- myZSpin->setToolTip("Z coordinate");
+ myZSpin->setToolTip(tr("Z coordinate"));
myZSpin->setValue(myDefaultValue[2]);
QLabel* aZLbl = new QLabel(this);
aZLbl->setPixmap(QPixmap(":pictures/z_size.png"));
return aList;
}
+std::wstring 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.toStdWString();
+}
+
//********************************************************************
bool ModuleBase_WidgetPointInput::storeValueCustom()
{
if (aAttr.get()) {
if (aAttr->isInitialized()) {
if (myXSpin->hasVariable() || myYSpin->hasVariable() || myZSpin->hasVariable()) {
- aAttr->setText(myXSpin->text().toStdString(),
- myYSpin->text().toStdString(), myZSpin->text().toStdString());
+ std::wstring aXText = getParmText(myXSpin, myXParam);
+ if (aXText == ERR_STRING) {
+ aAttr->setExpressionError(0, "Parameter cannot be created");
+ aAttr->setExpressionInvalid(0, true);
+ updateObject(myFeature);
+ return false;
+ }
+ std::wstring aYText = getParmText(myYSpin, myYParam);
+ if (aYText == ERR_STRING) {
+ aAttr->setExpressionError(1, "Parameter cannot be created");
+ aAttr->setExpressionInvalid(1, true);
+ updateObject(myFeature);
+ return false;
+ }
+ std::wstring 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->setText(L"", L"", L"");
aAttr->setValue(myXSpin->value(), myYSpin->value(), myZSpin->value());
}
} else {
AttributePointPtr aAttr = std::dynamic_pointer_cast<GeomDataAPI_Point>(attribute());
if (aAttr.get()) {
if (aAttr->isInitialized()) {
- std::string aXText = aAttr->textX();
+ std::wstring aXText = aAttr->textX();
if (aXText.empty()) {
myXSpin->setValue(aAttr->x());
}
else {
- myXSpin->setText(aXText.c_str());
+ myXSpin->setText(QString::fromStdWString(aXText));
}
- std::string aYText = aAttr->textY();
+ std::wstring aYText = aAttr->textY();
if (aYText.empty()) {
myYSpin->setValue(aAttr->y());
}
else {
- myYSpin->setText(aYText.c_str());
+ myYSpin->setText(QString::fromStdWString(aYText));
}
- std::string aZText = aAttr->textZ();
+ std::wstring aZText = aAttr->textZ();
if (aZText.empty()) {
myZSpin->setValue(aAttr->z());
}
else {
- myZSpin->setText(aZText.c_str());
+ myZSpin->setText(QString::fromStdWString(aZText));
}
}
else {
myYSpin->setValue(myDefaultValue[1]);
myZSpin->setValue(myDefaultValue[2]);
}
+ setValueState(Stored);
return true;
}
return false;
//********************************************************************
bool ModuleBase_WidgetPointInput
-::setSelectionCustom(const std::shared_ptr<ModuleBase_ViewerPrs>& thePrs)
+::setSelection(QList<std::shared_ptr<ModuleBase_ViewerPrs>>& 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;
}