[TechDraw] Refactor QGIView and QGIPrimPath mouse processing

This commit is contained in:
pavltom
2023-11-16 12:45:58 +01:00
committed by WandererFan
parent bd69b1c341
commit ec6df1726e
3 changed files with 14 additions and 39 deletions

View File

@@ -259,26 +259,6 @@ Qt::PenCapStyle QGIPrimPath::prefCapStyle()
return result;
}
void QGIPrimPath::mousePressEvent(QGraphicsSceneMouseEvent * event)
{
//wf: this seems a bit of a hack. does it mess up selection of QGIPP??
QGIView *parent;
QGraphicsItem* qparent = parentItem();
if (qparent) {
parent = dynamic_cast<QGIView *> (qparent);
if (parent) {
// Base::Console().Message("QGIPP::mousePressEvent - passing event to QGIV parent\n");
parent->mousePressEvent(event);
} else {
// qparent->mousePressEvent(event); //protected!
QGraphicsPathItem::mousePressEvent(event);
}
} else {
// Base::Console().Message("QGIPP::mousePressEvent - passing event to ancestor\n");
QGraphicsPathItem::mousePressEvent(event);
}
}
void QGIPrimPath::setFill(QColor c, Qt::BrushStyle s) {
setFillColor(c);
m_fillNormal = s;

View File

@@ -78,7 +78,6 @@ protected:
void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;
QVariant itemChange(GraphicsItemChange change, const QVariant &value) override;
void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
virtual QColor getNormalColor();
virtual QColor getPreColor();

View File

@@ -159,10 +159,12 @@ QVariant QGIView::itemChange(GraphicsItemChange change, const QVariant &value)
return newPos;
}
TechDraw::DrawView *viewObj = getViewObject();
// TODO find a better data structure for this
// this is just a pair isn't it?
if (getViewObject()->isDerivedFrom(TechDraw::DrawProjGroupItem::getClassTypeId())) {
TechDraw::DrawProjGroupItem* dpgi = static_cast<TechDraw::DrawProjGroupItem*>(getViewObject());
if (viewObj->isDerivedFrom(TechDraw::DrawProjGroupItem::getClassTypeId())) {
TechDraw::DrawProjGroupItem* dpgi = static_cast<TechDraw::DrawProjGroupItem*>(viewObj);
TechDraw::DrawProjGroup* dpg = dpgi->getPGroup();
if (dpg) {
if(alignHash.size() == 1) { //if aligned.
@@ -176,9 +178,13 @@ QVariant QGIView::itemChange(GraphicsItemChange change, const QVariant &value)
}
}
} else {
//not a dpgi, not locked, but moved.
//feat->setPosition(Rez::appX(newPos.x()), -Rez::appX(newPos.y());
Gui::ViewProvider *vp = getViewProvider(viewObj);
if (vp && !vp->isRestoring()) {
viewObj->setPosition(Rez::appX(newPos.x()),
Rez::appX(isInnerView() ? getYInClip(newPos.y()) : -newPos.y()));
}
}
return newPos;
}
@@ -203,7 +209,7 @@ void QGIView::mousePressEvent(QGraphicsSceneMouseEvent * event)
m_dragState = DRAGSTARTED;
}
QGraphicsItem::mousePressEvent(event);
QGraphicsItemGroup::mousePressEvent(event);
}
void QGIView::mouseMoveEvent(QGraphicsSceneMouseEvent * event)
@@ -211,26 +217,16 @@ void QGIView::mouseMoveEvent(QGraphicsSceneMouseEvent * event)
if (m_dragState == DRAGSTARTED) {
m_dragState = DRAGGING;
}
QGraphicsItem::mouseMoveEvent(event);
QGraphicsItemGroup::mouseMoveEvent(event);
}
void QGIView::mouseReleaseEvent(QGraphicsSceneMouseEvent * event)
{
//TODO: this should be done in itemChange - item position has changed
// Base::Console().Message("QGIV::mouseReleaseEvent() - %s\n", getViewName());
// if(scene() && this == scene()->mouseGrabberItem()) {
if (m_dragState == DRAGGING && !m_locked) {
if (!isInnerView()) {
double tempX = x(),
tempY = getY();
getViewObject()->setPosition(Rez::appX(tempX), Rez::appX(tempY));
} else {
getViewObject()->setPosition(Rez::appX(x()), Rez::appX(getYInClip(y())));
}
}
m_dragState = NODRAG;
QGraphicsItem::mouseReleaseEvent(event);
QGraphicsItemGroup::mouseReleaseEvent(event);
}
void QGIView::hoverEnterEvent(QGraphicsSceneHoverEvent *event)