[wiican] Added drag'n'drop facilities to mapping manager dialog



commit 8453e82eabfb6b5201c7de35ba1bda207a8d5f6b
Author: J. Félix Ontañón <fontanon emergya es>
Date:   Sat Nov 27 20:01:31 2010 +0100

    Added drag'n'drop facilities to mapping manager dialog

 data/mapping.ui         |    1 +
 wiican/ui/managerdlg.py |   42 +++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 42 insertions(+), 1 deletions(-)
---
diff --git a/data/mapping.ui b/data/mapping.ui
index 07a8ad4..6b95967 100644
--- a/data/mapping.ui
+++ b/data/mapping.ui
@@ -137,6 +137,7 @@
                         <property name="search_column">1</property>
                         <property name="tooltip_column">2</property>
                         <signal name="row_activated" handler="mapping_list_row_activated_cb"/>
+                        <signal name="drag_data_received" handler="mapping_list_drag_data_received_cb"/>
                         <signal name="key_release_event" handler="mapping_list_key_release_event_cb"/>
                         <child>
                           <object class="GtkTreeViewColumn" id="treeviewcolumn3">
diff --git a/wiican/ui/managerdlg.py b/wiican/ui/managerdlg.py
index 1808d0d..fa800c5 100644
--- a/wiican/ui/managerdlg.py
+++ b/wiican/ui/managerdlg.py
@@ -52,6 +52,13 @@ class MappingManagerDialog(object):
         self.mapping_store = builder.get_object('mapping_store')
         self.mapping_list = builder.get_object('mapping_list')
 
+        # Enable Drag&Drop
+        target_entries = [('catalog', gtk.TARGET_SAME_WIDGET, 0)]
+        self.mapping_list.enable_model_drag_source(gtk.gdk.BUTTON1_MASK,
+                target_entries, gtk.gdk.ACTION_MOVE)
+        self.mapping_list.enable_model_drag_dest(target_entries, 
+                gtk.gdk.ACTION_MOVE)
+
         for mapping_id, mapping in mapping_manager.items():
             # Prevent for loading a not found icon path
             icon_path = mapping.get_icon()
@@ -60,7 +67,8 @@ class MappingManagerDialog(object):
             icon = gtk.gdk.pixbuf_new_from_file_at_size(icon_path, 24, 24)
             visible = mapping_manager.is_visible(mapping_id)
             
-            mapping_name = '<b>%s</b>\n<i>%s</i>' % (mapping.get_name(), mapping.get_comment())
+            mapping_name = '<b>%s</b>\n<i>%s</i>' % (mapping.get_name(), 
+                mapping.get_comment())
             self.mapping_store.append([icon, mapping_name, 
                 mapping.get_comment(), visible, mapping_id])
 
@@ -282,3 +290,35 @@ class MappingManagerDialog(object):
                 model.swap(selected, next)
                 mapping_manager.swap_mapping_order(model[selected][MAPPING_ID_COL], 
                     model[next][MAPPING_ID_COL])
+
+    def mapping_list_drag_data_received_cb(self, treeview, context, x, y,
+            selection, info, etime):
+
+        selection = self.mapping_list.get_selection()
+        model, selected = selection.get_selected()
+        data = [model[selected][ICON_COL], model[selected][NAME_COL], \
+            model[selected][COMMENT_COL], model[selected][VISIBLE_COL], \
+            model[selected][MAPPING_ID_COL]]
+
+        drop_info = treeview.get_dest_row_at_pos(x, y)
+        if drop_info:
+            path, position = drop_info
+            iter = model.get_iter(path)
+            if position in (gtk.TREE_VIEW_DROP_BEFORE, 
+                    gtk.TREE_VIEW_DROP_INTO_OR_BEFORE):
+                model.insert_before(iter, data)
+                mapping_manager.swap_mapping_order(model[iter][MAPPING_ID_COL],
+                        model[selected][MAPPING_ID_COL])
+            else:
+                model.insert_after(iter, data)
+                mapping_manager.swap_mapping_order(model[iter][MAPPING_ID_COL],
+                        model[selected][MAPPING_ID_COL], True)
+        else:
+            model.append(data)
+            mapping_manager.swap_mapping_order(
+                mapping_manager.options['mapping_sort'][-1],
+                model[selected][MAPPING_ID_COL], True)
+
+        if context.action == gtk.gdk.ACTION_MOVE:
+            context.finish(True, True, etime)
+        return



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]