Skip to content

Commit

Permalink
Fixed non-emit of NodeDelegateModel::in/outputConnectionCreated/Deleted.
Browse files Browse the repository at this point in the history
The four virtual functions in NodeDelegateModel were not being called
anywhere in code as the logic was removed when FlowScene.cpp was removed
as part of the v3 upgrade.

This functionality has been restored thanks to two new functions
`DataFlowGraphModel::sendConnectionCreation` and
`DataFlowGraphModel::sendConnectionDeletion` which call the slots on
both the input and output nodes of any given connection.

Functions are:
- inputConnectionCreated
- inputConnectionDeleted
- outputConnectionCreated
- outputConnectionDeleted

Signed-off-by: Finn Rayment <finn@rayment.fr>
  • Loading branch information
rayment authored and paceholder committed Jan 30, 2023
1 parent 98a1260 commit 5465ddc
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 3 deletions.
4 changes: 4 additions & 0 deletions include/QtNodes/internal/DataFlowGraphModel.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,10 @@ class NODE_EDITOR_PUBLIC DataFlowGraphModel : public AbstractGraphModel, public
private:
NodeId newNodeId() override { return _nextNodeId++; }

void sendConnectionCreation(ConnectionId const connectionId);

void sendConnectionDeletion(ConnectionId const connectionId);

private Q_SLOTS:
/**
* Fuction is called in three cases:
Expand Down
2 changes: 1 addition & 1 deletion include/QtNodes/internal/NodeDelegateModel.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class StyleCollection;
/**
* The class wraps Node-specific data operations and propagates it to
* the nesting DataFlowGraphModel which is a subclass of
* AbstractGrapModel.
* AbstractGraphModel.
* This class is the same what has been called NodeDataModel before v3.
*/
class NODE_EDITOR_PUBLIC NodeDelegateModel : public QObject, public Serializable
Expand Down
32 changes: 30 additions & 2 deletions src/DataFlowGraphModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ void DataFlowGraphModel::addConnection(ConnectionId const connectionId)
{
_connectivity.insert(connectionId);

Q_EMIT connectionCreated(connectionId);
sendConnectionCreation(connectionId);

QVariant const portDataToPropagate = portData(connectionId.outNodeId,
PortType::Out,
Expand All @@ -146,6 +146,34 @@ void DataFlowGraphModel::addConnection(ConnectionId const connectionId)
PortRole::Data);
}

void DataFlowGraphModel::sendConnectionCreation(ConnectionId const connectionId)
{
Q_EMIT connectionCreated(connectionId);

auto iti = _models.find(connectionId.inNodeId);
auto ito = _models.find(connectionId.outNodeId);
if (iti != _models.end() && ito != _models.end()) {
auto &modeli = iti->second;
auto &modelo = ito->second;
modeli->inputConnectionCreated(connectionId);
modelo->outputConnectionCreated(connectionId);
}
}

void DataFlowGraphModel::sendConnectionDeletion(ConnectionId const connectionId)
{
Q_EMIT connectionDeleted(connectionId);

auto iti = _models.find(connectionId.inNodeId);
auto ito = _models.find(connectionId.outNodeId);
if (iti != _models.end() && ito != _models.end()) {
auto &modeli = iti->second;
auto &modelo = ito->second;
modeli->inputConnectionDeleted(connectionId);
modelo->outputConnectionDeleted(connectionId);
}
}

bool DataFlowGraphModel::nodeExists(NodeId const nodeId) const
{
return (_models.find(nodeId) != _models.end());
Expand Down Expand Up @@ -355,7 +383,7 @@ bool DataFlowGraphModel::deleteConnection(ConnectionId const connectionId)
}

if (disconnected) {
Q_EMIT connectionDeleted(connectionId);
sendConnectionDeletion(connectionId);

propagateEmptyDataTo(getNodeId(PortType::In, connectionId),
getPortIndex(PortType::In, connectionId));
Expand Down

0 comments on commit 5465ddc

Please sign in to comment.