diff --git a/src/Mod/TechDraw/App/EdgeWalker.cpp b/src/Mod/TechDraw/App/EdgeWalker.cpp index a9a9ddf9d..8f7ffe743 100644 --- a/src/Mod/TechDraw/App/EdgeWalker.cpp +++ b/src/Mod/TechDraw/App/EdgeWalker.cpp @@ -19,6 +19,12 @@ * Suite 330, Boston, MA 02111-1307, USA * * * ***************************************************************************/ +/* * + * Some material based on Boost sample code */ +// Distributed under the Boost Software License, Version 1.0. (See +// http://www.boost.org/LICENSE_1_0.txt) +//************************************************************************** + //#include "PreCompiled.h" diff --git a/src/Mod/TechDraw/App/EdgeWalker.h b/src/Mod/TechDraw/App/EdgeWalker.h index 98f4c3f42..18a266127 100644 --- a/src/Mod/TechDraw/App/EdgeWalker.h +++ b/src/Mod/TechDraw/App/EdgeWalker.h @@ -19,6 +19,11 @@ * Suite 330, Boston, MA 02111-1307, USA * * * ***************************************************************************/ +/* + * Some material based on Boost sample code */ +// Distributed under the Boost Software License, Version 1.0. (See +// http://www.boost.org/LICENSE_1_0.txt) +//************************************************************************** #ifndef TECHDRAW_EDGEWALKER_H #define TECHDRAW_EDGEWALKER_H diff --git a/src/Mod/TechDraw/Gui/MDIViewPage.cpp b/src/Mod/TechDraw/Gui/MDIViewPage.cpp index 46726ef1c..403a1d9f4 100644 --- a/src/Mod/TechDraw/Gui/MDIViewPage.cpp +++ b/src/Mod/TechDraw/Gui/MDIViewPage.cpp @@ -128,7 +128,7 @@ MDIViewPage::MDIViewPage(ViewProviderPage *pageVp, Gui::Document* doc, QWidget* m_view, SLOT(setHighQualityAntialiasing(bool))); #endif - isSlectionBlocked = false; + isSelectionBlocked = false; QActionGroup *rendererGroup = new QActionGroup(this); rendererGroup->addAction(m_nativeAction); @@ -353,6 +353,7 @@ int MDIViewPage::attachView(App::DocumentObject *obj) } +// wf: this is never executed??? void MDIViewPage::preSelectionChanged(const QPoint &pos) { QObject *obj = QObject::sender(); @@ -360,22 +361,21 @@ void MDIViewPage::preSelectionChanged(const QPoint &pos) if(!obj) return; - // Check if an edge was preselected + auto view( dynamic_cast(obj) ); + if(!view) + return; + + QGraphicsItem* parent = view->parentItem(); + if(!parent) + return; + + TechDraw::DrawView *viewObj = view->getViewObject(); + std::stringstream ss; + + QGIFace *face = dynamic_cast(obj); QGIEdge *edge = dynamic_cast(obj); QGIVertex *vert = dynamic_cast(obj); if(edge) { - - // Find the parent view that this edges is contained within - QGraphicsItem*parent = edge->parentItem(); - if(!parent) - return; - - QGIView *viewItem = dynamic_cast(parent); - if(!viewItem) - return; - - TechDraw::DrawView *viewObj = viewItem->getViewObject(); - std::stringstream ss; ss << "Edge" << edge->getProjIndex(); //bool accepted = static_cast (Gui::Selection().setPreselect(viewObj->getDocument()->getName() @@ -384,18 +384,7 @@ void MDIViewPage::preSelectionChanged(const QPoint &pos) ,pos.x() ,pos.y() ,0)); - } else if(vert) { - QGraphicsItem*parent = vert->parentItem(); - if(!parent) - return; - - QGIView *viewItem = dynamic_cast(parent); - if(!viewItem) - return; - - TechDraw::DrawView *viewObj = viewItem->getViewObject(); - std::stringstream ss; ss << "Vertex" << vert->getProjIndex(); //bool accepted = static_cast (Gui::Selection().setPreselect(viewObj->getDocument()->getName() @@ -404,25 +393,29 @@ void MDIViewPage::preSelectionChanged(const QPoint &pos) ,pos.x() ,pos.y() ,0)); + } else if(face) { + ss << "Face" << face->getProjIndex(); //TODO: SectionFaces have ProjIndex = -1. (but aren't selectable?) Problem? + //bool accepted = + static_cast (Gui::Selection().setPreselect(viewObj->getDocument()->getName() + ,viewObj->getNameInDocument() + ,ss.str().c_str() + ,pos.x() + ,pos.y() + ,0)); } else { - auto view( dynamic_cast(obj) ); - - if(!view) - return; - TechDraw::DrawView *viewObj = view->getViewObject(); + ss << ""; Gui::Selection().setPreselect(viewObj->getDocument()->getName() ,viewObj->getNameInDocument() - ,"" + ,ss.str().c_str() ,pos.x() ,pos.y() ,0); } } - void MDIViewPage::blockSelection(const bool state) { - isSlectionBlocked = state; + isSelectionBlocked = state; } @@ -445,6 +438,7 @@ void MDIViewPage::clearSelection() void MDIViewPage::selectFeature(App::DocumentObject *obj, const bool isSelected) { // Update QGVPage's selection based on Selection made outside Drawing Interace + // wf: but this also executes for changes within the Drawing Interface? QGIView *view = m_view->findView(obj); blockSelection(true); @@ -480,11 +474,8 @@ void MDIViewPage::updateTemplate(bool forceUpdate) } } } - - // m_view->setPageFeature(pageFeature); redundant } - void MDIViewPage::updateDrawing(bool forceUpdate) { // We cannot guarantee if the number of graphical representations (QGIVxxxx) have changed so check the number @@ -909,7 +900,6 @@ QPrinter::PageSize MDIViewPage::getPageSize(int w, int h) const return ps; } - void MDIViewPage::onSelectionChanged(const Gui::SelectionChanges& msg) { if (msg.Type == Gui::SelectionChanges::ClrSelection) { @@ -981,57 +971,51 @@ void MDIViewPage::saveSVG() m_view->saveSvg(fn); } - +//trigged by m_view->scene() signal void MDIViewPage::selectionChanged() { - if(isSlectionBlocked) + if(isSelectionBlocked) { return; + } QList selection = m_view->scene()->selectedItems(); - - bool block = blockConnection(true); // avoid to be notified by itself + bool saveBlock = blockConnection(true); // avoid to be notified by itself + blockSelection(true); Gui::Selection().clearSelection(); for (QList::iterator it = selection.begin(); it != selection.end(); ++it) { - // All selectable items must be of QGIView type - QGIView *itemView = dynamic_cast(*it); if(itemView == 0) { QGIEdge *edge = dynamic_cast(*it); if(edge) { - - // Find the parent view that this edges is contained within QGraphicsItem*parent = edge->parentItem(); if(!parent) - return; + continue; QGIView *viewItem = dynamic_cast(parent); if(!viewItem) - return; + continue; TechDraw::DrawView *viewObj = viewItem->getViewObject(); std::stringstream ss; - //ss << "Edge" << edge->getReference(); ss << "Edge" << edge->getProjIndex(); //bool accepted = static_cast (Gui::Selection().addSelection(viewObj->getDocument()->getName(), viewObj->getNameInDocument(), ss.str().c_str())); - //Base::Console().Message("TRACE - MDIVP::selectionChanged - selection: %s\n",ss.str().c_str()); + continue; } QGIVertex *vert = dynamic_cast(*it); if(vert) { - // Find the parent view that this edges is contained within - //WF: sb Vertex QGraphicsItem*parent = vert->parentItem(); if(!parent) - return; + continue; QGIView *viewItem = dynamic_cast(parent); if(!viewItem) - return; + continue; TechDraw::DrawView *viewObj = viewItem->getViewObject(); @@ -1041,31 +1025,46 @@ void MDIViewPage::selectionChanged() static_cast (Gui::Selection().addSelection(viewObj->getDocument()->getName(), viewObj->getNameInDocument(), ss.str().c_str())); + continue; + } + QGIFace *face = dynamic_cast(*it); + if(face) { + QGraphicsItem*parent = face->parentItem(); + if(!parent) + continue; + + QGIView *viewItem = dynamic_cast(parent); + if(!viewItem) + continue; + + TechDraw::DrawView *viewObj = viewItem->getViewObject(); + + std::stringstream ss; + ss << "Face" << face->getProjIndex(); + //bool accepted = + static_cast (Gui::Selection().addSelection(viewObj->getDocument()->getName(), + viewObj->getNameInDocument(), + ss.str().c_str())); + continue; } QGIDatumLabel *dimLabel = dynamic_cast(*it); if(dimLabel) { - // Find the parent view (dimLabel->dim->view) - QGraphicsItem*dimParent = dimLabel->parentItem(); - if(!dimParent) - return; + continue; QGIView *dimItem = dynamic_cast(dimParent); if(!dimItem) - return; + continue; TechDraw::DrawView *dimObj = dimItem->getViewObject(); //bool accepted = static_cast (Gui::Selection().addSelection(dimObj->getDocument()->getName(),dimObj->getNameInDocument())); - } - continue; - } else { TechDraw::DrawView *viewObj = itemView->getViewObject(); @@ -1078,7 +1077,8 @@ void MDIViewPage::selectionChanged() } - blockConnection(block); + blockConnection(saveBlock); + blockSelection(false); } // end MDIViewPage::selectionChanged() #include "moc_MDIViewPage.cpp" diff --git a/src/Mod/TechDraw/Gui/MDIViewPage.h b/src/Mod/TechDraw/Gui/MDIViewPage.h index bbf4d7aae..d804ef394 100644 --- a/src/Mod/TechDraw/Gui/MDIViewPage.h +++ b/src/Mod/TechDraw/Gui/MDIViewPage.h @@ -106,7 +106,7 @@ private: QAction *m_outlineAction; std::string m_objectName; - bool isSlectionBlocked; + bool isSelectionBlocked; QGVPage *m_view; QString m_currentPath; diff --git a/src/Mod/TechDraw/Gui/QGCustomBorder.cpp b/src/Mod/TechDraw/Gui/QGCustomBorder.cpp index ddbbd1ade..5b08912ba 100644 --- a/src/Mod/TechDraw/Gui/QGCustomBorder.cpp +++ b/src/Mod/TechDraw/Gui/QGCustomBorder.cpp @@ -44,6 +44,9 @@ using namespace TechDrawGui; QGCustomBorder::QGCustomBorder() { setCacheMode(QGraphicsItem::NoCache); + setAcceptHoverEvents(false); + setFlag(QGraphicsItem::ItemIsSelectable, false); + setFlag(QGraphicsItem::ItemIsMovable, false); } void QGCustomBorder::centerAt(QPointF centerPos) diff --git a/src/Mod/TechDraw/Gui/QGCustomLabel.cpp b/src/Mod/TechDraw/Gui/QGCustomLabel.cpp index 429e4f241..ef72c4234 100644 --- a/src/Mod/TechDraw/Gui/QGCustomLabel.cpp +++ b/src/Mod/TechDraw/Gui/QGCustomLabel.cpp @@ -47,6 +47,9 @@ using namespace TechDrawGui; QGCustomLabel::QGCustomLabel() { setCacheMode(QGraphicsItem::NoCache); + setAcceptHoverEvents(false); + setFlag(QGraphicsItem::ItemIsSelectable, false); + setFlag(QGraphicsItem::ItemIsMovable, false); } void QGCustomLabel::centerAt(QPointF centerPos) diff --git a/src/Mod/TechDraw/Gui/QGCustomRect.cpp b/src/Mod/TechDraw/Gui/QGCustomRect.cpp index 296795412..036ff6447 100644 --- a/src/Mod/TechDraw/Gui/QGCustomRect.cpp +++ b/src/Mod/TechDraw/Gui/QGCustomRect.cpp @@ -44,6 +44,9 @@ using namespace TechDrawGui; QGCustomRect::QGCustomRect() { setCacheMode(QGraphicsItem::NoCache); + setAcceptHoverEvents(false); + setFlag(QGraphicsItem::ItemIsSelectable, false); + setFlag(QGraphicsItem::ItemIsMovable, false); } void QGCustomRect::centerAt(QPointF centerPos) diff --git a/src/Mod/TechDraw/Gui/QGCustomSvg.cpp b/src/Mod/TechDraw/Gui/QGCustomSvg.cpp index 7d69dd964..c746eda99 100644 --- a/src/Mod/TechDraw/Gui/QGCustomSvg.cpp +++ b/src/Mod/TechDraw/Gui/QGCustomSvg.cpp @@ -34,6 +34,9 @@ using namespace TechDrawGui; QGCustomSvg::QGCustomSvg() { setCacheMode(QGraphicsItem::NoCache); + setAcceptHoverEvents(false); + setFlag(QGraphicsItem::ItemIsSelectable, false); + setFlag(QGraphicsItem::ItemIsMovable, false); } void QGCustomSvg::centerAt(QPointF centerPos) diff --git a/src/Mod/TechDraw/Gui/QGCustomText.cpp b/src/Mod/TechDraw/Gui/QGCustomText.cpp index ecf6dac3f..4639b091a 100644 --- a/src/Mod/TechDraw/Gui/QGCustomText.cpp +++ b/src/Mod/TechDraw/Gui/QGCustomText.cpp @@ -47,6 +47,9 @@ using namespace TechDrawGui; QGCustomText::QGCustomText() { setCacheMode(QGraphicsItem::NoCache); + setAcceptHoverEvents(false); + setFlag(QGraphicsItem::ItemIsSelectable, false); + setFlag(QGraphicsItem::ItemIsMovable, false); } void QGCustomText::centerAt(QPointF centerPos) diff --git a/src/Mod/TechDraw/Gui/QGIArrow.cpp b/src/Mod/TechDraw/Gui/QGIArrow.cpp index 1555b702f..39ca2bce8 100644 --- a/src/Mod/TechDraw/Gui/QGIArrow.cpp +++ b/src/Mod/TechDraw/Gui/QGIArrow.cpp @@ -47,7 +47,9 @@ QGIArrow::QGIArrow(QGraphicsScene *scene) // Set Cache Mode setCacheMode(QGraphicsItem::NoCache); - + setAcceptHoverEvents(false); + setFlag(QGraphicsItem::ItemIsSelectable, false); + setFlag(QGraphicsItem::ItemIsMovable, false); } QPainterPath QGIArrow::shape() const diff --git a/src/Mod/TechDraw/Gui/QGIEdge.cpp b/src/Mod/TechDraw/Gui/QGIEdge.cpp index 93e9a1f22..2c2afbb88 100644 --- a/src/Mod/TechDraw/Gui/QGIEdge.cpp +++ b/src/Mod/TechDraw/Gui/QGIEdge.cpp @@ -47,6 +47,7 @@ QGIEdge::QGIEdge(int index) : { setCacheMode(QGraphicsItem::NoCache); setFlag(QGraphicsItem::ItemIsSelectable, true); + setFlag(QGraphicsItem::ItemIsMovable, false); setFlag(QGraphicsItem::ItemSendsScenePositionChanges, true); setFlag(QGraphicsItem::ItemSendsGeometryChanges,true); setAcceptHoverEvents(true); @@ -54,6 +55,7 @@ QGIEdge::QGIEdge(int index) : strokeWidth = 1.; isCosmetic = false; + m_pen.setCosmetic(isCosmetic); isHighlighted = false; isHiddenEdge = false; isSmoothEdge = false; @@ -76,7 +78,6 @@ QGIEdge::QGIEdge(int index) : m_pen.setStyle(Qt::SolidLine); m_pen.setCapStyle(Qt::RoundCap); - m_pen.setCosmetic(isCosmetic); setPrettyNormal(); } @@ -109,7 +110,9 @@ QVariant QGIEdge::itemChange(GraphicsItemChange change, const QVariant &value) void QGIEdge::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { - setPrettyPre(); + if (!isSelected()) { + setPrettyPre(); + } QGraphicsPathItem::hoverEnterEvent(event); } @@ -117,7 +120,6 @@ void QGIEdge::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { QGIView *view = dynamic_cast (parentItem()); //this is temp for debug?? assert(view != 0); - if(!isSelected() && !isHighlighted) { setPrettyNormal(); } @@ -130,6 +132,7 @@ void QGIEdge::setCosmetic(bool state) update(); } +// obs? void QGIEdge::setHighlighted(bool b) { isHighlighted = b; diff --git a/src/Mod/TechDraw/Gui/QGIFace.cpp b/src/Mod/TechDraw/Gui/QGIFace.cpp index 55fd16e29..cce913a79 100644 --- a/src/Mod/TechDraw/Gui/QGIFace.cpp +++ b/src/Mod/TechDraw/Gui/QGIFace.cpp @@ -43,15 +43,21 @@ using namespace TechDrawGui; -QGIFace::QGIFace(int ref) : - reference(ref), - m_fill(Qt::NoBrush) - //m_fill(Qt::CrossPattern) - //m_fill(Qt::Dense3Pattern) +QGIFace::QGIFace(int index) : + projIndex(index), + m_colDefFill(Qt::white), //Qt::transparent? paper colour? + m_styleDef(Qt::SolidPattern), + m_styleSelect(Qt::SolidPattern) { setCacheMode(QGraphicsItem::NoCache); + setFlag(QGraphicsItem::ItemIsSelectable, true); + setFlag(QGraphicsItem::ItemIsMovable, false); + setFlag(QGraphicsItem::ItemSendsScenePositionChanges, true); + setFlag(QGraphicsItem::ItemSendsGeometryChanges,true); setAcceptHoverEvents(true); + isHighlighted = false; + Base::Reference hGrp = App::GetApplication().GetUserParameter() .GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/TechDraw/Colors"); App::Color fcColor = App::Color((uint32_t) hGrp->GetUnsigned("NormalColor", 0x00000000)); @@ -61,15 +67,21 @@ QGIFace::QGIFace(int ref) : fcColor.setPackedValue(hGrp->GetUnsigned("PreSelectColor", 0x00080800)); m_colPre = fcColor.asValue(); - //m_pen.setStyle(Qt::NoPen); - m_brush.setStyle(m_fill); + + m_pen.setCosmetic(true); + m_pen.setColor(m_colNormal); + + m_colNormalFill = m_colDefFill; + m_brush.setColor(m_colDefFill); + m_styleNormal = m_styleDef; + m_brush.setStyle(m_styleDef); setPrettyNormal(); } QVariant QGIFace::itemChange(GraphicsItemChange change, const QVariant &value) { if (change == ItemSelectedHasChanged && scene()) { - if(isSelected()) { + if(isSelected()) { //this is only QtGui Selected, not FC selected? setPrettySel(); } else { setPrettyNormal(); @@ -80,46 +92,96 @@ QVariant QGIFace::itemChange(GraphicsItemChange change, const QVariant &value) void QGIFace::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { - setPrettyPre(); + if (!isSelected() && !isHighlighted) { + setPrettyPre(); + } + QGraphicsPathItem::hoverEnterEvent(event); } void QGIFace::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { - QGIView *view = dynamic_cast (parentItem()); + if (!isSelected()) { + setPrettyNormal(); + } + QGraphicsPathItem::hoverLeaveEvent(event); +} - if(!isSelected() && !view->isSelected()) { +void QGIFace::mousePressEvent(QGraphicsSceneMouseEvent * event) +{ + QGraphicsItem::mousePressEvent(event); +} + +void QGIFace::mouseReleaseEvent(QGraphicsSceneMouseEvent * event) +{ + QGraphicsItem::mouseReleaseEvent(event); +} + +void QGIFace::setPrettyNormal() { + m_colCurrent = m_colNormal; + m_colCurrFill = m_colNormalFill; + m_styleCurr = m_styleNormal; + update(); +} + +void QGIFace::setPrettyPre() { + m_colCurrent = m_colPre; + m_colCurrFill = m_colPre; + m_styleCurr = m_styleSelect; + update(); +} + +void QGIFace::setPrettySel() { + m_colCurrent = m_colSel; + m_colCurrFill = m_colSel; + m_styleCurr = m_styleSelect; + update(); +} + +void QGIFace::setHighlighted(bool b) +{ + isHighlighted = b; + if(isHighlighted && isSelected()) { + setPrettySel(); + } else if (isHighlighted) { + setPrettyPre(); + } else { setPrettyNormal(); } } -void QGIFace::setPrettyNormal() { - m_pen.setColor(m_colNormal); - //m_brush.setColor(m_colNormal); - setPen(m_pen); - //setBrush(m_brush); +void QGIFace::setFill(QColor c, Qt::BrushStyle s) { + m_colNormalFill = c; + m_styleCurr = s; } -void QGIFace::setPrettyPre() { - m_pen.setColor(m_colPre); - //m_brush.setColor(m_colPre); - setPen(m_pen); - //setBrush(m_brush); +void QGIFace::setFill(QBrush b) { + m_colNormalFill = b.color(); + m_styleCurr = b.style(); } -void QGIFace::setPrettySel() { - m_pen.setColor(m_colSel); - //m_brush.setColor(m_colSel); - setPen(m_pen); - //setBrush(m_brush); +void QGIFace::resetFill() { + m_colNormalFill = m_colDefFill; + m_styleCurr = m_styleDef; +} + +QRectF QGIFace::boundingRect() const +{ + return shape().controlPointRect(); +} + +QPainterPath QGIFace::shape() const +{ + return path(); } void QGIFace::paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget) { QStyleOptionGraphicsItem myOption(*option); - //myOption.state &= ~QStyle::State_Selected; //commented for debugging + myOption.state &= ~QStyle::State_Selected; - //m_pen.setColor(m_colCurrent); - //setPen(m_pen); - //m_brush.setStyle(m_fill); + m_pen.setColor(m_colCurrent); + setPen(m_pen); + m_brush.setStyle(m_styleCurr); + m_brush.setColor(m_colCurrFill); setBrush(m_brush); QGraphicsPathItem::paint (painter, &myOption, widget); } diff --git a/src/Mod/TechDraw/Gui/QGIFace.h b/src/Mod/TechDraw/Gui/QGIFace.h index f7677142d..2bea62b0c 100644 --- a/src/Mod/TechDraw/Gui/QGIFace.h +++ b/src/Mod/TechDraw/Gui/QGIFace.h @@ -41,19 +41,27 @@ namespace TechDrawGui class QGIFace : public QGraphicsPathItem { public: - explicit QGIFace(int ref = -1); + explicit QGIFace(int index = -1); ~QGIFace() {} enum {Type = QGraphicsItem::UserType + 104}; int type() const { return Type;} + QRectF boundingRect() const; + QPainterPath shape() const; virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0 ); public: -// QPainterPath shape() const; - int getReference() const { return reference; } + int getProjIndex() const { return projIndex; } + + void setHighlighted(bool state); void setPrettyNormal(); void setPrettyPre(); void setPrettySel(); + void setFill(QColor c, Qt::BrushStyle s); + void setFill(QBrush b); + void resetFill(void); + + virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent * event); protected: // Preselection events: @@ -61,9 +69,11 @@ protected: void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); // Selection detection QVariant itemChange(GraphicsItemChange change, const QVariant &value); + virtual void mousePressEvent(QGraphicsSceneMouseEvent * event); protected: - int reference; + int projIndex; //index of face in Projection. -1 for SectionFace. + bool isHighlighted; private: QPen m_pen; @@ -71,9 +81,17 @@ private: QColor m_colNormal; QColor m_colPre; QColor m_colSel; - Qt::BrushStyle m_fill; + QColor m_colCurrent; + QColor m_defNormal; //pen default normal color + + QColor m_colDefFill; //"no color" + QColor m_colCurrFill; //current color + QColor m_colNormalFill; + Qt::BrushStyle m_styleDef; //default Normal fill fill style + Qt::BrushStyle m_styleCurr; //current fill style + Qt::BrushStyle m_styleNormal; //Normal fill style + Qt::BrushStyle m_styleSelect; //Select/preSelect fill style }; -} // namespace MDIViewPageGui - +} #endif // DRAWINGGUI_QGRAPHICSITEMFACE_H diff --git a/src/Mod/TechDraw/Gui/QGIHatch.cpp b/src/Mod/TechDraw/Gui/QGIHatch.cpp index a6ce031d5..c195b37a8 100644 --- a/src/Mod/TechDraw/Gui/QGIHatch.cpp +++ b/src/Mod/TechDraw/Gui/QGIHatch.cpp @@ -59,10 +59,12 @@ QGIHatch::QGIHatch(std::string parentHatch) : //m_fill(Qt::CrossPattern) //m_fill(Qt::Dense6Pattern) { - setHandlesChildEvents(false); - setFlag(QGraphicsItem::ItemIsMovable, false); - setAcceptHoverEvents(true); setCacheMode(QGraphicsItem::NoCache); + setFlag(QGraphicsItem::ItemIsSelectable, true); + setFlag(QGraphicsItem::ItemIsMovable, false); + setFlag(QGraphicsItem::ItemSendsScenePositionChanges, true); + setFlag(QGraphicsItem::ItemSendsGeometryChanges,true); + setAcceptHoverEvents(true); Base::Reference hGrp = App::GetApplication().GetUserParameter() .GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/TechDraw/Colors"); diff --git a/src/Mod/TechDraw/Gui/QGIVertex.h b/src/Mod/TechDraw/Gui/QGIVertex.h index 492186e1f..62685ca89 100644 --- a/src/Mod/TechDraw/Gui/QGIVertex.h +++ b/src/Mod/TechDraw/Gui/QGIVertex.h @@ -40,7 +40,6 @@ namespace TechDrawGui class TechDrawGuiExport QGIVertex : public QGraphicsEllipseItem { public: - //explicit QGIVertex(int ref = -1); explicit QGIVertex(int index); ~QGIVertex() {} diff --git a/src/Mod/TechDraw/Gui/QGIView.cpp b/src/Mod/TechDraw/Gui/QGIView.cpp index 5b9ce59ab..c0756a4f1 100644 --- a/src/Mod/TechDraw/Gui/QGIView.cpp +++ b/src/Mod/TechDraw/Gui/QGIView.cpp @@ -66,10 +66,14 @@ QGIView::QGIView() borderVisible(true), m_innerView(false) { - setFlag(QGraphicsItem::ItemIsSelectable,true); + setCacheMode(QGraphicsItem::NoCache); + setHandlesChildEvents(false); + setAcceptHoverEvents(true); + setFlag(QGraphicsItem::ItemIsSelectable, true); + setFlag(QGraphicsItem::ItemIsMovable, true); setFlag(QGraphicsItem::ItemSendsScenePositionChanges, true); setFlag(QGraphicsItem::ItemSendsGeometryChanges,true); - setAcceptHoverEvents(true); + Base::Reference hGrp = App::GetApplication().GetUserParameter() .GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/TechDraw/Colors"); @@ -188,12 +192,12 @@ void QGIView::mouseReleaseEvent(QGraphicsSceneMouseEvent * event) void QGIView::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { - // TODO don't like this but only solution at the minute + // TODO don't like this but only solution at the minute (MLP) if (isSelected()) { m_colCurrent = m_colSel; } else { m_colCurrent = m_colPre; - //if(shape().contains(event->pos())) { // TODO don't like this for determining preselect + //if(shape().contains(event->pos())) { // TODO don't like this for determining preselect (MLP) // m_colCurrent = m_colPre; //} } @@ -382,4 +386,3 @@ void _debugRect(char* text, QRectF r) { Base::Console().Message("TRACE - %s - rect: (%.3f,%.3f) x (%.3f,%.3f)\n",text, r.left(),r.top(),r.right(),r.bottom()); } - diff --git a/src/Mod/TechDraw/Gui/QGIViewAnnotation.cpp b/src/Mod/TechDraw/Gui/QGIViewAnnotation.cpp index 42de8539c..5e6612a97 100644 --- a/src/Mod/TechDraw/Gui/QGIViewAnnotation.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewAnnotation.cpp @@ -57,10 +57,10 @@ using namespace TechDrawGui; QGIViewAnnotation::QGIViewAnnotation() { - setHandlesChildEvents(false); setCacheMode(QGraphicsItem::NoCache); - setAcceptHoverEvents(true); + setFlag(QGraphicsItem::ItemIsSelectable, true); setFlag(QGraphicsItem::ItemIsMovable, true); + setAcceptHoverEvents(true); m_textItem = new QGCustomText(); m_textItem->setTextInteractionFlags(Qt::NoTextInteraction); diff --git a/src/Mod/TechDraw/Gui/QGIViewPart.cpp b/src/Mod/TechDraw/Gui/QGIViewPart.cpp index 1c07996e2..6fb160e1d 100644 --- a/src/Mod/TechDraw/Gui/QGIViewPart.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewPart.cpp @@ -62,10 +62,15 @@ const float vertexScaleFactor = 2.; // temp fiddle for devel QGIViewPart::QGIViewPart() { - setHandlesChildEvents(false); setCacheMode(QGraphicsItem::NoCache); + setHandlesChildEvents(false); setAcceptHoverEvents(true); + setFlag(QGraphicsItem::ItemIsSelectable, true); setFlag(QGraphicsItem::ItemIsMovable, true); + setFlag(QGraphicsItem::ItemSendsScenePositionChanges, true); + setFlag(QGraphicsItem::ItemSendsGeometryChanges,true); + + Base::Reference hGrp = App::GetApplication().GetUserParameter() .GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/Drawing/Colors"); @@ -83,12 +88,16 @@ QVariant QGIViewPart::itemChange(GraphicsItemChange change, const QVariant &valu if (change == ItemSelectedHasChanged && scene()) { QList items = childItems(); for(QList::iterator it = items.begin(); it != items.end(); ++it) { + //Highlight the children if this is highlighted!? seems to mess up Face selection? QGIEdge *edge = dynamic_cast(*it); QGIVertex *vert = dynamic_cast(*it); + QGIFace *face = dynamic_cast(*it); if(edge) { - edge->setHighlighted(isSelected()); + //edge->setHighlighted(isSelected()); } else if(vert){ - vert->setHighlighted(isSelected()); + //vert->setHighlighted(isSelected()); + } else if(face){ + //face->setHighlighted(isSelected()); } } } else if(change == ItemSceneChange && scene()) { @@ -238,6 +247,7 @@ void QGIViewPart::updateView(bool update) viewPart->Scale.isTouched() || viewPart->ShowHiddenLines.isTouched()) { // Remove all existing graphical representations (QGIxxxx) otherwise BRect only grows, never shrinks? + // is this where selection messes up? prepareGeometryChange(); QList items = childItems(); for(QList::iterator it = items.begin(); it != items.end(); ++it) { @@ -292,15 +302,12 @@ void QGIViewPart::drawViewPart() // Draw Faces const std::vector &faceGeoms = viewPart->getFaceGeometry(); std::vector::const_iterator fit = faceGeoms.begin(); - QPen facePen; - facePen.setCosmetic(true); - //QBrush faceBrush; for(int i = 0 ; fit != faceGeoms.end(); fit++, i++) { QGIFace* newFace = drawFace(*fit,i); - newFace->setPen(facePen); newFace->setZValue(ZVALUE::FACE); newFace->setFlag(QGraphicsItem::ItemIsSelectable, true); - //newFace->setBrush(faceBrush); + newFace->setAcceptHoverEvents(true); + newFace->setPrettyNormal(); } #endif //#if MOD_TECHDRAW_HANDLE_FACES @@ -635,4 +642,3 @@ void _dumpPath(const char* text,QPainterPath path) elem.type,typeName,elem.x,elem.y,elem.isMoveTo(),elem.isLineTo(),elem.isCurveTo()); } } - diff --git a/src/Mod/TechDraw/Gui/QGIViewSection.cpp b/src/Mod/TechDraw/Gui/QGIViewSection.cpp index 975b98fb7..0af07eb2b 100644 --- a/src/Mod/TechDraw/Gui/QGIViewSection.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewSection.cpp @@ -67,8 +67,6 @@ void QGIViewSection::drawSectionFace() return; } - //Base::Console().Log("drawing section face\n"); - std::vector sectionFaces; sectionFaces = section->getFaceGeometry(); if (sectionFaces.empty()) { @@ -76,21 +74,18 @@ void QGIViewSection::drawSectionFace() return; } std::vector::iterator fit = sectionFaces.begin(); - QPen facePen; - facePen.setCosmetic(true); - QBrush faceBrush(QBrush(QColor(0,0,255,40))); //temp. sb preference or property. + QColor faceColor(0,0,255,40); //temp. sb preference or property. for(; fit != sectionFaces.end(); fit++) { - QGIFace* newFace = drawFace(*fit,-1); + QGIFace* newFace = drawFace(*fit,-1); //TODO: do we need to know which sectionFace this QGIFace came from? newFace->setZValue(ZVALUE::SECTIONFACE); - newFace->setBrush(faceBrush); - newFace->setPen(facePen); - //newFace->setEyeCandy() + newFace->setFill(faceColor, Qt::SolidPattern); + newFace->setFlag(QGraphicsItem::ItemIsSelectable, false); + newFace->setAcceptHoverEvents(false); } } void QGIViewSection::updateView(bool update) { - // Iterate if(getViewObject() == 0 || !getViewObject()->isDerivedFrom(TechDraw::DrawViewPart::getClassTypeId())) return; @@ -104,4 +99,3 @@ void QGIViewSection::updateView(bool update) QGIViewPart::updateView(); } } - diff --git a/src/Mod/TechDraw/Gui/QGIViewSpreadsheet.cpp b/src/Mod/TechDraw/Gui/QGIViewSpreadsheet.cpp index 01d93b077..8e070bb20 100644 --- a/src/Mod/TechDraw/Gui/QGIViewSpreadsheet.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewSpreadsheet.cpp @@ -35,6 +35,7 @@ QGIViewSpreadsheet::QGIViewSpreadsheet() setCacheMode(QGraphicsItem::NoCache); setAcceptHoverEvents(true); setFlag(QGraphicsItem::ItemIsMovable, true); + setFlag(QGraphicsItem::ItemIsSelectable, true); } diff --git a/src/Mod/TechDraw/Gui/QGIViewSymbol.cpp b/src/Mod/TechDraw/Gui/QGIViewSymbol.cpp index 6855feb63..ed05ab9a1 100644 --- a/src/Mod/TechDraw/Gui/QGIViewSymbol.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewSymbol.cpp @@ -51,6 +51,7 @@ QGIViewSymbol::QGIViewSymbol() setCacheMode(QGraphicsItem::NoCache); setAcceptHoverEvents(true); setFlag(QGraphicsItem::ItemIsMovable, true); + setFlag(QGraphicsItem::ItemIsSelectable, true); m_svgRender = new QSvgRenderer();