From 295c970dced68244545508dda5e5c352813145f0 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?= <pin@cri.ensmp.fr>
Date: Thu, 9 Oct 2014 17:53:39 +0200
Subject: [PATCH 1/1] =?utf8?q?Impl=C3=A9mentation=20du=20d=C3=A9placement?=
 =?utf8?q?=20d'une=20s=C3=A9lection=20au=20del=C3=A0=20de=20la=20position?=
 =?utf8?q?=20du=20dernier=20=C3=A9l=C3=A9ment.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

---
 HugePlinnFolder.py | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/HugePlinnFolder.py b/HugePlinnFolder.py
index 563bf18..d158fdd 100644
--- a/HugePlinnFolder.py
+++ b/HugePlinnFolder.py
@@ -138,6 +138,8 @@ class HugePlinnFolder(BTreeFolder2Base, PlinnFolder) :
     def moveObjectsAfter(self, ids, targetId, suppress_events=False):
         assert targetId not in ids
 
+        # id2pos = dict(self._id2pos_index).copy()
+        # pos2id = dict(self._pos2id_index).copy()
         id2pos = self._id2pos_index
         pos2id = self._pos2id_index
         targetPos = id2pos[targetId]
@@ -150,8 +152,8 @@ class HugePlinnFolder(BTreeFolder2Base, PlinnFolder) :
         id2posUpdate = {}
         pos2idUpdate = {}
 
-        # moved before the firt item position
         if targetPos < minMovedPos :
+            # selection moved before the first item position
             for i, id in enumerate(ids) :
                 pos = i + targetPos + 1
                 id2posUpdate[id] = pos
@@ -167,9 +169,18 @@ class HugePlinnFolder(BTreeFolder2Base, PlinnFolder) :
             print "déposé entre la première et la dernière de la sélection"
             raise NotImplementedError()
         else :
-            print minMovedPos, maxMovedPos, targetPos
-            print "déposé après la dernière"
-            raise NotImplementedError()
+            # selection moved after the last item position
+            pos = minMovedPos
+            for id in IndexIterator(pos2id, targetPos, start=minMovedPos+1) :
+                id2posUpdate[id] = pos
+                pos2idUpdate[pos] = id
+                pos += 1
+            
+            pos = targetPos - len(ids) + 1
+            for id in ids :
+                id2posUpdate[id] = pos
+                pos2idUpdate[pos] = id
+                pos +=1
         
         id2pos.update(id2posUpdate)
         pos2id.update(pos2idUpdate)
@@ -178,6 +189,7 @@ class HugePlinnFolder(BTreeFolder2Base, PlinnFolder) :
         for pos in xrange(len(self)) :
             assert pos2id.has_key(pos)
             assert id2pos.has_key(pos2id[pos])
+        
         if not suppress_events :
             for id, pos in id2posUpdate.items() :
                 notify(ObjectPositionModified(self[id], self, pos))
-- 
2.20.1