From fe5e4ed044b3d2c5be57849904a9fbe6f7004325 Mon Sep 17 00:00:00 2001 From: Savanni D'Gerinel Date: Thu, 28 Dec 2023 12:59:29 -0500 Subject: [PATCH] Save the views as their original widgets This allows me to directly reference functions that occur on those widgets without losing them behind a gtk::Widget upcast or needing to later downcast them. --- fitnesstrax/app/src/app_window.rs | 6 +++--- fitnesstrax/app/src/views/mod.rs | 16 +++++++++------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/fitnesstrax/app/src/app_window.rs b/fitnesstrax/app/src/app_window.rs index 081c755..2d8722e 100644 --- a/fitnesstrax/app/src/app_window.rs +++ b/fitnesstrax/app/src/app_window.rs @@ -87,7 +87,7 @@ impl AppWindow { let initial_view = View::Placeholder(PlaceholderView::new().upcast()); layout.append(&header); - layout.append(initial_view.widget()); + layout.append(&initial_view.widget()); window.set_content(Some(&layout)); window.present(); @@ -130,9 +130,9 @@ impl AppWindow { // position. fn swap_main(&self, view: View) { let mut current_widget = self.current_view.borrow_mut(); - self.layout.remove(&*current_widget.widget()); + self.layout.remove(¤t_widget.widget()); *current_widget = view; - self.layout.append(&*current_widget.widget()); + self.layout.append(¤t_widget.widget()); } fn construct_view(&self, view: ViewName) -> View { diff --git a/fitnesstrax/app/src/views/mod.rs b/fitnesstrax/app/src/views/mod.rs index 511d2ce..123929f 100644 --- a/fitnesstrax/app/src/views/mod.rs +++ b/fitnesstrax/app/src/views/mod.rs @@ -14,6 +14,8 @@ General Public License for more details. You should have received a copy of the GNU General Public License along with FitnessTrax. If not, see . */ +use gtk::prelude::*; + mod historical_view; pub use historical_view::HistoricalView; @@ -30,17 +32,17 @@ pub enum ViewName { } pub enum View { - Placeholder(gtk::Widget), - Welcome(gtk::Widget), - Historical(gtk::Widget), + Placeholder(PlaceholderView), + Welcome(WelcomeView), + Historical(HistoricalView), } impl View { - pub fn widget<'a>(&'a self) -> &'a gtk::Widget { + pub fn widget(&self) -> gtk::Widget { match self { - View::Placeholder(widget) => widget, - View::Welcome(widget) => widget, - View::Historical(widget) => widget, + View::Placeholder(widget) => widget.clone().upcast::(), + View::Welcome(widget) => widget.clone().upcast::(), + View::Historical(widget) => widget.clone().upcast::(), } } }