From 2d7da6bbc23fb917dfe931eaeb5566da0a102ac3 Mon Sep 17 00:00:00 2001 From: dam Date: Sun, 10 Apr 2022 08:32:49 +0000 Subject: Code cleanup. --- ui/modal_popup/modal_popup.gd | 76 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 ui/modal_popup/modal_popup.gd (limited to 'ui/modal_popup/modal_popup.gd') diff --git a/ui/modal_popup/modal_popup.gd b/ui/modal_popup/modal_popup.gd new file mode 100644 index 0000000..95fc2c3 --- /dev/null +++ b/ui/modal_popup/modal_popup.gd @@ -0,0 +1,76 @@ +extends Control +class_name ModalPopup + +signal dismissed # () + +export var clear_signals_on_hide := true + +var control : Control +var control_parent : Node + +onready var title := get_node("title") as Label +onready var background := get_node("background") as Panel +onready var dismiss_button := get_node("dismiss") as Button + + +func _init(): + self.anchor_right = 1.0 + self.anchor_bottom = 1.0 + self.rect_clip_content = true + self.connect("hide", self, "_clear_signals") + + +func _ready(): + dismiss_button.connect("pressed", self, "dismiss") + + +func _clear_signals(): + if clear_signals_on_hide == false: + return + + for signal_name in ["dismissed"]: + for it in get_signal_connection_list(signal_name): + disconnect(it.signal, it.target, it.method) + + +func dismiss(): + emit_signal("dismissed") + close_popup() + + +func open_popup(title: String, item: Control): + if visible == true: + return + + self.title.text = title + + control = item + control.connect("hide", self, "close_popup") + control_parent = control.get_parent() + control_parent.remove_child(control) + self.add_child(control) + + control.anchor_left = background.anchor_left + control.anchor_top = background.anchor_top + control.anchor_right = background.anchor_right + control.anchor_bottom = background.anchor_bottom + control.margin_left = 20 + control.margin_top = 20 + control.margin_right = -20 + control.margin_bottom = -20 + + self.show() + control.show() + + +func close_popup(): + if visible == false: + return + + control.disconnect("hide", self, "close_popup") + control.hide() + self.hide() + remove_child(control) + control_parent.add_child(control) + control_parent = null + -- cgit v1.2.3