167 lines
3.1 KiB
C++
167 lines
3.1 KiB
C++
|
#pragma once
|
|||
|
|
|||
|
#include <QtCore/QRectF>
|
|||
|
#include <QtCore/QPointF>
|
|||
|
#include <QtGui/QTransform>
|
|||
|
#include <QtGui/QFontMetrics>
|
|||
|
|
|||
|
#include "PortType.hpp"
|
|||
|
#include "Export.hpp"
|
|||
|
#include "memory.hpp"
|
|||
|
|
|||
|
namespace QtNodes
|
|||
|
{
|
|||
|
|
|||
|
class NodeState;
|
|||
|
class NodeDataModel;
|
|||
|
class Node;
|
|||
|
|
|||
|
class NodeGeometry
|
|||
|
{
|
|||
|
public:
|
|||
|
|
|||
|
NodeGeometry(std::unique_ptr<NodeDataModel> const& dataModel);
|
|||
|
|
|||
|
public:
|
|||
|
unsigned int
|
|||
|
height() const { return _height; }
|
|||
|
|
|||
|
void
|
|||
|
setHeight(unsigned int h) { _height = h; }
|
|||
|
|
|||
|
unsigned int
|
|||
|
width() const { return _width; }
|
|||
|
|
|||
|
void
|
|||
|
setWidth(unsigned int w) { _width = w; }
|
|||
|
|
|||
|
unsigned int
|
|||
|
entryHeight() const { return _entryHeight; }
|
|||
|
void
|
|||
|
setEntryHeight(unsigned int h) { _entryHeight = h; }
|
|||
|
|
|||
|
unsigned int
|
|||
|
entryWidth() const { return _entryWidth; }
|
|||
|
|
|||
|
void
|
|||
|
setEntryWidth(unsigned int w) { _entryWidth = w; }
|
|||
|
|
|||
|
unsigned int
|
|||
|
spacing() const { return _spacing; }
|
|||
|
|
|||
|
void
|
|||
|
setSpacing(unsigned int s) { _spacing = s; }
|
|||
|
|
|||
|
bool
|
|||
|
hovered() const { return _hovered; }
|
|||
|
|
|||
|
void
|
|||
|
setHovered(unsigned int h) { _hovered = h; }
|
|||
|
|
|||
|
unsigned int
|
|||
|
nSources() const;
|
|||
|
|
|||
|
unsigned int
|
|||
|
nSinks() const;
|
|||
|
|
|||
|
QPointF const&
|
|||
|
draggingPos() const
|
|||
|
{
|
|||
|
return _draggingPos;
|
|||
|
}
|
|||
|
|
|||
|
void
|
|||
|
setDraggingPosition(QPointF const& pos)
|
|||
|
{
|
|||
|
_draggingPos = pos;
|
|||
|
}
|
|||
|
|
|||
|
public:
|
|||
|
|
|||
|
QRectF
|
|||
|
entryBoundingRect() const;
|
|||
|
|
|||
|
QRectF
|
|||
|
boundingRect() const;
|
|||
|
|
|||
|
/// Updates size unconditionally
|
|||
|
void
|
|||
|
recalculateSize() const;
|
|||
|
|
|||
|
/// Updates size if the QFontMetrics is changed
|
|||
|
void
|
|||
|
recalculateSize(QFont const& font) const;
|
|||
|
|
|||
|
// TODO removed default QTransform()
|
|||
|
QPointF
|
|||
|
portScenePosition(PortIndex index,
|
|||
|
PortType portType,
|
|||
|
QTransform const& t = QTransform()) const;
|
|||
|
|
|||
|
PortIndex
|
|||
|
checkHitScenePoint(PortType portType,
|
|||
|
QPointF point,
|
|||
|
QTransform const& t = QTransform()) const;
|
|||
|
|
|||
|
QRect
|
|||
|
resizeRect() const;
|
|||
|
|
|||
|
/// Returns the position of a widget on the Node surface
|
|||
|
QPointF
|
|||
|
widgetPosition() const;
|
|||
|
|
|||
|
/// Returns the maximum height a widget can be without causing the node to grow.
|
|||
|
int
|
|||
|
equivalentWidgetHeight() const;
|
|||
|
|
|||
|
unsigned int
|
|||
|
validationHeight() const;
|
|||
|
|
|||
|
unsigned int
|
|||
|
validationWidth() const;
|
|||
|
|
|||
|
static
|
|||
|
QPointF
|
|||
|
calculateNodePositionBetweenNodePorts(PortIndex targetPortIndex, PortType targetPort, Node* targetNode,
|
|||
|
PortIndex sourcePortIndex, PortType sourcePort, Node* sourceNode,
|
|||
|
Node& newNode);
|
|||
|
private:
|
|||
|
|
|||
|
unsigned int
|
|||
|
captionHeight() const;
|
|||
|
|
|||
|
unsigned int
|
|||
|
captionWidth() const;
|
|||
|
|
|||
|
unsigned int
|
|||
|
portWidth(PortType portType) const;
|
|||
|
|
|||
|
private:
|
|||
|
|
|||
|
// some variables are mutable because
|
|||
|
// we need to change drawing metrics
|
|||
|
// corresponding to fontMetrics
|
|||
|
// but this doesn't change constness of Node
|
|||
|
|
|||
|
mutable unsigned int _width;
|
|||
|
mutable unsigned int _height;
|
|||
|
unsigned int _entryWidth;
|
|||
|
mutable unsigned int _inputPortWidth;
|
|||
|
mutable unsigned int _outputPortWidth;
|
|||
|
mutable unsigned int _entryHeight;
|
|||
|
unsigned int _spacing;
|
|||
|
|
|||
|
bool _hovered;
|
|||
|
|
|||
|
unsigned int _nSources;
|
|||
|
unsigned int _nSinks;
|
|||
|
|
|||
|
QPointF _draggingPos;
|
|||
|
|
|||
|
std::unique_ptr<NodeDataModel> const& _dataModel;
|
|||
|
|
|||
|
mutable QFontMetrics _fontMetrics;
|
|||
|
mutable QFontMetrics _boldFontMetrics;
|
|||
|
};
|
|||
|
}
|