Files
uarep-ctl/scenes/настройки/настройки.tscn

335 lines
20 KiB
Plaintext
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.

[gd_scene load_steps=7 format=3 uid="uid://bnptm4rlp60dq"]
[ext_resource type="Script" uid="uid://c5pq0hbrij34d" path="res://table/table.gd" id="2_6sx73"]
[ext_resource type="Texture2D" uid="uid://csnts8f155sf7" path="res://data/save1.png" id="3_dbpks"]
[sub_resource type="GDScript" id="GDScript_fc87o"]
script/source = "class_name configure extends Panel
const TableHeader = preload('res://table/header.tscn')
const TableToggle = preload('res://table/settings-toggle.tscn')
const TableEdit = preload('res://table/ячейка-2.tscn')
const ALIGNMENT = [HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER]
const HEADER_ROW = [TableHeader, TableHeader]
const HEADER_ROW_TEXT = ['Параметр', 'Значение']
const SETTING_TABLE = [
['Ограниченный режим', TableEdit, TableToggle, 'Ограничть возможности по постановке помех'],
['Кнопка «ПД-М4»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «ПД-М2»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «ОЗП-1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «МЧМ-1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «ОРН-И1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «ОРН-М2»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «ЛЧМ-1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «ПД-М4С»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «ПД-ЧМ»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «СВ-И1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «К1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «СВ-М2»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «ОРН»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «JTIDS»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Кнопка «КУПД»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Внешнее управление', TableEdit, TableToggle, 'Передать управление в 5П28'],
['Внешнее указание Трасса', TableEdit, TableToggle, 'Разрешить постановку помех от Трасса'],
['Кнопка «Подавление»', TableEdit, TableToggle, 'Разрешить отображение кнопки'],
['Виртуальная клавиатура', TableEdit, TableToggle, 'Включить отображение экранной клавиатуры'],
['Скрыть вкладку ЭМС 2', TableEdit, TableToggle, 'Отображать вкладку \\\"ЭМС-2\\\"'],
['Текущая версия ПО УАРЭП', TableEdit, TableEdit, 'Время сборки, версия и номер фиксации'],
['уарэп-яу07-частный', TableEdit, TableEdit, 'IP-адрес для получения частных сообщений от ЯУ-07'],
['уарэп-яу07-общий', TableEdit, TableEdit, 'IP-адрес для получения широковещательных сообщений от ЯУ-07'],
['уарэп-капсрпб', TableEdit, TableEdit, 'IP-адрес для связи с КАПС-РПБ [<адрес этого узла>, <адрес удалённого узла>, <порт этого узла>, <порт удалённого узла>]'],
['уарэп-эмс', TableEdit, TableEdit, 'IP-адрес для связи с ЭМС'],
['уарэп-яу07-2в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 2'],
['уарэп-яу07-2н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 2'],
['уарэп-яу07-2к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 2'],
['уарэп-яу07-4в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 4'],
['уарэп-яу07-4н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 4'],
['уарэп-яу07-4к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 4'],
['уарэп-яу07-1в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 1'],
['уарэп-яу07-1н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 1'],
['уарэп-яу07-1к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 1'],
['уарэп-яу07-3в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 3'],
['уарэп-яу07-3н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 3'],
['уарэп-яу07-3к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 3'],
['уарэп-5п28', TableEdit, TableEdit, 'IP-адрес для связи с 5П28'],
['навигация', TableEdit, TableEdit, 'Порт назначения для получения данных от АКНГ'],
['уарэп-щ3', TableEdit, TableEdit, 'Путь к UART-устройству для связи с прибором Щ3'],
['уарэп-спт25-1', TableEdit, TableEdit, 'Путь к UART-устройству для связи с прибором СПТ-25 1'],
['уарэп-спт25-2', TableEdit, TableEdit, 'Путь к UART-устройству для связи с прибором СПТ-25 2'],
['Шаблон адреса сервера карт', TableEdit, TableEdit, 'Шаблон URL-адреса сервера карт, должен содержать поля \\\"{x}\\\", \\\"{y}\\\", \\\"{z}\\\" для подстановки индекса плитки'],
['Адрес АФСП левого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора АФСП'],
['Адрес АФСП правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора АФСП'],
['Адрес БПО левого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'],
['Адрес БПО правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'],
['Период опроса состояния БПО, секунды', TableEdit, TableEdit, 'Время в секундах' ],
['Период опроса состояния АФСП, секунды', TableEdit, TableEdit, 'Время в секундах' ],
['уареп-трасса', TableEdit, TableEdit, 'IP-адрес для связи с Трассой [<адрес этого узла>, <адрес удалённого узла>, <порт этого узла>, <порт удалённого узла>]'],
['Включить работу по своим целям', TableEdit, TableToggle, 'Разрешает работу в секторе со своей целью'],
['Список своих протоколов', TableEdit, TableEdit, 'Список протоколов целей, по которым запрещено работать' ], ]
const EXTERNAL_CU = 16 ## Внешнее целеуказание
const TRASSA = 17
const SUPPRESS = 18 ## Строка - Подавление
const KEYBOARD = 19 ## Строка - Виртуальная клавиатура
const HIDE_EMS2 = 20 ## Строка - Скрыть вкладку ЭМС 2
const COMMIT = 21 ## Строка - Версия УАРЭП
const GOS_BTN = 51 ## Разрешить работу по своим целям
var name_to_line_index: = {} ## Для преобразования названия параметра в номер строки
func on_checkbutton_pressed(i_row: int): on_row_pressed(i_row)
## Вызывается, когда узел впервые попадает в дерево сцены.
func _ready() -> void:
setting_tab()
if not OS.get_cmdline_args().has('++ограниченный'):
return
$Label2.text = 'Текущий режим доступа: ограниченный'
for node in $GridContainer.get_children().filter(func(b): return b is Button):
node.disabled = true
func on_external_cu_btn_pressed(btn) -> void:
ProjectSettings.set_setting('application/config/Внешнее управление', btn.button_pressed)
if btn.button_pressed:
signaller.emit_signal('interfer_off_all')
func on_trassa_btn_pressed(btn) -> void:
ProjectSettings.set_setting('application/config/Внешнее указание Трасса', btn.button_pressed)
func on_vk_pressed(btn) -> void:
signaller.emit_signal('kb_pressed', btn.button_pressed)
func on_gos_pressed(btn) -> void:
ProjectSettings.set_setting('application/config/Включить работу по своим целям', btn.button_pressed)
func on_ems2_pressed(btn) -> void:
var state = btn.button_pressed
signaller.emit_signal('ems2_hide_pressed', state)
func on_row_pressed(i_row: int):
$scroll_set/table.clear_rows_selected()
$scroll_set/table.set_row_selected(i_row, true)
func parse_cmd_line_args(settings_data: Dictionary):
var args = OS.get_cmdline_args()
for i in range(0, args.size(), 2):
var key: String = args[i]
key = key.lstrip('\\'\\\" ').rstrip('\\'\\\" ').strip_edges().strip_escapes()
if not settings_data.has(key):
continue
if not ((i + 1) < args.size()):
push_error('для аргумента \\\"%s\\\" не указано значение.' % key)
break
var val0 = args[i + 1]
var val1 = settings_data[key]
val0 = val0.lstrip('\\'\\\" ').rstrip('\\'\\\" ').strip_edges().strip_escapes()
if typeof(val1) == TYPE_BOOL:
if val0 not in ['yes', 'true', 'да', 'no', 'false', 'нет']:
push_error('для аргумента \\\"%s\\\" указано неверное значение \\\"%s\\\".' % [key, val0])
break
settings_data[key] = true if val0 in ['yes', 'true', 'да'] else false
elif typeof(val1) == TYPE_ARRAY:
var val0s = val0.split(',')
if val0s.size() != val1.size():
push_error('для аргумента \\\"%s\\\" указано неверное значение \\\"%s\\\" (исходное: \\\"%s\\\").' % [key, val0, val1])
break
for j in val0s.size():
var val: String = val0s[j]
val = val.lstrip('\\'\\\" ').rstrip('\\'\\\" ').strip_edges().strip_escapes()
if tools.type_is_num(val):
val0s[j] = int(val)
elif val in ['true', 'false']:
val0s[j] = true if val == 'true' else false
else:
val0s[j] = val
elif typeof(val1) == TYPE_STRING:
settings_data[key] = val0
func setting_tab():
$heard_table.set_header(HEADER_ROW)
$heard_table.set_header_text(HEADER_ROW_TEXT)
$heard_table.set_columns_min_size([600, 950])
$heard_table.set_columns_alignments(ALIGNMENT)
var settings_data = {}
parse_cmd_line_args(settings_data)
for key in settings_data:
ProjectSettings.set_setting('application/config/%s' % key, settings_data[key])
for i in SETTING_TABLE.size():
var tbl_row = SETTING_TABLE[i]
var param_name = tbl_row[0]
var node_label = tbl_row[1]
var node_value = tbl_row[2]
var tootip_text = tbl_row[3]
name_to_line_index[param_name] = i
$scroll_set/table.add_row([node_label, node_value])
var label_instance = $scroll_set/table.get_node2(0, i)
label_instance.text = param_name
label_instance.tooltip_text = tootip_text
$scroll_set/table.set_node_editable(0, i, false)
var node_values = $scroll_set/table.get_node2(1, i).get_children()
var edit_node = $scroll_set/table.get_node2(1, i)
if node_values.size():
var child = node_values[0]
if child is CheckButton:
child.connect('pressed', Callable(self, 'on_checkbutton_pressed').bind(i))
var val = ProjectSettings.get_setting('application/config/%s' % param_name)
child.set_pressed(val)
else:
if settings_data.has(param_name):
var val = settings_data[param_name]
if typeof(val) == TYPE_STRING:
$scroll_set/table.get_node2(1, i).text = settings_data[param_name]
if edit_node:
if edit_node is LineEdit:
$scroll_set/table.set_node_control(1, i, true)
$scroll_set/table.set_node_editable(1, COMMIT, false)
$scroll_set/table.set_columns_min_size([600, 950])
$scroll_set/table.set_columns_alignments(ALIGNMENT)
$scroll_set/table.connect('row_pressed', Callable(self, 'on_row_pressed'))
var commit_instance = $scroll_set/table.get_node2(1, COMMIT)
commit_instance.text = '%s' % commit.VCS_HEAD
for i in SETTING_TABLE.size():
var param_name = SETTING_TABLE[i][0]
var profile = $scroll_set/table.get_node2(1, i)
if settings.UnitProfiles.has(param_name):
var unit_data = settings.UnitProfiles[param_name][1]
profile.text = ''
for val in unit_data:
profile.text += str(val) + ','
profile.text = profile.text.trim_suffix(',')
continue
var psk = 'application/config/%s' % param_name
if ProjectSettings.has_setting(psk):
var unit_data = ProjectSettings.get_setting(psk)
if is_instance_of(unit_data, TYPE_STRING):
profile.text = unit_data
button_settings()
func button_settings():
var extern_cu_node = $scroll_set/table.get_node2(1, EXTERNAL_CU).get_children()[0]
extern_cu_node.connect('pressed', on_external_cu_btn_pressed.bind(extern_cu_node))
on_external_cu_btn_pressed(extern_cu_node)
var trassa_node = $scroll_set/table.get_node2(1, TRASSA).get_children()
trassa_node = trassa_node[0]
trassa_node.connect('pressed', on_trassa_btn_pressed.bind(trassa_node))
var vk_node = $scroll_set/table.get_node2(1, KEYBOARD).get_children()[0]
vk_node.connect('pressed', on_vk_pressed.bind(vk_node))
var ems2_hide_node = $scroll_set/table.get_node2(1, HIDE_EMS2).get_children()[0]
ems2_hide_node.connect('pressed', on_ems2_pressed.bind(ems2_hide_node))
ems2_hide_node.set_pressed(true)
on_ems2_pressed(ems2_hide_node)
var gos_node = $scroll_set/table.get_node2(1, GOS_BTN).get_children()[0]
gos_node.connect('pressed', on_gos_pressed.bind(gos_node))
func _on_btn_save_settings_pressed():
var json_data = {}
for i in SETTING_TABLE.size():
var parameter = SETTING_TABLE[i][0]
if parameter in settings.UnitProfiles:
var ref_profile = settings.UnitProfiles[parameter][1]
var profiles = $scroll_set/table.get_node2(1, i)
var value = profiles.get_text()
if parameter not in json_data:
var row: = []
for token in value.split(','):
var j: = row.size()
if token.is_valid_int():
token = int(token)
elif token == 'false':
token = false
elif token == 'true':
token = true
if typeof(ref_profile[j]) == typeof(token):
row.append(token)
else:
# TODO: Это надо вывести на экран пользователю
push_error([parameter, j, type_string(typeof(ref_profile[j])), type_string(typeof(token))])
row.append(ref_profile[j])
json_data[parameter] = row
else:
var children = $scroll_set/table.get_node2(1, i).get_children()
if len(children):
var child = children[0]
json_data[parameter] = child.is_pressed()
else:
var row = $scroll_set/table.get_row(i)
json_data[parameter] = row[1].text
for key in json_data:
ProjectSettings.set_setting('application/config/%s' % key, json_data[key])
var settings_file: = settings.get_settings_file_path()
var file: = FileAccess.open(settings_file, FileAccess.WRITE)
var abs_path: = ProjectSettings.globalize_path(settings_file)
if not file:
log.error('Не удалось открыть файл для записи \\\"%s\\\"' % abs_path)
return
var json_string: = JSON.stringify(json_data, ' ', true)
if file.store_string(json_string):
log.info('Настройки сохранены в файл \\\"%s\\\"' % abs_path)
file.close()
"
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_pyq6h"]
texture = ExtResource("3_dbpks")
modulate_color = Color(0.8, 0.533333, 0.27451, 1)
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_l5g3r"]
texture = ExtResource("3_dbpks")
expand_margin_left = 20.0
expand_margin_top = 20.0
modulate_color = Color(0.8, 0.533333, 0.27451, 1)
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_tbxk6"]
texture = ExtResource("3_dbpks")
[node name="Настройки" type="Panel"]
script = SubResource("GDScript_fc87o")
[node name="heard_table" type="GridContainer" parent="."]
layout_mode = 0
offset_left = 16.0
offset_top = 16.0
offset_right = 16.0
offset_bottom = 16.0
script = ExtResource("2_6sx73")
[node name="scroll_set" type="ScrollContainer" parent="."]
layout_mode = 0
offset_left = 16.0
offset_top = 44.0
offset_right = 1584.0
offset_bottom = 988.0
[node name="table" type="GridContainer" parent="scroll_set"]
layout_mode = 2
script = ExtResource("2_6sx73")
[node name="btn_save" type="Button" parent="."]
layout_mode = 0
offset_left = 1523.0
offset_top = 1057.0
offset_right = 2035.0
offset_bottom = 1569.0
scale = Vector2(0.1, 0.1)
tooltip_text = "Сохранить настройки"
focus_mode = 0
theme_override_styles/focus = SubResource("StyleBoxTexture_pyq6h")
theme_override_styles/disabled = SubResource("StyleBoxTexture_pyq6h")
theme_override_styles/hover_pressed = SubResource("StyleBoxTexture_pyq6h")
theme_override_styles/hover = SubResource("StyleBoxTexture_pyq6h")
theme_override_styles/pressed = SubResource("StyleBoxTexture_l5g3r")
theme_override_styles/normal = SubResource("StyleBoxTexture_tbxk6")
[connection signal="pressed" from="btn_save" to="." method="_on_btn_save_settings_pressed"]