Skip to content

Commit 3182e10

Browse files
Properties Reorder (#180)
* [event] Add Reorder Properties Function * Adapt for Property Reordering Event * [Reorder Values] Change Function Variables To unify with future property reorder function. * [Reorder Properties] Change Function Variables To adjust to odml core lib reorder function. * [event.py] Simplify _reorder Function Variables * [event.py] Fix Section Reorder Error * [tree_model.py] Fix Section Reorder Error * [event.py] One Function for Prop/Sec Reordering * [event.py] Assure _reorder Return * [event.py] Change Comment * [tree_model.py] Remove Comment
1 parent fe352c2 commit 3182e10

File tree

3 files changed

+41
-14
lines changed

3 files changed

+41
-14
lines changed

odmlui/treemodel/event.py

+21-6
Original file line numberDiff line numberDiff line change
@@ -230,11 +230,13 @@ def insert(self, position, obj):
230230
func = lambda: super(ModificationNotifier, self).insert(position, obj)
231231
self.__fire_change("insert", obj, func)
232232

233-
def _reorder(self, childlist, value, new_index):
234-
func = lambda: super(ModificationNotifier, self)._reorder(childlist, new_index)
235-
if hasattr(self, "pseudo_values"):
236-
func = lambda: reorder_value(self.parent, value, new_index)
237-
return self.__fire_change("reorder", (childlist, value, new_index), func)
233+
def _reorder(self, obj_list, new_index):
234+
if not hasattr(self.parent, "pseudo_values"):
235+
func = lambda: reorder(self, obj_list, new_index)
236+
return self.__fire_change("reorder", (self, new_index), func)
237+
else:
238+
func = lambda: reorder_value(self, self.parent, new_index)
239+
return self.__fire_change("reorder", (self, new_index), func)
238240

239241

240242
def remove_value(prop, pseudo):
@@ -259,7 +261,7 @@ def remove_value(prop, pseudo):
259261
prop.values = cp_val
260262

261263

262-
def reorder_value(prop, value, new_index):
264+
def reorder_value(value, prop, new_index):
263265
"""
264266
Reorder a property value and its corresponding pseudo_value.
265267
:param prop: odml Property augmented to fit odml-ui.
@@ -276,6 +278,19 @@ def reorder_value(prop, value, new_index):
276278
prop.values = new_v_list
277279

278280

281+
def reorder(obj, obj_list, new_index):
282+
"""
283+
Reorder a property or section.
284+
:param obj: odml Property or Section.
285+
:param obj_list: list with parent's properties/sections.
286+
:param new_index: new position of the element.
287+
"""
288+
289+
parent = obj.parent
290+
old_index = obj_list.index(obj)
291+
parent.remove(obj_list[old_index])
292+
parent.insert(new_index if new_index < old_index else (new_index-1), obj)
293+
279294
# create a separate global Event listeners for each class
280295
# and provide ModificationNotifier Capabilities
281296
name = "event"

odmlui/treemodel/tree_model.py

+19-7
Original file line numberDiff line numberDiff line change
@@ -231,15 +231,27 @@ def event_reorder(self, context):
231231
a rows_reordered call
232232
"""
233233
if context.pre_change and not hasattr(context, "neworder"):
234-
(child_list, value, new_index) = context.val
235-
old_index = child_list.index(getattr(value, "value"))
234+
if not hasattr(context.val[0].parent, 'properties') and \
235+
not hasattr(context.val[0].parent, 'author'):
236+
(value, new_index) = context.val
237+
child_list = value.parent.values
238+
old_index = child_list.index(getattr(value, "value"))
239+
elif hasattr(context.val[0].parent, 'author'):
240+
(sec, new_index) = context.val
241+
child_list = sec.parent.sections
242+
old_index = child_list.index(sec)
243+
else:
244+
(prop, new_index) = context.val
245+
child_list = prop.parent.properties
246+
old_index = child_list.index(prop)
236247
res = list(range(len(child_list)))
237248
res.insert(new_index, old_index)
238249
del res[old_index if new_index > old_index else (old_index+1)]
239250
context.new_order = res
240251
if context.post_change:
241-
iter = self.get_node_iter(context.obj.parent)
242-
path = self.get_path(iter)
243-
if not path and context.obj.parent is not self._section:
244-
return # not our deal
245-
self.rows_reordered(path, iter, context.new_order)
252+
if context.obj.parent is not self._section:
253+
iter = self.get_node_iter(context.obj.parent)
254+
path = self.get_path(iter)
255+
if not path:
256+
return # not our deal
257+
self.rows_reordered(path, iter, context.new_order)

odmlui/treemodel/value_model.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ def get_display(self, max_length=-1):
159159
return "(%d bytes)" % len(self._value)
160160

161161
def reorder(self, new_index):
162-
return self._reorder(self.parent.values, self, new_index)
162+
return self._reorder(self.parent.values, new_index)
163163

164164
def clone(self):
165165
obj = BaseObject.clone(self)

0 commit comments

Comments
 (0)