MenuPopupNode
Namespace: Hex1b
Assembly: Hex1b.dll
Render node for menu popup content. Displays the menu items in a bordered box.
public sealed class MenuPopupNode : Hex1bNode, ILayoutProviderInheritance
Object → Hex1bNode → MenuPopupNode
Implements
Properties
ChildNodes
The reconciled child nodes (menu items, separators, submenus).
Returns: List<Hex1bNode>
public List<Hex1bNode> ChildNodes { get; set; }ClipMode
The clip mode for this layout region.
Returns: ClipMode
public ClipMode ClipMode { get; set; }ClipRect
The effective clipping rectangle for this layout region.
Returns: Rect
public Rect ClipRect { get; }IsFocusable
Returns true if this node can receive focus.
Returns: Boolean
public override bool IsFocusable { get; }OwnerNode
The MenuNode that owns this popup.
Returns: MenuNode
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
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:
bounds(Rect):
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)
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:
bindings(InputBindingsBuilder): The builder to add bindings to.
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>
public override IEnumerable<Hex1bNode> GetChildren()GetFocusableNodes()
Gets all focusable nodes in this subtree (including this node if focusable).
Returns: IEnumerable<Hex1bNode>
public override IEnumerable<Hex1bNode> GetFocusableNodes()MeasureCore(Constraints)
Override this method to implement measuring logic for this node.
Parameters:
constraints(Constraints):
Returns: Size
protected override Size MeasureCore(Constraints constraints)Render(Hex1bRenderContext)
Renders the node to the given context.
Parameters:
context(Hex1bRenderContext):
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.
public bool ShouldRenderAt(int x, int y)Fields
CloseAction
Rebindable action: Close the menu.
Returns: ActionId
public static readonly ActionId CloseActionNextItemAction
Rebindable action: Move to next item.
Returns: ActionId
public static readonly ActionId NextItemActionPreviousItemAction
Rebindable action: Move to previous item.
Returns: ActionId
public static readonly ActionId PreviousItemAction