Пример #1
0
bool IntToStringNode::CanConnect(ObjectHandleT<ISlot> mySlot, ObjectHandleT<ISlot> otherSlot)
{
	bool result = false;

	while (true)
	{
		ObjectHandleT<INode> otherNode = otherSlot->Node();
		if (this == otherNode.get())
			break;

		if (!(mySlot->IsInput() ^ otherSlot->IsInput()))
			break;

		if (mySlot->Type() != otherSlot->Type())
			break;

		if (mySlot->Color() != otherSlot->Color())
			break;

		auto connectedSlots = mySlot->GetConnectedSlots();
		result = (std::find_if(connectedSlots->begin(), connectedSlots->end(), [&otherSlot](const ISlot* slot) {
			          return otherSlot->Id() == slot->Id();
			      }) == connectedSlots->end());
		break;
	}

	return result;
}
Пример #2
0
bool StringSlot::Disconnect(size_t connectionID, ObjectHandleT<ISlot> slot)
{
    assert(m_pNode != nullptr);
    bool result = false;
    auto slotPos = std::find_if(m_connectedSlots.begin(), m_connectedSlots.end(), [&slot](const ObjectHandleT<ISlot> &connectedSlot) {
        return slot->Id() == connectedSlot->Id();
    });

    if (slotPos != m_connectedSlots.end())
    {
        result = true;
        m_connectedSlots.erase(slotPos);
        m_connectionIds.erase(connectionID);
        m_pNode->OnDisconnect(this, slot);
    }

    return result;
}