citylimits/scripts/license_gui.gd

151 lines
3.9 KiB
GDScript3
Raw Permalink Normal View History

extends Control
@export var load_locations: Array[String]
@export var export_locations: Array[String]
@onready var tree: Tree = $Tree
@onready var text: TextEdit = $Text
@onready var license_manager: LicenseManager = $LicenseManager
@onready var op_locations: OptionButton = $op_locations
var root: TreeItem
var engine: TreeItem
var game: TreeItem
var licenses: TreeItem
var copyright: String
var location_index: int = 0
# key = identifier
# value = TreeItem
var licenses_dict = {}
func _ready() -> void:
if not DirAccess.dir_exists_absolute("res://licenses/license_links/"):
DirAccess.make_dir_recursive_absolute("res://licenses/license_links/")
refresh_after_location_change()
reload_license_manager()
func refresh_after_location_change():
text.clear()
if load_locations.size() == 0:
load_locations.append('res://licenses')
export_locations.clear()
export_locations.append('user://licenses/game/')
location_index = 0
op_locations.clear()
for i in load_locations.size():
op_locations.add_item(load_locations[i])
func reload_license_manager():
text.clear()
license_manager.exclude_engine = location_index > 0
tree.clear()
license_manager.load_dir = load_locations[location_index]
license_manager.export_dir = export_locations[location_index]
license_manager.load_license_information()
copyright = license_manager.get_combined_copyright()
root = tree.create_item()
var combined = tree.create_item(root)
combined.set_text(0, "All Components")
combined.set_meta('mode', 'combined')
game = tree.create_item()
var _name = 'Game' if location_index == 0 else 'Mod'
if _name == 'Game' and ProjectSettings.has_setting('application/config/name'):
_name = ProjectSettings.get_setting('application/config/name')
game.set_text(0, _name)
game.set_meta('mode', 'parent')
if not license_manager.exclude_engine:
engine = tree.create_item()
engine.set_text(0, 'Godot Engine')
engine.set_meta('mode', 'parent')
licenses = tree.create_item()
licenses.set_text(0, 'Licenses')
licenses.set_meta('mode', 'parent')
var item: TreeItem
var used_licenses = {}
for parent_component in license_manager.license_links.by_parent:
for link in license_manager.license_links.by_parent[parent_component].values():
if link is LicenseLink:
match parent_component:
"Game":
item = tree.create_item(game)
"Godot Engine":
item = tree.create_item(engine)
var valid_ids = license_manager.get_all_valid_licenses(link)
for id in valid_ids:
used_licenses[id] = valid_ids[id]
item.set_text(0, link.componet_name)
item.set_meta('mode', 'link')
item.set_meta('link', link)
for license in used_licenses.values():
if license is License:
item = tree.create_item(licenses)
item.set_text(0, license.identifier)
item.set_meta('mode', 'license')
item.set_meta('license', license)
licenses_dict[license.identifier] = item
func _on_tree_item_selected() -> void:
var item = tree.get_selected()
var mode = item.get_meta('mode')
match mode:
'combined':
text.text = copyright
'parent':
pass
'link':
var link = item.get_meta('link') as LicenseLink
text.text = link.to_formatted_string(link.component_of == 'Godot Engine')
'license':
var license = item.get_meta('license') as License
text.text = license.terms
func _on_tree_item_activated() -> void:
var item = tree.get_selected()
var mode = item.get_meta('mode')
match mode:
'parent':
item.collapsed = not item.collapsed
'link':
var link = item.get_meta('link') as LicenseLink
for id in link.license_identifiers:
if licenses_dict.has(id):
var to = licenses_dict[id]
to.select(0)
tree.scroll_to_item(to)
break
func _on_btn_open_data_dir_pressed() -> void:
OS.shell_open(OS.get_user_data_dir())
func _on_button_pressed() -> void:
license_manager.export()
func _on_op_locations_item_selected(index: int) -> void:
location_index = index
reload_license_manager()