61 lines
1.9 KiB
GDScript
61 lines
1.9 KiB
GDScript
@tool
|
|
extends ColorRect
|
|
|
|
const TablesPluginSettingsClass := preload("res://addons/resources_spreadsheet_view/settings_grid.gd")
|
|
|
|
@onready var editor_view : Control = $"../../../../../.."
|
|
@onready var grid_scroll : ScrollContainer = $"../../Scroll"
|
|
@onready var grid : Container = $"../../Scroll/MarginContainer/TableGrid"
|
|
|
|
var children : Array[Control] = []
|
|
var children_copy_cells : Array[Control] = []
|
|
|
|
|
|
func _ready() -> void:
|
|
grid_scroll.get_h_scroll_bar().value_changed.connect(_on_scroll_updated, CONNECT_DEFERRED)
|
|
grid_scroll.get_v_scroll_bar().value_changed.connect(_on_scroll_updated, CONNECT_DEFERRED)
|
|
|
|
|
|
func _on_grid_updated() -> void:
|
|
if editor_view.rows.size() == 0:
|
|
hide()
|
|
return
|
|
|
|
visible = ProjectSettings.get_setting(TablesPluginSettingsClass.PREFIX + "freeze_first_column")
|
|
for x in get_children():
|
|
x.queue_free()
|
|
|
|
children.clear()
|
|
children_copy_cells.clear()
|
|
size.x = 0.0
|
|
|
|
await get_tree().process_frame
|
|
|
|
var first_visible_column := 0
|
|
for i in editor_view.columns.size():
|
|
if grid.get_child(i).visible:
|
|
first_visible_column = i
|
|
break
|
|
|
|
var total_column_count : int = editor_view.columns.size()
|
|
children.resize(grid.get_child_count() / total_column_count)
|
|
children_copy_cells.resize(children.size())
|
|
for i in children.size():
|
|
children_copy_cells[i] = grid.get_child(total_column_count * i + first_visible_column)
|
|
children[i] = children_copy_cells[i].duplicate()
|
|
children[i].mouse_filter = Control.MOUSE_FILTER_IGNORE
|
|
add_child(children[i])
|
|
size.x = maxf(size.x, children_copy_cells[i].size.x)
|
|
|
|
size.y = grid.size.y
|
|
color = get_theme_color(&"background", &"Editor")
|
|
color.a *= 0.9
|
|
_on_scroll_updated(0.0)
|
|
|
|
|
|
func _on_scroll_updated(_new_value : float):
|
|
position = Vector2(0.0, -grid_scroll.scroll_vertical)
|
|
for i in children.size():
|
|
children[i].size = children_copy_cells[i].size
|
|
children[i].position = children_copy_cells[i].position
|