dock: Fix split_panel to use async. (#214)
This commit is contained in:
parent
476f97d5e0
commit
f2d75f7abd
3 changed files with 39 additions and 48 deletions
|
|
@ -55,7 +55,10 @@ impl StoryWorkspace {
|
||||||
let dock_area = cx.new_view(|cx| DockArea::new("main-dock", stack_panel.clone(), cx));
|
let dock_area = cx.new_view(|cx| DockArea::new("main-dock", stack_panel.clone(), cx));
|
||||||
let weak_dock_area = dock_area.downgrade();
|
let weak_dock_area = dock_area.downgrade();
|
||||||
|
|
||||||
let center_tab_panel = cx.new_view(|cx| TabPanel::new(None, weak_dock_area.clone(), cx));
|
let center_tab_panel = cx.new_view(|cx| {
|
||||||
|
let stack_panel = cx.new_view(|cx| StackPanel::new(Axis::Vertical, cx));
|
||||||
|
TabPanel::new(Some(stack_panel), weak_dock_area.clone(), cx)
|
||||||
|
});
|
||||||
let left_tab_panel = cx.new_view(|cx| {
|
let left_tab_panel = cx.new_view(|cx| {
|
||||||
let stack_panel = cx.new_view(|cx| StackPanel::new(Axis::Vertical, cx));
|
let stack_panel = cx.new_view(|cx| StackPanel::new(Axis::Vertical, cx));
|
||||||
TabPanel::new(Some(stack_panel), weak_dock_area.clone(), cx)
|
TabPanel::new(Some(stack_panel), weak_dock_area.clone(), cx)
|
||||||
|
|
@ -92,8 +95,7 @@ impl StoryWorkspace {
|
||||||
None,
|
None,
|
||||||
false,
|
false,
|
||||||
cx,
|
cx,
|
||||||
)
|
);
|
||||||
.detach();
|
|
||||||
|
|
||||||
StoryContainer::add_panel(
|
StoryContainer::add_panel(
|
||||||
"Input",
|
"Input",
|
||||||
|
|
@ -104,8 +106,7 @@ impl StoryWorkspace {
|
||||||
None,
|
None,
|
||||||
false,
|
false,
|
||||||
cx,
|
cx,
|
||||||
)
|
);
|
||||||
.detach();
|
|
||||||
|
|
||||||
StoryContainer::add_panel(
|
StoryContainer::add_panel(
|
||||||
"Text",
|
"Text",
|
||||||
|
|
@ -116,8 +117,7 @@ impl StoryWorkspace {
|
||||||
Some(px(200.)),
|
Some(px(200.)),
|
||||||
true,
|
true,
|
||||||
cx,
|
cx,
|
||||||
)
|
);
|
||||||
.detach();
|
|
||||||
|
|
||||||
StoryContainer::add_panel(
|
StoryContainer::add_panel(
|
||||||
"Switch",
|
"Switch",
|
||||||
|
|
@ -128,8 +128,7 @@ impl StoryWorkspace {
|
||||||
None,
|
None,
|
||||||
true,
|
true,
|
||||||
cx,
|
cx,
|
||||||
)
|
);
|
||||||
.detach();
|
|
||||||
|
|
||||||
StoryContainer::add_panel(
|
StoryContainer::add_panel(
|
||||||
"Dropdowns",
|
"Dropdowns",
|
||||||
|
|
@ -140,8 +139,7 @@ impl StoryWorkspace {
|
||||||
None,
|
None,
|
||||||
true,
|
true,
|
||||||
cx,
|
cx,
|
||||||
)
|
);
|
||||||
.detach();
|
|
||||||
|
|
||||||
StoryContainer::add_panel(
|
StoryContainer::add_panel(
|
||||||
"Modal",
|
"Modal",
|
||||||
|
|
@ -152,8 +150,7 @@ impl StoryWorkspace {
|
||||||
None,
|
None,
|
||||||
true,
|
true,
|
||||||
cx,
|
cx,
|
||||||
)
|
);
|
||||||
.detach();
|
|
||||||
|
|
||||||
StoryContainer::add_panel(
|
StoryContainer::add_panel(
|
||||||
"Popup",
|
"Popup",
|
||||||
|
|
@ -164,20 +161,18 @@ impl StoryWorkspace {
|
||||||
None,
|
None,
|
||||||
true,
|
true,
|
||||||
cx,
|
cx,
|
||||||
)
|
);
|
||||||
.detach();
|
|
||||||
|
|
||||||
StoryContainer::add_panel(
|
StoryContainer::add_panel(
|
||||||
"Tooltip",
|
"Tooltip",
|
||||||
"Displays a short message when users hover over an element.",
|
"Displays a short message when users hover over an element.",
|
||||||
TooltipStory::view(cx).into(),
|
TooltipStory::view(cx).into(),
|
||||||
right_tab_panel.clone(),
|
right_tab_panel.clone(),
|
||||||
Some(Placement::Top),
|
None,
|
||||||
None,
|
None,
|
||||||
true,
|
true,
|
||||||
cx,
|
cx,
|
||||||
)
|
);
|
||||||
.detach();
|
|
||||||
|
|
||||||
StoryContainer::add_panel(
|
StoryContainer::add_panel(
|
||||||
"List",
|
"List",
|
||||||
|
|
@ -188,8 +183,7 @@ impl StoryWorkspace {
|
||||||
None,
|
None,
|
||||||
true,
|
true,
|
||||||
cx,
|
cx,
|
||||||
)
|
);
|
||||||
.detach();
|
|
||||||
|
|
||||||
StoryContainer::add_panel(
|
StoryContainer::add_panel(
|
||||||
"Icon",
|
"Icon",
|
||||||
|
|
@ -200,8 +194,7 @@ impl StoryWorkspace {
|
||||||
Some(px(200.)),
|
Some(px(200.)),
|
||||||
true,
|
true,
|
||||||
cx,
|
cx,
|
||||||
)
|
);
|
||||||
.detach();
|
|
||||||
|
|
||||||
StoryContainer::add_panel(
|
StoryContainer::add_panel(
|
||||||
"Image",
|
"Image",
|
||||||
|
|
@ -212,8 +205,7 @@ impl StoryWorkspace {
|
||||||
None,
|
None,
|
||||||
true,
|
true,
|
||||||
cx,
|
cx,
|
||||||
)
|
);
|
||||||
.detach();
|
|
||||||
|
|
||||||
// StoryContainer::add_panel(
|
// StoryContainer::add_panel(
|
||||||
// WebViewStory::view(cx).into(),
|
// WebViewStory::view(cx).into(),
|
||||||
|
|
@ -232,8 +224,7 @@ impl StoryWorkspace {
|
||||||
None,
|
None,
|
||||||
true,
|
true,
|
||||||
cx,
|
cx,
|
||||||
)
|
);
|
||||||
.detach();
|
|
||||||
|
|
||||||
StoryContainer::add_panel(
|
StoryContainer::add_panel(
|
||||||
"Progress",
|
"Progress",
|
||||||
|
|
@ -244,8 +235,7 @@ impl StoryWorkspace {
|
||||||
Some(px(200.)),
|
Some(px(200.)),
|
||||||
true,
|
true,
|
||||||
cx,
|
cx,
|
||||||
)
|
);
|
||||||
.detach();
|
|
||||||
|
|
||||||
StoryContainer::add_panel(
|
StoryContainer::add_panel(
|
||||||
"Resizable",
|
"Resizable",
|
||||||
|
|
@ -256,8 +246,7 @@ impl StoryWorkspace {
|
||||||
None,
|
None,
|
||||||
true,
|
true,
|
||||||
cx,
|
cx,
|
||||||
)
|
);
|
||||||
.detach();
|
|
||||||
|
|
||||||
StoryContainer::add_panel(
|
StoryContainer::add_panel(
|
||||||
"Scrollable",
|
"Scrollable",
|
||||||
|
|
@ -268,8 +257,7 @@ impl StoryWorkspace {
|
||||||
None,
|
None,
|
||||||
true,
|
true,
|
||||||
cx,
|
cx,
|
||||||
)
|
);
|
||||||
.detach();
|
|
||||||
|
|
||||||
StoryContainer::add_panel(
|
StoryContainer::add_panel(
|
||||||
"Calendar",
|
"Calendar",
|
||||||
|
|
@ -280,8 +268,7 @@ impl StoryWorkspace {
|
||||||
None,
|
None,
|
||||||
true,
|
true,
|
||||||
cx,
|
cx,
|
||||||
)
|
);
|
||||||
.detach();
|
|
||||||
|
|
||||||
let locale_selector = cx.new_view(LocaleSelector::new);
|
let locale_selector = cx.new_view(LocaleSelector::new);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -125,22 +125,19 @@ impl StoryContainer {
|
||||||
size: Option<Pixels>,
|
size: Option<Pixels>,
|
||||||
closeable: bool,
|
closeable: bool,
|
||||||
cx: &mut WindowContext,
|
cx: &mut WindowContext,
|
||||||
) -> Task<Result<View<Self>>> {
|
) {
|
||||||
let name = name.into();
|
let name = name.into();
|
||||||
let description = description.into();
|
let description = description.into();
|
||||||
|
|
||||||
cx.spawn(|mut cx| async move {
|
tab_panel.update(cx, |panel, cx| {
|
||||||
tab_panel.update(&mut cx, |panel, cx| {
|
let view = cx.new_view(|cx| Self::new(name, description, closeable, cx).story(story));
|
||||||
let view =
|
if let Some(placement) = placement {
|
||||||
cx.new_view(|cx| Self::new(name, description, closeable, cx).story(story));
|
panel.add_panel_at(Arc::new(view.clone()), placement, size, cx);
|
||||||
if let Some(placement) = placement {
|
} else {
|
||||||
panel.add_panel_at(Arc::new(view.clone()), placement, size, cx);
|
panel.add_panel(Arc::new(view.clone()), cx);
|
||||||
} else {
|
}
|
||||||
panel.add_panel(Arc::new(view.clone()), cx);
|
view
|
||||||
}
|
});
|
||||||
view
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn width(mut self, width: gpui::Pixels) -> Self {
|
pub fn width(mut self, width: gpui::Pixels) -> Self {
|
||||||
|
|
|
||||||
|
|
@ -129,7 +129,14 @@ impl TabPanel {
|
||||||
cx: &mut ViewContext<Self>,
|
cx: &mut ViewContext<Self>,
|
||||||
) {
|
) {
|
||||||
self.will_split_placement = Some(placement);
|
self.will_split_placement = Some(placement);
|
||||||
self.split_panel(panel, placement, size, cx);
|
cx.spawn(|view, mut cx| async move {
|
||||||
|
cx.update(|cx| {
|
||||||
|
view.update(cx, |view, cx| view.split_panel(panel, placement, size, cx))
|
||||||
|
.ok()
|
||||||
|
})
|
||||||
|
.ok()
|
||||||
|
})
|
||||||
|
.detach();
|
||||||
cx.notify();
|
cx.notify();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue