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', 'pdm4': 'ПД-М4', 'pdm2': 'ПД-М2', 'lchm1': 'ЛЧМ-1', '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: 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()