diff options
| author | 2020-11-10 02:32:57 +0100 | |
|---|---|---|
| committer | 2020-11-10 02:32:57 +0100 | |
| commit | d6d5cf0294b1231f4909a782e90b491cc6838fae (patch) | |
| tree | 41e746cb2559df2e2c8c94715cd6bd1c9c10617e /examples/pane_grid | |
| parent | c53022e8dff6fc6286b60bc897232fe4cb6e6202 (diff) | |
| download | iced-d6d5cf0294b1231f4909a782e90b491cc6838fae.tar.gz iced-d6d5cf0294b1231f4909a782e90b491cc6838fae.tar.bz2 iced-d6d5cf0294b1231f4909a782e90b491cc6838fae.zip  | |
Restore hotkeys in `pane_grid` example
- Implement `subscription::events_with`
- Remove `pane_grid::KeyPressEvent`
- Return closest sibling in `pane_grid::State::close`
Diffstat (limited to 'examples/pane_grid')
| -rw-r--r-- | examples/pane_grid/Cargo.toml | 1 | ||||
| -rw-r--r-- | examples/pane_grid/src/main.rs | 54 | 
2 files changed, 39 insertions, 16 deletions
diff --git a/examples/pane_grid/Cargo.toml b/examples/pane_grid/Cargo.toml index 3d1631f1..e489f210 100644 --- a/examples/pane_grid/Cargo.toml +++ b/examples/pane_grid/Cargo.toml @@ -7,3 +7,4 @@ publish = false  [dependencies]  iced = { path = "../..", features = ["debug"] } +iced_native = { path = "../../native" } diff --git a/examples/pane_grid/src/main.rs b/examples/pane_grid/src/main.rs index 36485e9a..d149f9c6 100644 --- a/examples/pane_grid/src/main.rs +++ b/examples/pane_grid/src/main.rs @@ -1,8 +1,9 @@  use iced::{ -    button, keyboard, pane_grid, scrollable, Align, Button, Column, Container, -    Element, HorizontalAlignment, Length, PaneGrid, Sandbox, Scrollable, -    Settings, Text, +    button, executor, keyboard, pane_grid, scrollable, Align, Application, +    Button, Column, Command, Container, Element, HorizontalAlignment, Length, +    PaneGrid, Scrollable, Settings, Subscription, Text,  }; +use iced_native::{subscription, Event};  pub fn main() -> iced::Result {      Example::run(Settings::default()) @@ -26,24 +27,29 @@ enum Message {      CloseFocused,  } -impl Sandbox for Example { +impl Application for Example {      type Message = Message; +    type Executor = executor::Default; +    type Flags = (); -    fn new() -> Self { +    fn new(_flags: ()) -> (Self, Command<Message>) {          let (panes, _) = pane_grid::State::new(Content::new(0)); -        Example { -            panes, -            panes_created: 1, -            focus: None, -        } +        ( +            Example { +                panes, +                panes_created: 1, +                focus: None, +            }, +            Command::none(), +        )      }      fn title(&self) -> String {          String::from("Pane grid - Iced")      } -    fn update(&mut self, message: Message) { +    fn update(&mut self, message: Message) -> Command<Message> {          match message {              Message::Split(axis, pane) => {                  let result = self.panes.split( @@ -96,14 +102,30 @@ impl Sandbox for Example {              }              Message::Dragged(_) => {}              Message::Close(pane) => { -                let _ = self.panes.close(&pane); +                if let Some((_, sibling)) = self.panes.close(&pane) { +                    self.focus = Some(sibling); +                }              }              Message::CloseFocused => {                  if let Some(pane) = self.focus { -                    let _ = self.panes.close(&pane); +                    if let Some((_, sibling)) = self.panes.close(&pane) { +                        self.focus = Some(sibling); +                    }                  }              }          } + +        Command::none() +    } + +    fn subscription(&self) -> Subscription<Message> { +        subscription::events_with(|event| match event { +            Event::Keyboard(keyboard::Event::KeyPressed { +                modifiers, +                key_code, +            }) if modifiers.control => handle_hotkey(key_code), +            _ => None, +        })      }      fn view(&mut self) -> Element<Message> { @@ -137,11 +159,11 @@ impl Sandbox for Example {      }  } -fn handle_hotkey(event: pane_grid::KeyPressEvent) -> Option<Message> { +fn handle_hotkey(key_code: keyboard::KeyCode) -> Option<Message> {      use keyboard::KeyCode;      use pane_grid::{Axis, Direction}; -    let direction = match event.key_code { +    let direction = match key_code {          KeyCode::Up => Some(Direction::Up),          KeyCode::Down => Some(Direction::Down),          KeyCode::Left => Some(Direction::Left), @@ -149,7 +171,7 @@ fn handle_hotkey(event: pane_grid::KeyPressEvent) -> Option<Message> {          _ => None,      }; -    match event.key_code { +    match key_code {          KeyCode::V => Some(Message::SplitFocused(Axis::Vertical)),          KeyCode::H => Some(Message::SplitFocused(Axis::Horizontal)),          KeyCode::W => Some(Message::CloseFocused),  | 
