Skip to content

DIWNE::BasicNode

More...

#include "DIWNE/Basic/BasicNode.h"

Inherits from DIWNE::Node, DIWNE::DiwneObject, std::enable_shared_from_this< DiwneObject >

Inherited by DIWNE::BasicNodeWithPins, DIWNE::SequenceNodeContainer, Workspace::Node

Public Functions

Name
BasicNode(NodeEditor & editor, std::string label)
virtual voidbegin(DrawInfo & context) override<br>First method to be called during object drawing.
virtual voidbottomContent(DrawInfo & context)
virtual voidcenterContent(DrawInfo & context)
virtual voidcontent(DrawInfo & context) override<br>Called after begin() during drawing.
virtual voiddrawBody()
virtual voiddrawHeader(ImDrawFlags corners =ImDrawFlags_RoundCornersTop)
virtual voidend(DrawInfo & context) override<br>Called after content().
const std::string &getTopLabel() const
virtual voidleftContent(DrawInfo & context)
virtual voidrightContent(DrawInfo & context)
voidsetTopLabel(const std::string & str)
virtual voidtopContent(DrawInfo & context)
virtual voidtranslate(const ImVec2 & vec) override<br>Move the object's rect and any other associated positional data.
virtual voidupdateLayout(DrawInfo & context) override<br>Updates object's m_rect, m_displayRect and any other object size variables.

Public Attributes

Name
DiwnePanelm_center
DiwnePanelm_left
DiwnePanelm_middle
DiwnePanelm_right
DiwnePanelm_top

Protected Attributes

Name
boolm_bottomSpacing <br>Whether to add a gap between the node content and the end.
floatm_contentSpacing <br>Gap between left, center and right panels (-1 for default item spacing).
boolm_headerSpacing <br>Whether to add a gap between the node header and its content.
std::stringm_topLabel
floatm_topLabelWidth <br>Top label width in DIWNE coordinates.
floatm_topLabelWidthChange <br>Change of top label width since last frame, used to prevent layout flicker.

Additional inherited members

Public Functions inherited from DIWNE::Node

Name
Node(const Node & other) =delete
Node(NodeEditor & diwne, std::string labelDiwne ="DiwneNode")
virtual voidafterDraw(DrawInfo & context) override<br>Called last during drawing.
virtual boolallowDrawing() override<br>Decide whether the object should be drawn (when outside the window for example)
virtual voiddrawSelectionIndicator(DrawInfo & context)
boolgetFlag(char index) const<br>Get the node bit flag value at index.
virtual voidonDestroy(bool logEvent) override<br>Gets called the moment the object is marked for deletion by destroy().
virtual voidonDrag(DrawInfo & context, bool dragStart, bool dragEnd) override<br>This method gets called when the object is being dragged.
virtual voidonHover(DrawInfo & context) override<br>This method gets called when the object is hovered.
virtual voidonSelection(bool selected) override
Node &operator=(const Node & other) =delete
voidsetFlag(char index, bool value)<br>Set the node bit flag value at index.
boolwillBeRemovedFromContainer(const DiwneObject * container)

Protected Functions inherited from DIWNE::Node

Name
virtual voidafterDrawDiwne(DrawInfo & context) override<br>Updates layout, processes interactions and then calls the user afterDraw() method.
virtual boolprocessSelectDiwne(DrawInfo & context) override<br>Processes any interactions related to whether the object should be selected.
virtual voidsetInitialPositionDiwne() override<br>Internal helper for setting the object's initial position.

Public Attributes inherited from DIWNE::Node

Name
boolm_forceDraw <br>Internal flag to force drawing of the node, used by pins (TODO: move to DiwneObject?)

Protected Attributes inherited from DIWNE::Node

Name
NodeFlagm_flag <br>The node flag bit field.

Public Functions inherited from DIWNE::DiwneObject

