diff --git a/scenes/настройки/настройки.gd b/scenes/настройки/настройки.gd deleted file mode 100644 index dce02031..00000000 --- a/scenes/настройки/настройки.gd +++ /dev/null @@ -1,269 +0,0 @@ -class_name setting 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, 'Включить отображение экранной клавиатуры'], - ['Скрыть вкладку ЭМС 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-адрес для запроса состояния прибора БПО'] ] - -const EXTERNAL_CU = 16 ## Внешнее целееуказание -const SUPPRESS = 17 ## Строка - Подавление -const KEYBOARD = 18 ## Строка - Виртуальная клавиатура -const HIDE_EMS2 = 19 ## Строка - Скрыть вкладку ЭМС 2 -const COMMIT = 20 ## Строка - Версия УАРЭП - -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: - var state = btn.button_pressed - ProjectSettings.set_setting('application/config/Внешнее управление', state) - if state: - signaller.emit_signal('interfer_off_all') - - -func on_vk_pressed(btn) -> void: - var state = btn.button_pressed - signaller.emit_signal('kb_pressed', state) - - -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 load_settings(settings_data: Dictionary): - var settings_file = settings.get_settings_file_path() - var file = FileAccess.open(settings_file, FileAccess.READ) - var abs_path = ProjectSettings.globalize_path(settings_file) - if file: - var read = file.get_as_text() - file.close() - var json_conv = JSON.new() - if json_conv.parse(read) == OK: - settings_data.merge(json_conv.get_data()) - else: - log.warning('Не удалось разобрать \"%s\", будут использованы настройки по умолчанию' % abs_path) - else: - log.warning('Файл \"%s\" не найден, будут использованы настройки по умолчанию' % abs_path) - - -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 = {} - load_settings(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 = settings_data[param_name] if settings_data.has(param_name) else false - 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] - if not settings.UnitProfiles.has(param_name): - continue - var unit_data = settings.UnitProfiles[param_name] - var profile = $scroll_set/table.get_node2(1, i) - var joined_data = '' - for j in unit_data[2].size(): - joined_data += str(unit_data[2][j]) - if j < unit_data[2].size() - 1: - joined_data += ',' - profile.text = '%s : %s' % [str(unit_data[1]), joined_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 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) - - -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 profiles = $scroll_set/table.get_node2(1, i) - var value = profiles.get_text() - if parameter not in json_data: - json_data[parameter] = [] - if value.find(':') != -1: - var parts = value.split(':') - var ip = parts[0].strip_edges() - var ports = parts[1].split(',') - json_data[parameter].append(ip) - for port in ports: - if port == 'true': - json_data[parameter].append(true) - elif port == 'false': - json_data[parameter].append(false) - else: - port = port.strip_edges() - if port.is_valid_int(): - port = int(port) - json_data[parameter].append(port) - 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() diff --git a/scenes/настройки/настройки.gd.uid b/scenes/настройки/настройки.gd.uid deleted file mode 100644 index eceb3379..00000000 --- a/scenes/настройки/настройки.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://deq4pmm4iy6ip diff --git a/scenes/настройки/настройки.tscn b/scenes/настройки/настройки.tscn index 8949ebd9..0b0ec62e 100644 --- a/scenes/настройки/настройки.tscn +++ b/scenes/настройки/настройки.tscn @@ -1,9 +1,278 @@ [gd_scene load_steps=7 format=3 uid="uid://bnptm4rlp60dq"] -[ext_resource type="Script" uid="uid://deq4pmm4iy6ip" path="res://scenes/настройки/настройки.gd" id="1_2l3rd"] [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, 'Включить отображение экранной клавиатуры'], + ['Скрыть вкладку ЭМС 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-адрес для запроса состояния прибора БПО'] ] + +const EXTERNAL_CU = 16 ## Внешнее целееуказание +const SUPPRESS = 17 ## Строка - Подавление +const KEYBOARD = 18 ## Строка - Виртуальная клавиатура +const HIDE_EMS2 = 19 ## Строка - Скрыть вкладку ЭМС 2 +const COMMIT = 20 ## Строка - Версия УАРЭП + +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: + var state = btn.button_pressed + ProjectSettings.set_setting('application/config/Внешнее управление', state) + if state: + signaller.emit_signal('interfer_off_all') + + +func on_vk_pressed(btn) -> void: + var state = btn.button_pressed + signaller.emit_signal('kb_pressed', state) + + +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 load_settings(settings_data: Dictionary): + var settings_file = settings.get_settings_file_path() + var file = FileAccess.open(settings_file, FileAccess.READ) + var abs_path = ProjectSettings.globalize_path(settings_file) + if file: + var read = file.get_as_text() + file.close() + var json_conv = JSON.new() + if json_conv.parse(read) == OK: + settings_data.merge(json_conv.get_data()) + else: + log.warning('Не удалось разобрать \\\"%s\\\", будут использованы настройки по умолчанию' % abs_path) + else: + log.warning('Файл \\\"%s\\\" не найден, будут использованы настройки по умолчанию' % abs_path) + + +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 = {} + load_settings(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 = settings_data[param_name] if settings_data.has(param_name) else false + 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] + if not settings.UnitProfiles.has(param_name): + continue + var unit_data = settings.UnitProfiles[param_name] + var profile = $scroll_set/table.get_node2(1, i) + profile.text = '' + for val in unit_data: + profile.text += str(val) + ',' + profile.text.rstrip(',') + 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 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) + + +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 profiles = $scroll_set/table.get_node2(1, i) + var value = profiles.get_text() + if parameter not in json_data: + json_data[parameter] = [] + if value.find(':') != -1: + var parts = value.split(':') + var ip = parts[0].strip_edges() + var ports = parts[1].split(',') + json_data[parameter].append(ip) + for port in ports: + if port == 'true': + json_data[parameter].append(true) + elif port == 'false': + json_data[parameter].append(false) + else: + port = port.strip_edges() + if port.is_valid_int(): + port = int(port) + json_data[parameter].append(port) + 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) @@ -18,7 +287,7 @@ modulate_color = Color(0.8, 0.533333, 0.27451, 1) texture = ExtResource("3_dbpks") [node name="Настройки" type="Panel"] -script = ExtResource("1_2l3rd") +script = SubResource("GDScript_fc87o") [node name="heard_table" type="GridContainer" parent="."] layout_mode = 0 @@ -39,7 +308,7 @@ offset_bottom = 988.0 layout_mode = 2 script = ExtResource("2_6sx73") -[node name="btn_save_settings" type="Button" parent="."] +[node name="btn_save" type="Button" parent="."] layout_mode = 0 offset_left = 1523.0 offset_top = 1057.0 @@ -55,4 +324,4 @@ 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_settings" to="." method="_on_btn_save_settings_pressed"] +[connection signal="pressed" from="btn_save" to="." method="_on_btn_save_settings_pressed"]