Исправление. Обращение к несуществующему полю 'name'

This commit is contained in:
sasha80
2023-08-10 16:38:34 +03:00
parent 0f850dfb7f
commit 0a108b42a6

View File

@@ -10,7 +10,6 @@ extends GridContainer
@export_file var selector_type_file: = 'res://table/selector.tscn': set = load_selector_scene ## Сцена индикатора для выбранного ряда
const CONN_PREFIX = 'CONN_' ## Префикс ключа обработчиков событий ячейки таблицы
const DATA_PREFIX = 'DATA_' ## Префикс ключа данных ячейки таблицы
const HEAD_PREFIX = 'HEAD_' ## Префикс ключа заголовка таблицы
const INDEX_FORMAT = '%02d_%02d' ## Формат индекса ключа
const MAX_INDEX = 99 ## Максимальное значение индекса для колонки и строки. Связано с форматом индекса ключа
@@ -18,10 +17,10 @@ const NODE_PREFIX = 'NODE_' ## Префикс ключа ячейки та
const SLCT_PREFIX = 'SLCT_' ## Префикс ключа индикатора выбранного ряда таблицы
const CONNECTED_KEY_FORMAT = CONN_PREFIX + INDEX_FORMAT ## Формат ключа подключенных обработчиков сигналов
const DATA_KEY_FORMAT = DATA_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'
var header: GridContainer ## Заголовок таблицы
var in_focus: = false ## Фокус пользовательского ввода
@@ -40,6 +39,8 @@ var scroll_adj: = Vector2(0, 0)
func get_node_scene(): return node_type_file
func _assert_meta(i_col: int, i_row: int, pname: String, node): assert(node.has_meta(pname), 'ошибка: нет мета-свойства \"%s\" у ячейки колонка:%d ряд:%d' % [pname, i_col, i_row])
func get_node_user_data(i_col: int, i_row: int): return get_node_meta(i_col, i_row, META_NAME_USER_DATA)
func set_node_user_data(i_col: int, i_row: int, val) -> void: set_node_meta(i_col, i_row, META_NAME_USER_DATA, val)
## Закрепляет заголовок таблицы. [param scrl] - Прокрутка,
@@ -237,7 +238,7 @@ func set_selector_size_proc(instance: Object, function: String) -> void:
assert(selector_size_proc.is_valid())
## [param i_row] - индекс ряда
## [param i_row] - Индекс ряда
func default_selector_size_proc(i_row: int, rect: Array) -> void:
get_row_rect(i_row, rect)
rect[0] += position.x - node_gap.x / 2.0
@@ -253,7 +254,7 @@ func clear_rows_selected():
set_row_selected(i_row, false)
## [param i_row] - индекс ряда.
## [param i_row] - Индекс ряда.
func set_row_selected(i_row: int, selected: bool = true) -> void:
var key: = ROW_SELECTOR_KEY_FORMAT % [i_row, 0]
var node = nodes[NODE_KEY_FORMAT % [i_row, 0]]
@@ -274,13 +275,13 @@ func set_row_selected(i_row: int, selected: bool = true) -> void:
node.add_child(selector)
## [param i_row] - индекс ряда.
## [param i_row] - Индекс ряда.
func is_row_selected(i_row: int) -> bool:
var key: = ROW_SELECTOR_KEY_FORMAT % [i_row, 0]
return nodes.has(key)
## [param i_row] - индексы рядов.
## [param i_row] - Индексы рядов.
func get_selected_rows(i_rows: Array) -> void:
for key in nodes.keys():
if SLCT_PREFIX in key:
@@ -302,12 +303,6 @@ func get_node2(i_col: int, i_row: int) -> Node:
return nodes[key]
## [param i_row] - индекс ряда.
func set_node_user_data(i_col: int, i_row: int, user_data) -> void:
var key: = DATA_KEY_FORMAT % [i_row, i_col]
nodes[key] = user_data
##
func add_row(row_types: Array) -> void:
assert(row_types.size() < MAX_INDEX, 'ошибка: слишком много колонок, больше %d' % (MAX_INDEX + 1))
@@ -318,7 +313,9 @@ func add_row(row_types: Array) -> void:
var i_row: int = get_rows_count()
assert(i_row < MAX_INDEX, 'ошибка: слишком много рядов, больше %d' % (MAX_INDEX + 1))
for i_col in columns:
var node = row_types[i_col].instantiate()
var node_type = row_types[i_col]
var node = node_type.instantiate()
assert(node.name == node.name, 'ошибка: экземпляр не имеет поля \"name\"')
var head = nodes[HEAD_KEY_FORMAT % [0, i_col]]
node.custom_minimum_size.x = head.custom_minimum_size.x
node.set_deferred('size.x', head.size.x)
@@ -377,12 +374,6 @@ func set_header_text(headers: Array):
set_row_text(0, headers, 0, HEAD_KEY_FORMAT)
##
func get_node_user_data(i_col: int, i_row: int):
var key: = get_node_key(DATA_KEY_FORMAT, i_col, i_row)
return nodes[key]
##
func remove_row(i_row: int):
var sel_key: String = ROW_SELECTOR_KEY_FORMAT % [i_row, 0]
@@ -403,10 +394,6 @@ func remove_row(i_row: int):
var conn = get_node_meta(i_col, i_row, 'callable_focus_entered')
node.disconnect('focus_entered', conn)
var data_key: String = DATA_KEY_FORMAT % [i_row, i_col]
if nodes.has(data_key):
nodes.erase(data_key)
if nodes.has(conn_key):
conn = nodes[conn_key]
node.disconnect('pressed', conn)
@@ -440,7 +427,6 @@ func rehash():
var i_hdr: = [Vector2i()]
var i_slct: = [Vector2i()]
var i_conn: = [Vector2i()]
var i_data: = [Vector2i()]
var nodes_copy = {}
for key in nodes:
var iv = get_key_indexes(key)
@@ -457,9 +443,6 @@ func rehash():
elif CONN_PREFIX in key:
swap_nodes(nodes_copy, CONNECTED_KEY_FORMAT, i0, i_conn[0])
next_index(i_conn)
elif DATA_PREFIX in key:
swap_nodes(nodes_copy, DATA_KEY_FORMAT, i0, i_data[0])
next_index(i_data)
nodes.clear()
nodes.merge(nodes_copy)
@@ -467,8 +450,7 @@ func rehash():
## Удаляет все строки таблицы
func clear_rows() -> void:
var rows_count: int = get_rows_count()
print_debug(rows_count)
for i_row in rows_count:
for i_row in range(rows_count - 1, -1, -1):
remove_row(i_row)