aboutsummaryrefslogtreecommitdiff
path: root/ui/modal_popup/modal_popup.gd
diff options
context:
space:
mode:
authordam <dam@gudinoff>2022-04-18 09:06:19 +0000
committerdam <dam@gudinoff>2022-04-18 09:06:19 +0000
commit79691f93bab7aa093bb606bfb80d2b4b236ee091 (patch)
tree6e90c6601893895d7640f478f0cad402cc7590b4 /ui/modal_popup/modal_popup.gd
parent697e1ba3c4cb0a96c4584f1553de368d46287ab7 (diff)
parentee31a9a3d387121030a5f4503adeac5816d7726f (diff)
downloadsurgery-log-79691f93bab7aa093bb606bfb80d2b4b236ee091.tar.zst
surgery-log-79691f93bab7aa093bb606bfb80d2b4b236ee091.zip
Merge godot branch.v1.0
Diffstat (limited to 'ui/modal_popup/modal_popup.gd')
-rw-r--r--ui/modal_popup/modal_popup.gd76
1 files changed, 76 insertions, 0 deletions
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
+