summaryrefslogtreecommitdiffstats
path: root/examples/panes/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/panes/src/main.rs')
-rw-r--r--examples/panes/src/main.rs95
1 files changed, 95 insertions, 0 deletions
diff --git a/examples/panes/src/main.rs b/examples/panes/src/main.rs
new file mode 100644
index 00000000..c1bf991a
--- /dev/null
+++ b/examples/panes/src/main.rs
@@ -0,0 +1,95 @@
+use iced::{
+ panes, Application, Command, Element, Panes, Settings, Subscription,
+};
+
+use clock::{self, Clock};
+use stopwatch::{self, Stopwatch};
+
+pub fn main() {
+ Launcher::run(Settings {
+ antialiasing: true,
+ ..Settings::default()
+ })
+}
+
+struct Launcher {
+ panes: panes::State<Example>,
+}
+
+#[derive(Debug)]
+enum Example {
+ Clock(Clock),
+ Stopwatch(Stopwatch),
+}
+
+#[derive(Debug, Clone)]
+enum Message {
+ Clock(panes::Pane, clock::Message),
+ Stopwatch(panes::Pane, stopwatch::Message),
+}
+
+impl Application for Launcher {
+ type Executor = iced::executor::Default;
+ type Message = Message;
+
+ fn new() -> (Self, Command<Message>) {
+ let (clock, _) = Clock::new();
+ let (panes, _) = panes::State::new(Example::Clock(clock));
+
+ dbg!(&panes);
+
+ (Self { panes }, Command::none())
+ }
+
+ fn title(&self) -> String {
+ String::from("Panes - Iced")
+ }
+
+ fn update(&mut self, message: Message) -> Command<Message> {
+ match message {
+ Message::Clock(pane, message) => {
+ if let Some(Example::Clock(clock)) = self.panes.get_mut(&pane) {
+ let _ = clock.update(message);
+ }
+ }
+ Message::Stopwatch(pane, message) => {
+ if let Some(Example::Stopwatch(stopwatch)) =
+ self.panes.get_mut(&pane)
+ {
+ let _ = stopwatch.update(message);
+ }
+ }
+ }
+
+ Command::none()
+ }
+
+ fn subscription(&self) -> Subscription<Message> {
+ Subscription::batch(self.panes.iter().map(|(pane, example)| {
+ match example {
+ Example::Clock(clock) => clock
+ .subscription()
+ .map(move |message| Message::Clock(pane, message)),
+
+ Example::Stopwatch(stopwatch) => stopwatch
+ .subscription()
+ .map(move |message| Message::Stopwatch(pane, message)),
+ }
+ }))
+ }
+
+ fn view(&mut self) -> Element<Message> {
+ let Self { panes } = self;
+
+ Panes::new(panes, |pane, example| match example {
+ Example::Clock(clock) => clock
+ .view()
+ .map(move |message| Message::Clock(pane, message)),
+
+ Example::Stopwatch(stopwatch) => stopwatch
+ .view()
+ .map(move |message| Message::Stopwatch(pane, message)),
+ })
+ .into()
+ }
+}