The popups, the volume slider, the player name field and the main window get a class_name, so the main window and the quiz hold them by their real type instead of Control. The classes already use the names the files will get.
122 lines
3.1 KiB
GDScript
122 lines
3.1 KiB
GDScript
class_name MainWindow
|
|
extends Control
|
|
## The main window: the top bar, the popups opened from it and the quiz below it.
|
|
##
|
|
## Everything that is not part of a quiz lives here, so other views can be added next
|
|
## to the quiz later.
|
|
|
|
@onready
|
|
var top_bar: TopBar = $TopBar
|
|
|
|
@onready
|
|
var quiz: Quiz = $Quiz
|
|
|
|
@onready
|
|
var search_view: SearchPopup = $Search
|
|
|
|
@onready
|
|
var sync_window: SyncPopup = %SyncWindow
|
|
|
|
@onready
|
|
var shortcuts_window: ShortcutsPopup = %ShortcutsWindow
|
|
|
|
@onready
|
|
var qr_window: QRPopup = %QRWindow
|
|
|
|
@onready
|
|
var about_window: AboutPopup = %AboutWindow
|
|
|
|
@onready
|
|
var log_window: LogPopup = %Log
|
|
|
|
@onready
|
|
var statistic_popup: PopupPanel = $StatisticsPopupPanel
|
|
|
|
@onready
|
|
var statistic_label: Label = $StatisticsPopupPanel/StatisticsLabel
|
|
|
|
## Dims the window behind an open popup and keeps clicks from reaching the buttons under it.
|
|
var popup_backdrop: PopupBackdrop
|
|
|
|
|
|
func _ready() -> void:
|
|
popup_backdrop = PopupBackdrop.add_to(self, _popups())
|
|
if OS.has_feature("macos"):
|
|
GameLog.debug("is_mac")
|
|
top_bar.search_pressed.connect(show_search)
|
|
top_bar.sync_pressed.connect(sync_soundtracks)
|
|
top_bar.statistics_pressed.connect(get_statistics)
|
|
top_bar.shortcuts_pressed.connect(show_shortcuts)
|
|
top_bar.about_pressed.connect(show_about)
|
|
top_bar.qr_pressed.connect(show_qr)
|
|
|
|
sync_window.connect("sync_started", _on_sync_started)
|
|
sync_window.connect("sync_finished", _on_sync_finished)
|
|
quiz.server_changed.connect(search_view.get_list_of_soundtracks)
|
|
quiz.event_logged.connect(log_window.add_log_row)
|
|
|
|
search_view.get_list_of_soundtracks()
|
|
|
|
|
|
func _input(event: InputEvent) -> void:
|
|
if event is InputEventKey and event.pressed:
|
|
if event.alt_pressed && event.keycode == KEY_ENTER:
|
|
GameLog.debug("Alt + Enter pressed")
|
|
Settings.fullscreen = !Settings.fullscreen
|
|
if Settings.fullscreen == true:
|
|
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN)
|
|
if Settings.fullscreen == false:
|
|
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
|
|
if event.alt_pressed && event.keycode == KEY_K:
|
|
shortcuts_window.toggle()
|
|
if event.alt_pressed && event.keycode == KEY_L:
|
|
log_window.toggle()
|
|
|
|
|
|
func _popups() -> Array[PopupWindow]:
|
|
return [search_view, sync_window, qr_window, shortcuts_window, about_window, log_window]
|
|
|
|
|
|
func show_search() -> void:
|
|
GameLog.debug("show_search")
|
|
search_view.toggle()
|
|
|
|
|
|
func show_about() -> void:
|
|
GameLog.debug("show_about")
|
|
about_window.open()
|
|
|
|
|
|
func show_shortcuts() -> void:
|
|
GameLog.debug("show_shortcuts")
|
|
shortcuts_window.open()
|
|
|
|
|
|
func show_qr() -> void:
|
|
GameLog.debug("show_qr")
|
|
qr_window.open()
|
|
|
|
|
|
func get_statistics() -> void:
|
|
GameLog.debug("get_statistics")
|
|
statistic_popup.visible = true
|
|
statistic_label.text = "Total amount of soundtracks in the playlist: " \
|
|
+ str(search_view.soundtracks.size())
|
|
|
|
|
|
func sync_soundtracks() -> void:
|
|
GameLog.debug("sync_soundtracks")
|
|
sync_window.start_sync()
|
|
|
|
|
|
func _on_sync_started() -> void:
|
|
GameLog.debug("_on_sync_started")
|
|
top_bar.sync_button.disabled = false
|
|
quiz.lock_for_sync()
|
|
|
|
|
|
func _on_sync_finished() -> void:
|
|
GameLog.debug("_on_sync_finished")
|
|
search_view.get_list_of_soundtracks()
|
|
quiz.on_sync_finished()
|