Name
DiwneObject(DIWNE::NodeEditor & diwne, std::string labelDiwne)
virtual~DiwneObject()
virtual voidafterDraw(DrawInfo & context)<br>Called last during drawing.
virtual boolallowDragStart() const<br>Determines whether a drag operation can start from this object.
virtual boolallowDrawing()<br>Decide whether the object should be drawn (when outside the window for example)
virtual boolallowHover() const<br>Determines whether the object can be hovered.
virtual boolallowInteraction() const<br>Decide whether the object should react to user input in general.
virtual boolallowPopup() const<br>Determines whether a popup can be raised over the object.
virtual boolallowPress(const DrawInfo & context) const<br>Determines whether the object can be pressed.
virtual boolallowSelectOnClick(const DrawInfo & context) const<br>Determines whether the object can be selected by clicking it (eg.
template <typename T =DiwneObject&gt; <br>T *as()<br>Returns a raw pointer to itself casted to a type.
virtual voiddestroy(bool logEvent =true)<br>Marks the object for lazy destruction/deallocation and removal from any containers (like the node editor).
virtual voiddraw(DrawMode drawMode =DrawMode_Interactive)<br>Generic draw method meant to be used by external code.
virtual voiddrawDiwne(DrawInfo & context, DrawMode drawMode =DrawMode_Interactive)<br>Internal draw method.
DrawInfodrawDiwneEx(DrawInfo & context, DrawMode drawMode =DrawMode_Interactive)
virtual voidfinalize(DrawInfo & context)<br>The final method to be called, gets called every frame and doesn't do any drawing.
ImRectgetDisplayRect() const<br>Object's bounds aligned to current viewport pixel boundaries.
IDgetId() const
DiwneObject *getParentObject() const
ImVec2getPosition() const<br>Returns the top left corner of the object's rect.
virtual ImRectgetRect() const<br>Rectangle bounds of the object in DIWNE coordinates (editor canvas coordinates).
boolgetSelectable()
virtual boolgetSelected() const<br>Whether the object is selected or not.
StyleOverride *getStyleOverride() const
virtual voidinitialize(DrawInfo & context)<br>First method to be called every frame.
boolisAnyParentSelected()
boolisChildObject() const
boolisChildOfObject(DiwneObject * parent)
boolisDestroyed() const
boolisDragging(DrawInfo & context)<br>Is this object the source of an active dragging operation?
boolisFixed() const<br>Fixed objects are ones rendered at a position determined by some other object.
boolisRendered() const
boolisToBeBroughtToFront()
virtual voidonDestroy(bool logEvent)<br>Gets called the moment the object is marked for deletion by destroy().
virtual voidonDrag(DrawInfo & context, bool dragStart, bool dragEnd)<br>This method gets called when the object is being dragged.
virtual voidonHover(DrawInfo & context)<br>This method gets called when the object is hovered.
virtual voidonPopup()
virtual voidonPressed(bool justPressed, DrawInfo & context)<br>Called when the object is pressed, meaning a key is pressed over it.
virtual voidonReleased(bool justReleased, DrawInfo & context)<br>Called when the object is not pressed.
virtual voidonSelection(bool selected)
voidopenPopup()<br>Request to open the object's popup if possible.
booloperator!=(const DiwneObject & rhs) const
booloperator==(const DiwneObject & rhs) const
virtual voidpopupContent(DrawInfo & context)<br>Content of popup menu raised on this objec.
virtual voidprocessInteractions(DrawInfo & context)<br>Method for reacting to user input after the object is fully drawn and its dimensions are known.
voidsetBringToFront(bool val)<br>Marks the object to be brought to front (be drawn first).
voidsetFixed(bool val)
voidsetForceDraw(bool val)<br>When true, makes the object automatically add the ForceDraw DrawMode flag.
voidsetParentObject(DiwneObject * parent)
voidsetPopupEnabled(bool val)
voidsetPosition(const ImVec2 & position)<br>Move the object's rect and any other associated positional data to the specified position.
voidsetRendered(bool val)
voidsetSelectable(bool selectable)<br>Whether the object can be selected.
virtual boolsetSelected(bool selected)<br>Set the selection state of the object.
voidsetStyleOverride(StyleOverride * styleOverride)<br>Assign a StyleOverride object to this DiwneObject.
voidsetTooltip(const std::string & text)
voidsetTooltipEnabled(bool val)
template <typename T =DiwneObject&gt; <br>std::shared_ptr< T >sharedPtr()<br>Returns a shared pointer to this object.
voidshowTooltip(const std::string & label, const ImColor && color, DrawInfo & context)<br>Immediately show a tooltip next to the mouse cursor with the specified text.
voidshowTooltip(const std::string & label, const std::string & desc, const ImColor && color, DrawInfo & context, float wrapWidth =35.f)<br>Immediately show a tooltip next to the mouse cursor with the specified text.
voidstopDrag(DrawInfo & context)<br>End an active drag operation this object is a source of.
virtual Style &style() const<br>Get the style for this object.
virtual voidtooltipContent(DrawInfo & context)<br>Content of the object's tooltip.

Protected Functions inherited from DIWNE::DiwneObject

Name
virtual voidafterDrawDiwne(DrawInfo & context)<br>Updates layout, processes interactions and then calls the user afterDraw() method.
virtual voidbeginDiwne(DrawInfo & context)
virtual voidendDiwne(DrawInfo & context)
virtual voidfinalizeDiwne(DrawInfo & context)
virtual voidinitializeDiwne(DrawInfo & context)
virtual boolisDraggedDiwne()<br>Is the object being dragged? (usually by mouse or some key combo)
virtual boolisHoveredDiwne()<br>Is the object being hovered? The default implementation mostly gets this information from ImGui::IsItemHovered() but the behavior can be changed or restricted.
virtual boolisJustPressedDiwne()<br>Determine whether a key/s of interest was/were just pressed.
virtual boolisPressedDiwne()<br>Determine whether a key/s of interest is/are pressed down over the object.
virtual boolpopupShouldBeOpenedDiwne() const<br>Determine whether a popup should be opened, that is, by default, that right mouse button was pressed and isn't dragging.
virtual voidprocessDragDiwne(DrawInfo & context)
virtual voidprocessHoverDiwne(DrawInfo & context)<br>Processes whether the object is currently hovered.
virtual voidprocessInteractionsDiwne(DrawInfo & context)
virtual voidprocessPopupAndTooltipDiwne(DrawInfo & context)<br>Processes whether a popup should be opened over this object.
virtual voidprocessPressAndReleaseDiwne(DrawInfo & context)<br>Processes whether the object is currently pressed (held) and further if it was just pressed or released.
virtual boolprocessSelectDiwne(DrawInfo & context)<br>Processes any interactions related to whether the object should be selected.
virtual voidsetInitialPositionDiwne()<br>Internal helper for setting the object's initial position.
voidsetSize(const ImVec2 & size)
voidupdateRectFromImGuiItem()

Public Attributes inherited from DIWNE::DiwneObject

Name
NodeEditor &diwne <br>Reference to the NodeEditor instance (also named 'editor' in some classes)
boolm_deletable <br>Whether the object can be destroyed by the user.
boolm_destroy <br>Indicates the object is to be deleted (and deallocated)
ImRectm_displayRect <br>Rectangle bounds aligned with the last viewport.
boolm_draggable <br>Whether dragging of the object is allowed by default.
DrawModem_drawMode <br>Read-only flag thats updated on each drawDiwne().
boolm_drawnThisFrame <br>Read only flag indicating whether the object has been drawn this frame.
boolm_fixed <br>Whether the object can be moved by user operations.
boolm_forceHoverDiwne <br>Special flag that can be used to enforce hover state, used by pin drag assist.
boolm_hoverable <br>Whether hovering is enabled by default.
boolm_hovered <br>Is the object hovered (usually by the mouse or whatever isHoveredDiwne() tracks)
boolm_hoverRoot <br>Whether hovering this object should prevent other objects from hovering.
IDm_idDiwne <br>Unique numeric identifier of the object.
boolm_isDragged <br>Is the object dragged? Returns false immediately on drag end (unlike isDragging()).
boolm_isPressed <br>Is the object pressed down (held)? Requirement for dragging.
boolm_justHidden <br>Read only flag indicating that this object was drawn last frame, but not this one.
boolm_justPressed <br>Read only flag indicating the object was pressed this frame (eg.
boolm_justReleased <br>Read only flag indicating the object was released this frame (eg.
std::stringm_labelDiwne <br>Unique string identifier, consists of <some string>:<m_idDiwne>.
ImRectm_rect <br>Rectangle bounds of the object in diwne coordinates.
StyleOverride *m_styleOverride <br>Style override to allow uniquely styled object types.

Protected Attributes inherited from DIWNE::DiwneObject

Name
unsigned long longg_diwneIDCounter <br>Static unique ID generator, unique only for current application run.
boolm_bringToFront <br>Request the object's rendering order to be moved to the front above other objects.
boolm_forceDraw <br>Request the next draw of the object to have the ForceDraw DrawMode flag.
boolm_internalHover <br>Temporary storage for an internal ImGui::IsItemHovered() check Can be set in the end() method to determine if object is hovered if applicable.
boolm_openPopup <br>Request to open popup.
boolm_openTooltip <br>Request to open tooltip.
DiwneObject *m_parentObject <br>Sets the parent object of object, relevant in node container and hover hierarchy.
boolm_popupEnabled <br>Whether this object has popup enabled.
std::stringm_popupLabelDiwne <br>ImGui popup identifier.
boolm_rendered <br>Whether the object should be drawn, this is a general flag that overrides behavior of the allowDrawing() method.
boolm_selectable <br>Should not be accessed directly.
boolm_selected <br>Should not be accessed directly.
boolm_tooltipEnabled <br>Whether this object has tooltip enabled.
std::stringm_tooltipText

Detailed Description

cpp
class DIWNE::BasicNode;
class DIWNE::BasicNode;

Parts of the node:

| Top |

|Left|Center|Right| --> |L|C|R| == Middle

| Bottom |

Public Functions Documentation

function BasicNode

cpp
BasicNode(
    NodeEditor & editor,
    std::string label
)
BasicNode(
    NodeEditor & editor,
    std::string label
)

function begin

cpp
virtual void begin(
    DrawInfo & context
) override
virtual void begin(
    DrawInfo & context
) override

First method to be called during object drawing.

Reimplements: DIWNE::DiwneObject::begin

Reimplemented by: Workspace::CoreNode::begin, Workspace::CoreNodeWithPins::begin, Workspace::Cycle::begin, Workspace::Sequence::begin, DIWNE::BasicNodeWithPins::begin

Can be used to initialize drawing code.

function bottomContent

cpp
virtual void bottomContent(
    DrawInfo & context
)
virtual void bottomContent(
    DrawInfo & context
)

function centerContent

cpp
virtual void centerContent(
    DrawInfo & context
)
virtual void centerContent(
    DrawInfo & context
)

Reimplemented by: Workspace::Camera::centerContent, Workspace::Cycle::centerContent, Workspace::Model::centerContent, Workspace::Operator::centerContent, Workspace::Operator::centerContent, Workspace::Screen::centerContent, Workspace::Sequence::centerContent, Workspace::TransformationBase::centerContent, DIWNE::SequenceNodeContainer::centerContent

function content

cpp
virtual void content(
    DrawInfo & context
) override
virtual void content(
    DrawInfo & context
) override

Called after begin() during drawing.

Reimplements: DIWNE::DiwneObject::content

Draws object content.

function drawBody

cpp
virtual void drawBody()
virtual void drawBody()

function drawHeader

cpp
virtual void drawHeader(
    ImDrawFlags corners =ImDrawFlags_RoundCornersTop
)
virtual void drawHeader(
    ImDrawFlags corners =ImDrawFlags_RoundCornersTop
)

function end

cpp
virtual void end(
    DrawInfo & context
) override
virtual void end(
    DrawInfo & context
) override

Called after content().

Reimplements: DIWNE::DiwneObject::end

Reimplemented by: Workspace::TransformationBase::end

Used to end content drawing.

function getTopLabel

cpp
const std::string & getTopLabel() const
const std::string & getTopLabel() const

function leftContent

cpp
virtual void leftContent(
    DrawInfo & context
)
virtual void leftContent(
    DrawInfo & context
)

Reimplemented by: Workspace::CoreNodeWithPins::leftContent, Workspace::Cycle::leftContent, Workspace::AngleAxisToQuatOperator::leftContent, DIWNE::BasicNodeWithPins::leftContent

function rightContent

cpp
virtual void rightContent(
    DrawInfo & context
)
virtual void rightContent(
    DrawInfo & context
)

Reimplemented by: Workspace::CoreNodeWithPins::rightContent, Workspace::Cycle::rightContent, DIWNE::BasicNodeWithPins::rightContent

function setTopLabel

cpp
void setTopLabel(
    const std::string & str
)
void setTopLabel(
    const std::string & str
)

function topContent

cpp
virtual void topContent(
    DrawInfo & context
)
virtual void topContent(
    DrawInfo & context
)

Reimplemented by: Workspace::CoreNode::topContent

function translate

cpp
virtual void translate(
    const ImVec2 & vec
) override
virtual void translate(
    const ImVec2 & vec
) override

Move the object's rect and any other associated positional data.

Reimplements: DIWNE::DiwneObject::translate

Reimplemented by: DIWNE::BasicNodeWithPins::translate, Workspace::CoreNodeWithPins::translate

function updateLayout

cpp
virtual void updateLayout(
    DrawInfo & context
) override
virtual void updateLayout(
    DrawInfo & context
) override

Updates object's m_rect, m_displayRect and any other object size variables.

See: m_rect, m_displayRect

Reimplements: DIWNE::DiwneObject::updateLayout

In other words this method is responsible for keeping track of the objects size.

IMPORTANT: This method should only update the m_rect's size, NOT it's position.

The object's rectangle is often set directly from ImGui's last item rectangle. But ImGui coordinates are aligned to pixel boundries via truncation of the coordinates, if the object's rect was updated directly using the screen space ImGui rectangle, there might be a slight discrepancy in the new position converted back to DIWNE coordinates which would cause the object to drift in a feedback loop.

m_displayRect should be updated together with m_rect to preserve correct pixel-aligned rendering in afterDraw(). TODO: Figure out if m_displayRect.Max should be aligned as well or not

This method is called after end() and before the afterDraw() method which can use the calculated size values for final drawing.

Public Attributes Documentation

variable m_center

cpp
DiwnePanel m_center;
DiwnePanel m_center;

variable m_left

cpp
DiwnePanel m_left;
DiwnePanel m_left;

variable m_middle

cpp
DiwnePanel m_middle;
DiwnePanel m_middle;

variable m_right

cpp
DiwnePanel m_right;
DiwnePanel m_right;

variable m_top

cpp
DiwnePanel m_top;
DiwnePanel m_top;

Protected Attributes Documentation

variable m_bottomSpacing

cpp
bool m_bottomSpacing = true;
bool m_bottomSpacing = true;

Whether to add a gap between the node content and the end.

variable m_contentSpacing

cpp
float m_contentSpacing = -1;
float m_contentSpacing = -1;

Gap between left, center and right panels (-1 for default item spacing).

variable m_headerSpacing

cpp
bool m_headerSpacing = true;
bool m_headerSpacing = true;

Whether to add a gap between the node header and its content.

variable m_topLabel

cpp
std::string m_topLabel;
std::string m_topLabel;

variable m_topLabelWidth

cpp
float m_topLabelWidth {0};
float m_topLabelWidth {0};

Top label width in DIWNE coordinates.

variable m_topLabelWidthChange

cpp
float m_topLabelWidthChange {0};
float m_topLabelWidthChange {0};

Change of top label width since last frame, used to prevent layout flicker.


Updated on 2025-05-31 at 12:55:31 +0000