diff --git a/src/Mod/Sketcher/Gui/TaskSketcherMessages.cpp b/src/Mod/Sketcher/Gui/TaskSketcherMessages.cpp index 14a3b4cb218f..ac9e777c567f 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherMessages.cpp +++ b/src/Mod/Sketcher/Gui/TaskSketcherMessages.cpp @@ -59,8 +59,8 @@ TaskSketcherMessages::TaskSketcherMessages(ViewProviderSketch *sketchView) : this->groupLayout()->addWidget(proxy); - connectionSetUp = sketchView->signalSetUp.connect(boost::bind(&SketcherGui::TaskSketcherMessages::slotSetUp, this, bp::_1)); - connectionSolved = sketchView->signalSolved.connect(boost::bind(&SketcherGui::TaskSketcherMessages::slotSolved, this, bp::_1)); + connectionSetUp = sketchView->signalSetUp.connect(boost::bind(&SketcherGui::TaskSketcherMessages::slotSetUp, this, bp::_1, bp::_2)); + connectionSolved = sketchView->signalSolved.connect(boost::bind(&SketcherGui::TaskSketcherMessages::slotSolved, this, bp::_1, bp::_2)); ui->labelConstrainStatus->setOpenExternalLinks(false); @@ -72,6 +72,20 @@ TaskSketcherMessages::TaskSketcherMessages(ViewProviderSketch *sketchView) : else sketchView->getSketchObject()->noRecomputes=true; + // Set up the possible state values for the solver status label + const std::string paramGroup ("User parameter:BaseApp/Preferences/Mod/Sketcher"); + ui->labelConstrainStatus->registerState(QString::fromUtf8("empty_sketch"), QColor("black"), paramGroup, "emptySketchMessageColor"); + ui->labelConstrainStatus->registerState(QString::fromUtf8("under_constrained"), QColor("black"), paramGroup, "underconstrainedMessageColor"); + ui->labelConstrainStatus->registerState(QString::fromUtf8("malformed_constraints"), QColor("red"), paramGroup, "malformedConstraintMessageColor"); + ui->labelConstrainStatus->registerState(QString::fromUtf8("conflicting_constraints"), QColor("orangered"), paramGroup, "conflictingConstraintMessageColor"); + ui->labelConstrainStatus->registerState(QString::fromUtf8("redundant_constraints"), QColor("red"), paramGroup, "redundantConstraintMessageColor"); + ui->labelConstrainStatus->registerState(QString::fromUtf8("partially_redundant_constraints"), QColor("royalblue"), paramGroup, "partiallyRedundantConstraintMessageColor"); + ui->labelConstrainStatus->registerState(QString::fromUtf8("fully_constrained"), QColor("green"), paramGroup, "fullyConstrainedMessageColor"); + + ui->labelSolverStatus->registerState(QString::fromUtf8("good"), QColor("green"), QColor(255, 255, 255, 50), paramGroup, "solverGoodMessageColor"); + ui->labelSolverStatus->registerState(QString::fromUtf8("bad"), QColor("red"), QColor(255, 255, 255, 50), paramGroup, "solverBadMessageColor"); + ui->labelSolverStatus->registerState(QString::fromUtf8("neutral"), QColor("black"), paramGroup, "solverNeutralMessageColor"); + /*QObject::connect( ui->labelConstrainStatus, SIGNAL(linkActivated(const QString &)), this , SLOT (on_labelConstrainStatus_linkActivated(const QString &)) @@ -92,13 +106,15 @@ TaskSketcherMessages::~TaskSketcherMessages() connectionSolved.disconnect(); } -void TaskSketcherMessages::slotSetUp(QString msg) +void TaskSketcherMessages::slotSetUp(const QString &state, const QString &msg) { + ui->labelConstrainStatus->setState(state); ui->labelConstrainStatus->setText(msg); } -void TaskSketcherMessages::slotSolved(QString msg) +void TaskSketcherMessages::slotSolved(const QString& state, const QString& msg) { + ui->labelSolverStatus->setState(state); ui->labelSolverStatus->setText(msg); } @@ -115,7 +131,7 @@ void TaskSketcherMessages::on_labelConstrainStatus_linkActivated(const QString & else if( str == QString::fromLatin1("#malformed")) Gui::Application::Instance->commandManager().runCommandByName("Sketcher_SelectMalformedConstraints"); - else + else if( str == QString::fromLatin1("#partiallyredundant")) Gui::Application::Instance->commandManager().runCommandByName("Sketcher_SelectPartiallyRedundantConstraints"); diff --git a/src/Mod/Sketcher/Gui/TaskSketcherMessages.h b/src/Mod/Sketcher/Gui/TaskSketcherMessages.h index 30aae3fbb054..3c2669f81a0c 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherMessages.h +++ b/src/Mod/Sketcher/Gui/TaskSketcherMessages.h @@ -47,8 +47,8 @@ class TaskSketcherMessages : public Gui::TaskView::TaskBox TaskSketcherMessages(ViewProviderSketch *sketchView); ~TaskSketcherMessages(); - void slotSetUp(QString msg); - void slotSolved(QString msg); + void slotSetUp(const QString &state, const QString &msg); + void slotSolved(const QString& state, const QString &msg); private Q_SLOTS: void on_labelConstrainStatus_linkActivated(const QString &); diff --git a/src/Mod/Sketcher/Gui/TaskSketcherMessages.ui b/src/Mod/Sketcher/Gui/TaskSketcherMessages.ui index 720b2c039156..cdfd694b5745 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherMessages.ui +++ b/src/Mod/Sketcher/Gui/TaskSketcherMessages.ui @@ -15,7 +15,7 @@ - + Undefined degrees of freedom @@ -25,7 +25,7 @@ - + Not solved yet @@ -94,6 +94,11 @@ QCheckBox
Gui/PrefWidgets.h
+ + Gui::StatefulLabel + QLabel +
Gui/Widgets.h
+
diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index 3459526a49c8..951fe6650766 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -402,6 +402,9 @@ ViewProviderSketch::ViewProviderSketch() //rubberband selection rubberband = new Gui::Rubberband(); + // Status message states: + + subscribeToParameters(); } @@ -1309,9 +1312,9 @@ bool ViewProviderSketch::mouseMove(const SbVec2s &cursorPos, Gui::View3DInventor if (getSketchObject()->moveTemporaryPoint(GeoId, PosId, vec, false) == 0) { setPositionText(Base::Vector2d(x,y)); draw(true,false); - signalSolved(QString::fromLatin1("Solved in %1 sec").arg(getSolvedSketch().getSolveTime())); + signalSolved(QString::fromUtf8("neutral"), QString::fromLatin1("Solved in %1 sec").arg(getSolvedSketch().getSolveTime())); } else { - signalSolved(QString::fromLatin1("Unsolved (%1 sec)").arg(getSolvedSketch().getSolveTime())); + signalSolved(QString::fromUtf8("bad"), QString::fromLatin1("Unsolved (%1 sec)").arg(getSolvedSketch().getSolveTime())); //Base::Console().Log("Error solving:%d\n",ret); } } @@ -1350,9 +1353,9 @@ bool ViewProviderSketch::mouseMove(const SbVec2s &cursorPos, Gui::View3DInventor if (getSketchObject()->moveTemporaryPoint(edit->DragCurve, Sketcher::none, vec, relative) == 0) { setPositionText(Base::Vector2d(x,y)); draw(true,false); - signalSolved(QString::fromLatin1("Solved in %1 sec").arg(getSolvedSketch().getSolveTime())); + signalSolved(QString::fromUtf8("neutral"), QString::fromLatin1("Solved in %1 sec").arg(getSolvedSketch().getSolveTime())); } else { - signalSolved(QString::fromLatin1("Unsolved (%1 sec)").arg(getSolvedSketch().getSolveTime())); + signalSolved(QString::fromUtf8("bad"), QString::fromLatin1("Unsolved (%1 sec)").arg(getSolvedSketch().getSolveTime())); } } return true; @@ -6591,35 +6594,39 @@ void ViewProviderSketch::UpdateSolverInformation() bool hasMalformed = getSketchObject()->getLastHasMalformedConstraints(); if (getSketchObject()->Geometry.getSize() == 0) { - signalSetUp(tr("Empty sketch")); - signalSolved(QString()); + signalSetUp(QString::fromUtf8("empty_sketch"), tr("Empty sketch")); + signalSolved(QString::fromUtf8("neutral"), QString()); } else if (dofs < 0) { // over-constrained sketch std::string msg; SketchObject::appendConflictMsg(getSketchObject()->getLastConflicting(), msg); - signalSetUp(QString::fromLatin1("%1 %2
%3

