From 09e485acf2e9c4eea854e1a6815e5de066a96c1d Mon Sep 17 00:00:00 2001 From: sasha80 Date: Thu, 17 Aug 2023 13:43:38 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project.godot | 2 +- scenes/{button_flat.tscn => button-flat.tscn} | 8 +- scenes/canvas.tscn | 4 +- scenes/cell-front.gd | 10 --- scenes/{file_table.gd => file-table.gd} | 0 scenes/scrl-threats.gd | 77 +++++++++++++++++++ scenes/scrl_threats.gd | 61 --------------- scenes/{tab_switch.gd => tab-switch.gd} | 0 scenes/{tab_switch.tscn => tab-switch.tscn} | 25 +++--- scenes/ЭМС.tscn | 2 +- scenes/работа.tscn | 10 +-- scripts/threats.gd | 8 +- scripts/tools.gd | 9 ++- table/table.gd | 27 ++++--- 14 files changed, 122 insertions(+), 121 deletions(-) rename scenes/{button_flat.tscn => button-flat.tscn} (90%) rename scenes/{file_table.gd => file-table.gd} (100%) create mode 100644 scenes/scrl-threats.gd delete mode 100644 scenes/scrl_threats.gd rename scenes/{tab_switch.gd => tab-switch.gd} (100%) rename scenes/{tab_switch.tscn => tab-switch.tscn} (56%) diff --git a/project.godot b/project.godot index f8acada9..ccbe7855 100644 --- a/project.godot +++ b/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="uarep-ctl" -run/main_scene="res://scenes/tab_switch.tscn" +run/main_scene="res://scenes/tab-switch.tscn" config/features=PackedStringArray("4.1") run/low_processor_mode=true run/delta_smoothing=false diff --git a/scenes/button_flat.tscn b/scenes/button-flat.tscn similarity index 90% rename from scenes/button_flat.tscn rename to scenes/button-flat.tscn index e34193a5..997f3141 100644 --- a/scenes/button_flat.tscn +++ b/scenes/button-flat.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=9 format=3 uid="uid://da7w3vkhadfwe"] -[ext_resource type="Script" path="res://scenes/nine-patch-button.gd" id="1_mjhcv"] -[ext_resource type="Texture2D" uid="uid://ct0ajcwno03h7" path="res://data/кнопка-квадрат-0.png" id="2_fosdr"] +[ext_resource type="Script" path="res://scenes/nine-patch-button.gd" id="1_uqldr"] +[ext_resource type="Texture2D" uid="uid://ct0ajcwno03h7" path="res://data/кнопка-квадрат-0.png" id="2_0loew"] [sub_resource type="StyleBoxEmpty" id="1"] @@ -19,13 +19,13 @@ offset_right = 30.0 offset_bottom = 30.0 theme_override_styles/panel = SubResource("1") -script = ExtResource("1_mjhcv") +script = ExtResource("1_uqldr") toggle_mode = true [node name="state" type="NinePatchRect" parent="."] show_behind_parent = true layout_mode = 2 -texture = ExtResource("2_fosdr") +texture = ExtResource("2_0loew") patch_margin_left = 10 patch_margin_top = 10 patch_margin_right = 10 diff --git a/scenes/canvas.tscn b/scenes/canvas.tscn index 862fd598..bbce1b5d 100644 --- a/scenes/canvas.tscn +++ b/scenes/canvas.tscn @@ -8,7 +8,7 @@ [sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_2bft1"] size = Vector2(1600, 1200) -[sub_resource type="ShaderMaterial" id="ShaderMaterial_dklk6"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_24d36"] resource_local_to_scene = true shader = ExtResource("4_gb4a1") shader_parameter/color = Color(1, 1, 1, 0.168627) @@ -26,6 +26,6 @@ centered = false script = ExtResource("2_vkwmy") [node name="строб" parent="." instance=ExtResource("3_uhdvc")] -material = SubResource("ShaderMaterial_dklk6") +material = SubResource("ShaderMaterial_24d36") position = Vector2(560, 560) scale = Vector2(1100, 1100) diff --git a/scenes/cell-front.gd b/scenes/cell-front.gd index 1da989c0..0623b7a9 100644 --- a/scenes/cell-front.gd +++ b/scenes/cell-front.gd @@ -3,13 +3,3 @@ extends Control @export var text: String = '': set(val): $label.set_text(val) get: return $label.get_text() - - -# Called when the node enters the scene tree for the first time. -func _ready(): - pass # Replace with function body. - - -# Called every frame. 'delta' is the elapsed time since the previous frame. -func _process(delta): - pass diff --git a/scenes/file_table.gd b/scenes/file-table.gd similarity index 100% rename from scenes/file_table.gd rename to scenes/file-table.gd diff --git a/scenes/scrl-threats.gd b/scenes/scrl-threats.gd new file mode 100644 index 00000000..aae24301 --- /dev/null +++ b/scenes/scrl-threats.gd @@ -0,0 +1,77 @@ +extends ScrollContainer + +## Отображение списка целей в таблицу. + + +const CellLineEdit = preload('res://scenes/ячейка-2.tscn') ## Ячейка таблицы. +const TableHeader = preload('res://table/header.tscn') ## Ячейка заголовок таблицы. + + +const TABLE_HEADER = [ TableHeader, TableHeader, TableHeader, TableHeader ] ## Описание ряда заголовка. +const TABLE_ROW = [ CellLineEdit, CellLineEdit, CellLineEdit, CellLineEdit ] ## Описание ряда. +const TABLE_COLUMN_PARAM = ['id', 'aoa', 'freq', 'proto' ] ## Параметры цели отображаемые в таблице. +const TABLE_HEADERS_TEXT = ['Номер', 'Пеленг', 'Частота, МГц', 'Протокол' ] ## Заголовки таблицы. +const TABLE_COLUMN_SIZE = [ 50, 140, 140, 100 ] ## Ширины колонок. + + +func on_row_pressed(i_row: int): + var selected = $tbl_threats.is_row_selected(i_row) + $tbl_threats.set_row_selected(i_row, not selected) + + +func init_table(): + $tbl_threats.set_header(TABLE_HEADER) + $tbl_threats.set_header_text(TABLE_HEADERS_TEXT) + $tbl_threats.set_columns_min_size(TABLE_COLUMN_SIZE) + $tbl_threats.pin_header(self, get_parent()) + $tbl_threats.connect('row_pressed', Callable(self, 'on_row_pressed')) + + +func _ready() -> void: + var th_table_id: = Dictionary() + Threats.connect('threat_new', Callable(self, 'on_threat_new').bind(th_table_id)) + Threats.connect('threat_lost', Callable(self, 'on_threat_lost').bind(th_table_id)) + Threats.connect('threat_update', Callable(self, 'on_threat_update').bind(th_table_id)) + call_deferred('init_table') + + +## Перестраивает индекс таблицы +func rehash(th_table_id: Dictionary): + var rows_count = $tbl_threats.get_rows_count() + for i_row in rows_count: + var item = $tbl_threats.get_node2(0, i_row) + th_table_id[int(item.text)] = i_row + + +## Обрабатывает сигнал [b]threat_update[/b] +func on_threat_update(_threats, th, th_table_id: Dictionary): + var row = map_th_to_row(th) + var i_row = th_table_id[th.id] + $tbl_threats.set_row_text(i_row, row) + + +## Обрабатывает сигнал [b]threat_lost[/b] +func on_threat_lost(_threats, th, th_table_id: Dictionary): + $tbl_threats.remove_row(th_table_id[th.id]) + th_table_id.clear() + rehash(th_table_id) + + +## Обрабатывает сигнал [b]threat_new[/b] +func on_threat_new(_threats, th, th_table_id): + var i_row = $tbl_threats.get_rows_count() + $tbl_threats.add_row(TABLE_ROW) + var row = map_th_to_row(th) + $tbl_threats.set_row_text(i_row, row) + th_table_id[th.id] = i_row + + +## Преобразует цель в строку таблицы +func map_th_to_row(th) -> Array: + var row: = Array() + row.resize(TABLE_COLUMN_PARAM.size()) + var i_col: int = 0 + for param_name in TABLE_COLUMN_PARAM: + row[i_col] = '%s' % th.get(param_name) + i_col += 1 + return row diff --git a/scenes/scrl_threats.gd b/scenes/scrl_threats.gd deleted file mode 100644 index bb28aad9..00000000 --- a/scenes/scrl_threats.gd +++ /dev/null @@ -1,61 +0,0 @@ -extends ScrollContainer - -const CellLineEdit = preload('res://scenes/ячейка-2.tscn') -const TableHeader = preload('res://table/header.tscn') -const TableNode = preload('res://table/node.tscn') - - -const TABLE_ROW = [CellLineEdit, CellLineEdit, CellLineEdit, CellLineEdit] -const TABLE_COLUMN_PARAM = ['id', 'aoa', 'freq', 'proto'] ## Параметры цели отображаемые в таблице. -const TABLE_HEADERS_TEXT = ['Номер', 'Пеленг', 'Частота, МГц', 'Протокол'] ## - - -func on_row_pressed(i_row: int): - var selected = $tbl_threats.is_row_selected(i_row) - $tbl_threats.set_row_selected(i_row, not selected) - - -func init_table(): - $tbl_threats.set_header([TableHeader, TableHeader, TableHeader, TableHeader]) - $tbl_threats.set_header_text(TABLE_HEADERS_TEXT) - $tbl_threats.set_columns_min_size([50, 140, 140, 100]) - $tbl_threats.pin_header(self, get_parent()) - $tbl_threats.connect('row_pressed', Callable(self, 'on_row_pressed')) - - -func _ready() -> void: - var th_table_id: = Dictionary() - Threats.connect('threat_new', Callable(self, 'on_threat_new').bind(th_table_id)) - Threats.connect('threat_lost', Callable(self, 'on_threat_lost').bind(th_table_id)) - call_deferred('init_table') - - -func rehash(th_table_id: Dictionary): - var rows_count = $tbl_threats.get_rows_count() - for i_row in rows_count: - var item = $tbl_threats.get_node2(0, i_row) - th_table_id[int(item.text)] = i_row - - -func on_threat_lost(_threats, th, th_table_id: Dictionary): - $tbl_threats.remove_row(th_table_id[th.id]) - th_table_id.clear() - rehash(th_table_id) - - -func on_threat_new(_threats, th, th_table_id): - var i_row = $tbl_threats.get_rows_count() - $tbl_threats.add_row(TABLE_ROW) - var row = map_th_to_row(th) - $tbl_threats.set_row_text(i_row, row) - th_table_id[th.id] = i_row - - -func map_th_to_row(th): - var row: = Array() - row.resize(TABLE_COLUMN_PARAM.size()) - var i_col: int = 0 - for param_name in TABLE_COLUMN_PARAM: - row[i_col] = '%s' % th.get(param_name) - i_col += 1 - return row diff --git a/scenes/tab_switch.gd b/scenes/tab-switch.gd similarity index 100% rename from scenes/tab_switch.gd rename to scenes/tab-switch.gd diff --git a/scenes/tab_switch.tscn b/scenes/tab-switch.tscn similarity index 56% rename from scenes/tab_switch.tscn rename to scenes/tab-switch.tscn index 0bbbf2fe..eaecc83d 100644 --- a/scenes/tab_switch.tscn +++ b/scenes/tab-switch.tscn @@ -1,29 +1,28 @@ [gd_scene load_steps=6 format=3 uid="uid://3slb0i3pvowc"] -[ext_resource type="Script" path="res://scenes/tab_switch.gd" id="1_wyyi7"] -[ext_resource type="PackedScene" uid="uid://b276iygic5itk" path="res://scenes/работа.tscn" id="2_r1u0h"] -[ext_resource type="PackedScene" uid="uid://lwmw4egynmd1" path="res://scenes/контроль.tscn" id="3_dmb4a"] -[ext_resource type="PackedScene" uid="uid://trt0q8th3bn2" path="res://scenes/журнал.tscn" id="4_pp7si"] -[ext_resource type="PackedScene" uid="uid://dab6loryocc73" path="res://scenes/ЭМС.tscn" id="5_kbxv3"] +[ext_resource type="Script" path="res://scenes/tab-switch.gd" id="1_qroqt"] +[ext_resource type="PackedScene" uid="uid://b276iygic5itk" path="res://scenes/работа.tscn" id="2_pdbvn"] +[ext_resource type="PackedScene" uid="uid://lwmw4egynmd1" path="res://scenes/контроль.tscn" id="3_2apbp"] +[ext_resource type="PackedScene" uid="uid://trt0q8th3bn2" path="res://scenes/журнал.tscn" id="4_yq6c0"] +[ext_resource type="PackedScene" uid="uid://dab6loryocc73" path="res://scenes/ЭМС.tscn" id="5_tlyql"] [node name="tab_switch" type="TabContainer"] offset_right = 1600.0 offset_bottom = 1200.0 -script = ExtResource("1_wyyi7") +script = ExtResource("1_qroqt") -[node name="работа" parent="." instance=ExtResource("2_r1u0h")] +[node name="работа" parent="." instance=ExtResource("2_pdbvn")] +layout_mode = 2 + +[node name="контроль" parent="." instance=ExtResource("3_2apbp")] visible = false layout_mode = 2 -[node name="контроль" parent="." instance=ExtResource("3_dmb4a")] +[node name="журнал" parent="." instance=ExtResource("4_yq6c0")] visible = false layout_mode = 2 -[node name="журнал" parent="." instance=ExtResource("4_pp7si")] -visible = false -layout_mode = 2 - -[node name="ЭМС" parent="." instance=ExtResource("5_kbxv3")] +[node name="ЭМС" parent="." instance=ExtResource("5_tlyql")] visible = false layout_mode = 2 diff --git a/scenes/ЭМС.tscn b/scenes/ЭМС.tscn index 4d09ffe9..36a7a757 100644 --- a/scenes/ЭМС.tscn +++ b/scenes/ЭМС.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=9 format=3 uid="uid://dab6loryocc73"] [ext_resource type="Script" path="res://scenes/ЭМС.gd" id="1_7ip0t"] -[ext_resource type="PackedScene" uid="uid://da7w3vkhadfwe" path="res://scenes/button_flat.tscn" id="2_85cl8"] +[ext_resource type="PackedScene" uid="uid://da7w3vkhadfwe" path="res://scenes/button-flat.tscn" id="2_85cl8"] [ext_resource type="Texture2D" uid="uid://dd60btbqnpiqw" path="res://data/document-new-0.png" id="3_mtj4x"] [ext_resource type="Texture2D" uid="uid://coqg6wsftvtxr" path="res://data/document-save-0.png" id="4_m4ucm"] [ext_resource type="Texture2D" uid="uid://cywuevvpkxl7v" path="res://data/edit-copy-0.png" id="5_eeb4o"] diff --git a/scenes/работа.tscn b/scenes/работа.tscn index d9786569..5baad53b 100644 --- a/scenes/работа.tscn +++ b/scenes/работа.tscn @@ -4,9 +4,9 @@ [ext_resource type="PackedScene" uid="uid://nl1vklubr5kr" path="res://scenes/bip.tscn" id="2_ijbv2"] [ext_resource type="PackedScene" uid="uid://b5kjdyxuwsot5" path="res://scenes/canvas.tscn" id="3_fppu7"] [ext_resource type="PackedScene" uid="uid://bq7haw1ypiv48" path="res://scenes/frame.tscn" id="4_35qoc"] -[ext_resource type="Script" path="res://scenes/scrl_threats.gd" id="5_j58w3"] +[ext_resource type="Script" path="res://scenes/scrl-threats.gd" id="5_tr3hj"] [ext_resource type="Script" path="res://table/table.gd" id="6_fpdpm"] -[ext_resource type="PackedScene" uid="uid://da7w3vkhadfwe" path="res://scenes/button_flat.tscn" id="7_2sxkw"] +[ext_resource type="PackedScene" uid="uid://da7w3vkhadfwe" path="res://scenes/button-flat.tscn" id="7_2sxkw"] [ext_resource type="FontFile" uid="uid://befva8r034a4v" path="res://data/DSEG7Classic-Regular.ttf" id="8_68ssn"] [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_5ugj8"] @@ -203,7 +203,7 @@ offset_top = 57.0 offset_right = 464.0 offset_bottom = 306.0 horizontal_scroll_mode = 0 -script = ExtResource("5_j58w3") +script = ExtResource("5_tr3hj") [node name="tbl_threats" type="GridContainer" parent="frm_threats/scrl_threats"] layout_mode = 2 @@ -701,7 +701,3 @@ offset_top = 50.0 offset_right = 83.0 offset_bottom = 72.0 text = "Опасных:" - -[connection signal="drag_begin" from="." to="." method="_on_drag_begin"] -[connection signal="drag_continue" from="." to="." method="_on_drag_continue"] -[connection signal="full_screen" from="." to="." method="_on_full_screen" flags=3] diff --git a/scripts/threats.gd b/scripts/threats.gd index 0353ebe1..bde460dd 100644 --- a/scripts/threats.gd +++ b/scripts/threats.gd @@ -1,6 +1,6 @@ extends Node -## +## Работа с целями ## Цель @@ -12,6 +12,7 @@ class Threat: var fflags: Dictionary ## Флаги достоверности полей. var freq: float ## Частота несущей или центральная частота, МГц. var freqm: String ## Режим смены частоты. + var id: int ## Идентификатор цели. var lat: float ## Текущие координаты, долгота в градусах. var lon: float ## Текущие координаты, широта в градусах. var power: float ## Уровень принимаемого сигнала, дБм. @@ -24,7 +25,6 @@ class Threat: var tick: int ## Тик время приёма сигнала, мс. var tmod: String ## Тип модуляции. var width: float ## Ширина занимаемого диапазона частот, МГц. - var id: int ## Идентификатор цели. func _init(): Tools.get_members_names(self).any(func(vn): fflags[vn] = false) func _to_string() -> String: return 'номер:%d пеленг:%0.1f частота:%0.1f МГц' % [id, aoa, freq] @@ -53,7 +53,7 @@ func _ready() -> void: timer_check_lost.start(REPSettings.ThreatParams.time_lost / 1000.0) -## Периодически проверяет приборы на связи +## Периодически удаляет устаревшие цели func on_timer_check_lost(time_lost: int): var tick = Time.get_ticks_msec() for th in threats.values(): @@ -64,7 +64,7 @@ func on_timer_check_lost(time_lost: int): ## Производит приём целей func on_data_capsrpb_received(unit: capsrpb.CapsRpb): - if 'mis' not in unit.json_dic: + if not unit.json_dic.has('mis'): return var mis = unit.json_dic['mis'] for dic_th in mis: diff --git a/scripts/tools.gd b/scripts/tools.gd index 72d53f22..2df164b1 100644 --- a/scripts/tools.gd +++ b/scripts/tools.gd @@ -73,10 +73,11 @@ func map_range(val: float, a0: float, a1: float, b0: float, b1: float) -> float: ## Возвращает true, если точка внутри заданного полигона func is_point_in_polygon(pos: Vector2, p: PackedVector2Array) -> bool: - assert(len(p)) - var j: int = len(p) - 1 + var sz: = p.size() + assert(sz) + var j: int = sz - 1 var odd_nodes: int = 0 - for i in len(p): + for i in sz: if ((p[i].y < pos.y and p[j].y >= pos.y or p[j].y < pos.y and p[i].y >= pos.y) and (p[i].x <= pos.x or p[j].x <= pos.x)): odd_nodes ^= int((p[i].x + (pos.y - p[i].y) / (p[j].y - p[i].y) * (p[j].x - p[i].x) < pos.x)) j = i @@ -85,6 +86,6 @@ func is_point_in_polygon(pos: Vector2, p: PackedVector2Array) -> bool: ## Записывает слово [param val] в элемент байтовго массива [param buf] ## расположенный по индексу [param index]. Младшее слово -func set_wordi(buf: Array, index: int, val: int) -> void: +func set_wordi(buf: PackedByteArray, index: int, val: int) -> void: buf[index] = val & 0xff buf[index + 1] = (val >> 8) & 0xff diff --git a/table/table.gd b/table/table.gd index bc82f035..c979ff2f 100644 --- a/table/table.gd +++ b/table/table.gd @@ -28,7 +28,7 @@ var nodes: = {} ## Все ячейки таблицы и до var ScnNode: PackedScene ## Прототип ячейки таблицы var ScnSelector: PackedScene ## Прототип индикатора выбранного ряда var selector_color_proc: Callable ## Ссылка на процедуру генератора цвета индикатора выбранного ряда -var selector_size_proc: Callable ## Ссылка на процедуру генератора размера индикатора выбранного ряда +var selector_size_proc: Callable ## Ссылка на процедуру генератора размера индикатора выбранного ряда signal row_pressed(i_row: int) ## Вызывается при нажатии кнопкой мыши на строку signal selected_changed(i_row: int) ## Вызывается при изменении выбранного ряда. i_row - текущий выбранный ряд @@ -48,7 +48,6 @@ func set_node_user_data(i_col: int, i_row: int, val) -> void: set_node_meta(i_co func pin_header(scrl: ScrollContainer, prnt: Control): scrl.remove_child(header) prnt.add_child(header) - ## TODO: Это значение следует получить из темы var v_separation = get_theme_constant('v_separation') header.position = scrl.position - Vector2(0, header.size.y + v_separation) scroll = scrl @@ -129,14 +128,14 @@ func align_to_left_bottompos(hdr: Control, gap: = Vector2(0, 0)): position.y = hdr.position.y + hdr.size.y + gap.y -## [param i_col] - индекс колонки. [param i_row] - индекс ряда. +## [param i_col] - Индекс колонки. [param i_row] - Индекс ряда. func set_node_meta(i_col: int, i_row: int, pname: String, val) -> void: var key: = get_node_key(NODE_KEY_FORMAT, i_col, i_row) var node = nodes[key] node.set_meta(pname, val) -## [param i_col] - индекс колонки. [param i_row] - индекс ряда. +## [param i_col] - Индекс колонки. [param i_row] - Индекс ряда. func get_node_meta(i_col: int, i_row: int, pname: String): var key: = get_node_key(NODE_KEY_FORMAT, i_col, i_row) var node = nodes[key] @@ -144,21 +143,21 @@ func get_node_meta(i_col: int, i_row: int, pname: String): return node.get_meta(pname) -## [param i_col] - индекс колонки. [param i_row] - индекс ряда. +## [param i_col] - Индекс колонки. [param i_row] - Индекс ряда. func set_node_property(i_col: int, i_row: int, pname: String, val) -> void: var key: = get_node_key(NODE_KEY_FORMAT, i_col, i_row) var node = nodes[key] node.set(pname, val) -## [param i_col] - индекс колонки. [param i_row] - индекс ряда. +## [param i_col] - Индекс колонки. [param i_row] - Индекс ряда. func get_node_property(i_col: int, i_row: int, pname: String): var key: = get_node_key(NODE_KEY_FORMAT, i_col, i_row) var node = nodes[key] return node.get(pname) -## [param i_col] - индекс колонки. [param i_row] - индекс ряда +## [param i_col] - Индекс колонки. [param i_row] - Индекс ряда func get_node_key(format: String, i_col: int, i_row: int) -> String: var key: String = format % [i_row, i_col] assert(nodes.has(key), 'ошибка: нет такой ячейки - колонка:%d ряд:%d' % [i_col, i_row]) @@ -303,13 +302,13 @@ func get_rows_count() -> int: return nodes_count / columns -## +## [param i_col] - Индекс колонки. [param i_row] - Индекс ряда. func get_node2(i_col: int, i_row: int) -> Node: var key: = get_node_key(NODE_KEY_FORMAT, i_col, i_row) return nodes[key] -## +## Добавляет ряд. [param row_types] - Массив типов ячеек ряда func add_row(row_types: Array) -> void: assert(row_types.size() < MAX_INDEX, 'ошибка: слишком много колонок, больше %d' % (MAX_INDEX + 1)) if columns == 1: @@ -323,7 +322,7 @@ func add_row(row_types: Array) -> void: 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('custom_minimum_size.x', head.custom_minimum_size.x) node.set_deferred('size.x', head.size.x) var node_key: String = NODE_KEY_FORMAT % [i_row, i_col] node.name = node_key @@ -380,7 +379,7 @@ func set_header_text(headers: Array): set_row_text(0, headers, 0, HEAD_KEY_FORMAT) -## +## [param i_row] - индекс ряда. func remove_row(i_row: int): var sel_key: String = ROW_SELECTOR_KEY_FORMAT % [i_row, 0] @@ -485,7 +484,7 @@ func set_rows_text(rows: Array) -> void: node.text = rows[i_row][i_col] -## +## [param i_row] - индекс ряда. func set_nodes_min_size(i_row: int, sizes: Array, key_format: String = NODE_KEY_FORMAT) -> void: for i_col in columns: var key: = get_node_key(key_format, i_col, i_row) @@ -494,7 +493,7 @@ 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] - индекс ряда. 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 @@ -508,7 +507,7 @@ func set_rows_state(rows: Array) -> void: nodes[key].button_pressed = rows[i_row][i_col] -## +## [param i_col] - индекс колонки. [param i_row] - индекс ряда. func set_node_state(i_col: int, i_row: int, val: bool) -> void: var key: = get_node_key(NODE_KEY_FORMAT, i_col, i_row) nodes[key].button_pressed = val