Skip to content

Modern Tui TuiButtonOf

Paul Squires edited this page Oct 19, 2026 · 6 revisions

Home › Terminal TUI Library › Widgets › TuiButtonOf

TuiButtonOf

Draws a button whose handler is a lambda that captures variables.

Syntax

type TuiButtonOf( of F ) extends TuiWidget
    as ustring label
    as int32 id
    as F handler
end type

Description

A button whose handler is a CAPTURING lambda. It exists because of two hard compiler limits: a capturing lambda cannot become a procptr (error 355), and one stored in a TYPE field cannot be called through field access (error 10). A generic widget extending the non-generic base solves both -- the lambda's anonymous type becomes the type parameter, and the body copies it to a local before calling it.

Example

#import "std/numeric"
#import "std/tui"
using tui, numeric

dim as int32 clicks = 0

'' the lambda CAPTURES clicks, so a plain TuiButton could not hold it
var handler = sub( byval id as int32 )
    clicks += 1
end sub

dim as TuiButtonOf( of typeof( handler ) ) b
b.label = "Count"
b.handler = handler
b.SetFocused( TRUE )

dim as TuiEvent e
e.kind = TUIEVENT_KEY : e.key.code = TUIKEY_ENTER
b.HandleEvent( e )
print clicks                      '' 1

See also

TuiWidget TuiWidget.HandleEvent TuiWidget.SetFocused TuiFocusRing.Clear
TuiWidget.Render TuiWidget.SizeHint TuiFocusRing TuiFocusRing.Count
TuiWidget.Kind TuiWidget.CanFocus TuiFocusRing.Add TuiFocusRing.Current

Library: Terminal TUI Library
Category: Terminal TUI Library
Documented under: Widgets
Working examples: hello.tiko · form.tiko · dashboard.tiko


Home · Keyword Index

Clone this wiki locally