Files

182 lines
2.8 KiB
C++
Raw Permalink Normal View History

2016-04-07 22:37:28 +02:00
#pragma once
2015-12-23 14:47:08 +01:00
2016-01-03 19:45:47 +01:00
#include <QtWidgets/QWidget>
2016-04-20 23:18:10 +02:00
#include "PortType.hpp"
2016-03-29 08:45:30 +02:00
#include "NodeData.hpp"
2016-09-23 09:45:07 +02:00
#include "Serializable.hpp"
#include "NodeGeometry.hpp"
2017-04-24 11:18:54 +02:00
#include "NodeStyle.hpp"
#include "NodePainterDelegate.hpp"
#include "Export.hpp"
#include "memory.hpp"
2017-01-30 10:31:43 +01:00
namespace QtNodes
{
enum class NodeValidationState
{
Valid,
Warning,
Error
};
class Connection;
class StyleCollection;
class NODE_EDITOR_PUBLIC NodeDataModel
2016-09-18 15:05:14 +02:00
: public QObject
2016-09-23 09:45:07 +02:00
, public Serializable
2015-12-23 14:47:08 +01:00
{
Q_OBJECT
2016-04-07 22:37:28 +02:00
public:
NodeDataModel();
2017-04-24 11:18:54 +02:00
2016-09-18 15:05:14 +02:00
virtual
~NodeDataModel() = default;
2016-01-03 19:45:47 +01:00
2016-09-23 09:45:07 +02:00
/// Caption is used in GUI
2016-09-18 15:05:14 +02:00
virtual QString
2016-09-23 09:45:07 +02:00
caption() const = 0;
/// It is possible to hide caption in GUI
virtual bool
captionVisible() const { return true; }
2016-11-22 22:01:28 +01:00
/// Port caption is used in GUI to label individual ports
virtual QString
portCaption(PortType, PortIndex) const { return QString(); }
/// It is possible to hide port caption in GUI
virtual bool
portCaptionVisible(PortType, PortIndex) const { return false; }
2016-11-25 02:14:51 +01:00
/// Name makes this model unique
virtual QString
name() const = 0;
2017-01-31 21:30:56 +01:00
public:
QJsonObject
save() const override;
2017-01-31 21:30:56 +01:00
2015-12-23 14:47:08 +01:00
public:
2016-09-18 15:05:14 +02:00
virtual
unsigned int nPorts(PortType portType) const = 0;
2015-12-23 14:47:08 +01:00
virtual
NodeDataType dataType(PortType portType, PortIndex portIndex) const = 0;
2017-04-24 21:57:21 +02:00
public:
enum class ConnectionPolicy
{
One,
Many,
};
2017-04-24 21:57:21 +02:00
virtual
ConnectionPolicy
portOutConnectionPolicy(PortIndex) const
{
return ConnectionPolicy::Many;
}
virtual
ConnectionPolicy
portInConnectionPolicy(PortIndex) const
{
return ConnectionPolicy::One;
}
2017-04-24 11:18:54 +02:00
NodeStyle const&
nodeStyle() const;
2017-04-24 11:18:54 +02:00
void
setNodeStyle(NodeStyle const& style);
2017-04-24 11:18:54 +02:00
2016-08-22 22:20:34 +02:00
public:
2015-12-23 14:47:08 +01:00
2016-01-03 19:45:47 +01:00
/// Triggers the algorithm
2016-09-18 15:05:14 +02:00
virtual
void
setInData(std::shared_ptr<NodeData> nodeData,
2020-04-17 05:44:24 -04:00
PortIndex port)
{
Q_UNUSED(nodeData);
Q_UNUSED(port);
};
2015-12-23 14:47:08 +01:00
2016-08-22 22:20:34 +02:00
virtual
2016-09-18 15:05:14 +02:00
std::shared_ptr<NodeData>
outData(PortIndex port) = 0;
2016-08-22 22:20:34 +02:00
2016-09-18 15:05:14 +02:00
virtual
QWidget *
2020-04-17 05:44:24 -04:00
embeddedWidget() { return nullptr; };
2016-09-18 15:05:14 +02:00
virtual
bool
resizable() const { return false; }
2017-01-30 10:31:43 +01:00
virtual
NodeValidationState
validationState() const { return NodeValidationState::Valid; }
virtual
QString
2020-04-17 02:25:14 -04:00
validationMessage() const { return QStringLiteral(""); }
2015-12-23 14:47:08 +01:00
virtual
NodePainterDelegate* painterDelegate() const { return nullptr; }
public Q_SLOTS:
virtual void
inputConnectionCreated(Connection const&)
{
}
virtual void
inputConnectionDeleted(Connection const&)
{
}
virtual void
outputConnectionCreated(Connection const&)
{
}
virtual void
outputConnectionDeleted(Connection const&)
{
}
2019-02-06 22:05:38 +01:00
Q_SIGNALS:
2015-12-23 14:47:08 +01:00
2016-09-18 15:05:14 +02:00
void
dataUpdated(PortIndex index);
2016-09-18 15:05:14 +02:00
void
dataInvalidated(PortIndex index);
void
computingStarted();
2016-09-23 09:45:07 +02:00
2016-09-18 15:05:14 +02:00
void
computingFinished();
2017-04-24 11:18:54 +02:00
void embeddedWidgetSizeUpdated();
2020-04-17 05:44:24 -04:00
void portChanged(PortType type, PortIndex index);
2017-04-24 11:18:54 +02:00
private:
NodeStyle _nodeStyle;
2015-12-23 14:47:08 +01:00
};
2017-01-30 10:31:43 +01:00
}