191 lines
9.1 KiB
GDScript
191 lines
9.1 KiB
GDScript
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
|