Skip to content

MenuPopupNode

Namespace: Hex1b

Assembly: Hex1b.dll

Render node for menu popup content. Displays the menu items in a bordered box.

csharp
public sealed class MenuPopupNode : Hex1bNode, ILayoutProvider

Inheritance

ObjectHex1bNodeMenuPopupNode

Implements

Properties

ChildNodes

The reconciled child nodes (menu items, separators, submenus).

Returns: List<Hex1bNode>

csharp
public List<Hex1bNode> ChildNodes { get; set; }

ClipMode

The clip mode for this layout region.

Returns: ClipMode

csharp
public ClipMode ClipMode { get; set; }

ClipRect

The effective clipping rectangle for this layout region.

Returns: Rect

csharp
public Rect ClipRect { get; }

IsFocusable

Returns true if this node can receive focus.

Returns: Boolean

csharp
public override bool IsFocusable { get; }

OwnerNode

The MenuNode that owns this popup.

Returns: MenuNode

csharp
public MenuNode? OwnerNode { get; set; }

ParentLayoutProvider

The parent layout provider, if any. Set when this provider becomes the current layout provider and there was already one active. Used to ensure nested clipping works correctly.

Returns: ILayoutProvider

csharp
public ILayoutProvider? ParentLayoutProvider { get; set; }

Methods

ArrangeCore(Rect)

Override this method to implement arranging logic for this node. The base implementation saves previous bounds, marks dirty on change, and sets bounds.

Parameters:

csharp
protected override void ArrangeCore(Rect bounds)

ClipString(int, int, string)

Clips a string that starts at the given position, returning only the visible portion. Implementations should also consult the ParentLayoutProvider if present.

Parameters:

  • x (Int32): Starting absolute X position.
  • y (Int32): Absolute Y position.
  • text (String): The text to potentially clip.

Returns: ValueTuple<Int32, String>

A tuple containing:

  • adjustedX: The X position to start rendering (may be > x if left-clipped)
  • clippedText: The portion of text that should be rendered (may be empty)
csharp
public (int adjustedX, string clippedText) ClipString(int x, int y, string text)

ConfigureDefaultBindings(InputBindingsBuilder)

Configures the default input bindings for this node type. Override in derived classes to add default key bindings. These bindings can be inspected and modified by the user's callback.

Parameters:

csharp
public override void ConfigureDefaultBindings(InputBindingsBuilder bindings)

GetChildren()

Gets the direct children of this node. Used for input routing and tree traversal. Container nodes should override this to return their children.

Returns: IEnumerable<Hex1bNode>

csharp
public override IEnumerable<Hex1bNode> GetChildren()

GetFocusableNodes()

Gets all focusable nodes in this subtree (including this node if focusable).

Returns: IEnumerable<Hex1bNode>

csharp
public override IEnumerable<Hex1bNode> GetFocusableNodes()

MeasureCore(Constraints)

Override this method to implement measuring logic for this node.

Parameters:

Returns: Size

csharp
protected override Size MeasureCore(Constraints constraints)

Render(Hex1bRenderContext)

Renders the node to the given context.

Parameters:

csharp
public override void Render(Hex1bRenderContext context)

ShouldRenderAt(int, int)

Determines if a character at the given absolute position should be rendered. Implementations should also check the ParentLayoutProvider if present.

Parameters:

  • x (Int32): Absolute X position in terminal coordinates.
  • y (Int32): Absolute Y position in terminal coordinates.

Returns: Boolean

True if the character should be rendered, false if it should be clipped.

csharp
public bool ShouldRenderAt(int x, int y)

Fields

CloseAction

Rebindable action: Close the menu.

Returns: ActionId

csharp
public static readonly ActionId CloseAction

NextItemAction

Rebindable action: Move to next item.

Returns: ActionId

csharp
public static readonly ActionId NextItemAction

PreviousItemAction

Rebindable action: Move to previous item.

Returns: ActionId

csharp
public static readonly ActionId PreviousItemAction

Released under the MIT License.