Skip to content

UI.Selectable

Name Mandatory Description Default Type
⬅️ Input The input of the shard, if any Any
Output ➡️ The resulting output of the shard Bool
Contents No The UI contents to wrap, contain, and detect for selection. none NoneShard[Shard]
IsSelected No Callback function for checking if the contents are currently selected. none NoneShard[Shard]
Clicked No Callback function for the contents of this shard is clicked. none NoneShard[Shard]
DoubleClicked No Callback function for the contents of this shard is clicked. none NoneShard[Shard]
ContextMenu No Callback function for the right-click context menu. none NoneShard[Shard]
DragData No Enables dragging and sets the data for drag operations none Any
ID No An optional ID value in case of ID conflicts. none StringVar(String)None

A wrapper that detects selection over the provided contents.

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
@template(is-selected [idx] {
  currently-selected | Is(idx)
})

@template(select [idx] {
  idx > currently-selected | Log
})

GFX.MainWindow(
  Contents: {
    Once({
      GFX.DrawQueue >= ui-draw-queue
      GFX.UIPass(ui-draw-queue) >> render-steps
      1 >= currently-selected
      "" >= currently-selected-str
    })
    UI(
      UI.CentralPanel(
        Contents: {
          UI.Selectable(
            Contents: {UI.Button("Select Button 1" {"Select Button 1 Clicked" | Log})}
            IsSelected: {@is-selected(1)}
            Clicked: {@select(1)}
          )
          UI.Selectable(
            Contents: {
              UI.Button("Select Button 2" {"Select Button 2 Clicked" | Log})
              "Another part of the same selectable as Select Button 2" | UI.Label(Wrap: TextWrap::Extend)
            }
            IsSelected: {@is-selected(2)}
            Clicked: {@select(2)}
          )

          currently-selected | ToString > currently-selected-str
          [
            "Currently selected: "
            currently-selected-str
          ] | String.Join | UI.Label
        }
      )
    ) | UI.Render(ui-draw-queue)

    GFX.Render(Steps: render-steps)
  }
)

[warning] Missing downlevel flags: DownlevelFlags(VERTEX_AND_INSTANCE_INDEX_RESPECTS_RESPECTIVE_FIRST_VALUE_IN_INDIRECT_DRAW)
The underlying API or device in use does not support enough features to be a fully compliant implementation of WebGPU. A subset of the features can still be used. If you are running this program on native and not in a browser and wish to limit the features you use to the supported subset, call Adapter::downlevel_properties or Device::downlevel_properties to get a listing of the features the current platform supports.
[warning] DownlevelCapabilities {
    flags: DownlevelFlags(
        COMPUTE_SHADERS | FRAGMENT_WRITABLE_STORAGE | INDIRECT_EXECUTION | BASE_VERTEX | READ_ONLY_DEPTH_STENCIL | NON_POWER_OF_TWO_MIPMAPPED_TEXTURES | CUBE_ARRAY_TEXTURES | COMPARISON_SAMPLERS | INDEPENDENT_BLEND | VERTEX_STORAGE | ANISOTROPIC_FILTERING | FRAGMENT_STORAGE | MULTISAMPLED_SHADING | DEPTH_TEXTURE_AND_BUFFER_COPIES | WEBGPU_TEXTURE_FORMAT_SUPPORT | BUFFER_BINDINGS_NOT_16_BYTE_ALIGNED | UNRESTRICTED_INDEX_BUFFER | FULL_DRAW_INDEX_UINT32 | DEPTH_BIAS_CLAMP | VIEW_FORMATS | UNRESTRICTED_EXTERNAL_TEXTURE_COPIES | SURFACE_VIEW_FORMATS | NONBLOCKING_QUERY_RESOLVE,
    ),
    limits: DownlevelLimits,
    shader_model: Sm5,
}
[warning] Context has 31 commandBuffers at release (0 released, 0 kept)
[warning] Context has 2 buffers at release (2 released, 2 kept)
[warning] Context has 5 textures at release (1 released, 5 kept)