mirror of
https://github.com/Relintai/Godot-Simple-TODO.git
synced 2025-01-02 07:29:38 +01:00
Re-add global column header
This commit is contained in:
parent
6cc3548fdd
commit
a8600d4621
32
addons/SimpleTODO/ColumnHeader.tscn
Normal file
32
addons/SimpleTODO/ColumnHeader.tscn
Normal file
@ -0,0 +1,32 @@
|
||||
[gd_scene format=2]
|
||||
|
||||
[node name="Header" type="HBoxContainer"]
|
||||
margin_right = 392.0
|
||||
margin_bottom = 24.0
|
||||
|
||||
[node name="DragPanel" type="Panel" parent="."]
|
||||
margin_right = 20.0
|
||||
margin_bottom = 24.0
|
||||
rect_min_size = Vector2( 20, 0 )
|
||||
mouse_default_cursor_shape = 13
|
||||
|
||||
[node name="Name" type="LineEdit" parent="."]
|
||||
margin_left = 24.0
|
||||
margin_right = 344.0
|
||||
margin_bottom = 24.0
|
||||
size_flags_horizontal = 3
|
||||
text = "Column name"
|
||||
|
||||
[node name="Counter" type="Label" parent="."]
|
||||
margin_left = 348.0
|
||||
margin_top = 5.0
|
||||
margin_right = 376.0
|
||||
margin_bottom = 19.0
|
||||
rect_min_size = Vector2( 28, 0 )
|
||||
text = "0"
|
||||
align = 1
|
||||
|
||||
[node name="Minimize" type="Button" parent="."]
|
||||
margin_left = 380.0
|
||||
margin_right = 392.0
|
||||
margin_bottom = 24.0
|
@ -89,7 +89,7 @@ func load_data():
|
||||
|
||||
for section in data.get_sections():
|
||||
var column = todo_screen.add_column()
|
||||
column.name_edit.text = section
|
||||
column.set_name(section)
|
||||
|
||||
for item in data.get_section_keys(section):
|
||||
if item == "__none__":
|
||||
|
@ -1,8 +1,11 @@
|
||||
tool
|
||||
extends Control
|
||||
|
||||
onready var column_container = $VBoxContainer/ScrollContainer/Columns
|
||||
onready var column_container = $"%Columns"
|
||||
onready var vbox_container = $VBoxContainer
|
||||
onready var column_mirror = $"%ColumnMirror"
|
||||
onready var scroll_container = $"%ScrollContainer"
|
||||
|
||||
var item_placement_holder: Panel
|
||||
var undo_redo: UndoRedo
|
||||
|
||||
@ -11,6 +14,15 @@ func _ready() -> void:
|
||||
|
||||
undo_redo = UndoRedo.new()
|
||||
|
||||
scroll_container.get_v_scrollbar().connect("value_changed", self, "update_mirror")
|
||||
|
||||
func update_mirror(v: float):
|
||||
column_mirror.visible = v > column_mirror.get_child(0).rect_size.y
|
||||
|
||||
func connect_scrollbar(to_object, to_method):
|
||||
scroll_container.get_h_scrollbar().connect("value_changed", to_object, to_method)
|
||||
scroll_container.get_v_scrollbar().connect("value_changed", to_object, to_method)
|
||||
|
||||
func create_drag_placement_holder() -> Panel:
|
||||
var new_holder = preload("res://addons/SimpleTODO/ItemPlacementHolder.tscn").instance()
|
||||
new_holder.visible = false
|
||||
@ -50,3 +62,7 @@ func delete_column(column):
|
||||
|
||||
func request_save() -> void:
|
||||
get_tree().get_nodes_in_group("__todo_plugin__").front().save_data()
|
||||
|
||||
func refresh_mirrors():
|
||||
for column in column_container.get_children():
|
||||
column.call_deferred("update_mirror", 0)
|
||||
|
@ -23,24 +23,39 @@ __meta__ = {
|
||||
margin_right = 1024.0
|
||||
margin_bottom = 34.0
|
||||
|
||||
[node name="Button" type="Button" parent="VBoxContainer/PanelContainer"]
|
||||
margin_left = 467.0
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/PanelContainer"]
|
||||
margin_left = 7.0
|
||||
margin_top = 7.0
|
||||
margin_right = 556.0
|
||||
margin_right = 1017.0
|
||||
margin_bottom = 27.0
|
||||
|
||||
[node name="Button" type="Button" parent="VBoxContainer/PanelContainer/VBoxContainer"]
|
||||
margin_left = 460.0
|
||||
margin_right = 549.0
|
||||
margin_bottom = 20.0
|
||||
size_flags_horizontal = 4
|
||||
text = "Add column"
|
||||
|
||||
[node name="ColumnMirror" type="Control" parent="VBoxContainer/PanelContainer/VBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
margin_top = 24.0
|
||||
margin_right = 1010.0
|
||||
margin_bottom = 54.0
|
||||
rect_min_size = Vector2( 0, 30 )
|
||||
|
||||
[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
margin_top = 38.0
|
||||
margin_right = 1024.0
|
||||
margin_bottom = 600.0
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="Columns" type="HBoxContainer" parent="VBoxContainer/ScrollContainer"]
|
||||
unique_name_in_owner = true
|
||||
margin_right = 1024.0
|
||||
margin_bottom = 562.0
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
|
||||
[connection signal="pressed" from="VBoxContainer/PanelContainer/Button" to="." method="add_column" binds= [ true ]]
|
||||
[connection signal="pressed" from="VBoxContainer/PanelContainer/VBoxContainer/Button" to="." method="add_column" binds= [ true ]]
|
||||
|
@ -1,15 +1,15 @@
|
||||
tool
|
||||
extends PanelContainer
|
||||
|
||||
onready var head = $VBoxContainer/Head
|
||||
onready var header = $VBoxContainer/Header
|
||||
onready var minimize_button = header.get_node("Minimize")
|
||||
onready var name_edit = header.get_node("Name")
|
||||
onready var counter = header.get_node("Counter")
|
||||
onready var top_separator = $VBoxContainer/TopSeparator
|
||||
onready var bottom_separator = $VBoxContainer/BottomSeparator
|
||||
onready var scroll_container = $VBoxContainer/ScrollContainer
|
||||
onready var actions = $VBoxContainer/Actions
|
||||
onready var minimize_button = $VBoxContainer/Head/Minimize
|
||||
onready var name_edit = $VBoxContainer/Head/Name
|
||||
onready var item_container = $VBoxContainer/ScrollContainer/Items
|
||||
onready var counter = $VBoxContainer/Head/Counter
|
||||
onready var delete_button = $VBoxContainer/Actions/DeleteColumn
|
||||
onready var timer = $Timer
|
||||
|
||||
@ -21,11 +21,15 @@ var is_dragging = false
|
||||
var initial_item_index = 0
|
||||
var current_drag_item_index = 0
|
||||
var item_margin = 20
|
||||
var mirror_header
|
||||
var mirror_counter
|
||||
|
||||
func set_minimized(val):
|
||||
minimized = val
|
||||
|
||||
minimize_button.icon = get_icon("ArrowDown" if minimized else "ArrowUp", "EditorIcons")
|
||||
if mirror_header:
|
||||
mirror_header.get_node("Minimize").icon = get_icon("ArrowDown" if minimized else "ArrowUp", "EditorIcons")
|
||||
|
||||
top_separator.visible = !val
|
||||
scroll_container.visible = !val
|
||||
@ -41,7 +45,29 @@ func _ready() -> void:
|
||||
counter.rect_min_size.x = delete_button.get_minimum_size().x
|
||||
set_minimized(false)
|
||||
|
||||
func _process(_delta):
|
||||
mirror_header = PanelContainer.new()
|
||||
main.column_mirror.add_child(mirror_header)
|
||||
mirror_header.add_stylebox_override("panel", get_stylebox("panel"))
|
||||
mirror_header.add_child(preload("res://addons/SimpleTODO/ColumnHeader.tscn").instance())
|
||||
mirror_header.get_child(0).get_node("Minimize").icon = get_icon("ArrowDown" if minimized else "ArrowUp", "EditorIcons")
|
||||
mirror_header.get_child(0).get_node("Name").editable = false
|
||||
mirror_counter = mirror_header.get_child(0).get_node("Counter")
|
||||
main.connect_scrollbar(self, "update_mirror")
|
||||
|
||||
header.get_node("DragPanel").connect("gui_input", self, "_on_DragPanel_gui_input")
|
||||
mirror_header.get_child(0).get_node("DragPanel").connect("gui_input", self, "_on_DragPanel_gui_input")
|
||||
|
||||
update_mirror(0)
|
||||
|
||||
func set_name(column_name):
|
||||
name_edit.text = column_name
|
||||
mirror_header.get_child(0).get_node("Name").text = column_name
|
||||
|
||||
func update_mirror(v):
|
||||
mirror_header.rect_min_size = Vector2(rect_size.x, header.rect_size.y)
|
||||
mirror_header.rect_global_position.x = rect_global_position.x
|
||||
|
||||
func _process(delta):
|
||||
if is_dragging:
|
||||
var mouse_position = main.get_local_mouse_position()
|
||||
|
||||
@ -84,11 +110,13 @@ func delete_column() -> void:
|
||||
|
||||
func update_counter() -> void:
|
||||
counter.text = str(item_container.get_child_count())
|
||||
mirror_counter.text = str(item_container.get_child_count())
|
||||
|
||||
func request_save() -> void:
|
||||
get_tree().get_nodes_in_group("__todo_plugin__").front().save_data()
|
||||
|
||||
func name_changed(_new_text: String) -> void:
|
||||
mirror_header.get_child(0).get_node("Name").text = _new_text
|
||||
timer.start()
|
||||
|
||||
func _on_Minimize_pressed():
|
||||
@ -148,6 +176,7 @@ func _input(event):
|
||||
|
||||
current_drag_item_index = 0
|
||||
initial_item_index = 0
|
||||
main.refresh_mirrors()
|
||||
|
||||
func move_column(index):
|
||||
undo_redo.create_action("Move Column")
|
||||
|
@ -1,6 +1,7 @@
|
||||
[gd_scene load_steps=5 format=2]
|
||||
[gd_scene load_steps=6 format=2]
|
||||
|
||||
[ext_resource path="res://addons/SimpleTODO/TODOColumn.gd" type="Script" id=1]
|
||||
[ext_resource path="res://addons/SimpleTODO/ColumnHeader.tscn" type="PackedScene" id=2]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id=3]
|
||||
content_margin_left = 4.0
|
||||
@ -43,36 +44,7 @@ margin_right = 396.0
|
||||
margin_bottom = 74.0
|
||||
rect_min_size = Vector2( 200, 0 )
|
||||
|
||||
[node name="Head" type="HBoxContainer" parent="VBoxContainer"]
|
||||
margin_right = 392.0
|
||||
margin_bottom = 24.0
|
||||
|
||||
[node name="DragPanel" type="Panel" parent="VBoxContainer/Head"]
|
||||
margin_right = 20.0
|
||||
margin_bottom = 24.0
|
||||
rect_min_size = Vector2( 20, 0 )
|
||||
mouse_default_cursor_shape = 13
|
||||
|
||||
[node name="Name" type="LineEdit" parent="VBoxContainer/Head"]
|
||||
margin_left = 24.0
|
||||
margin_right = 344.0
|
||||
margin_bottom = 24.0
|
||||
size_flags_horizontal = 3
|
||||
text = "Column name"
|
||||
|
||||
[node name="Counter" type="Label" parent="VBoxContainer/Head"]
|
||||
margin_left = 348.0
|
||||
margin_top = 5.0
|
||||
margin_right = 376.0
|
||||
margin_bottom = 19.0
|
||||
rect_min_size = Vector2( 28, 0 )
|
||||
text = "0"
|
||||
align = 1
|
||||
|
||||
[node name="Minimize" type="Button" parent="VBoxContainer/Head"]
|
||||
margin_left = 380.0
|
||||
margin_right = 392.0
|
||||
margin_bottom = 24.0
|
||||
[node name="Header" parent="VBoxContainer" instance=ExtResource( 2 )]
|
||||
|
||||
[node name="TopSeparator" type="HSeparator" parent="VBoxContainer"]
|
||||
margin_top = 28.0
|
||||
@ -120,9 +92,6 @@ icon = SubResource( 5 )
|
||||
wait_time = 0.5
|
||||
one_shot = true
|
||||
|
||||
[connection signal="gui_input" from="VBoxContainer/Head/DragPanel" to="." method="_on_DragPanel_gui_input"]
|
||||
[connection signal="text_changed" from="VBoxContainer/Head/Name" to="." method="name_changed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Head/Minimize" to="." method="_on_Minimize_pressed"]
|
||||
[connection signal="child_entered_tree" from="VBoxContainer/ScrollContainer/Items" to="." method="_on_Items_child_entered_tree"]
|
||||
[connection signal="child_exiting_tree" from="VBoxContainer/ScrollContainer/Items" to="." method="_on_Items_child_exited_tree"]
|
||||
[connection signal="pressed" from="VBoxContainer/Actions/AddItem" to="." method="add_item" binds= [ true ]]
|
||||
|
Loading…
Reference in New Issue
Block a user