class_name BugReportForm extends ColorRect signal submitted(map_name:String, bug_location:Vector3, bug_rotation:Vector3) signal cancelled @onready var __product_name : Label = $Form/VBoxContainerLeft/GridContainer/ProductName as Label @onready var __version_label : Label = $Form/VBoxContainerLeft/GridContainer/VersionLabel as Label @onready var __version_button : MenuButton = $Form/VBoxContainerLeft/GridContainer/VersionButton as MenuButton @onready var __hardware_label : Label = $Form/VBoxContainerLeft/GridContainer/HardwareLabel as Label @onready var __hardware_button : MenuButton = $Form/VBoxContainerLeft/GridContainer/HardwareButton as MenuButton @onready var __os_label : Label = $Form/VBoxContainerLeft/GridContainer/OSLabel as Label @onready var __os_button : MenuButton = $Form/VBoxContainerLeft/GridContainer/OSButton as MenuButton @onready var __component_label : Label = $Form/VBoxContainerLeft/GridContainer/ComponentLabel as Label @onready var __component_button : MenuButton = $Form/VBoxContainerLeft/GridContainer/ComponentButton as MenuButton @onready var __severity_label : Label = $Form/VBoxContainerLeft/GridContainer/SeverityLabel as Label @onready var __severity_button : MenuButton = $Form/VBoxContainerLeft/GridContainer/SeverityButton as MenuButton @onready var __summary_label : Label = $Form/VBoxContainerRight/GridContainer/SummaryLabel as Label @onready var __summary_text : LineEdit = $Form/VBoxContainerRight/GridContainer/SummaryText as LineEdit @onready var __description_label : Label = $Form/VBoxContainerRight/GridContainer/DescriptionLabel as Label @onready var __description_text : TextEdit = $Form/VBoxContainerRight/GridContainer/DescriptionText as TextEdit @onready var __submit_button : Button = $Form/VBoxContainerRight/SubmitButton as Button var map_name : String var bug_location : Vector3 var bug_rotation : Vector3 var __label_groups : Array var __stored_mouse_mode : int var __server_api : BugbotServerAPI const __DEFAULT_PRODUCT_NAME : StringName = &"NameOfProductHere" const __BUTTON_DISABLED_MESSAGE : StringName = &"Not available" const __ERROR_TEXT_COLOUR : Color = Color(0.75, 0.0, 0.0) func _enter_tree(): __stored_mouse_mode = Input.mouse_mode Input.mouse_mode = Input.MOUSE_MODE_VISIBLE __server_api = BugbotServerAPI._create_new_server_api() func _exit_tree(): Input.mouse_mode = __stored_mouse_mode func fill_tags(tag_list:Array): __label_groups.resize(BugbotServerAPI.BugbotTagArray.MAX) __label_groups = tag_list __product_name.text = ProjectSettings.get_setting("application/config/name", __DEFAULT_PRODUCT_NAME) __fill_item_list(__version_button, BugbotServerAPI.BugbotTagArray.VERSION) __fill_item_list(__hardware_button, BugbotServerAPI.BugbotTagArray.HARDWARE) __fill_item_list(__os_button, BugbotServerAPI.BugbotTagArray.OS) __fill_item_list(__component_button, BugbotServerAPI.BugbotTagArray.COMPONENT) __fill_item_list(__severity_button, BugbotServerAPI.BugbotTagArray.SEVERITY) func __fill_item_list(menu_button:MenuButton, label_group:int): var menu_options : Array = __label_groups[label_group] if menu_options.is_empty(): menu_button.text = __BUTTON_DISABLED_MESSAGE menu_button.disabled = true else: var menu : PopupMenu = menu_button.get_popup() for i in menu_options.size(): menu.add_item(menu_options[i]["name"], i) menu.id_pressed.connect(func(id:int): menu_button.text = menu_options[id]["name"]) func _on_submit_button_pressed() -> void: __submit_button.disabled = true var summary_error : bool = false var summary_text : String = __summary_text.text if summary_text.is_empty(): printerr("You must fill in a summary.") __summary_label.add_theme_color_override("font_color", __ERROR_TEXT_COLOUR) __summary_text.add_theme_color_override("font_color", __ERROR_TEXT_COLOUR) summary_error = true else: __summary_label.remove_theme_color_override("font_color") __summary_text.remove_theme_color_override("font_color") var description_error : bool = false var description_text : String = __description_text.text if description_text.is_empty(): printerr("You must fill in a description.") __description_label.add_theme_color_override("font_color", __ERROR_TEXT_COLOUR) __description_text.add_theme_color_override("font_color", __ERROR_TEXT_COLOUR) description_error = true else: __description_label.remove_theme_color_override("font_color") __description_text.remove_theme_color_override("font_color") var version_tags : Array = [] var hardware_tags : Array = [] var os_tags : Array = [] var component_tags : Array = [] var severity_tags : Array = [] var version_error : bool = !__get_label_ids_for_submission_data(version_tags, BugbotServerAPI.BugbotTagArray.VERSION, __version_label, __version_button) var hardware_error : bool = !__get_label_ids_for_submission_data(hardware_tags, BugbotServerAPI.BugbotTagArray.HARDWARE, __hardware_label, __hardware_button) var os_error : bool = !__get_label_ids_for_submission_data(os_tags, BugbotServerAPI.BugbotTagArray.OS, __os_label, __os_button) var component_error : bool = !__get_label_ids_for_submission_data(component_tags, BugbotServerAPI.BugbotTagArray.COMPONENT, __component_label, __component_button) var severity_error : bool = !__get_label_ids_for_submission_data(severity_tags, BugbotServerAPI.BugbotTagArray.SEVERITY, __severity_label, __severity_button) if summary_error or description_error or version_error or hardware_error or os_error or component_error or severity_error: __submit_button.disabled = false return var bug_report_form_data : Dictionary = { "title": summary_text, "body": description_text, "labels": {}, } if not version_tags.is_empty(): bug_report_form_data["labels"]["version"] = version_tags[0] if not hardware_tags.is_empty(): bug_report_form_data["labels"]["hardware"] = hardware_tags[0] if not os_tags.is_empty(): bug_report_form_data["labels"]["os"] = os_tags[0] if not component_tags.is_empty(): bug_report_form_data["labels"]["component"] = component_tags[0] if not severity_tags.is_empty(): bug_report_form_data["labels"]["severity"] = severity_tags[0] __server_api._send_form_data(bug_report_form_data, map_name, bug_location, bug_rotation, __submission_response) func __get_label_ids_for_submission_data(tag:Array, label_group_id:int, label:Label, button:MenuButton) -> bool: for applied_label in __label_groups[label_group_id]: if applied_label["name"] == button.text: tag.append({ "name": applied_label["name"], "id": applied_label["id"] }) break if tag.is_empty() and not (__label_groups[label_group_id] as Array).is_empty(): printerr("You must select a label for \"%s\"" % [label.text]) label.add_theme_color_override("font_color", __ERROR_TEXT_COLOUR) button.add_theme_color_override("font_color", __ERROR_TEXT_COLOUR) return false label.remove_theme_color_override("font_color") button.remove_theme_color_override("font_color") return true func __submission_response(bug:BugbotBugData) -> void: submitted.emit(bug) queue_free() func _on_cancel_button_pressed() -> void: cancelled.emit() queue_free()