Исправление. Ошибка при удалении элемента из подключенной колонки
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user