64 lines
1.7 KiB
C
64 lines
1.7 KiB
C
|
|
#pragma once
|
||
|
|
|
||
|
|
#include <QtCore/QPointF>
|
||
|
|
|
||
|
|
#include "global.h"
|
||
|
|
|
||
|
|
class ConnectionGraphicsObject;
|
||
|
|
class NodeGraphicsObject;
|
||
|
|
class BasicGraphicsScene;
|
||
|
|
|
||
|
|
/// Class wraps conecting and disconnecting checks.
|
||
|
|
/**
|
||
|
|
* An instance should be created on the stack and destroyed
|
||
|
|
* automatically when the operation is completed
|
||
|
|
*/
|
||
|
|
class NodeConnectionInteraction
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
NodeConnectionInteraction(NodeGraphicsObject &ngo,
|
||
|
|
ConnectionGraphicsObject &cgo,
|
||
|
|
BasicGraphicsScene &scene);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Can connect when following conditions are met:
|
||
|
|
* 1. Connection 'requires' a port.
|
||
|
|
* 2. Connection loose end is above the node port.
|
||
|
|
* 3. Source and target `nodeId`s are different.
|
||
|
|
* 4. GraphModel permits connection.
|
||
|
|
*/
|
||
|
|
bool canConnect(PortIndex *portIndex) const;
|
||
|
|
|
||
|
|
/// Creates a new connectino if possible.
|
||
|
|
/**
|
||
|
|
* 1. Check conditions from 'canConnect'.
|
||
|
|
* 2. Creates new connection with `GraphModel::addConnection`.
|
||
|
|
* 3. Adjust connection geometry.
|
||
|
|
*/
|
||
|
|
bool tryConnect() const;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 1. Delete connection with `GraphModel::deleteConnection`.
|
||
|
|
* 2. Create a "draft" connection with incomplete `ConnectionId`.
|
||
|
|
* 3. Repaint both previously connected nodes.
|
||
|
|
*/
|
||
|
|
bool disconnect(PortType portToDisconnect) const;
|
||
|
|
|
||
|
|
private:
|
||
|
|
PortType connectionRequiredPort() const;
|
||
|
|
|
||
|
|
QPointF connectionEndScenePosition(PortType) const;
|
||
|
|
|
||
|
|
QPointF nodePortScenePosition(PortType portType, PortIndex portIndex) const;
|
||
|
|
|
||
|
|
PortIndex nodePortIndexUnderScenePoint(PortType portType, QPointF const &p) const;
|
||
|
|
|
||
|
|
private:
|
||
|
|
NodeGraphicsObject &_ngo;
|
||
|
|
|
||
|
|
ConnectionGraphicsObject &_cgo;
|
||
|
|
|
||
|
|
BasicGraphicsScene &_scene;
|
||
|
|
};
|
||
|
|
|