From a0316e9400c4d464e52eafa80490bca1b32ef589 Mon Sep 17 00:00:00 2001 From: mwganson Date: Thu, 29 Aug 2019 18:46:32 -0500 Subject: [PATCH] [Geometry check] open settings page first before running check, add 2 new navigation buttons: settings and results, allow to collapse results box --- src/Mod/Part/Gui/TaskCheckGeometry.cpp | 130 ++++++++++++++++++------- src/Mod/Part/Gui/TaskCheckGeometry.h | 6 ++ 2 files changed, 99 insertions(+), 37 deletions(-) diff --git a/src/Mod/Part/Gui/TaskCheckGeometry.cpp b/src/Mod/Part/Gui/TaskCheckGeometry.cpp index acb8f83a15..64465f92ad 100644 --- a/src/Mod/Part/Gui/TaskCheckGeometry.cpp +++ b/src/Mod/Part/Gui/TaskCheckGeometry.cpp @@ -387,10 +387,6 @@ TaskCheckGeometryResults::TaskCheckGeometryResults(QWidget *parent) : QWidget(pa this->setWindowTitle(tr("Check Geometry Results")); setupInterface(); setupFunctionMap(); - ParameterGrp::handle group = App::GetApplication().GetUserParameter(). - GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod")->GetGroup("Part")->GetGroup("CheckGeometry"); - if (group->GetBool("AutoRun", false)) - goCheck(); } TaskCheckGeometryResults::~TaskCheckGeometryResults() @@ -401,7 +397,7 @@ TaskCheckGeometryResults::~TaskCheckGeometryResults() void TaskCheckGeometryResults::setupInterface() { message = new QLabel(this); - message->setText(tr("Click Run check button to run check")); + message->setText(tr("Check is running...")); model = new ResultModel(this); treeView = new QTreeView(this); treeView->setModel(model); @@ -470,8 +466,6 @@ void TaskCheckGeometryResults::goCheck() ParameterGrp::handle group = App::GetApplication().GetUserParameter(). GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod")->GetGroup("Part")->GetGroup("CheckGeometry"); bool runSignal = group->GetBool("RunBOPCheck", false); - //for now, user has edit the config file to turn it on. - //following line ensures that the config file has the setting. group->SetBool("RunBOPCheck", runSignal); if (runSignal) { std::string label = "Checking "; @@ -955,12 +949,16 @@ void PartGui::goSetupResultUnorientableShapeFace(ResultEntry *entry) TaskCheckGeometryDialog::TaskCheckGeometryDialog() : widget(0), contentLabel(0) { + ParameterGrp::handle group = App::GetApplication().GetUserParameter(). + GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod")->GetGroup("Part")->GetGroup("CheckGeometry"); + bool expandShapeContent = group->GetBool("ExpandShapeContent", false); + this->setButtonPosition(TaskDialog::South); widget = new TaskCheckGeometryResults(); taskbox = new Gui::TaskView::TaskBox( Gui::BitmapFactory().pixmap("Part_CheckGeometry"), - widget->windowTitle(), false, 0); + widget->windowTitle(), true, 0); taskbox->groupLayout()->addWidget(widget); Content.push_back(taskbox); @@ -969,23 +967,19 @@ TaskCheckGeometryDialog::TaskCheckGeometryDialog() : widget(0), contentLabel(0) shapeContentBox = new Gui::TaskView::TaskBox(Gui::BitmapFactory().pixmap("Part_CheckGeometry"), tr("Shape Content"), true, 0); shapeContentBox->groupLayout()->addWidget(contentLabel); - shapeContentBox->hideGroupBox(); + if (!expandShapeContent){ + shapeContentBox->hideGroupBox(); + } Content.push_back(shapeContentBox); - ParameterGrp::handle group = App::GetApplication().GetUserParameter(). - GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod")->GetGroup("Part")->GetGroup("CheckGeometry"); - settingsBox = new Gui::TaskView::TaskBox(Gui::BitmapFactory().pixmap("Part_CheckGeometry"), tr("Settings"), true, 0); - settingsBox->hideGroupBox(); Content.push_back(settingsBox); autoRunCheckBox = new QCheckBox(); - autoRunCheckBox->setText(tr("Automatically run check")); + autoRunCheckBox->setText(tr("Skip settings page")); autoRunCheckBox->setToolTip(tr("\ -Automatically run the geometry check when opening this task. \n\ -If unchecked, you must click Run check button to run the check. If checked \n\ -you must wait for the check to finish before this dialog appears. \n\ +Skip this settings page and run the geometry check automatically.\n\ Default: false")); autoRunCheckBox->setChecked(group->GetBool("AutoRun", false)); connect(autoRunCheckBox, SIGNAL(toggled(bool)), @@ -1021,83 +1015,105 @@ but more stable. Default: false")); this, SLOT(on_logErrorsCheckBox_toggled(bool))); settingsBox->groupLayout()->addWidget(logErrorsCheckBox); + expandShapeContentCheckBox = new QCheckBox(); + expandShapeContentCheckBox->setText(tr("Expand shape content")); + expandShapeContentCheckBox->setToolTip(tr("\ +Expand shape content. Changes will take effect next time you use \n\ +the check geometry tool. Default: false")); + expandShapeContentCheckBox->setChecked(group->GetBool("ExpandShapeContent", false)); + connect(expandShapeContentCheckBox, SIGNAL(toggled(bool)), + this, SLOT(on_expandShapeContentCheckBox_toggled(bool))); + settingsBox->groupLayout()->addWidget(expandShapeContentCheckBox); + settingsBox->groupLayout()->addWidget(new QLabel(tr("\nIndividual BOP Checks:"))); argumentTypeModeCheckBox = new QCheckBox(); - argumentTypeModeCheckBox->setText(tr(" BOPAlgo BadType")); - argumentTypeModeCheckBox->setToolTip(tr("Check for bad argument types. (ArgumentTypeMode check) Default: true")); + argumentTypeModeCheckBox->setText(tr(" Bad type")); + argumentTypeModeCheckBox->setToolTip(tr("Check for bad argument types. Default: true")); argumentTypeModeCheckBox->setChecked(group->GetBool("ArgumentTypeMode", true)); connect(argumentTypeModeCheckBox, SIGNAL(toggled(bool)), this, SLOT(on_argumentTypeModeCheckBox_toggled(bool))); settingsBox->groupLayout()->addWidget(argumentTypeModeCheckBox); selfInterModeCheckBox = new QCheckBox(); - selfInterModeCheckBox->setText(tr(" BOPAlgo SelfIntersect")); - selfInterModeCheckBox->setToolTip(tr("Check for self-intersections. (SelfInterMode check) Default: true")); + selfInterModeCheckBox->setText(tr(" Self-intersect")); + selfInterModeCheckBox->setToolTip(tr("Check for self-intersections. Default: true")); selfInterModeCheckBox->setChecked(group->GetBool("SelfInterMode", true)); connect(selfInterModeCheckBox, SIGNAL(toggled(bool)), this, SLOT(on_selfInterModeCheckBox_toggled(bool))); settingsBox->groupLayout()->addWidget(selfInterModeCheckBox); smallEdgeModeCheckBox = new QCheckBox(); - smallEdgeModeCheckBox->setText(tr(" BOPAlgo TooSmallEdge")); - smallEdgeModeCheckBox->setToolTip(tr("Check for edges that are too small (SmallEdgeMode check). Default: true")); + smallEdgeModeCheckBox->setText(tr(" Too small edge")); + smallEdgeModeCheckBox->setToolTip(tr("Check for edges that are too small. Default: true")); smallEdgeModeCheckBox->setChecked(group->GetBool("SmallEdgeMode", true)); connect(smallEdgeModeCheckBox, SIGNAL(toggled(bool)), this, SLOT(on_smallEdgeModeCheckBox_toggled(bool))); settingsBox->groupLayout()->addWidget(smallEdgeModeCheckBox); rebuildFaceModeCheckBox = new QCheckBox(); - rebuildFaceModeCheckBox->setText(tr(" BOPAlgo NonRecoverableFace")); - rebuildFaceModeCheckBox->setToolTip(tr("Check for non-recoverable faces (RebuildFaceMode check). Default: true")); + rebuildFaceModeCheckBox->setText(tr(" Nonrecoverable face")); + rebuildFaceModeCheckBox->setToolTip(tr("Check for nonrecoverable faces. Default: true")); rebuildFaceModeCheckBox->setChecked(group->GetBool("RebuildFaceMode", true)); connect(rebuildFaceModeCheckBox, SIGNAL(toggled(bool)), this, SLOT(on_rebuildFaceModeCheckBox_toggled(bool))); settingsBox->groupLayout()->addWidget(rebuildFaceModeCheckBox); continuityModeCheckBox = new QCheckBox(); - continuityModeCheckBox->setText(tr(" BOPAlgo GeomAbs_C0")); - continuityModeCheckBox->setToolTip(tr("Check for continuity errors (ContinuityMode check). Default: true")); + continuityModeCheckBox->setText(tr(" Continuity")); + continuityModeCheckBox->setToolTip(tr("Check for continuity. Default: true")); continuityModeCheckBox->setChecked(group->GetBool("ContinuityMode", true)); connect(continuityModeCheckBox, SIGNAL(toggled(bool)), this, SLOT(on_continuityModeCheckBox_toggled(bool))); settingsBox->groupLayout()->addWidget(continuityModeCheckBox); tangentModeCheckBox = new QCheckBox(); - tangentModeCheckBox->setText(tr(" BOPAlgo IncompatibilityOfFace")); - tangentModeCheckBox->setToolTip(tr("Check for incompatible faces (TangentMode check). Default: true")); + tangentModeCheckBox->setText(tr(" Incompatibility of face")); + tangentModeCheckBox->setToolTip(tr("Check for incompatible faces. Default: true")); tangentModeCheckBox->setChecked(group->GetBool("TangentMode", true)); connect(tangentModeCheckBox, SIGNAL(toggled(bool)), this, SLOT(on_tangentModeCheckBox_toggled(bool))); settingsBox->groupLayout()->addWidget(tangentModeCheckBox); mergeVertexModeCheckBox = new QCheckBox(); - mergeVertexModeCheckBox->setText(tr(" BOPAlgo IncompatibilityOfVertex")); - mergeVertexModeCheckBox->setToolTip(tr("Check for incompatible vertices (MergeVertexMode check). Default: true")); + mergeVertexModeCheckBox->setText(tr(" Incompatibility of vertex")); + mergeVertexModeCheckBox->setToolTip(tr("Check for incompatible vertices. Default: true")); mergeVertexModeCheckBox->setChecked(group->GetBool("MergeVertexMode", true)); connect(mergeVertexModeCheckBox, SIGNAL(toggled(bool)), this, SLOT(on_mergeVertexModeCheckBox_toggled(bool))); settingsBox->groupLayout()->addWidget(mergeVertexModeCheckBox); mergeEdgeModeCheckBox = new QCheckBox(); - mergeEdgeModeCheckBox->setText(tr(" BOPAlgo IncompatibilityOfEdge")); - mergeEdgeModeCheckBox->setToolTip(tr("Check for incompatible edges (MergeEdgeMode check). Default: true")); + mergeEdgeModeCheckBox->setText(tr(" Incompatibility of edge")); + mergeEdgeModeCheckBox->setToolTip(tr("Check for incompatible edges. Default: true")); mergeEdgeModeCheckBox->setChecked(group->GetBool("MergeEdgeMode", true)); connect(mergeEdgeModeCheckBox, SIGNAL(toggled(bool)), this, SLOT(on_mergeEdgeModeCheckBox_toggled(bool))); settingsBox->groupLayout()->addWidget(mergeEdgeModeCheckBox); curveOnSurfaceModeCheckBox = new QCheckBox(); - curveOnSurfaceModeCheckBox->setText(tr(" BOPAlgo InvalidCurveOnSurface")); - curveOnSurfaceModeCheckBox->setToolTip(tr("Check for invalid curves on surfaces (InvalidCurveOnSurfaceMode check). Default: true")); + curveOnSurfaceModeCheckBox->setText(tr(" Invalid curve on surface")); + curveOnSurfaceModeCheckBox->setToolTip(tr("Check for invalid curves on surfaces. Default: true")); curveOnSurfaceModeCheckBox->setChecked(group->GetBool("CurveOnSurfaceMode", true)); connect(curveOnSurfaceModeCheckBox, SIGNAL(toggled(bool)), this, SLOT(on_curveOnSurfaceModeCheckBox_toggled(bool))); settingsBox->groupLayout()->addWidget(curveOnSurfaceModeCheckBox); + if (group->GetBool("AutoRun",false)){ + settingsBox->hide(); + widget->goCheck(); + contentLabel->setText(widget->getShapeContentString()); + } else { + taskbox->hide(); + shapeContentBox->hide(); + } } bool TaskCheckGeometryDialog::accept() { + settingsBtn->setEnabled(true); + settingsBox->hide(); + shapeContentBox->show(); + taskbox->show(); widget->goCheck(); contentLabel->setText(widget->getShapeContentString()); return false; @@ -1108,10 +1124,43 @@ bool TaskCheckGeometryDialog::reject() return true; } +void TaskCheckGeometryDialog::on_clicked(QAbstractButton *btn) +{ + /** when ok (run check) is clicked or when close is clicked + * the appropriate accept() or reject() is called already + * all we need to do here is enable / disable / show / hide + * ui elements + */ + + if(btn == okBtn){ + settingsBtn->setEnabled(true); + } else if (btn == settingsBtn){ + settingsBtn->setEnabled(false); + taskbox->hide(); + shapeContentBox->hide(); + settingsBox->show(); + resultsBtn->setEnabled(true); + } else if (btn == resultsBtn){ + settingsBtn->setEnabled(true); + taskbox->show(); + shapeContentBox->show(); + settingsBox->hide(); + resultsBtn->setEnabled(false); + } +} + void TaskCheckGeometryDialog::modifyStandardButtons(QDialogButtonBox* box) { - QPushButton* btn = box->button(QDialogButtonBox::Ok); - btn->setText(tr("Run check")); + okBtn = box->button(QDialogButtonBox::Ok); + okBtn->setText(tr("Run check")); + settingsBtn = box->addButton(tr("Settings"),QDialogButtonBox::ActionRole); + ParameterGrp::handle group = App::GetApplication().GetUserParameter(). + GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod")->GetGroup("Part")->GetGroup("CheckGeometry"); + if(!group->GetBool("AutoRun",false)) + settingsBtn->setEnabled(false); + resultsBtn = box->addButton(tr("Results"),QDialogButtonBox::ActionRole); + resultsBtn->setEnabled(false); + connect(box, SIGNAL(clicked(QAbstractButton*)), this, SLOT(on_clicked(QAbstractButton*))); } void TaskCheckGeometryDialog::on_autoRunCheckBox_toggled(bool isOn) @@ -1149,6 +1198,13 @@ void TaskCheckGeometryDialog::on_argumentTypeModeCheckBox_toggled(bool isOn) group->SetBool("ArgumentTypeMode", isOn); } +void TaskCheckGeometryDialog::on_expandShapeContentCheckBox_toggled(bool isOn) +{ + ParameterGrp::handle group = App::GetApplication().GetUserParameter(). + GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod")->GetGroup("Part")->GetGroup("CheckGeometry"); + group->SetBool("ExpandShapeContent", isOn); +} + void TaskCheckGeometryDialog::on_selfInterModeCheckBox_toggled(bool isOn) { ParameterGrp::handle group = App::GetApplication().GetUserParameter(). diff --git a/src/Mod/Part/Gui/TaskCheckGeometry.h b/src/Mod/Part/Gui/TaskCheckGeometry.h index 3138da9450..9c4349a179 100644 --- a/src/Mod/Part/Gui/TaskCheckGeometry.h +++ b/src/Mod/Part/Gui/TaskCheckGeometry.h @@ -147,6 +147,7 @@ private Q_SLOTS: void on_runBOPCheckBox_toggled(bool isOn); void on_runSingleThreadedCheckBox_toggled(bool isOn); void on_logErrorsCheckBox_toggled(bool isOn); + void on_expandShapeContentCheckBox_toggled(bool isOn); void on_autoRunCheckBox_toggled(bool isOn); void on_argumentTypeModeCheckBox_toggled(bool isOn); void on_selfInterModeCheckBox_toggled(bool isOn); @@ -157,6 +158,7 @@ private Q_SLOTS: void on_mergeVertexModeCheckBox_toggled(bool isOn); void on_mergeEdgeModeCheckBox_toggled(bool isOn); void on_curveOnSurfaceModeCheckBox_toggled(bool isOn); + void on_clicked(QAbstractButton* btn); private: TaskCheckGeometryResults* widget; @@ -168,6 +170,7 @@ private: QCheckBox *runBOPCheckBox; QCheckBox *runSingleThreadedCheckBox; QCheckBox *logErrorsCheckBox; + QCheckBox *expandShapeContentCheckBox; QCheckBox *argumentTypeModeCheckBox; QCheckBox *selfInterModeCheckBox; QCheckBox *smallEdgeModeCheckBox; @@ -180,6 +183,9 @@ private: bool accept(); bool reject(); virtual void modifyStandardButtons(QDialogButtonBox*); + QPushButton *okBtn; + QPushButton *settingsBtn; + QPushButton *resultsBtn; }; class BOPProgressIndicator : public Message_ProgressIndicator