From 2824aceddacd26776167f1cef8ce178afe39a3ff Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 12 Feb 2021 15:55:26 +0100 Subject: [PATCH] TechDraw: fixes for dimension feature: * reimplement ViewProviderDimension::setupContextMenu() to show menu item to start editing it * fix TaskDimension::accept() and TaskDimension::reject() --- src/Mod/TechDraw/Gui/TaskDimension.cpp | 32 ++++++---------- src/Mod/TechDraw/Gui/TaskDimension.h | 5 +-- .../TechDraw/Gui/ViewProviderDimension.cpp | 37 ++++++++++++++++--- src/Mod/TechDraw/Gui/ViewProviderDimension.h | 4 ++ 4 files changed, 48 insertions(+), 30 deletions(-) diff --git a/src/Mod/TechDraw/Gui/TaskDimension.cpp b/src/Mod/TechDraw/Gui/TaskDimension.cpp index 83d8690255..a3baad3bb1 100644 --- a/src/Mod/TechDraw/Gui/TaskDimension.cpp +++ b/src/Mod/TechDraw/Gui/TaskDimension.cpp @@ -133,32 +133,24 @@ TaskDimension::~TaskDimension() bool TaskDimension::accept() { - m_parent->dvDimension->TheoreticalExact.setValue(ui->cbTheoreticallyExact->isChecked()); - m_parent->dvDimension->EqualTolerance.setValue(ui->cbEqualTolerance->isChecked()); - m_parent->dvDimension->OverTolerance.setValue(ui->qsbOvertolerance->value().getValue()); - m_parent->dvDimension->UnderTolerance.setValue(ui->qsbUndertolerance->value().getValue()); - - m_parent->dvDimension->FormatSpec.setValue(ui->leFormatSpecifier->text().toUtf8().constData()); - m_parent->dvDimension->Arbitrary.setValue(ui->cbArbitrary->isChecked()); - m_parent->dvDimension->FormatSpecOverTolerance.setValue(ui->leFormatSpecifierOverTolerance->text().toUtf8().constData()); - m_parent->dvDimension->FormatSpecUnderTolerance.setValue(ui->leFormatSpecifierUnderTolerance->text().toUtf8().constData()); - m_parent->dvDimension->ArbitraryTolerances.setValue(ui->cbArbitraryTolerances->isChecked()); - - m_dimensionVP->FlipArrowheads.setValue(ui->cbArrowheads->isChecked()); - App::Color ac; - ac.setValue(ui->dimensionColor->color()); - m_dimensionVP->Color.setValue(ac); - m_dimensionVP->Fontsize.setValue(ui->qsbFontSize->value().getValue()); - m_dimensionVP->StandardAndStyle.setValue(ui->comboDrawingStyle->currentIndex()); - - m_parent->updateView(true); + Gui::Document* doc = m_dimensionVP->getDocument(); + m_dimensionVP->getObject()->purgeTouched(); + doc->commitCommand(); + doc->resetEdit(); return true; } bool TaskDimension::reject() { - return false; + Gui::Document* doc = m_dimensionVP->getDocument(); + doc->abortCommand(); + recomputeFeature(); + m_parent->updateView(true); + m_dimensionVP->getObject()->purgeTouched(); + doc->resetEdit(); + + return true; } void TaskDimension::recomputeFeature() diff --git a/src/Mod/TechDraw/Gui/TaskDimension.h b/src/Mod/TechDraw/Gui/TaskDimension.h index 97d2a48633..1a53d08b73 100644 --- a/src/Mod/TechDraw/Gui/TaskDimension.h +++ b/src/Mod/TechDraw/Gui/TaskDimension.h @@ -26,16 +26,13 @@ #include #include -#include - #include "QGIViewDimension.h" #include "ViewProviderDimension.h" -class Ui_TaskDimension; - namespace TechDrawGui { +class Ui_TaskDimension; class TaskDimension : public QWidget { Q_OBJECT diff --git a/src/Mod/TechDraw/Gui/ViewProviderDimension.cpp b/src/Mod/TechDraw/Gui/ViewProviderDimension.cpp index db94996fd1..4ab084793f 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderDimension.cpp +++ b/src/Mod/TechDraw/Gui/ViewProviderDimension.cpp @@ -25,6 +25,8 @@ #include "PreCompiled.h" #ifndef _PreComp_ +# include +# include #endif #include @@ -38,6 +40,8 @@ #include #include #include +#include +#include #include #include @@ -115,6 +119,33 @@ std::vector ViewProviderDimension::getDisplayModes(void) const return StrList; } +bool ViewProviderDimension::doubleClicked(void) +{ + startDefaultEditMode(); + return true; +} + +void ViewProviderDimension::setupContextMenu(QMenu* menu, QObject* receiver, const char* member) +{ + Gui::ActionFunction* func = new Gui::ActionFunction(menu); + QAction* act = menu->addAction(QObject::tr("Edit %1").arg(QString::fromUtf8(getObject()->Label.getValue()))); + act->setData(QVariant((int)ViewProvider::Default)); + func->trigger(act, boost::bind(&ViewProviderDimension::startDefaultEditMode, this)); + + ViewProviderDrawingView::setupContextMenu(menu, receiver, member); +} + +void ViewProviderDimension::startDefaultEditMode() +{ + QString text = QObject::tr("Edit %1").arg(QString::fromUtf8(getObject()->Label.getValue())); + Gui::Command::openCommand(text.toUtf8()); + + Gui::Document* document = this->getDocument(); + if (document) { + document->setEdit(this, ViewProvider::Default); + } +} + bool ViewProviderDimension::setEdit(int ModNum) { if (ModNum == ViewProvider::Default) { @@ -145,12 +176,6 @@ void ViewProviderDimension::unsetEdit(int ModNum) } } -bool ViewProviderDimension::doubleClicked(void) -{ - setEdit(ViewProvider::Default); - return true; -} - void ViewProviderDimension::updateData(const App::Property* p) { if (p == &(getViewObject()->Type)) { diff --git a/src/Mod/TechDraw/Gui/ViewProviderDimension.h b/src/Mod/TechDraw/Gui/ViewProviderDimension.h index 9b82a34338..6bc047e1aa 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderDimension.h +++ b/src/Mod/TechDraw/Gui/ViewProviderDimension.h @@ -72,6 +72,7 @@ public: virtual std::vector getDisplayModes(void) const; virtual void updateData(const App::Property*); virtual void onChanged(const App::Property* p); + virtual void setupContextMenu(QMenu*, QObject*, const char*); virtual bool setEdit(int ModNum); virtual void unsetEdit(int ModNum); virtual bool doubleClicked(void); @@ -88,6 +89,9 @@ public: protected: virtual void handleChangedPropertyType(Base::XMLReader &reader, const char *TypeName, App::Property * prop); +private: + void startDefaultEditMode(); + private: static const char *StandardAndStyleEnums[]; static const char *RenderingExtentEnums[];