From 749043395b2909b0c6889d38de0b7735ccc86745 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Tue, 14 May 2024 13:20:53 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BB=D0=B8=D1=8F=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=81=20=D0=B2=D0=BD=D0=B5=D1=88=D0=BD=D0=B8=D0=BC=D0=B8=20?= =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=D0=BC=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- table/table.gd | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/table/table.gd b/table/table.gd index b398155..a60e015 100644 --- a/table/table.gd +++ b/table/table.gd @@ -31,8 +31,16 @@ var ScnSelector: PackedScene ## Прототип индикатора вы var selector_color_proc: Callable ## Ссылка на процедуру генератора цвета индикатора выбранного ряда var selector_size_proc: Callable ## Ссылка на процедуру генератора размера индикатора выбранного ряда -signal row_pressed(i_row: int) ## Вызывается при нажатии кнопкой мыши на строку -signal selected_changed(i_row: int) ## Вызывается при изменении выбранного ряда. i_row - текущий выбранный ряд +## Вызывается при нажатии кнопкой мыши на строку. +## Активируемый ползователем элемент ряда должен вызывать +## сигнал [b]focus_entered[/b], что бы сигнал [b]row_pressed[/b] работал.[br] +## [param i_row] - Индекс ряда в котором пользователь активировал элемент.[br] +## [i]Godot 4.2: [/i][b] Label[/b] [i] - не вызывает сигнал[/i] [b]focus_entered[/b]. +signal row_pressed(i_row: int) + +## Вызывается при изменении выбранного ряда.[br] +## [param i_row] - Текущий выбранный ряд. +signal selected_changed(i_row: int) var scroll: Control var scroll_adj: = Vector2(0, 0) @@ -299,14 +307,18 @@ func set_row_selected(i_row: int, selected: bool = true) -> void: ## [param i_row] - Индекс ряда. func _set_row_selected(i_row: int, selected: bool = true) -> void: - var key: = SELECTOR_KEY_FORMAT % [i_row, 0] - var node = nodes[NODE_KEY_FORMAT % [i_row, 0]] - if nodes.has(key) and (not selected): - var selector = nodes[key] + var selector_key: = SELECTOR_KEY_FORMAT % [i_row, 0] + var node_key: = NODE_KEY_FORMAT % [i_row, 0] + if not nodes.has(node_key): + push_error('ошибка: нет такого ряда: %d' % i_row) + return + if nodes.has(selector_key) and (not selected): + var node = nodes[node_key] + var selector = nodes[selector_key] node.remove_child(selector) selector.queue_free() - nodes.erase(key) - elif (not nodes.has(key)) and selected: + nodes.erase(selector_key) + elif (not nodes.has(selector_key)) and selected: var selector = ScnSelector.instantiate() var rect: = [0, 0, 0, 0] selector_size_proc.call(i_row, rect) @@ -314,7 +326,8 @@ func _set_row_selected(i_row: int, selected: bool = true) -> void: selector.size.y = rect[3] selector.modulate = selector_color_proc.call(i_row) selector.z_index = z_index + 1 - nodes[key] = selector + nodes[selector_key] = selector + var node = nodes[node_key] node.add_child(selector) @@ -473,10 +486,10 @@ func rehash(): var iv = get_key_indexes(key) var i0 = Vector2(iv[0], iv[1]) if HEAD_PREFIX in key: - swap_nodes(nodes_copy, HEAD_KEY_FORMAT, i0, i_hdr[0]) + swap_nodes(nodes_copy, HEAD_KEY_FORMAT, i0, i_hdr[0]) next_index(i_hdr) elif NODE_PREFIX in key: - swap_nodes(nodes_copy, NODE_KEY_FORMAT, i0, i_node[0]) + swap_nodes(nodes_copy, NODE_KEY_FORMAT, i0, i_node[0]) next_index(i_node) elif SLCT_PREFIX in key: swap_nodes(nodes_copy, SELECTOR_KEY_FORMAT, i0, i_slct[0]) @@ -587,7 +600,8 @@ func set_row_editable(i_row: int, val: bool) -> void: nodes[key].editable = val -## [param i_col] - Индекс колонки. [param i_row] - Индекс ряда. +## [param i_col] - Индекс колонки.[br] +## [param i_row] - Индекс ряда. func set_node_alligment(i_col: int, i_row: int, val: int) -> void: var key: = get_node_key(NODE_KEY_FORMAT, i_col, i_row) if 'horizontal_alignment' in nodes[key]: