summaryrefslogtreecommitdiffstats
path: root/examples/pane_grid
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-03-17 06:54:25 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-03-17 06:54:25 +0100
commit6f9cf6c70d8ef01446dae4d093c6e8ff2c7e7708 (patch)
tree0238e4d066d3e9c57da8a32361f68f8f5a1facd1 /examples/pane_grid
parenta280dcda23c3c3432f12776b2fe69c4ed39cd99a (diff)
downloadiced-6f9cf6c70d8ef01446dae4d093c6e8ff2c7e7708.tar.gz
iced-6f9cf6c70d8ef01446dae4d093c6e8ff2c7e7708.tar.bz2
iced-6f9cf6c70d8ef01446dae4d093c6e8ff2c7e7708.zip
Implement hotkey logic in `pane_grid` example
Diffstat (limited to 'examples/pane_grid')
-rw-r--r--examples/pane_grid/Cargo.toml1
-rw-r--r--examples/pane_grid/src/main.rs42
2 files changed, 41 insertions, 2 deletions
diff --git a/examples/pane_grid/Cargo.toml b/examples/pane_grid/Cargo.toml
index 3ed912ac..fb160a8d 100644
--- a/examples/pane_grid/Cargo.toml
+++ b/examples/pane_grid/Cargo.toml
@@ -7,3 +7,4 @@ publish = false
[dependencies]
iced = { path = "../.." }
+iced_native = { path = "../../native" }
diff --git a/examples/pane_grid/src/main.rs b/examples/pane_grid/src/main.rs
index 09969630..7ab68393 100644
--- a/examples/pane_grid/src/main.rs
+++ b/examples/pane_grid/src/main.rs
@@ -2,6 +2,7 @@ use iced::{
button, pane_grid, scrollable, Align, Button, Column, Container, Element,
HorizontalAlignment, Length, PaneGrid, Sandbox, Scrollable, Settings, Text,
};
+use iced_native::input::keyboard;
pub fn main() {
Example::run(Settings::default())
@@ -16,9 +17,11 @@ struct Example {
enum Message {
Split(pane_grid::Axis, pane_grid::Pane),
SplitFocused(pane_grid::Axis),
+ FocusAdjacent(pane_grid::Direction),
Dragged(pane_grid::DragEvent),
Resized(pane_grid::ResizeEvent),
Close(pane_grid::Pane),
+ CloseFocused,
}
impl Sandbox for Example {
@@ -59,6 +62,15 @@ impl Sandbox for Example {
self.panes_created += 1;
}
}
+ Message::FocusAdjacent(direction) => {
+ if let Some(pane) = self.panes.active() {
+ if let Some(adjacent) =
+ self.panes.adjacent(&pane, direction)
+ {
+ self.panes.focus(&adjacent);
+ }
+ }
+ }
Message::Resized(pane_grid::ResizeEvent { split, ratio }) => {
self.panes.resize(&split, ratio);
}
@@ -72,6 +84,11 @@ impl Sandbox for Example {
Message::Close(pane) => {
let _ = self.panes.close(&pane);
}
+ Message::CloseFocused => {
+ if let Some(pane) = self.panes.active() {
+ let _ = self.panes.close(&pane);
+ }
+ }
}
}
@@ -86,7 +103,8 @@ impl Sandbox for Example {
.height(Length::Fill)
.spacing(5)
.on_drag(Message::Dragged)
- .on_resize(Message::Resized);
+ .on_resize(Message::Resized)
+ .on_key_press(handle_hotkey);
Column::new()
.width(Length::Fill)
@@ -97,6 +115,26 @@ impl Sandbox for Example {
}
}
+fn handle_hotkey(key_code: keyboard::KeyCode) -> Option<Message> {
+ use keyboard::KeyCode;
+ use pane_grid::{Axis, Direction};
+
+ let direction = match key_code {
+ KeyCode::Up => Some(Direction::Up),
+ KeyCode::Down => Some(Direction::Down),
+ KeyCode::Left => Some(Direction::Left),
+ KeyCode::Right => Some(Direction::Right),
+ _ => None,
+ };
+
+ match key_code {
+ KeyCode::V => Some(Message::SplitFocused(Axis::Vertical)),
+ KeyCode::H => Some(Message::SplitFocused(Axis::Horizontal)),
+ KeyCode::W => Some(Message::CloseFocused),
+ _ => direction.map(Message::FocusAdjacent),
+ }
+}
+
struct Content {
id: usize,
scroll: scrollable::State,
@@ -189,7 +227,7 @@ mod style {
fn style(&self) -> container::Style {
container::Style {
background: Some(Background::Color(Color::WHITE)),
- border_width: 1,
+ border_width: if self.is_focused { 2 } else { 1 },
border_color: if self.is_focused {
Color::from_rgb8(0x25, 0x7A, 0xFD)
} else {