Files
uarep-ctl/scenes/ЭМС.gd
2023-07-25 16:20:14 +03:00

191 lines
9.1 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 Panel
var TableHeader = preload('res://table/header.tscn')
var TableNode = preload('res://scenes/ячейка-1.tscn')
var CellYemsButton = preload('res://scenes/кнопка-эмс.tscn')
var CellLineEdit = preload('res://scenes/ячейка-2.tscn')
var CellState = preload('res://scenes/состояния-эмс.tscn')
var CellOptBtn = preload('res://scenes/кнопка-5.tscn')
# Таблица с данными для входов, первое значение - индекс устройства в ячейке КЭМС
const INPUT_ROWS = [
[1,['НРЛС МР-231S, УИЗП', 'X31', '0', '0']],
[2,['НРЛС МР-231S, Строб ЭМС', 'X32', '0', '0']],
[3,['НРЛС МР-231-3, УИЗП', 'X34', '0', '0']],
[4,['НРЛС МР-231-3, Строб ЭМС', 'X35', '0', '0']],
[5,['ЦИСВС-1010, УИЗП', 'X43', '0', '0']],
[8,['4302-01, 4302-04, УИЗП', 'X46', '0', '0']],
[11,['НРЛС МР-231S, УИЗП', 'X51', '0', '0']],
[12,['НРЛС МР-231S, Строб ЭМС', 'X52', '0', '0']],
[13,['НРЛС МР-231-3, УИЗП', 'X54', '0', '0']],
[14,['НРЛС МР-231-3, Строб ЭМС', 'X55', '0', '0']],
[15,['ЦИСВС-1010, УИЗП', 'X23', '0', '0']],
[21,['НРЛС МР-231S, УИЗП', 'X21', '0', '0']],
[22,['НРЛС МР-231S, Строб ЭМС', 'X22', '0', '0']],
[23,['НРЛС МР-231-3, УИЗП', 'X24', '0', '0']],
[24,['НРЛС МР-231-3, Строб ЭМС', 'X25', '0', '0']],
[25,['ЦИСВС-1010, УИЗП', 'X23', '0', '0']]]
# Таблица с данными для выходов, первое значение - индекс устройства в ячейке КЭМС
const OUTPUT_ROWS = [
[41,['НРЛС МР-231S, БИ', 'X61', '0', '0']],
[42,['НРЛС МР-231S', 'X62', '0', '0']],
[43,['НРЛС МР-231-3, БИ', 'X64', '0', '0']],
[44,['НРЛС МР-231-3', 'X65', '0', '0']],
[45,['ЦИСВС-1010, БИ', 'X63', '0', '0']],
[46,['4302-01, 4302-04, БИ', 'X66', '0', '0']],
[48,['НРЛС 11111111', 'X69', '0', '0']],
[49,['НРЛС-222222, БИ', 'X62', '0', '0']]]
# Режимы работы выходов
const OUT_MODE: Array = ['Работа', 'Контроль', '1', '0']
const COLUMN_OPTS_BTN: Array = [6]
const TABLE_ENTRY_COLUMNS: Array = [2,3,5]
var g_in_devices : Dictionary # Словарь с входными устройствами КЭМС
var g_out_devices : Dictionary # Словарь с выходными устройствами КЭМС
var posx: int = 50 # Позиция элементов по x
var posy: int = 80 # Позиция элементов по y
func _ready() -> void:
$tbl_in.set_position(Vector2(posx,posy))
$tbl_out.set_position(Vector2(posx,len(INPUT_ROWS)*33+posy+10))
$tbl_files.set_position(Vector2(posx + 890,len(INPUT_ROWS)*33+posy+300))
$btn_new.set_position(Vector2(posx + 1270,len(INPUT_ROWS)*33+posy+294))
$btn_save.set_position(Vector2(posx + 1270,len(INPUT_ROWS)*33+posy+344))
$btn_edit.set_position(Vector2(posx + 1270,len(INPUT_ROWS)*33+posy+394))
$lbl_online.set_position(Vector2(posx,posy-40))
$marker_in.set_position(Vector2(posx-15,posy+35))
$marker_out.set_position(Vector2(posx-15,len(INPUT_ROWS)*33+posy+45))
$btn_flash_read.set_position(Vector2(posx+1400,posy))
$btn_flash_write.set_position(Vector2(posx+1400,posy+35))
call_deferred('init_tbl_out')
call_deferred('init_tbl_in')
call_deferred('init_tbl_files')
$btn_flash_read.button_connect('pressed', Callable(self, 'on_btn_flash_read').bind($btn_flash_read))
$btn_flash_write.button_connect('pressed', Callable(self, 'on_btn_flash_write').bind($btn_flash_write))
$tbl_in.connect('row_pressed', Callable(self, 'on_row_pressed'))
$tbl_out.connect('row_pressed', Callable(self, 'on_row_pressed'))
func on_btn_flash_read(btn):
await get_tree().create_timer(0.1).timeout
btn.pressed = false
func on_btn_flash_write(btn):
await get_tree().create_timer(0.1).timeout
btn.pressed = false
func on_row_pressed(i_row: int):
$tbl_in.set_row_selected(i_row, false)
func init_tbl_files():
$tbl_files.set_header([TableHeader, TableHeader, TableHeader])
$tbl_files.set_header_text(['Имя файла', 'Размер', 'Дата'])
$tbl_files.set_columns_min_size([200, 70, 100])
func init_tbl_out():
var header_text = ['Выходы', 'Разъём', 'мкс', 'мкс', 'Состояние', 'Частота, Мгц', 'Режим']
$tbl_out.set_header([TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader])
$tbl_out.set_header_text(header_text)
for item in OUTPUT_ROWS:
$tbl_out.add_row([TableNode, TableNode, CellLineEdit, CellLineEdit, CellState, CellLineEdit, CellOptBtn])
var row_index : int = $tbl_out.get_rows_count() - 1
var params : Array = item[1]
var out_dev = YemsDevs.OutDev.new(item[0], params, row_index)
g_out_devices[item[0]] = out_dev
for i in range(len(header_text)):
if i < len(params):
var cell = $tbl_out.get_node2(i, row_index)
cell.text = params[i]
$tbl_out.set_node_user_data(i, row_index, out_dev)
if i in COLUMN_OPTS_BTN:
var cell = $tbl_out.get_node2(i, row_index)
for opt in OUT_MODE:
cell.add_item(opt)
cell.select(0)
$tbl_out.set_columns_min_size([270, 100, 70, 70, 100, 100, 100])
$tbl_out.connect_columns(self, 'text_submitted', 'on_edit_entry_in', TABLE_ENTRY_COLUMNS, [])
$tbl_out.connect_columns(self, 'item_selected', 'on_item_selected', COLUMN_OPTS_BTN, [])
func init_tbl_in():
var header_type: Array = [TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader, TableHeader]
var header_text: Array = ['Входы', 'Разъём', 'мкс', 'мкс', 'Состояние', 'Частота, Мгц',' ']
var row_type: Array = [TableNode, TableNode, CellLineEdit, CellLineEdit, CellState, CellLineEdit, TableNode]
var yams_alligment_in: Array = [ HORIZONTAL_ALIGNMENT_LEFT, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER]
var column_size: Array = [270, 100, 70, 70, 100, 100, 300]
var dot_collums: Array = []
var column_offset: int = 7
for i in range(len(OUTPUT_ROWS)):
header_type.append(TableHeader)
header_text.append('...')
row_type.append(CellYemsButton)
yams_alligment_in.append(HORIZONTAL_ALIGNMENT_LEFT)
column_size.append(25)
dot_collums.append(column_offset+i)
$tbl_in.set_header(header_type)
$tbl_in.set_header_text(header_text)
$tbl_in.set_columns_alignments(yams_alligment_in)
for item in INPUT_ROWS:
$tbl_in.add_row(row_type)
var row_index : int = $tbl_in.get_rows_count() - 1
var params : Array = item[1]
var in_dev: YemsDevs.InDev = YemsDevs.InDev.new(item[0], params, row_index)
g_in_devices[item[0]] = in_dev
for i in range(len(row_type)):
if i < len(params):
var node = $tbl_in.get_node2(i, row_index)
node.text = params[i]
if i in dot_collums:
var btn = $tbl_in.get_node2(i, row_index)
var out_dev = g_out_devices[OUTPUT_ROWS[i-column_offset][0]]
in_dev.out_dots = [btn, out_dev]
btn.button_connect('pressed', Callable(self, 'on_dot_button').bind(btn, i, row_index))
btn.connect('mouse_entered', Callable(self, 'on_mouse_entered').bind(btn, i - dot_collums[0], row_index))
$tbl_in.set_node_user_data(i, row_index, in_dev)
$tbl_in.set_columns_min_size(column_size)
$tbl_in.connect_columns(self, 'text_submitted', 'on_edit_entry_in', TABLE_ENTRY_COLUMNS, [])
func on_dot_button(btn, i: int, j: int):
""" Вызывается при нажатии на кнопку-точку (соединение)
i - индекс входа, j - индекс выхода """
print('on_dot_button(%d, %d)' % [i, j])
func on_edit_entry_in(text : String, entry):
var indexis = $tbl_in.get_key_indexes(entry[0].name)
var row_i = indexis[1]
var col_i = indexis[0]
print('ЭМС.gd -> on_edit_entry_in', text, row_i, col_i)
func on_edit_entry_out(text : String, entry):
var indexis = $tbl_out.get_key_indexes(entry[0].name)
var row_i = indexis[1]
var col_i = indexis[0]
print('ЭМС.gd -> on_edit_entry_out', text, row_i, col_i)
func on_item_selected(item_num, node):
var optbtn_text = node[0].text
var indexis = $tbl_out.get_key_indexes(node[0].name)
var row_i = indexis[1]
var col_i = indexis[0]
print('ЭМС.gd -> on_item_selected row: %d col: %d text: %s' %[row_i, col_i, optbtn_text])
func on_mouse_entered(btn, i, j):
$marker_in.position.y = $tbl_in.position.y + btn.position.y + btn.size.y / 2
$marker_out.position.y = $tbl_out.position.y + (btn.size.y + 4) * i + btn.size.y / 2
func _process(delta):
pass