aboutsummaryrefslogtreecommitdiff
path: root/linux/home/.config/ags/widget/settings/Row.ts
blob: 1e1709655bf6f37cb5175156b2a0325583ea4968 (plain)
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
46
47
48
49
50
51
52
53
54
55
import { Opt } from "lib/option"
import Setter from "./Setter"
import icons from "lib/icons"

export type RowProps<T> = {
    opt: Opt<T>
    title: string
    note?: string
    type?:
    | "number"
    | "color"
    | "float"
    | "object"
    | "string"
    | "enum"
    | "boolean"
    | "img"
    | "font"
    enums?: string[]
    max?: number
    min?: number
}

export default <T>(props: RowProps<T>) => Widget.Box(
    {
        attribute: { opt: props.opt },
        class_name: "row",
        tooltip_text: props.note ? `note: ${props.note}` : "",
    },
    Widget.Box(
        { vertical: true, vpack: "center" },
        Widget.Label({
            xalign: 0,
            class_name: "row-title",
            label: props.title,
        }),
        Widget.Label({
            xalign: 0,
            class_name: "id",
            label: props.opt.id,
        }),
    ),
    Widget.Box({ hexpand: true }),
    Widget.Box(
        { vpack: "center" },
        Setter(props),
    ),
    Widget.Button({
        vpack: "center",
        class_name: "reset",
        child: Widget.Icon(icons.ui.refresh),
        on_clicked: () => props.opt.reset(),
        sensitive: props.opt.bind().as(v => v !== props.opt.initial),
    }),
)