mirror of
https://github.com/Relintai/godot-resources-as-sheets-plugin.git
synced 2024-11-10 10:12:08 +01:00
111 lines
2.9 KiB
GDScript
111 lines
2.9 KiB
GDScript
tool
|
|
extends HBoxContainer
|
|
|
|
export var path_editor_view_root := NodePath("")
|
|
|
|
# These can not be set externally.
|
|
var rows_per_page := 50 setget _set_none
|
|
var current_page := 0 setget _set_none
|
|
var first_row := 0 setget _set_none
|
|
var last_row := 50 setget _set_none
|
|
|
|
|
|
func _set_none(v): pass
|
|
|
|
|
|
func _on_Control_grid_updated():
|
|
var root = get_node(path_editor_view_root)
|
|
visible = true
|
|
|
|
var page_count = (root.rows.size() - 1) / rows_per_page + 1
|
|
first_row = min(current_page, page_count) * rows_per_page
|
|
last_row = min(first_row + rows_per_page, root.rows.size())
|
|
|
|
var pagelist_node = $"Pagelist"
|
|
for x in pagelist_node.get_children():
|
|
x.queue_free()
|
|
|
|
var button_group = ButtonGroup.new()
|
|
var btns = []
|
|
btns.resize(page_count)
|
|
for i in page_count:
|
|
var btn = Button.new()
|
|
btns[i] = btn
|
|
btn.toggle_mode = true
|
|
btn.group = button_group
|
|
btn.text = str(i + 1)
|
|
btn.connect("pressed", self, "_on_button_pressed", [btn])
|
|
pagelist_node.add_child(btn)
|
|
|
|
btns[current_page].pressed = true
|
|
|
|
var sort_property = root.sorting_by
|
|
if sort_property == "": sort_property = "resource_path"
|
|
var sort_type = root.column_types[root.columns.find(sort_property)]
|
|
var property_values = []
|
|
property_values.resize(page_count)
|
|
for i in page_count:
|
|
property_values[i] = root.rows[i * rows_per_page].get(sort_property)
|
|
|
|
if sort_type == TYPE_REAL or sort_type == TYPE_INT:
|
|
for i in page_count:
|
|
btns[i].text = str(property_values[i])
|
|
|
|
elif sort_type == TYPE_COLOR:
|
|
for i in page_count:
|
|
btns[i].self_modulate = property_values[i] * 0.75 + Color(0.25, 0.25, 0.25, 1.0)
|
|
|
|
elif sort_type == TYPE_STRING:
|
|
var strings = []
|
|
strings.resize(page_count)
|
|
for i in page_count:
|
|
strings[i] = property_values[i].get_file()
|
|
if strings[i] == "":
|
|
strings[i] = str(i)
|
|
|
|
_fill_buttons_with_prefixes(btns, strings, page_count)
|
|
|
|
elif sort_type == TYPE_OBJECT:
|
|
var strings = []
|
|
strings.resize(page_count + 1)
|
|
for i in page_count:
|
|
if is_instance_valid(property_values[i]):
|
|
strings[i] = property_values[i].resource_path.get_file()
|
|
|
|
_fill_buttons_with_prefixes(btns, strings, page_count)
|
|
|
|
|
|
func _fill_buttons_with_prefixes(btns, strings, page_count):
|
|
for i in page_count:
|
|
if i == 0:
|
|
btns[0].text = strings[0][0]
|
|
continue
|
|
|
|
for j in strings[i].length():
|
|
if strings[i].ord_at(j) != strings[i - 1].ord_at(j):
|
|
btns[i].text = strings[i].left(j + 1)
|
|
btns[i - 1].text = strings[i - 1].left(max(j + 1, btns[i - 1].text.length()))
|
|
break
|
|
|
|
for i in page_count - 1:
|
|
btns[i].text = btns[i].text + "-" + btns[i + 1].text
|
|
|
|
btns[page_count - 1].text += "-[End]"
|
|
|
|
|
|
func _on_button_pressed(button):
|
|
button.pressed = true
|
|
current_page = button.get_position_in_parent()
|
|
_update_view()
|
|
|
|
|
|
func _on_LineEdit_value_changed(value):
|
|
rows_per_page = value
|
|
_update_view()
|
|
|
|
|
|
func _update_view():
|
|
_on_Control_grid_updated()
|
|
var view = get_node(path_editor_view_root)
|
|
view.refresh(false)
|