diff --git a/src/Gui/Dialogs/DlgExpressionInput.cpp b/src/Gui/Dialogs/DlgExpressionInput.cpp index ce0b0dc260..c623764cd7 100644 --- a/src/Gui/Dialogs/DlgExpressionInput.cpp +++ b/src/Gui/Dialogs/DlgExpressionInput.cpp @@ -858,22 +858,19 @@ void DlgExpressionInput::reportVarSetInfo(const QString& message) } } -static QString buildErrorStyle(const char* widgetName) +static void setErrorState(QWidget* widget, bool on) { - return QStringLiteral("#%1 {" - " border:1px solid #d93025;" - "}" - "#%1:focus {" - " border:1px solid #ff3b30;" - "}") - .arg(QLatin1String(widgetName)); + widget->setProperty("validationState", on ? QStringLiteral("error") : QVariant()); + + widget->style()->unpolish(widget); + widget->style()->polish(widget); } bool DlgExpressionInput::reportGroup(const QString& nameGroup) { QString message; if (!isGroupNameValid(nameGroup, message)) { - comboBoxGroup.setStyleSheet(buildErrorStyle("comboBoxGroup")); + setErrorState(&comboBoxGroup, true); reportVarSetInfo(message); return true; } @@ -890,7 +887,7 @@ bool DlgExpressionInput::reportName() App::DocumentObject* obj = doc->getObject(nameVarSet.toUtf8()); QString message; if (!isPropertyNameValid(nameProp, obj, message)) { - ui->lineEditPropNew->setStyleSheet(buildErrorStyle("lineEditPropNew")); + setErrorState(ui->lineEditPropNew, true); reportVarSetInfo(message); return true; } @@ -925,8 +922,8 @@ void DlgExpressionInput::updateVarSetInfo(bool checkExpr) bool DlgExpressionInput::needReportOnVarSet() { - ui->lineEditPropNew->setStyleSheet(QString()); - comboBoxGroup.setStyleSheet(QString()); + setErrorState(ui->lineEditPropNew, false); + setErrorState(&comboBoxGroup, false); return reportGroup(comboBoxGroup.currentText()) || reportName(); } diff --git a/src/Gui/Stylesheets/FreeCAD.qss b/src/Gui/Stylesheets/FreeCAD.qss index a89192ffc3..902b3f0d8d 100644 --- a/src/Gui/Stylesheets/FreeCAD.qss +++ b/src/Gui/Stylesheets/FreeCAD.qss @@ -2650,3 +2650,18 @@ QMainWindow QHeaderView::section::horizontal::first, QHeaderView::section::horiz Gui--Dialog--DocumentRecovery QTreeView { border: 1px solid @GeneralBorderColor; } + +/*================================================================================================== +Input validation +==================================================================================================*/ +QLineEdit[validationState="error"], +QComboBox[validationState="error"] { + border: 1px solid #d93025; + border-image: none; +} + +QLineEdit[validationState="error"]:focus, +QComboBox[validationState="error"]:focus { + border: 1px solid #ff3b30; + border-image: none; +}