Hi klaas, thank you for this answer.
Yeah, that's what I figured. So I implemented two methods:
func move_before(item_to_move : TreeItem, target_item : TreeItem) -> void:
var nb_next_item : int = count_next(target_item)
if !target_item.get_prev():
item_to_move.move_to_top()
else:
item_to_move.move_to_bottom()
item_to_move = target_item
for item in range(0, nb_next_item):
var next = item_to_move.get_next()
item_to_move.move_to_bottom()
item_to_move = next
func move_after(item_to_move : TreeItem, target_item : TreeItem) -> void:
var nb_prev_item : int = count_prev(target_item)
if !target_item.get_next():
item_to_move.move_to_bottom()
else:
item_to_move.move_to_top()
item_to_move = target_item
for item in range(0, nb_prev_item):
var prev = item_to_move.get_prev()
item_to_move.move_to_top()
item_to_move = prev