diff --git a/src/Mod/TechDraw/Gui/QGCustomImage.cpp b/src/Mod/TechDraw/Gui/QGCustomImage.cpp index 95a3db155e..c8765dcd61 100644 --- a/src/Mod/TechDraw/Gui/QGCustomImage.cpp +++ b/src/Mod/TechDraw/Gui/QGCustomImage.cpp @@ -36,7 +36,7 @@ using namespace TechDrawGui; -QGCustomImage::QGCustomImage() +QGCustomImage::QGCustomImage() { setCacheMode(QGraphicsItem::NoCache); setAcceptHoverEvents(false); @@ -74,6 +74,12 @@ bool QGCustomImage::load(QString fileSpec) return(success); } +QSize QGCustomImage::imageSize(void) +{ + QSize result = m_px.size(); + return result; +} + void QGCustomImage::paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget) { QStyleOptionGraphicsItem myOption(*option); myOption.state &= ~QStyle::State_Selected; diff --git a/src/Mod/TechDraw/Gui/QGCustomImage.h b/src/Mod/TechDraw/Gui/QGCustomImage.h index 535323bd8f..9b8947fcf9 100644 --- a/src/Mod/TechDraw/Gui/QGCustomImage.h +++ b/src/Mod/TechDraw/Gui/QGCustomImage.h @@ -26,6 +26,7 @@ #include #include #include +#include #include #include @@ -52,6 +53,7 @@ public: virtual void centerAt(QPointF centerPos); virtual void centerAt(double cX, double cY); virtual bool load(QString fileSpec); + virtual QSize imageSize(void); protected: QPixmap m_px; diff --git a/src/Mod/TechDraw/Gui/QGIView.cpp b/src/Mod/TechDraw/Gui/QGIView.cpp index 1ea077cd92..3626b85181 100644 --- a/src/Mod/TechDraw/Gui/QGIView.cpp +++ b/src/Mod/TechDraw/Gui/QGIView.cpp @@ -60,6 +60,7 @@ #include "QGCustomText.h" #include "QGICaption.h" #include "QGCustomClip.h" +#include "QGCustomImage.h" #include "QGIViewClip.h" #include "ViewProviderDrawingView.h" #include "MDIViewPage.h" @@ -106,6 +107,13 @@ QGIView::QGIView() addToGroup(m_border); m_caption = new QGICaption(); addToGroup(m_caption); + m_lock = new QGCustomImage(); + m_lock->setParentItem(m_label); + m_lock->load(QString::fromUtf8(":/icons/techdraw-lock.png")); + QSize sizeLock = m_lock->imageSize(); + m_lockWidth = (double) sizeLock.width(); + m_lockHeight = (double) sizeLock.height(); + m_lock->hide(); isVisible(true); } @@ -393,12 +401,18 @@ void QGIView::drawCaption() void QGIView::drawBorder() { + auto feat = getViewObject(); + if (feat == nullptr) { + return; + } + drawCaption(); //show neither auto vp = static_cast(getViewProvider(getViewObject())); if (!borderVisible && !vp->KeepLabel.getValue()) { m_label->hide(); m_border->hide(); + m_lock->hide(); return; } @@ -406,6 +420,7 @@ void QGIView::drawBorder() //double margin = 2.0; m_label->hide(); m_border->hide(); + m_lock->hide(); m_label->setDefaultTextColor(m_colCurrent); m_font.setFamily(getPrefFont()); @@ -439,6 +454,17 @@ void QGIView::drawBorder() displayArea.top(), frameWidth, frameHeight); + + double lockX = labelArea.left(); + double lockY = labelArea.bottom() - (2 * m_lockHeight); + if (feat->isLocked()) { + m_lock->setZValue(ZVALUE::LOCK); + m_lock->setPos(lockX,lockY); + m_lock->show(); + } else { + m_lock->hide(); + } + prepareGeometryChange(); m_border->setRect(frameArea.adjusted(-2,-2,2,2)); m_border->setPos(0.,0.); diff --git a/src/Mod/TechDraw/Gui/QGIView.h b/src/Mod/TechDraw/Gui/QGIView.h index a8ae0a44b4..5ca539657c 100644 --- a/src/Mod/TechDraw/Gui/QGIView.h +++ b/src/Mod/TechDraw/Gui/QGIView.h @@ -47,6 +47,7 @@ class QGCustomText; class QGICaption; class MDIViewPage; class QGIViewClip; +class QGCustomImage; class TechDrawGuiExport QGIView : public QGraphicsItemGroup { @@ -141,7 +142,11 @@ protected: QGCustomLabel* m_label; QGCustomBorder* m_border; QGICaption* m_caption; + QGCustomImage* m_lock; QPen m_decorPen; + double m_lockWidth; + double m_lockHeight; + }; } // namespace diff --git a/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc b/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc index 0334b719e5..9d57b36d32 100644 --- a/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc +++ b/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc @@ -70,6 +70,7 @@ icons/arrow-down.svg icons/arrow-ccw.svg icons/arrow-cw.svg + icons/techdraw-lock.png translations/TechDraw_af.qm translations/TechDraw_zh-CN.qm translations/TechDraw_zh-TW.qm diff --git a/src/Mod/TechDraw/Gui/Resources/icons/techdraw-lock.png b/src/Mod/TechDraw/Gui/Resources/icons/techdraw-lock.png new file mode 100644 index 0000000000..c5ba8c876f Binary files /dev/null and b/src/Mod/TechDraw/Gui/Resources/icons/techdraw-lock.png differ diff --git a/src/Mod/TechDraw/Gui/ZVALUE.h b/src/Mod/TechDraw/Gui/ZVALUE.h index 34f420bef3..ffe0f19fd3 100644 --- a/src/Mod/TechDraw/Gui/ZVALUE.h +++ b/src/Mod/TechDraw/Gui/ZVALUE.h @@ -17,5 +17,6 @@ namespace ZVALUE { const int SECTIONLINE = 80; //TODO: change to "DECORATION"? section lines, symmetry lines, etc? const int HIGHLIGHT = 80; const int MATTING = 100; + const int LOCK = 200; } #endif