save and load installs

This commit is contained in:
Lera Elvoé 2023-05-27 07:36:20 +03:00
parent 34dbb91570
commit f942c91cf6
Signed by: yagich
SSH Key Fingerprint: SHA256:6xjGb6uA7lAVcULa7byPEN//rQ0wPoG+UzYVMfZnbvc
4 changed files with 61 additions and 10 deletions

View File

@ -4,7 +4,7 @@ class_name GroupMetadata
@export var name: String @export var name: String
@export var icon_path: String @export var icon_path: String
@export var description: String @export var description: String
@export var installs: Array[InstallMetadata] @export var installs: Array[Dictionary]
@export var settings_overrides: Dictionary @export var settings_overrides: Dictionary
@export var index: int @export var index: int

View File

@ -1,7 +1,30 @@
extends Resource
class_name InstallMetadata class_name InstallMetadata
@export var name: String var name: String
@export var icon_path: String var icon_path: String
@export var binary_path: String var binary_path: String
@export var local_overrides: Dictionary var local_overrides: Dictionary
var pids: Array[int] = []
var index: int = 0
func to_d() -> Dictionary:
return {
"name": name,
"icon_path": icon_path,
"binary_path": binary_path,
"local_overrides": local_overrides,
"pids": pids,
"index": index,
}
static func from_d(d: Dictionary) -> InstallMetadata:
var res := InstallMetadata.new()
res.name = d.get("name", "")
res.icon_path = d.get("icon_path", "")
res.binary_path = d.get("binary_path", "")
res.local_overrides = d.get("local_overrides", {})
res.pids = d.get("pids", [])
res.index = d.get("index", 0)
return res

View File

@ -54,13 +54,23 @@ func add_new_install() -> void:
child_container.add_child(install_item) child_container.add_child(install_item)
install_item.setup_from_metadata(im) install_item.setup_from_metadata(im)
install_item.edit_item_button_pressed.connect(edit_install.bind(install_item)) install_item.edit_item_button_pressed.connect(edit_install.bind(install_item))
group_metadata.installs.append(im) im.index = group_metadata.installs.size()
group_metadata.installs.append(im.to_d())
group_metadata.save_request.emit() group_metadata.save_request.emit()
install_item.about_to_delete.connect(_on_install_item_about_to_delete)
, CONNECT_ONE_SHOT) , CONNECT_ONE_SHOT)
install_edit_dialog.show() install_edit_dialog.show()
func add_install_from_metadata(im: InstallMetadata) -> void:
var install_item: InstallItem = ITEM_SCENE.instantiate()
child_container.add_child(install_item)
install_item.setup_from_metadata(im)
install_item.about_to_delete.connect(_on_install_item_about_to_delete)
install_item.edit_item_button_pressed.connect(edit_install.bind(install_item))
func edit_install(install_item: InstallItem) -> void: func edit_install(install_item: InstallItem) -> void:
install_edit_dialog.clear() install_edit_dialog.clear()
install_edit_dialog.ok_button_text = "OK" install_edit_dialog.ok_button_text = "OK"
@ -159,7 +169,11 @@ func setup_from_metadata(p_group_metadata: GroupMetadata) -> void:
set_description(group_metadata.description) set_description(group_metadata.description)
set_children_visible(!group_metadata.get_meta("collapsed", false)) set_children_visible(!group_metadata.get_meta("collapsed", false))
group_metadata.index = get_index() group_metadata.index = get_index()
# TODO: add installs
# add installs
for i in group_metadata.installs:
add_install_from_metadata(InstallMetadata.from_d(i))
# TODO: add icon # TODO: add icon
@ -174,3 +188,12 @@ func _on_header_text_label_gui_input(event: InputEvent) -> void:
func _on_delete_button_pressed() -> void: func _on_delete_button_pressed() -> void:
GroupsInstallsManager.delete_group_folder(group_metadata) GroupsInstallsManager.delete_group_folder(group_metadata)
queue_free() queue_free()
func _on_install_item_about_to_delete(im: InstallMetadata) -> void:
group_metadata.installs.remove_at(im.index)
for i in group_metadata.installs.size():
group_metadata.installs[i]["index"] = i
(child_container.get_child(i) as InstallItem).install_metadata.index = i
group_metadata.save_request.emit()

View File

@ -10,15 +10,15 @@ class_name InstallItem
var install_metadata: InstallMetadata var install_metadata: InstallMetadata
signal edit_item_button_pressed signal edit_item_button_pressed
signal delete_item_button_pressed
signal launch_item_button_pressed signal launch_item_button_pressed
signal about_to_delete(install_metadata: InstallMetadata)
signal name_changed(new_name: String) signal name_changed(new_name: String)
func _ready() -> void: func _ready() -> void:
edit_item_button.pressed.connect(func(): edit_item_button_pressed.emit()) edit_item_button.pressed.connect(func(): edit_item_button_pressed.emit())
delete_item_button.pressed.connect(func(): delete_item_button_pressed.emit()) delete_item_button.pressed.connect(_on_delete_button_pressed)
name_label.gui_input.connect(_on_name_label_gui_input) name_label.gui_input.connect(_on_name_label_gui_input)
@ -71,3 +71,8 @@ func setup_from_metadata(p_metadata: InstallMetadata) -> void:
install_metadata = p_metadata install_metadata = p_metadata
set_text(install_metadata.name) set_text(install_metadata.name)
# TODO: add icon # TODO: add icon
func _on_delete_button_pressed() -> void:
about_to_delete.emit(install_metadata)
queue_free()