]> Untitled Git - wolf-seeking-sheep.git/blob - addons/dialogic/Modules/StyleEditor/Components/style_layer_tree.gd
Squashed commit of the following:
[wolf-seeking-sheep.git] / addons / dialogic / Modules / StyleEditor / Components / style_layer_tree.gd
1 @tool
2 extends Tree
3
4 ## Script that handles drag and drop on the layer tree.
5
6
7 signal layer_moved(from:int, to:int)
8
9 #region DRAG AND DROP
10 ################################################################################
11
12 func _get_drag_data(position:Vector2) -> Variant:
13         if get_selected() == null or get_selected() == get_root():
14                 return
15
16         if find_parent('StyleEditor').current_style.inherits != null:
17                 return
18
19         drop_mode_flags = DROP_MODE_INBETWEEN
20         var preview := Label.new()
21         preview.text = "     "+get_selected().get_text(0)
22         preview.add_theme_stylebox_override('normal', get_theme_stylebox("Background", "EditorStyles"))
23         set_drag_preview(preview)
24
25         return get_selected()
26
27
28 func _can_drop_data(position:Vector2, data:Variant) -> bool:
29         return data is TreeItem
30
31
32 func _drop_data(position:Vector2, item:Variant) -> void:
33         var to_item := get_item_at_position(position)
34         var drop_section := get_drop_section_at_position(position)
35
36         if to_item == get_root():
37                 if item.get_index() != 0:
38                         layer_moved.emit(item.get_index(), 0)
39                 return
40
41         if to_item == null:
42                 if item.get_index() != get_root().get_child_count()-1:
43                         layer_moved.emit(item.get_index(), get_root().get_child_count()-1)
44                 return
45
46         var to_idx: int = to_item.get_index()+max(0, drop_section)
47         if to_idx > item.get_index():
48                 to_idx -= 1
49
50         if to_idx != item.get_index():
51                 layer_moved.emit(item.get_index(), to_idx)
52
53 #endregion