diff --git a/addons/project_map/plugin.cfg b/addons/project_map/plugin.cfg index 657be8c..5b17788 100644 --- a/addons/project_map/plugin.cfg +++ b/addons/project_map/plugin.cfg @@ -3,5 +3,5 @@ name="Project Map" description="Organize Project Files" author="Joel Fivat" -version="1.2" +version="1.3" script="plugin.gd" diff --git a/addons/project_map/pm_comment_node.gd b/addons/project_map/pm_comment_node.gd index c47d00f..4b9c0ba 100644 --- a/addons/project_map/pm_comment_node.gd +++ b/addons/project_map/pm_comment_node.gd @@ -1,11 +1,15 @@ tool -extends CommonNode +extends "res://addons/project_map/pm_common_node.gd" var icon = NodePath("MarginContainer/HBox/Icon") export(String) var comment_text = "Comment \n\n Use the handle to resize" export(Vector2) var comment_rect = Vector2(400, 200) +onready var text_node = get_node("MarginContainer/HBox/TextBox") + +var last_text:String = "" + func _enter_tree(): connect("resize_request", self, "_on_GraphNode_resize_request") @@ -14,6 +18,9 @@ func _enter_tree(): connect("mouse_entered", self, "_on_Node_mouse_entered") connect("mouse_exited", self, "_on_Node_mouse_exited") + rect_min_size = Vector2(50,50) + rect_size = Vector2(50,50) + func _on_Node_mouse_entered(): resizable = true @@ -26,8 +33,10 @@ func _on_Node_mouse_exited(): func _ready(): - get_node("MarginContainer/HBox/TextBox").text = comment_text + text_node.text = comment_text + resize(comment_rect) + snap = false pass @@ -37,57 +46,23 @@ func init(): func resize(size): - rect_min_size = size - rect_size = size + comment_rect = size + + $MarginContainer.rect_min_size = Vector2(comment_rect.x - 60, comment_rect.y - 40) + $MarginContainer.rect_size = Vector2(comment_rect.x - 60, comment_rect.y - 40) + + rect_min_size = comment_rect + rect_size = comment_rect + + get_parent().dirty = true - $MarginContainer.rect_min_size = Vector2(size.x - 60, size.y - 40) func _on_GraphNode_resize_request(new_minsize:Vector2): resize(new_minsize) - comment_rect = new_minsize get_parent().dirty = true -##drag the group node using the icon -#func _on_Icon_gui_input(event): -# -# #click node -# if event is InputEventMouseButton and event.button_index == BUTTON_LEFT: -# -# #drag start -# if event.pressed: -# -# selected = true -# drag_start = offset -# mouse_drag_start = get_local_mouse_position() -# dragging = true -# -# #reorder nodes so selected group is on top of other groups -# raise() -# -# for node in get_parent().get_children(): -# if node is file_node_script: -# node.raise() -# -# else: -## print("drag stopped") -# emit_signal("end_node_move") -# dragging = false -## drag_start = null -# -# accept_event() -# -# #drag selected node -# elif dragging and event is InputEventMouseMotion: -# -## var offset_ori = offset -# offset += get_local_mouse_position() - mouse_drag_start -## offset = get_parent().snap(offset) -# -# get_parent().dirty = true -# accept_event() - func _on_TextBox_mouse_entered(): _on_Node_mouse_entered() @@ -101,3 +76,20 @@ func _on_TextBox_text_changed(): comment_text = get_node("MarginContainer/HBox/TextBox").text get_parent().dirty = true + + +func _on_TextBox_focus_exited(): + + var undo_redo:UndoRedo = get_parent().undo_redo + + undo_redo.create_action("Change text") + + undo_redo.add_do_property(text_node, "text", text_node.text) + undo_redo.add_undo_property(text_node, "text", last_text) + + undo_redo.commit_action() + + +func _on_TextBox_focus_entered(): + last_text = text_node.text + diff --git a/addons/project_map/pm_comment_node.tscn b/addons/project_map/pm_comment_node.tscn index 18bd648..189e913 100644 --- a/addons/project_map/pm_comment_node.tscn +++ b/addons/project_map/pm_comment_node.tscn @@ -3,11 +3,11 @@ [ext_resource path="res://addons/project_map/pm_comment_node.gd" type="Script" id=1] [ext_resource path="res://addons/project_map/comment_focus.stylebox" type="StyleBox" id=3] -[sub_resource type="StyleBoxEmpty" id=4] +[sub_resource type="StyleBoxEmpty" id=6] -[sub_resource type="StyleBoxEmpty" id=5] +[sub_resource type="StyleBoxEmpty" id=7] -[sub_resource type="Image" id=9] +[sub_resource type="Image" id=11] data = { "data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "format": "LumAlpha8", @@ -16,10 +16,10 @@ data = { "width": 16 } -[sub_resource type="ImageTexture" id=7] +[sub_resource type="ImageTexture" id=10] flags = 4 flags = 4 -image = SubResource( 9 ) +image = SubResource( 11 ) size = Vector2( 16, 16 ) [sub_resource type="StyleBoxEmpty" id=8] @@ -28,8 +28,8 @@ size = Vector2( 16, 16 ) margin_right = 400.0 margin_bottom = 200.0 rect_min_size = Vector2( 400, 200 ) -custom_styles/commentfocus = SubResource( 4 ) -custom_styles/comment = SubResource( 5 ) +custom_styles/commentfocus = SubResource( 6 ) +custom_styles/comment = SubResource( 7 ) comment = true slot/0/left_enabled = false slot/0/left_type = 0 @@ -60,7 +60,7 @@ margin_bottom = 28.0 rect_min_size = Vector2( 20, 28 ) size_flags_horizontal = 0 size_flags_vertical = 0 -texture = SubResource( 7 ) +texture = SubResource( 10 ) stretch_mode = 4 [node name="TextBox" type="TextEdit" parent="MarginContainer/HBox"] @@ -76,6 +76,8 @@ text = "Comment wrap_enabled = true [connection signal="gui_input" from="MarginContainer/HBox/Icon" to="." method="_on_Icon_gui_input"] +[connection signal="focus_entered" from="MarginContainer/HBox/TextBox" to="." method="_on_TextBox_focus_entered"] +[connection signal="focus_exited" from="MarginContainer/HBox/TextBox" to="." method="_on_TextBox_focus_exited"] [connection signal="mouse_entered" from="MarginContainer/HBox/TextBox" to="." method="_on_TextBox_mouse_entered"] [connection signal="mouse_exited" from="MarginContainer/HBox/TextBox" to="." method="_on_TextBox_mouse_exited"] [connection signal="text_changed" from="MarginContainer/HBox/TextBox" to="." method="_on_TextBox_text_changed"] diff --git a/addons/project_map/pm_common_node.gd b/addons/project_map/pm_common_node.gd index f609f91..bcee0ef 100644 --- a/addons/project_map/pm_common_node.gd +++ b/addons/project_map/pm_common_node.gd @@ -34,17 +34,15 @@ func _on_Icon_gui_input(event): node.raise() else: -# print("drag stopped") + emit_signal("end_node_move") dragging = false -# drag_start = null accept_event() #drag selected node elif dragging and event is InputEventMouseMotion: -# var offset_ori = offset offset += get_local_mouse_position() - mouse_drag_start if snap: diff --git a/addons/project_map/pm_group_node.gd b/addons/project_map/pm_group_node.gd index 30050f1..4197f7e 100644 --- a/addons/project_map/pm_group_node.gd +++ b/addons/project_map/pm_group_node.gd @@ -1,5 +1,5 @@ tool -extends CommonNode +extends "res://addons/project_map/pm_common_node.gd" export(String) var group_name = "Group (click to edit)" @@ -21,16 +21,12 @@ func _enter_tree(): get_node(header).text = group_name -func _ready(): - - #need to wait for group position to be set - yield(get_tree(), "idle_frame") - children = get_group_nodes() - - func init(): pass +func set_children(): + + children = get_group_nodes() func _on_GraphNode_resize_request(new_minsize:Vector2): @@ -98,53 +94,20 @@ func on_file_node_moved(node): if children.has(node): children.erase(node) - ##drag the group node using the icon -#func _on_Icon_gui_input(event): -# -# #click node -# if event is InputEventMouseButton and event.button_index == BUTTON_LEFT: -# -# #drag start -# if event.pressed: -# -# selected = true -# drag_offset = get_local_mouse_position() #event.position -# -# #reorder nodes so selected group is on top of other groups -# raise() -# -# for node in get_parent().get_children(): -# if node is file_node_script: -# node.raise() -# -# else: -# drag_offset = null -# -# accept_event() -# -# #drag selected node -# elif drag_offset and event is InputEventMouseMotion: -# -# var offset_ori = offset -# offset += get_local_mouse_position() - drag_offset -# offset = get_parent().snap(offset) -# -# #move selected nodes -## for node in get_parent().get_children(): -## -## if node is GraphNode and node.selected: -## -## if node == self: -## continue -## -## node.offset += offset - offset_ori -# -# #move group nodes, don't if shift or alt is pressed -# if not (Input.is_key_pressed(KEY_ALT) or Input.is_key_pressed(KEY_SHIFT)): -# -# for node in children: -# node.offset += offset - offset_ori -# -# get_parent().dirty = true -# accept_event() +func _on_Icon_gui_input(event): + + var offset_ori = offset + + ._on_Icon_gui_input(event) + + if dragging and event is InputEventMouseMotion: + + #move group nodes, don't if shift or alt is pressed + if not (Input.is_key_pressed(KEY_ALT) or Input.is_key_pressed(KEY_SHIFT)): + + for node in children: + node.offset += offset - offset_ori #offset - drag_start + + pass + diff --git a/addons/project_map/project_map.gd b/addons/project_map/project_map.gd index 90ce6a1..d5f673b 100644 --- a/addons/project_map/project_map.gd +++ b/addons/project_map/project_map.gd @@ -5,6 +5,7 @@ var file_node = preload("res://addons/project_map/pm_file_node.tscn") var file_node_script = preload("res://addons/project_map/pm_file_node.gd") var group_node = preload("res://addons/project_map/pm_group_node.tscn") var group_node_script = preload("res://addons/project_map/pm_group_node.gd") +var common_node_script = preload("res://addons/project_map/pm_common_node.gd") var comment_node = preload("res://addons/project_map/pm_comment_node.tscn") var comment_node_script = preload("res://addons/project_map/pm_comment_node.gd") @@ -44,9 +45,6 @@ func _enter_tree(): file_system_dock.connect("file_removed", self, "_on_file_removed") file_system_dock.connect("files_moved", self, "_on_file_moved") -#func _get_unique_id(): -# -# return OS.get_ticks_msec() #snap vector to grid func snap(pos:Vector2): @@ -75,8 +73,11 @@ func _ready(): for node in get_children(): - if node is CommonNode: + if node is common_node_script: node.connect("end_node_move", self, "_on_end_node_move") + + if node is group_node_script: + node.set_children() func _on_file_removed(file_path):