2016-04-15 22:40:45 +02:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include <QtCore/QUuid>
|
2015-12-10 14:29:59 +01:00
|
|
|
|
|
|
|
|
#include <QtWidgets/QGraphicsObject>
|
|
|
|
|
|
2018-08-09 20:19:12 -06:00
|
|
|
#include "PortType.hpp"
|
|
|
|
|
#include "NodeData.hpp"
|
|
|
|
|
#include "NodeIndex.hpp"
|
|
|
|
|
#include "ConnectionGeometry.hpp"
|
|
|
|
|
#include "ConnectionState.hpp"
|
|
|
|
|
|
2015-12-10 14:29:59 +01:00
|
|
|
class QGraphicsSceneMouseEvent;
|
|
|
|
|
|
2017-01-30 10:31:43 +01:00
|
|
|
namespace QtNodes
|
|
|
|
|
{
|
|
|
|
|
|
2016-05-24 10:07:41 +02:00
|
|
|
class FlowScene;
|
2018-08-22 19:46:02 -04:00
|
|
|
struct ConnectionID;
|
2015-12-10 14:29:59 +01:00
|
|
|
|
2018-08-09 20:19:12 -06:00
|
|
|
/// Graphic Object for connection.
|
2015-12-10 14:29:59 +01:00
|
|
|
class ConnectionGraphicsObject
|
|
|
|
|
: public QGraphicsObject
|
|
|
|
|
{
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
2018-08-22 22:36:34 +02:00
|
|
|
ConnectionGraphicsObject(NodeIndex const& leftNode,
|
|
|
|
|
PortIndex leftPortIndex,
|
|
|
|
|
NodeIndex const& rightNode,
|
|
|
|
|
PortIndex rightPortIndex,
|
|
|
|
|
FlowScene& scene);
|
2016-05-24 10:07:41 +02:00
|
|
|
|
2016-11-07 22:12:44 +01:00
|
|
|
virtual
|
|
|
|
|
~ConnectionGraphicsObject();
|
2015-12-10 14:29:59 +01:00
|
|
|
|
2017-03-18 07:05:15 -06:00
|
|
|
enum { Type = UserType + 2 };
|
|
|
|
|
int
|
2018-08-22 22:36:34 +02:00
|
|
|
type() const override
|
|
|
|
|
{
|
|
|
|
|
return Type;
|
|
|
|
|
}
|
2017-03-18 07:05:15 -06:00
|
|
|
|
2015-12-10 14:29:59 +01:00
|
|
|
public:
|
|
|
|
|
|
2018-08-22 22:36:34 +02:00
|
|
|
NodeIndex
|
|
|
|
|
node(PortType pType) const
|
|
|
|
|
{
|
|
|
|
|
return pType == PortType::In ? _rightNode : _leftNode;
|
|
|
|
|
}
|
|
|
|
|
PortIndex
|
|
|
|
|
portIndex(PortType pType) const
|
|
|
|
|
{
|
|
|
|
|
return pType == PortType::In ? _rightPortIndex : _leftPortIndex;
|
|
|
|
|
}
|
2018-08-09 20:19:12 -06:00
|
|
|
|
2018-08-22 22:36:34 +02:00
|
|
|
FlowScene&
|
|
|
|
|
flowScene() const
|
|
|
|
|
{
|
|
|
|
|
return _scene;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ConnectionGeometry const&
|
|
|
|
|
geometry() const
|
|
|
|
|
{
|
|
|
|
|
return _geometry;
|
|
|
|
|
}
|
|
|
|
|
ConnectionGeometry&
|
|
|
|
|
geometry()
|
|
|
|
|
{
|
|
|
|
|
return _geometry;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ConnectionState const&
|
|
|
|
|
state() const
|
|
|
|
|
{
|
|
|
|
|
return _state;
|
|
|
|
|
}
|
|
|
|
|
ConnectionState&
|
|
|
|
|
state()
|
|
|
|
|
{
|
|
|
|
|
return _state;
|
|
|
|
|
}
|
2015-12-10 14:29:59 +01:00
|
|
|
|
2016-11-07 22:12:44 +01:00
|
|
|
QRectF
|
|
|
|
|
boundingRect() const override;
|
2015-12-11 14:53:53 +01:00
|
|
|
|
2016-11-07 22:12:44 +01:00
|
|
|
QPainterPath
|
|
|
|
|
shape() const override;
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
setGeometryChanged();
|
2016-05-24 10:07:41 +02:00
|
|
|
|
2018-08-09 20:19:12 -06:00
|
|
|
ConnectionID
|
|
|
|
|
id() const;
|
|
|
|
|
|
2018-08-22 22:36:34 +02:00
|
|
|
NodeDataType
|
|
|
|
|
dataType(PortType ty) const;
|
2018-08-09 20:19:12 -06:00
|
|
|
|
2016-09-22 09:56:42 +02:00
|
|
|
/// Updates the position of both ends
|
2016-11-07 22:12:44 +01:00
|
|
|
void
|
|
|
|
|
move();
|
2016-09-22 09:56:42 +02:00
|
|
|
|
2017-05-07 19:02:44 +02:00
|
|
|
void
|
|
|
|
|
lock(bool locked);
|
|
|
|
|
|
2018-08-09 20:19:12 -06:00
|
|
|
const FlowScene&
|
2018-08-22 22:36:34 +02:00
|
|
|
scene() const
|
|
|
|
|
{
|
|
|
|
|
return _scene;
|
|
|
|
|
}
|
2018-08-09 20:19:12 -06:00
|
|
|
|
|
|
|
|
FlowScene&
|
2018-08-22 22:36:34 +02:00
|
|
|
scene()
|
|
|
|
|
{
|
|
|
|
|
return _scene;
|
|
|
|
|
}
|
2018-08-09 20:19:12 -06:00
|
|
|
|
2015-12-10 14:29:59 +01:00
|
|
|
protected:
|
2016-04-16 19:13:02 +02:00
|
|
|
|
2016-11-07 22:12:44 +01:00
|
|
|
void
|
|
|
|
|
paint(QPainter* painter,
|
|
|
|
|
QStyleOptionGraphicsItem const* option,
|
|
|
|
|
QWidget* widget = 0) override;
|
2015-12-10 14:29:59 +01:00
|
|
|
|
2016-11-07 22:12:44 +01:00
|
|
|
void
|
|
|
|
|
mousePressEvent(QGraphicsSceneMouseEvent* event) override;
|
2015-12-11 12:47:50 +01:00
|
|
|
|
2016-11-07 22:12:44 +01:00
|
|
|
void
|
|
|
|
|
mouseMoveEvent(QGraphicsSceneMouseEvent* event) override;
|
2015-12-10 14:29:59 +01:00
|
|
|
|
2016-11-07 22:12:44 +01:00
|
|
|
void
|
|
|
|
|
mouseReleaseEvent(QGraphicsSceneMouseEvent* event) override;
|
2015-12-10 14:29:59 +01:00
|
|
|
|
2016-11-07 22:12:44 +01:00
|
|
|
void
|
|
|
|
|
hoverEnterEvent(QGraphicsSceneHoverEvent* event) override;
|
2015-12-11 14:53:53 +01:00
|
|
|
|
2016-11-07 22:12:44 +01:00
|
|
|
void
|
|
|
|
|
hoverLeaveEvent(QGraphicsSceneHoverEvent* event) override;
|
2016-04-16 19:13:02 +02:00
|
|
|
|
2015-12-10 14:29:59 +01:00
|
|
|
private:
|
|
|
|
|
|
2016-11-07 22:12:44 +01:00
|
|
|
void
|
|
|
|
|
addGraphicsEffect();
|
2016-04-16 19:13:02 +02:00
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
2016-05-24 10:07:41 +02:00
|
|
|
FlowScene & _scene;
|
|
|
|
|
|
2018-08-09 20:19:12 -06:00
|
|
|
ConnectionGeometry _geometry;
|
|
|
|
|
ConnectionState _state;
|
2018-08-22 22:36:34 +02:00
|
|
|
|
2018-08-09 20:19:12 -06:00
|
|
|
NodeIndex _leftNode;
|
|
|
|
|
NodeIndex _rightNode;
|
|
|
|
|
|
|
|
|
|
PortIndex _leftPortIndex;
|
|
|
|
|
PortIndex _rightPortIndex;
|
|
|
|
|
|
2015-12-10 14:29:59 +01:00
|
|
|
};
|
2017-01-30 10:31:43 +01:00
|
|
|
}
|