From e7ab7038832da6dd18d12deb4b7cd7541076eb4c Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Fri, 18 Aug 2023 15:45:40 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D1=8C=20=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D1=8F?= =?UTF-8?q?=D1=82=D1=8C=20=D1=81=D0=BE=D1=81=D1=82=D0=BE=D1=8F=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- disconnect.png | Bin 0 -> 15077 bytes disconnect.png.import | 34 ++++++++++++++++++++++ document-save-0.png | Bin 0 -> 4079 bytes document-save-0.png.import | 34 ++++++++++++++++++++++ main.gd | 3 +- main.tscn | 40 ++++++++++++++++--------- save.json | 1 + threats.gd | 58 +++++++++++++++++++++++++++++++++---- кнопка-4.tscn | 8 ++--- 9 files changed, 153 insertions(+), 25 deletions(-) create mode 100644 disconnect.png create mode 100644 disconnect.png.import create mode 100644 document-save-0.png create mode 100644 document-save-0.png.import create mode 100644 save.json diff --git a/disconnect.png b/disconnect.png new file mode 100644 index 0000000000000000000000000000000000000000..d2bbfb028fe6f48c78f6dbf2c6bf80f0ed558a11 GIT binary patch literal 15077 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

wrTid$r9i-}DG*h=Hm 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 HMd<$lG-n3? literal 0 HcmV?d00001 diff --git a/disconnect.png.import b/disconnect.png.import new file mode 100644 index 0000000..8581723 --- /dev/null +++ b/disconnect.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://wh7p3t4frxf" +path="res://.godot/imported/disconnect.png-85f2a4e661088633f66b4438d8774854.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://disconnect.png" +dest_files=["res://.godot/imported/disconnect.png-85f2a4e661088633f66b4438d8774854.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/document-save-0.png b/document-save-0.png new file mode 100644 index 0000000000000000000000000000000000000000..fb8dae0eb0a490263ce40cc718b5327d45f32642 GIT binary patch literal 4079 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 literal 0 HcmV?d00001 diff --git a/document-save-0.png.import b/document-save-0.png.import new file mode 100644 index 0000000..d4beba7 --- /dev/null +++ b/document-save-0.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://blpkoi7s8qugp" +path="res://.godot/imported/document-save-0.png-60b8d3ba0e847ee0dfdc87427675d7b1.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://document-save-0.png" +dest_files=["res://.godot/imported/document-save-0.png-60b8d3ba0e847ee0dfdc87427675d7b1.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/main.gd b/main.gd index 6a2ad67..aca178b 100644 --- a/main.gd +++ b/main.gd @@ -4,6 +4,7 @@ var sock = PacketPeerUDP.new() @onready var table_threads = get_node('tabs/threats/table_t') @onready var btn_add_threads = get_node('tabs/threats/btn_add') @onready var btn_del_threads = get_node('tabs/threats/btn_del') +@onready var btn_save_threads = get_node('tabs/threats/btn_save') @onready var table_pomehi = get_node('tabs/pomehi/table_p') @@ -11,7 +12,7 @@ var sock = PacketPeerUDP.new() func _ready(): sock.bind(Consts.MAIN_ADDR[1], Consts.MAIN_ADDR[0]) sock.set_dest_address(Consts.DST_ADDR[0], Consts.DST_ADDR[1]) - Threats.init_treats(table_threads, btn_add_threads, btn_del_threads) + Threats.init_treats(table_threads, btn_add_threads, btn_del_threads, btn_save_threads) Pomehi.init_pomehi(table_pomehi) var timer = Timer.new() timer.connect('timeout', Callable(self, 'on_timeout').bind()) diff --git a/main.tscn b/main.tscn index 16586ea..1c013c8 100644 --- a/main.tscn +++ b/main.tscn @@ -1,12 +1,14 @@ -[gd_scene load_steps=5 format=3 uid="uid://87gtvqd7bbje"] +[gd_scene load_steps=7 format=3 uid="uid://87gtvqd7bbje"] -[ext_resource type="Script" path="res://main.gd" id="1_v038r"] -[ext_resource type="Script" path="res://table/table.gd" id="2_mfyp6"] -[ext_resource type="Texture2D" uid="uid://cex4jiu1pcj3x" path="res://edit-add-0.png" id="3_6tmn6"] -[ext_resource type="Texture2D" uid="uid://cx746np1wexnd" path="res://edit-add-1.png" id="4_1x5i2"] +[ext_resource type="Script" path="res://main.gd" id="1_d0idv"] +[ext_resource type="Script" path="res://table/table.gd" id="2_bdb37"] +[ext_resource type="Texture2D" uid="uid://cex4jiu1pcj3x" path="res://edit-add-0.png" id="3_am748"] +[ext_resource type="Texture2D" uid="uid://cx746np1wexnd" path="res://edit-add-1.png" id="4_3jxr4"] +[ext_resource type="Texture2D" uid="uid://blpkoi7s8qugp" path="res://document-save-0.png" id="5_73ry2"] +[ext_resource type="Texture2D" uid="uid://wh7p3t4frxf" path="res://disconnect.png" id="5_k2igw"] [node name="main" type="Node2D"] -script = ExtResource("1_v038r") +script = ExtResource("1_d0idv") [node name="tabs" type="TabContainer" parent="."] offset_right = 1594.0 @@ -26,7 +28,7 @@ offset_right = 1.0 offset_bottom = 10.0 grow_horizontal = 2 grow_vertical = 2 -script = ExtResource("2_mfyp6") +script = ExtResource("2_bdb37") node_type_file = "res://ячейка-1.tscn" [node name="btn_add" type="TextureButton" parent="tabs/threats"] @@ -35,15 +37,25 @@ offset_left = 1533.0 offset_top = -2.0 offset_right = 1581.0 offset_bottom = 46.0 -texture_normal = ExtResource("3_6tmn6") -texture_pressed = ExtResource("4_1x5i2") +texture_normal = ExtResource("3_am748") +texture_pressed = ExtResource("4_3jxr4") + +[node name="btn_save" type="TextureButton" parent="tabs/threats"] +layout_mode = 0 +offset_left = 1442.0 +offset_top = -1.0 +offset_right = 1490.0 +offset_bottom = 47.0 +texture_normal = ExtResource("5_73ry2") [node name="btn_del" type="TextureButton" parent="tabs/threats"] layout_mode = 0 -offset_left = 1487.0 -offset_top = 3.0 -offset_right = 1527.0 -offset_bottom = 43.0 +offset_left = 1499.0 +offset_top = 1.0 +offset_right = 1547.0 +offset_bottom = 67.0 +scale = Vector2(0.62, 0.62) +texture_normal = ExtResource("5_k2igw") [node name="pomehi" type="Panel" parent="tabs"] visible = false @@ -54,5 +66,5 @@ layout_mode = 0 offset_top = 100.0 offset_right = 1587.0 offset_bottom = 861.0 -script = ExtResource("2_mfyp6") +script = ExtResource("2_bdb37") node_type_file = "res://ячейка-1.tscn" diff --git a/save.json b/save.json new file mode 100644 index 0000000..e629382 --- /dev/null +++ b/save.json @@ -0,0 +1 @@ +[{"aoa":10,"freq":2480,"id":1,"power":20,"tick":42438,"tmod":"pi4qpsk","width":20},{"aoa":10,"freq":2480,"freqm":"const","id":2,"power":20,"tick":42438,"width":20},{"aoa":200,"freq":2480,"freqm":"lfm","id":3,"power":20,"proto":"ltm","tick":42438,"width":20},{"aoa":10,"freq":2480,"id":5,"power":20,"proto":"j11","tick":42438,"width":20},{"aoa":10,"freq":2480,"id":4,"power":20,"tick":42438,"width":20},{"aoa":100,"freq":2480,"id":6,"power":20,"proto":"mavlink","tick":42438,"width":20},{"aoa":210,"freq":2480,"id":7,"power":20,"tick":42438,"width":20},{"aoa":360,"freq":2480,"freqm":"lfm","id":8,"power":20,"tick":42438,"tmod":"qam16","width":320},{"aoa":10,"freq":2480,"id":9,"power":20,"tick":42438,"width":20}] \ No newline at end of file diff --git a/threats.gd b/threats.gd index eb4b31a..ba2fbae 100644 --- a/threats.gd +++ b/threats.gd @@ -265,12 +265,12 @@ class Threat: return value -func init_treats(table, btn_add, btn_del): # Инициализация вкладки с целями +func init_treats(table, btn_add, btn_del, btn_save): # Инициализация вкладки с целями for i in range(ID_ARRAY_LEN): # Заполняет массив ID целей id_array.append(i+1) table.set_header(TABLE_HEADER_TYPES) table.set_header_text(TABLE_HEADERS) - on_btn_add(table) + load_treats(table) init_table(table, TABLE_COLUMN_SIZES) g_table = table table.set_columns_min_size(TABLE_COLUMN_SIZES) @@ -279,22 +279,68 @@ func init_treats(table, btn_add, btn_del): # Инициализация в table.connect_columns(self, 'item_selected', 'on_item_selected', COLUMN_OPT_BTN, []) btn_add.connect('button_up', Callable(self, 'on_btn_add').bind(table)) btn_del.connect('button_up', Callable(self, 'on_btn_del').bind(table)) + btn_save.connect('button_up', Callable(self, 'on_btn_save')) + + +func load_treats(table): + var file = FileAccess.open('res://save.json', FileAccess.READ) + var read = file.get_as_text() + file.close() + var json_conv: = JSON.new() + if Error.OK == json_conv.parse(read): + var json_data = json_conv.get_data() + for item in json_data: + if item.has('id'): + var id = item['id'] + id_array.erase(int(id)) + var threat : = Threat.new(id, table.get_rows_count()) + treats['%d' % id] = threat + for key in item: + threat.row[key] = [item[key], true] + var row = threat.update_rows() + table.add_row(TABLE_ROW_TYPES) + table.set_row_text(table.get_rows_count()-1, row) + table.set_node_user_data(0, table.get_rows_count()-1, threat) + init_opt_btns(table.get_rows_count()-1, table, threat) + table.connect_columns(self, 'text_submitted', 'on_edit_entry', TABLE_ENTRY_COLUMNS, []) + table.connect_columns(self, 'item_selected', 'on_item_selected', COLUMN_OPT_BTN, []) + + +func on_btn_save(): + var file = FileAccess.open('res://save.json', FileAccess.WRITE) + var data_to_json : Array + for key in treats: + var treat = treats[key] + var data = treat.get_data() + data_to_json.append(data) + var json = JSON.new().stringify(data_to_json) + file.store_string(json) + file.close() func init_table(table: Table, sizes: Array): for i_row in table.get_rows_count(): - #table.set_nodes_min_size(i_row, sizes) pass -func init_opt_btns(row : int, table): +func init_opt_btns(row : int, table, threat): for item in COLUMN_OPT: + var i: int = 0 var i_col = item[0] var opt_arr = item[1] var cell = table.get_node2(i_col, row) for opt in opt_arr: cell.add_item(opt) - cell.select(0) + if i_col == COLUMN_TMOD: + var mode = threat.row['tmod'][0] + i = MODE_TYPES.find(mode) + if i_col == COLUMN_FREQM: + var freqm = threat.row['freqm'][0] + i = FREQM.find(freqm) + if i_col == COLUMN_PROTO: + var proto = threat.row['proto'][0] + i = M_PROTO.find(proto) + cell.select(i) func on_item_selected(item_num, node): @@ -363,7 +409,7 @@ func on_btn_add(table): table.add_row(TABLE_ROW_TYPES) table.set_row_text(table.get_rows_count()-1, row) table.set_node_user_data(0, table.get_rows_count()-1, threat) - init_opt_btns(table.get_rows_count()-1, table) + init_opt_btns(table.get_rows_count()-1, table, threat) table.connect_columns(self, 'text_submitted', 'on_edit_entry', TABLE_ENTRY_COLUMNS, []) table.connect_columns(self, 'item_selected', 'on_item_selected', COLUMN_OPT_BTN, []) diff --git a/кнопка-4.tscn b/кнопка-4.tscn index 12e69e1..0170e0f 100644 --- a/кнопка-4.tscn +++ b/кнопка-4.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=3 format=3 uid="uid://ccxre8mwhndjk"] -[ext_resource type="Texture2D" uid="uid://dag8n0gknjwak" path="res://индикатор-1-0.png" id="1_dgtjm"] -[ext_resource type="Texture2D" uid="uid://b3ext3w4ftgg2" path="res://индикатор-1-1.png" id="2_aqu5u"] +[ext_resource type="Texture2D" uid="uid://dag8n0gknjwak" path="res://индикатор-1-0.png" id="1_3cvx5"] +[ext_resource type="Texture2D" uid="uid://b3ext3w4ftgg2" path="res://индикатор-1-1.png" id="2_052gp"] [node name="indicator_1" type="TextureButton"] modulate = Color(1, 0.596078, 0.4, 1) @@ -9,5 +9,5 @@ offset_right = 35.0 offset_bottom = 29.0 toggle_mode = true button_mask = 0 -texture_normal = ExtResource("1_dgtjm") -texture_pressed = ExtResource("2_aqu5u") +texture_normal = ExtResource("1_3cvx5") +texture_pressed = ExtResource("2_052gp")