From 1fefb24af0f03f6c0512d3b1d3fad7f943c6edd3 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sat, 30 Jan 2021 13:01:05 +0100 Subject: Add opening of a mail on the right side Signed-off-by: Matthias Beyer --- src/tabs.rs | 2 ++ src/views/maillist.rs | 17 ++++++++++++----- src/views/main.rs | 28 ++++++++++++++++++++-------- 3 files changed, 34 insertions(+), 13 deletions(-) diff --git a/src/tabs.rs b/src/tabs.rs index 8132f1c..3f8f97d 100644 --- a/src/tabs.rs +++ b/src/tabs.rs @@ -102,7 +102,9 @@ impl View for Tabs { } +#[derive(getset::Getters, getset::MutGetters)] pub struct Tab { + #[getset(get = "pub", get_mut = "pub")] mux: cursive_multiplex::Mux, nodes: Vec, rt: Rc, diff --git a/src/views/maillist.rs b/src/views/maillist.rs index 4f68790..303efe6 100644 --- a/src/views/maillist.rs +++ b/src/views/maillist.rs @@ -83,17 +83,23 @@ impl MaillistView { .items(items) .selected_item(0) .on_submit(move |siv: &mut Cursive, row: usize, _: usize| { + debug!("Submit: row = {}", row); let (mail_id, filename) = siv.call_on_name(crate::views::main::MAIN_VIEW_NAME, move |main: &mut crate::views::main::MainView| { + debug!("Got main view."); main.get_current_mux() .map(|mux| { - if let Some(table) = mux.downcast_ref::>() { - table + debug!("Got mux view."); + if let Some(ml) = mux.downcast_ref::() { + debug!("Got table, finding item now."); + ml.view + .get_inner() .borrow_item(row) .map(|data| { - debug!("Opening: {:?}", data); + debug!("Found item: {:?}", data); (data.mail_id.clone(), data.filename.clone()) }) } else { + debug!("Did not find table."); unimplemented!() } }) @@ -107,8 +113,9 @@ impl MaillistView { siv.call_on_name(crate::views::main::MAIN_VIEW_NAME , move |main: &mut crate::views::main::MainView| { main.get_current_tab_mut() - .map(|mux: &mut cursive_multiplex::Mux| { - mux.add_right_of(mv, mux.focus()); + .map(|tab: &mut crate::tabs::Tab| { + let foc = tab.mux().focus(); + tab.mux_mut().add_right_of(mv, foc); }) }); diff --git a/src/views/main.rs b/src/views/main.rs index 98b8849..e1e9f1d 100644 --- a/src/views/main.rs +++ b/src/views/main.rs @@ -43,35 +43,47 @@ impl MainView { self.tabs.add_tab_for_query(self.rt.clone(), query) } - pub fn get_current_tab(&self) -> Option<&cursive_multiplex::Mux> { + pub fn get_current_tab(&self) -> Option<&crate::tabs::Tab> { + debug!("Getting current tab"); if let Some(mux) = self.tabs.get_active_tab() { - mux.downcast_ref::() + debug!("Found current tab, returning mux: {:?}", mux.type_id()); + mux.downcast_ref::() } else { + debug!("No current tab found"); None } } pub fn get_current_mux(&self) -> Option<&Box> { - if let Some(mux) = self.get_current_tab() { - return mux.get_current_view() + debug!("Get current mux"); + if let Some(tab) = self.get_current_tab() { + debug!("Some(mux) found, getting current view"); + return tab.mux().get_current_view() } + debug!("No mux found"); None } - pub fn get_current_tab_mut(&mut self) -> Option<&mut cursive_multiplex::Mux> { + pub fn get_current_tab_mut(&mut self) -> Option<&mut crate::tabs::Tab> { + debug!("Getting current tab (mut)"); if let Some(mux) = self.tabs.get_active_tab_mut() { - mux.downcast_mut::() + debug!("Got current tab (mut), casting ot crate::tabs::Tab"); + mux.downcast_mut::() } else { + debug!("Did not get current tab (mut)"); None } } pub fn get_current_mux_mut(&mut self) -> Option<&mut Box> { - if let Some(mut mux) = self.get_current_tab_mut() { - return mux.get_current_view_mut() + debug!("Getting current tab (mut)"); + if let Some(mut tab) = self.get_current_tab_mut() { + debug!("Got current tab (mut), getting view from mux (mut)"); + return tab.mux_mut().get_current_view_mut() } + debug!("Did not get current tab (mut))"); None } -- cgit v1.2.3