Доработка. Исправлен вылет при нажатии удалить.

This commit is contained in:
MaD_CaT
2023-08-18 11:11:32 +03:00
parent 1c37f64ed7
commit ceaec55b69
4 changed files with 43 additions and 29 deletions

View File

@@ -1,12 +1,12 @@
[gd_scene load_steps=5 format=3 uid="uid://87gtvqd7bbje"]
[ext_resource type="Script" path="res://main.gd" id="1_8p35p"]
[ext_resource type="Script" path="res://table/table.gd" id="2_xq1tk"]
[ext_resource type="Texture2D" uid="uid://cex4jiu1pcj3x" path="res://edit-add-0.png" id="3_f3g8t"]
[ext_resource type="Texture2D" uid="uid://cx746np1wexnd" path="res://edit-add-1.png" id="4_4ja4j"]
[ext_resource type="Script" path="res://main.gd" id="1_v038r"]
[ext_resource type="Script" path="res://table/table.gd" id="2_mfyp6"]
[ext_resource type="Texture2D" uid="uid://cex4jiu1pcj3x" path="res://edit-add-0.png" id="3_6tmn6"]
[ext_resource type="Texture2D" uid="uid://cx746np1wexnd" path="res://edit-add-1.png" id="4_1x5i2"]
[node name="main" type="Node2D"]
script = ExtResource("1_8p35p")
script = ExtResource("1_v038r")
[node name="tabs" type="TabContainer" parent="."]
offset_right = 1594.0
@@ -26,7 +26,7 @@ offset_right = 1.0
offset_bottom = 10.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("2_xq1tk")
script = ExtResource("2_mfyp6")
node_type_file = "res://ячейка-1.tscn"
[node name="btn_add" type="TextureButton" parent="tabs/threats"]
@@ -35,8 +35,8 @@ offset_left = 1533.0
offset_top = -2.0
offset_right = 1581.0
offset_bottom = 46.0
texture_normal = ExtResource("3_f3g8t")
texture_pressed = ExtResource("4_4ja4j")
texture_normal = ExtResource("3_6tmn6")
texture_pressed = ExtResource("4_1x5i2")
[node name="btn_del" type="TextureButton" parent="tabs/threats"]
layout_mode = 0
@@ -54,5 +54,5 @@ layout_mode = 0
offset_top = 100.0
offset_right = 1587.0
offset_bottom = 861.0
script = ExtResource("2_xq1tk")
script = ExtResource("2_mfyp6")
node_type_file = "res://ячейка-1.tscn"

View File

