diff --git a/scenes/frame-ecm-params/scroll-ecm-params.gd b/scenes/frame-ecm-params/scroll-ecm-params.gd index f98ed5a..14f2512 100644 --- a/scenes/frame-ecm-params/scroll-ecm-params.gd +++ b/scenes/frame-ecm-params/scroll-ecm-params.gd @@ -4,7 +4,7 @@ class_name scroll_ecm_params extends ScrollContainer const CellLineEdit = preload('res://table/ячейка-2.tscn') ## Ячейка таблицы. const TableHeader = preload('res://table/header.tscn') ## Ячейка заголовок таблицы. -const CellTaggleBtn = preload('res://table/taggle.tscn') +const CellTaggleBtn = preload('res://table/set_taggle.tscn') const TABLE_HEADER = [ TableHeader, TableHeader ] ## Описание ряда заголовка. const TABLE_ROW = [ CellLineEdit, CellLineEdit ] ## Описание ряда. @@ -38,13 +38,13 @@ func init_table(): $table.set_node_alligment(0, MOD_ROW_INDEX, HORIZONTAL_ALIGNMENT_LEFT) $table.set_node_editable(0, MOD_ROW_INDEX, false) var taggle_node = $table.get_node2(1, MOD_ROW_INDEX) - for item in taggle_node.get_children(): - item.size.x = 85 - item.size.y = 25 - item.position.x = 0 - item.position.y = 0 - taggle_node.size.x = 85 - taggle_node.size.y = 25 + #for item in taggle_node.get_children(): + #item.size.x = 85 + #item.size.y = 25 + #item.position.x = 0 + #item.position.y = 0 + #taggle_node.size.x = 85 + #taggle_node.size.y = 25 var taggle_btn = taggle_node.get_children()[1] taggle_btn.connect('pressed', on_taggle_btn.bind(taggle_btn)) taggle_btn.disabled = true diff --git a/scenes/настройки/настройки.gd b/scenes/настройки/настройки.gd index 89e2ca0..f763c43 100644 --- a/scenes/настройки/настройки.gd +++ b/scenes/настройки/настройки.gd @@ -1,10 +1,60 @@ class_name setting extends Panel -var TableHeader = preload('res://table/header.tscn') -var TableLabel = preload('res://table/lable.tscn') -var TableTaggle = preload('res://table/taggle.tscn') -var TableEdit = preload('res://table/editl.tscn') -var TableEmpti = preload('res://table/empti.tscn') +const TableHeader = preload('res://table/header.tscn') +const TableTaggle = preload('res://table/settings_taggle.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, TableTaggle], + ['Управление элементами в ограниченном режиме', TableEdit, TableTaggle], + ['Кнопка «ПД-М4»', TableEdit, TableTaggle], + ['Кнопка «ПД-М2»', TableEdit, TableTaggle], + ['Кнопка «ОЗП-1»', TableEdit, TableTaggle], + ['Кнопка «МЧМ-1»', TableEdit, TableTaggle], + ['Кнопка «ОРН-И1»', TableEdit, TableTaggle], + ['Кнопка «ОРН-М2»', TableEdit, TableTaggle], + ['Кнопка «ЛЧМ-1»', TableEdit, TableTaggle], + ['Кнопка «ПД-М4С»', TableEdit, TableTaggle], + ['Кнопка «ПД-ЧМ»', TableEdit, TableTaggle], + ['Кнопка «СВ-И1»', TableEdit, TableTaggle], + ['Кнопка «К1»', TableEdit, TableTaggle], + ['Кнопка «СВ-М2»', TableEdit, TableTaggle], + ['Кнопка «ОРН»', TableEdit, TableTaggle], + ['Кнопка «JTIDS»', TableEdit, TableTaggle], + ['Кнопка «КУПД»', TableEdit, TableTaggle], + ['Внешнее целеуказание', TableEdit, TableTaggle], + ['Кнопка «Подавление»', TableEdit, TableTaggle], + ['Виртуальная клавиатура', TableEdit, TableTaggle], + ['Скрыть вкладку ЭМС 2', TableEdit, TableTaggle], + ['Текущая версия ПО УАРЭП', TableEdit, TableEdit ], + ['Адрес сервера карт', TableEdit, TableEdit ], + ['уарэп-яу07-частный', TableEdit, TableEdit ], + ['уарэп-яу07-общий', TableEdit, TableEdit ], + ['уарэп-капсрпб', TableEdit, TableEdit ], + ['уарэп-эмс', TableEdit, TableEdit ], + ['уарэп-яу07-2в', TableEdit, TableEdit ], + ['уарэп-яу07-2н', TableEdit, TableEdit ], + ['уарэп-яу07-2к', TableEdit, TableEdit ], + ['уарэп-яу07-4в', TableEdit, TableEdit ], + ['уарэп-яу07-4н', TableEdit, TableEdit ], + ['уарэп-яу07-4к', TableEdit, TableEdit ], + ['уарэп-яу07-1в', TableEdit, TableEdit ], + ['уарэп-яу07-1н', TableEdit, TableEdit ], + ['уарэп-яу07-1к', TableEdit, TableEdit ], + ['уарэп-яу07-3в', TableEdit, TableEdit ], + ['уарэп-яу07-3н', TableEdit, TableEdit ], + ['уарэп-яу07-3к', TableEdit, TableEdit ], + ['уарэп-5п28', TableEdit, TableEdit ], + ['уарэп-щ3', TableEdit, TableEdit ], + ['уарэп-спт25-1', TableEdit, TableEdit ], + ['уарэп-спт25-2', TableEdit, TableEdit ] + ] +const SUPPRESS = 18 # Строка - Подавление +const KEYBORD = 19 # Строка - Виртуальная клавиатура +const HIDE_EMS2 = 20 # Строка - Скрыть вкладку ЭМС 2 ## Вызывается, когда узел впервые попадает в дерево сцены. @@ -35,58 +85,118 @@ func on_ems2_pressed(btn) -> void: func setting_tab(): - var yams: Array = [HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER] - $table.set_header([TableHeader, TableHeader]) - $table.set_header_text(['Параметр', 'начение ']) - var row_texts: Array = ['Ограниченный режим', - 'Управление элементами в ограниченном режиме', - 'Кнопка «ПД-М4»', 'Кнопка «ПД-М2»', - 'Кнопка «ОЗП-1»', - 'Кнопка «МЧМ-1»', - 'Кнопка «ОРН-И1»', - 'Кнопка «ОРН-М2»', - 'Кнопка «ЛЧМ-1»', - 'Кнопка «ПД-М4С»', - 'Кнопка «ПД-ЧМ»', - 'Кнопка «СВ-И1»', - 'Кнопка «К1»', - 'Кнопка «СВ-М2»', - 'Кнопка «ОРН»', - 'Кнопка «JTIDS»', - 'Кнопка «КУПД»', - 'Внешнее целеуказание', - 'Кнопка «Подавление»', - 'Виртуальная клавиатура', - 'Скрыть вкладку ЭМС 2', - 'Текущая версия ПО УАРЭП', - 'Адрес сервера карт' ] - - for i in range(len(row_texts)): - if i < 21: - $table.add_row([TableLabel, TableTaggle]) + $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 = {} # Загружаем настройки из файла + var file = FileAccess.open(settings.settings_file, FileAccess.READ) + if file: + var read = file.get_as_text() + file.close() + var json_conv = JSON.new() + if json_conv.parse(read) == OK: + settings_data = json_conv.get_data() else: - if i == len(row_texts) - 2: - var commit_version = '%s"' % commit.VCS_HEAD - $table.add_row([TableLabel, TableLabel]) - $table.set_row_text(i, [row_texts[i], commit_version]) - elif i == len(row_texts) - 1: - $table.add_row([TableLabel, TableLabel]) - $table.set_row_text(i, [row_texts[i], ProjectSettings.get('application/config/map_server_addr')]) - else: - $table.add_row([TableLabel, TableEmpti]) - $table.set_row_text(i, [row_texts[i]]) + log.info("Не удалось прочитать JSON, используем настройки по умолчанию") + else: + log.info("Файл настроек не найден, используем настройки по умолчанию") + for i in SETTING_TABLE.size(): + var setting_str = SETTING_TABLE[i] + var parameter = setting_str[0] + var node_label = setting_str[1] + var node_value = setting_str[2] + $scroll_set/table.add_row([node_label, node_value]) + var label_instance = $scroll_set/table.get_node2(0, i) + label_instance.text = parameter + $scroll_set/table.set_node_editable(0, i, false) + var node_values = $scroll_set/table.get_node2(1, i).get_children() + if node_values.size() > 1: + var child = node_values[1] + if child is CheckButton: + if parameter in settings_data: + child.set_pressed(settings_data[parameter][0]) + else: + child.set_pressed(false) + var commit_instance = $scroll_set/table.get_node2(1, 21) + var server_instance = $scroll_set/table.get_node2(1, 22) + commit_instance.text = '%s' % commit.VCS_HEAD + server_instance.text = ProjectSettings.get('application/config/map_server_addr') + $scroll_set/table.set_node_editable(1, 21, false) + $scroll_set/table.set_node_editable(1, 22, false) + $scroll_set/table.set_columns_min_size([600, 950]) + $scroll_set/table.set_columns_alignments(ALIGNMENT) + for i in SETTING_TABLE.size(): + var setting_str = SETTING_TABLE[i] + var parameter = setting_str[0] + if parameter in settings.UnitProfiles: + var unit_data = settings.UnitProfiles[parameter] + var profiles = $scroll_set/table.get_node2(1, i) + var joined_data = "" + for j in range(unit_data[2].size()): + joined_data += str(unit_data[2][j]) + if j < unit_data[2].size() - 1: + joined_data += "," + profiles.text = str(unit_data[1]) + " : " + joined_data + $end_table.set_header(HEADER_ROW) + $end_table.set_header_text(HEADER_ROW_TEXT) + $end_table.set_columns_min_size([600, 950]) + $end_table.set_columns_alignments(ALIGNMENT) + button_settings() - var extern_cu_node = $table.get_node2(1, 17).get_children()[1] + +func button_settings(): + var extern_cu_node = $scroll_set/table.get_node2(1, SUPPRESS).get_children()[1] extern_cu_node.connect('pressed', on_external_cu_btn_pressed.bind(extern_cu_node)) - $table.set_row_text(18,(['Кнопка «Подавление»'])) - $table.set_row_text(19,(['Виртуальная клавиатура'])) - var vk_node = $table.get_node2(1, 19).get_children()[1] + $scroll_set/table.set_row_text(SUPPRESS,(['Кнопка «Подавление»'])) + $scroll_set/table.set_row_text(KEYBORD,(['Виртуальная клавиатура'])) + var vk_node = $scroll_set/table.get_node2(1, KEYBORD).get_children()[1] vk_node.connect('pressed', on_vk_pressed.bind(vk_node)) - $table.set_row_text(20,(['Скрыть вкладку ЭМС 2'])) - var ems2_hide_node = $table.get_node2(1, 20).get_children()[1] + $scroll_set/table.set_row_text(HIDE_EMS2,(['Скрыть вкладку ЭМС 2'])) + var ems2_hide_node = $scroll_set/table.get_node2(1, HIDE_EMS2).get_children()[1] ems2_hide_node.connect('pressed', on_ems2_pressed.bind(ems2_hide_node)) ems2_hide_node.set_pressed(true) on_ems2_pressed(ems2_hide_node) - $table.set_columns_min_size([365, 365]) - $table.set_columns_alignments(yams) + +func _on_btn_save_settings_pressed(): + var json_data = {} + for i in range(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(): + json_data[parameter].append(int(port)) + else: + json_data[parameter].append(port) + else: + var children = $scroll_set/table.get_node2(1, i).get_children() + if len(children): + var child = children[1] + if parameter not in json_data: + json_data[parameter] = [] + json_data[parameter].append(child.is_pressed()) + var file = FileAccess.open(settings.settings_file, FileAccess.WRITE) + if file: + var json_conv = JSON.new() + var json_string = json_conv.stringify(json_data) + file.store_string(json_string) + file.close() + log.info('Настройки сохранены в файл %s' % settings.settings_file) + else: + log.info('Не удалось открыть файл для записи %s' % settings.settings_file) diff --git a/scenes/настройки/настройки.tscn b/scenes/настройки/настройки.tscn index d1b19ac..1c8ab22 100644 --- a/scenes/настройки/настройки.tscn +++ b/scenes/настройки/настройки.tscn @@ -1,15 +1,56 @@ -[gd_scene load_steps=3 format=3 uid="uid://bnptm4rlp60dq"] +[gd_scene load_steps=7 format=3 uid="uid://bnptm4rlp60dq"] [ext_resource type="Script" path="res://scenes/настройки/настройки.gd" id="1_2l3rd"] [ext_resource type="Script" path="res://table/table.gd" id="2_6sx73"] +[ext_resource type="Texture2D" uid="uid://biyjygfnhhf7i" path="res://data/save.png" id="3_xqtce"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_bgm7i"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_eifcy"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_exytp"] [node name="Настройки" type="Panel"] script = ExtResource("1_2l3rd") -[node name="table" type="GridContainer" parent="."] +[node name="heard_table" type="GridContainer" parent="."] layout_mode = 0 -offset_left = 40.0 -offset_top = 40.0 -offset_right = 80.0 -offset_bottom = 80.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="end_table" type="GridContainer" parent="."] +layout_mode = 0 +offset_left = 16.0 +offset_top = 1000.0 +offset_right = 16.0 +offset_bottom = 1000.0 +script = ExtResource("2_6sx73") + +[node name="btn_save_settings" type="Button" parent="."] +layout_mode = 0 +offset_left = 1523.0 +offset_top = 1062.0 +offset_right = 2043.0 +offset_bottom = 1582.0 +scale = Vector2(0.1, 0.1) +focus_mode = 0 +theme_override_styles/focus = SubResource("StyleBoxEmpty_bgm7i") +theme_override_styles/pressed = SubResource("StyleBoxEmpty_eifcy") +theme_override_styles/normal = SubResource("StyleBoxEmpty_exytp") +icon = ExtResource("3_xqtce") + +[connection signal="pressed" from="btn_save_settings" to="." method="_on_btn_save_settings_pressed"] diff --git a/table/editl.tscn b/table/editl.tscn index 3a9aa78..e1d02dc 100644 --- a/table/editl.tscn +++ b/table/editl.tscn @@ -1,5 +1,7 @@ [gd_scene format=3 uid="uid://bvbvtgwps54yr"] [node name="Editl" type="LineEdit"] +offset_right = 59.875 +offset_bottom = 33.0 caret_blink = true caret_blink_interval = 0.5 diff --git a/table/lable.tscn b/table/lable.tscn index ad4e6fb..63372de 100644 --- a/table/lable.tscn +++ b/table/lable.tscn @@ -11,6 +11,6 @@ corner_radius_bottom_left = 5 [node name="Lable" type="Label"] offset_right = 104.0 -offset_bottom = 24.0 +offset_bottom = 27.0 theme_override_colors/font_color = Color(1, 0.596078, 0.4, 1) theme_override_styles/normal = SubResource("StyleBoxFlat_yign5") diff --git a/table/set_taggle.tscn b/table/set_taggle.tscn new file mode 100644 index 0000000..81a1b4a --- /dev/null +++ b/table/set_taggle.tscn @@ -0,0 +1,30 @@ +[gd_scene load_steps=4 format=3 uid="uid://dgidt8lifm7xe"] + +[ext_resource type="PackedScene" uid="uid://dspa16ufrpanp" path="res://table/ячейка-2.tscn" id="1_eib5d"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_t3fqw"] + +[sub_resource type="Theme" id="Theme_odxqp"] +CheckButton/styles/focus = SubResource("StyleBoxEmpty_t3fqw") + +[node name="Control" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="LineEdit" parent="." instance=ExtResource("1_eib5d")] +layout_mode = 0 +offset_right = 85.0 +offset_bottom = 27.0 +editable = false + +[node name="CheckButton" type="CheckButton" parent="."] +layout_mode = 0 +offset_left = 21.0 +offset_top = 1.0 +offset_right = 65.0 +offset_bottom = 25.0 +theme = SubResource("Theme_odxqp") diff --git a/table/settings_taggle.tscn b/table/settings_taggle.tscn new file mode 100644 index 0000000..76facf9 --- /dev/null +++ b/table/settings_taggle.tscn @@ -0,0 +1,29 @@ +[gd_scene load_steps=4 format=3 uid="uid://5rw652cmnybi"] + +[ext_resource type="PackedScene" uid="uid://dspa16ufrpanp" path="res://table/ячейка-2.tscn" id="1_qcan0"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_q2spu"] + +[sub_resource type="Theme" id="Theme_hnhcj"] +CheckButton/styles/focus = SubResource("StyleBoxEmpty_q2spu") + +[node name="SettingsTaggle" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="LineEdit" parent="." instance=ExtResource("1_qcan0")] +layout_mode = 0 +offset_right = 950.0 +editable = false + +[node name="CheckButton" type="CheckButton" parent="."] +layout_mode = 0 +offset_left = 453.0 +offset_top = 4.0 +offset_right = 497.0 +offset_bottom = 28.0 +theme = SubResource("Theme_hnhcj") diff --git a/table/taggle.tscn b/table/taggle.tscn deleted file mode 100644 index 413d6ee..0000000 --- a/table/taggle.tscn +++ /dev/null @@ -1,21 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://dm7hh7ibuin78"] - -[ext_resource type="PackedScene" uid="uid://dwphmxstaxn4v" path="res://table/lable.tscn" id="1_2wdrh"] - -[node name="Control" type="Control"] -layout_mode = 3 -anchors_preset = 0 -offset_right = 96.0 -offset_bottom = 24.0 - -[node name="Lable" parent="." instance=ExtResource("1_2wdrh")] -layout_mode = 0 -offset_right = 368.0 -offset_bottom = 21.0 - -[node name="CheckButton" type="CheckButton" parent="."] -layout_mode = 0 -offset_left = 161.0 -offset_top = -2.0 -offset_right = 205.0 -offset_bottom = 22.0 diff --git a/table/ячейка-2.tscn b/table/ячейка-2.tscn index ac0ba0b..2cbfae7 100644 --- a/table/ячейка-2.tscn +++ b/table/ячейка-2.tscn @@ -5,8 +5,8 @@ [node name="LineEdit" type="LineEdit"] offset_right = 58.0 offset_bottom = 33.0 -theme_override_colors/font_color = Color(1, 0.596078, 0.4, 1) theme_override_colors/font_uneditable_color = Color(1, 0.596078, 0.4, 1) +theme_override_colors/font_color = Color(1, 0.596078, 0.4, 1) theme_override_styles/focus = SubResource("StyleBoxEmpty_mla3y") alignment = 1 context_menu_enabled = false