[Sketcher] Migrate constraint and solver status to StatefulLabel
This commit is contained in:
@@ -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");
|
||||
|
||||
|
||||
@@ -47,8 +47,8 @@ public:
|
||||
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 &);
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="labelConstrainStatus">
|
||||
<widget class="Gui::StatefulLabel" name="labelConstrainStatus">
|
||||
<property name="text">
|
||||
<string>Undefined degrees of freedom</string>
|
||||
</property>
|
||||
@@ -25,7 +25,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="labelSolverStatus">
|
||||
<widget class="Gui::StatefulLabel" name="labelSolverStatus">
|
||||
<property name="text">
|
||||
<string>Not solved yet</string>
|
||||
</property>
|
||||
@@ -94,6 +94,11 @@
|
||||
<extends>QCheckBox</extends>
|
||||
<header>Gui/PrefWidgets.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>Gui::StatefulLabel</class>
|
||||
<extends>QLabel</extends>
|
||||
<header>Gui/Widgets.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
|
||||
@@ -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("<font color='red'>%1 <a href=\"#conflicting\"><span style=\" text-decoration: underline; color:#0000ff; background-color: #F8F8FF;\">%2</span></a><br/>%3</font><br/>")
|
||||
signalSetUp(QString::fromUtf8("conflicting_constraints"),
|
||||
QString::fromLatin1("%1 <a href=\"#conflicting\"><span style=\" text-decoration: underline; color:#0000ff; background-color: #F8F8FF;\">%2</span></a><br/>%3<br/>")
|
||||
.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("<font color='red'>%1 <a href=\"#malformed\"><span style=\" text-decoration: underline; color:#0000ff; background-color: #F8F8FF;\">%2</span></a><br/>%3</font><br/>")
|
||||
signalSetUp(QString::fromUtf8("malformed_constraints"),
|
||||
QString::fromLatin1("%1 <a href=\"#malformed\"><span style=\" text-decoration: underline; color:#0000ff; background-color: #F8F8FF;\">%2</span></a><br/>%3<br/>")
|
||||
.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("<font color='red'>%1 <a href=\"#conflicting\"><span style=\" text-decoration: underline; color:#0000ff; background-color: #F8F8FF;\">%2</span></a><br/>%3</font><br/>")
|
||||
signalSetUp(QString::fromUtf8("conflicting_constraints"),
|
||||
QString::fromLatin1("%1 <a href=\"#conflicting\"><span style=\" text-decoration: underline; color:#0000ff; background-color: #F8F8FF;\">%2</span></a><br/>%3<br/>")
|
||||
.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("<font color='orangered'>%1 <a href=\"#redundant\"><span style=\" text-decoration: underline; color:#0000ff; background-color: #F8F8FF;\">%2</span></a><br/>%3</font><br/>")
|
||||
signalSetUp(QString::fromUtf8("redundant_constraints"),
|
||||
QString::fromLatin1("%1 <a href=\"#redundant\"><span style=\" text-decoration: underline; color:#0000ff; background-color: #F8F8FF;\">%2</span></a><br/>%3<br/>")
|
||||
.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("<br/><font color='royalblue'><span style=\"background-color: #ececec;\">%1 <a href=\"#partiallyredundant\"><span style=\" text-decoration: underline; color:#0000ff; background-color: #F8F8FF;\">%2</span></a><br/>%3</span></font><br/>")
|
||||
partiallyRedundantString = QString::fromLatin1("<br/><span style=\"background-color: rgba(255,255,255,50) ;\">%1 <a href=\"#partiallyredundant\"><span style=\" text-decoration: underline; color:#0000ff; background-color: #F8F8FF;\">%2</span></a><br/>%3</span><br/>")
|
||||
.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("<font color='green'><span style=\"color:#008000; background-color: #ececec;\">%1</font></span> %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 <a href=\"#dofs\"><span style=\" text-decoration: underline; color:#0000ff; background-color: #F8F8FF;\">1 degree</span></a> of freedom. %1")
|
||||
signalSetUp(QString::fromUtf8("under_constrained"),
|
||||
tr("Under-constrained sketch with <a href=\"#dofs\"><span style=\" text-decoration: underline; color:#0000ff; background-color: #F8F8FF;\">1 degree</span></a> of freedom. %1")
|
||||
.arg(partiallyRedundantString));
|
||||
else
|
||||
signalSetUp(tr("Under-constrained sketch with <a href=\"#dofs\"><span style=\" text-decoration: underline; color:#0000ff; background-color: #F8F8FF;\">%1 degrees</span></a> of freedom. %2")
|
||||
signalSetUp(QString::fromUtf8("under_constrained"),
|
||||
tr("Under-constrained sketch with <a href=\"#dofs\"><span style=\" text-decoration: underline; color:#0000ff; background-color: #F8F8FF;\">%1 degrees</span></a> of freedom. %2")
|
||||
.arg(dofs)
|
||||
.arg(partiallyRedundantString));
|
||||
}
|
||||
|
||||
signalSolved(QString::fromLatin1("<font color='green'><span style=\"color:#008000; background-color: #ececec;\">%1</font></span>").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("<font color='red'>%1</font>").arg(tr("Unsolved (%1 sec)").arg(getSketchObject()->getLastSolveTime())));
|
||||
signalSolved(QString::fromUtf8("bad"), tr("Unsolved (%1 sec)").arg(getSketchObject()->getLastSolveTime()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -273,9 +273,9 @@ public:
|
||||
/// signals if the constraints list has changed
|
||||
boost::signals2::signal<void ()> signalConstraintsChanged;
|
||||
/// signals if the sketch has been set up
|
||||
boost::signals2::signal<void (QString msg)> signalSetUp;
|
||||
boost::signals2::signal<void (const QString &state, const QString &msg)> signalSetUp;
|
||||
/// signals if the sketch has been solved
|
||||
boost::signals2::signal<void (QString msg)> signalSolved;
|
||||
boost::signals2::signal<void (const QString &state, const QString &msg)> signalSolved;
|
||||
/// signals if the elements list has changed
|
||||
boost::signals2::signal<void ()> signalElementsChanged;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user