33    Wt::WPainter* painter,
 
   64    double const radius = 6.0;
 
   66    Wt::WRectF boundary = model->
captionVisible() ? Wt::WRectF(-diam, -diam, 2.0 * diam + geom.
width(), 2.0 * diam + geom.
height())
 
   67        : Wt::WRectF(-diam, 0.0f, 2.0 * diam + geom.
width(), diam + geom.
height());
 
   75        double captionRatio = (double)captionHeight / geom.
height();
 
   77        painter->setBrush(Wt::WColor(Wt::StandardColor::White));
 
   79        painter->drawRect(boundary);
 
   90        painter->drawRect(boundary);
 
 
   95    Wt::WPainter* painter,
 
  109    auto reducedDiameter = diameter * 0.6;
 
  111    std::vector<connectionPointData> pointsData;
 
  117        for (
unsigned int i = 0; i < n; i++)
 
  125            auto const& dataType = model->
dataType(portType, i);
 
  127            bool canConnect = (state.
getEntries(portType)[i].empty() ||
 
  137                double dist = std::sqrt(diff.x() * diff.x() + diff.y() * diff.y());
 
  139                bool typeConvertable = 
false;
 
  144                        typeConvertable = scene.registry().getTypeConverter(state.
reactingDataType(), dataType) != 
nullptr;
 
  148                        typeConvertable = scene.registry().getTypeConverter(dataType, state.
reactingDataType()) != 
nullptr;
 
  154                    double const thres = 40.0;
 
  156                        (2.0 - dist / thres) :
 
  161                    double const thres = 80.0;
 
  169            if (connectionStyle.useDataDefinedColors())
 
  171                painter->setBrush(connectionStyle.normalColor(dataType.id));
 
  178            double w = diameter * 0.4 * r;
 
  179            double h = diameter * 0.8 * r;
 
  181            vert[0] = Wt::WPointF(p.x() - w, p.y() - h);
 
  182            vert[1] = Wt::WPointF(p.x() - w, p.y() + h);
 
  183            vert[2] = Wt::WPointF(p.x() + w, p.y() + h);
 
  184            vert[3] = Wt::WPointF(p.x() + (2.5 * w), p.y());
 
  185            vert[4] = Wt::WPointF(p.x() + w, p.y() - h);
 
  187            double dr = diameter * 1 * r;
 
  188            Wt::WPointF diamond[4];
 
  189            diamond[0] = Wt::WPointF(p.x(), p.y() + dr);
 
  190            diamond[1] = Wt::WPointF(p.x() + dr, p.y());
 
  191            diamond[2] = Wt::WPointF(p.x(), p.y() - dr);
 
  192            diamond[3] = Wt::WPointF(p.x() - dr, p.y());
 
  194            double odr = diameter * 1.1 * r;
 
  195            double idr = diameter * 0.3 * r;
 
  196            Wt::WPointF diamond_out[4];
 
  197            diamond_out[0] = Wt::WPointF(p.x(), p.y() + odr);
 
  198            diamond_out[1] = Wt::WPointF(p.x() + odr, p.y());
 
  199            diamond_out[2] = Wt::WPointF(p.x(), p.y() - odr);
 
  200            diamond_out[3] = Wt::WPointF(p.x() - odr, p.y());
 
  202            Wt::WPointF diamond_inner[4];
 
  203            diamond_inner[0] = Wt::WPointF(p.x(), p.y() + idr);
 
  204            diamond_inner[1] = Wt::WPointF(p.x() + idr, p.y());
 
  205            diamond_inner[2] = Wt::WPointF(p.x(), p.y() - idr);
 
  206            diamond_inner[3] = Wt::WPointF(p.x() - idr, p.y());
 
  208            double rx = reducedDiameter * r;
 
  209            double ry = reducedDiameter * r;
 
  210            Wt::WRectF drawRect = Wt::WRectF(p.x() - rx, p.y() - ry, 2 * rx, 2 * ry);
 
  212            switch (dataType.shape)
 
  215                painter->drawEllipse(drawRect);
 
  221                painter->drawPolygon(diamond_out, 4);
 
  222                painter->setBrush(Wt::StandardColor::White);
 
  223                painter->drawPolygon(diamond_inner, 4);
 
  232                painter->drawPolygon(diamond, 4);
 
  235                pointData.
diamond[0] = diamond[0];
 
  236                pointData.
diamond[1] = diamond[1];
 
  237                pointData.
diamond[2] = diamond[2];
 
  238                pointData.
diamond[3] = diamond[3];
 
  244            pointsData.push_back(pointData);
 
 
  251    Wt::WPainter* painter,
 
  264    Wt::WFontMetrics metrics = painter->device()->fontMetrics();
 
  266    Wt::WPointF position(0, 0);
 
  268    Wt::WFont f = painter->font();
 
  270    f.setWeight(Wt::FontWeight::Bold);
 
  274    Wt::WRectF boundary(position, position);
 
  277    painter->setPen(Wt::WPen(nodeStyle.
FontColor));
 
  278    painter->drawRect(boundary);
 
  279    painter->drawText(boundary, Wt::AlignmentFlag::Left, Wt::WString(name));
 
  281    f.setWeight(Wt::FontWeight::Normal);
 
 
  286    Wt::WPainter* painter,
 
  304    const Wt::WPen& pen = painter->pen();
 
  341        Wt::WPointF points[4];
 
  342        points[0] = Wt::WPointF(geom.
width() + diam - keyWidth - keyOffset, -diam);
 
  343        points[1] = Wt::WPointF(geom.
width() + diam - keyOffset, -diam);
 
  346        points[2] = Wt::WPointF(geom.
width() + diam - keyOffset, captionHeight);
 
  347        points[3] = Wt::WPointF(geom.
width() + diam - keyWidth - keyOffset, captionHeight);
 
  351        Wt::WRectF hotKey0Rect = Wt::WRectF(points[0], points[2]);
 
  353        painter->drawRect(hotKey0Rect);
 
  379        points[0] = Wt::WPointF(geom.
width() + diam - keyWidth - keyOffset, -diam);
 
  382        points[3] = Wt::WPointF(geom.
width() + diam - keyWidth - keyWidth - keyOffset, -diam);
 
  384        points[1] = Wt::WPointF(geom.
width() + diam - keyWidth - keyOffset, captionHeight);
 
  385        points[2] = Wt::WPointF(geom.
width() + diam - keyWidth - keyWidth - keyOffset, captionHeight);
 
  387        Wt::WRectF hotKey1Rect = Wt::WRectF(points[3], points[1]);
 
  389        painter->drawRect(hotKey1Rect);
 
 
  398    Wt::WPainter* painter,
 
  405        auto const& nodeStyle = model->
nodeStyle();
 
  409        size_t n = entries.size();
 
  411        for (
size_t i = 0; i < n; ++i)
 
  415            if (entries[i].empty())
 
  416                painter->setPen(nodeStyle.FontColorFaded);
 
  418                painter->setPen(nodeStyle.FontColor);
 
  427            Wt::WFontMetrics metrics = painter->device()->fontMetrics();
 
  429            Wt::WPointF topLeft, bottomRight;
 
  434                topLeft = Wt::WPointF(p.x() + 10, p.y() - metrics.height() / 3);
 
  435                bottomRight = Wt::WPointF(p.x() + 50, p.y() + 6);
 
  436                painter->drawText(Wt::WRectF(topLeft, bottomRight), Wt::AlignmentFlag::Left, Wt::WString(s));
 
  440                topLeft = Wt::WPointF(p.x() - 50, p.y() - 6);
 
  441                bottomRight = Wt::WPointF(p.x() - 10, p.y() + metrics.height() / 3);
 
  442                painter->drawText(Wt::WRectF(topLeft, bottomRight), Wt::AlignmentFlag::Right, Wt::WString(s));
 
 
  453    Wt::WPainter* painter,
 
  460        painter->setBrush(Wt::StandardColor::Gray);
 
 
  466    Wt::WPainter* painter,
 
  492            p.setWidth(Wt::WLength(nodeStyle.
HoveredPenWidth, Wt::LengthUnit::Pixel));
 
  498            p.setWidth(Wt::WLength(nodeStyle.
PenWidth, Wt::LengthUnit::Pixel));
 
  511        double const radius = 3.0;
 
  515        Wt::WRectF boundary(-diam,
 
  517            2.0 * diam + geom.
width(),
 
  520        painter->drawRect(boundary);
 
  522        painter->setBrush(Wt::StandardColor::Gray);
 
 
  558    return _node.nodeGeometry().boundingRect();
 
 
virtual ConnectionPolicy portOutConnectionPolicy(PortIndex) const
 
virtual std::string caption() const =0
 
virtual bool captionVisible() const
It is possible to hide caption in GUI.
 
virtual NodeDataType dataType(PortType portType, PortIndex portIndex) const =0
 
virtual bool hotkeyEnabled() const
 
WtNodeStyle const & nodeStyle() const
 
virtual bool portCaptionVisible(PortType, PortIndex) const
It is possible to hide port caption in GUI.
 
virtual std::string portCaption(PortType, PortIndex) const
Port caption is used in GUI to label individual ports.
 
virtual bool resizable() const
 
virtual NodeValidationState validationState() const
 
unsigned int captionHeight() const
 
Wt::WPointF portScenePosition(PortIndex index, PortType portType, Wt::WTransform const &t=Wt::WTransform()) const
 
unsigned int hotkeyIncline() const
 
Wt::WRectF resizeRect() const
 
unsigned int width() const
 
unsigned int hotkeyWidth() const
 
unsigned int height() const
 
unsigned int validationHeight() const
 
unsigned int hotkeyOffset() const
 
Wt::WPointF const & draggingPos() const
 
std::string strFormat(std::string str) const
 
void setPos(Wt::WPointF pos)
 
bool hotKey1Hovered() const
 
void setGeometryChanged()
 
Wt::WPointF getPos() const
 
bool hotKey0Hovered() const
 
Wt::WRectF boundingRect() const
 
WtFlowNodeData & _flowNodeData
 
void setPointsData(std::vector< connectionPointData > p) const
 
virtual ~WtNodeGraphicsObject()
 
void setBoundingRect(Wt::WRectF r) const
 
bool isHotKey1Checked() const
 
bool isHotKey0Checked() const
 
WtNodeGraphicsObject()=default
 
void moveConnections() const
 
void setHotKey0BoundingRect(Wt::WRectF r) const
 
void paint(Wt::WPainter *painter)
 
void setHotKey1BoundingRect(Wt::WRectF r) const
 
WtNodeDataModel * nodeDataModel() const
 
WtNodeGraphicsObject const & nodeGraphicsObject() const
 
WtNodeState const & nodeState() const
 
WtNodeGeometry & nodeGeometry()
 
static void paint(Wt::WPainter *painter, WtNode &node, WtFlowScene const &scene)
 
static void drawResizeRect(Wt::WPainter *painter, WtNodeGeometry const &geom, WtNodeDataModel const *model)
 
static void drawEntryLabels(Wt::WPainter *painter, WtNodeGeometry const &geom, WtNodeState const &state, WtNodeDataModel const *model)
 
static void drawValidationRect(Wt::WPainter *painter, WtNodeGeometry const &geom, WtNodeDataModel const *model, WtNodeGraphicsObject const &graphicsObject)
 
static void drawConnectionPoints(Wt::WPainter *painter, WtNodeGeometry const &geom, WtNodeState const &state, WtNodeDataModel const *model, WtFlowScene const &scene, WtNodeGraphicsObject const &graphicsObject)
 
static void drawNodeRect(Wt::WPainter *painter, WtNodeGeometry const &geom, WtNodeDataModel const *model, WtNodeGraphicsObject const &graphicsObject)
 
static void drawModelName(Wt::WPainter *painter, WtNodeGeometry const &geom, WtNodeState const &state, WtNodeDataModel const *model)
 
static void drawHotKeys(Wt::WPainter *painter, WtNodeGeometry const &geom, WtNodeDataModel const *model, WtNodeGraphicsObject const &graphicsObject)
 
std::vector< ConnectionPtrSet > const & getEntries(PortType) const
 
PortType reactingPortType() const
 
NodeDataType reactingDataType() const
 
Wt::WColor GradientColor0
 
Wt::WColor SelectedBoundaryColor
 
float ConnectionPointDiameter
 
Wt::WColor ConnectionPointColor
 
Wt::WColor NormalBoundaryColor
 
Wt::WColor SelectedDragColor
 
static WtConnectionStyle const & connectionStyle()
 
Wt::WPointF diamond_out[4]