feat: add delete edge gradient
This commit is contained in:
@@ -87,7 +87,8 @@ void Network::deleteEdge(QGraphicsItem* edge)
|
|||||||
// view_->update();
|
// view_->update();
|
||||||
// NOTE: deleting edge kept giving me segmentation faults
|
// NOTE: deleting edge kept giving me segmentation faults
|
||||||
// I coundn't figure it out so I'm just leaving it for now
|
// I coundn't figure it out so I'm just leaving it for now
|
||||||
delete edge;
|
// delete edge;
|
||||||
|
static_cast<NodeEdgeGraphic*>(edge)->cleanUp();
|
||||||
std::cout << "finished deleting edge\n----\n";
|
std::cout << "finished deleting edge\n----\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -268,14 +269,14 @@ void Network::highlightEdge(QGraphicsItem* edge, bool state)
|
|||||||
if(!edge || !isType<NodeEdgeGraphic>(edge)) return;
|
if(!edge || !isType<NodeEdgeGraphic>(edge)) return;
|
||||||
if(state)
|
if(state)
|
||||||
{
|
{
|
||||||
static_cast<NodeEdgeGraphic*>(edge)->setColor(QColor("red"));
|
static_cast<NodeEdgeGraphic*>(edge)->setDeleteHighlight(true);
|
||||||
prevHoverItem_=edge;
|
prevHoverItem_=edge;
|
||||||
// NOTE: sloppy fix for color not updating
|
// NOTE: sloppy fix for color not updating
|
||||||
view_->update();
|
view_->update();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
static_cast<NodeEdgeGraphic*>(edge)->useDefaultColor();
|
static_cast<NodeEdgeGraphic*>(edge)->setDeleteHighlight(false);
|
||||||
// NOTE: sloppy fix for color not updating
|
// NOTE: sloppy fix for color not updating
|
||||||
view_->update();
|
view_->update();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,15 +6,32 @@
|
|||||||
#include <QGraphicsScene>
|
#include <QGraphicsScene>
|
||||||
|
|
||||||
NodeEdgeGraphic::NodeEdgeGraphic(SocketGraphic* socket1, SocketGraphic* socket2, QGraphicsItem *parent)
|
NodeEdgeGraphic::NodeEdgeGraphic(SocketGraphic* socket1, SocketGraphic* socket2, QGraphicsItem *parent)
|
||||||
: QGraphicsItem(parent), socket1_{socket1}, socket2_{socket2}, defaultColor_{QColor("white")}, pen_{QPen(QColor("white"))}
|
: QGraphicsItem(parent), socket1_{socket1}, socket2_{socket2}, defaultColor_{QColor("white")}
|
||||||
{
|
{
|
||||||
setZValue(-1);
|
setZValue(-1);
|
||||||
color_=defaultColor_;
|
color_=defaultColor_;
|
||||||
|
defaultPen_=QPen(defaultColor_);
|
||||||
|
defaultPen_.setCapStyle(Qt::RoundCap);
|
||||||
|
|
||||||
|
deleteHighlightPen_.setCapStyle(Qt::RoundCap);
|
||||||
|
deleteHighlightPen_.setWidth(1);
|
||||||
|
updateDeleteHighlightPen();
|
||||||
|
|
||||||
|
|
||||||
socket1_->addEdge(this);
|
socket1_->addEdge(this);
|
||||||
socket2_->addEdge(this);
|
socket2_->addEdge(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NodeEdgeGraphic::updateDeleteHighlightPen()
|
||||||
|
{
|
||||||
|
QLinearGradient gradient(pos1_, pos2_);
|
||||||
|
gradient.setColorAt(0.0, QColor(255, 0, 0, 200));
|
||||||
|
gradient.setColorAt(0.5, QColor(255, 0, 0, 50));
|
||||||
|
gradient.setColorAt(1.0, QColor(255, 0, 0, 200));
|
||||||
|
|
||||||
|
deleteHighlightPen_.setBrush(QBrush(gradient));
|
||||||
|
}
|
||||||
|
|
||||||
NodeEdgeGraphic::~NodeEdgeGraphic()
|
NodeEdgeGraphic::~NodeEdgeGraphic()
|
||||||
{
|
{
|
||||||
std::cout << "edge destructor\n";
|
std::cout << "edge destructor\n";
|
||||||
@@ -28,29 +45,36 @@ void NodeEdgeGraphic::updatePath()
|
|||||||
path_.clear();
|
path_.clear();
|
||||||
path_.moveTo(pos1_);
|
path_.moveTo(pos1_);
|
||||||
path_.cubicTo(pos1_-QPoint(0,cubicStrength), pos2_+QPoint(0,cubicStrength), pos2_);
|
path_.cubicTo(pos1_-QPoint(0,cubicStrength), pos2_+QPoint(0,cubicStrength), pos2_);
|
||||||
|
updateDeleteHighlightPen();
|
||||||
update();
|
update();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void NodeEdgeGraphic::setPos(QPointF pos1, QPointF pos2)
|
void NodeEdgeGraphic::setPos(QPointF pos1, QPointF pos2)
|
||||||
{
|
{
|
||||||
|
prepareGeometryChange();
|
||||||
pos1_ = pos1;
|
pos1_ = pos1;
|
||||||
pos2_ = pos2;
|
pos2_ = pos2;
|
||||||
prepareGeometryChange();
|
|
||||||
updatePath();
|
updatePath();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NodeEdgeGraphic::setDeleteHighlight(bool enable)
|
||||||
|
{
|
||||||
|
deleteHighlight_=enable;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
void NodeEdgeGraphic::setStartPos(QPointF pos)
|
void NodeEdgeGraphic::setStartPos(QPointF pos)
|
||||||
{
|
{
|
||||||
pos1_ = pos;
|
|
||||||
prepareGeometryChange();
|
prepareGeometryChange();
|
||||||
|
pos1_ = pos;
|
||||||
updatePath();
|
updatePath();
|
||||||
}
|
}
|
||||||
|
|
||||||
void NodeEdgeGraphic::setEndPos(QPointF pos)
|
void NodeEdgeGraphic::setEndPos(QPointF pos)
|
||||||
{
|
{
|
||||||
pos2_ = pos;
|
|
||||||
prepareGeometryChange();
|
prepareGeometryChange();
|
||||||
|
pos2_ = pos;
|
||||||
updatePath();
|
updatePath();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,30 +96,34 @@ QPainterPath NodeEdgeGraphic::shape() const{
|
|||||||
return stroker.createStroke(path_);
|
return stroker.createStroke(path_);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NodeEdgeGraphic::setColor(QColor color)
|
// void NodeEdgeGraphic::setColor(QColor color)
|
||||||
{
|
// {
|
||||||
std::cout << "color set to: " << color.name().toStdString() << "\n";
|
// std::cout << "color set to: " << color.name().toStdString() << "\n";
|
||||||
color_ = color;
|
// color_ = color;
|
||||||
pen_.setColor(color_);
|
// pen_.setColor(color_);
|
||||||
update();
|
// update();
|
||||||
}
|
// }
|
||||||
|
|
||||||
void NodeEdgeGraphic::useDefaultColor()
|
// void NodeEdgeGraphic::useDefaultColor()
|
||||||
{
|
// {
|
||||||
setColor(defaultColor_);
|
// setColor(defaultColor_);
|
||||||
}
|
// }
|
||||||
|
|
||||||
void NodeEdgeGraphic::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
|
void NodeEdgeGraphic::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
|
||||||
{
|
{
|
||||||
// std::cout << "painting\n";
|
// std::cout << "painting\n";
|
||||||
pen_.setCapStyle(Qt::RoundCap);
|
painter->setPen(deleteHighlight_ ? deleteHighlightPen_ : defaultPen_);
|
||||||
painter->setPen(pen_);
|
|
||||||
painter->drawPath(path_);
|
painter->drawPath(path_);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void NodeEdgeGraphic::cleanUp()
|
void NodeEdgeGraphic::cleanUp()
|
||||||
{
|
{
|
||||||
|
// these probably aren't necessary but i'm trying to fix a bug
|
||||||
|
prepareGeometryChange();
|
||||||
|
update();
|
||||||
|
scene()->update();
|
||||||
|
|
||||||
scene()->removeItem(this);
|
scene()->removeItem(this);
|
||||||
socket1_->removeEdge(this);
|
socket1_->removeEdge(this);
|
||||||
socket2_->removeEdge(this);
|
socket2_->removeEdge(this);
|
||||||
|
|||||||
@@ -14,18 +14,24 @@ public:
|
|||||||
|
|
||||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
|
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
|
||||||
QPainterPath shape() const override;
|
QPainterPath shape() const override;
|
||||||
void setColor(QColor color);
|
// void setColor(QColor color);
|
||||||
void useDefaultColor();
|
// void useDefaultColor();
|
||||||
|
void updateDeleteHighlightPen();
|
||||||
void setPos(QPointF pos1, QPointF pos2);
|
void setPos(QPointF pos1, QPointF pos2);
|
||||||
void setStartPos(QPointF pos);
|
void setStartPos(QPointF pos);
|
||||||
void setEndPos(QPointF pos);
|
void setEndPos(QPointF pos);
|
||||||
|
void cleanUp();
|
||||||
|
void setDeleteHighlight(bool enable);
|
||||||
|
QPen deleteHighlightPen_;
|
||||||
|
QPen defaultPen_;
|
||||||
|
|
||||||
|
bool deleteHighlight_=false;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SocketGraphic* socket1_;
|
SocketGraphic* socket1_;
|
||||||
SocketGraphic* socket2_;
|
SocketGraphic* socket2_;
|
||||||
QColor color_;
|
QColor color_;
|
||||||
QColor defaultColor_;
|
QColor defaultColor_;
|
||||||
QPen pen_;
|
|
||||||
QPointF pos1_;
|
QPointF pos1_;
|
||||||
QPointF pos2_;
|
QPointF pos2_;
|
||||||
QPainterPath path_;
|
QPainterPath path_;
|
||||||
@@ -33,6 +39,5 @@ private:
|
|||||||
qreal padding_=40;
|
qreal padding_=40;
|
||||||
|
|
||||||
void updatePath();
|
void updatePath();
|
||||||
void cleanUp();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user