panel: Always not show active tab style, when the dock is collapsed. (#335)
## Before <img width="249" alt="image" src="https://github.com/user-attachments/assets/2dfee593-1a07-4b75-913b-d2e17decb67a"> ## After <img width="271" alt="image" src="https://github.com/user-attachments/assets/20752d04-1f25-498c-8e6e-4ff0f21401bf">
This commit is contained in:
parent
5c8d0d7eb4
commit
5fd2ebf522
2 changed files with 29 additions and 5 deletions
|
|
@ -111,6 +111,12 @@ impl Dock {
|
||||||
) -> Self {
|
) -> Self {
|
||||||
Self::subscribe_panel_events(dock_area.clone(), panel.clone(), cx);
|
Self::subscribe_panel_events(dock_area.clone(), panel.clone(), cx);
|
||||||
|
|
||||||
|
if !open {
|
||||||
|
panel.update(cx, |panel, cx| {
|
||||||
|
panel.set_collapsed(true, cx);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
placement,
|
placement,
|
||||||
dock_area,
|
dock_area,
|
||||||
|
|
@ -149,8 +155,7 @@ impl Dock {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn toggle_open(&mut self, cx: &mut ViewContext<Self>) {
|
pub fn toggle_open(&mut self, cx: &mut ViewContext<Self>) {
|
||||||
self.open = !self.open;
|
self.set_open(!self.open, cx);
|
||||||
cx.notify();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the size of the Dock, the size is means the width or height of
|
/// Returns the size of the Dock, the size is means the width or height of
|
||||||
|
|
@ -169,6 +174,11 @@ impl Dock {
|
||||||
/// Set the open state of the Dock.
|
/// Set the open state of the Dock.
|
||||||
pub fn set_open(&mut self, open: bool, cx: &mut ViewContext<Self>) {
|
pub fn set_open(&mut self, open: bool, cx: &mut ViewContext<Self>) {
|
||||||
self.open = open;
|
self.open = open;
|
||||||
|
cx.defer(move |this, cx| {
|
||||||
|
this.panel.update(cx, |panel, cx| {
|
||||||
|
panel.set_collapsed(!open, cx);
|
||||||
|
});
|
||||||
|
});
|
||||||
cx.notify();
|
cx.notify();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -63,12 +63,14 @@ pub struct TabPanel {
|
||||||
stack_panel: Option<View<StackPanel>>,
|
stack_panel: Option<View<StackPanel>>,
|
||||||
pub(crate) panels: Vec<Arc<dyn PanelView>>,
|
pub(crate) panels: Vec<Arc<dyn PanelView>>,
|
||||||
pub(crate) active_ix: usize,
|
pub(crate) active_ix: usize,
|
||||||
tab_bar_scroll_handle: ScrollHandle,
|
|
||||||
is_zoomed: bool,
|
|
||||||
/// If this is true, the Panel closeable will follow the active panel's closeable,
|
/// If this is true, the Panel closeable will follow the active panel's closeable,
|
||||||
/// otherwise this TabPanel will not able to close
|
/// otherwise this TabPanel will not able to close
|
||||||
pub(crate) closeable: bool,
|
pub(crate) closeable: bool,
|
||||||
|
|
||||||
|
tab_bar_scroll_handle: ScrollHandle,
|
||||||
|
is_zoomed: bool,
|
||||||
|
is_collapsed: bool,
|
||||||
|
|
||||||
/// When drag move, will get the placement of the panel to be split
|
/// When drag move, will get the placement of the panel to be split
|
||||||
will_split_placement: Option<Placement>,
|
will_split_placement: Option<Placement>,
|
||||||
}
|
}
|
||||||
|
|
@ -139,6 +141,7 @@ impl TabPanel {
|
||||||
tab_bar_scroll_handle: ScrollHandle::new(),
|
tab_bar_scroll_handle: ScrollHandle::new(),
|
||||||
will_split_placement: None,
|
will_split_placement: None,
|
||||||
is_zoomed: false,
|
is_zoomed: false,
|
||||||
|
is_collapsed: false,
|
||||||
closeable: true,
|
closeable: true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -261,6 +264,11 @@ impl TabPanel {
|
||||||
self.stack_panel.is_some()
|
self.stack_panel.is_some()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(super) fn set_collapsed(&mut self, collapsed: bool, cx: &mut ViewContext<Self>) {
|
||||||
|
self.is_collapsed = collapsed;
|
||||||
|
cx.notify();
|
||||||
|
}
|
||||||
|
|
||||||
fn render_menu_button(&self, cx: &mut ViewContext<Self>) -> impl IntoElement {
|
fn render_menu_button(&self, cx: &mut ViewContext<Self>) -> impl IntoElement {
|
||||||
let closeable = self.closeable(cx);
|
let closeable = self.closeable(cx);
|
||||||
let zoomable = self.zoomable(cx);
|
let zoomable = self.zoomable(cx);
|
||||||
|
|
@ -542,7 +550,13 @@ impl TabPanel {
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.children(self.panels.iter().enumerate().map(|(ix, panel)| {
|
.children(self.panels.iter().enumerate().map(|(ix, panel)| {
|
||||||
let active = ix == self.active_ix;
|
let mut active = ix == self.active_ix;
|
||||||
|
|
||||||
|
// Always not show active tab style, if the panel is collapsed
|
||||||
|
if self.is_collapsed {
|
||||||
|
active = false;
|
||||||
|
}
|
||||||
|
|
||||||
Tab::new(("tab", ix), panel.title(cx))
|
Tab::new(("tab", ix), panel.title(cx))
|
||||||
.py_2()
|
.py_2()
|
||||||
.selected(active)
|
.selected(active)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue