diff --git a/src/Mod/Sketcher/Gui/TaskDlgEditSketch.cpp b/src/Mod/Sketcher/Gui/TaskDlgEditSketch.cpp index 890ba3468b..108831ed4d 100644 --- a/src/Mod/Sketcher/Gui/TaskDlgEditSketch.cpp +++ b/src/Mod/Sketcher/Gui/TaskDlgEditSketch.cpp @@ -56,6 +56,8 @@ TaskDlgEditSketch::TaskDlgEditSketch(ViewProviderSketch *sketchView) Content.push_back(Constraints); Content.push_back(Elements); + if (!hGrp->GetBool("ExpandedMessagesWidget",true)) + Messages->hideGroupBox(); if (!hGrp->GetBool("ExpandedSolverAdvancedWidget",false)) SolverAdvanced->hideGroupBox(); if (!hGrp->GetBool("ExpandedConstraintsWidget",true)) @@ -94,6 +96,7 @@ bool TaskDlgEditSketch::accept() bool TaskDlgEditSketch::reject() { ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); + hGrp->SetBool("ExpandedMessagesWidget",Messages->isGroupVisible()); hGrp->SetBool("ExpandedSolverAdvancedWidget",SolverAdvanced->isGroupVisible()); hGrp->SetBool("ExpandedConstraintsWidget",Constraints->isGroupVisible()); hGrp->SetBool("ExpandedElementsWidget",Elements->isGroupVisible()); diff --git a/src/Mod/Sketcher/Gui/TaskSketcherMessages.cpp b/src/Mod/Sketcher/Gui/TaskSketcherMessages.cpp index 13ed62cff4..aa15f3accd 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherMessages.cpp +++ b/src/Mod/Sketcher/Gui/TaskSketcherMessages.cpp @@ -21,9 +21,6 @@ ***************************************************************************/ #include "PreCompiled.h" -#ifndef _PreComp_ -# include -#endif #include #include @@ -39,17 +36,30 @@ using namespace SketcherGui; using namespace Gui::TaskView; namespace bp = boost::placeholders; -TaskSketcherMessages::TaskSketcherMessages(ViewProviderSketch* sketchView) : - QWidget(), +TaskSketcherMessages::TaskSketcherMessages(ViewProviderSketch *sketchView) : + TaskBox(Gui::BitmapFactory().pixmap("document-new"), tr("Solver messages"), true, nullptr), sketchView(sketchView), ui(new Ui_TaskSketcherMessages) { - ui->setupUi(this); + // we need a separate container widget to add all controls to + proxy = new QWidget(this); + ui->setupUi(proxy); + QMetaObject::connectSlotsByName(this); + + this->groupLayout()->addWidget(proxy); connectionSetUp = sketchView->signalSetUp.connect(boost::bind(&SketcherGui::TaskSketcherMessages::slotSetUp, this, bp::_1, bp::_2, bp::_3, bp::_4)); ui->labelConstrainStatus->setOpenExternalLinks(false); + ui->autoUpdate->onRestore(); + ui->autoRemoveRedundants->onRestore(); + + if(ui->autoUpdate->isChecked()) + sketchView->getSketchObject()->noRecomputes=false; + else + sketchView->getSketchObject()->noRecomputes=true; + // Set up the possible state values for the status label ui->labelConstrainStatus->setParameterGroup("User parameter:BaseApp/Preferences/Mod/Sketcher/General"); ui->labelConstrainStatus->registerState(QString::fromUtf8("empty_sketch"), QColor("black"), std::string("EmptySketchMessageColor")); @@ -67,27 +77,14 @@ TaskSketcherMessages::TaskSketcherMessages(ViewProviderSketch* sketchView) : connect(ui->labelConstrainStatusLink, &Gui::UrlLabel::linkClicked, this, &TaskSketcherMessages::on_labelConstrainStatusLink_linkClicked); - //Set Auto Update in the 'Manual Update' button menu. - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - bool state = hGrp->GetBool("AutoRecompute", false); - - sketchView->getSketchObject()->noRecomputes = !state; - - QAction* action = new QAction(tr("Auto update"), this); - action->setToolTip(tr("Executes a recomputation of active document after every sketch action")); - action->setCheckable(true); - action->setChecked(state); - ui->manualUpdate->addAction(action); - - QObject::connect( - qAsConst(ui->manualUpdate)->actions()[0], &QAction::changed, - this, &TaskSketcherMessages::onAutoUpdateStateChanged - ); - /*QObject::connect( ui->labelConstrainStatus, SIGNAL(linkActivated(const QString &)), this , SLOT (on_labelConstrainStatus_linkActivated(const QString &)) ); + QObject::connect( + ui->autoUpdate, SIGNAL(stateChanged(int)), + this , SLOT (on_autoUpdate_stateChanged(int)) + ); QObject::connect( ui->manualUpdate, SIGNAL(clicked(bool)), this , SLOT (on_manualUpdate_clicked(bool)) @@ -126,13 +123,22 @@ void TaskSketcherMessages::on_labelConstrainStatusLink_linkClicked(const QString } -void TaskSketcherMessages::onAutoUpdateStateChanged() +void TaskSketcherMessages::on_autoUpdate_stateChanged(int state) { - bool state = qAsConst(ui->manualUpdate)->actions()[0]->isChecked(); + if(state==Qt::Checked) { + sketchView->getSketchObject()->noRecomputes=false; + ui->autoUpdate->onSave(); + } + else if (state==Qt::Unchecked) { + sketchView->getSketchObject()->noRecomputes=true; + ui->autoUpdate->onSave(); + } +} - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher"); - hGrp->SetBool("AutoRecompute", state); - sketchView->getSketchObject()->noRecomputes = !state; +void TaskSketcherMessages::on_autoRemoveRedundants_stateChanged(int state) +{ + Q_UNUSED(state); + ui->autoRemoveRedundants->onSave(); } void TaskSketcherMessages::on_manualUpdate_clicked(bool checked) diff --git a/src/Mod/Sketcher/Gui/TaskSketcherMessages.h b/src/Mod/Sketcher/Gui/TaskSketcherMessages.h index 956702ade0..7d3a462a2d 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherMessages.h +++ b/src/Mod/Sketcher/Gui/TaskSketcherMessages.h @@ -39,19 +39,20 @@ namespace SketcherGui { class ViewProviderSketch; -class TaskSketcherMessages : public QWidget +class TaskSketcherMessages : public Gui::TaskView::TaskBox { Q_OBJECT public: - explicit TaskSketcherMessages(ViewProviderSketch* sketchView); + explicit TaskSketcherMessages(ViewProviderSketch *sketchView); ~TaskSketcherMessages() override; - void slotSetUp(const QString& state, const QString& msg, const QString& link, const QString& linkText); + void slotSetUp(const QString &state, const QString &msg, const QString& link, const QString& linkText); private Q_SLOTS: void on_labelConstrainStatusLink_linkClicked(const QString &); - void onAutoUpdateStateChanged(); + void on_autoUpdate_stateChanged(int state); + void on_autoRemoveRedundants_stateChanged(int state); void on_manualUpdate_clicked(bool checked); protected: @@ -59,6 +60,7 @@ protected: Connection connectionSetUp; private: + QWidget* proxy; std::unique_ptr ui; }; diff --git a/src/Mod/Sketcher/Gui/TaskSketcherMessages.ui b/src/Mod/Sketcher/Gui/TaskSketcherMessages.ui index 962fc0e934..8c95744c99 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherMessages.ui +++ b/src/Mod/Sketcher/Gui/TaskSketcherMessages.ui @@ -13,45 +13,90 @@ Form - + - - - DOF - - + + + + + DOF + + + + + + + Link + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + - - - Link - - - - - - - - 0 - 0 - - + - Forces recomputation of active document + New constraints that would be redundant will automatically be removed - - + Auto remove redundants - - - :/icons/view-refresh.svg:/icons/view-refresh.svg + + false - - QToolButton::MenuButtonPopup + + AutoRemoveRedundants + + + Mod/Sketcher + + + + + + Executes a recomputation of active document after every sketch action + + + Auto update + + + false + + + AutoRecompute + + + Mod/Sketcher + + + + + + + Forces recomputation of active document + + + Update + + + + +