Слияние с внешними исправлениями.

This commit is contained in:
sasha80
2024-05-14 13:20:53 +03:00
parent b349b39095
commit c52e0f382e

View File

@@ -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])
@@ -538,7 +551,8 @@ func set_nodes_min_size(i_row: int, sizes: Array, key_format: String = NODE_KEY_
node.set_deferred('size.x', sizes[i_col])
## [param i_col] - Индекс колонки. [param i_row] - Индекс ряда.
## [param i_col] - Индекс колонки.[br]
## [param i_row] - Индекс ряда.
func set_node_text(i_col: int, i_row: int, val: String) -> void:
var key: = get_node_key(NODE_KEY_FORMAT, i_col, i_row)
nodes[key].text = val
@@ -587,7 +601,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]: