diff --git a/odmlui/treemodel/event.py b/odmlui/treemodel/event.py index dcab9d5..242477d 100644 --- a/odmlui/treemodel/event.py +++ b/odmlui/treemodel/event.py @@ -230,11 +230,13 @@ def insert(self, position, obj): func = lambda: super(ModificationNotifier, self).insert(position, obj) self.__fire_change("insert", obj, func) - def _reorder(self, childlist, value, new_index): - func = lambda: super(ModificationNotifier, self)._reorder(childlist, new_index) - if hasattr(self, "pseudo_values"): - func = lambda: reorder_value(self.parent, value, new_index) - return self.__fire_change("reorder", (childlist, value, new_index), func) + def _reorder(self, obj_list, new_index): + if not hasattr(self.parent, "pseudo_values"): + func = lambda: reorder(self, obj_list, new_index) + return self.__fire_change("reorder", (self, new_index), func) + else: + func = lambda: reorder_value(self, self.parent, new_index) + return self.__fire_change("reorder", (self, new_index), func) def remove_value(prop, pseudo): @@ -259,7 +261,7 @@ def remove_value(prop, pseudo): prop.values = cp_val -def reorder_value(prop, value, new_index): +def reorder_value(value, prop, new_index): """ Reorder a property value and its corresponding pseudo_value. :param prop: odml Property augmented to fit odml-ui. @@ -276,6 +278,19 @@ def reorder_value(prop, value, new_index): prop.values = new_v_list +def reorder(obj, obj_list, new_index): + """ + Reorder a property or section. + :param obj: odml Property or Section. + :param obj_list: list with parent's properties/sections. + :param new_index: new position of the element. + """ + + parent = obj.parent + old_index = obj_list.index(obj) + parent.remove(obj_list[old_index]) + parent.insert(new_index if new_index < old_index else (new_index-1), obj) + # create a separate global Event listeners for each class # and provide ModificationNotifier Capabilities name = "event" diff --git a/odmlui/treemodel/tree_model.py b/odmlui/treemodel/tree_model.py index 196c16d..98e7e00 100644 --- a/odmlui/treemodel/tree_model.py +++ b/odmlui/treemodel/tree_model.py @@ -231,15 +231,27 @@ def event_reorder(self, context): a rows_reordered call """ if context.pre_change and not hasattr(context, "neworder"): - (child_list, value, new_index) = context.val - old_index = child_list.index(getattr(value, "value")) + if not hasattr(context.val[0].parent, 'properties') and \ + not hasattr(context.val[0].parent, 'author'): + (value, new_index) = context.val + child_list = value.parent.values + old_index = child_list.index(getattr(value, "value")) + elif hasattr(context.val[0].parent, 'author'): + (sec, new_index) = context.val + child_list = sec.parent.sections + old_index = child_list.index(sec) + else: + (prop, new_index) = context.val + child_list = prop.parent.properties + old_index = child_list.index(prop) res = list(range(len(child_list))) res.insert(new_index, old_index) del res[old_index if new_index > old_index else (old_index+1)] context.new_order = res if context.post_change: - iter = self.get_node_iter(context.obj.parent) - path = self.get_path(iter) - if not path and context.obj.parent is not self._section: - return # not our deal - self.rows_reordered(path, iter, context.new_order) + if context.obj.parent is not self._section: + iter = self.get_node_iter(context.obj.parent) + path = self.get_path(iter) + if not path: + return # not our deal + self.rows_reordered(path, iter, context.new_order) diff --git a/odmlui/treemodel/value_model.py b/odmlui/treemodel/value_model.py index e376b74..221533a 100644 --- a/odmlui/treemodel/value_model.py +++ b/odmlui/treemodel/value_model.py @@ -159,7 +159,7 @@ def get_display(self, max_length=-1): return "(%d bytes)" % len(self._value) def reorder(self, new_index): - return self._reorder(self.parent.values, self, new_index) + return self._reorder(self.parent.values, new_index) def clone(self): obj = BaseObject.clone(self)