mirror of
https://github.com/Theaninova/TheaninovOS.git
synced 2025-12-12 11:36:20 +00:00
64 lines
1.7 KiB
TypeScript
64 lines
1.7 KiB
TypeScript
import RegularWindow from "widget/RegularWindow"
|
|
import layout from "./layout"
|
|
import icons from "lib/icons"
|
|
import options from "options"
|
|
|
|
const current = Variable(layout[0].attribute.name)
|
|
|
|
const Header = () => Widget.CenterBox({
|
|
class_name: "header",
|
|
start_widget: Widget.Button({
|
|
class_name: "reset",
|
|
on_clicked: options.reset,
|
|
hpack: "start",
|
|
vpack: "start",
|
|
child: Widget.Icon(icons.ui.refresh),
|
|
tooltip_text: "Reset",
|
|
}),
|
|
center_widget: Widget.Box({
|
|
class_name: "pager horizontal",
|
|
children: layout.map(({ attribute: { name, icon } }) => Widget.Button({
|
|
xalign: 0,
|
|
class_name: current.bind().as(v => `${v === name ? "active" : ""}`),
|
|
on_clicked: () => current.value = name,
|
|
child: Widget.Box([
|
|
Widget.Icon(icon),
|
|
Widget.Label(name),
|
|
]),
|
|
})),
|
|
}),
|
|
end_widget: Widget.Button({
|
|
class_name: "close",
|
|
hpack: "end",
|
|
vpack: "start",
|
|
child: Widget.Icon(icons.ui.close),
|
|
on_clicked: () => App.closeWindow("settings-dialog"),
|
|
}),
|
|
})
|
|
|
|
const PagesStack = () => Widget.Stack({
|
|
transition: "slide_left_right",
|
|
children: layout.reduce((obj, page) => ({ ...obj, [page.attribute.name]: page }), {}),
|
|
shown: current.bind() as never,
|
|
})
|
|
|
|
export default () => RegularWindow({
|
|
name: "settings-dialog",
|
|
class_name: "settings-dialog",
|
|
title: "Settings",
|
|
setup(win) {
|
|
win.on("delete-event", () => {
|
|
win.hide()
|
|
return true
|
|
})
|
|
win.set_default_size(500, 600)
|
|
},
|
|
child: Widget.Box({
|
|
vertical: true,
|
|
children: [
|
|
Header(),
|
|
PagesStack(),
|
|
],
|
|
}),
|
|
})
|