From 1ac3fe69e3f87cb16f4e115350dc43ff2187604d Mon Sep 17 00:00:00 2001 From: "Leon Yang (Containers)" Date: Fri, 26 Apr 2024 07:11:10 -0700 Subject: Make viewrc part of view state Summary: As title. This makes it easy to access viewrc from any view. Reviewed By: brianc118 Differential Revision: D56504776 fbshipit-source-id: 69ed566e17d8dbc04f2678ca4c07bf5cd0a28ee6 --- below/view/src/cgroup_view.rs | 13 ++++++------- below/view/src/lib.rs | 42 +++++++++++++++++++++++++++++++++++------- below/view/src/viewrc.rs | 2 +- 3 files changed, 42 insertions(+), 15 deletions(-) diff --git a/below/view/src/cgroup_view.rs b/below/view/src/cgroup_view.rs index 011a64e2..2e843ae5 100644 --- a/below/view/src/cgroup_view.rs +++ b/below/view/src/cgroup_view.rs @@ -39,7 +39,6 @@ use crate::stats_view::ColumnTitles; use crate::stats_view::StateCommon; use crate::stats_view::StatsView; use crate::stats_view::ViewBridge; -use crate::viewrc::ViewRc; use crate::ViewState; pub type ViewType = StatsView; @@ -200,7 +199,7 @@ pub struct CgroupView { } impl CgroupView { - pub fn new(c: &mut Cursive, viewrc: &ViewRc) -> NamedView { + pub fn new(c: &mut Cursive) -> NamedView { let mut list = SelectView::new(); list.set_on_submit(|c, cgroup: &String| { let mut view = CgroupView::get_cgroup_view(c); @@ -241,8 +240,11 @@ impl CgroupView { view.refresh(c); }); + let user_data = c + .user_data::() + .expect("No data stored in Cursive Object!"); let cgroup_name_config = base_render::RenderConfig { - width: viewrc.cgroup_name_width, + width: user_data.viewrc.cgroup_name_width, ..Default::default() }; let tabs = vec![ @@ -290,11 +292,8 @@ impl CgroupView { tab: CgroupTab::new(default_tabs::get_properties_items(), &cgroup_name_config), }, ); - let user_data = c - .user_data::() - .expect("No data stored in Cursive Object!"); let mut cgroup_state = CgroupState::new(user_data.cgroup.clone()); - if viewrc.collapse_cgroups == Some(true) { + if user_data.viewrc.collapse_cgroups == Some(true) { cgroup_state.collapse_all_top_level_cgroup = true; } StatsView::new( diff --git a/below/view/src/lib.rs b/below/view/src/lib.rs index 8ecb2440..6b456148 100644 --- a/below/view/src/lib.rs +++ b/below/view/src/lib.rs @@ -88,6 +88,7 @@ use model::ProcessModel; use model::SystemModel; use store::Advance; use toml::value::Value; +use viewrc::ViewRc; extern crate render as base_render; open_source_shim!(); @@ -248,6 +249,8 @@ pub struct ViewState { pub main_view_state: MainViewState, pub main_view_screens: HashMap, pub mode: ViewMode, + pub viewrc: ViewRc, + pub viewrc_error: Option, pub event_controllers: Rc>>, pub cmd_controllers: Rc>>, } @@ -267,7 +270,13 @@ impl ViewState { self.gpu.replace(model.gpu); } - pub fn new_with_advance(main_view_state: MainViewState, model: Model, mode: ViewMode) -> Self { + pub fn new_with_advance( + main_view_state: MainViewState, + model: Model, + mode: ViewMode, + viewrc: ViewRc, + viewrc_error: Option, + ) -> Self { Self { time_elapsed: model.time_elapsed, lowest_time_elapsed: model.time_elapsed, @@ -281,6 +290,8 @@ impl ViewState { main_view_state, main_view_screens: HashMap::new(), mode, + viewrc, + viewrc_error, event_controllers: Rc::new(RefCell::new(HashMap::new())), cmd_controllers: Rc::new(RefCell::new(controllers::make_cmd_controller_map())), } @@ -312,10 +323,13 @@ impl View { execute!(std::io::stdout(), DisableMouseCapture).expect("Failed to disable mouse."); backend }); + let (viewrc, viewrc_error) = viewrc::ViewRc::new(); inner.set_user_data(ViewState::new_with_advance( MainViewState::Cgroup, model, mode, + viewrc, + viewrc_error, )); View { inner } } @@ -352,8 +366,6 @@ impl View { } pub fn run(&mut self) -> Result<()> { - let (viewrc, viewrc_error) = viewrc::ViewRc::new(); - let mut theme = self.inner.current_theme().clone(); theme.palette[PaletteColor::Background] = Color::TerminalDefault; theme.palette[PaletteColor::View] = Color::TerminalDefault; @@ -404,7 +416,7 @@ impl View { let status_bar = status_bar::new(&mut self.inner); let summary_view = summary_view::new(&mut self.inner); - let cgroup_view = cgroup_view::CgroupView::new(&mut self.inner, &viewrc); + let cgroup_view = cgroup_view::CgroupView::new(&mut self.inner); let process_view = process_view::ProcessView::new(&mut self.inner); let system_view = system_view::SystemView::new(&mut self.inner); #[cfg(fbcode_build)] @@ -452,7 +464,14 @@ impl View { .expect("Could not set focus at initialization!"); // Set default view from viewrc - if let Some(view) = &viewrc.default_view { + if let Some(view) = self + .inner + .user_data::() + .expect("No data stored in Cursive object!") + .viewrc + .default_view + .clone() + { let main_view_state = &mut self .inner .user_data::() @@ -476,7 +495,13 @@ impl View { // Raise warning message if failed to map the customized command. Self::generate_event_controller_map(&mut self.inner, get_belowrc_filename()); - if let Some(msg) = viewrc_error { + if let Some(msg) = &self + .inner + .user_data::() + .expect("No data stored in Cursive object!") + .viewrc_error + { + let msg = msg.clone(); let c = &mut self.inner; view_warn!(c, "{}", msg); } @@ -502,6 +527,7 @@ pub mod fake_view { use model::Collector; use store::advance::new_advance_local; + use self::viewrc::ViewRc; use super::*; use crate::cgroup_view::CgroupView; use crate::command_palette::CommandPalette; @@ -529,6 +555,8 @@ pub mod fake_view { MainViewState::Cgroup, model, ViewMode::Live(Rc::new(RefCell::new(advance))), + ViewRc::default(), + None, ); // Dummy screen to make switching panel no-op except state changes. inner.add_layer( @@ -547,7 +575,7 @@ pub mod fake_view { } pub fn add_cgroup_view(&mut self) { - let cgroup_view = CgroupView::new(&mut self.inner, &Default::default()); + let cgroup_view = CgroupView::new(&mut self.inner); self.inner.add_layer(cgroup_view); } diff --git a/below/view/src/viewrc.rs b/below/view/src/viewrc.rs index a61a92b3..356eb105 100644 --- a/below/view/src/viewrc.rs +++ b/below/view/src/viewrc.rs @@ -20,7 +20,7 @@ use super::get_belowrc_view_section_key; /// Enum of supported front view. // We didn't re-use the MainViewState because we don't want to // expose internal state like Process(ProcessZoomState::Cgroup) -#[derive(Deserialize)] +#[derive(Clone, Deserialize)] #[serde(rename_all = "lowercase")] pub enum DefaultFrontView { Cgroup, -- cgit v1.2.3