Исправление. Ошибка при удалении элемента из подключенной колонки

This commit is contained in:
sasha80
2023-08-15 13:30:37 +03:00
parent ca4112e9b8
commit bcc7bef087

View File

@@ -9,18 +9,17 @@ extends GridContainer
@export_file var node_type_file: = 'res://table/node.tscn': get = get_node_scene, set = load_node_scene ## Сцена ячейки устанавливаемая по умолчанию
@export_file var selector_type_file: = 'res://table/selector.tscn': set = load_selector_scene ## Сцена индикатора для выбранного ряда
const CONN_PREFIX = 'CONN_' ## Префикс ключа обработчиков событий ячейки таблицы
const HEAD_PREFIX = 'HEAD_' ## Префикс ключа заголовка таблицы
const INDEX_FORMAT = '%02d_%02d' ## Формат индекса ключа
const MAX_INDEX = 99 ## Максимальное значение индекса для колонки и строки. Связано с форматом индекса ключа
const NODE_PREFIX = 'NODE_' ## Префикс ключа ячейки таблицы
const SLCT_PREFIX = 'SLCT_' ## Префикс ключа индикатора выбранного ряда таблицы
const CONNECTED_KEY_FORMAT = CONN_PREFIX + INDEX_FORMAT ## Формат ключа подключенных обработчиков сигналов
const HEAD_KEY_FORMAT = HEAD_PREFIX + INDEX_FORMAT ## Формат ключа заголовка
const NODE_KEY_FORMAT = NODE_PREFIX + INDEX_FORMAT ## Формат ключа ячейки
const ROW_SELECTOR_KEY_FORMAT = SLCT_PREFIX + INDEX_FORMAT ## Формат ключа индикаторов выбранного ряда
const META_NAME_USER_DATA = 'user_data'
const META_NAME_CALLEBLE = 'calleble'
var header: GridContainer ## Заголовок таблицы
var in_focus: = false ## Фокус пользовательского ввода
@@ -390,14 +389,12 @@ func remove_row(i_row: int):
var node_key: String = NODE_KEY_FORMAT % [i_row, i_col]
var node = nodes[node_key]
var conn_key: String = CONNECTED_KEY_FORMAT % [i_row, i_col]
var conn = get_node_meta(i_col, i_row, 'callable_focus_entered')
node.disconnect('focus_entered', conn)
if nodes.has(conn_key):
conn = nodes[conn_key]
if node.has_meta(META_NAME_CALLEBLE):
conn = node.get_meta(META_NAME_CALLEBLE)
node.disconnect('pressed', conn)
nodes.erase(conn_key)
remove_child(node)
nodes.erase(node_key)
@@ -426,7 +423,6 @@ func rehash():
var i_node: = [Vector2i()]
var i_hdr: = [Vector2i()]
var i_slct: = [Vector2i()]
var i_conn: = [Vector2i()]
var nodes_copy = {}
for key in nodes:
var iv = get_key_indexes(key)
@@ -440,9 +436,6 @@ func rehash():
elif SLCT_PREFIX in key:
swap_nodes(nodes_copy, ROW_SELECTOR_KEY_FORMAT, i0, i_slct[0])
next_index(i_slct)
elif CONN_PREFIX in key:
swap_nodes(nodes_copy, CONNECTED_KEY_FORMAT, i0, i_conn[0])
next_index(i_conn)
nodes.clear()
nodes.merge(nodes_copy)
@@ -465,15 +458,13 @@ func connect_columns(dest_node: Node, event_name: String, callback: String, clmn
for i_row in rows_count:
for i_col in clmns:
assert(i_col >= 0 and i_col < columns, 'ошибка: нет такой колонки: %d' % i_col)
var node_key: String = NODE_KEY_FORMAT % [i_row, i_col]
var conn_key: String = CONNECTED_KEY_FORMAT % [i_row, i_col]
var node = nodes[node_key]
if nodes.has(conn_key):
var conn = nodes[conn_key]
var node = get_node2(i_col, i_row)
if node.has_meta(META_NAME_CALLEBLE):
var conn = node.get_meta(META_NAME_CALLEBLE)
node.disconnect(event_name, conn)
var conn = Callable(dest_node, callback).bind([node] + user_data)
assert (OK == node.connect(event_name, conn))
nodes[conn_key] = conn
node.set_meta(META_NAME_CALLEBLE, conn)
##
func set_rows_text(rows: Array) -> void: