ide-shell
Builds Avatar Badge Button DescriptionList Divider Dock EmptyState Icon List ProgressBar StatusBar Tag Timeline


The code that drew it
A still frame holds a repeating animation at its first frame and a one-shot at its last, because a still of a moving thing is not reproducible. Run the gallery to review motion.
fn ide_shell(_window: &mut Window, cx: &mut App) -> AnyElement {
let theme = cx.theme().clone();
let mut branch = AsyncValue::<SharedString, String>::ready("main@a1b2c3".into());
branch.refresh();
branch.fail_refresh("the host is unreachable".into());
div()
.column()
.w(px(900.0))
.h(px(560.0))
.bg(theme.colors.canvas)
.text_color(theme.colors.text)
.font_family(theme.typography.sans.clone())
.child(
div().flex_1().min_h(px(0.0)).child(
Dock::new("scene.shell")
.share(DockRegion::Left, 0.24)
.share(DockRegion::Bottom, 0.3)
.panel(
DockRegion::Left,
DockPanel::new("files", "Files")
.icon(Icon::Folder)
.content(filler(&theme, "Workspace", 8)),
)
.panel(
DockRegion::Left,
DockPanel::new("search", "Search")
.icon(Icon::Magnifier)
.badge("12"),
)
.active(DockRegion::Left, "files")
.panel(
DockRegion::Centre,
DockPanel::new("editor", "main.rs")
.icon(Icon::Document)
.content(filler(&theme, "fn main()", 12)),
)
.panel(
DockRegion::Right,
DockPanel::new("outline", "Outline").icon(Icon::List),
)
.panel(
DockRegion::Right,
DockPanel::new("history", "History").icon(Icon::GitBranch),
)
.collapsed(DockRegion::Right, true)
.panel(
DockRegion::Bottom,
DockPanel::new("terminal", "Terminal")
.icon(Icon::Terminal)
.content(filler(&theme, "$ cargo test", 4)),
)
.panel(
DockRegion::Bottom,
DockPanel::new("problems", "Problems")
.icon(Icon::Danger)
.badge("3")
.unavailable(
"The language server is not running, so problems cannot be \
listed. Nothing here is out of date; there is nothing here.",
),
)
// The refused panel is the one on top, because a refusal
// nobody can see is a refusal nobody was told about.
.active(DockRegion::Bottom, "problems")
.on_event(|_, _, _| {}),
),
)
.child(
StatusBar::new("scene.shell.status")
.label("Workspace status")
.start([
StatusItem::text("branch", "main")
.icon(Icon::GitBranch)
.tracking(&branch),
StatusItem::state("build", "Build passing", Tone::Success),
])
.centre([StatusItem::progress("index", "Indexing the workspace")
.count(7, 12)
.state_name("loading")])
.end([
StatusItem::text("position", "Ln 42, Col 7"),
StatusItem::action("encoding", "UTF-8").on_click(|_, _| {}),
]),
)
.into_any_element()
}