From dcef41782ecf353b2c144029f2b2102fa34f4b69 Mon Sep 17 00:00:00 2001 From: wandererfan Date: Tue, 10 Mar 2020 13:23:05 -0400 Subject: [PATCH] [TD]harmonize Arrow enums --- src/Mod/TechDraw/App/ArrowPropEnum.cpp | 52 +++++++++++++++++ src/Mod/TechDraw/App/ArrowPropEnum.h | 56 +++++++++++++++++++ src/Mod/TechDraw/App/CMakeLists.txt | 2 + src/Mod/TechDraw/App/DrawLeaderLine.cpp | 36 +++++++++++- src/Mod/TechDraw/App/DrawLeaderLine.h | 14 ++++- src/Mod/TechDraw/App/DrawViewBalloon.cpp | 47 ++++++++-------- src/Mod/TechDraw/App/DrawViewBalloon.h | 8 ++- src/Mod/TechDraw/Gui/DlgPrefsTechDraw3Imp.cpp | 35 +++++++++++- src/Mod/TechDraw/Gui/DlgPrefsTechDraw3Imp.h | 5 ++ src/Mod/TechDraw/Gui/DrawGuiUtil.cpp | 13 +++++ src/Mod/TechDraw/Gui/DrawGuiUtil.h | 8 ++- src/Mod/TechDraw/Gui/QGIArrow.cpp | 23 ++++---- src/Mod/TechDraw/Gui/QGIArrow.h | 20 +++---- src/Mod/TechDraw/Gui/QGILeaderLine.cpp | 9 +-- src/Mod/TechDraw/Gui/QGIViewBalloon.cpp | 13 ++--- src/Mod/TechDraw/Gui/Resources/TechDraw.qrc | 1 + .../Gui/Resources/icons/arrownone.svg | 38 +++++++++++++ src/Mod/TechDraw/Gui/TaskBalloon.cpp | 5 +- src/Mod/TechDraw/Gui/TaskLeaderLine.cpp | 22 +++++--- 19 files changed, 335 insertions(+), 72 deletions(-) create mode 100644 src/Mod/TechDraw/App/ArrowPropEnum.cpp create mode 100644 src/Mod/TechDraw/App/ArrowPropEnum.h create mode 100644 src/Mod/TechDraw/Gui/Resources/icons/arrownone.svg diff --git a/src/Mod/TechDraw/App/ArrowPropEnum.cpp b/src/Mod/TechDraw/App/ArrowPropEnum.cpp new file mode 100644 index 0000000000..7e8a2e0d0b --- /dev/null +++ b/src/Mod/TechDraw/App/ArrowPropEnum.cpp @@ -0,0 +1,52 @@ +/*************************************************************************** + * Copyright (c) 2020 WandererFan * + * * + * This file is part of the FreeCAD CAx development system. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Library General Public * + * License as published by the Free Software Foundation; either * + * version 2 of the License, or (at your option) any later version. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Library General Public License for more details. * + * * + * You should have received a copy of the GNU Library General Public * + * License along with this library; see the file COPYING.LIB. If not, * + * write to the Free Software Foundation, Inc., 59 Temple Place, * + * Suite 330, Boston, MA 02111-1307, USA * + * * + ***************************************************************************/ + +#include "PreCompiled.h" + +#ifndef _PreComp_ +#endif + +#include "ArrowPropEnum.h" + +namespace TechDraw { + +const int ArrowPropEnum::ArrowCount = 8; +const char* ArrowPropEnum::ArrowTypeEnums[]= { "NONE", + "FILLED_ARROW", + "OPEN_ARROW", + "TICK", + "DOT", + "OPEN_CIRCLE", + "FORK", + "FILLED_TRIANGLE", + NULL}; + +const std::vector ArrowPropEnum::ArrowTypeIcons = { ":icons/arrownone.svg", + ":icons/arrowfilled.svg", + ":icons/arrowopen.svg", + ":icons/arrowtick.svg", + ":icons/arrowdot.svg", + ":icons/arrowopendot.svg", + ":icons/arrowfork.svg", + ":icons/arrowpyramid.svg"}; + +} diff --git a/src/Mod/TechDraw/App/ArrowPropEnum.h b/src/Mod/TechDraw/App/ArrowPropEnum.h new file mode 100644 index 0000000000..5a81170b8f --- /dev/null +++ b/src/Mod/TechDraw/App/ArrowPropEnum.h @@ -0,0 +1,56 @@ +/*************************************************************************** + * Copyright (c) 2020 WandererFan * + * * + * This file is part of the FreeCAD CAx development system. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Library General Public * + * License as published by the Free Software Foundation; either * + * version 2 of the License, or (at your option) any later version. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Library General Public License for more details. * + * * + * You should have received a copy of the GNU Library General Public * + * License along with this library; see the file COPYING.LIB. If not, * + * write to the Free Software Foundation, Inc., 59 Temple Place, * + * Suite 330, Boston, MA 02111-1307, USA * + * * + ***************************************************************************/ + +#ifndef _ARROWENUMS_H_ +#define _ARROWENUMS_H_ +#include +#include +#include +#include + + +namespace TechDraw +{ + +//common definitions for line ends / arrows +enum ArrowType { NONE = 0, + FILLED_ARROW, + OPEN_ARROW, + TICK, + DOT, + OPEN_CIRCLE, + FORK, + FILLED_TRIANGLE }; + +class TechDrawExport ArrowPropEnum { + public: + + static const char* ArrowTypeEnums[]; + static const int ArrowCount; + static const std::vector ArrowTypeIcons; + +private: + +}; + +} //end namespace TechDraw +#endif diff --git a/src/Mod/TechDraw/App/CMakeLists.txt b/src/Mod/TechDraw/App/CMakeLists.txt index f8d3ec889f..e317ec8a9d 100644 --- a/src/Mod/TechDraw/App/CMakeLists.txt +++ b/src/Mod/TechDraw/App/CMakeLists.txt @@ -153,6 +153,8 @@ SET(TechDraw_SRCS DrawProjectSplit.h LineGroup.cpp LineGroup.h + ArrowPropEnum.cpp + ArrowPropEnum.h ) SET(Geometry_SRCS diff --git a/src/Mod/TechDraw/App/DrawLeaderLine.cpp b/src/Mod/TechDraw/App/DrawLeaderLine.cpp index 31e22bb4f9..3eb84abea1 100644 --- a/src/Mod/TechDraw/App/DrawLeaderLine.cpp +++ b/src/Mod/TechDraw/App/DrawLeaderLine.cpp @@ -36,6 +36,7 @@ #include // generated from DrawLeaderLinePy.xml #include "DrawLeaderLine.h" +#include "ArrowPropEnum.h" using namespace TechDraw; @@ -45,6 +46,26 @@ using namespace TechDraw; PROPERTY_SOURCE(TechDraw::DrawLeaderLine, TechDraw::DrawView) +//TODO: share this between DrawViewBalloon, DrawLeaderLine, QGIArrow, Prefs, etc +//const char* DrawLeaderLine::ArrowTypeEnums[]= { "NONE", +// "FILLED_ARROW", +// "OPEN_ARROW", +// "TICK", +// "DOT", +// "OPEN_CIRCLE", +// "FORK", +// "FILLED_TRIANGLE", +// NULL}; +//const char* DrawLeaderLine::ArrowTypeEnums2[]= { "NONE", +// "FILLED_ARROW", +// "OPEN_ARROW", +// "TICK", +// "DOT", +// "OPEN_CIRCLE", +// "FORK", +// "FILLED_TRIANGLE", +// NULL}; + DrawLeaderLine::DrawLeaderLine(void) { static const char *group = "Leader"; @@ -54,8 +75,19 @@ DrawLeaderLine::DrawLeaderLine(void) LeaderParent.setScope(App::LinkScope::Global); ADD_PROPERTY_TYPE(WayPoints,(Base::Vector3d()) ,group, App::Prop_None, "Intermediate points for Leader line"); - ADD_PROPERTY_TYPE(StartSymbol, (-1), group, App::Prop_None, "Symbol (arrowhead) for start of line"); - ADD_PROPERTY_TYPE(EndSymbol, (-1), group, App::Prop_None, "Symbol (arrowhead) for end of line"); + +// EndType.setEnums(ArrowTypeEnums); +// ADD_PROPERTY(EndType,(prefEnd())); + + StartSymbol.setEnums(ArrowPropEnum::ArrowTypeEnums); + ADD_PROPERTY(StartSymbol,(1l)); //filled arrow + +// ADD_PROPERTY_TYPE(StartSymbol, (0), group, App::Prop_None, "Symbol (arrowhead) for start of line"); + EndSymbol.setEnums(ArrowPropEnum::ArrowTypeEnums); + ADD_PROPERTY(EndSymbol,(0l)); //no symbol +// ADD_PROPERTY_TYPE(EndSymbol, (0), group, App::Prop_None, "Symbol (arrowhead) for end of line"); + + ADD_PROPERTY_TYPE(Scalable ,(false),group,App::Prop_None,"Scale line with LeaderParent"); ADD_PROPERTY_TYPE(AutoHorizontal ,(getDefAuto()),group,App::Prop_None,"Forces last line segment to be horizontal"); diff --git a/src/Mod/TechDraw/App/DrawLeaderLine.h b/src/Mod/TechDraw/App/DrawLeaderLine.h index 11e167668b..87c66882fd 100644 --- a/src/Mod/TechDraw/App/DrawLeaderLine.h +++ b/src/Mod/TechDraw/App/DrawLeaderLine.h @@ -44,8 +44,12 @@ public: App::PropertyLink LeaderParent; App::PropertyVectorList WayPoints; - App::PropertyInteger StartSymbol; //see Gui/QGIArrow for values - App::PropertyInteger EndSymbol; + App::PropertyEnumeration StartSymbol; + App::PropertyEnumeration EndSymbol; + +/* App::PropertyInteger StartSymbol; //see Gui/QGIArrow for values*/ +/* App::PropertyInteger EndSymbol;*/ + App::PropertyBool Scalable; App::PropertyBool AutoHorizontal; @@ -71,11 +75,15 @@ public: Base::Vector3d getKinkPoint(void) const; Base::Vector3d getTailPoint(void) const; - protected: virtual void onChanged(const App::Property* prop) override; private: +/* static const char* ArrowTypeEnums[];*/ +/* static const int ArrowCount;*/ +/* static const std::vector ArrowTypeIcons;*/ + + }; typedef App::FeaturePythonT DrawLeaderLinePython; diff --git a/src/Mod/TechDraw/App/DrawViewBalloon.cpp b/src/Mod/TechDraw/App/DrawViewBalloon.cpp index 6e7765b9dd..de8d3eb949 100644 --- a/src/Mod/TechDraw/App/DrawViewBalloon.cpp +++ b/src/Mod/TechDraw/App/DrawViewBalloon.cpp @@ -55,6 +55,7 @@ #include "DrawViewBalloon.h" #include "DrawUtil.h" #include "LineGroup.h" +#include "ArrowPropEnum.h" //#include // generated from DrawViewBalloonPy.xml @@ -74,31 +75,30 @@ using namespace TechDraw; PROPERTY_SOURCE(TechDraw::DrawViewBalloon, TechDraw::DrawView) -//from Gui/QGIArrow.h -//enum ArrowType { -// FILLED_TRIANGLE = 0, -// OPEN_ARROW, -// HASH_MARK, -// DOT, -// OPEN_CIRCLE, -// FORK, -// PYRAMID -// }; +//const char* DrawViewBalloon::ArrowTypeEnums[]= { "NONE", +// "FILLED_ARROW", +// "OPEN_ARROW", +// "TICK", +// "DOT", +// "OPEN_CIRCLE", +// "FORK", +// "FILLED_TRIANGLE", +// NULL}; -const char* DrawViewBalloon::endTypeEnums[]= { "FILLED_TRIANGLE", - "OPEN_ARROW", - "HASH_MARK", - "DOT", - "OPEN_CIRCLE", - "FORK", - "PYRAMID", - "NONE", - NULL}; - -//const char* DrawViewBalloon::endTypeEnums[]= {"Arrow", -// "Dot", +//const char* DrawViewBalloon::endTypeEnums[]= { "FILLED_TRIANGLE", +// "OPEN_ARROW", +// "HASH_MARK", +// "DOT", +// "OPEN_CIRCLE", +// "FORK", +// "PYRAMID", +// "NONE", // NULL}; +////const char* DrawViewBalloon::endTypeEnums[]= {"Arrow", +//// "Dot", +//// NULL}; + const char* DrawViewBalloon::balloonTypeEnums[]= {"Circular", "None", "Triangle", @@ -116,7 +116,8 @@ DrawViewBalloon::DrawViewBalloon(void) ADD_PROPERTY_TYPE(OriginY,(0),"",(App::PropertyType)(App::Prop_None),"Balloon origin y"); ADD_PROPERTY_TYPE(OriginIsSet, (false), "",(App::PropertyType)(App::Prop_None),"Balloon origin is set"); - EndType.setEnums(endTypeEnums); +// EndType.setEnums(endTypeEnums); + EndType.setEnums(ArrowPropEnum::ArrowTypeEnums); ADD_PROPERTY(EndType,(prefEnd())); Symbol.setEnums(balloonTypeEnums); diff --git a/src/Mod/TechDraw/App/DrawViewBalloon.h b/src/Mod/TechDraw/App/DrawViewBalloon.h index 113bacb2e4..becbcddb8d 100644 --- a/src/Mod/TechDraw/App/DrawViewBalloon.h +++ b/src/Mod/TechDraw/App/DrawViewBalloon.h @@ -76,7 +76,8 @@ public: } static const char* balloonTypeEnums[]; - static const char* endTypeEnums[]; +/* static const char* endTypeEnums[];*/ + static const char* ArrowTypeEnums[]; void handleXYLock(void) override; @@ -97,6 +98,11 @@ protected: const char *PropName) override; private: +/* static const char* ArrowTypeEnums[];*/ +/* static const int ArrowCount;*/ +/* static const std::vector ArrowTypeIcons;*/ + + }; } //namespace TechDraw diff --git a/src/Mod/TechDraw/Gui/DlgPrefsTechDraw3Imp.cpp b/src/Mod/TechDraw/Gui/DlgPrefsTechDraw3Imp.cpp index 4791755bb2..bbd3871cc9 100644 --- a/src/Mod/TechDraw/Gui/DlgPrefsTechDraw3Imp.cpp +++ b/src/Mod/TechDraw/Gui/DlgPrefsTechDraw3Imp.cpp @@ -25,10 +25,18 @@ #include "PreCompiled.h" +#include + +#include +#include + +#include "DrawGuiUtil.h" #include "DlgPrefsTechDraw3Imp.h" -#include + using namespace TechDrawGui; +using namespace TechDraw; + DlgPrefsTechDraw3Imp::DlgPrefsTechDraw3Imp( QWidget* parent ) : PreferencePage( parent ) @@ -95,6 +103,11 @@ void DlgPrefsTechDraw3Imp::loadSettings() plsb_ArrowSize->onRestore(); plsb_FontSize->onRestore(); sbAltDecimals->onRestore(); + + DrawGuiUtil::loadArrowBox(pcbBalloonArrow); + pcbBalloonArrow->setCurrentIndex(prefBalloonArrow()); + DrawGuiUtil::loadArrowBox(pcbArrow); + pcbArrow->setCurrentIndex(prefArrowStyle()); } /** @@ -112,4 +125,24 @@ void DlgPrefsTechDraw3Imp::changeEvent(QEvent *e) } } +int DlgPrefsTechDraw3Imp::prefBalloonArrow(void) const +{ + Base::Reference hGrp = App::GetApplication().GetUserParameter(). + GetGroup("BaseApp")->GetGroup("Preferences")-> + GetGroup("Mod/TechDraw/Decorations"); + int end = hGrp->GetInt("BalloonArrow", 1); + return end; +} + +int DlgPrefsTechDraw3Imp::prefArrowStyle(void) const +{ + Base::Reference hGrp = App::GetApplication().GetUserParameter(). + GetGroup("BaseApp")->GetGroup("Preferences")-> + GetGroup("Mod/TechDraw/Dimensions"); + int style = hGrp->GetInt("ArrowStyle", 1); + return style; +} + + + #include diff --git a/src/Mod/TechDraw/Gui/DlgPrefsTechDraw3Imp.h b/src/Mod/TechDraw/Gui/DlgPrefsTechDraw3Imp.h index 7b30ae3e8c..5f54564c0a 100644 --- a/src/Mod/TechDraw/Gui/DlgPrefsTechDraw3Imp.h +++ b/src/Mod/TechDraw/Gui/DlgPrefsTechDraw3Imp.h @@ -43,6 +43,11 @@ protected: void saveSettings(); void loadSettings(); void changeEvent(QEvent *e); + + int prefBalloonArrow(void) const; + int prefArrowStyle(void) const; + + }; } // namespace TechDrawGui diff --git a/src/Mod/TechDraw/Gui/DrawGuiUtil.cpp b/src/Mod/TechDraw/Gui/DrawGuiUtil.cpp index 1a0ed2d17d..2787b113f4 100644 --- a/src/Mod/TechDraw/Gui/DrawGuiUtil.cpp +++ b/src/Mod/TechDraw/Gui/DrawGuiUtil.cpp @@ -73,6 +73,7 @@ #include #include #include +#include #include "QGVPage.h" #include "MDIViewPage.h" @@ -82,6 +83,18 @@ using namespace TechDrawGui; using namespace TechDraw; +void DrawGuiUtil::loadArrowBox(QComboBox* qcb) +{ + qcb->clear(); + int i = 0; + for (; i < ArrowPropEnum::ArrowCount; i++) { + qcb->addItem(QString::fromUtf8(ArrowPropEnum::ArrowTypeEnums[i])); + QIcon itemIcon(QString::fromUtf8(ArrowPropEnum::ArrowTypeIcons[i].c_str())); + qcb->setItemIcon(i, itemIcon); + } +} + + //=========================================================================== // validate helper routines //=========================================================================== diff --git a/src/Mod/TechDraw/Gui/DrawGuiUtil.h b/src/Mod/TechDraw/Gui/DrawGuiUtil.h index 4d53f682b4..8020a59e75 100644 --- a/src/Mod/TechDraw/Gui/DrawGuiUtil.h +++ b/src/Mod/TechDraw/Gui/DrawGuiUtil.h @@ -26,8 +26,11 @@ #include #include #include +#include #include +/*#include */ + namespace Part { class Feature; } @@ -51,7 +54,10 @@ class TechDrawGuiExport DrawGuiUtil { static void dumpRectF(const char* text, const QRectF& r); static void dumpPointF(const char* text, const QPointF& p); static std::pair get3DDirAndRot(); - static std::pair getProjDirFromFace(App::DocumentObject* obj, std::string faceName); + static std::pair getProjDirFromFace(App::DocumentObject* obj, + std::string faceName); + static void loadArrowBox(QComboBox* qcb); + }; diff --git a/src/Mod/TechDraw/Gui/QGIArrow.cpp b/src/Mod/TechDraw/Gui/QGIArrow.cpp index 72d70781ab..eaf93f3fec 100644 --- a/src/Mod/TechDraw/Gui/QGIArrow.cpp +++ b/src/Mod/TechDraw/Gui/QGIArrow.cpp @@ -36,10 +36,13 @@ #include #include +#include + #include "Rez.h" #include "QGIArrow.h" using namespace TechDrawGui; +using namespace TechDraw; QGIArrow::QGIArrow() : m_fill(Qt::SolidPattern), @@ -62,35 +65,35 @@ QGIArrow::QGIArrow() : void QGIArrow::draw() { QPainterPath path; - if (m_style == FILLED_TRIANGLE) { + if (m_style == ArrowType::FILLED_ARROW) { if (m_dirMode) { path = makeFilledTriangle(getDirection(), m_size,m_size/6.0); } else { path = makeFilledTriangle(m_size,m_size/6.0,isFlipped()); //"arrow l/w sb 3/1" ?? } - } else if (m_style == OPEN_ARROW) { + } else if (m_style == ArrowType::OPEN_ARROW) { if (m_dirMode) { path = makeOpenArrow(getDirection(), m_size,m_size/3.0); //broad arrow? } else { path = makeOpenArrow(m_size,m_size/3.0,isFlipped()); } - } else if (m_style == HASH_MARK) { + } else if (m_style == ArrowType::TICK) { if (m_dirMode) { path = makeHashMark(getDirection(), m_size/2.0,m_size/2.0); //big enough? } else { path = makeHashMark(m_size/2.0,m_size/2.0,isFlipped()); //big enough? } - } else if (m_style == DOT) { + } else if (m_style == ArrowType::DOT) { path = makeDot(m_size/2.0,m_size/2.0,isFlipped()); - } else if (m_style == OPEN_CIRCLE) { + } else if (m_style == ArrowType::OPEN_CIRCLE) { path = makeOpenDot(m_size/2.0,m_size/2.0,isFlipped()); - } else if (m_style == FORK) { + } else if (m_style == ArrowType::FORK) { if (m_dirMode) { path = makeForkArrow(getDirection(), m_size/2.0,m_size/2.0); //big enough? } else { path = makeForkArrow(m_size/2.0,m_size/2.0,isFlipped()); //big enough? } - } else if (m_style == PYRAMID){ + } else if (m_style == ArrowType::FILLED_TRIANGLE){ if (m_dirMode) { path = makePyramid(getDirection(), m_size); } else { @@ -331,13 +334,13 @@ double QGIArrow::getOverlapAdjust(int style, double size) // Base::Console().Message("QGIA::getOverlapAdjust(%d, %.3f) \n",style, size); double result = 1.0; switch(style) { - case FILLED_TRIANGLE: + case FILLED_ARROW: result = 0.50 * size; break; case OPEN_ARROW: result = 0.10 * size; break; - case HASH_MARK: + case TICK: result = 0.0; break; case DOT: @@ -350,7 +353,7 @@ double QGIArrow::getOverlapAdjust(int style, double size) case FORK: result = 0.0; break; - case PYRAMID: + case FILLED_TRIANGLE: result = size; break; case NONE: diff --git a/src/Mod/TechDraw/Gui/QGIArrow.h b/src/Mod/TechDraw/Gui/QGIArrow.h index 26a704ef73..18da0234fe 100644 --- a/src/Mod/TechDraw/Gui/QGIArrow.h +++ b/src/Mod/TechDraw/Gui/QGIArrow.h @@ -35,16 +35,16 @@ QT_END_NAMESPACE namespace TechDrawGui { -enum ArrowType { - FILLED_TRIANGLE = 0, - OPEN_ARROW, - HASH_MARK, - DOT, - OPEN_CIRCLE, - FORK, - PYRAMID, - NONE -}; +/*enum ArrowType {*/ +/* FILLED_TRIANGLE = 0,*/ +/* OPEN_ARROW,*/ +/* HASH_MARK,*/ +/* DOT,*/ +/* OPEN_CIRCLE,*/ +/* FORK,*/ +/* PYRAMID,*/ +/* NONE*/ +/*};*/ class TechDrawGuiExport QGIArrow : public QGIPrimPath { diff --git a/src/Mod/TechDraw/Gui/QGILeaderLine.cpp b/src/Mod/TechDraw/Gui/QGILeaderLine.cpp index a89a1af065..f2925274fa 100644 --- a/src/Mod/TechDraw/Gui/QGILeaderLine.cpp +++ b/src/Mod/TechDraw/Gui/QGILeaderLine.cpp @@ -53,6 +53,7 @@ #include #include #include +#include #include "Rez.h" #include "ZVALUE.h" @@ -423,11 +424,11 @@ QPainterPath QGILeaderLine::makeLeaderPath(std::vector qPoints) double endAdjLength(0.0); if (qPoints.size() > 1) { //make path adjustment to hide leaderline ends behind arrowheads - if (featLeader->StartSymbol.getValue() > -1) { + if (featLeader->StartSymbol.getValue() > ArrowType::NONE) { startAdjLength = QGIArrow::getOverlapAdjust(featLeader->StartSymbol.getValue(), QGIArrow::getPrefArrowSize()); } - if (featLeader->EndSymbol.getValue() > -1) { + if (featLeader->EndSymbol.getValue() > ArrowType::NONE) { endAdjLength = QGIArrow::getOverlapAdjust(featLeader->EndSymbol.getValue(), QGIArrow::getPrefArrowSize()); } @@ -498,7 +499,7 @@ void QGILeaderLine::setArrows(std::vector pathPoints) QPointF lastOffset = (pathPoints.back() - pathPoints.front()); - if (featLeader->StartSymbol.getValue() > -1) { + if (featLeader->StartSymbol.getValue() > ArrowType::NONE) { m_arrow1->setStyle(featLeader->StartSymbol.getValue()); m_arrow1->setWidth(getLineWidth()); // TODO: variable size arrow heads @@ -520,7 +521,7 @@ void QGILeaderLine::setArrows(std::vector pathPoints) m_arrow1->hide(); } - if (featLeader->EndSymbol.getValue() > -1) { + if (featLeader->EndSymbol.getValue() > ArrowType::NONE) { m_arrow2->setStyle(featLeader->EndSymbol.getValue()); m_arrow2->setWidth(getLineWidth()); m_arrow2->setDirMode(true); diff --git a/src/Mod/TechDraw/Gui/QGIViewBalloon.cpp b/src/Mod/TechDraw/Gui/QGIViewBalloon.cpp index 60d152e454..e37c687fc2 100644 --- a/src/Mod/TechDraw/Gui/QGIViewBalloon.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewBalloon.cpp @@ -56,6 +56,7 @@ #include #include #include +#include #include "Rez.h" #include "ZVALUE.h" @@ -417,13 +418,11 @@ void QGIViewBalloon::updateBalloon(bool obtuse) if ( vp == nullptr ) { return; } - const TechDraw::DrawViewPart *refObj = balloon->getViewPart(); if (refObj == nullptr) { return; } - QFont font = balloonLabel->getFont(); font.setPixelSize(calculateFontPixelSize(vp->Fontsize.getValue())); font.setFamily(QString::fromUtf8(vp->Font.getValue())); @@ -444,7 +443,6 @@ void QGIViewBalloon::updateBalloon(bool obtuse) } balloonLabel->setDimString(labelText, Rez::guiX(balloon->TextWrapLen.getValue())); - float x = Rez::guiX(balloon->X.getValue() * refObj->getScale()); float y = Rez::guiX(balloon->Y.getValue() * refObj->getScale()); balloonLabel->setPosFromCenter(x, -y); @@ -520,7 +518,7 @@ void QGIViewBalloon::placeBalloon(QPointF pos) return; } - + QGIView* qgivParent = nullptr; QPointF viewPos; Gui::ViewProvider* objVp = QGIView::getViewProvider(balloonParent); @@ -595,7 +593,7 @@ void QGIViewBalloon::draw() float x = Rez::guiX(balloon->X.getValue() * refObj->getScale()); float y = Rez::guiX(balloon->Y.getValue() * refObj->getScale()); Base::Vector3d lblCenter(x, -y, 0.0); - + float arrowTipX = Rez::guiX(balloon->OriginX.getValue() * refObj->getScale()); float arrowTipY = - Rez::guiX(balloon->OriginY.getValue() * refObj->getScale()); @@ -706,11 +704,10 @@ void QGIViewBalloon::draw() double xAdj = 0.0; double yAdj = 0.0; int endType = balloon->EndType.getValue(); - std::string endTypeString = balloon->EndType.getValueAsString(); double arrowAdj = QGIArrow::getOverlapAdjust(endType, QGIArrow::getPrefArrowSize()); - if (endTypeString == "NONE") { + if (endType == ArrowType::NONE) { arrow->hide(); } else { arrow->setStyle(endType); @@ -729,7 +726,7 @@ void QGIViewBalloon::draw() float arAngle = atan2(dirballoonLinesLine.y, dirballoonLinesLine.x) * 180 / M_PI; arrow->setPos(arrowTipX, arrowTipY); - if ( (endTypeString == "PYRAMID") && + if ( (endType == ArrowType::FILLED_TRIANGLE) && (prefOrthoPyramid()) ) { if (arAngle < 0.0) { arAngle += 360.0; diff --git a/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc b/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc index bf08fac9b7..2de4d51c96 100644 --- a/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc +++ b/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc @@ -36,6 +36,7 @@ icons/TechDraw_VerticalExtentDimension.svg icons/techdraw-landmarkdistance.svg icons/preferences-techdraw.svg + icons/arrownone.svg icons/arrowdot.svg icons/arrowopendot.svg icons/arrowfilled.svg diff --git a/src/Mod/TechDraw/Gui/Resources/icons/arrownone.svg b/src/Mod/TechDraw/Gui/Resources/icons/arrownone.svg new file mode 100644 index 0000000000..e0c324db0f --- /dev/null +++ b/src/Mod/TechDraw/Gui/Resources/icons/arrownone.svg @@ -0,0 +1,38 @@ + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/Mod/TechDraw/Gui/TaskBalloon.cpp b/src/Mod/TechDraw/Gui/TaskBalloon.cpp index 4f2c0b68de..ea520f953a 100644 --- a/src/Mod/TechDraw/Gui/TaskBalloon.cpp +++ b/src/Mod/TechDraw/Gui/TaskBalloon.cpp @@ -46,9 +46,11 @@ #include #include #include +#include #include +#include "DrawGuiUtil.h" #include "QGIViewBalloon.h" #include "TaskBalloon.h" @@ -74,12 +76,12 @@ TaskBalloon::TaskBalloon(QGIViewBalloon *parent) : ui->inputValue->selectAll(); QTimer::singleShot(0, ui->inputValue, SLOT(setFocus())); + DrawGuiUtil::loadArrowBox(ui->comboEndType); i = parent->dvBalloon->EndType.getValue(); ui->comboEndType->setCurrentIndex(i); i = parent->dvBalloon->Symbol.getValue(); ui->comboSymbol->setCurrentIndex(i); - } TaskBalloon::~TaskBalloon() @@ -87,7 +89,6 @@ TaskBalloon::~TaskBalloon() delete ui; } - bool TaskBalloon::accept() { m_parent->dvBalloon->Text.setValue(ui->inputValue->text().toUtf8().constData()); diff --git a/src/Mod/TechDraw/Gui/TaskLeaderLine.cpp b/src/Mod/TechDraw/Gui/TaskLeaderLine.cpp index 464a4ee63b..60335187a3 100644 --- a/src/Mod/TechDraw/Gui/TaskLeaderLine.cpp +++ b/src/Mod/TechDraw/Gui/TaskLeaderLine.cpp @@ -262,8 +262,12 @@ void TaskLeaderLine::setUiPrimary() ui->pbCancelEdit->setEnabled(false); } - int aSize = getPrefArrowStyle() + 1; - ui->cboxStartSym->setCurrentIndex(aSize); + DrawGuiUtil::loadArrowBox(ui->cboxStartSym); + int aStyle = getPrefArrowStyle(); + ui->cboxStartSym->setCurrentIndex(aStyle); + + DrawGuiUtil::loadArrowBox(ui->cboxEndSym); + ui->cboxEndSym->setCurrentIndex(0); ui->dsbWeight->setUnit(Base::Unit::Length); ui->dsbWeight->setMinimum(0); @@ -290,8 +294,12 @@ void TaskLeaderLine::setUiEdit() if (m_lineFeat != nullptr) { std::string baseName = m_lineFeat->LeaderParent.getValue()->getNameInDocument(); ui->tbBaseView->setText(Base::Tools::fromStdString(baseName)); - ui->cboxStartSym->setCurrentIndex(m_lineFeat->StartSymbol.getValue() + 1); - ui->cboxEndSym->setCurrentIndex(m_lineFeat->EndSymbol.getValue() + 1); + + DrawGuiUtil::loadArrowBox(ui->cboxStartSym); + ui->cboxStartSym->setCurrentIndex(m_lineFeat->StartSymbol.getValue()); + DrawGuiUtil::loadArrowBox(ui->cboxEndSym); + ui->cboxEndSym->setCurrentIndex(m_lineFeat->EndSymbol.getValue()); + ui->pbTracker->setText(QString::fromUtf8("Edit points")); if (m_haveMdi) { ui->pbTracker->setEnabled(true); @@ -391,8 +399,8 @@ void TaskLeaderLine::updateLeaderFeature(void) void TaskLeaderLine::commonFeatureUpdate(void) { - int start = ui->cboxStartSym->currentIndex() - 1; - int end = ui->cboxEndSym->currentIndex() - 1; + int start = ui->cboxStartSym->currentIndex(); + int end = ui->cboxEndSym->currentIndex(); m_lineFeat->StartSymbol.setValue(start); m_lineFeat->EndSymbol.setValue(end); } @@ -719,7 +727,7 @@ int TaskLeaderLine::getPrefArrowStyle() { Base::Reference hGrp = App::GetApplication().GetUserParameter(). GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/TechDraw/Dimensions"); - int style = hGrp->GetInt("ArrowStyle", 0); + int style = hGrp->GetInt("ArrowStyle", 1); return style; }