diff --git a/table/table.gd b/table/table.gd index 56743d5..ffbf143 100644 --- a/table/table.gd +++ b/table/table.gd @@ -25,6 +25,7 @@ const META_EVENT_NAME = 'event_name' ## Имя свойс var header: GridContainer ## Заголовок таблицы var in_focus: = false ## Фокус пользовательского ввода var nodes: = {} ## Все ячейки таблицы и дополнительные элементы +var columns_min_size = [] ## Ширина каждой колонки var ScnNode: PackedScene ## Прототип ячейки таблицы var ScnSelector: PackedScene ## Прототип индикатора выбранного ряда var selector_color_proc: Callable ## Ссылка на процедуру генератора цвета индикатора выбранного ряда @@ -179,7 +180,11 @@ func set_columns_min_size(sizes: Array) -> void: assert((columns == 1) or (columns == sizes.size())) columns = sizes.size() var rows_count: = get_rows_count() - for i_row in rows_count: set_nodes_min_size(i_row, sizes) + columns_min_size.clear() + for sz in sizes: + columns_min_size.append(sz) + for i_row in rows_count: + set_nodes_min_size(i_row, sizes, NODE_KEY_FORMAT) if nodes.has(HEAD_KEY_FORMAT % [0, 0]): set_nodes_min_size(0, sizes, HEAD_KEY_FORMAT) @@ -318,6 +323,7 @@ func add_row(row_types: Array) -> void: assert(columns == row_types.size(), 'ошибка: %s количество колонок установлено ранее - %d, но требуется %d' % [self, columns, row_types.size()]) var i_row: int = get_rows_count() assert(i_row < MAX_INDEX, 'ошибка: слишком много рядов, больше %d' % (MAX_INDEX + 1)) + var allow_set_size = columns_min_size.size() >= row_types.size() for i_col in columns: var node_type = row_types[i_col] var node = node_type.instantiate() @@ -325,6 +331,9 @@ func add_row(row_types: Array) -> void: var node_key: String = NODE_KEY_FORMAT % [i_row, i_col] node.name = node_key add_child(node) + if allow_set_size: + node.custom_minimum_size.x = columns_min_size[i_col] + node.set_deferred('size.x', columns_min_size[i_col]) nodes[node_key] = node var conn = Callable(self, '_on_focus_entered').bind(node) node.connect('focus_entered', conn)