diff options
Diffstat (limited to 'ui/modal_popup')
| -rw-r--r-- | ui/modal_popup/modal_popup.gd | 76 | ||||
| -rw-r--r-- | ui/modal_popup/modal_popup.tscn | 40 |
2 files changed, 116 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 + diff --git a/ui/modal_popup/modal_popup.tscn b/ui/modal_popup/modal_popup.tscn new file mode 100644 index 0000000..3814bef --- /dev/null +++ b/ui/modal_popup/modal_popup.tscn @@ -0,0 +1,40 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://ui/modal_popup/modal_popup.gd" type="Script" id=1] +[ext_resource path="res://fonts/font_icons.tres" type="DynamicFont" id=2] + +[node name="popup" type="ColorRect"] +visible = false +anchor_right = 1.0 +anchor_bottom = 1.0 +color = Color( 0, 0, 0, 0.870588 ) +script = ExtResource( 1 ) + +[node name="background" type="Panel" parent="."] +anchor_left = 0.05 +anchor_top = 0.1 +anchor_right = 0.95 +anchor_bottom = 0.975 + +[node name="title" type="Label" parent="."] +anchor_left = 0.124 +anchor_top = 0.025 +anchor_right = 0.95 +anchor_bottom = 0.1 +margin_left = 0.0799866 +margin_right = -80.0 +margin_bottom = -20.0 +align = 1 +valign = 1 +autowrap = true + +[node name="dismiss" type="Button" parent="."] +anchor_left = 0.05 +anchor_top = 0.025 +anchor_right = 0.124 +anchor_bottom = 0.1 +margin_right = 0.0799866 +margin_bottom = -20.0 +custom_fonts/font = ExtResource( 2 ) +text = "" +flat = true |
