DIWNE::NodeDropZone
#include "DIWNE/Core/Elements/Containers/NodeDropZone.h"
Inherits from DIWNE::DiwneObject, DIWNE::NodeContainer, std::enable_shared_from_this< DiwneObject >, DIWNE::INodeContainer
Inherited by Workspace::Sequence::SequenceDropZone
Public Functions
Name | |
---|---|
NodeDropZone(DIWNE::NodeEditor & diwne, DiwneObject * parent) | |
virtual bool | acceptNode(Node * node)<br>Decides whether the passed node should be allowed to be added to this drop zone. |
virtual void | afterDraw(DrawInfo & context) override<br>Called last during drawing. |
virtual bool | allowDragStart() const override<br>Determines whether a drag operation can start from this object. |
virtual bool | allowHover() const override<br>Determines whether the object can be hovered. |
virtual void | begin(DrawInfo & context) override<br>First method to be called during object drawing. |
virtual void | content(DrawInfo & context) override<br>Called after begin() during drawing. |
virtual void | end(DrawInfo & context) override<br>Called after content(). |
virtual void | initialize(DrawInfo & context) override<br>First method to be called every frame. |
virtual void | onDestroy(bool logEvent) override<br>Gets called the moment the object is marked for deletion by destroy(). |
virtual void | onNodeAdd(Node * node, int index) override<br>Called after a node is inserted into the container. |
virtual void | onNodeRemove(std::shared_ptr< Node > node, int index) override<br>Called after a node is removed from the container. |
virtual void | processInteractions(DrawInfo & context) override<br>Method for reacting to user input after the object is fully drawn and its dimensions are known. |
virtual void | updateLayout(DrawInfo & context) override<br>Updates object's m_rect, m_displayRect and any other object size variables. |
Protected Functions
Name | |
---|---|
virtual int | acceptNodeDiwne(Node * node)<br>Decide whether the node should be placed in the drop zone if at all. |
virtual void | drawDropIndicator(Node * newNode, int index)<br>Draws the drop indicator for the passed node about to be dropped at specified index. |
virtual void | drawEmptyContent(DrawInfo & context)<br>Content drawn where there are no nodes in the drop zone. |
virtual int | isNodeAboveDropZone(Node * newNode)<br>Returns at which index a the new node should be added, -1 for invalid position. |
bool | tryAddNode(DrawInfo & context) |
bool | tryRemoveNode(DrawInfo & context) |
Protected Attributes
Name | |
---|---|
int | m_dropIndex <br>Insertion index of a dragged node that might get dropped in (invalid if negative) |
Additional inherited members
Public Functions inherited from DIWNE::DiwneObject
Name | |
---|---|
DiwneObject(DIWNE::NodeEditor & diwne, std::string labelDiwne) | |
virtual | ~DiwneObject() |
virtual bool | allowDrawing()<br>Decide whether the object should be drawn (when outside the window for example) |
virtual bool | allowInteraction() const<br>Decide whether the object should react to user input in general. |
virtual bool | allowPopup() const<br>Determines whether a popup can be raised over the object. |
virtual bool | allowPress(const DrawInfo & context) const<br>Determines whether the object can be pressed. |
virtual bool | allowSelectOnClick(const DrawInfo & context) const<br>Determines whether the object can be selected by clicking it (eg. |
template <typename T =DiwneObject> <br>T * | as()<br>Returns a raw pointer to itself casted to a type. |
virtual void | destroy(bool logEvent =true)<br>Marks the object for lazy destruction/deallocation and removal from any containers (like the node editor). |
virtual void | draw(DrawMode drawMode =DrawMode_Interactive)<br>Generic draw method meant to be used by external code. |
virtual void | drawDiwne(DrawInfo & context, DrawMode drawMode =DrawMode_Interactive)<br>Internal draw method. |
DrawInfo | drawDiwneEx(DrawInfo & context, DrawMode drawMode =DrawMode_Interactive) |
virtual void | finalize(DrawInfo & context)<br>The final method to be called, gets called every frame and doesn't do any drawing. |
ImRect | getDisplayRect() const<br>Object's bounds aligned to current viewport pixel boundaries. |
ID | getId() const |
DiwneObject * | getParentObject() const |
ImVec2 | getPosition() const<br>Returns the top left corner of the object's rect. |
virtual ImRect | getRect() const<br>Rectangle bounds of the object in DIWNE coordinates (editor canvas coordinates). |
bool | getSelectable() |
virtual bool | getSelected() const<br>Whether the object is selected or not. |
StyleOverride * | getStyleOverride() const |
bool | isAnyParentSelected() |
bool | isChildObject() const |
bool | isChildOfObject(DiwneObject * parent) |
bool | isDestroyed() const |
bool | isDragging(DrawInfo & context)<br>Is this object the source of an active dragging operation? |
bool | isFixed() const<br>Fixed objects are ones rendered at a position determined by some other object. |
bool | isRendered() const |
bool | isToBeBroughtToFront() |
virtual void | onDrag(DrawInfo & context, bool dragStart, bool dragEnd)<br>This method gets called when the object is being dragged. |
virtual void | onHover(DrawInfo & context)<br>This method gets called when the object is hovered. |
virtual void | onPopup() |
virtual void | onPressed(bool justPressed, DrawInfo & context)<br>Called when the object is pressed, meaning a key is pressed over it. |
virtual void | onReleased(bool justReleased, DrawInfo & context)<br>Called when the object is not pressed. |
virtual void | onSelection(bool selected) |
void | openPopup()<br>Request to open the object's popup if possible. |
bool | operator!=(const DiwneObject & rhs) const |
bool | operator==(const DiwneObject & rhs) const |
virtual void | popupContent(DrawInfo & context)<br>Content of popup menu raised on this objec. |
void | setBringToFront(bool val)<br>Marks the object to be brought to front (be drawn first). |
void | setFixed(bool val) |
void | setForceDraw(bool val)<br>When true, makes the object automatically add the ForceDraw DrawMode flag. |
void | setParentObject(DiwneObject * parent) |
void | setPopupEnabled(bool val) |
void | setPosition(const ImVec2 & position)<br>Move the object's rect and any other associated positional data to the specified position. |
void | setRendered(bool val) |
void | setSelectable(bool selectable)<br>Whether the object can be selected. |
virtual bool | setSelected(bool selected)<br>Set the selection state of the object. |
void | setStyleOverride(StyleOverride * styleOverride)<br>Assign a StyleOverride object to this DiwneObject. |
void | setTooltip(const std::string & text) |
void | setTooltipEnabled(bool val) |
template <typename T =DiwneObject> <br>std::shared_ptr< T > | sharedPtr()<br>Returns a shared pointer to this object. |
void | showTooltip(const std::string & label, const ImColor && color, DrawInfo & context)<br>Immediately show a tooltip next to the mouse cursor with the specified text. |
void | showTooltip(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. |
void | stopDrag(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 void | tooltipContent(DrawInfo & context)<br>Content of the object's tooltip. |
virtual void | translate(const ImVec2 & vec)<br>Move the object's rect and any other associated positional data. |
Protected Functions inherited from DIWNE::DiwneObject
Name | |
---|---|
virtual void | afterDrawDiwne(DrawInfo & context)<br>Updates layout, processes interactions and then calls the user afterDraw() method. |
virtual void | beginDiwne(DrawInfo & context) |
virtual void | endDiwne(DrawInfo & context) |
virtual void | finalizeDiwne(DrawInfo & context) |
virtual void | initializeDiwne(DrawInfo & context) |
virtual bool | isDraggedDiwne()<br>Is the object being dragged? (usually by mouse or some key combo) |
virtual bool | isHoveredDiwne()<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 bool | isJustPressedDiwne()<br>Determine whether a key/s of interest was/were just pressed. |
virtual bool | isPressedDiwne()<br>Determine whether a key/s of interest is/are pressed down over the object. |
virtual bool | popupShouldBeOpenedDiwne() const<br>Determine whether a popup should be opened, that is, by default, that right mouse button was pressed and isn't dragging. |
virtual void | processDragDiwne(DrawInfo & context) |
virtual void | processHoverDiwne(DrawInfo & context)<br>Processes whether the object is currently hovered. |
virtual void | processInteractionsDiwne(DrawInfo & context) |
virtual void | processPopupAndTooltipDiwne(DrawInfo & context)<br>Processes whether a popup should be opened over this object. |
virtual void | processPressAndReleaseDiwne(DrawInfo & context)<br>Processes whether the object is currently pressed (held) and further if it was just pressed or released. |
virtual bool | processSelectDiwne(DrawInfo & context)<br>Processes any interactions related to whether the object should be selected. |
virtual void | setInitialPositionDiwne()<br>Internal helper for setting the object's initial position. |
void | setSize(const ImVec2 & size) |
void | updateRectFromImGuiItem() |
Public Attributes inherited from DIWNE::DiwneObject
Name | |
---|---|
NodeEditor & | diwne <br>Reference to the NodeEditor instance (also named 'editor' in some classes) |
bool | m_deletable <br>Whether the object can be destroyed by the user. |
bool | m_destroy <br>Indicates the object is to be deleted (and deallocated) |
ImRect | m_displayRect <br>Rectangle bounds aligned with the last viewport. |
bool | m_draggable <br>Whether dragging of the object is allowed by default. |
DrawMode | m_drawMode <br>Read-only flag thats updated on each drawDiwne(). |
bool | m_drawnThisFrame <br>Read only flag indicating whether the object has been drawn this frame. |
bool | m_fixed <br>Whether the object can be moved by user operations. |
bool | m_forceHoverDiwne <br>Special flag that can be used to enforce hover state, used by pin drag assist. |
bool | m_hoverable <br>Whether hovering is enabled by default. |
bool | m_hovered <br>Is the object hovered (usually by the mouse or whatever isHoveredDiwne() tracks) |
bool | m_hoverRoot <br>Whether hovering this object should prevent other objects from hovering. |
ID | m_idDiwne <br>Unique numeric identifier of the object. |
bool | m_isDragged <br>Is the object dragged? Returns false immediately on drag end (unlike isDragging()). |
bool | m_isPressed <br>Is the object pressed down (held)? Requirement for dragging. |
bool | m_justHidden <br>Read only flag indicating that this object was drawn last frame, but not this one. |
bool | m_justPressed <br>Read only flag indicating the object was pressed this frame (eg. |
bool | m_justReleased <br>Read only flag indicating the object was released this frame (eg. |
std::string | m_labelDiwne <br>Unique string identifier, consists of <some string>:<m_idDiwne>. |
ImRect | m_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 long | g_diwneIDCounter <br>Static unique ID generator, unique only for current application run. |
bool | m_bringToFront <br>Request the object's rendering order to be moved to the front above other objects. |
bool | m_forceDraw <br>Request the next draw of the object to have the ForceDraw DrawMode flag. |
bool | m_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. |
bool | m_openPopup <br>Request to open popup. |
bool | m_openTooltip <br>Request to open tooltip. |
DiwneObject * | m_parentObject <br>Sets the parent object of object, relevant in node container and hover hierarchy. |
bool | m_popupEnabled <br>Whether this object has popup enabled. |
std::string | m_popupLabelDiwne <br>ImGui popup identifier. |
bool | m_rendered <br>Whether the object should be drawn, this is a general flag that overrides behavior of the allowDrawing() method. |
bool | m_selectable <br>Should not be accessed directly. |
bool | m_selected <br>Should not be accessed directly. |
bool | m_tooltipEnabled <br>Whether this object has tooltip enabled. |
std::string | m_tooltipText |
Public Functions inherited from DIWNE::NodeContainer
Name | |
---|---|
NodeContainer(DiwneObject * owner)<br>Constructs the node container for a specific DiwneObject that it represents. | |
void | addNode(const std::shared_ptr< Node > & node)<br>Adds a node to the end of the list (O(1)) The new node has this container set as its parent. |
virtual void | addNodeAt(const std::shared_ptr< Node > & node, int index)<br>Adds a node at a specified index. |
virtual NodeList & | getNodeList() override<br>Returns the underlying std::vector node list of the container. |
virtual NodeRange | getNodes() const override<br>Returns a iterable range to the nodes of this container. |
void | purgeNodes()<br>Erases objects marked for deletion or removal from the container. |
bool | removeNode(const std::shared_ptr< Node > & node)<br>Removes a node from the container. |
virtual void | removeNodeAt(int index)<br>Removes a node at a specified index from the container. |
bool | replaceNode(const std::shared_ptr< Node > & oldNode, const std::shared_ptr< Node > & newNode)<br>Replaces an existing node with a new one. |
virtual void | replaceNodeAt(const std::shared_ptr< Node > & node, int index)<br>Replaces node at a specified index with a different one. |
Protected Attributes inherited from DIWNE::NodeContainer
Name | |
---|---|
NodeList | m_nodes |
DiwneObject * | m_owner <br>Diwne object associated with this node container. |
Public Functions inherited from DIWNE::INodeContainer
Name | |
---|---|
virtual | ~INodeContainer() =default |
virtual NodeList & | getNodeList() =0 |
virtual NodeRange | getNodes() const =0 |
Public Functions Documentation
function NodeDropZone
NodeDropZone(
DIWNE::NodeEditor & diwne,
DiwneObject * parent
)
NodeDropZone(
DIWNE::NodeEditor & diwne,
DiwneObject * parent
)
function acceptNode
inline virtual bool acceptNode(
Node * node
)
inline virtual bool acceptNode(
Node * node
)
Decides whether the passed node should be allowed to be added to this drop zone.
Reimplemented by: Workspace::Sequence::SequenceDropZone::acceptNode
function afterDraw
virtual void afterDraw(
DrawInfo & context
) override
virtual void afterDraw(
DrawInfo & context
) override
Called last during drawing.
Reimplements: DIWNE::DiwneObject::afterDraw
At this point the m_rect of the object should be calculated in the updateLayout() method and this method should be able to work with it. Because of that the drawing code within shouldn't affect the objects size anymore. Interactions are processed before this method and thus interaction related member variables can be used within.
function allowDragStart
virtual bool allowDragStart() const override
virtual bool allowDragStart() const override
Determines whether a drag operation can start from this object.
See: isDraggedDiwne(), allowPress()
Reimplements: DIWNE::DiwneObject::allowDragStart
By default the only requirement is the object to be pressed.
function allowHover
virtual bool allowHover() const override
virtual bool allowHover() const override
Determines whether the object can be hovered.
See: isHoveredDiwne()
Reimplements: DIWNE::DiwneObject::allowHover
Is always allowed by default.
function begin
virtual void begin(
DrawInfo & context
) override
virtual void begin(
DrawInfo & context
) override
First method to be called during object drawing.
Reimplements: DIWNE::DiwneObject::begin
Can be used to initialize drawing code.
function content
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 end
virtual void end(
DrawInfo & context
) override
virtual void end(
DrawInfo & context
) override
Called after content().
Reimplements: DIWNE::DiwneObject::end
Used to end content drawing.
function initialize
virtual void initialize(
DrawInfo & context
) override
virtual void initialize(
DrawInfo & context
) override
First method to be called every frame.
Reimplements: DIWNE::DiwneObject::initialize
Does not handle drawing.
function onDestroy
virtual void onDestroy(
bool logEvent
) override
virtual void onDestroy(
bool logEvent
) override
Gets called the moment the object is marked for deletion by destroy().
See: destroy()
Warning: It is possible that the onDestroy() callback is never called when destroy() wasn't properly called. DiwneObjects containing other DiwneObjects should always ensure to destroy their children in their onDestroy().
Reimplements: DIWNE::DiwneObject::onDestroy
It is called only once per object.
function onNodeAdd
virtual void onNodeAdd(
Node * node,
int index
) override
virtual void onNodeAdd(
Node * node,
int index
) override
Called after a node is inserted into the container.
Parameters:
- node Raw pointer to the just inserted node.
- index Index the node was inserted at.
Reimplements: DIWNE::NodeContainer::onNodeAdd
Reimplemented by: Workspace::Sequence::SequenceDropZone::onNodeAdd
function onNodeRemove
virtual void onNodeRemove(
std::shared_ptr< Node > node,
int index
) override
virtual void onNodeRemove(
std::shared_ptr< Node > node,
int index
) override
Called after a node is removed from the container.
Parameters:
- node Owning shared pointer to the removed node.
- index Index the node was removed from (potentially invalid).
Reimplements: DIWNE::NodeContainer::onNodeRemove
An owning pointer is passed as its ref count could be one.
function processInteractions
virtual void processInteractions(
DrawInfo & context
) override
virtual void processInteractions(
DrawInfo & context
) override
Method for reacting to user input after the object is fully drawn and its dimensions are known.
Reimplements: DIWNE::DiwneObject::processInteractions
It is called after end() and updateLayout(), but before the afterDraw() lifecycle method. Internal interactions are processed right before.
function updateLayout
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.
Protected Functions Documentation
function acceptNodeDiwne
virtual int acceptNodeDiwne(
Node * node
)
virtual int acceptNodeDiwne(
Node * node
)
Decide whether the node should be placed in the drop zone if at all.
Return: The index at which the new node should be added, -1 for failure.
Calls the user defined acceptNode() function.
function drawDropIndicator
virtual void drawDropIndicator(
Node * newNode,
int index
)
virtual void drawDropIndicator(
Node * newNode,
int index
)
Draws the drop indicator for the passed node about to be dropped at specified index.
function drawEmptyContent
virtual void drawEmptyContent(
DrawInfo & context
)
virtual void drawEmptyContent(
DrawInfo & context
)
Content drawn where there are no nodes in the drop zone.
Reimplemented by: Workspace::Sequence::SequenceDropZone::drawEmptyContent
function isNodeAboveDropZone
virtual int isNodeAboveDropZone(
Node * newNode
)
virtual int isNodeAboveDropZone(
Node * newNode
)
Returns at which index a the new node should be added, -1 for invalid position.
function tryAddNode
bool tryAddNode(
DrawInfo & context
)
bool tryAddNode(
DrawInfo & context
)
function tryRemoveNode
bool tryRemoveNode(
DrawInfo & context
)
bool tryRemoveNode(
DrawInfo & context
)
Protected Attributes Documentation
variable m_dropIndex
int m_dropIndex = -1;
int m_dropIndex = -1;
Insertion index of a dragged node that might get dropped in (invalid if negative)
Updated on 2025-05-31 at 12:55:31 +0000