6#include <Wt/WPainter.h>
8#include <Wt/WFontMetrics.h>
10#include <Wt/WPaintDevice.h>
121 float diam = nodeStyle.ConnectionPointDiameter;
123 Wt::WPointF p0 = t.map(Wt::WPointF(
width() + diam, -diam));
125 float x = p0.x() - point.x();
126 float y = point.y() - p0.y();
130 if (y > 0.0f && y < h)
146 float diam = nodeStyle.ConnectionPointDiameter;
148 Wt::WPointF p0 = t.map(Wt::WPointF(
width() + diam, -diam));
150 float x = p0.x() - point.x();
151 float y = point.y() - p0.y();
155 if (y > 0.0f && y < h)
169 unsigned int rectSize = 7;
171 return Wt::WRectF(
_width - rectSize,
179 std::string msg =
_dataModel->validationMessage();
186 std::string msg =
_dataModel->validationMessage();
195 std::string trueName;
197 size_t pos = str.find(
'<');
199 if (pos != std::string::npos)
201 trueName = str.substr(0, pos);
213 double const addon = 0.0;
215 return Wt::WRectF(0 - addon,
225 double addon = 4 * nodeStyle.ConnectionPointDiameter;
227 return Wt::WRectF(0 - addon,
240 _height = step * maxNumOfEntries;
282 totalHeight += step * index;
285 totalHeight += step / 2.0;
291 double x =
_width + nodeStyle.ConnectionPointDiameter;
299 double x = 0.0 - nodeStyle.ConnectionPointDiameter;
301 result = Wt::WPointF(x, totalHeight);
309 return t.map(result);
321 double const tolerance = 2.0 * nodeStyle.ConnectionPointDiameter;
323 unsigned int const nItems =
_dataModel->nPorts(portType);
325 for (
unsigned int i = 0; i < nItems; ++i)
329 Wt::WPointF p(pp.x() - scenePoint.x(), pp.y() - scenePoint.y());
331 double dotProduct = p.x() * p.x() + p.y() * p.y();
333 auto distance = std::sqrt(dotProduct);
334 if (distance < tolerance)
353 double const tolerance = 2.0 * nodeStyle.ConnectionPointDiameter;
355 unsigned int const nItems =
_dataModel->nPorts(portType);
357 for (
unsigned int i = 0; i < nItems; ++i)
360 Wt::WPointF p(pp.x() - scenePoint.x(), pp.y() - scenePoint.y());
361 double dotProduct = p.x() * p.x() + p.y() * p.y();
362 auto distance = std::sqrt(dotProduct);
363 if (distance < tolerance)
542 int widthNum = str.size();
543 return height * widthNum / 2.5;
549 return height * num / 2.5;
556 for (
auto i = 0ul; i <
_dataModel->nPorts(portType); ++i)
560 if (
_dataModel->portCaptionVisible(portType, i))
566 name =
_dataModel->dataType(portType, i).name;
612 connections.at(portIndex).insert(std::make_pair(connection.
id(),
666WtNode::WtNode(std::unique_ptr<WtNodeDataModel>&& dataModel, Wt::WPaintDevice* paintDevice)
750 for (
auto const& c : connections)
753 c.second->propagateData(nodeData);
767 for (
auto& conn_set :
nodeState().getEntries(type))
769 for (
auto& pair : conn_set)
static const int INVALID_PORT
unsigned int _hotkeyOffset
unsigned int captionHeightSpacing() const
WtNodeGeometry(std::unique_ptr< WtNodeDataModel > const &dataModel, Wt::WPaintDevice *paintDevice)
unsigned int _entryHeight
void HidePortTips() const
PortIndex hoverHitScenePoint(PortType portType, Wt::WPointF point, Wt::WTransform const &t=Wt::WTransform()) const
unsigned int captionHeight() const
unsigned int captionWidth() const
unsigned int nSinks() const
Wt::WPointF portScenePosition(PortIndex index, PortType portType, Wt::WTransform const &t=Wt::WTransform()) const
unsigned int hotkeyIncline() const
bool checkHitHotKey1(Wt::WPointF point, Wt::WTransform const &t=Wt::WTransform()) const
Wt::WFontMetrics _fontMetrics
Wt::WRectF resizeRect() const
void recalculateSize() const
unsigned int portWidth(PortType portType) const
unsigned int width() const
unsigned int _hotkeyIncline
unsigned int hotkeyWidth() const
unsigned int height() const
bool getPortTipsState() const
std::unique_ptr< WtNodeDataModel > const & _dataModel
void ShowPortTips() const
Wt::WRectF boundingRect() const
double calculateWidth(std::string) const
unsigned int _hotkeyWidth
unsigned int validationHeight() const
unsigned int hotkeyOffset() const
PortIndex checkHitScenePoint(PortType portType, Wt::WPointF point, Wt::WTransform const &t=Wt::WTransform()) const
unsigned int _captionHeightSpacing
unsigned int _inputPortWidth
unsigned int _outputPortWidth
std::string strFormat(std::string str) const
unsigned int nSources() const
unsigned int validationWidth() const
bool checkHitHotKey0(Wt::WPointF point, Wt::WTransform const &t=Wt::WTransform()) const
Wt::WRectF entryBoundingRect() const
std::unique_ptr< WtNodeDataModel > _nodeDataModel
WtNodeDataModel * nodeDataModel() const
std::unique_ptr< WtNodeGraphicsObject > _nodeGraphicsObject
void setGraphicsObject(std::unique_ptr< WtNodeGraphicsObject > &&graphics)
void onDataUpdated(PortIndex index)
WtNodeGraphicsObject const & nodeGraphicsObject() const
WtNodeGeometry _nodeGeometry
WtNode(std::unique_ptr< WtNodeDataModel > &&dataModel, Wt::WPaintDevice *paintDevice)
void resetReactionToConnection()
void propagateData(std::shared_ptr< WtNodeData > nodeData, PortIndex inPortIndex) const
Propagates incoming data to the underlying model.
WtNodeState const & nodeState() const
WtNodeGeometry & nodeGeometry()
void onNodeSizeUpdated()
update the graphic part if the size of the embeddedwidget changes
std::vector< ConnectionPtrSet > _outConnections
std::unordered_map< Wt::Guid, WtConnection * > ConnectionPtrSet
WtNodeState(std::unique_ptr< WtNodeDataModel > const &model)
std::vector< ConnectionPtrSet > _inConnections
std::vector< ConnectionPtrSet > const & getEntries(PortType) const
PortType reactingPortType() const
ReactToConnectionState reaction() const
NodeDataType _reactingDataType
ConnectionPtrSet connections(PortType portType, PortIndex portIndex) const
PortType _reactingPortType
void eraseConnection(PortType portType, PortIndex portIndex, Wt::Guid id)
ReactToConnectionState _reaction
void setConnection(PortType portType, PortIndex portIndex, WtConnection &connection)
void setReaction(ReactToConnectionState reaction, PortType reactingPortType=PortType::None, NodeDataType reactingDataType=NodeDataType())
void setResizing(bool resizing)
NodeDataType reactingDataType() const
static WtNodeStyle const & nodeStyle()