@@ -18,8 +18,9 @@ const SLCT_PREFIX = 'SLCT_' ## Префикс ключа индикато
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'
const META_USER_DATA = 'user_data' ## Имя свойства для сохранения данных пользователя
const META_CALLABLE = 'callable' ## Имя свойства для сохранения вызываемого
const META_EVENT_NAME = 'event_name' ## Имя свойства для сохранения названия события
var header: GridContainer ## Заголовок таблицы
var in_focus: = false ## Фокус пользовательского ввода
@@ -38,8 +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)
func get_node_user_data(i_col: int, i_row: int): return get_node_meta(i_col, i_row, META_USER_DATA)
func set_node_user_data(i_col: int, i_row: int, val) -> void: set_node_meta(i_col, i_row, META_USER_DATA, val)
## Закрепляет заголовок таблицы. [param scrl] - Прокрутка,
@@ -48,7 +49,7 @@ func pin_header(scrl: ScrollContainer, prnt: Control):
scrl.remove_child(header)
prnt.add_child(header)
## TODO: Это значение следует получить из темы
var v_separation: = 3.0
var v_separation = get_theme_constant('v_separation')
header.position = scrl.position - Vector2(0, header.size.y + v_separation)
scroll = scrl
scroll_adj = scrl.position
@@ -68,6 +69,9 @@ func selector_up():
if i_row < 0:
i_row = rows_count - 1
set_row_selected(i_row, true)
var node = get_node2(0, i_row)
if scroll is ScrollContainer:
scroll.ensure_control_visible(node)
emit_signal('selected_changed', i_row)
@@ -84,6 +88,9 @@ func selector_down():
i_row += 1
i_row %= rows_count
set_row_selected(i_row, true)
var node = get_node2(0, i_row)
if scroll is ScrollContainer:
scroll.ensure_control_visible(node)
emit_signal('selected_changed', i_row)
@@ -184,7 +191,7 @@ func set_columns_aligment(alignments: Array) -> void:
##
func _input(event) -> void:
if event is InputEventKey:
if in_focus and event.pressed:
if event.pressed and in_focus:
if event.keycode == selector_key_up:
selector_up()
elif event.keycode == selector_key_down:
@@ -392,9 +399,10 @@ func remove_row(i_row: int):
var conn = get_node_meta(i_col, i_row, 'callable_focus_entered')
node.disconnect('focus_entered', conn)
if node.has_meta(META_NAME_CALLEBLE):
conn = node.get_meta(META_NAME_CALLEBLE)
node.disconnect('pressed', conn)
if node.has_meta(META_CALLABLE):
conn = node.get_meta(META_CALLABLE)
var event_name = node.get_meta(META_EVENT_NAME)
node.disconnect(event_name, conn)
remove_child(node)
nodes.erase(node_key)
@@ -459,12 +467,14 @@ func connect_columns(dest_node: Node, event_name: String, callback: String, clmn
for i_col in clmns:
assert(i_col >= 0 and i_col < columns, 'ошибка: нет такой колонки: %d' % i_col)
var node = get_node2(i_col, i_row)
if node.has_meta(META_NAME_CALLEBLE):
var conn = node.get_meta(META_NAME_CALLEBLE)
if node.has_meta(META_CALLABLE):
var conn = node.get_meta(META_CALLABLE)
node.disconnect(event_name, conn)
var conn = Callable(dest_node, callback).bind([node] + user_data)
assert (OK == node.connect(event_name, conn))
node.set_meta(META_NAME_CALLEBLE, conn)
node.set_meta(META_CALLABLE, conn)
node.set_meta(META_EVENT_NAME, event_name)
##
func set_rows_text(rows: Array) -> void:

View File

@@ -362,6 +362,7 @@ func on_btn_add(table):
var row = threat.update_rows()
table.add_row(TABLE_ROW_TYPES)
table.set_row_text(table.get_rows_count()-1, row)
table.set_node_user_data(0, table.get_rows_count()-1, threat)
init_opt_btns(table.get_rows_count()-1, table)
table.connect_columns(self, 'text_submitted', 'on_edit_entry', TABLE_ENTRY_COLUMNS, [])
table.connect_columns(self, 'item_selected', 'on_item_selected', COLUMN_OPT_BTN, [])
@@ -374,6 +375,9 @@ func on_btn_del(table):
var cell = table.get_node2(0, row_i[0])
treats.erase(cell.text)
table.remove_row(row_i[0])
for i in table.get_rows_count():
var treat = table.get_node_user_data(0, i)
treat.row_id = i
func pop_id():

View File

@@ -1,7 +1,7 @@
[gd_scene load_steps=3 format=3 uid="uid://ccxre8mwhndjk"]
[ext_resource type="Texture2D" uid="uid://dag8n0gknjwak" path="res://индикатор-1-0.png" id="1_i48re"]
[ext_resource type="Texture2D" uid="uid://b3ext3w4ftgg2" path="res://индикатор-1-1.png" id="2_be5ku"]
[ext_resource type="Texture2D" uid="uid://dag8n0gknjwak" path="res://индикатор-1-0.png" id="1_dgtjm"]
[ext_resource type="Texture2D" uid="uid://b3ext3w4ftgg2" path="res://индикатор-1-1.png" id="2_aqu5u"]
[node name="indicator_1" type="TextureButton"]
modulate = Color(1, 0.596078, 0.4, 1)
@@ -9,5 +9,5 @@ offset_right = 35.0
offset_bottom = 29.0
toggle_mode = true
button_mask = 0
texture_normal = ExtResource("1_i48re")
texture_pressed = ExtResource("2_be5ku")
texture_normal = ExtResource("1_dgtjm")
texture_pressed = ExtResource("2_aqu5u")