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 @@
+
+ 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)
});