Skip to content
Bit Quirky Behavior Trees and
State Machines

Search documentation

All topics and APIs

Close returns focus to Search.

What are you looking for?

Try a common topic or enter a complete API identifier.

Browse the reference instead

Esc closes · Tab reaches results · Enter opens the focused link

v0.6.0
Menu

Assembly: BitQuirky.Graph.GraphView.Editor

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.BoolToggle

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/BoolToggle.cs:22-112

Inherits: VisualElement

The one true/false editor every rail constant uses: a pill switch that carries its word, so color is never the only signal.

Responsibilities:

  • Present a two-state value as a sliding pill plus the wordstrueand false.
  • RaiseOnValueChangedonly on a user gesture, never on a programmatic Valuewrite.

Does NOT:

  • Encode a document payload, undo, or a type system. The host maps the bool onto its own canonical text and command.

C#
public UnityEngine.UIElements.Label ReadingLabel { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/BoolToggle.cs:51

The word beside the pill; hosts may rename it to match an existing row contract.

C#
public UnityEngine.UIElements.Toggle Switch { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/BoolToggle.cs:48

The pill switch; hosts that must name it for tests set this element’s name.

C#
public bool Value { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/BoolToggle.cs:88-96

Gets or sets the value without raising OnValueChanged.

C#
public event System.Action<bool> OnValueChanged

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/BoolToggle.cs:45

Raised once per user gesture with the new value.

C#
public const string FalseText = "false"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/BoolToggle.cs:38

The reading shown when the value is false.

C#
public const string KnobClass = "ed-bool-toggle__knob"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/BoolToggle.cs:29

USS class on the sliding knob.

C#
public const string KnobOnClass = "ed-bool-toggle__knob--on"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/BoolToggle.cs:31

USS class on the knob while the value is true.

C#
public const string ReadingClass = "ed-bool-toggle__reading"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/BoolToggle.cs:33

USS class on the label stating the current value.

C#
public const string RootClass = "ed-bool-toggle"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/BoolToggle.cs:25

USS class on the control’s root.

C#
public const string SwitchClass = "ed-bool-toggle__switch"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/BoolToggle.cs:27

USS class on the switch track.

C#
public const string TrueText = "true"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/BoolToggle.cs:36

The reading shown when the value is true.

C#
public BoolToggle(string controlName)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/BoolToggle.cs:58-85

Builds the toggle showingFalseText. controlNamenames the root, the switch, the knob, and the reading label from one string, so a host and its tests can find any part of the control from the name they passed in.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.ChevronMark

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ChevronMark.cs:23-78

Inherits: VisualElement

A downward chevron: the mark that says “clicking this opens a list”.

Two straight strokes drawn in code and tinted from USS throughresolvedStyle.color, the same wayGuardRingElementdraws its ring. A vector import is reserved for shapes that would look rough hand-drawn, and a glyph font is never used for a meaningful mark because a missing codepoint renders as a box.

Shared so every control that opens a list draws the SAME chevron: the inline object-reference combo on a pin, and the search field of the picker that combo opens. Two hand-drawn copies would drift the moment one is tweaked.

C#
public const string UssClassName = "bq-chevron-mark"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ChevronMark.cs:26

Block class, so USS can size and tint the mark.

C#
public ChevronMark()

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ChevronMark.cs:38-43

Builds the mark, which draws itself to fill whatever box USS gives it and takes no pointer input, so it can sit inside a button or field without stealing its clicks.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.Chip

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Chip.cs:51-204

Inherits: VisualElement

Small color-tinted pill used as: family chip (node-family pill on node cards), owner chip (Host/Client), type pill (Blackboard type), and decorator pill (dashed border variant - see ChipVariant).

Responsibilities:

  • Render text inside a pill with a variant-specific border / background treatment.
  • Carry one accent color token (e.g. --bq-family-action) the consumer passes; the USS rule resolves which property to tint.
  • Surface clicks via theClickedevent so chips can double as filter toggles.

Does NOT:

  • Encode what a chip “means”. The consumer decides whether a given chip represents an owner, a type, a family, or a decorator pill, and supplies the label, accent token, and tooltip accordingly.

Remarks

Round Trip: replace any local chip / pill helper with this control. The decorator pill in the BT editor extends this class (or wraps it) without adding BT semantics into the graph library per .

C#
public string AccentTokenName { get; private set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Chip.cs:103

USS variable name (e.g. --bq-family-action) that drives the pill’s accent color. Defaults to text dim.

C#
public string Text { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Chip.cs:95-99

The chip’s label. Setting null stores an empty string, which leaves a bare pill rather than collapsing the chip.

C#
public BitQuirky.Graph.GraphView.Controls.Chip.ChipVariant Variant { get; private set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Chip.cs:106

How the chip is currently drawn.

C#
public event System.Action Clicked

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Chip.cs:85

Raised on a left click anywhere on the chip. A chip nobody subscribes to is inert but still swallows the click.

Chip(string text, Chip.ChipVariant variant, string accentTokenName)

Section titled “Chip(string text, Chip.ChipVariant variant, string accentTokenName)”
C#
public Chip(string text = "", BitQuirky.Graph.GraphView.Controls.Chip.ChipVariant variant = Filled, string accentTokenName = null)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Chip.cs:119-141

Builds the chip.text is the label, variantpicks the border and background treatment and defaults to Filled, and accentTokenNamenames the USS variable that tints it - null or empty leaves the dim default accent. The chip always consumes a left click, whether or not anything listens toClicked.

C#
public void SetAccent(string accentTokenName)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Chip.cs:153-164

Apply a new accent. Passing a USS variable name (e.g. --bq-family-condition) sets the corresponding modifier class ed-chip--accent-condition so USS can pick the color from the token.

C#
public void SetVariant(BitQuirky.Graph.GraphView.Controls.Chip.ChipVariant variant)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Chip.cs:169-172

Redraws the chip in another variant, keeping its text and accent.

Category: Low-level runtime

C#
enum BitQuirky.Graph.GraphView.Controls.Chip.ChipVariant

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Chip.cs:59-69

Underlying type: int

How a chip is drawn. The variant carries no meaning of its own; the host decides what a filled chip says that an outlined one does not.

C#
Dashed = 2

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Chip.cs:68

Dashed outline (decorator pill - ).

C#
Filled = 0

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Chip.cs:62

Solid filled pill (default - Blackboard type, owner, family chip).

C#
Outline = 1

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Chip.cs:65

Outlined pill (request-id pill, secondary chip).

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.CompactRow

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/CompactRow.cs:49-151

Inherits: VisualElement

Dense two-column row used by pending-request rows, recent-event rows, watched-value rows, and Blackboard Variant A rows. Provides a label slot, a value slot, an optional leading status pip, and an optional trailing chip - covering every shape in and without per-row subclassing.

Responsibilities:

  • Lay out leading-pip / label / value / trailing-chip in a single horizontal row.
  • ExposeLabel and Valuefor direct text writes and the pip / chip / payload slots as VisualElements consumers populate.
  • Forward clicks viaClickedso the row can act as a single button (e.g. clicking a pending-request row focuses the matching node).

Does NOT:

  • Encode any specific data shape; consumers wire what each slot means.

Remarks

Round Trip: replace any local row-style helper with this class.

C#
public string Label { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/CompactRow.cs:73-77

The row’s left-hand caption text. Setting null stores an empty string; the element keeps its slot so the value column stays aligned with neighbouring rows.

C#
public UnityEngine.UIElements.VisualElement Leading { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/CompactRow.cs:90

Leading slot for status pip / type swatch.

C#
public UnityEngine.UIElements.VisualElement Trailing { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/CompactRow.cs:93

Trailing slot for chip, age label, or right-aligned glyph.

C#
public string Value { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/CompactRow.cs:83-87

The row’s right-hand value text. Setting null stores an empty string; the element keeps its slot so the row does not reflow as values come and go.

C#
public event System.Action Clicked

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/CompactRow.cs:63

Raised when the row is clicked.

C#
public CompactRow(string label = "", string value = "")

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/CompactRow.cs:105-148

Builds the row with both text columns set, defaulting to empty. label fills the caption and valuethe value; the leading and trailing slots start empty for the caller to populate via Leading and Trailing.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.ContextMenu

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ContextMenu.cs:49-171

Right-click context menu shim that delegates to Unity’s GenericMenuwhile exposing a strongly-typed entry API the editor-shell code uses.

Responsibilities:

  • Collect a small set of context-menu entries (label, enabled, checked, callback) and present them via ShowAsContextat the mouse cursor.
  • Provide a separator helper so consumers keep the entry list declarative.

Does NOT:

  • Reimplement Unity’s menu rendering. The contract document calls this a “GenericMenu styling shim” - keeping the system menu under the hood is intentional so OS conventions are honoured.

Remarks

Round Trip: replace any local right-click menu helper with this class. The shim keeps usage uniform across packages without trying to recreate Unity’s native menu styling.

C#
public BitQuirky.Graph.GraphView.Controls.ContextMenu AddDisabled(string label)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ContextMenu.cs:102-111

Appends a line that is shown but cannot be chosen, for naming a command that is unavailable right now instead of hiding it.

Returns

This menu, so calls can be chained.

AddItem(string label, Action onSelected, bool isEnabled, bool isChecked)

Section titled “AddItem(string label, Action onSelected, bool isEnabled, bool isChecked)”
C#
public BitQuirky.Graph.GraphView.Controls.ContextMenu AddItem(string label, System.Action onSelected, bool isEnabled = true, bool isChecked = false)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ContextMenu.cs:85-95

Appends a command. Entries appear in the order they are added; nest one under a submenu by putting a slash inlabel.

Returns

This menu, so calls can be chained.

C#
public BitQuirky.Graph.GraphView.Controls.ContextMenu AddSeparator(string path = "")

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ContextMenu.cs:118-122

Appends a dividing line. Pass the submenu path to place the separator inside that submenu rather than at the top level.

Returns

This menu, so calls can be chained.

C#
public void Show()

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ContextMenu.cs:129-133

Show the menu under the current mouse cursor.

C#
public void Show(UnityEngine.Rect screenRect)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ContextMenu.cs:136-140

Show the menu anchored at a specific screen rect.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.ContextualHelpEvent

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ContextualHelpEvent.cs:12-53

Inherits: EventBase<ContextualHelpEvent>

Bubbled, owner-scoped help for a host’s existing contextual-instruction surface. Publishing an empty message releases only the identifiedSource.

C#
public string Message { get; private set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ContextualHelpEvent.cs:18

The contextual instruction, or empty to release this source.

C#
public UnityEngine.UIElements.VisualElement Source { get; private set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ContextualHelpEvent.cs:15

The control that owns this help until it publishes an empty message.

C#
protected override void Init()

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ContextualHelpEvent.cs:46-52

Resets the pooled event: the help bubbles, so a host can listen on a common ancestor of every publisher, and the source and message start empty.

Publish(VisualElement source, string message)

Section titled “Publish(VisualElement source, string message)”
C#
public static void Publish(UnityEngine.UIElements.VisualElement source, string message)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ContextualHelpEvent.cs:21-25

Publishes owner-scoped help from source.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.DecoratorPill

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/DecoratorPill.cs:54-248

Inherits: Chip

Compact dashed pill used to render a graph decorator’s glyph + label as an “attached wrapper” rather than a standalone graph card. Built on top ofChipwith the Dashedvariant pre-applied so consumers do not duplicate the decorator look-and-feel.

Responsibilities:

  • Apply the .ed-decorator-pill modifier class on top of the base Chip classes so the design-system stylesheet can tighten spacing / typography for decorators.
  • Surface aSetVetoedtoggle the consumer calls when the decorator vetoed execution in Live mode .

Does NOT:

  • Know about behavior-tree decorator kinds, parameters, or runtime state. The consumer composes the label, tooltip, and accent token (and the runtime overlay) per .

Remarks

Round Trip: adopt this control directly when Round Trip needs an “attached pill” visual (e.g. decorator-style annotations). The dashed-pill treatment is part of the shared design-system vocabulary, not BT-specific.

C#
public bool IsVetoed { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/DecoratorPill.cs:108-112

Whether the decorator vetoed execution this tick. Toggles the ed-decorator-pill--vetoed modifier so the design system dims the pill . Idempotent.

DecoratorPill(string label, string accentTokenName, string tooltipText)

Section titled “DecoratorPill(string label, string accentTokenName, string tooltipText)”
C#
public DecoratorPill(string label = "", string accentTokenName = "--bq-family-decorator", string tooltipText = null)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/DecoratorPill.cs:82-97

Build a decorator pill with the given label, family accent token (default --bq-family-decorator), and tooltip.

Parameters

  • label: Visible text - e.g. “Invert”, “Repeat(3)”, “Time-limit(2.0s)”.
  • accentTokenName: USS variable name for the pill’s accent (default --bq-family-decorator).
  • tooltipText: Hover tooltip - : full parameters when hovered.

C#
public void SetAccent(string accentTokenName)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/DecoratorPill.cs:130-134

Apply the accent to both the chip fill and dashed border.

C#
public void SetTooltip(string tooltipText)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/DecoratorPill.cs:122-125

Update the pill tooltip with the latest decorator parameter summary . Pass null or empty to clear.

C#
public void SetVetoed(bool vetoed)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/DecoratorPill.cs:140-152

Toggle the vetoed modifier . Safe to call repeatedly with the same value.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.ContextMenu.Entry

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ContextMenu.cs:56-68

One line of the menu: a command, a disabled command, or a separator.

C#
public bool IsChecked

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ContextMenu.cs:63

Draws a check mark beside the entry.

C#
public bool IsEnabled

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ContextMenu.cs:61

False draws the entry dimmed and refuses to run it.

C#
public bool IsSeparator

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ContextMenu.cs:67

True when the entry is a dividing line rather than a command.

C#
public string Label

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ContextMenu.cs:59

The text shown for the entry, or the submenu path a separator belongs to.

C#
public System.Action OnSelected

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ContextMenu.cs:65

Runs when the entry is chosen.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.GraphDropdownField

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/GraphDropdownField.cs:28-584

Inherits: BaseField<string>

A compact, token-styled string field that opens the shared Bit Quirky popover list.

Responsibilities:

  • Keep stored string identities independent from optional friendly display captions.
  • Present and navigate choices throughPopover, SelectableListRow, SelectableListKeyboardManipulator, and ChevronMark.
  • Preserve a stored value that is absent from the current choices until the user explicitly commits a replacement.
  • Raise the standardChangeEvent'1once when a new choice is committed.

Does NOT:

  • Interpret the strings, persist a document, provide undo, or own product semantics.
  • Use Unity’s native popup menu or silently repair an obsolete stored identity.

Remarks

Round Trip: use this field wherever a compact graph editor needs a finite string choice.

C#
public bool IsMenuOpen { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/GraphDropdownField.cs:151

Gets whether this field currently owns an open shared popover.

C#
public System.Collections.Generic.List<string> choices { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/GraphDropdownField.cs:121-130

Gets or replaces the stable values offered by the menu. Replacing the list never changes value; a now-missing value remains visible.

C#
public int index { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/GraphDropdownField.cs:136-148

Gets the first choice index matching the stored value, or -1 when the stored value is not currently offered. Setting a valid index commits that choice through the standard value API.

C#
public const string ChevronUssClassName = "bq-dropdown-field__chevron"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/GraphDropdownField.cs:46

USS class applied to the shared chevron within the trigger.

C#
public const string EmptyRowUssClassName = "bq-dropdown-field__row--empty"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/GraphDropdownField.cs:61

USS class applied to the non-interactive empty-list row.

C#
public const string InputUssClassName = "bq-dropdown-field__input"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/GraphDropdownField.cs:37

USS class applied to the focusable compact trigger.

C#
public const string LabelUssClassName = "bq-dropdown-field__label"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/GraphDropdownField.cs:34

USS class applied to the retained field label.

C#
public const string OpenUssClassName = "bq-dropdown-field--open"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/GraphDropdownField.cs:40

USS class applied while the menu is open.

C#
public const string PopoverUssClassName = "bq-dropdown-field__popover"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/GraphDropdownField.cs:49

USS class applied to this field’s shared popover.

C#
public const string RowLabelUssClassName = "bq-dropdown-field__row-label"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/GraphDropdownField.cs:58

USS class applied to each row caption.

C#
public const string RowUssClassName = "bq-dropdown-field__row"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/GraphDropdownField.cs:55

USS class applied to each shared selectable row.

C#
public const string ScrollUssClassName = "bq-dropdown-field__scroll"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/GraphDropdownField.cs:52

USS class applied to the clamped, scrollable choice list.

C#
public const string UssClassName = "bq-dropdown-field"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/GraphDropdownField.cs:31

USS class applied to the complete field.

C#
public const string ValueUssClassName = "bq-dropdown-field__value"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/GraphDropdownField.cs:43

USS class applied to the trigger’s formatted value.

GraphDropdownField(List<string> choices, string defaultValue, Func<string, string> formatValue)

Section titled “GraphDropdownField(List<string> choices, string defaultValue, Func<string, string> formatValue)”
C#
public GraphDropdownField(System.Collections.Generic.List<string> choices, string defaultValue, System.Func<string, string> formatValue = null)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/GraphDropdownField.cs:109-115

Creates an unlabeled graph dropdown without changingdefaultValuewhen it is absent fromchoices.

GraphDropdownField(string label, List<string> choices, string defaultValue, Func<string, string> formatValue)

Section titled “GraphDropdownField(string label, List<string> choices, string defaultValue, Func<string, string> formatValue)”
C#
public GraphDropdownField(string label, System.Collections.Generic.List<string> choices, string defaultValue, System.Func<string, string> formatValue = null)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/GraphDropdownField.cs:82-103

Creates a labeled graph dropdown without changingdefaultValuewhen it is absent fromchoices.

C#
public void SetMenuOpen(bool open)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/GraphDropdownField.cs:157-167

Opens or closes the shared popover without changing the stored value. Opening is a no-op while the field is detached or disabled; closing returns keyboard focus to the trigger.

C#
public override void SetValueWithoutNotify(string newValue)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/GraphDropdownField.cs:170-175

Category: Low-level runtime

C#
enum BitQuirky.Graph.GraphView.Controls.RailResizeHandle.GrowDirection

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RailResizeHandle.cs:26-39

Underlying type: int

Which pointer direction grows the pane.

C#
Downward = 3

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RailResizeHandle.cs:38

Dragging down heightens a top-docked pane.

C#
Leftward = 0

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RailResizeHandle.cs:29

Dragging left widens a right-docked pane.

C#
Rightward = 1

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RailResizeHandle.cs:32

Dragging right widens a left-docked pane.

C#
Upward = 2

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RailResizeHandle.cs:35

Dragging up heightens a bottom-docked pane.

Category: Low-level runtime

C#
enum BitQuirky.Graph.GraphView.Controls.ResizableScopedPanel.HeightMode

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ResizableScopedPanel.cs:31-41

Underlying type: int

The active height behavior for the panel.

C#
Collapsed = 1

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ResizableScopedPanel.cs:37

Only the measured scope band remains visible.

C#
Custom = 0

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ResizableScopedPanel.cs:34

The stylesheet default or the last explicitly chosen split.

C#
Maximized = 2

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ResizableScopedPanel.cs:40

The panel occupies all space not retained for its siblings.

Category: Low-level runtime

C#
interface BitQuirky.Graph.GraphView.Controls.IFoldoutRail

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/IFoldoutRail.cs:52-84

The slice of an inspector rail that anInspectorFoldoutHandle needs in order to drive a collapse/expand gesture. Every graph tool (Round Trip, Behavior Tree, statecharts, …) docks its inspector differently - right-anchored absolute, grid column, flex child - so the handle never depends on a concrete rail type. The consumer implements these members on whatever element owns its rail width and the handle reports where the gesture lands.

Responsibilities (consumer side): -ExpandedWidth: the rail’s open width, the reference span for live drag math. -MinWidth / MaxWidth: the resize bounds a drag clamps to, and the floor past which a drag commits a collapse instead of a resize. -SetRailWidth: set the width immediately (no transition) so a live drag tracks the pointer 1:1. The consumer is responsible for suppressing any width transition for the duration of the drag. -CommitWidth: keep a drag-resized width as the new expanded width (clamped, persisted, rail left expanded). -SetCollapsed: commit the open/closed end state, honouringanimateso click / keyboard toggles glide and a persisted-state restore snaps without motion.

Remarks

The handle owns the chevron, grips, hover/press/disabled visuals, tooltip, keyboard shortcut, and persistence. The rail owns its own width and the slide transition. The two never share styling.

C#
float ExpandedWidth { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/IFoldoutRail.cs:55

The rail’s open width in pixels.

C#
float MaxWidth { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/IFoldoutRail.cs:61

Largest width a resize drag may settle on.

C#
float MinWidth { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/IFoldoutRail.cs:58

Smallest width a resize drag may settle on.

C#
void CommitWidth(float width)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/IFoldoutRail.cs:75

Keepwidthas the rail’s new expanded width when a resize drag ends: clamp it toMinWidth.. MaxWidth, leave the rail expanded, and persist it so it survives reopen. Called once on drag release (not per move).

SetCollapsed(bool collapsed, bool animate)

Section titled “SetCollapsed(bool collapsed, bool animate)”
C#
void SetCollapsed(bool collapsed, bool animate)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/IFoldoutRail.cs:83

Commit the rail to its collapsed (true) or expanded (false) end state. When animateis truethe consumer glides between widths; when falseit snaps (used when restoring a persisted state).

C#
void SetRailWidth(float width)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/IFoldoutRail.cs:67

Set the rail width immediately, without animation. Called on every pointer-move during a live drag.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.IndicatorTooltip

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/IndicatorTooltip.cs:14-77

Responsibilities:

  • Give field and status indicators native hover explanations, including when disabled.
  • Prefer an optional contextual explanation without changing pointer activation. Does NOT: own a popup, schedule hover delays, or retain a global indicator registry.

C#
public const string ClearedText = "No runtime value is attached."

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/IndicatorTooltip.cs:27

Default explanation for a detached value.

C#
public const string HealthyText = "Value is available."

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/IndicatorTooltip.cs:23

Default explanation for a healthy value.

C#
public const string IncompatibleText = "Value is incompatible with the field contract."

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/IndicatorTooltip.cs:21

Default explanation for an incompatible value.

C#
public const string ReadOnlyText = "Value cannot be edited."

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/IndicatorTooltip.cs:19

Default explanation for a read-only value.

C#
public const string UnavailableText = "Value cannot currently be resolved."

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/IndicatorTooltip.cs:25

Default explanation for an unavailable value.

C#
public const string WarningText = "Value needs attention."

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/IndicatorTooltip.cs:17

Default explanation for a warning indicator.

Set(VisualElement indicator, string defaultText, string contextualText)

Section titled “Set(VisualElement indicator, string defaultText, string contextualText)”
C#
public static void Set(UnityEngine.UIElements.VisualElement indicator, string defaultText, string contextualText = null)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/IndicatorTooltip.cs:38-64

Applies the contextual explanation when it is nonempty, or the default explanation otherwise. A described indicator participates in pointer picking solely so UI Toolkit can request its tooltip; it remains outside the focus ring and adds no activation handlers. Reapplying unchanged text is a no-op so an active native hover delay is not restarted. Clearing both texts restores decorative picking.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.InspectorFoldoutHandle

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/InspectorFoldoutHandle.cs:70-421

Inherits: VisualElement

Right-rail fold-out handle - the editor chrome that rides the canvas/inspector seam and collapses or expands the rail. Shared by every BQ graph tool that docks a right-rail inspector (Round Trip, Behavior Tree, statecharts, …) so the affordance, animation, tooltip copy, keyboard shortcut, and persistence stay identical everywhere.

Replaces the bare▶text chevron each tool used to draw at the seam: that glyph had no hit target beyond its 14×14 bounding box, no rest/hover/press states, and didn’t telegraph the slide it triggers.

Anatomy (top → bottom, cross-axis centred): grip ridge, stroked chevron, grip ridge. The grips read as “grabbable”; the chevron points atwhat will happen next(→ toward the rail when open = “click to collapse”; ← toward the canvas when collapsed = “click to expand”).

Responsibilities:

  • Own the open/collapsed state, its visual class, tooltip copy, and the chevron rotation (all driven from USS via a single modifier class - see.ed-foldout-handlein GraphViewStyles.uss).
  • Translate click / Cmd+\ (Ctrl+) / Enter / Space into a toggle, and a grab-and-drag into a live rail resize - committed as the new width on release, or a collapse when pulled in past the rail’s minimum - reporting state viaOnToggled.
  • Persist open/closed per tool + user in EditorPrefs and restore it.
  • Drive a boundIFoldoutRail: live width while dragging, the resized width committed on release, and an animated collapse/expand on toggle.

Does NOT:

  • Style or animate the rail itself - that is the rail’s concern (it owns its width and slide transition; the handle only “reports where it landed”). SeeIFoldoutRail.
  • Hard-depend on a concrete rail type or any Round-Trip concept.

Remarks

Round Trip / Behavior Tree: mount one of these on the rail’s canvas-facing edge,Bindthe rail, and subscribe to OnToggledif you need to react (e.g. re-flow the canvas). The handle handles everything else.

C#
public bool IsOpen { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/InspectorFoldoutHandle.cs:128

True when the rail is expanded.

C#
public event System.Action<bool> OnToggled

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/InspectorFoldoutHandle.cs:135

Raised whenever the open state changes (carrying the new value). Not raised for no-opSetOpencalls or for a persisted-state restore.

C#
public const float CollapsePastMinPx = 40

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/InspectorFoldoutHandle.cs:79

How far (px) a resize drag may pull the rail in below its minimum width before a release commits a collapse instead of settling at the minimum. Matches the Figma / IDE inspector feel.

C#
public InspectorFoldoutHandle(string toolId = "default")

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/InspectorFoldoutHandle.cs:142-199

Parameters

  • toolId: Stable per-tool id used to scope the EditorPrefs open/closed state, e.g."RoundTrip". Tools sharing a window but distinct inspectors pass distinct ids.

C#
public void Bind(BitQuirky.Graph.GraphView.Controls.IFoldoutRail rail)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/InspectorFoldoutHandle.cs:205-209

Attach the rail this handle drives and immediately sync it to the (possibly persisted) open state without animation.

IsToggleShortcut(KeyCode keyCode, EventModifiers modifiers)

Section titled “IsToggleShortcut(KeyCode keyCode, EventModifiers modifiers)”
C#
public static bool IsToggleShortcut(UnityEngine.KeyCode keyCode, UnityEngine.EventModifiers modifiers)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/InspectorFoldoutHandle.cs:236-240

True when the key + modifiers form the rail toggle shortcut (Cmd+\ on macOS, Ctrl+\ on Windows / Linux).

ResolveResizeCollapses(float startWidth, float dx, float minWidth, float collapsePastMin)

Section titled “ResolveResizeCollapses(float startWidth, float dx, float minWidth, float collapsePastMin)”
C#
public static bool ResolveResizeCollapses(float startWidth, float dx, float minWidth, float collapsePastMin)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/InspectorFoldoutHandle.cs:274-277

True once a resize drag has been pulled in far enough past the rail’s minimum width (collapsePastMinbeyond minWidth) that a release should commit a collapse instead of settling at the minimum.

ResolveResizeWidth(float startWidth, float dx, float minWidth, float maxWidth)

Section titled “ResolveResizeWidth(float startWidth, float dx, float minWidth, float maxWidth)”
C#
public static float ResolveResizeWidth(float startWidth, float dx, float minWidth, float maxWidth)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/InspectorFoldoutHandle.cs:263-266

Live rail width during a resize drag. The rail is right-docked and the handle sits on its canvas-facing (left) edge, so a negative dx(dragged left, into the canvas) grows the rail and a positivedx(dragged right, toward the rail edge) shrinks it. Clamped to[minWidth, maxWidth].

C#
public void SetOpen(bool open, bool animate = true)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/InspectorFoldoutHandle.cs:218-226

Set the open state. No-op (and no event) when already in the requested state.

ShouldHandleShortcut(VisualElement focused)

Section titled “ShouldHandleShortcut(VisualElement focused)”
C#
public static bool ShouldHandleShortcut(UnityEngine.UIElements.VisualElement focused)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/InspectorFoldoutHandle.cs:247-254

True when the toggle shortcut should act. Returns false when the keyboard focus sits inside a text field so the backslash reaches the field instead of toggling the rail.

C#
public void Toggle()

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/InspectorFoldoutHandle.cs:212

Flip the open state.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.InspectorSection

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/InspectorSection.cs:52-238

Inherits: VisualElement

Collapsible inspector section header + content slot, used by the six right-rail sections in the redesigned editor plus the Blackboard panel header. Keeps the chevron + title + count badge styling consistent and the collapsed/expanded behavior uniform.

Responsibilities:

  • Render a header row with chevron, title, optional count badge, and an arbitrary trailing element (e.g. a section-level filter pill).
  • Toggle the body’s display between collapsed and expanded on header click and emitOnExpandedChangedso consumers can persist the flag.
  • Expose aBodyslot consumers populate freely.

Does NOT:

  • Persist its own collapsed state; consumers wire that to whatever state object owns the section (e.g. BehaviorTreeInspectorState).
  • Decide what counts as the “count badge”; consumers update it viaCount.

Remarks

Round Trip: replace any local collapsible-section helper with this class.

C#
public UnityEngine.UIElements.VisualElement Body { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/InspectorSection.cs:118

Slot consumers populate with section content.

C#
public int? Count { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/InspectorSection.cs:95-111

Optional count badge shown next to the title. Set to null to hide the badge.

C#
public bool IsExpanded { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/InspectorSection.cs:125-129

Whether the body is showing. Setting it applies the state silently, without raising OnExpandedChanged, so a host can restore a remembered state without hearing its own restore back. A headerless section is always expanded.

C#
public bool ShowHeader { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/InspectorSection.cs:136-144

Shows or hides the header row. A headerless section is chrome-free: its body renders directly in the parent and stays expanded, because no affordance could re-expand it.

C#
public string Title { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/InspectorSection.cs:81-89

The heading text shown in the header row. Setting null stores an empty string, which leaves the header and its chevron in place with no caption.

C#
public UnityEngine.UIElements.VisualElement Trailing { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/InspectorSection.cs:115

Trailing slot - useful for filter chips, a small search affordance, or per-section action buttons.

C#
public event System.Action<bool> OnExpandedChanged

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/InspectorSection.cs:71

Raised when the section is expanded or collapsed.

InspectorSection(string title, int? count, bool startsExpanded)

Section titled “InspectorSection(string title, int? count, bool startsExpanded)”
C#
public InspectorSection(string title = "", int? count = null, bool startsExpanded = true)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/InspectorSection.cs:156-199

Builds the section.title is the heading, count the optional badge beside it with null showing no badge, and startsExpandedthe initial body state - passing false is how a host restores a collapsed section without raising a change on construction.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.Popover

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Popover.cs:55-661

Inherits: VisualElement

Lightweight popover panel that floats above the rest of the editor canvas. Used for bake-version detail, node-search result list, conflict diff, and any other small ephemeral surface.

Responsibilities:

  • Render a shadowed, rounded panel positioned relative to an anchor element (or absolute coordinates) and accept arbitrary content viaContent.
  • Auto-dismiss on click-outside, onEscape, or via Close; raise OnClosedwhen it does. An outside click is spent on the dismissal alone unlessDismissPassThrough claims the element it landed on, in which case the click also reaches it.
  • Reposition constrained popovers when their panel or anchor geometry changes.
  • Stay an unprivilegedVisualElement; the consumer adds it to a parent (typically rootVisualElement) and removes it onOnClosed.

Does NOT:

  • Carry editor-window-level shortcuts beyond Escape; consumers wire their own keyboard handling for the popover content.
  • Manage focus capture; UI Toolkit’s panel handles focus automatically when the popover is the topmost element.

Remarks

Round Trip: replace any local popover/floating panel with this control.

C#
public UnityEngine.UIElements.VisualElement Content { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Popover.cs:86

Slot consumers add content into.

C#
public System.Func<UnityEngine.UIElements.VisualElement, bool> DismissPassThrough { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Popover.cs:93

Decides whether an outside pointer-down that dismisses the popover also reaches the element it landed on, so one click both dismisses and places the caret where it was clicked. Null, the default, spends every outside click on the dismissal.

C#
public event System.Action OnClosed

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Popover.cs:79

Raised when the popover finishes closing.

C#
public Popover()

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Popover.cs:104-124

Builds an empty, absolutely positioned, focusable popover with its notch hidden. The caller adds content toContentand opens it against an anchor; keyboard dismissal and outside-click dismissal are wired here.

C#
public void Close()

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Popover.cs:358-384

Close + detach the popover.

OpenAnchored(VisualElement panelRoot, VisualElement anchor, Vector2 offset)

Section titled “OpenAnchored(VisualElement panelRoot, VisualElement anchor, Vector2 offset)”
C#
public void OpenAnchored(UnityEngine.UIElements.VisualElement panelRoot, UnityEngine.UIElements.VisualElement anchor, UnityEngine.Vector2 offset = default(UnityEngine.Vector2))

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Popover.cs:136-146

Open the popover anchored underanchor. The popover attaches itself to the anchor’s panel root via panelRoot(callers pass EditorWindow.rootVisualElement).

OpenAnchoredAbove(VisualElement panelRoot, VisualElement anchor, float gap)

Section titled “OpenAnchoredAbove(VisualElement panelRoot, VisualElement anchor, float gap)”
C#
public void OpenAnchoredAbove(UnityEngine.UIElements.VisualElement panelRoot, UnityEngine.UIElements.VisualElement anchor, float gap)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Popover.cs:155-166

Opens the popover directly aboveanchor, its bottom edge gappixels clear of the anchor’s top, in panelRoot’s coordinate space. No viewport clamping is applied.

Exceptions

  • ArgumentNullException: panelRootor anchor is null.

OpenAnchoredConstrained(VisualElement panelRoot, VisualElement anchor, PopoverPlacementOptions options, VisualElement keepLeftOf)

Section titled “OpenAnchoredConstrained(VisualElement panelRoot, VisualElement anchor, PopoverPlacementOptions options, VisualElement keepLeftOf)”
C#
public void OpenAnchoredConstrained(UnityEngine.UIElements.VisualElement panelRoot, UnityEngine.UIElements.VisualElement anchor, BitQuirky.Graph.GraphView.Controls.PopoverPlacementOptions options, UnityEngine.UIElements.VisualElement keepLeftOf = null)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Popover.cs:174-199

Opens relative to an anchor and resolves the final side and horizontal position against the panel viewport after the popover geometry is known. When keepLeftOfis set, the popover sits to the left of that element, top-aligned to the anchor, then clamped into the viewport.

OpenAt(VisualElement panelRoot, Vector2 localPosition)

Section titled “OpenAt(VisualElement panelRoot, Vector2 localPosition)”
C#
public void OpenAt(UnityEngine.UIElements.VisualElement panelRoot, UnityEngine.Vector2 localPosition)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Popover.cs:320-355

Open the popover at an absolute position inside panelRoot’s local coordinate space.

ResolvePlacement(Rect viewport, Rect anchor, Vector2 popoverSize, PopoverPlacementOptions options)

Section titled “ResolvePlacement(Rect viewport, Rect anchor, Vector2 popoverSize, PopoverPlacementOptions options)”
C#
public static BitQuirky.Graph.GraphView.Controls.PopoverPlacementResult ResolvePlacement(UnityEngine.Rect viewport, UnityEngine.Rect anchor, UnityEngine.Vector2 popoverSize, BitQuirky.Graph.GraphView.Controls.PopoverPlacementOptions options)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Popover.cs:204-211

Resolves anchored bounds without reading or mutating UI Toolkit elements.

ResolvePlacement(Rect viewport, Rect anchor, Vector2 popoverSize, PopoverPlacementOptions options, Rect? keepLeftOf)

Section titled “ResolvePlacement(Rect viewport, Rect anchor, Vector2 popoverSize, PopoverPlacementOptions options, Rect? keepLeftOf)”
C#
public static BitQuirky.Graph.GraphView.Controls.PopoverPlacementResult ResolvePlacement(UnityEngine.Rect viewport, UnityEngine.Rect anchor, UnityEngine.Vector2 popoverSize, BitQuirky.Graph.GraphView.Controls.PopoverPlacementOptions options, UnityEngine.Rect? keepLeftOf)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/Popover.cs:217-314

Resolves anchored bounds, optionally keeping the popover to the left of keepLeftOf.

Category: Low-level runtime

C#
readonly struct BitQuirky.Graph.GraphView.Controls.PopoverPlacementOptions

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/PopoverPlacement.cs:34-105

Immutable input for viewport-constrained popover placement.

Responsibilities:

  • Carry preferred side, anchor gap, viewport padding, and notch inset.

Does NOT:

  • Read panel geometry or provide editor-product defaults.

C#
public bool ConstrainToViewportVertically { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/PopoverPlacement.cs:104

Gets whether the popover may flip and clamp against vertical viewport edges.

C#
public float Gap { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/PopoverPlacement.cs:86

Gets the gap between the popover and its anchor.

C#
public float HorizontalViewportPadding { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/PopoverPlacement.cs:92

Gets the minimum space retained inside the horizontal viewport edges.

C#
public float MinimumNotchInset { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/PopoverPlacement.cs:101

Gets the minimum horizontal notch inset from either popover edge.

C#
public BitQuirky.Graph.GraphView.Controls.PopoverVerticalPlacement PreferredPlacement { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/PopoverPlacement.cs:98

Gets the vertical side attempted before automatic flipping.

C#
public float VerticalViewportPadding { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/PopoverPlacement.cs:95

Gets the minimum space retained inside the vertical viewport edges.

C#
public float ViewportPadding { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/PopoverPlacement.cs:89

Gets the minimum space retained inside every viewport edge.

PopoverPlacementOptions(float gap, float viewportPadding, PopoverVerticalPlacement preferredPlacement, float minimumNotchInset)

Section titled “PopoverPlacementOptions(float gap, float viewportPadding, PopoverVerticalPlacement preferredPlacement, float minimumNotchInset)”
C#
public PopoverPlacementOptions(float gap, float viewportPadding, BitQuirky.Graph.GraphView.Controls.PopoverVerticalPlacement preferredPlacement, float minimumNotchInset)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/PopoverPlacement.cs:37-49

Creates immutable placement options.

PopoverPlacementOptions(float gap, float horizontalViewportPadding, float verticalViewportPadding, PopoverVerticalPlacement preferredPlacement, float minimumNotchInset)

Section titled “PopoverPlacementOptions(float gap, float horizontalViewportPadding, float verticalViewportPadding, PopoverVerticalPlacement preferredPlacement, float minimumNotchInset)”
C#
public PopoverPlacementOptions(float gap, float horizontalViewportPadding, float verticalViewportPadding, BitQuirky.Graph.GraphView.Controls.PopoverVerticalPlacement preferredPlacement, float minimumNotchInset)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/PopoverPlacement.cs:52-66

Creates placement options with independent horizontal and vertical padding.

PopoverPlacementOptions(float gap, float horizontalViewportPadding, float verticalViewportPadding, PopoverVerticalPlacement preferredPlacement, float minimumNotchInset, bool constrainToViewportVertically)

Section titled “PopoverPlacementOptions(float gap, float horizontalViewportPadding, float verticalViewportPadding, PopoverVerticalPlacement preferredPlacement, float minimumNotchInset, bool constrainToViewportVertically)”
C#
public PopoverPlacementOptions(float gap, float horizontalViewportPadding, float verticalViewportPadding, BitQuirky.Graph.GraphView.Controls.PopoverVerticalPlacement preferredPlacement, float minimumNotchInset, bool constrainToViewportVertically)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/PopoverPlacement.cs:69-83

Creates placement options with optional vertical viewport constraint.

Category: Low-level runtime

C#
readonly struct BitQuirky.Graph.GraphView.Controls.PopoverPlacementResult

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/PopoverPlacement.cs:116-142

Immutable output from viewport-constrained popover placement.

Responsibilities:

  • Report final bounds, vertical side, local notch center, and horizontal shift state.

Does NOT:

  • Apply styles or retain references to UI Toolkit elements.

C#
public UnityEngine.Rect Bounds { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/PopoverPlacement.cs:132

Gets the resolved popover bounds in viewport-local coordinates.

C#
public float NotchCenter { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/PopoverPlacement.cs:138

Gets the notch center relative to the popover left edge.

C#
public BitQuirky.Graph.GraphView.Controls.PopoverVerticalPlacement Placement { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/PopoverPlacement.cs:135

Gets the resolved vertical side.

C#
public bool WasHorizontallyShifted { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/PopoverPlacement.cs:141

Gets whether horizontal viewport clamping moved the popover.

PopoverPlacementResult(Rect bounds, PopoverVerticalPlacement placement, float notchCenter, bool wasHorizontallyShifted)

Section titled “PopoverPlacementResult(Rect bounds, PopoverVerticalPlacement placement, float notchCenter, bool wasHorizontallyShifted)”
C#
public PopoverPlacementResult(UnityEngine.Rect bounds, BitQuirky.Graph.GraphView.Controls.PopoverVerticalPlacement placement, float notchCenter, bool wasHorizontallyShifted)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/PopoverPlacement.cs:119-129

Creates an immutable placement result.

Category: Low-level runtime

C#
enum BitQuirky.Graph.GraphView.Controls.PopoverVerticalPlacement

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/PopoverPlacement.cs:16-23

Underlying type: int

Identifies the resolved vertical side of an anchored popover.

Responsibilities:

  • Describe whether the popover is placed below or above its anchor.

Does NOT:

  • Carry editor-specific meaning or mutate visual elements.

C#
Above = 1

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/PopoverPlacement.cs:22

Places the popover above its anchor.

C#
Below = 0

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/PopoverPlacement.cs:19

Places the popover below its anchor.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.ProgressStrip

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ProgressStrip.cs:24-115

Inherits: VisualElement

Shared determinate progress strip for long-running work across Bit Quirky graph tools: an optional muted counted line above a thin track whose fill advances with the completed share of a known total.

Responsibilities:

  • Draw one shared USS contract for the label, track, and fill.
  • Convert a completed share into the fill’s width, clamped to the track.
  • Compose the canonical counted readout (“scanning · 1,240 of 3,000 graphs”).

Does NOT:

  • Run, observe, cancel, or time the work it reports.
  • Invent progress: a caller with no known total has nothing determinate to draw and should not mount this strip.

C#
public UnityEngine.UIElements.VisualElement Fill { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ProgressStrip.cs:65

Gets the fill, for hosts that add surface-specific classes.

C#
public UnityEngine.UIElements.VisualElement Track { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ProgressStrip.cs:62

Gets the track, for hosts that add surface-specific classes.

C#
public const string FillUssClassName = "bq-progress-strip__fill"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ProgressStrip.cs:36

USS class applied to the filled portion of the track.

C#
public const string LabelUssClassName = "bq-progress-strip__label"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ProgressStrip.cs:30

USS class applied to the optional counted readout line.

C#
public const string TrackUssClassName = "bq-progress-strip__track"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ProgressStrip.cs:33

USS class applied to the track the fill advances across.

C#
public const string UssClassName = "bq-progress-strip"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ProgressStrip.cs:27

Shared USS class applied to every progress strip.

C#
public ProgressStrip()

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ProgressStrip.cs:41-59

Creates a strip at zero progress with its readout line hidden.

CountedText(string verb, int processed, int total, string singular, string plural)

Section titled “CountedText(string verb, int processed, int total, string singular, string plural)”
C#
public static string CountedText(string verb, int processed, int total, string singular, string plural)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ProgressStrip.cs:104-114

Returns the shared counted readout: “verb · 1,240 of 3,000 things”.

SetCountedProgress(string verb, int processed, int total, string singular, string plural)

Section titled “SetCountedProgress(string verb, int processed, int total, string singular, string plural)”
C#
public void SetCountedProgress(string verb, int processed, int total, string singular, string plural)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ProgressStrip.cs:92-101

Sets the readout line and fill together from a counted total, in the shared grammar: “verb · 1,240 of 3,000 things”.

C#
public void SetFraction(float fraction)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ProgressStrip.cs:77-80

Advances the fill to the supplied completed share, clamped.

C#
public void SetLabel(string text)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ProgressStrip.cs:68-74

Sets the readout line; null or empty hides it.

C#
public void SetProgress(int processed, int total)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ProgressStrip.cs:83-86

Advances the fill to the completed share of a counted total.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.PulseScheduler

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/PulseScheduler.cs:57-159

Drives the running-state “subtle pulse” motion that the design system specifies for the active node + status pip . USS cannot animate properties on its own in Unity 6 yet, so we install anIVisualElementScheduledItemon a root element and toggle theed-pulse-onclass on every descendant that carries theed-pulsemarker class. The CSS rule in Effects.uss declares the on/off opacities; this scheduler only flips classes.

Responsibilities:

  • Schedule a periodic class toggle at the cadence supplied by the consumer (which they MUST source from the design-system --bq-pulse-period-ms token).
  • Toggle the class only on descendants of the supplied root, so one scheduler per editor window is enough.
  • Hand back anIDisposableso the consumer can stop the scheduler when the window closes.

Does NOT:

  • Move layout. The class toggle only changes opacity; layout stays untouched per .
  • Subscribe to USS variable changes. Consumers re-create the scheduler if they want a different cadence.

Remarks

Round Trip: adopt this helper directly. The cadence is the shared --bq-pulse-period-ms token; Round Trip should source it from the design-system stylesheet so behavior is consistent between editors.

Start(VisualElement root, int periodMilliseconds)

Section titled “Start(VisualElement root, int periodMilliseconds)”
C#
public static System.IDisposable Start(UnityEngine.UIElements.VisualElement root, int periodMilliseconds)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/PulseScheduler.cs:73-80

Start a pulse scheduler that toggles theed-pulse-on class on every element underrootthat carries theed-pulseclass.

Parameters

  • root: The element whose descendants are scanned each tick.
  • periodMilliseconds: Total period of one on/off cycle in milliseconds (source: the design-system --bq-pulse-period-ms token).

Returns

An IDisposable that stops the scheduler. Dispose it when the host window closes.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.RailResizeHandle

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RailResizeHandle.cs:23-265

Inherits: VisualElement

Shared draggable strip for resizing a graph-tool pane: a side rail’s vertical seam or a docked panel’s horizontal seam.

Responsibilities:

  • Present one tokenized hover and active highlight plus the axis-matching resize cursor.
  • Capture one pointer drag and translate it into a clamped pane size for any dock side.
  • Separate live size updates from the consumer-owned committed size and persistence.

Does NOT:

  • Own a pane’s layout, collapsed state, size persistence, or content.
  • Assume whether the consumer pane is a flex pane or an overlay.

C#
public const float ThicknessPx = 6

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RailResizeHandle.cs:46

Shared default thickness of the draggable seam strip in points, matching the .ed-rail-resize-handlerule. A consumer stylesheet may widen the seam; the hover highlight and the resize cursor both follow the measured bounds, not this constant.

RailResizeHandle(RailResizeHandle.GrowDirection growDirection, float minimumSize, float maximumSize, Func<float> currentSize, Action<float> onResize, Action<float> onResizeEnd, Action onResizeBegin, Func<bool> canResize)

Section titled “RailResizeHandle(RailResizeHandle.GrowDirection growDirection, float minimumSize, float maximumSize, Func<float> currentSize, Action<float> onResize, Action<float> onResizeEnd, Action onResizeBegin, Func<bool> canResize)”
C#
public RailResizeHandle(BitQuirky.Graph.GraphView.Controls.RailResizeHandle.GrowDirection growDirection, float minimumSize, float maximumSize, System.Func<float> currentSize, System.Action<float> onResize, System.Action<float> onResizeEnd, System.Action onResizeBegin = null, System.Func<bool> canResize = null)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RailResizeHandle.cs:73-149

Creates a resize strip whose host supplies all pane-specific size behavior.

Exceptions

  • ArgumentOutOfRangeException: minimumSize is not greater than zero, or maximumSize is below it. A pane cannot be resized between bounds that describe no size.

ResolveSize(float startSize, float pointerDelta, float minimumSize, float maximumSize, RailResizeHandle.GrowDirection growDirection)

Section titled “ResolveSize(float startSize, float pointerDelta, float minimumSize, float maximumSize, RailResizeHandle.GrowDirection growDirection)”
C#
public static float ResolveSize(float startSize, float pointerDelta, float minimumSize, float maximumSize, BitQuirky.Graph.GraphView.Controls.RailResizeHandle.GrowDirection growDirection)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RailResizeHandle.cs:161-173

Resolves one pointer delta along the seam’s resize axis into the clamped size for any dock side. Horizontal directions read an x delta; vertical directions read a y delta.

C#
public void SetHighlighted(bool highlighted)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RailResizeHandle.cs:152-155

Sets the shared blue hover or active-drag treatment.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.RailSection

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RailSection.cs:53-263

Inherits: VisualElement

Shared left/right-rail group container - heading strip + body slot. Renders the flat heading chrome described by the BQ design tokens (--bq-rail-heading-* and --bq-rail-subheading-*) and supports two interaction modes:

  • Collapsible- header click toggles the body and the chevron flips between ▾ and ▸.
  • Always-open (default) - chevron is hidden and clicks on the header do nothing. Consumers wrap theBodyin a ScrollView when the contents need to scroll.

Two header tiers are available:

  • Main (default) - used for top-level groups like Graphs, Methods, Variables. Bold mixed-case label, 1 px bottom border.
  • Sub (subHeader: true) - used for nested groups like PUBLIC / PRIVATE / INTERNAL inside Methods. Narrower strip, uppercase text, no bottom border.

A 1 px separator stripe paints above the header so adjacent sections divide cleanly. Consumers setShowSeparator tofalseon the first section of a rail.

C#
public UnityEngine.UIElements.VisualElement Body { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RailSection.cs:115

Slot consumers populate with rows / lists / scroll views.

C#
public int? Count { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RailSection.cs:91-107

Optional count badge shown next to the title. Set to null to hide the badge.

C#
public bool IsCollapsible { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RailSection.cs:130

Whether the header offers a collapse affordance; a section that is not collapsible stays open.

C#
public bool IsExpanded { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RailSection.cs:123-127

Whether the body is showing. Setting it applies the state silently, without raising OnExpandedChanged, so a host can restore a remembered state without hearing its own restore back. Meaningless whileIsCollapsibleis false, since such a section stays open.

C#
public bool ShowSeparator { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RailSection.cs:135-139

Toggle the 2 px separator above the header. Defaults totrue; set to falseon the first section of a rail so it doesn’t paint a stray stripe at the rail edge.

C#
public string Title { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RailSection.cs:79-87

The heading text shown in the header row. Setting null stores an empty string, which leaves the header in place with no caption.

C#
public UnityEngine.UIElements.VisualElement Trailing { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RailSection.cs:111

Trailing slot - useful for “+” buttons, filter pills, status summary cells, etc.

C#
public event System.Action<bool> OnExpandedChanged

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RailSection.cs:73

Raised when the section expands or collapses. Only fires for collapsible sections; always-open sections never change state.

RailSection(string title, bool collapsible, bool subHeader, int? count, bool startsExpanded, bool showSeparator)

Section titled “RailSection(string title, bool collapsible, bool subHeader, int? count, bool startsExpanded, bool showSeparator)”
C#
public RailSection(string title = "", bool collapsible = false, bool subHeader = false, int? count = null, bool startsExpanded = true, bool showSeparator = true)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RailSection.cs:150-214

Builds the section.titleis the heading; collapsibledecides whether the header offers a collapse affordance at all, defaulting to false for an always-open section;subHeader asks for the quieter nested-heading treatment;countis the optional badge beside the title with null showing no badge;startsExpandedis the initial body state; andshowSeparatordraws the rule above the header - pass false on a rail’s first section so it does not paint a stripe at the edge.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.RecentTintHelper

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RecentTintHelper.cs:56-145

Applies the design-system recent-change tint to a target element and schedules its removal after the --bq-tint-decay-mswindow. Also manages the persistent “changed-since-open” marker class so the consumer can keep a visible cue until the user dismisses it .

Two USS classes are involved: -.ed-tint-recent: short-lived; removed by this helper on the design-system decay schedule. -.ed-changed-since-open: persistent until the consumer callsClearChangedSinceOpen.

Responsibilities:

  • Toggle classes only. The visual treatment lives entirely in the design-system stylesheets.
  • Cancel any in-flight decay timer when the same element is marked again so the visible tint covers the full decay window from the latest change.

Does NOT:

  • Track which value changed. The consumer decides that.
  • Snapshot any state across editor sessions; persistence of the “changed-since-open” flag is the consumer’s job (the helper just toggles the class while the consumer owns the flag set).

Remarks

Round Trip: adopt this helper directly. The class names are part of the design-system contract - do not rename them in a Round Trip override.

C#
public const string PersistentClass = "ed-changed-since-open"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RecentTintHelper.cs:63

USS class marking a value as changed at some point in this session; it outlives the tint and is cleared only by the host.

C#
public const string RecentClass = "ed-tint-recent"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RecentTintHelper.cs:61

USS class carrying the short-lived tint that marks a value as just changed.

ClearChangedSinceOpen(VisualElement target)

Section titled “ClearChangedSinceOpen(VisualElement target)”
C#
public static void ClearChangedSinceOpen(UnityEngine.UIElements.VisualElement target)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RecentTintHelper.cs:126-133

Remove the persistent.ed-changed-since-openmarker fromtarget. The consumer calls this after surfacing the change to the user (e.g., when the user scrolls the row into view, clicks acknowledge, or the panel detaches).

C#
public static void MarkRecentChange(UnityEngine.UIElements.VisualElement target)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RecentTintHelper.cs:114-117

Convenience overload that reads the decay window from the graph-library design-system constant TintDecayMs.

MarkRecentChange(VisualElement target, int decayMilliseconds)

Section titled “MarkRecentChange(VisualElement target, int decayMilliseconds)”
C#
public static void MarkRecentChange(UnityEngine.UIElements.VisualElement target, int decayMilliseconds)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RecentTintHelper.cs:75-107

Tagtargetwith the recent-change tint class and schedule its removal after decayMillisecondsms. Also adds the persistent “changed-since-open” class so the visible cue stays after the short decay . The persistent class must be cleared explicitly viaClearChangedSinceOpen.

Re-marking the same element resets the decay timer.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.RenameableTitle

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RenameableTitle.cs:29-676

Inherits: VisualElement

The shared in-place identity editor used by graph-product headers. Rest, hover, focus, and editing use one geometry-stable box; discovery and lock explanations use native tooltips, while active-edit instructions are published to the owning host.

Responsibilities:

  • Disclose the box on hover and keyboard focus; open the editor on click, F2, or Enter with the whole name selected.
  • Commit on Enter, a pointer press outside the box, or focus leaving the field; cancel on Escape, restoring the exact prior name with no write.
  • Keep a refused draft available for repair and show its validation failure in an automatically positioned, noninteractive callout adjacent to the field.
  • Publish editing instructions as owner-scoped contextual help and release them when the edit ends, its context changes, or the control detaches.

Does NOT:

  • Execute an edit, know a node id, decide which selections are renameable, or reserve a second header row; the host supplies context and runs the command on OnCommitted.

C#
public UnityEngine.UIElements.VisualElement Box { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RenameableTitle.cs:266

The focusable name box, the rail’s first keyboard stop while editable.

C#
public UnityEngine.UIElements.TextField NameEditor { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RenameableTitle.cs:263

The in-place editor; hosts apply the same typography as the label.

C#
public UnityEngine.UIElements.Label NameLabel { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RenameableTitle.cs:260

The rest-state name label; hosts apply their own typography classes.

C#
public System.Func<string, string> Refusal { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RenameableTitle.cs:100

Returns the reason a candidate name is refused, or null to accept it. The stored name stays intact and the typed text is kept verbatim for repair.

C#
public string Text { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RenameableTitle.cs:269-277

Gets or sets the displayed name without touching an active edit.

C#
public event System.Action<string> OnCommitted

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RenameableTitle.cs:94

Raised once per accepted commit with the trimmed name, including Enter that accepts the unchanged value.

C#
public const string BoxClass = "ed-rename-title__box"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RenameableTitle.cs:34

USS class on the box holding the name, which swaps between the label and the editor.

C#
public const string DisclosedClass = "ed-rename-title--disclosed"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RenameableTitle.cs:40

USS class on the root while the control is showing that the name can be edited.

C#
public const string EditingClass = "ed-rename-title--editing"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RenameableTitle.cs:42

USS class on the root while an edit is open.

C#
public const string EditorClass = "ed-rename-title__editor"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RenameableTitle.cs:38

USS class on the text field shown while editing.

C#
public const string InvalidClass = "ed-rename-title--invalid"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RenameableTitle.cs:46

USS class on the root while the typed name has been refused.

C#
public const string LockedClass = "ed-rename-title--locked"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RenameableTitle.cs:44

USS class on the root while the name cannot be edited.

C#
public const string NameClass = "ed-rename-title__name"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RenameableTitle.cs:36

USS class on the name label shown at rest.

C#
public const string RootClass = "ed-rename-title"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RenameableTitle.cs:32

USS class on the control’s root.

C#
public const string ValidationCalloutClass = "ed-rename-title__validation-callout"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RenameableTitle.cs:48

USS class on the callout carrying the refusal.

C#
public const string ValidationMessageClass = "ed-rename-title__validation-callout-message"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RenameableTitle.cs:50

USS class on the message inside the refusal callout.

RenameableTitle(string controlName, VisualElement validationBoundary)

Section titled “RenameableTitle(string controlName, VisualElement validationBoundary)”
C#
public RenameableTitle(string controlName, UnityEngine.UIElements.VisualElement validationBoundary)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RenameableTitle.cs:103-257

Creates an editor whose validation overlay avoids the supplied identity header and metadata.

C#
public void BeginEdit()

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RenameableTitle.cs:319-350

Opens the editable title and selects its complete value. Creation flows call this after mounting a new object so typing starts immediately; locked or active editors are left unchanged.

SetContext(string selectionKey, string text, bool editable, string lockReason)

Section titled “SetContext(string selectionKey, string text, bool editable, string lockReason)”
C#
public void SetContext(string selectionKey, string text, bool editable, string lockReason)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/RenameableTitle.cs:285-312

Presents one selection. A changedselectionKeyabandons any in-flight edit; an unchanged key keeps an active draft untouched, so an autosave refresh never stomps typing. A locked title exposeslockReasonas its native tooltip.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.ResizableScopedPanel

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ResizableScopedPanel.cs:28-561

Inherits: VisualElement

Shared bottom-docked rail band for graph tools: a scope caption over one independently scrolling body, resized from the shared seam along its top edge. The seam reuses RailResizeHandle, so its hover, drag highlight, and cursor match the rail’s own resize seam; it is also a keyboard focus stop (Up and Down step the height, Home restores the resting share, focus arms the grip), and a centered grip pill on the band edge advertises the affordance before any hover.

Responsibilities:

  • Render the seam, the grip, the scope band - the caption plus its quieter qualifier - and the scrollingBodyslot.
  • Translate the seam drag or keyboard step into a clamped explicit panel height, live and committed, bounded by the panel’s floor and the room its sibling above must keep.

Does NOT:

  • Persist the committed height; consumers store it and restore via ApplyHeight, and forget it on RestingHeightRestored.
  • Decide the panel’s resting share of the rail; consumer stylesheets own that.

C#
public UnityEngine.UIElements.ScrollView Body { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ResizableScopedPanel.cs:211

Gets the independently scrolling content slot.

C#
public BitQuirky.Graph.GraphView.Controls.ResizableScopedPanel.HeightMode Mode { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ResizableScopedPanel.cs:214

Gets the panel’s current custom, collapsed, or maximized height behavior.

C#
public UnityEngine.UIElements.Label Scope { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ResizableScopedPanel.cs:203

Gets the scope caption, for consumer naming and styling.

C#
public UnityEngine.UIElements.VisualElement ScopeBand { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ResizableScopedPanel.cs:200

Gets the scope band hosting the caption and its qualifier.

C#
public UnityEngine.UIElements.Label ScopeQualifier { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ResizableScopedPanel.cs:208

Gets the quieter trailing scope qualifier, hidden while it carries no text.

C#
public event System.Action<float> HeightCommitted

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ResizableScopedPanel.cs:69

Raised with the committed height when a seam drag or keyboard step completes.

C#
public event System.Action<BitQuirky.Graph.GraphView.Controls.ResizableScopedPanel.HeightMode> ModeChanged

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ResizableScopedPanel.cs:78

Raised after the panel changes between custom, collapsed, and maximized height.

C#
public event System.Action ResizeBegan

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ResizableScopedPanel.cs:72

Raised when a seam drag begins, before the first live height lands.

C#
public event System.Action RestingHeightRestored

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ResizableScopedPanel.cs:75

Raised when Home on the seam returns the panel to its resting share.

C#
public const float KeyboardStepPx = 16

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ResizableScopedPanel.cs:53

One keyboard step of the seam, in points.

ResizableScopedPanel(string scopeText, float minimumHeight, float maximumHeight, string scopeQualifierText, float siblingFloor, Func<float> retainedSiblingHeight)

Section titled “ResizableScopedPanel(string scopeText, float minimumHeight, float maximumHeight, string scopeQualifierText, float siblingFloor, Func<float> retainedSiblingHeight)”
C#
public ResizableScopedPanel(string scopeText, float minimumHeight, float maximumHeight, string scopeQualifierText = null, float siblingFloor = 0, System.Func<float> retainedSiblingHeight = null)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ResizableScopedPanel.cs:88-197

Creates the panel with its seam, grip, scope band, and scrolling body. WithoutretainedSiblingHeight, minimumHeight, maximumHeight, and siblingFloorretain their fixed-bound behavior. Supplying it opts into measured bounds: the collapsed floor is the scope band plus this element’s borders, and the maximum is the parent’s content height minus the reported height that its other children must retain.

C#
public float ApplyHeight(float height)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ResizableScopedPanel.cs:223-226

Applies one explicit custom height. Fixed-bound panels use their configured minimum, maximum, and sibling floor. Measured-bound panels use the current scope-band floor and available parent content, retaining the applied split as the height restored after either endpoint. A finite height supplied before layout is retained and constrained when geometry becomes available.

C#
public void Collapse()

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ResizableScopedPanel.cs:229-234

Shows only the scope band at its measured height.

C#
public void Maximize()

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ResizableScopedPanel.cs:241-246

Occupies the parent’s available content height while retaining the callback-reported sibling height. Calling this again remeasures the available height without changing the remembered custom split or raising a duplicate mode event.

C#
public void RestoreHeight()

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ResizableScopedPanel.cs:249-260

Returns from either endpoint to the last explicitly chosen split.

C#
public void RestoreRestingHeight()

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ResizableScopedPanel.cs:267-273

Clears the authored height so the consumer stylesheet’s resting share applies again, forgets the remembered manual split, and raisesRestingHeightRestoredso the consumer forgets its persisted height.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.SearchField

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchField.cs:56-371

Inherits: VisualElement

Compact dark search input shared by the node search palette (Cmd+F) and the Blackboard panel (Cmd+Shift+F). Wraps Unity’s TextFieldwith a leading magnifier glyph slot, a clear-button, and design-system styling.

Responsibilities:

  • Track the current query string and emit OnQueryChangedon every value change.
  • EmitOnDebouncedQueryChangedafter the user pauses typing so expensive consumers can stay off the input path.
  • Toggle a --focused modifier class so USS can style focus highlight without managing focus state in consumers.
  • Expose a Focus helper so a Cmd+F shortcut handler can move keyboard focus to the input directly.

Does NOT:

  • Run the search itself. The consumer subscribes to OnQueryChangedor OnDebouncedQueryChangedand decides what to filter.
  • Encode any specific result-list behavior; that lives in the consumer (Popover-hosted result list for node search, inline filter for Blackboard rows).

Remarks

Round Trip: replace any local search input with this control.

C#
public long DebounceDelayMilliseconds { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchField.cs:129-133

Delay beforeOnDebouncedQueryChangedfires after the most recent text edit.

C#
public string Placeholder { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchField.cs:136-144

Placeholder shown when the field is empty and unfocused.

C#
public string Value { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchField.cs:109-123

Current query text. Setting this raises OnQueryChanged.

C#
public event System.Action<string> OnDebouncedQueryChanged

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchField.cs:102

Raised after the user stops changing the query text for DebounceDelayMilliseconds. Consumers that run expensive search work should subscribe here instead of blocking the immediate input event.

C#
public event System.Action<string> OnQueryChanged

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchField.cs:94

Raised when the user changes the query text.

C#
public SearchField(string placeholder = "Search…")

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchField.cs:155-158

Builds the field empty, with the magnifier glyph in place. placeholderis the greyed prompt shown while the field is empty and unfocused, defaulting toDefaultPlaceholder.

C#
public void Focus()

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchField.cs:260-267

Move keyboard focus into the input field. Used by Cmd+F / Cmd+Shift+F shortcut handlers.

RegisterValueChangedCallback(EventCallback<ChangeEvent<string>> cb)

Section titled “RegisterValueChangedCallback(EventCallback<ChangeEvent<string>> cb)”
C#
public void RegisterValueChangedCallback(UnityEngine.UIElements.EventCallback<UnityEngine.UIElements.ChangeEvent<string>> cb)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchField.cs:274-277

Convenience for callers that want to react with both the old and new value (mirroring the underlying TextFieldcallback shape).

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.SearchList

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:374-1643

Inherits: VisualElement

The searchable, sectioned chooser shared by every “pick one of many” surface: exception types on a try/catch, categories, the drag-from-pin member menu, class and object pickers.

What it owns:the search box, section rendering, filtering, independent committed and keyboard-active row state, keyboard navigation, viewport reveal, and chosen/cancelled events. That is the part which is identical on every surface, and which separate implementations had each re-derived.

What it deliberately does not own:scopes, recents, member counts, truncation. Those are not universal. A type picker filters by assembly source; a pin-drop menu has no such concept. A control that owned them would force every caller to describe itself as “sources with counts” to use a list box. So hosts group their own rows, decide their own truncation, and pass the footer text they want; this renders it.

Built on the existing shared primitives rather than beside them:SearchField supplies the input,SelectableListRowowns row state, and SelectableListSelectionowns initial activity and reveal timing. The chrome around this control (scrim, card, drop shadow) belongs to the host’s popover, so this is a plain VisualElementthat can be placed in one.

C#
public string CommittedItemId { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:667-684

Gets or sets the stable identity already committed by the owning value control. This marker is independent fromSelectedItem, which remains the keyboard-active row. Null means the list is an action or creation menu with no committed value.

C#
public bool DetailsOnHover { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:780-784

Keeps each row’s secondary text (its detail line and trailing label) out of sight until the row is hovered or selected.

For a list you SCAN rather than study: in the action menu the names are the content and the types are reference material, so showing every type at rest turns a short list into a wall. The selected row shows its detail too, or the keyboard would never reach the information.

Off by default, because a type picker’s namespace is what tells two same-named types apart and hiding it there would be hiding the answer.

C#
public string EmptyDetailText { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:790

Second line of the empty state, explaining what to do about it.

C#
public string EmptyText { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:787

Text shown in place of the list when nothing matches.

C#
public bool FilterInternally { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:648

Whether this control filters the rows it is given. True by default.

Set false when the HOST already searched: a project-wide type search decides what matched by its own rules, and re-filtering its answers here would hide results this control’s simpler rule happens to disagree with. Match highlighting still applies, so a host-filtered list still shows where each row matched.

C#
public BitQuirky.Graph.GraphView.Controls.SearchListAction FocusedAction { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:889-902

The action the keyboard is on within the selected row, or null when it has none.

C#
public string Query { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:651

The current search text.

C#
public long SearchDebounceMilliseconds { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:633-637

How long the search box settles before DebouncedQueryChanged fires.

C#
public BitQuirky.Graph.GraphView.Controls.SearchListItem SelectedItem { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:660-661

The highlighted row, or null when nothing matches.

C#
public System.Collections.Generic.IReadOnlyList<BitQuirky.Graph.GraphView.Controls.SearchListItem> VisibleItems { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:687

Visible rows in display order, headers excluded.

C#
public event System.Action<BitQuirky.Graph.GraphView.Controls.SearchListItem, BitQuirky.Graph.GraphView.Controls.SearchListAction> ActionChosen

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:611

Raised when one of a row’s action buttons is pressed.

C#
public event System.Action Cancelled

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:614

Raised on Escape. The host owns whatever dismissal means for its surface.

C#
public event System.Action<string> DebouncedQueryChanged

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:626-630

Raised after the search box settles, for a host whose answer is expensive: an off-thread project search wants the pause, whileQueryChangedfires on every keystroke.

C#
public event System.Action<BitQuirky.Graph.GraphView.Controls.SearchListItem> ItemChosen

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:608

Raised when a row is chosen, by click or by Return. Never for a row carrying actions.

C#
public event System.Action<string> QueryChanged

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:620

Raised on every keystroke, for a host that would rather re-supply rows than have this filter the ones it already gave. Both are supported; a host that ignores this still gets filtering.

C#
public const string ContextUssClassName = "ed-searchlist__context"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:387

USS class on the header’s right-hand line, which states the constraint on the choice.

C#
public const string CountUssClassName = "ed-searchlist__count"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:391

USS class on the match count beside the search box.

C#
public const string DetailsOnHoverUssClassName = "ed-searchlist--hover-details"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:379

USS class on the root while DetailsOnHover is on, which holds each row’s detail line back until the row is pointed at.

C#
public const string EmptyDetailUssClassName = "ed-searchlist__empty-detail"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:472

USS class on the empty state’s second line.

C#
public const string EmptyUssClassName = "ed-searchlist__empty"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:470

USS class on the message shown in place of the list when nothing matches.

C#
public const string EyebrowUssClassName = "ed-searchlist__eyebrow"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:383

USS class on the header’s small caption line.

C#
public const string FooterUssClassName = "ed-searchlist__footer"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:474

USS class on the footer line.

C#
public const string HeaderUssClassName = "ed-searchlist__header"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:381

USS class on the header block above the search box.

C#
public const string LimitHintUssClassName = "ed-searchlist__limit-hint"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:468

USS class on the line between the list and the footer that says what was left out.

C#
public const int NestIndentPixels = 12

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:424

How far one level of nesting shifts a heading. Applied per depth in code rather than as a class per level, because the depth is data: a class per level caps the tree at however many classes somebody wrote.

C#
public const string RowActionDisabledUssClassName = "ed-searchlist__row-action--disabled"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:450

USS class on an action button that cannot be pressed.

C#
public const string RowActionFocusedUssClassName = "ed-searchlist__row-action--focused"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:452

USS class on the action button the keyboard is currently on.

C#
public const string RowActionUssClassName = "ed-searchlist__row-action"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:448

USS class on one action button.

C#
public const string RowActionsUssClassName = "ed-searchlist__row-actions"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:446

USS class on the strip of action buttons at the right of a row.

C#
public const string RowBadgeUssClassName = "ed-searchlist__row-badge"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:393

USS class on a row’s kind badge.

C#
public const string RowCompactUssClassName = "ed-searchlist__row--compact"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:417

A row drawn at tree density rather than list density.

C#
public const string RowDetailUssClassName = "ed-searchlist__row-detail"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:444

USS class on a row’s secondary line.

C#
public const string RowDisabledUssClassName = "bq-selectable-list-row--disabled"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:432

USS class on a row that cannot be chosen.

C#
public const string RowDotUssClassName = "ed-searchlist__row-dot"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:454

USS class on a row’s color dot.

C#
public const string RowIdentityUssClassName = "ed-searchlist__row-identity"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:434

USS class on the part of a row holding the badge, dot, and name.

C#
public const string RowLabelUssClassName = "ed-searchlist__row-label"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:442

USS class on a row’s primary text.

C#
public const string RowMatchUssClassName = "ed-searchlist__row-match"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:440

USS class on the run of a row’s label that matched the query.

C#
public const string RowMetadataUssClassName = "ed-searchlist__row-metadata"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:436

USS class on the part of a row holding its trailing metadata.

C#
public const string RowNameLineUssClassName = "ed-searchlist__row-name-line"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:438

USS class on the line carrying a row’s label.

C#
public const string RowNestedUssClassName = "ed-searchlist__row--nested"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:411

A row inside a nested group, indented to line up under its heading.

C#
public const string RowSelectedUssClassName = "bq-selectable-list-row--keyboard-active"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:430

USS class on the row the keyboard is currently on.

C#
public const string RowTrailingDetailUssClassName = "ed-searchlist__row-trailing-detail"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:458

USS class on a row’s right-aligned second line.

C#
public const string RowTrailingUssClassName = "ed-searchlist__row-trailing"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:456

USS class on a row’s right-aligned tag.

C#
public const string RowUssClassName = "ed-searchlist__row"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:428

USS class on a list row.

C#
public const string ScopeActiveUssClassName = "ed-searchlist__scope--active"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:464

USS class on the scope pill currently in force.

C#
public const string ScopeUssClassName = "ed-searchlist__scope"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:462

USS class on one scope pill.

C#
public const string ScopesUssClassName = "ed-searchlist__scopes"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:460

USS class on the strip of scope pills.

C#
public const string ScrollUssClassName = "ed-searchlist__scroll"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:395

USS class on the scrolling list body.

C#
public const string SearchRowUssClassName = "ed-searchlist__search-row"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:389

USS class on the row holding the search box and the match count.

C#
public const string SectionCaretUssClassName = "ed-searchlist__section-caret"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:400

The caret on a group heading, which states which way the group will go.

C#
public const string SectionCollapsedUssClassName = "ed-searchlist__section--collapsed"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:403

On a heading whose group is closed, so the whole row can dim as one.

C#
public const string SectionCompactUssClassName = "ed-searchlist__section--compact"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:414

A heading drawn at tree density rather than list density.

C#
public const string SectionHeaderUssClassName = "ed-searchlist__section"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:397

USS class on a group heading.

C#
public const string SectionNestedUssClassName = "ed-searchlist__section--nested"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:408

A heading below the top level of a tree, indented and drawn a shade quieter.

C#
public const string SectionNoteUssClassName = "ed-searchlist__section-note"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:426

USS class on a group heading’s explanatory note.

C#
public const string SectionTitleUssClassName = "ed-searchlist__section-title"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:405

USS class on the title text inside a group heading.

C#
public const string StickyHeaderUssClassName = "ed-searchlist__sticky-header"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:466

USS class on the pinned heading that names the group being scrolled through.

C#
public const string TitleUssClassName = "ed-searchlist__title"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:385

USS class on the header line naming what is being chosen.

C#
public const string UssClassName = "ed-searchlist"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:377

USS class on the control’s root.

C#
public SearchList(string placeholder = "search")

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:531-605

Builds the list empty and focusable, with its caption header hidden until a host sets one.placeholderis the prompt in the search box.

C#
public bool ChooseSelection()

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:864-886

Commits the highlight: the focused ACTION when the row carries any, the row itself otherwise. False when there is nothing to commit.

C#
public void Focus()

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:797

Puts the caret in the search box, which is where a chooser should open. Hides Focusso focusing the control never lands on the container itself.

C#
public bool MoveActionColumn(int delta)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:909-933

Moves the keyboard across the selected row’s action buttons, skipping ones that cannot be pressed. A row offering “get” and “set” needs left/right as much as the list needs up/down: without it the keyboard can reach the row but never the thing you came to do.

C#
public bool MoveSelection(int delta)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:804-845

Moves the selection bydeltarows, skipping rows that cannot be chosen. Clamped rather than wrapped: arriving back at the top after passing the last row reads as a lost keypress.

C#
public void SetCount(string text)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:725-729

The number beside the search box. The TEXT is the host’s, for the same reason the footer’s is: what is being counted, and against what total, is the host’s rule.

C#
public void SetFooter(string text)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:700-704

Sets the line under the list, such as “Showing the top 200 of 620”. The TEXT is the host’s, because what has been truncated and why is the host’s rule; passing null hides the row.

SetHeader(string eyebrow, string title, string context)

Section titled “SetHeader(string eyebrow, string title, string context)”
C#
public void SetHeader(string eyebrow, string title, string context = null)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:710-719

Captions the list: an eyebrow verb, what is being chosen, and the constraint on the right (“CHOOSE” / “an exception type” / “SYSTEM TYPES”). Passing null for everything hides the row.

C#
public void SetLimitHint(string text)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:761-765

The line above the footer saying what was left out (“Showing the top 200 of 620”). The host’s sentence, because truncation is the host’s rule; null hides it.

C#
public void SetQuery(string query)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:657

Sets the search text programmatically, for a caller supplying a query in one go rather than typing it. Rebuilds and re-ranks exactly as a keystroke would.

SetScopes(IReadOnlyList<string> labels, string active, Action<string> onChanged)

Section titled “SetScopes(IReadOnlyList<string> labels, string active, Action<string> onChanged)”
C#
public void SetScopes(System.Collections.Generic.IReadOnlyList<string> labels, string active, System.Action<string> onChanged)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:736-755

Shows the scope pills.labelsare the host’s words, and it is told which one was picked; the control never decides what a scope selects. Passing nothing hides the row, which is what a surface with no scopes (a pin-drop menu) wants.

SetSections(IReadOnlyList<SearchListSection> sections)

Section titled “SetSections(IReadOnlyList<SearchListSection> sections)”
C#
public void SetSections(System.Collections.Generic.IReadOnlyList<BitQuirky.Graph.GraphView.Controls.SearchListSection> sections)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:690-694

Replaces the sections. The selection survives when the same item id is still visible.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.SearchListAction

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:134-163

One button on the right of a row, for a list whose rows offer more than one thing to do with the same subject: a variable that can be read or written, a member with get and set.

Choosing the ROW and choosing an ACTION are different events. A row with actions raises ActionChosen and never ItemChosen, because “which one did they mean” has an answer only when the row offers exactly one thing.

C#
public string DisabledReason { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:162

Tooltip explaining why a disabled action cannot be pressed; null leaves it unexplained.

C#
public bool Enabled { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:159

False draws the button dimmed and refuses presses.

C#
public string Id { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:153

The host’s identity for this action, handed back on choice.

C#
public string Label { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:156

The button text.

SearchListAction(string id, string label, bool enabled, string disabledReason)

Section titled “SearchListAction(string id, string label, bool enabled, string disabledReason)”
C#
public SearchListAction(string id, string label, bool enabled = true, string disabledReason = null)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:144-150

Parameters

  • id: The host’s identity for this action, handed back on choice.
  • label: Button text, such as get.
  • enabled: False draws it dimmed and unclickable.
  • disabledReason: Why a disabled action cannot be pressed (“read only”), shown as its tooltip. On hover rather than always: a permanent subtitle under every read-only button is noise on a list you scan, and the question only gets asked of the one button you are pointing at.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.SearchListItem

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:30-123

One selectable row in aSearchList.

C#
public System.Collections.Generic.IReadOnlyList<BitQuirky.Graph.GraphView.Controls.SearchListAction> Actions { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:110

Buttons on the right of the row. Empty means the row itself is the only choice.

C#
public string Badge { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:104

Kind marker drawn at the head of the row, or null for no badge.

C#
public string BadgeKind { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:107

Which shared kind colour the badge takes, or null for the neutral one.

C#
public string Detail { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:95

The secondary line, such as a namespace or a path; searched alongside the label. Null draws no second line.

C#
public UnityEngine.Color? DotColor { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:116

A colour dot at the head of the row, for a list whose subjects carry a type colour (a variable list). The COLOUR is the host’s: only it knows what its types mean.

C#
public bool Enabled { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:119

False draws the row dimmed and refuses to choose it.

C#
public string Id { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:89

The host’s identity for this row, handed back on choice and used to keep keyboard activity across re-supplied sections.

C#
public string Label { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:92

The primary text of the row, and the first thing searched.

C#
public object Payload { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:122

The host’s own object, carried through untouched and handed back on choice.

C#
public string TrailingDetail { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:101

Right-aligned second line, such as a count. Null draws nothing.

C#
public string TrailingLabel { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:98

Right-aligned tag, never searched. Null draws nothing.

SearchListItem(string id, string label, string detail, string trailingLabel, string trailingDetail, string badge, string badgeKind, IReadOnlyList<SearchListAction> actions, Color? dotColor, bool enabled, object payload)

Section titled “SearchListItem(string id, string label, string detail, string trailingLabel, string trailingDetail, string badge, string badgeKind, IReadOnlyList<SearchListAction> actions, Color? dotColor, bool enabled, object payload)”
C#
public SearchListItem(string id, string label, string detail = null, string trailingLabel = null, string trailingDetail = null, string badge = null, string badgeKind = null, System.Collections.Generic.IReadOnlyList<BitQuirky.Graph.GraphView.Controls.SearchListAction> actions = null, UnityEngine.Color? dotColor = null, bool enabled = true, object payload = null)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:57-86

Parameters

  • id: The host’s identity for this row. Used to preserve keyboard activity across re-supplied sections and to match an optional committed value; the library never parses it.
  • label: The primary text, and the first thing searched.
  • detail: The secondary line, such as a namespace or an asset path. Searched alongside the label, because a type is as often found by where it lives as by what it is called.
  • trailingLabel: Right-aligned tag, such as a source scope. Never searched.
  • trailingDetail: Right-aligned second line, such as a member count.
  • badge: A one or two character kind marker drawn in a bordered square at the head of the row, the way the reference picker marks a class, a struct or an interface. Empty leaves the row without one.
  • badgeKind: Which of the shared kind colours the badge takes:class, struct, interface, abstract, data, asset, object. The host names the kind; the colour belongs to the library, so a struct reads the same in every list.
  • enabled: False for a row that is shown but cannot be chosen.
  • payload: The host’s own object, carried through untouched and handed back on selection so a caller never has to match on a display string.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.SearchListSection

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:179-345

A titled group of rows. Grouping is the HOST’s decision: what counts as “recent”, “current selection” or “components” differs per surface, so the library renders the groups it is given rather than deriving them.

A group can hold ROWS or other GROUPS, and can supply either on demand rather than up front. That exists for one shape the eager form cannot express: a corpus too large to build. A palette of every method a compilation can see runs to tens of thousands of rows, and building them to render a handful of closed headings is work thrown away. A lazy group builds its contents the first time it is actually opened, and states its size on the heading so a closed one still says how much is behind it.

C#
public bool Compact { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:328

Whether this group and its rows draw at tree density rather than list density.

A picker showing a dozen results can afford a 44-pixel row carrying a name, a detail line and a tag. A palette of every method in a project cannot: at that height a screen holds eight entries, and browsing turns into scrolling. Compact is a property of the GROUP rather than of the list, so one surface can hold both a browsable tree and the ordinary rows beside it.

C#
public int DeclaredCount { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:283

What a closed heading reports, or -1 to count the rows for real. A deferred group declares it because counting would mean building the very thing it is deferring.

C#
public bool HasSubsections { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:292

True when this group holds other groups rather than rows.

C#
public bool IsDeferred { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:304

True when this group builds its contents on demand.

The one thing the renderer must know before touching anything: a closed DEFERRED group has to be left entirely alone, while a closed eager one can still be counted for its heading because its rows already exist. Without the distinction, drawing a closed heading resolves the group, which is the whole cost the deferral was there to avoid.

C#
public System.Collections.Generic.IReadOnlyList<BitQuirky.Graph.GraphView.Controls.SearchListItem> Items { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:335-338

The rows, built on first use for a deferred group. Memoized, because the list redraws on every toggle and re-running the provider each time would undo the point of deferring it.

C#
public string Note { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:258

Right-aligned aside on the header row, such as “stays pickable”.

C#
public bool OpensOnSearch { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:289

Whether a query forces this group open. True for a group whose rows already exist, false for a deferred one, where opening everything to search would build the whole corpus at once.

C#
public bool PreserveTitleCase { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:316

Whether the heading keeps the casing it was given instead of being uppercased.

Uppercase suits a CATEGORY the surface invented (“VARIABLES”, “STATEMENTS”): it reads as a label rather than as content. It is wrong for a heading that is a NAME out of the project, where the casing is information the author wrote and uppercasing it destroys: a namespace is UnityEngine.Rendering, never UNITYENGINE.RENDERING.

C#
public bool StartsCollapsed { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:277

Whether this group starts closed, for a list long enough that its later groups push the earlier ones off screen.

A DEFAULT, not a lock: the header toggles either way, and the state the reader chooses wins from then on for as long as the list is open. Nothing is unreachable while collapsed, because typing a query opens every group that matches it.

C#
public System.Collections.Generic.IReadOnlyList<BitQuirky.Graph.GraphView.Controls.SearchListSection> Subsections { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:341-344

The child groups, built on first use and memoized for the same reason.

C#
public string Title { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:255

Shown uppercased, matching the reference board’s section headers.

C#
public string Tooltip { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:265

What the heading says on hover. Falls back toTitle, and is set separately only where the two differ: a heading in a tree draws its own segment while the thing it names is the whole path, and the path is what tells two same-named branches apart.

SearchListSection(string title, IReadOnlyList<SearchListItem> items, string note, bool startsCollapsed)

Section titled “SearchListSection(string title, IReadOnlyList<SearchListItem> items, string note, bool startsCollapsed)”
C#
public SearchListSection(string title, System.Collections.Generic.IReadOnlyList<BitQuirky.Graph.GraphView.Controls.SearchListItem> items, string note = null, bool startsCollapsed = false)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:194-206

Builds an eager group whose rows already exist.titleis the heading and null becomes empty;itemsare the rows, with null treated as none;noteis the optional right-aligned aside on the heading; and startsCollapsedis a default the reader may override, not a lock. Such a group reports its real row count and is forced open by a query, which is what separates it from theDeferred and DeferredGroupforms.

Deferred(string title, Func<IReadOnlyList<SearchListItem>> items, int declaredCount, string note, bool startsCollapsed)

Section titled “Deferred(string title, Func<IReadOnlyList<SearchListItem>> items, int declaredCount, string note, bool startsCollapsed)”
C#
public static BitQuirky.Graph.GraphView.Controls.SearchListSection Deferred(string title, System.Func<System.Collections.Generic.IReadOnlyList<BitQuirky.Graph.GraphView.Controls.SearchListItem>> items, int declaredCount = -1, string note = null, bool startsCollapsed = true)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:234-240

A group whose ROWS are built the first time it is opened.declaredCountis what the closed heading reports, since counting for real would mean building them.

DeferredGroup(string title, Func<IReadOnlyList<SearchListSection>> subsections, int declaredCount, string note, bool startsCollapsed)

Section titled “DeferredGroup(string title, Func<IReadOnlyList<SearchListSection>> subsections, int declaredCount, string note, bool startsCollapsed)”
C#
public static BitQuirky.Graph.GraphView.Controls.SearchListSection DeferredGroup(string title, System.Func<System.Collections.Generic.IReadOnlyList<BitQuirky.Graph.GraphView.Controls.SearchListSection>> subsections, int declaredCount = -1, string note = null, bool startsCollapsed = true)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SearchList.cs:246-252

A group whose CHILD GROUPS are built the first time it is opened, for a tree deeper than one level.declaredCountis what the closed heading reports.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.SectionListPopover

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SectionListPopover.cs:74-258

A chip-anchored popover listing rows under uppercase section headings: the shared shape of Round Trip’s Coverage breakdown and the Behavior Tree Editor’s issues dropdown. Each row carries a status dot, a primary line, optional secondary and trailing detail, and an optional action affordance; activating a row reports its index and closes the popover.

Responsibilities:

  • Render the supplied rows in order, opening one section header whenever the section heading changes, and the consumer’s empty reading when there are no rows.
  • Anchor beneath the clicked element with viewport-constrained placement, dismiss on click-away and Escape throughPopover, and close after activation.

Does NOT:

  • Own product wording, colors beyond the shared tokens, or navigation; consumers skin with an extra class onRoot and handle OnRowActivated.

C#
public string EmptyText { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SectionListPopover.cs:123

Gets or sets the reading shown when the row list is empty.

C#
public bool IsOpen { get; private set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SectionListPopover.cs:126

Gets whether the popover is currently open.

C#
public UnityEngine.UIElements.VisualElement Root { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SectionListPopover.cs:120

Gets the popover element, for stylesheet attachment and skin classes.

C#
public event System.Action<int> OnRowActivated

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SectionListPopover.cs:91-95

Raised with the activated row’s index; the popover then closes.

C#
public SectionListPopover()

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SectionListPopover.cs:105-113

Builds the popover with an empty vertically scrolling row list, closed. The caller sets the sections and opens it against an anchor.

C#
public void Close()

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SectionListPopover.cs:158-161

Closes the popover. Closing one that is not open does nothing.

Open(VisualElement panelRoot, VisualElement anchor, IReadOnlyList<SectionListRow> rows)

Section titled “Open(VisualElement panelRoot, VisualElement anchor, IReadOnlyList<SectionListRow> rows)”
C#
public void Open(UnityEngine.UIElements.VisualElement panelRoot, UnityEngine.UIElements.VisualElement anchor, System.Collections.Generic.IReadOnlyList<BitQuirky.Graph.GraphView.Controls.SectionListRow> rows)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SectionListPopover.cs:137-153

Open the popover anchored underanchor, listing rowsin order under their section headings. An empty list shows EmptyTextinstead of rows.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.SectionListRow

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SectionListPopover.cs:37-56

One row of aSectionListPopover.

Responsibilities:

  • Carry the row’s section heading (consecutive equal headings share one header), its primary line, an optional secondary detail line, an optional right-aligned trailing detail, an optional trailing action affordance, and its warn accent.

Does NOT:

  • Carry product data; the consumer keeps its own model and maps activation by index.

C#
public string ActionLabel { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SectionListPopover.cs:52

Gets or sets the optional trailing action affordance; empty hides it.

C#
public string Primary { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SectionListPopover.cs:43

Gets or sets the row’s primary line.

C#
public string Secondary { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SectionListPopover.cs:46

Gets or sets the optional secondary detail line; empty hides it.

C#
public string SectionLabel { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SectionListPopover.cs:40

Gets or sets the uppercase section heading this row sits under.

C#
public string TrailingDetail { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SectionListPopover.cs:49

Gets or sets the optional right-aligned trailing detail; empty hides it.

C#
public bool Warn { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SectionListPopover.cs:55

Gets or sets whether the row’s status dot reads amber instead of red.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.SegmentedControl

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SegmentedControl.cs:66-438

Inherits: VisualElement

Compact horizontal segmented toggle. Used for Static/Live mode switching, Blackboard Variant A/B toggle, and any other small “pick one of N” choice that should not become a dropdown.

Responsibilities:

  • Render N item segments laid out horizontally with rounded outer corners and inner separators.

  • Track which segment is selected via an integer index and emit OnSelectionChangedwhen the user changes it.

  • Apply --selected modifier classes per item so USS styles the active segment without custom inline color writes.

  • Carry one or more inert items: an item that is displayed in the set, never taken by a click or the keyboard, and states a caller-supplied reason on hover. Inertness is per item, so every sibling stays interactive and the control itself is never disabled.

  • Keep a single roving Tab stop: exactly one item is sequentially Tab-reachable at a time, following the current selection, and Left/Right move the stop and the selection together among interactive items without leaving the group.

Does NOT:

  • Encode any specific labels; consumers pass labels at construction or viaSetItems.
  • Handle multi-select; this is single-select by contract.
  • Author the reason text or render a reason surface; the caller owns both and may draw its own fromOnInertItemHoverChanged.

Remarks

Round Trip: replace any local segmented-toggle implementation with this class.

The inert-item capability exists because a complete choice set can contain a value that is displayed but never offered as a destination. Layer 1 owns only the generic behavior: the reason string, the dimmed modifier class, refusal of pointer and keyboard selection, and the hover notification. The consuming product owns every label and any drawn reason surface.

C#
public bool IsInteractionEnabled { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SegmentedControl.cs:124-142

Whether the control accepts input. Setting false dims it and makes it ignore the pointer entirely, so a click falls through to whatever is behind; the selection is unaffected either way. Defaults to true.

C#
public int ItemCount { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SegmentedControl.cs:117

Item count.

C#
public int SelectedIndex { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SegmentedControl.cs:110-114

Currently selected index, or-1for “no selection”. A POPULATED control may hold -1: an explicit -1from a caller (through this setter, the constructor, or SetItems) clears the selection instead of falling back to the first item, so a consumer must not assume a non-empty item set implies an index of zero or more. Every other out-of-range initial index still falls back to the first item.

OnSelectionChangedNEVER reports the cleared state. Clearing is reachable only through the caller-driven paths above, which raise no event; the event is raised only by a user taking an item, so its argument is always a real item index.

C#
public event System.Action<int, string> OnInertItemHoverChanged

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SegmentedControl.cs:93

Raised while the pointer is over an inert item, carrying its index and caller-supplied reason, and again with-1and an empty reason when the pointer leaves. Consumers that draw their own reason surface use this; the reason is also set as the item’s tooltip.

C#
public event System.Action<int> OnSelectionChanged

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SegmentedControl.cs:85

Raised when the selected index changes (user click).

SegmentedControl(IList<string> labels, int initialSelection)

Section titled “SegmentedControl(IList<string> labels, int initialSelection)”
C#
public SegmentedControl(System.Collections.Generic.IList<string> labels = null, int initialSelection = 0)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SegmentedControl.cs:155-163

Builds the control.labelsare the segment texts in order, and null or empty leaves an empty control for a laterSetItems. initialSelectionis the index taken without raising OnSelectionChanged; -1 leaves nothing selected, and any other out-of-range value falls back to the first segment.

C#
public string GetItemLabel(int index)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SegmentedControl.cs:220-224

Look up an item label by index.

C#
public bool IsItemInert(int index)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SegmentedControl.cs:302-307

Gets whether one item is displayed but never offered.

C#
public string ItemInertReason(int index)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SegmentedControl.cs:310-315

Gets the caller-supplied reason one item is not offered, or empty.

C#
public void SetItemIcon(int index, UnityEngine.UIElements.VectorImage image)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SegmentedControl.cs:231-265

Adds, replaces, or clears one optional leading item icon. A null icon removes the element entirely, so consumers that do not opt in retain the original text-only hierarchy and layout.

SetItemInert(int index, string hoverReason)

Section titled “SetItemInert(int index, string hoverReason)”
C#
public void SetItemInert(int index, string hoverReason)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SegmentedControl.cs:273-287

Displays one item without offering it: the item reads dimmed unless it is the selected one, refuses pointer and keyboard selection, and states hoverReasonon hover. Every sibling stays interactive and the control is never disabled.

C#
public void SetItemInteractive(int index)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SegmentedControl.cs:290-299

Restores one inert item to ordinary interactive behavior.

SetItems(IList<string> labels, int initialSelection)

Section titled “SetItems(IList<string> labels, int initialSelection)”
C#
public void SetItems(System.Collections.Generic.IList<string> labels, int initialSelection = 0)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SegmentedControl.cs:174-217

Replace the item set.labelsdrives the visible text;initialSelectionselects one index without raisingOnSelectionChanged.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.SelectableListKeyboardManipulator

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListKeyboardManipulator.cs:22-102

Inherits: Manipulator

Routes selectable-list keyboard input from the focused control it is attached to.

Responsibilities:

  • Route UI Toolkit navigation events and non-directional physical keys to list operations.
  • Observe input at the focused control before its default action consumes list navigation.
  • Consume only operations the owning list reports as handled.

Does NOT:

  • Own selection, activation, scrolling, search, row state, or cancellation behavior.
  • Consume text entry, horizontal caret movement, or unsupported navigation operations.
  • Discover or attach itself to the owning list’s current focus target.

SelectableListKeyboardManipulator(Func<KeyboardNavigationOperation, bool> handleOperation)

Section titled “SelectableListKeyboardManipulator(Func<KeyboardNavigationOperation, bool> handleOperation)”
C#
public SelectableListKeyboardManipulator(System.Func<UnityEngine.UIElements.KeyboardNavigationOperation, bool> handleOperation)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListKeyboardManipulator.cs:30-35

Creates a navigation router. The callback returnstrueonly when the owning list handled the supplied operation and wants the originating event consumed.

C#
protected override void RegisterCallbacksOnTarget()

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListKeyboardManipulator.cs:38-44

C#
protected override void UnregisterCallbacksFromTarget()

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListKeyboardManipulator.cs:47-53

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.SelectableListRow

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:46-328

Inherits: VisualElement

Shared row-state control for selectable scroll lists across Bit Quirky graph tools.

Responsibilities:

  • Keep pointer hover, keyboard activity, committed identity, and candidate status independent.
  • Apply one shared USS contract for normal, ruled-out, disabled, and saved-invalid rows.
  • Enforce state precedence so disabled rows cannot become active or committed, while a saved-invalid row can retain its stored marker during recovery.

Does NOT:

  • Own a collection, search, Up or Down navigation, scrolling, activation, or saved data.
  • Decide why a candidate is ruled out or how a saved-invalid value is repaired.

C#
public bool CanActivate { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:118-119

Gets whether pointer or Enter activation may act on this row.

C#
public bool CanCommit { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:122

Gets whether activation may commit this row as a valid choice.

C#
public bool CanReceiveKeyboardActivity { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:125-126

Gets whether Up or Down may place keyboard activity on this row.

C#
public bool IsCommitted { get; private set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:112

Gets whether this row represents the owner’s persistent current identity.

C#
public bool IsKeyboardActive { get; private set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:109

Gets whether this is the row the owning collection’s Enter action targets.

C#
public bool IsPointerHovered { get; private set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:106

Gets whether the pointer is currently over this available row.

C#
public BitQuirky.Graph.GraphView.Controls.SelectableListRowStatus Status { get; private set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:115

Gets the row’s availability or recovery status.

C#
public const string CommittedUssClassName = "bq-selectable-list-row--committed"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:60

USS class applied to the value already stored by the owning field.

C#
public const string DisabledUssClassName = "bq-selectable-list-row--disabled"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:66

USS class applied to a structurally unavailable row.

C#
public const string KeyboardActiveUssClassName = "bq-selectable-list-row--keyboard-active"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:52-53

USS class applied to the row the collection’s Enter action currently targets.

C#
public const string PointerHoverUssClassName = "bq-selectable-list-row--pointer-hovered"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:56-57

USS class applied while the pointer is over an available row.

C#
public const string RuledOutLineUssClassName = "bq-selectable-list-row__ruled-out-line"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:73-74

USS class for the shared line drawn across a ruled-out candidate.

C#
public const string RuledOutTargetUssClassName = "bq-selectable-list-row__ruled-out-target"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:77-78

USS class applied to the candidate label that owns the ruled-out line.

C#
public const string RuledOutUssClassName = "bq-selectable-list-row--ruled-out"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:63

USS class applied to a visible candidate that fails the current contract.

C#
public const string SavedInvalidUssClassName = "bq-selectable-list-row--saved-invalid"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:69-70

USS class applied to a stored identity that no longer resolves or fits.

C#
public const string UssClassName = "bq-selectable-list-row"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:49

Shared USS class applied to every selectable-list row.

C#
public SelectableListRow()

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:89-103

Creates an ordinary row with no keyboard or committed state.

C#
public void ResetForReuse()

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:178-185

Clears consumer and state classes for a virtualized-row rebind, then restores the shared ordinary-row contract. Content and the shared ruled-out marker remain in place. The interactive state is restored as well: Unity carries a disabled element through PseudoStates.Disabledrather than a USS class, so clearing the class list alone would leave a pooled row that a consumer disabled greyed out and unpickable with no state class left to explain it.

C#
public void SetPointerHoverState(bool hovered)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:321-327

Sets the transient pointer-hover fact without changing keyboard activity or committed identity. Consumers normally rely on the row’s pointer callbacks; deterministic visual fixtures may set the same production state directly.

SetState(bool keyboardActive, bool committed, SelectableListRowStatus status)

Section titled “SetState(bool keyboardActive, bool committed, SelectableListRowStatus status)”
C#
public void SetState(bool keyboardActive, bool committed, BitQuirky.Graph.GraphView.Controls.SelectableListRowStatus status = Normal)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:134-168

Applies all independent row facts at once. Disabled suppresses keyboard and committed styling; ruled-out suppresses committed styling; saved-invalid may retain committed. The shared ruled-out marker is re-spanned across the first candidate label on every call, so metadata and the visible reason remain unobscured by the candidate-only strike.

Category: Low-level runtime

C#
enum BitQuirky.Graph.GraphView.Controls.SelectableListRowStatus

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:18-31

Underlying type: byte

Availability or recovery status carried by one selectable-list row.

Responsibilities:

  • Distinguish an ordinary candidate from ruled-out, disabled, and saved-invalid rows.
  • Define whether keyboard activity, committed identity, and activation remain meaningful.

Does NOT:

  • Describe product-specific eligibility reasons or recovery actions.

C#
Disabled = 2

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:27

The unavailable row is skipped by pointer and keyboard activity.

C#
Normal = 0

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:21

The row is an ordinary candidate that can be activated.

C#
RuledOut = 1

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:24

The candidate remains searchable and explainable but cannot activate.

C#
SavedInvalid = 3

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRow.cs:30

The row preserves a stored identity that no longer resolves or fits.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.SelectableListRowVisualFixture

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRowVisualFixture.cs:21-145

Deterministic visual fixture for the complete shared selectable-list row vocabulary.

Responsibilities:

  • Compose every approved row-state combination from the production SelectableListRowcontrol.
  • Give each product one identical fixture for real-window capture and pixel inspection.

Does NOT:

  • Emulate a picker, own navigation, or replace product-specific interaction tests.

C#
public static System.Collections.Generic.IReadOnlyList<string> StateNames { get; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRowVisualFixture.cs:38-49

Every approved row state label in contract order.

C#
public const string DescriptionUssClassName = "bq-selectable-list-fixture__description"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRowVisualFixture.cs:32

USS class applied to each state explanation.

C#
public const string SoloRowUssClassName = "bq-selectable-list-solo-row"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRowVisualFixture.cs:35

USS class presenting one row at its own bounds outside a fixture.

C#
public const string StateLabelUssClassName = "bq-selectable-list-fixture__state"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRowVisualFixture.cs:29

USS class applied to each state-name label.

C#
public const string UssClassName = "bq-selectable-list-fixture"

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRowVisualFixture.cs:26

USS class applied to the complete fixture.

C#
public static BitQuirky.Graph.GraphView.Controls.SelectableListRow BuildState(string state)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRowVisualFixture.cs:68-115

Builds one approved row state by its exact contract label, so a capture can host a single production row at that row’s own bounds.

C#
public static UnityEngine.UIElements.VisualElement BuildStateMatrix()

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListRowVisualFixture.cs:52-62

Builds all eight approved row states in their contract order.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.SelectableListSelection

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListSelection.cs:15-483

Shared initial-selection and viewport-reveal behavior for selectable scroll lists.

FindInitialIndex(IReadOnlyList<VisualElement> rows)

Section titled “FindInitialIndex(IReadOnlyList<VisualElement> rows)”
C#
public static int FindInitialIndex(System.Collections.Generic.IReadOnlyList<UnityEngine.UIElements.VisualElement> rows)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListSelection.cs:26-60

Finds the committed row when it can receive keyboard activity, otherwise the first row that can. Returns -1 when no supplied row can receive keyboard activity.

Reveal(ListView list, int itemIndex, bool center)

Section titled “Reveal(ListView list, int itemIndex, bool center)”
C#
public static void Reveal(UnityEngine.UIElements.ListView list, int itemIndex, bool center = false)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListSelection.cs:93-115

Realizes and reveals a virtualized list item after attachment and layout. A later request supersedes an earlier request for the same list. This never changes focus or selection.

Reveal(ScrollView scroll, VisualElement row, bool center)

Section titled “Reveal(ScrollView scroll, VisualElement row, bool center)”
C#
public static void Reveal(UnityEngine.UIElements.ScrollView scroll, UnityEngine.UIElements.VisualElement row, bool center = false)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SelectableListSelection.cs:66-87

Reveals a row after its scroll view is attached and laid out. A later request supersedes an earlier request for the same scroll view. This never changes focus.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.SlimScrollbarDragTracker

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SlimScrollbarDragTracker.cs:50-134

Bridges Unity USS’s :active pseudo-class (which only matches while the cursor is over the pressed element) so the slim scrollbar’s hover chrome holds for the entire drag - even when the cursor strays off the gutter mid-scroll.

Implementation notes (these are not just style - each compromise here is in service of NOT breaking Unity’s slider drag):

  • Registered on theTrickleDownphase because Unity’sBaseSliderManipulatorcalls StopPropagation on PointerDownEvent/ PointerUpEvent, so a default bubble-phase listener on the editor root never sees them.
  • The press target may not be the dragger element directly (it can be a child element of the dragger), so we walk up from evt.targetto find the dragger.
  • Class toggles are scheduled for the next frame so the AddToClassList → USS resolve → layout chain cannot fire mid- trickle and disturb the slider’s capture handshake. The user-perceived delay is sub-frame and the transition: scale, background-coloranimation takes over immediately.

C#
public static void Install(UnityEngine.UIElements.VisualElement host)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/SlimScrollbarDragTracker.cs:67-111

Install the drag tracker on a host element (typically the editor window root). Every descendant scroller dragger inside abq-slim-scrollbarsancestor keeps its hover styling through the entire press.

Per-call closure stores the dragger that owns the active press, so the matchingPointerUpEventcan clear the class even when the cursor was released far off the gutter or outside the editor window.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.StatusBarCell

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/StatusBarCell.cs:44-145

Inherits: VisualElement

Bottom-of-window status-bar cell - node-count, decorator-count, blackboard-field-count, mode state, tick rate, transient message, etc. (-). Mono font with tabular alignment so the columns stay aligned as numbers tick.

Responsibilities:

  • Render a small label-and-value pair in a single cell with mono-font tabular alignment for numeric values.
  • Provide a setter that updates both the label and value text together without consumers manipulating the element tree.

Does NOT:

  • Own a tooltip; the consumer passes a tooltip string. Cells with no tooltip stay tooltip-less.

Remarks

Round Trip: replace any local status-bar cell helper with this control.

C#
public string LabelText { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/StatusBarCell.cs:60-68

The cell’s caption, shown ahead of the value. Setting null or empty hides the caption element entirely rather than leaving a gap, so a value-only cell reads as one column.

C#
public BitQuirky.Graph.GraphView.Controls.StatusPip.StatusPipKind PipKind { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/StatusBarCell.cs:85-93

The status the cell’s pip reports.Nonehides the pip, which is the resting state; any other kind shows it in that kind’s color.

C#
public string ValueText { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/StatusBarCell.cs:75-79

The cell’s value text, rendered in the tabular mono font so digits stay column-aligned as they change. Setting null stores an empty string; unlike the caption, the element stays laid out so the cell keeps its place.

StatusBarCell(string label, string value, string tooltip)

Section titled “StatusBarCell(string label, string value, string tooltip)”
C#
public StatusBarCell(string label = "", string value = "", string tooltip = "")

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/StatusBarCell.cs:105-130

Builds the cell.labelis the caption and is hidden when empty, value the mono-font value text, and tooltipthe hover explanation for the whole cell; all three default to empty, giving a blank cell ready to be filled bySet. The pip starts hidden.

Set(string label, string value, StatusPip.StatusPipKind pip)

Section titled “Set(string label, string value, StatusPip.StatusPipKind pip)”
C#
public void Set(string label, string value, BitQuirky.Graph.GraphView.Controls.StatusPip.StatusPipKind pip = None)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/StatusBarCell.cs:137-142

Update label, value, and pip in one call.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.StatusPip

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/StatusPip.cs:42-182

Inherits: VisualElement

Small circular status indicator used for attached/lost pip in the Live toolbar, dirty pip, breakpoint marker, running pulse, and the recent-change row indicator.

Responsibilities:

  • Render a small element coloured via the StatusPipKindmodifier class.
  • Expose kind and contextual-tooltip setters so consumers can update status without manipulating class lists or native tooltip events by hand.

Does NOT:

  • Animate itself. The “running” pulse comes from the Effects.uss pulse-on class which a scheduled item toggles externally.

Remarks

Round Trip: replace any local pip / dot helper with this control.

C#
public string ContextualTooltipText { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/StatusPip.cs:114-123

Optional product context for the current status. A nonempty value replaces the generic description and is retained across kind changes; null or empty restores the current kind’s default description.

C#
public BitQuirky.Graph.GraphView.Controls.StatusPip.StatusPipKind Kind { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/StatusPip.cs:90-107

The status this pip reports, which selects its color and default explanation. Setting the kind it already holds does nothing;Noneleaves the pip unstyled and explaining nothing.

C#
public StatusPip(BitQuirky.Graph.GraphView.Controls.StatusPip.StatusPipKind kind = None)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/StatusPip.cs:134-139

Builds the pip already reportingkind, defaulting to Nonefor a caller that sets the status later. The pip never takes pointer input, so it cannot steal a click from the row it sits in.

Category: Low-level runtime

C#
enum BitQuirky.Graph.GraphView.Controls.StatusPip.StatusPipKind

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/StatusPip.cs:50-72

Underlying type: int

The status a pip reports. Each kind carries its own color and default explanation; the host decides which product fact maps onto which kind.

C#
Aborted = 9

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/StatusPip.cs:71

Aborted before completing.

C#
Attached = 1

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/StatusPip.cs:55

Attached to the runtime.

C#
Breakpoint = 4

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/StatusPip.cs:61

A breakpoint is set.

C#
Changed = 6

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/StatusPip.cs:65

Changed since opening.

C#
Dirty = 3

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/StatusPip.cs:59

Contains unsaved changes.

C#
Failure = 8

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/StatusPip.cs:69

Failed.

C#
Lost = 2

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/StatusPip.cs:57

Runtime attachment lost.

C#
None = 0

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/StatusPip.cs:53

No status: the pip is drawn unstyled and explains nothing.

C#
Running = 5

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/StatusPip.cs:63

Currently running; the host drives the pulse while this kind is in force.

C#
Success = 7

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/StatusPip.cs:67

Completed successfully.

Category: Low-level runtime

C#
class BitQuirky.Graph.GraphView.Controls.ToolbarButton

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ToolbarButton.cs:50-218

Inherits: VisualElement

Compact dark toolbar button used across the editor toolbars (reload, search trigger, layout menu, lock pan/zoom, save, etc.). Visual styling is driven by the .ed-toolbar__button* rules in GraphViewStyles.uss; this class only owns the element shape and click event.

Responsibilities:

  • Render an optional glyph and label inside a compact pill.
  • Maintain --pressed/--active modifier classes so consumers can reflect toggle state without subclassing.
  • Surface clicks via theClickedevent (composition over inheritance per the control contract).

Does NOT:

  • Encode any BT-specific labels or icons; consumers pass the glyph and tooltip text.
  • Take a dependency on Unity Editor APIs; this is a plain VisualElementreusable from any editor context.

Remarks

Round Trip: replace any local “RoundTripToolbarButton” equivalent with this class and bind project-specific glyphs through the constructor or the SetGlyph method.

C#
public bool IsActive { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ToolbarButton.cs:86-96

True when the button is rendered in its pressed/active state.

C#
public bool IsDisabled { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ToolbarButton.cs:112-116

True when input should be ignored and the visual dimmed.

C#
public bool IsPressedVisual { get; private set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ToolbarButton.cs:99-109

True while the user is holding the mouse down on the button.

C#
public string Text { get; set; }

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ToolbarButton.cs:75-83

Label text displayed alongside the glyph. May be empty.

C#
public event System.Action Clicked

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ToolbarButton.cs:68

Raised when the button is clicked. Subscribers must check IsDisabledif they need to ignore clicks while disabled - the event is suppressed in that case already.

ToolbarButton(string text, string tooltip)

Section titled “ToolbarButton(string text, string tooltip)”
C#
public ToolbarButton(string text = "", string tooltip = "")

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ToolbarButton.cs:127-151

Builds the button.textis the label, which is hidden when empty so a glyph-only button takes no extra width, andtooltipthe hover explanation. The glyph slot starts hidden; the button is focusable and enabled.

C#
public void SetGlyph(UnityEngine.UIElements.VisualElement glyph)

Source declaration: ../bitquirky-graph/Editor/GraphView/Controls/ToolbarButton.cs:163-174

Replace the glyph child. Pass null to hide the glyph slot. Consumers that need a glyph supply a small VisualElement(e.g. a built-in editor icon wrapped in a VisualElement, or a USS background-image element).

Source fingerprint: sha256:ad0983d00d773d882bc61865e18d8c5559e009d181e5891575cd7f262515b23e

Full-size image