") + signalSetUp(QString::fromUtf8("conflicting_constraints"), + QString::fromLatin1("%1 %2
%3
") .arg(tr("Over-constrained sketch")) .arg(tr("(click to select)")) .arg(QString::fromStdString(msg))); - signalSolved(QString()); + signalSolved(QString::fromUtf8("neutral"), QString()); } else if (hasMalformed) { // malformed constraints - signalSetUp(QString::fromLatin1("%1 %2
%3

") + signalSetUp(QString::fromUtf8("malformed_constraints"), + QString::fromLatin1("%1 %2
%3
") .arg(tr("Sketch contains malformed constraints")) .arg(tr("(click to select)")) .arg(appendMalformedMsg(getSketchObject()->getLastMalformedConstraints()))); - signalSolved(QString()); + signalSolved(QString::fromUtf8("neutral"), QString()); } else if (hasConflicts) { // conflicting constraints - signalSetUp(QString::fromLatin1("%1 %2
%3

") + signalSetUp(QString::fromUtf8("conflicting_constraints"), + QString::fromLatin1("%1 %2
%3
") .arg(tr("Sketch contains conflicting constraints")) .arg(tr("(click to select)")) .arg(appendConflictMsg(getSketchObject()->getLastConflicting()))); - signalSolved(QString()); + signalSolved(QString::fromUtf8("neutral"), QString()); } else { if (hasRedundancies) { // redundant constraints - signalSetUp(QString::fromLatin1("%1 %2
%3

