Update pane_grid example w/ maximize / restore
This commit is contained in:
parent
b761ab5e1d
commit
e28c441c69
1 changed files with 35 additions and 5 deletions
|
|
@ -29,6 +29,8 @@ enum Message {
|
||||||
Dragged(pane_grid::DragEvent),
|
Dragged(pane_grid::DragEvent),
|
||||||
Resized(pane_grid::ResizeEvent),
|
Resized(pane_grid::ResizeEvent),
|
||||||
TogglePin(pane_grid::Pane),
|
TogglePin(pane_grid::Pane),
|
||||||
|
Maximize(pane_grid::Pane),
|
||||||
|
Restore,
|
||||||
Close(pane_grid::Pane),
|
Close(pane_grid::Pane),
|
||||||
CloseFocused,
|
CloseFocused,
|
||||||
}
|
}
|
||||||
|
|
@ -114,6 +116,10 @@ impl Application for Example {
|
||||||
*is_pinned = !*is_pinned;
|
*is_pinned = !*is_pinned;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Message::Maximize(pane) => self.panes.maximize(&pane),
|
||||||
|
Message::Restore => {
|
||||||
|
self.panes.restore();
|
||||||
|
}
|
||||||
Message::Close(pane) => {
|
Message::Close(pane) => {
|
||||||
if let Some((_, sibling)) = self.panes.close(&pane) {
|
if let Some((_, sibling)) = self.panes.close(&pane) {
|
||||||
self.focus = Some(sibling);
|
self.focus = Some(sibling);
|
||||||
|
|
@ -157,7 +163,7 @@ impl Application for Example {
|
||||||
let focus = self.focus;
|
let focus = self.focus;
|
||||||
let total_panes = self.panes.len();
|
let total_panes = self.panes.len();
|
||||||
|
|
||||||
let pane_grid = PaneGrid::new(&self.panes, |id, pane| {
|
let pane_grid = PaneGrid::new(&self.panes, |id, pane, is_maximized| {
|
||||||
let is_focused = focus == Some(id);
|
let is_focused = focus == Some(id);
|
||||||
|
|
||||||
let pin_button = button(
|
let pin_button = button(
|
||||||
|
|
@ -178,7 +184,12 @@ impl Application for Example {
|
||||||
.spacing(5);
|
.spacing(5);
|
||||||
|
|
||||||
let title_bar = pane_grid::TitleBar::new(title)
|
let title_bar = pane_grid::TitleBar::new(title)
|
||||||
.controls(view_controls(id, total_panes, pane.is_pinned))
|
.controls(view_controls(
|
||||||
|
id,
|
||||||
|
total_panes,
|
||||||
|
pane.is_pinned,
|
||||||
|
is_maximized,
|
||||||
|
))
|
||||||
.padding(10)
|
.padding(10)
|
||||||
.style(if is_focused {
|
.style(if is_focused {
|
||||||
style::title_bar_focused
|
style::title_bar_focused
|
||||||
|
|
@ -314,16 +325,35 @@ fn view_controls<'a>(
|
||||||
pane: pane_grid::Pane,
|
pane: pane_grid::Pane,
|
||||||
total_panes: usize,
|
total_panes: usize,
|
||||||
is_pinned: bool,
|
is_pinned: bool,
|
||||||
|
is_maximized: bool,
|
||||||
) -> Element<'a, Message> {
|
) -> Element<'a, Message> {
|
||||||
let mut button = button(text("Close").size(14))
|
let mut row = row![].spacing(5);
|
||||||
|
|
||||||
|
if total_panes > 1 {
|
||||||
|
let toggle = {
|
||||||
|
let (content, message) = if is_maximized {
|
||||||
|
("Restore", Message::Restore)
|
||||||
|
} else {
|
||||||
|
("Maximize", Message::Maximize(pane))
|
||||||
|
};
|
||||||
|
button(text(content).size(14))
|
||||||
|
.style(theme::Button::Secondary)
|
||||||
|
.padding(3)
|
||||||
|
.on_press(message)
|
||||||
|
};
|
||||||
|
|
||||||
|
row = row.push(toggle);
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut close = button(text("Close").size(14))
|
||||||
.style(theme::Button::Destructive)
|
.style(theme::Button::Destructive)
|
||||||
.padding(3);
|
.padding(3);
|
||||||
|
|
||||||
if total_panes > 1 && !is_pinned {
|
if total_panes > 1 && !is_pinned {
|
||||||
button = button.on_press(Message::Close(pane));
|
close = close.on_press(Message::Close(pane));
|
||||||
}
|
}
|
||||||
|
|
||||||
button.into()
|
row.push(close).into()
|
||||||
}
|
}
|
||||||
|
|
||||||
mod style {
|
mod style {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue