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