Files
uarep-ctl/scenes/frame-ecm-list/scroll-ecm-list.gd

153 lines
5.5 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

extends ScrollContainer
## Отображает список помех в таблице.
const CellLineEdit = preload('res://table/ячейка-2.tscn') ## Ячейка таблицы.
const TableHeader = preload('res://table/header.tscn') ## Ячейка заголовок таблицы.
const TABLE_HEADER = [ TableHeader, TableHeader, TableHeader, TableHeader , TableHeader ] ## Описание ряда заголовка.
const TABLE_ROW = [ CellLineEdit, CellLineEdit, CellLineEdit, CellLineEdit , CellLineEdit ] ## Описание ряда.
const TABLE_HEADERS_TEXT = ['Номер', 'Название', 'Частота, МГц', 'Пеленг', 'Состояние' ] ## Заголовки таблицы.
const TABLE_COLUMN_SIZE = [ 65, 80, 120, 70, 100 ] ## Ширины колонок.
## Состояние выполнения сеанса помехи
const INTERFER_STATE = {
0: 'Подготовка',
1: 'Выполняется',
2: 'Ошибка',
3: 'Занято',
4: 'Неисправность',
5: 'Передача' }
## Состояние выполнения сеанса помехи
const INTERFER_NAMES = {
'off': 'Откл',
'mchm1': 'МЧМ-1',
'srni1': 'СРН-И1',
'srnm2': 'СРН-М2',
'srngps': 'СРН-GPS',
'pdm4': 'ПД-М4',
'pdm2': 'ПД-М2',
'lchm1': 'ЛЧМ-1',
'lchm2': 'ЛЧМ-2',
'pdm4s': 'ПД-М4С',
'pdchm': 'ПД-ЧМ',
'svi1': 'СВ-И1',
'k1': 'K1',
'svm2': 'СВ-М2',
'ozp1': 'ОЗП-1'}
## Индексы колонок
const COLUMN_NUMBER = 0
const COLUMN_NAME = 1
const COLUMN_FREQ = 2
const COLUMN_AOA = 3
const COLUMN_STATE = 4
## Вызывается при нажатии указателем мыши на выбранный ряд.
func on_row_pressed(i_row: int):
$table.clear_rows_selected()
$table.set_row_selected(i_row, true)
var ecm = $table.get_node_user_data(0, i_row)
if interfer.thrs.has(ecm.ispp):
signaller.emit_signal('rto_threat_sel', interfer.thrs[ecm.ispp])
else:
if interfer.fs.has(ecm.ispp):
signaller.emit_signal('fs_selected', ecm)
signaller.emit_signal('interfer_selected', ecm)
## Вызывается при выборе цели
func on_rto_threat_sel(th_id: int, table_index):
var ecm_ispp = interfer.thrs.find_key(th_id)
var ecm = null
if ecm_ispp != null:
var i_row = table_index[int(ecm_ispp)]
ecm = $table.get_node_user_data(0, i_row)
$table.clear_rows_selected()
$table.set_row_selected(i_row, true)
else:
$table.clear_rows_selected()
signaller.emit_signal('interfer_selected', ecm)
# Called when the node enters the scene tree for the first time.
func _ready():
var table_index: = Dictionary()
signaller.connect('interfer_new', Callable(self, 'on_interfer_new').bind(table_index))
signaller.connect('interfer_off', Callable(self, 'on_interfer_off').bind(table_index))
signaller.connect('rto_threat_unsel', Callable(self, 'on_rto_threat_unsel'))
signaller.connect('rto_threat_sel', Callable(self, 'on_rto_threat_sel').bind(table_index))
interfer.connect('interfer_update', Callable(self, 'on_interfer_update').bind(table_index))
$table.connect('row_pressed', Callable(self, 'on_row_pressed'))
call_deferred('init_table')
func init_table():
$table.set_header(TABLE_HEADER)
$table.set_header_text(TABLE_HEADERS_TEXT)
$table.set_columns_min_size(TABLE_COLUMN_SIZE)
$table.pin_header(self, get_parent())
func on_interfer_update(ecm, table_index):
var row = map_th_to_row(ecm)
if table_index.has(ecm.ispp):
var i_row = table_index[ecm.ispp]
$table.set_row_text(i_row, row)
func on_interfer_new(ecm, table_index):
var row = map_th_to_row(ecm)
if table_index.has(ecm.ispp):
var i_row = table_index[ecm.ispp]
$table.set_row_text(i_row, row)
else:
var i_row = $table.get_rows_count()
$table.add_row(TABLE_ROW)
$table.set_row_text(i_row, row)
$table.set_row_editable(i_row, false)
$table.set_node_user_data(0, i_row, ecm)
table_index[ecm.ispp] = i_row
$table.clear_rows_selected()
$table.set_row_selected(i_row, true)
signaller.emit_signal('interfer_selected', ecm)
func on_interfer_off(ecm, ecms, thrs, table_index):
$table.remove_row(table_index[ecm.ispp])
table_index.clear()
rehash(table_index)
ecms.erase(ecm.ispp)
thrs.erase(ecm.ispp)
## Перестраивает индекс таблицы. Вызывать при удалении строки
func rehash(table_index: Dictionary):
var rows_count = $table.get_rows_count()
for i_row in rows_count:
var item = $table.get_node2(0, i_row)
table_index[int(item.text)] = i_row
## Преобразует цель в строку таблицы
func map_th_to_row(ecm) -> Array:
var row: = Array()
row.resize(TABLE_ROW.size())
row[COLUMN_NUMBER] = '%s' % ecm.ispp
row[COLUMN_NAME] = ''
if INTERFER_NAMES.has(ecm.krp):
row[COLUMN_NAME] = '%s' % INTERFER_NAMES[ecm.krp]
row[COLUMN_FREQ] = '%s' % ecm.params['freq']
row[COLUMN_AOA] = '%s' % ecm.kni
row[COLUMN_STATE] = ''
if INTERFER_STATE.has(ecm.svk):
row[COLUMN_STATE] = '%s' % INTERFER_STATE[ecm.svk]
return row
func on_rto_threat_unsel(_th_id): $table.clear_rows_selected()