") + signalSetUp(QString::fromUtf8("redundant_constraints"), + QString::fromLatin1("%1 %2
%3
") .arg(tr("Sketch contains redundant constraints")) .arg(tr("(click to select)")) .arg(appendRedundantMsg(getSketchObject()->getLastRedundant()))); @@ -6628,7 +6635,7 @@ void ViewProviderSketch::UpdateSolverInformation() QString partiallyRedundantString; if(hasPartiallyRedundant) { - partiallyRedundantString = QString::fromLatin1("
%1 %2
%3

") + partiallyRedundantString = QString::fromLatin1("
%1 %2
%3

") .arg(tr("Sketch contains partially redundant constraints")) .arg(tr("(click to select)")) .arg(appendPartiallyRedundantMsg(getSketchObject()->getLastPartiallyRedundant())); @@ -6641,25 +6648,27 @@ void ViewProviderSketch::UpdateSolverInformation() edit->FullyConstrained = true; if (!hasRedundancies) { - signalSetUp(QString::fromLatin1("%1 %2").arg(tr("Fully constrained sketch")).arg(partiallyRedundantString)); + signalSetUp(QString::fromUtf8("fully_constrained"), + partiallyRedundantString + tr("Fully constrained sketch")); } } else if (!hasRedundancies) { QString infoString; - if (dofs == 1) - signalSetUp(tr("Under-constrained sketch with 1 degree of freedom. %1") + signalSetUp(QString::fromUtf8("under_constrained"), + tr("Under-constrained sketch with 1 degree of freedom. %1") .arg(partiallyRedundantString)); else - signalSetUp(tr("Under-constrained sketch with %1 degrees of freedom. %2") + signalSetUp(QString::fromUtf8("under_constrained"), + tr("Under-constrained sketch with %1 degrees of freedom. %2") .arg(dofs) .arg(partiallyRedundantString)); } - signalSolved(QString::fromLatin1("%1").arg(tr("Solved in %1 sec").arg(getSketchObject()->getLastSolveTime()))); + signalSolved(QString::fromUtf8("good"), tr("Solved in %1 sec").arg(getSketchObject()->getLastSolveTime())); } else { - signalSolved(QString::fromLatin1("%1").arg(tr("Unsolved (%1 sec)").arg(getSketchObject()->getLastSolveTime()))); + signalSolved(QString::fromUtf8("bad"), tr("Unsolved (%1 sec)").arg(getSketchObject()->getLastSolveTime())); } } } diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.h b/src/Mod/Sketcher/Gui/ViewProviderSketch.h index 598ff154c955..b086f1554dc9 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.h +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.h @@ -273,9 +273,9 @@ class SketcherGuiExport ViewProviderSketch : public PartGui::ViewProvider2DObjec /// signals if the constraints list has changed boost::signals2::signal signalConstraintsChanged; /// signals if the sketch has been set up - boost::signals2::signal signalSetUp; + boost::signals2::signal signalSetUp; /// signals if the sketch has been solved - boost::signals2::signal signalSolved; + boost::signals2::signal signalSolved; /// signals if the elements list has changed boost::signals2::signal signalElementsChanged;