Added resource table plugin
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
@tool
|
||||
extends Container
|
||||
|
||||
var visible_column_minsizes : Array = []:
|
||||
set(v):
|
||||
visible_column_minsizes = v
|
||||
queue_sort()
|
||||
var visible_column_positions : Array[float] = []
|
||||
var _cached_minimum_size := Vector2.ZERO
|
||||
|
||||
|
||||
func _notification(what : int) -> void:
|
||||
if what == NOTIFICATION_SORT_CHILDREN:
|
||||
var visible_children : Array[Control] = []
|
||||
for x in get_children():
|
||||
if x is Control and x.visible:
|
||||
visible_children.append(x)
|
||||
|
||||
sort_children(visible_children)
|
||||
|
||||
|
||||
func _get_minimum_size() -> Vector2:
|
||||
return _cached_minimum_size
|
||||
|
||||
|
||||
func get_visible_column_position(index : int):
|
||||
pass
|
||||
|
||||
|
||||
func sort_children(children : Array[Control]) -> void:
|
||||
var column_count := visible_column_minsizes.size()
|
||||
if column_count == 0:
|
||||
return
|
||||
|
||||
var column_minsizes : Array[float] = []
|
||||
var row_minsizes : Array[float] = []
|
||||
column_minsizes.resize(column_count)
|
||||
row_minsizes.resize(children.size() / column_count + 1)
|
||||
|
||||
for i in visible_column_minsizes.size():
|
||||
column_minsizes[i] = visible_column_minsizes[i]
|
||||
|
||||
var current_cell := Vector2i.ZERO
|
||||
for x in children:
|
||||
var minsize := x.get_combined_minimum_size()
|
||||
column_minsizes[current_cell.x] = maxf(column_minsizes[current_cell.x], minsize.x)
|
||||
row_minsizes[current_cell.y] = maxf(row_minsizes[current_cell.y], minsize.y)
|
||||
current_cell.x += 1
|
||||
if current_cell.x == column_count:
|
||||
current_cell.x = 0
|
||||
current_cell.y += 1
|
||||
|
||||
var current_pos := Vector2.ZERO
|
||||
current_cell = Vector2i.ZERO
|
||||
for x in children:
|
||||
var cur_size := Vector2(column_minsizes[current_cell.x], row_minsizes[current_cell.y])
|
||||
fit_child_in_rect(x, Rect2(current_pos, cur_size))
|
||||
current_pos.x += cur_size.x
|
||||
current_cell.x += 1
|
||||
if current_cell.x == column_count:
|
||||
current_cell.x = 0
|
||||
current_cell.y += 1
|
||||
current_pos.x = 0.0
|
||||
current_pos.y += cur_size.y
|
||||
|
||||
_cached_minimum_size = Vector2.ZERO
|
||||
visible_column_positions.resize(column_minsizes.size() + 1)
|
||||
for i in column_minsizes.size():
|
||||
_cached_minimum_size.x += column_minsizes[i]
|
||||
visible_column_positions[i + 1] = _cached_minimum_size.x
|
||||
|
||||
for x in row_minsizes:
|
||||
_cached_minimum_size.y += x
|
||||
Reference in New Issue
Block a user