Makepad Code (editor layout, selection, sidebar, early yield), the EN/ZH Translator with voice, Weather with a generated offline forecast, Amp playing its offline library, and fixes across the other apps and examples. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
98 lines
3.7 KiB
Text
98 lines
3.7 KiB
Text
// title: Receiver
|
|
// class: large
|
|
// order: 10
|
|
// min: 820x560
|
|
// pref: 1360x900
|
|
//
|
|
// A wide hi-fi receiver: the screen is a long, low dial window across the
|
|
// whole front; under it one row of controls, the volume wing, what plays over
|
|
// the transport keys and the position display, then the display wing; the
|
|
// library, the open list and Up Next below. Every boundary is a splitter:
|
|
// the dial against the control row, the device against the lists, the
|
|
// library against the list, the list against Up Next.
|
|
use mod.prelude.widgets_internal.*
|
|
use mod.widgets.*
|
|
|
|
mod.widgets.HwLayout = View{
|
|
width: Fill
|
|
height: Fill
|
|
flow: Down
|
|
// The device over the lists.
|
|
device_split := mod.widgets.HwDeckSplitter{
|
|
width: Fill
|
|
height: Fill
|
|
axis: SplitterAxis.Vertical
|
|
align: SplitterAlign.Weighted(0.66)
|
|
min_horizontal: 340.0
|
|
max_horizontal: 150.0
|
|
// The dial window over the control row.
|
|
a: View{
|
|
width: Fill
|
|
height: Fill
|
|
dial_split := mod.widgets.HwDeckSplitter{
|
|
width: Fill
|
|
height: Fill
|
|
axis: SplitterAxis.Vertical
|
|
align: SplitterAlign.FromB(340.0)
|
|
min_horizontal: 100.0
|
|
max_horizontal: 220.0
|
|
a: mod.widgets.HwSlot{component: "screen" width: Fill height: Fill}
|
|
// The control row: knob, keys, display, all in one line.
|
|
// The wings keep their height (the knob and the display keys
|
|
// don't stretch); a taller row centres them in more faceplate.
|
|
b: View{
|
|
width: Fill
|
|
height: Fill
|
|
flow: Right
|
|
spacing: 14
|
|
align: Align{y: 0.5}
|
|
mod.widgets.HwSlot{component: "volume" width: 184 height: Fill{weight: 0.0 basis: 322.0 shrink: 1.0 min: 200.0}}
|
|
View{
|
|
width: Fill
|
|
height: Fill
|
|
flow: Down
|
|
spacing: 8
|
|
align: Align{y: 0.5}
|
|
mod.widgets.HwSlot{component: "now" width: Fill height: 60}
|
|
mod.widgets.HwSlot{component: "transport" width: Fill height: 84}
|
|
View{
|
|
width: Fill
|
|
height: 50
|
|
flow: Right
|
|
spacing: 12
|
|
mod.widgets.HwSlot{component: "progress" width: Fill height: Fill}
|
|
mod.widgets.HwSlot{component: "queue" width: 56 height: Fill}
|
|
}
|
|
}
|
|
mod.widgets.HwSlot{component: "display" width: 236 height: Fill{weight: 0.0 basis: 322.0 shrink: 1.0 min: 200.0}}
|
|
}
|
|
}}
|
|
b: View{
|
|
width: Fill
|
|
height: Fill
|
|
lib_split := mod.widgets.HwSplitter{
|
|
width: Fill
|
|
height: Fill
|
|
axis: SplitterAxis.Horizontal
|
|
align: SplitterAlign.FromA(250.0)
|
|
min_vertical: 230.0
|
|
max_vertical: 500.0
|
|
a: mod.widgets.HwSlot{component: "library" width: Fill height: Fill}
|
|
// The open list and Up Next; Up Next folds away from its key.
|
|
b: View{
|
|
width: Fill
|
|
height: Fill
|
|
split := mod.widgets.HwSplitter{
|
|
width: Fill
|
|
height: Fill
|
|
axis: SplitterAxis.Horizontal
|
|
align: SplitterAlign.FromB(320.0)
|
|
min_vertical: 300.0
|
|
max_vertical: 180.0
|
|
a: mod.widgets.HwSlot{component: "tracks" width: Fill height: Fill}
|
|
b: mod.widgets.HwSlot{component: "upnext" width: Fill height: Fill}
|
|
}}
|
|
}}
|
|
}
|
|
}
|
|
true
|