packages feed

dear-imgui-raw-imnodes-1.0.0: cbits/dcimnodes.h

// THIS FILE HAS BEEN AUTO-GENERATED BY THE 'DEAR BINDINGS' GENERATOR.
// **DO NOT EDIT DIRECTLY**
// https://github.com/dearimgui/dear_bindings

#pragma once

#ifdef __cplusplus
extern "C"
{
#endif
// Auto-generated forward declarations for C header
typedef struct ImNodesIO_EmulateThreeButtonMouse_t ImNodesIO_EmulateThreeButtonMouse;
typedef struct ImNodesIO_LinkDetachWithModifierClick_t ImNodesIO_LinkDetachWithModifierClick;
typedef struct ImNodesIO_MultipleSelectModifier_t ImNodesIO_MultipleSelectModifier;
typedef struct ImNodesIO_t ImNodesIO;
typedef struct ImNodesStyle_t ImNodesStyle;
// ImDrawIdx: vertex index. [Compile-time configurable type]
// - To use 16-bit indices + allow large meshes: backend need to set 'io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset' and handle ImDrawCmd::VtxOffset (recommended).
// - To use 32-bit indices: override with '#define ImDrawIdx unsigned int' in your imconfig.h file.
#ifndef ImDrawIdx
typedef unsigned short ImDrawIdx;  // Default: 16-bit (for maximum compatibility with renderer backends)
#endif // #ifndef ImDrawIdx

#include <stddef.h>
#include "dcimgui.h"
#ifdef IMNODES_USER_CONFIG
#include IMNODES_USER_CONFIG
#endif // #ifdef IMNODES_USER_CONFIG
#ifndef ImNodes
#define ImNodes ImNodes
#endif // #ifndef ImNodes
typedef int ImNodesCol;              // -> enum ImNodesCol_
typedef int ImNodesStyleVar;         // -> enum ImNodesStyleVar_
typedef int ImNodesStyleFlags;       // -> enum ImNodesStyleFlags_
typedef int ImNodesPinShape;         // -> enum ImNodesPinShape_
typedef int ImNodesAttributeFlags;   // -> enum ImNodesAttributeFlags_
typedef int ImNodesMiniMapLocation;  // -> enum ImNodesMiniMapLocation_

typedef enum
{
    ImNodesCol_NodeBackground                = 0,
    ImNodesCol_NodeBackgroundHovered,
    ImNodesCol_NodeBackgroundSelected,
    ImNodesCol_NodeOutline,
    ImNodesCol_TitleBar,
    ImNodesCol_TitleBarHovered,
    ImNodesCol_TitleBarSelected,
    ImNodesCol_Link,
    ImNodesCol_LinkHovered,
    ImNodesCol_LinkSelected,
    ImNodesCol_Pin,
    ImNodesCol_PinHovered,
    ImNodesCol_BoxSelector,
    ImNodesCol_BoxSelectorOutline,
    ImNodesCol_GridBackground,
    ImNodesCol_GridLine,
    ImNodesCol_GridLinePrimary,
    ImNodesCol_MiniMapBackground,
    ImNodesCol_MiniMapBackgroundHovered,
    ImNodesCol_MiniMapOutline,
    ImNodesCol_MiniMapOutlineHovered,
    ImNodesCol_MiniMapNodeBackground,
    ImNodesCol_MiniMapNodeBackgroundHovered,
    ImNodesCol_MiniMapNodeBackgroundSelected,
    ImNodesCol_MiniMapNodeOutline,
    ImNodesCol_MiniMapLink,
    ImNodesCol_MiniMapLinkSelected,
    ImNodesCol_MiniMapCanvas,
    ImNodesCol_MiniMapCanvasOutline,
    ImNodesCol_COUNT,
} ImNodesCol_;

typedef enum
{
    ImNodesStyleVar_GridSpacing               = 0,
    ImNodesStyleVar_NodeCornerRounding,
    ImNodesStyleVar_NodePadding,
    ImNodesStyleVar_NodeBorderThickness,
    ImNodesStyleVar_LinkThickness,
    ImNodesStyleVar_LinkLineSegmentsPerLength,
    ImNodesStyleVar_LinkHoverDistance,
    ImNodesStyleVar_PinCircleRadius,
    ImNodesStyleVar_PinQuadSideLength,
    ImNodesStyleVar_PinTriangleSideLength,
    ImNodesStyleVar_PinLineThickness,
    ImNodesStyleVar_PinHoverRadius,
    ImNodesStyleVar_PinOffset,
    ImNodesStyleVar_MiniMapPadding,
    ImNodesStyleVar_MiniMapOffset,
    ImNodesStyleVar_COUNT,
} ImNodesStyleVar_;

typedef enum
{
    ImNodesStyleFlags_None             = 0,
    ImNodesStyleFlags_NodeOutline      = 1<<0,
    ImNodesStyleFlags_GridLines        = 1<<2,
    ImNodesStyleFlags_GridLinesPrimary = 1<<3,
    ImNodesStyleFlags_GridSnapping     = 1<<4,
} ImNodesStyleFlags_;

typedef enum
{
    ImNodesPinShape_Circle,
    ImNodesPinShape_CircleFilled,
    ImNodesPinShape_Triangle,
    ImNodesPinShape_TriangleFilled,
    ImNodesPinShape_Quad,
    ImNodesPinShape_QuadFilled,
} ImNodesPinShape_;

// This enum controls the way the attribute pins behave.
typedef enum
{
    ImNodesAttributeFlags_None                          = 0,
    // Allow detaching a link by left-clicking and dragging the link at a pin it is connected to.
    // NOTE: the user has to actually delete the link for this to work. A deleted link can be
    // detected by calling IsLinkDestroyed() after EndNodeEditor().
    ImNodesAttributeFlags_EnableLinkDetachWithDragClick = 1<<0,
    // Visual snapping of an in progress link will trigger IsLink Created/Destroyed events. Allows
    // for previewing the creation of a link while dragging it across attributes. See here for demo:
    // https://github.com/Nelarius/imnodes/issues/41#issuecomment-647132113 NOTE: the user has to
    // actually delete the link for this to work. A deleted link can be detected by calling
    // IsLinkDestroyed() after EndNodeEditor().
    ImNodesAttributeFlags_EnableLinkCreationOnSnap      = 1<<1,
} ImNodesAttributeFlags_;

struct ImNodesIO_EmulateThreeButtonMouse_t
{
    // The keyboard modifier to use in combination with mouse left click to pan the editor view.
    // Set to NULL by default. To enable this feature, set the modifier to point to a boolean
    // indicating the state of a modifier. For example,
    //
    // ImNodes::GetIO().EmulateThreeButtonMouse.Modifier = &ImGui::GetIO().KeyAlt;
    const bool* Modifier;
};
struct ImNodesIO_LinkDetachWithModifierClick_t
{
    // Pointer to a boolean value indicating when the desired modifier is pressed. Set to NULL
    // by default. To enable the feature, set the modifier to point to a boolean indicating the
    // state of a modifier. For example,
    //
    // ImNodes::GetIO().LinkDetachWithModifierClick.Modifier = &ImGui::GetIO().KeyCtrl;
    //
    // Left-clicking a link with this modifier pressed will detach that link. NOTE: the user has
    // to actually delete the link for this to work. A deleted link can be detected by calling
    // IsLinkDestroyed() after EndNodeEditor().
    const bool* Modifier;
};
struct ImNodesIO_MultipleSelectModifier_t
{
    // Pointer to a boolean value indicating when the desired modifier is pressed. Set to NULL
    // by default. To enable the feature, set the modifier to point to a boolean indicating the
    // state of a modifier. For example,
    //
    // ImNodes::GetIO().MultipleSelectModifier.Modifier = &ImGui::GetIO().KeyCtrl;
    //
    // Left-clicking a node with this modifier pressed will add the node to the list of
    // currently selected nodes. If this value is NULL, the Ctrl key will be used.
    const bool* Modifier;
};
struct ImNodesIO_t
{
    ImNodesIO_EmulateThreeButtonMouse EmulateThreeButtonMouse;

    ImNodesIO_LinkDetachWithModifierClick LinkDetachWithModifierClick;

    ImNodesIO_MultipleSelectModifier MultipleSelectModifier;

    // Holding alt mouse button pans the node area, by default middle mouse button will be used
    // Set based on ImGuiMouseButton values
    int   AltMouseButton;

    // Panning speed when dragging an element and mouse is outside the main editor view.
    float AutoPanningSpeed;
};

struct ImNodesStyle_t
{
    float             GridSpacing;

    float             NodeCornerRounding;
    ImVec2            NodePadding;
    float             NodeBorderThickness;

    float             LinkThickness;
    float             LinkLineSegmentsPerLength;
    float             LinkHoverDistance;

    // The following variables control the look and behavior of the pins. The default size of each
    // pin shape is balanced to occupy approximately the same surface area on the screen.

    // The circle radius used when the pin shape is either ImNodesPinShape_Circle or
    // ImNodesPinShape_CircleFilled.
    float             PinCircleRadius;
    // The quad side length used when the shape is either ImNodesPinShape_Quad or
    // ImNodesPinShape_QuadFilled.
    float             PinQuadSideLength;
    // The equilateral triangle side length used when the pin shape is either
    // ImNodesPinShape_Triangle or ImNodesPinShape_TriangleFilled.
    float             PinTriangleSideLength;
    // The thickness of the line used when the pin shape is not filled.
    float             PinLineThickness;
    // The radius from the pin's center position inside of which it is detected as being hovered
    // over.
    float             PinHoverRadius;
    // Offsets the pins' positions from the edge of the node to the outside of the node.
    float             PinOffset;

    // Mini-map padding size between mini-map edge and mini-map content.
    ImVec2            MiniMapPadding;
    // Mini-map offset from the screen side.
    ImVec2            MiniMapOffset;

    // By default, ImNodesStyleFlags_NodeOutline and ImNodesStyleFlags_Gridlines are enabled.
    ImNodesStyleFlags Flags;
    // Set these mid-frame using Push/PopColorStyle. You can index this color array with with a
    // ImNodesCol value.
    unsigned int      Colors[ImNodesCol_COUNT];
};

typedef enum
{
    ImNodesMiniMapLocation_BottomLeft,
    ImNodesMiniMapLocation_BottomRight,
    ImNodesMiniMapLocation_TopLeft,
    ImNodesMiniMapLocation_TopRight,
} ImNodesMiniMapLocation_;

typedef struct ImGuiContext_t ImGuiContext;
typedef struct ImVec2_t ImVec2;

typedef struct ImNodesContext_t ImNodesContext;

// An editor context corresponds to a set of nodes in a single workspace (created with a single
// Begin/EndNodeEditor pair)
//
// By default, the library creates an editor context behind the scenes, so using any of the imnodes
// functions doesn't require you to explicitly create a context.
typedef struct ImNodesEditorContext_t ImNodesEditorContext;

// Callback type used to specify special behavior when hovering a node in the minimap
#ifndef ImNodesMiniMapNodeHoveringCallback
typedef void (*ImNodesMiniMapNodeHoveringCallback)(int, void*);
#endif // #ifndef ImNodesMiniMapNodeHoveringCallback
#ifndef ImNodesMiniMapNodeHoveringCallbackUserData
typedef void* ImNodesMiniMapNodeHoveringCallbackUserData;
#endif // #ifndef ImNodesMiniMapNodeHoveringCallbackUserData
// Call this function if you are compiling imnodes in to a dll, separate from ImGui. Calling this
// function sets the GImGui global variable, which is not shared across dll boundaries.
CIMGUI_API void ImNodesSetImGuiContext(ImGuiContext* ctx);

CIMGUI_API ImNodesContext* ImNodesCreateContext(void);
CIMGUI_API void            ImNodesDestroyContext(ImNodesContext* ctx /* = NULL */);  // NULL = destroy current context
CIMGUI_API ImNodesContext* ImNodesGetCurrentContext(void);
CIMGUI_API void            ImNodesSetCurrentContext(ImNodesContext* ctx);

CIMGUI_API ImNodesEditorContext* ImNodesEditorContextCreate(void);
CIMGUI_API void                  ImNodesEditorContextFree(ImNodesEditorContext*);
CIMGUI_API void                  ImNodesEditorContextSet(ImNodesEditorContext*);
CIMGUI_API ImVec2                ImNodesEditorContextGetPanning(void);
CIMGUI_API void                  ImNodesEditorContextResetPanning(ImVec2 pos);
CIMGUI_API void                  ImNodesEditorContextMoveToNode(const int node_id);

CIMGUI_API ImNodesIO* ImNodesGetIO(void);

// Returns the global style struct. See the struct declaration for default values.
CIMGUI_API ImNodesStyle* ImNodesGetStyle(void);
// Style presets matching the dear imgui styles of the same name. If dest is NULL, the active
// context's ImNodesStyle instance will be used as the destination.
CIMGUI_API void          ImNodesStyleColorsDark(ImNodesStyle* dest /* = NULL */);     // on by default
CIMGUI_API void          ImNodesStyleColorsClassic(ImNodesStyle* dest /* = NULL */);
CIMGUI_API void          ImNodesStyleColorsLight(ImNodesStyle* dest /* = NULL */);
// Get a string corresponding to the enum value (for display, saving, etc.).
CIMGUI_API const char*   ImNodesGetStyleColorName(ImNodesCol idx);

// The top-level function call. Call this before calling BeginNode/EndNode. Calling this function
// will result the node editor grid workspace being rendered.
CIMGUI_API void ImNodesBeginNodeEditor(void);
CIMGUI_API void ImNodesEndNodeEditor(void);

// Add a navigable minimap to the editor; call before EndNodeEditor after all
// nodes and links have been specified
CIMGUI_API void ImNodesMiniMap(const float minimap_size_fraction /* = 0.2f */, const ImNodesMiniMapLocation location /* = ImNodesMiniMapLocation_TopLeft */, const ImNodesMiniMapNodeHoveringCallback node_hovering_callback /* = NULL */, const ImNodesMiniMapNodeHoveringCallbackUserData node_hovering_callback_data /* = NULL */);

// Use PushColorStyle and PopColorStyle to modify ImNodesStyle::Colors mid-frame.
CIMGUI_API void ImNodesPushColorStyle(ImNodesCol item, unsigned int color);
CIMGUI_API void ImNodesPopColorStyle(void);
CIMGUI_API void ImNodesPushStyleVar(ImNodesStyleVar style_item, float value);
CIMGUI_API void ImNodesPushStyleVarImVec2(ImNodesStyleVar style_item, ImVec2 value);
CIMGUI_API void ImNodesPopStyleVar(int count /* = 1 */);

// id can be any positive or negative integer, but INT_MIN is currently reserved for internal use.
CIMGUI_API void ImNodesBeginNode(int id);
CIMGUI_API void ImNodesEndNode(void);

CIMGUI_API ImVec2 ImNodesGetNodeDimensions(int id);

// Place your node title bar content (such as the node title, using ImGui::Text) between the
// following function calls. These functions have to be called before adding any attributes, or the
// layout of the node will be incorrect.
CIMGUI_API void ImNodesBeginNodeTitleBar(void);
CIMGUI_API void ImNodesEndNodeTitleBar(void);

// Attributes are ImGui UI elements embedded within the node. Attributes can have pin shapes
// rendered next to them. Links are created between pins.
//
// The activity status of an attribute can be checked via the IsAttributeActive() and
// IsAnyAttributeActive() function calls. This is one easy way of checking for any changes made to
// an attribute's drag float UI, for instance.
//
// Each attribute id must be unique.

// Create an input attribute block. The pin is rendered on left side.
CIMGUI_API void ImNodesBeginInputAttribute(int id, ImNodesPinShape shape /* = ImNodesPinShape_CircleFilled */);
CIMGUI_API void ImNodesEndInputAttribute(void);
// Create an output attribute block. The pin is rendered on the right side.
CIMGUI_API void ImNodesBeginOutputAttribute(int id, ImNodesPinShape shape /* = ImNodesPinShape_CircleFilled */);
CIMGUI_API void ImNodesEndOutputAttribute(void);
// Create a static attribute block. A static attribute has no pin, and therefore can't be linked to
// anything. However, you can still use IsAttributeActive() and IsAnyAttributeActive() to check for
// attribute activity.
CIMGUI_API void ImNodesBeginStaticAttribute(int id);
CIMGUI_API void ImNodesEndStaticAttribute(void);

// Push a single AttributeFlags value. By default, only AttributeFlags_None is set.
CIMGUI_API void ImNodesPushAttributeFlag(ImNodesAttributeFlags flag);
CIMGUI_API void ImNodesPopAttributeFlag(void);

// Render a link between attributes.
// The attributes ids used here must match the ids used in Begin(Input|Output)Attribute function
// calls. The order of start_attr and end_attr doesn't make a difference for rendering the link.
CIMGUI_API void ImNodesLink(int id, int start_attribute_id, int end_attribute_id);

// Enable or disable the ability to click and drag a specific node.
CIMGUI_API void ImNodesSetNodeDraggable(int node_id, const bool draggable);

// The node's position can be expressed in three coordinate systems:
// * screen space coordinates, -- the origin is the upper left corner of the window.
// * editor space coordinates -- the origin is the upper left corner of the node editor window
// * grid space coordinates, -- the origin is the upper left corner of the node editor window,
// translated by the current editor panning vector (see EditorContextGetPanning() and
// EditorContextResetPanning())

// Use the following functions to get and set the node's coordinates in these coordinate systems.

CIMGUI_API void ImNodesSetNodeScreenSpacePos(int node_id, ImVec2 screen_space_pos);
CIMGUI_API void ImNodesSetNodeEditorSpacePos(int node_id, ImVec2 editor_space_pos);
CIMGUI_API void ImNodesSetNodeGridSpacePos(int node_id, ImVec2 grid_pos);

CIMGUI_API ImVec2 ImNodesGetNodeScreenSpacePos(const int node_id);
CIMGUI_API ImVec2 ImNodesGetNodeEditorSpacePos(const int node_id);
CIMGUI_API ImVec2 ImNodesGetNodeGridSpacePos(const int node_id);

// If ImNodesStyleFlags_GridSnapping is enabled, snap the specified node's origin to the grid.
CIMGUI_API void ImNodesSnapNodeToGrid(int node_id);

// Returns true if the current node editor canvas is being hovered over by the mouse, and is not
// blocked by any other windows.
CIMGUI_API bool ImNodesIsEditorHovered(void);
// The following functions return true if a UI element is being hovered over by the mouse cursor.
// Assigns the id of the UI element being hovered over to the function argument. Use these functions
// after EndNodeEditor() has been called.
CIMGUI_API bool ImNodesIsNodeHovered(int* node_id);
CIMGUI_API bool ImNodesIsLinkHovered(int* link_id);
CIMGUI_API bool ImNodesIsPinHovered(int* attribute_id);

// Use The following two functions to query the number of selected nodes or links in the current
// editor. Use after calling EndNodeEditor().
CIMGUI_API int  ImNodesNumSelectedNodes(void);
CIMGUI_API int  ImNodesNumSelectedLinks(void);
// Get the selected node/link ids. The pointer argument should point to an integer array with at
// least as many elements as the respective NumSelectedNodes/NumSelectedLinks function call
// returned.
CIMGUI_API void ImNodesGetSelectedNodes(int* node_ids);
CIMGUI_API void ImNodesGetSelectedLinks(int* link_ids);
// Clears the list of selected nodes/links. Useful if you want to delete a selected node or link.
CIMGUI_API void ImNodesClearNodeSelection(void);
CIMGUI_API void ImNodesClearLinkSelection(void);
// Use the following functions to add or remove individual nodes or links from the current editors
// selection. Note that all functions require the id to be an existing valid id for this editor.
// Select-functions has the precondition that the object is currently considered unselected.
// Clear-functions has the precondition that the object is currently considered selected.
// Preconditions listed above can be checked via IsNodeSelected/IsLinkSelected if not already
// known.
CIMGUI_API void ImNodesSelectNode(int node_id);
CIMGUI_API void ImNodesClearNodeSelectionInt(int node_id);
CIMGUI_API bool ImNodesIsNodeSelected(int node_id);
CIMGUI_API void ImNodesSelectLink(int link_id);
CIMGUI_API void ImNodesClearLinkSelectionInt(int link_id);
CIMGUI_API bool ImNodesIsLinkSelected(int link_id);

// Was the previous attribute active? This will continuously return true while the left mouse button
// is being pressed over the UI content of the attribute.
CIMGUI_API bool ImNodesIsAttributeActive(void);
// Was any attribute active? If so, sets the active attribute id to the output function argument.
CIMGUI_API bool ImNodesIsAnyAttributeActive(int* attribute_id /* = NULL */);

// Use the following functions to query a change of state for an existing link, or new link. Call
// these after EndNodeEditor().

// Did the user start dragging a new link from a pin?
CIMGUI_API bool ImNodesIsLinkStarted(int* started_at_attribute_id);
// Did the user drop the dragged link before attaching it to a pin?
// There are two different kinds of situations to consider when handling this event:
// 1) a link which is created at a pin and then dropped
// 2) an existing link which is detached from a pin and then dropped
// Use the including_detached_links flag to control whether this function triggers when the user
// detaches a link and drops it.
CIMGUI_API bool ImNodesIsLinkDropped(int* started_at_attribute_id /* = NULL */, bool including_detached_links /* = true */);
// Did the user finish creating a new link?
CIMGUI_API bool ImNodesIsLinkCreated(int* started_at_attribute_id, int* ended_at_attribute_id, bool* created_from_snap /* = NULL */);
CIMGUI_API bool ImNodesIsLinkCreatedIntPtr(int* started_at_node_id, int* started_at_attribute_id, int* ended_at_node_id, int* ended_at_attribute_id, bool* created_from_snap /* = NULL */);

// Was an existing link detached from a pin by the user? The detached link's id is assigned to the
// output argument link_id.
CIMGUI_API bool ImNodesIsLinkDestroyed(int* link_id);

// Use the following functions to write the editor context's state to a string, or directly to a
// file. The editor context is serialized in the INI file format.

CIMGUI_API const char* ImNodesSaveCurrentEditorStateToIniString(size_t* data_size /* = NULL */);
CIMGUI_API const char* ImNodesSaveEditorStateToIniString(const ImNodesEditorContext* editor, size_t* data_size /* = NULL */);

CIMGUI_API void ImNodesLoadCurrentEditorStateFromIniString(const char* data, size_t data_size);
CIMGUI_API void ImNodesLoadEditorStateFromIniString(ImNodesEditorContext* editor, const char* data, size_t data_size);

CIMGUI_API void ImNodesSaveCurrentEditorStateToIniFile(const char* file_name);
CIMGUI_API void ImNodesSaveEditorStateToIniFile(const ImNodesEditorContext* editor, const char* file_name);

CIMGUI_API void ImNodesLoadCurrentEditorStateFromIniFile(const char* file_name);
CIMGUI_API void ImNodesLoadEditorStateFromIniFile(ImNodesEditorContext* editor, const char* file_name);
#ifdef __cplusplus
} // End of extern "C" block
#endif