time-sampling-form/godot/main_screen.gd

315 lines
11 KiB
GDScript

extends CanvasLayer
# Time Sampling Form
# Copyright (C) 2022-present Jaap Marsman
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
var check_time_var : int
var csv_url = "https://raw.githubusercontent.com/hobbesjaap/time-sampling-form/main/updater/version_info.csv"
var update_text_url = "https://raw.githubusercontent.com/hobbesjaap/time-sampling-form/main/updater/update_text.md"
var update_text : String
var text_buffer : String
var os_list : Array = ["Linux", "Windows", "macOS", "OSX", "UWP", "X11", "FreeBSD", "NetBSD", "OpenBSD", "BSD"]
@onready var minute_label = $"StartScreen/InstructionPanel/MinuteBox/MinuteLabel"
@onready var styleBox_highlight : StyleBoxFlat = $"%OneInstrPanel".get_theme_stylebox("panel").duplicate()
@onready var styleBox_orig : StyleBoxFlat = $"%TwoNamesPanel".get_theme_stylebox("panel").duplicate()
func check_for_updates() -> void:
if os_list.has(OS.get_name()):
# print("We're on desktop. So let's check for updates!")
$"%HTTPRequest".request(csv_url)
$"%HTTPRequest2".request(update_text_url)
func _on_HTTPRequest_request_completed(_result, _response_code, _headers, body) -> void:
var test_json_conv = JSON.new()
test_json_conv.parse(body.get_string_from_utf8())
var json = test_json_conv.get_data()
global_ints.web_release_version = json
if global_ints.web_release_version > global_ints.release_version:
print("There's an update!")
$"%UpdatePanel".visible = true
$"%UpdateText".text = str(update_text)
$"%UpdateIntro".text = str("You are currently using version ",global_ints.release_version,". The latest version available is ",global_ints.web_release_version,".")
if global_ints.web_release_version <= global_ints.release_version:
print("No update available!")
func _on_HTTPRequest2_request_completed(_result, _response_code, _headers, body) -> void:
var test_json_conv = JSON.new()
test_json_conv.parse(body.get_string_from_utf8())
var json = test_json_conv.get_data()
global_ints.update_text = str(json)
func refresh_descriptors() -> void:
$"%1Acronym".text = global_ints.one_acronym
$"%1AcronymE".text = $"%1Acronym".text
$"%2Acronym".text = global_ints.two_acronym
$"%2AcronymE".text = $"%2Acronym".text
$"%3Acronym".text = global_ints.three_acronym
$"%3AcronymE".text = $"%3Acronym".text
$"%4Acronym".text = global_ints.four_acronym
$"%4AcronymE".text = $"%4Acronym".text
$"%5Acronym".text = global_ints.five_acronym
$"%5AcronymE".text = $"%5Acronym".text
$"%1Item".text = global_ints.one_behaviour
$"%1ItemE".text = $"%1Item".text
$"%2Item".text = global_ints.two_behaviour
$"%2ItemE".text = $"%2Item".text
$"%3Item".text = global_ints.three_behaviour
$"%3ItemE".text = $"%3Item".text
$"%4Item".text = global_ints.four_behaviour
$"%4ItemE".text = $"%4Item".text
$"%5Item".text = global_ints.five_behaviour
$"%5ItemE".text = $"%5Item".text
$"%1Explanation".text = global_ints.one_explanation
$"%1ExplanationE".text = $"%1Explanation".text
$"%2Explanation".text = global_ints.two_explanation
$"%2ExplanationE".text = $"%2Explanation".text
$"%3Explanation".text = global_ints.three_explanation
$"%3ExplanationE".text = $"%3Explanation".text
$"%4Explanation".text = global_ints.four_explanation
$"%4ExplanationE".text = $"%4Explanation".text
$"%5Explanation".text = global_ints.five_explanation
$"%5ExplanationE".text = $"%5Explanation".text
func set_language() -> void:
print(TranslationServer.get_locale())
if TranslationServer.get_locale() != "nl":
print("We're not Dutch")
global_ints.manual_url = "https://docs.jaapmarsman.com/tsf.html"
if TranslationServer.get_locale() == "nl":
print("We're Dutch")
global_ints.manual_url = "https://www.lerenleukermaken.nl/"
func update_date() -> void:
global_ints.date = Time.get_datetime_dict_from_system()
global_ints.ddmmyyyy = str(global_ints.date.day, "-", global_ints.date.month, "-", global_ints.date.year)
func set_app_window_size() -> void:
var desktop_x : int = DisplayServer.screen_get_size(DisplayServer.window_get_current_screen()).x
var desktop_y : int = DisplayServer.screen_get_size(DisplayServer.window_get_current_screen()).y
@warning_ignore("narrowing_conversion")
var app_window_x : int = desktop_x * 0.7
@warning_ignore("narrowing_conversion")
var app_window_y : int = desktop_y * 0.7
var app_window_size = Vector2i(app_window_x, app_window_y)
DisplayServer.window_set_min_size(Vector2i(app_window_x, app_window_y))
get_window().size = app_window_size
@warning_ignore("integer_division")
DisplayServer.window_set_position(Vector2i(int(desktop_x/6), int(desktop_y/6)))
func _ready() -> void:
#DisplayServer.window_set_min_size(Vector2i(1280, 720))
if os_list.has(OS.get_name()):
set_app_window_size()
minute_label.text = str(global_ints.observation_minutes)
global_ints.observed_person_name = ""
refresh_descriptors()
$"StartScreen".show()
$"%NameChangePanel".hide()
$"%InstructionScreen".show()
$"%WarningLabel".hide()
$"ObservationWindow".hide()
$"Results".hide()
$"EditScreen".hide()
$"%UpdatePanel".hide()
state_changed_check()
update_date()
# set_language()
check_for_updates()
func set_all_boxes_to_normal() -> void:
$"%OneInstrPanel".add_theme_stylebox_override("panel", styleBox_orig)
$"%TwoNamesPanel".add_theme_stylebox_override("panel", styleBox_orig)
$"%ThreeConfigPanel".add_theme_stylebox_override("panel", styleBox_orig)
$"%FourObservePanel".add_theme_stylebox_override("panel", styleBox_orig)
$"%FiveResultsPanel".add_theme_stylebox_override("panel", styleBox_orig)
func state_changed_check() -> void:
styleBox_highlight.set("bg_color", Color.html("#F2CC8F"))
if $"%InstructionScreen".visible == true:
global_ints.app_state = 1
set_all_boxes_to_normal()
$"%OneInstrPanel".add_theme_stylebox_override("panel", styleBox_highlight)
if $"%NameChangePanel".visible == true:
global_ints.app_state = 2
set_all_boxes_to_normal()
$"%TwoNamesPanel".add_theme_stylebox_override("panel", styleBox_highlight)
if $"%InstructionPanel".visible == true:
global_ints.app_state = 3
set_all_boxes_to_normal()
$"%ThreeConfigPanel".add_theme_stylebox_override("panel", styleBox_highlight)
if $"%ObservationWindow".visible == true:
global_ints.app_state = 4
set_all_boxes_to_normal()
$"%FourObservePanel".add_theme_stylebox_override("panel", styleBox_highlight)
if $"%Results".visible == true:
global_ints.app_state = 5
set_all_boxes_to_normal()
$"%FiveResultsPanel".add_theme_stylebox_override("panel", styleBox_highlight)
func _process(_delta) -> void:
# When I refactor, this should move OUT of the process-delta bit
# state_changed_check()
pass
func _on_MinuteMinus_pressed() -> void:
if global_ints.observation_minutes >= 2:
global_ints.observation_minutes -= 1
minute_label.text = str(global_ints.observation_minutes)
func _on_MinutePlus_pressed() -> void:
if global_ints.observation_minutes < 60:
global_ints.observation_minutes += 1
minute_label.text = str(global_ints.observation_minutes)
func _on_Manual_pressed() -> void:
var _error = OS.shell_open(global_ints.manual_url)
func _on_PupilName_pressed() -> void:
$"%NameLine".text = global_ints.observed_person_name
$"%InstructionPanel".hide()
$"%NameChangePanel".show()
state_changed_check()
func _on_Start_pressed() -> void:
$"StartScreen".visible = false
refresh_descriptors()
$"ObservationWindow".show()
state_changed_check()
$"%BehaviourOne".text = global_ints.one_acronym
$"%BehaviourTwo".text = global_ints.two_acronym
$"%BehaviourThree".text = global_ints.three_acronym
$"%BehaviourFour".text = global_ints.four_acronym
$"%BehaviourFive".text = global_ints.five_acronym
$"%BTitle1".text = global_ints.one_behaviour
$"%BTitle2".text = global_ints.two_behaviour
$"%BTitle3".text = global_ints.three_behaviour
$"%BTitle4".text = global_ints.four_behaviour
$"%BTitle5".text = global_ints.five_behaviour
$"%ObsTitle1".text = global_ints.one_behaviour
$"%ObsTitle2".text = global_ints.two_behaviour
$"%ObsTitle3".text = global_ints.three_behaviour
$"%ObsTitle4".text = global_ints.four_behaviour
$"%ObsTitle5".text = global_ints.five_behaviour
global_ints.locked_observation_minutes = global_ints.observation_minutes
global_ints.locked_observation_intervals = global_ints.locked_observation_minutes * 3
global_ints.locked_observations_intervals_remaining = global_ints.locked_observation_intervals
$"%ObservationsTotal".text = str(global_ints.locked_observation_intervals)
$"%ObservationsRemaining".text = str(global_ints.locked_observations_intervals_remaining)
var obs_date_time = Time.get_datetime_dict_from_system()
if obs_date_time.minute < 10:
global_ints.observation_start_time = str(obs_date_time.hour, ":0", obs_date_time.minute)
if obs_date_time.minute >= 10:
global_ints.observation_start_time = str(obs_date_time.hour, ":", obs_date_time.minute)
$"%TwentySecondTimer".start(global_ints.timer_duration)
func _on_ChangeItems_pressed() -> void:
$"EditScreen".show()
state_changed_check()
func _on_InsOkButton_pressed() -> void:
$"%InstructionScreen".hide()
$"%NameChangePanel".show()
state_changed_check()
func _on_MinuteMinus_button_down() -> void:
# Holding it down makes it work too - not yet
# if global_ints.observation_minutes >= 2:
# global_ints.observation_minutes -= 1
# minute_label.text = str(global_ints.observation_minutes)
pass
func _on_minute_plus_button_down() -> void:
pass # Replace with function body.
func _on_GoToUpdate_pressed() -> void:
var _error = OS.shell_open("https://github.com/hobbesjaap/time-sampling-form/releases")
func _on_IgnoreUpdate_pressed() -> void:
$"%UpdatePanel".hide()
func _on_ok_button_pressed() -> void:
if $"%NameLine".text and $"%ObserverLine".text and $"%ObservedActivity".text != "":
$"%InstructionPanel".show()
$"%NameChangePanel".hide()
state_changed_check()
global_ints.observed_person_name = $"%NameLine".text
global_ints.observer_person_name = $"%ObserverLine".text
global_ints.observed_activity = $"%ObservedActivity".text
$"%TopOverview".text = str("Time Sampling Observation of " , global_ints.observed_person_name, ", observed by ", global_ints.observer_person_name , ", during " , global_ints.observed_activity , ".")
$"%TopOverview".show()
else:
$"%ObservedNameLabel".hide()
$"%WarningLabel".show()
func _on_edit_report_pressed() -> void:
$"%EditResult".text = $"%FullResult".text
$"%ResultMenu".hide()
$"%EditPanel".show()
$"%EditResult".show()
$"%EditMenu".show()
func _on_cancel_edit_pressed() -> void:
$"%ResultMenu".show()
$"%EditPanel".hide()
$"%EditResult".hide()
$"%EditMenu".hide()
func _on_save_edit_pressed() -> void:
$"%FullResult".text = $"%EditResult".text
$"%ResultMenu".show()
$"%EditPanel".hide()
$"%EditResult".hide()
$"%EditMenu".hide()