fishjam2024/Quinnsoft94/program_window.gd

72 lines
1.8 KiB
GDScript

class_name DEWindow extends PanelContainer
signal closed()
signal minimized()
@export var title_label: Label
@export var game_holder: PanelContainer
@export var context_buttons: HBoxContainer
@export var sub_menu_parent: Control
var sub_menu_scene = preload("res://Quinnsoft94/window_sub_menu.tscn")
var application: Application
var dragging = false
var drag_offset
var sub_menus = {}
func set_program(program) -> void:
application = program
application.reparent(game_holder)
application.window = self
title_label.text = application.application_name
application.setup_window_integration()
func create_sub_menu(menu_name: String):
var menu = sub_menu_scene.instantiate()
menu.visible = false
sub_menus[menu_name] = menu
sub_menu_parent.add_child(menu)
var button = Button.new()
button.text = menu_name
context_buttons.add_child(button)
button.pressed.connect(menu.set_visible.bind(true))
context_buttons.get_parent().visible = true
func register_sub_menu_action(menu_name: String, button_text: String, function: Callable):
var button = Button.new()
button.text = button_text
button.pressed.connect(func():
function.call()
sub_menus[menu_name].visible = false
)
sub_menus[menu_name].buttons.add_child(button)
func minimize():
minimized.emit()
visible = false
func close():
closed.emit()
Data.save()
queue_free()
func _process(_delta: float) -> void:
if dragging:
global_position = get_global_mouse_position() + drag_offset
func _on_margin_container_gui_input(event: InputEvent) -> void:
if event is InputEventMouseButton:
if event.button_index == MOUSE_BUTTON_LEFT and event.pressed:
dragging = true
move_to_front()
drag_offset = global_position - get_global_mouse_position()
if event.button_index == MOUSE_BUTTON_LEFT and !event.pressed:
dragging = false