From 40b079c8e151416283f956857a6047c38d69b768 Mon Sep 17 00:00:00 2001 From: Artus Date: Thu, 6 Jun 2019 21:46:03 +0200 Subject: [PATCH] cleaner refactoring --- res/cell.glade | 27 +++++++++++++++++++------- src/grid.rs | 52 ++++++++++++++++++++++++-------------------------- 2 files changed, 45 insertions(+), 34 deletions(-) diff --git a/res/cell.glade b/res/cell.glade index 365e341..d3e5d33 100644 --- a/res/cell.glade +++ b/res/cell.glade @@ -11,8 +11,9 @@ True False - 3 - 3 + 2 + 2 + 2 2 0.94999998807907104 0.20000000298023224 @@ -44,14 +45,19 @@ - - Desc. + + True True - False - center + True + end end + 5 5 - none + none + desc_sheet + + + False @@ -77,4 +83,11 @@ + + False + desc_btn + + + + diff --git a/src/grid.rs b/src/grid.rs index fded9ae..eb1bf90 100644 --- a/src/grid.rs +++ b/src/grid.rs @@ -24,7 +24,7 @@ impl Grid { } } - +#[derive(Debug,Clone)] struct CellWidget { eventbox: gtk::EventBox, position: gtk::Label, @@ -69,9 +69,16 @@ impl CellWidget { &targets, gdk::DragAction::MOVE, ); - let h = header.clone(); + let cell = CellWidget { + eventbox, + position, + header, + desc_btn + }; + + let h = cell.header.clone(); // Send data to the drop site - eventbox.connect_drag_data_get( + cell.eventbox.connect_drag_data_get( move |_,_,data,info,time| { println!("Send..."); if let Some(to_send) = h.get_text() { @@ -79,72 +86,63 @@ impl CellWidget { } } ); - let h = header.clone(); - let b = desc_btn.clone(); + let c = cell.clone(); // Empty the cell on successfull move - eventbox.connect_drag_data_delete( + cell.eventbox.connect_drag_data_delete( move |w,drag| { println!("Cleaning... {:#?}", (&drag.drag_drop_succeeded())); - Self::set_content((&h,&b), None); + Self::set_content(&c, None); } ); - eventbox.drag_dest_set( + cell.eventbox.drag_dest_set( gtk::DestDefaults::ALL, &targets, gdk::DragAction::MOVE, ); // Retrieve data from the source - let h = header.clone(); - let b = desc_btn.clone(); - eventbox.connect_drag_data_received( + let c = cell.clone(); + cell.eventbox.connect_drag_data_received( move |w,_,_,_,data,_,_| { // Check if cell is not already occupied - if !(h.get_text().unwrap().as_str() == "") { + if !(c.header.get_text().unwrap().as_str() == "") { // TODO: Find what to do to abort, since // DragContext methods don't seem to work... println!("Overriding !!"); } else { println!("Dropped !"); if let Some(text) = data.get_text() { - Self::set_content((&h,&b), Some(text.as_str())); + Self::set_content(&c, Some(text.as_str())); } else { eprintln!("No data !"); } }; } ); - let cell = CellWidget { - eventbox, - position, - header, - desc_btn - }; cell } /// Updates content of the Cell - fn set_content(widgets: (>k::Label, >k::Button), data: Option<&str>) { + fn set_content(&self, data: Option<&str>) { println!("Set content to {:?}", &data); // TODO: there is surely something cleaner... if let Some(name) = data { - widgets.0.set_text(name); - widgets.1.set_visible(true); + self.header.set_text(name); + self.desc_btn.set_visible(true); } else { - widgets.0.set_text(""); - widgets.1.set_visible(false); + self.header.set_text(""); + self.desc_btn.set_visible(false); }; } pub fn connect_clicked(&self, state: AppState) { - let header = self.header.clone(); - let btn = self.desc_btn.clone(); + let c = self.clone(); self.eventbox .connect_button_press_event(move |_,_| { let mut state = state.borrow_mut(); if let Some(ref data) = state.pending.take() { println!("{:?}", data); - Self::set_content((&header,&btn), Some(&data.name)); + Self::set_content(&c, Some(&data.name)); }; gtk::Inhibit(true) });