Доработка. WIP Отображение кластера в таблице
This commit is contained in:
@@ -1,57 +1,102 @@
|
||||
@tool
|
||||
extends Panel
|
||||
|
||||
#region Определяемое использованием
|
||||
## Индекс -> Имя устройства. Нужен для предсказуемого
|
||||
## порядка отображения: верх->вниз или лево->право.
|
||||
## Имя устройства должно быть взято из settings.gd
|
||||
@export var index_to_unit_names: Array[StringName]
|
||||
#endregion
|
||||
|
||||
@export var matrix_conf: Array[Texture] ## [0] - чисто, нет конфликта, [1] - есть наложение частот
|
||||
@export var index_to_unit_names: Array[StringName] ## Имена устройств (Индекс -> Имя устройства)
|
||||
#region Загружаемые ресурсы
|
||||
@export var matrix_conf: Array[Texture]
|
||||
@export_file('*.tscn') var table_headers: Array[String]
|
||||
@export_file('*.tscn') var table_cells: Array[String]
|
||||
@export_file('*.png') var image_file_rx: String
|
||||
@export_file('*.png') var image_file_tx: String
|
||||
@export var table_rows_hight: int
|
||||
@export var table_column_widths: Array[int]
|
||||
@export var table_header_widths: Array[int]
|
||||
@export var table_header_text: Array[String]
|
||||
var table_cell_row: Array
|
||||
var name_to_index: Dictionary[StringName, int] ## Имена устройств (Имя устройства -> Индекс)
|
||||
var yems_data_info: Dictionary
|
||||
var yems_data_cmd: Dictionary
|
||||
#endregion
|
||||
|
||||
#region Заполняется автоматически при запуске
|
||||
var name_to_index: Dictionary[StringName, int] ## Имя устройства -> Индекс
|
||||
var name_to_scale: Dictionary[StringName, Control] ## Имя устройства -> Шкала
|
||||
var table_cell_row: Array
|
||||
#endregion
|
||||
|
||||
#region Заполняется во время работы
|
||||
var yems_data_info: Dictionary[StringName, Dictionary] ## Доклады
|
||||
var yems_data_cmd: Dictionary[StringName, Dictionary] ## Команды
|
||||
## Порядок следования кластеров в таблице.
|
||||
## {имя_устройства: { имя_кластера: индекс_в_таблице } }
|
||||
var cnames_table: Dictionary[StringName, Dictionary]
|
||||
#endregion
|
||||
|
||||
func _ready() -> void:
|
||||
# Инициализировать переменные
|
||||
for i in index_to_unit_names.size():
|
||||
var nm: = index_to_unit_names[i]
|
||||
name_to_index[nm] = i
|
||||
yems_data_info[nm] = {}
|
||||
cnames_table[nm] = {}
|
||||
var yems_scales = get_tree().get_nodes_in_group('ряд-шкалы')
|
||||
for node in yems_scales:
|
||||
var nm = node.get_meta('unit_name')
|
||||
name_to_scale[nm] = node
|
||||
node.connect('pressed', map_yems_data_to_table.bind(nm))
|
||||
var header_row: = []
|
||||
for cell_scn in table_headers:
|
||||
header_row.append(load(cell_scn))
|
||||
for cell_scn in table_cells:
|
||||
table_cell_row.append(load(cell_scn))
|
||||
|
||||
$'таблица/сетка'.set_header(header_row)
|
||||
$'таблица/сетка'.set_header_text(table_header_text)
|
||||
$'таблица/сетка'.set_header_property(6, 'image_file', image_file_rx)
|
||||
$'таблица/сетка'.set_header_property(7, 'image_file', image_file_tx)
|
||||
# Настрить таблицу
|
||||
var ctable: = $'таблица/сетка'
|
||||
ctable.set_header(header_row)
|
||||
ctable.set_header_text(table_header_text)
|
||||
ctable.set_header_property(6, 'image_file', image_file_rx)
|
||||
ctable.set_header_property(7, 'image_file', image_file_tx)
|
||||
ctable.set_headers_min_size(table_header_widths)
|
||||
ctable.set_columns_min_size(table_column_widths)
|
||||
ctable.set_rows_min_hight(table_rows_hight)
|
||||
ctable.set_header_min_hight(table_rows_hight)
|
||||
ctable.pin_header2()
|
||||
|
||||
$'таблица/сетка'.set_headers_min_size(table_header_widths)
|
||||
$'таблица/сетка'.set_columns_min_size(table_column_widths)
|
||||
$'таблица/сетка'.set_rows_min_hight(32)
|
||||
$'таблица/сетка'.set_header_min_hight(32)
|
||||
$'таблица/сетка'.pin_header2()
|
||||
|
||||
for nm in index_to_unit_names:
|
||||
# Подключить обработчики
|
||||
for nm in yems_data_info.keys():
|
||||
var yems_unit = network.get_unit_instance(nm)
|
||||
yems_unit.connect('data_received', on_data_received.bind(nm))
|
||||
|
||||
|
||||
func on_data_received(data, nm):
|
||||
func on_data_received(data: Dictionary, nm: StringName):
|
||||
yems_data_info[nm].merge(data, true)
|
||||
map_yems_data()
|
||||
map_yems_data_to_table(nm)
|
||||
|
||||
|
||||
func map_yems_data():
|
||||
var yems_scales = get_tree().get_nodes_in_group('ряд-шкалы')
|
||||
for node in yems_scales:
|
||||
var unit_name = node.get_meta('unit_name')
|
||||
var scale_data = yems_data_info.get(unit_name)
|
||||
print_debug(scale_data)
|
||||
## [param nm] - имя устройства
|
||||
func map_yems_data_to_table(nm: StringName):
|
||||
var unit_data = yems_data_info.get(nm)
|
||||
if not unit_data: return # Данных ещё нет
|
||||
var ctable: GDTable = $'таблица/сетка'
|
||||
var indexes: = cnames_table[nm] # Идексы строк таблицы для кластеров заданного устройства
|
||||
var rows_changed: = false
|
||||
# Обойти все кластеры устройства
|
||||
for cls in unit_data.mcls:
|
||||
# Строка для заполнения
|
||||
var row_text = [cls.cname, 'Активен', '%.1f' % cls.ttl, '%.1f' % cls.daa, '%.1f' % cls.dap, '%.1f' % cls.cfb]
|
||||
# Если такой кластер уже есть, обновить его строку в таблице
|
||||
if cls.cname in indexes:
|
||||
# Получить индекс строки кластера в таблице
|
||||
var i_row = indexes[cls.cname]
|
||||
ctable.set_row_text(0, row_text)
|
||||
# Если такого кластера нет, создать его строку в таблице
|
||||
else:
|
||||
# Создать новый ряд
|
||||
ctable.add_row(table_cell_row)
|
||||
rows_changed = true
|
||||
# Записать индекс строки в таблице для кластера
|
||||
indexes[cls.cname] = indexes.size()
|
||||
if rows_changed:
|
||||
ctable.set_rows_min_hight(table_rows_hight)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=31 format=3 uid="uid://musb21x2u0xs"]
|
||||
[gd_scene load_steps=32 format=3 uid="uid://musb21x2u0xs"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bvlqgv7aapebl" path="res://scenes/эмс-тг/эмс-тг.gd" id="1_b7tfl"]
|
||||
[ext_resource type="Texture2D" uid="uid://djv8fkddcjucs" path="res://data/матрица-чисто.png" id="2_s28jr"]
|
||||
@@ -30,6 +30,8 @@
|
||||
[ext_resource type="Texture2D" uid="uid://cx0f3wcx76u1k" path="res://data/РЛС2.png" id="27_3x2eg"]
|
||||
[ext_resource type="Texture2D" uid="uid://duu8q7sv0jwfh" path="res://data/ННВС.png" id="28_wh3ue"]
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_niy1n"]
|
||||
|
||||
[sub_resource type="ButtonGroup" id="ButtonGroup_vwsbs"]
|
||||
allow_unpress = true
|
||||
|
||||
@@ -37,12 +39,13 @@ allow_unpress = true
|
||||
offset_top = 35.0
|
||||
offset_bottom = 35.0
|
||||
script = ExtResource("1_b7tfl")
|
||||
matrix_conf = Array[Texture]([ExtResource("2_s28jr"), ExtResource("3_its7t")])
|
||||
index_to_unit_names = Array[StringName]([&"эмс-ор63", &"эмс-454", &"эмс-го", &"эмс-рлс1", &"эмс-рлс2", &"эмс-ннвс", &"эмс-изделие7", &"эмс-изделие8"])
|
||||
matrix_conf = Array[Texture]([ExtResource("2_s28jr"), ExtResource("3_its7t")])
|
||||
table_headers = Array[String](["uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://ch14g46swx74h", "uid://cymcld4mjmlhj", "uid://cymcld4mjmlhj"])
|
||||
table_cells = Array[String](["uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://dwphmxstaxn4v", "uid://cixwl6xi22buo", "uid://cixwl6xi22buo"])
|
||||
image_file_rx = "uid://c6etralq2tvxg"
|
||||
image_file_tx = "uid://c73tjrn8gr00o"
|
||||
table_rows_hight = 32
|
||||
table_column_widths = Array[int]([134, 134, 134, 134, 134, 134, 134, 134])
|
||||
table_header_widths = Array[int]([136, 136, 136, 136, 136, 136, 136, 136])
|
||||
table_header_text = Array[String](["Кластер", "Состояние", "Время", "Азимут", "Угол места", "Диапазон", "Приём", "Передача"])
|
||||
@@ -53,6 +56,7 @@ offset_left = 20.0
|
||||
offset_top = 800.0
|
||||
offset_right = 1190.0
|
||||
offset_bottom = 1150.0
|
||||
theme_override_styles/focus = SubResource("StyleBoxEmpty_niy1n")
|
||||
draw_focus_border = true
|
||||
vertical_scroll_mode = 2
|
||||
|
||||
@@ -118,6 +122,7 @@ size_flags_vertical = 7
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_vwsbs")
|
||||
text = "454"
|
||||
metadata/unit_name = &"эмс-454"
|
||||
|
||||
[node name="sub1" type="GridContainer" parent="шкала"]
|
||||
layout_mode = 2
|
||||
@@ -227,6 +232,7 @@ size_flags_vertical = 7
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_vwsbs")
|
||||
text = "ННВС"
|
||||
metadata/unit_name = &""
|
||||
|
||||
[node name="sub5" type="GridContainer" parent="шкала"]
|
||||
layout_mode = 2
|
||||
|
||||
Reference in New Issue
Block a user