You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.5 KiB
88 lines
2.5 KiB
tool
|
|
extends Control
|
|
|
|
var test: Resource
|
|
const Tag: PackedScene = preload("Tag.tscn")
|
|
onready var TagSelector: Control = $Tags/Select.get_popup()
|
|
onready var TagList: Control = $TagList
|
|
var metadata
|
|
|
|
func _initalize() -> void:
|
|
var testdir: String = ProjectSettings.get_setting("WAT/Test_Directory")
|
|
var dir: Directory = Directory.new()
|
|
# var config: String = "%s/.test" % testdir
|
|
# if not dir.dir_exists(config):
|
|
# dir.make_dir(config)
|
|
var savepath: String = "res://.test/metadata.tres"
|
|
if not dir.file_exists(savepath):
|
|
var res: Resource = load("res://addons/WAT/ui/metadata/index.gd").new()
|
|
ResourceSaver.save(savepath, res)
|
|
|
|
func set_metadata() -> void:
|
|
_initalize()
|
|
var test_dir: String = ProjectSettings.get_setting("WAT/Test_Directory")
|
|
var savepath: String = "res://.test/metadata.tres"
|
|
metadata = load(savepath)
|
|
|
|
func global_tags() -> Array:
|
|
# Add this to settings?
|
|
return ProjectSettings.get_setting("WAT/Tags")
|
|
|
|
func tags() -> Array:
|
|
# May need to add error handling here
|
|
return metadata.tags[id()]
|
|
|
|
func id() -> int:
|
|
# returns position in scripts array
|
|
return metadata.scripts.find(test)
|
|
|
|
func _ready() -> void:
|
|
set_metadata()
|
|
$Data/ClearAll.connect("pressed", self, "_delete_all")
|
|
test = load(test.resource_path) # I think this gives us the binary path?
|
|
if not metadata.scripts.has(test):
|
|
metadata.scripts.append(test)
|
|
metadata.tags.append([])
|
|
save()
|
|
TagSelector.connect("about_to_show", self, "_update_selectable_tags")
|
|
TagSelector.connect("id_pressed", self, "_add_tag")
|
|
|
|
func _delete_all() -> void:
|
|
for child in TagList.get_children():
|
|
delete(child)
|
|
|
|
func populate() -> void:
|
|
for t in tags():
|
|
var tag: Control = Tag.instance()
|
|
TagList.add_child(tag)
|
|
tag.Name.text = t
|
|
tag.Delete.connect("pressed", self, "delete", [tag])
|
|
|
|
func _update_selectable_tags() -> void:
|
|
TagSelector.clear()
|
|
for tag in global_tags():
|
|
if not tag as String in tags():
|
|
TagSelector.add_item(tag)
|
|
TagSelector.update()
|
|
|
|
func _add_tag(id: int) -> void:
|
|
var tagtext: String = TagSelector.get_item_text(id)
|
|
var tag: Control = Tag.instance()
|
|
TagList.add_child(tag)
|
|
tag.Name.text = tagtext
|
|
tag.Delete.connect("pressed", self, "delete", [tag])
|
|
metadata.tags[id()].append(tagtext as String)
|
|
save()
|
|
|
|
func delete(tag: Control) -> void:
|
|
print("deleting")
|
|
TagList.remove_child(tag)
|
|
tag.queue_free()
|
|
metadata.tags[id()].erase(tag.Name.text as String)
|
|
save()
|
|
|
|
func save() -> void:
|
|
var err = ResourceSaver.save(metadata.resource_path, metadata)
|
|
if err != OK:
|
|
push_warning(err as String)
|