aboutsummaryrefslogtreecommitdiff
path: root/dialog/dialog.gd
blob: a22a3a6885f14eb10c11bf3f5090e12c741ca86b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
extends Control
class_name Dialog

signal answered			# (accepted: bool)
signal accepted			# ()
signal rejected			# ()

export var clear_signals_on_hide := true

var message				: Label
var accept				: Button
var reject				: Button


func _init():
	self.anchor_right		= 1.0
	self.anchor_bottom		= 1.0
	self.rect_clip_content	= true
	self.connect("hide", self, "_clear_signals")
	
	reject					= Button.new()
	reject.anchor_top		= 1.0
	reject.anchor_left		= 0.0
	reject.anchor_right		= 0.5
	reject.margin_right		= -5.0
	reject.rect_min_size.y	= 62.0
	reject.grow_vertical	= Control.GROW_DIRECTION_BEGIN
	reject.name				= "reject"
	reject.connect("pressed", self, "_signal_rejected")
	add_child(reject)
	
	accept					= Button.new()
	accept.anchor_top		= 1.0
	accept.anchor_left		= 0.5
	accept.anchor_right		= 1.0
	accept.margin_left		= 5.0
	accept.rect_min_size.y	= 62.0
	accept.grow_vertical	= Control.GROW_DIRECTION_BEGIN
	accept.name				= "accept"
	accept.connect("pressed", self, "_signal_accepted")
	add_child(accept)
	
	message					= Label.new()
	message.autowrap		= true
	message.align			= Label.ALIGN_CENTER
	message.anchor_right	= 1.0
	message.anchor_bottom	= 1.0
	add_child(message)


func _clear_signals():
	if clear_signals_on_hide == false:
		return
	
	for signal_name in ["answered", "accepted", "rejected"]:
		for it in get_signal_connection_list(signal_name):
			disconnect(it.signal, it.target, it.method)


func _signal_rejected():
	emit_signal("rejected")
	emit_signal("answered", false)
	hide()


func _signal_accepted():
	emit_signal("accepted")
	emit_signal("answered", true)
	hide()


func setup(message: String, accept_label: String = "Accept", reject_label: String = "Reject"):
	self.message.text = message
	accept.visible = accept_label != ""
	accept.text = accept_label
	reject.visible = reject_label != ""
	reject.text = reject_label