Доработка. Добавлена возможность сохранять состояние таблицы.

This commit is contained in:
MaD_CaT
2023-08-18 15:45:40 +03:00
parent ceaec55b69
commit e7ab703883
9 changed files with 153 additions and 25 deletions

View File

@@ -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, [])