summaryrefslogtreecommitdiffstats
path: root/native
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-11-10 01:48:11 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-11-10 01:48:11 +0100
commit8008ea52862735aae326c8833355b3ecacb8fed1 (patch)
treea438b33deeeca3f0f92881ac44a47226e6397b0d /native
parent5681c83d3c30cfb6940de734b60e61da9571ed0b (diff)
downloadiced-8008ea52862735aae326c8833355b3ecacb8fed1.tar.gz
iced-8008ea52862735aae326c8833355b3ecacb8fed1.tar.bz2
iced-8008ea52862735aae326c8833355b3ecacb8fed1.zip
Introduce `on_click` handler in `PaneGrid`
Diffstat (limited to 'native')
-rw-r--r--native/src/widget/pane_grid.rs37
1 files changed, 26 insertions, 11 deletions
diff --git a/native/src/widget/pane_grid.rs b/native/src/widget/pane_grid.rs
index 43d57e19..584b2ba4 100644
--- a/native/src/widget/pane_grid.rs
+++ b/native/src/widget/pane_grid.rs
@@ -92,6 +92,7 @@ pub struct PaneGrid<'a, Message, Renderer: self::Renderer> {
width: Length,
height: Length,
spacing: u16,
+ on_click: Option<Box<dyn Fn(Pane) -> Message + 'a>>,
on_drag: Option<Box<dyn Fn(DragEvent) -> Message + 'a>>,
on_resize: Option<(u16, Box<dyn Fn(ResizeEvent) -> Message + 'a>)>,
}
@@ -126,6 +127,7 @@ where
width: Length::Fill,
height: Length::Fill,
spacing: 0,
+ on_click: None,
on_drag: None,
on_resize: None,
}
@@ -155,6 +157,19 @@ where
self
}
+ /// Sets the message that will be produced when a [`Pane`] of the
+ /// [`PaneGrid`] is clicked.
+ ///
+ /// [`Pane`]: struct.Pane.html
+ /// [`PaneGrid`]: struct.PaneGrid.html
+ pub fn on_click<F>(mut self, f: F) -> Self
+ where
+ F: 'a + Fn(Pane) -> Message,
+ {
+ self.on_click = Some(Box::new(f));
+ self
+ }
+
/// Enables the drag and drop interactions of the [`PaneGrid`], which will
/// use the provided function to produce messages.
///
@@ -203,21 +218,21 @@ where
);
if let Some(((pane, content), layout)) = clicked_region.next() {
- match &self.on_drag {
- Some(on_drag) => {
- if content.can_be_picked_at(layout, cursor_position) {
- let pane_position = layout.position();
+ if let Some(on_click) = &self.on_click {
+ messages.push(on_click(*pane));
+ }
- let origin = cursor_position
- - Vector::new(pane_position.x, pane_position.y);
+ if let Some(on_drag) = &self.on_drag {
+ if content.can_be_picked_at(layout, cursor_position) {
+ let pane_position = layout.position();
- self.state.pick_pane(pane, origin);
+ let origin = cursor_position
+ - Vector::new(pane_position.x, pane_position.y);
- messages
- .push(on_drag(DragEvent::Picked { pane: *pane }));
- }
+ self.state.pick_pane(pane, origin);
+
+ messages.push(on_drag(DragEvent::Picked { pane: *pane }));
}
- None => {}
}
}
}