online multiplayer chess game (note server currently down)
Diffstat (limited to 'ui/gridmenu/GridMenuButton.gd')
-rw-r--r--ui/gridmenu/GridMenuButton.gd45
1 files changed, 45 insertions, 0 deletions
diff --git a/ui/gridmenu/GridMenuButton.gd b/ui/gridmenu/GridMenuButton.gd
new file mode 100644
index 0000000..aebc47c
--- /dev/null
+++ b/ui/gridmenu/GridMenuButton.gd
@@ -0,0 +1,45 @@
+extends Button
+class_name GridMenuButton
+
+onready var popup: Popup = $Popup
+onready var gridmenu: GridMenu = $Popup/GridMenu
+
+signal selected(index)
+
+export(Vector2) var offset = Vector2(50, -50)
+
+onready var txt = text
+
+var selected := 0 setget set_selected
+var items := []
+
+
+func add_text_item(text: String, tooltip := "", size := Vector2(40, 30)) -> Button:
+ items.append(text)
+ return gridmenu.add_text_item(text, tooltip, size)
+
+
+func add_icon_item(icon: Texture, tooltip := "", size := Vector2(40, 30)) -> BarTextureButton:
+ items.append(icon)
+ return gridmenu.add_icon_item(icon, tooltip, size)
+
+
+func _on_GridMenu_pressed(index: int):
+ set_selected(index)
+ emit_signal("selected", index)
+ popup.hide()
+
+
+func set_selected(index: int):
+ selected = index
+ if typeof(items[index]) == TYPE_OBJECT:
+ icon = items[index]
+ else:
+ text = items[index] + txt
+
+
+func _pressed() -> void:
+ gridmenu.open()
+ popup.popup()
+ yield(get_tree(), "idle_frame")
+ popup.rect_global_position = rect_global_position + offset