From 2bd9a00facb90f7d76a9bdaa86ca765fb2159e71 Mon Sep 17 00:00:00 2001 From: Cristiana Voicu Date: Fri, 26 Oct 2012 16:54:47 +0300 Subject: hob: reordering the layers in the Hob Layers dialog -since the order of the layers can potentially impact the build outcome, users should be able to reorder the layers within the layers dialog; -used TreeView Drag and Drop [YOCTO #3270] Signed-off-by: Cristiana Voicu Signed-off-by: Richard Purdie --- lib/bb/ui/crumbs/hig.py | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/lib/bb/ui/crumbs/hig.py b/lib/bb/ui/crumbs/hig.py index c28fa64ad..d97308610 100644 --- a/lib/bb/ui/crumbs/hig.py +++ b/lib/bb/ui/crumbs/hig.py @@ -1501,6 +1501,13 @@ class CellRendererPixbufActivatable(gtk.CellRendererPixbuf): # class LayerSelectionDialog (CrumbsDialog): + TARGETS = [ + ("MY_TREE_MODEL_ROW", gtk.TARGET_SAME_WIDGET, 0), + ("text/plain", 0, 1), + ("TEXT", 0, 2), + ("STRING", 0, 3), + ] + def gen_label_widget(self, content): label = gtk.Label() label.set_alignment(0, 0) @@ -1564,7 +1571,17 @@ class LayerSelectionDialog (CrumbsDialog): layer_tv.set_rules_hint(True) layer_tv.set_headers_visible(False) tree_selection = layer_tv.get_selection() - tree_selection.set_mode(gtk.SELECTION_NONE) + tree_selection.set_mode(gtk.SELECTION_SINGLE) + + # Allow enable drag and drop of rows including row move + layer_tv.enable_model_drag_source( gtk.gdk.BUTTON1_MASK, + self.TARGETS, + gtk.gdk.ACTION_DEFAULT| + gtk.gdk.ACTION_MOVE) + layer_tv.enable_model_drag_dest(self.TARGETS, + gtk.gdk.ACTION_DEFAULT) + layer_tv.connect("drag_data_get", self.drag_data_get_cb) + layer_tv.connect("drag_data_received", self.drag_data_received_cb) col0= gtk.TreeViewColumn('Path') cell0 = gtk.CellRendererText() @@ -1619,6 +1636,29 @@ class LayerSelectionDialog (CrumbsDialog): return hbox, layer_store + def drag_data_get_cb(self, treeview, context, selection, target_id, etime): + treeselection = treeview.get_selection() + model, iter = treeselection.get_selected() + data = model.get_value(iter, 0) + selection.set(selection.target, 8, data) + + def drag_data_received_cb(self, treeview, context, x, y, selection, info, etime): + model = treeview.get_model() + data = selection.data + drop_info = treeview.get_dest_row_at_pos(x, y) + if drop_info: + path, position = drop_info + iter = model.get_iter(path) + if (position == gtk.TREE_VIEW_DROP_BEFORE or position == gtk.TREE_VIEW_DROP_INTO_OR_BEFORE): + model.insert_before(iter, [data]) + else: + model.insert_after(iter, [data]) + else: + model.append([data]) + if context.action == gtk.gdk.ACTION_MOVE: + context.finish(True, True, etime) + return + def add_hover_cb(self, button, event): self.im.set_from_file(hic.ICON_INDI_ADD_HOVER_FILE) -- cgit 1.2.3-korg