diff --git a/src/Mod/TechDraw/App/DrawViewDetail.cpp b/src/Mod/TechDraw/App/DrawViewDetail.cpp index 7bb4b1bcd0..929515d169 100644 --- a/src/Mod/TechDraw/App/DrawViewDetail.cpp +++ b/src/Mod/TechDraw/App/DrawViewDetail.cpp @@ -85,9 +85,10 @@ #include "Cosmetic.h" #include "EdgeWalker.h" #include "DrawProjectSplit.h" +#include "DrawProjGroupItem.h" +#include "DrawPage.h" #include "DrawUtil.h" #include "DrawViewDetail.h" -#include "DrawProjGroupItem.h" #include "DrawViewSection.h" using namespace TechDraw; @@ -154,6 +155,35 @@ void DrawViewDetail::onChanged(const App::Property* prop) // to see AnchorPoint changes repainting is not enough, we must recompute recomputeFeature(true); } + if (prop == &ScaleType) { + auto page = findParentPage(); + // if ScaleType is "Page", the user cannot change it + if (ScaleType.isValue("Page")) { + Scale.setStatus(App::Property::ReadOnly, true); + // apply the page-wide Scale + if (page != nullptr) { + if (std::abs(page->Scale.getValue() - getScale()) > FLT_EPSILON) { + Scale.setValue(page->Scale.getValue()); + Scale.purgeTouched(); + } + } + } + else if (ScaleType.isValue("Custom")) { + // allow the change Scale + Scale.setStatus(App::Property::ReadOnly, false); + } + else if (ScaleType.isValue("Automatic")) { + Scale.setStatus(App::Property::ReadOnly, true); + // apply a Scale + if (!checkFit(page)) { + double newScale = autoScale(page->getPageWidth(), page->getPageHeight()); + if (std::abs(newScale - getScale()) > FLT_EPSILON) { //stops onChanged/execute loop + Scale.setValue(newScale); + Scale.purgeTouched(); + } + } + } + } } DrawView::onChanged(prop); } diff --git a/src/Mod/TechDraw/Gui/DlgPrefsTechDrawAnnotation.ui b/src/Mod/TechDraw/Gui/DlgPrefsTechDrawAnnotation.ui index bc031db3f1..4313dfd5d6 100644 --- a/src/Mod/TechDraw/Gui/DlgPrefsTechDrawAnnotation.ui +++ b/src/Mod/TechDraw/Gui/DlgPrefsTechDrawAnnotation.ui @@ -612,7 +612,7 @@ - true + false diff --git a/src/Mod/TechDraw/Gui/TaskDetail.cpp b/src/Mod/TechDraw/Gui/TaskDetail.cpp index 6252627215..6c9a7692aa 100644 --- a/src/Mod/TechDraw/Gui/TaskDetail.cpp +++ b/src/Mod/TechDraw/Gui/TaskDetail.cpp @@ -71,7 +71,7 @@ using namespace Gui; #define CREATEMODE 0 #define EDITMODE 1 -//creation ctor +//creation constructor TaskDetail::TaskDetail(TechDraw::DrawViewPart* baseFeat): ui(new Ui_TaskDetail), m_detailFeat(nullptr), @@ -135,7 +135,7 @@ TaskDetail::TaskDetail(TechDraw::DrawViewPart* baseFeat): this, SLOT(onHighlightMoved(QPointF))); } -//edit ctor +//edit constructor TaskDetail::TaskDetail(TechDraw::DrawViewDetail* detailFeat): ui(new Ui_TaskDetail), m_detailFeat(detailFeat), @@ -190,8 +190,8 @@ TaskDetail::TaskDetail(TechDraw::DrawViewDetail* detailFeat): connect(ui->pbDragger, SIGNAL(clicked(bool)), this, SLOT(onDraggerClicked(bool))); - //use editingFinished signal instead of valueChanged to prevent keyboard lock out - //valueChanged fires every keystroke causing a recompute. + // the UI file uses setKeyboardTracking(false) so that a + // recomputation will only be triggered when the arrow yeys of the spinboxes are used connect(ui->qsbX, SIGNAL(editingFinished()), this, SLOT(onXEdit())); connect(ui->qsbY, SIGNAL(editingFinished()), diff --git a/src/Mod/TechDraw/Gui/TaskDetail.h b/src/Mod/TechDraw/Gui/TaskDetail.h index 588dcaea23..ad1bb6a740 100644 --- a/src/Mod/TechDraw/Gui/TaskDetail.h +++ b/src/Mod/TechDraw/Gui/TaskDetail.h @@ -46,7 +46,7 @@ namespace TechDraw { class DrawPage; class DrawView; -class DrawDetail; +class DrawViewDetail; class DrawViewPart; } diff --git a/src/Mod/TechDraw/Gui/TaskDetail.ui b/src/Mod/TechDraw/Gui/TaskDetail.ui index 6b17e707e1..e60ffddc2e 100644 --- a/src/Mod/TechDraw/Gui/TaskDetail.ui +++ b/src/Mod/TechDraw/Gui/TaskDetail.ui @@ -128,6 +128,9 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + true + @@ -178,6 +181,9 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + true + @@ -194,6 +200,9 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + true + diff --git a/src/Mod/TechDraw/Gui/TaskProjGroup.cpp b/src/Mod/TechDraw/Gui/TaskProjGroup.cpp index 015ec31d75..7afd578b0c 100644 --- a/src/Mod/TechDraw/Gui/TaskProjGroup.cpp +++ b/src/Mod/TechDraw/Gui/TaskProjGroup.cpp @@ -233,17 +233,17 @@ void TaskProjGroup::projectionTypeChanged(QString qText) void TaskProjGroup::scaleTypeChanged(int index) { - if(blockUpdate) + if (blockUpdate) return; //defaults to prevent scale changing ui->sbScaleNum->setEnabled(false); ui->sbScaleDen->setEnabled(false); - if(index == 0) { + if (index == 0) { // Document Scale Type multiView->ScaleType.setValue("Page"); - } else if(index == 1) { + } else if (index == 1) { // Automatic Scale Type //block recompute multiView->ScaleType.setValue("Automatic"); @@ -251,7 +251,7 @@ void TaskProjGroup::scaleTypeChanged(int index) multiView->Scale.setValue(autoScale); //unblock recompute - } else if(index == 2) { + } else if (index == 2) { // Custom Scale Type //block recompute multiView->ScaleType.setValue("Custom"); diff --git a/src/Mod/TechDraw/Gui/ViewProviderViewPart.cpp b/src/Mod/TechDraw/Gui/ViewProviderViewPart.cpp index 21052a6e04..b583a5b7fc 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderViewPart.cpp +++ b/src/Mod/TechDraw/Gui/ViewProviderViewPart.cpp @@ -54,11 +54,10 @@ #include #include #include +#include #include #include -#include - #include "PreferencesGui.h" #include "QGIView.h" #include "TaskDetail.h"