From 5ca0a2e48d0198102dabad4af5048a53e6938fe8 Mon Sep 17 00:00:00 2001 From: Aleks Kissinger Date: Mon, 13 Apr 2020 22:30:51 +0100 Subject: automatically expact selection to path --- src/data/style.cpp | 4 +++- src/gui/tikzscene.cpp | 34 ++++++++++++++++++++++++++++++---- src/gui/tikzscene.h | 1 + 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/data/style.cpp b/src/data/style.cpp index d0f011d..fe33ee0 100644 --- a/src/data/style.cpp +++ b/src/data/style.cpp @@ -62,7 +62,9 @@ QColor Style::fillColor(bool tikzitOverride) const QBrush Style::brush() const { - return QBrush(fillColor()); + QString col = propertyWithDefault("fill", "none", true); + if (col == "none") return Qt::NoBrush; + else return QBrush(tikzit->colorByName(col)); } QString Style::shape(bool tikzitOverride) const diff --git a/src/gui/tikzscene.cpp b/src/gui/tikzscene.cpp index 57ddb48..e510931 100644 --- a/src/gui/tikzscene.cpp +++ b/src/gui/tikzscene.cpp @@ -389,7 +389,6 @@ void TikzScene::makePath() foreach (Edge *e, p) { if (e != p.first()) oldEdgeData[e] = e->data()->copy(); } - qDebug() << oldEdgeData; _tikzDocument->undoStack()->beginMacro("Make Path"); _tikzDocument->undoStack()->push(new ReverseEdgesCommand(this, flip)); @@ -448,6 +447,7 @@ void TikzScene::mousePressEvent(QGraphicsSceneMouseEvent *event) _mouseDownPos = event->scenePos(); _draggingNodes = false; + _selectingEdge = nullptr; // radius of a control point for bezier edges, in scene coordinates qreal cpR = GLOBAL_SCALEF * (0.1); @@ -528,9 +528,19 @@ void TikzScene::mousePressEvent(QGraphicsSceneMouseEvent *event) } } - auto its = items(_mouseDownPos); - if (!its.isEmpty() && dynamic_cast(its[0])) - _draggingNodes = true; + QList its = items(_mouseDownPos); + if (!its.isEmpty()) { + if (dynamic_cast(its[0])) { + _draggingNodes = true; + } else { + foreach (QGraphicsItem *gi, its) { + if (EdgeItem *ei = dynamic_cast(gi)) { + _selectingEdge = ei->edge(); + break; + } + } + } + } } break; @@ -730,6 +740,22 @@ void TikzScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) // otherwise, process mouse move normally QGraphicsScene::mouseReleaseEvent(event); + if (_selectingEdge) { + bool sel = edgeItems()[_selectingEdge]->isSelected(); + Path *p = _selectingEdge->path(); + if (p) { + foreach (Edge *e, p->edges()) { + if (e != _selectingEdge) + edgeItems()[e]->setSelected(sel); + nodeItems()[e->source()]->setSelected(sel); + nodeItems()[e->target()]->setSelected(sel); + } + } else { + nodeItems()[_selectingEdge->source()]->setSelected(sel); + nodeItems()[_selectingEdge->target()]->setSelected(sel); + } + } + if (_rubberBandItem->isVisible()) { QPainterPath sel; sel.addRect(_rubberBandItem->rect()); diff --git a/src/gui/tikzscene.h b/src/gui/tikzscene.h index 2e72faf..3f035e2 100644 --- a/src/gui/tikzscene.h +++ b/src/gui/tikzscene.h @@ -118,6 +118,7 @@ private: QGraphicsLineItem *_drawEdgeItem; QGraphicsRectItem *_rubberBandItem; EdgeItem *_modifyEdgeItem; + Edge *_selectingEdge; NodeItem *_edgeStartNodeItem; NodeItem *_edgeEndNodeItem; bool _firstControlPoint; -- cgit v1.2.3