Рефактор.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
77
scenes/scrl-threats.gd
Normal file
77
scenes/scrl-threats.gd
Normal file
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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"]
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user