Files
Defensaria/addons/gut/gui/BottomPanelShortcuts.gd
2025-04-13 21:35:53 +02:00

140 lines
4.2 KiB
GDScript

@tool
extends Window
var GutEditorGlobals = load('res://addons/gut/gui/editor_globals.gd')
var default_path = GutEditorGlobals.editor_shortcuts_path
@onready var _ctrls = {
run_all = $Layout/CRunAll/ShortcutButton,
run_current_script = $Layout/CRunCurrentScript/ShortcutButton,
run_current_inner = $Layout/CRunCurrentInner/ShortcutButton,
run_current_test = $Layout/CRunCurrentTest/ShortcutButton,
panel_button = $Layout/CPanelButton/ShortcutButton,
}
var _user_prefs = GutEditorGlobals.user_prefs
func _ready():
for key in _ctrls:
var sc_button = _ctrls[key]
sc_button.connect('start_edit', _on_edit_start.bind(sc_button))
sc_button.connect('end_edit', _on_edit_end)
# show dialog when running scene from editor.
if(get_parent() == get_tree().root):
popup_centered()
func _cancel_all():
_ctrls.run_all.cancel()
_ctrls.run_current_script.cancel()
_ctrls.run_current_inner.cancel()
_ctrls.run_current_test.cancel()
_ctrls.panel_button.cancel()
# ------------
# Events
# ------------
func _on_Hide_pressed():
hide()
func _on_edit_start(which):
for key in _ctrls:
var sc_button = _ctrls[key]
if(sc_button != which):
sc_button.disable_set(true)
sc_button.disable_clear(true)
func _on_edit_end():
for key in _ctrls:
var sc_button = _ctrls[key]
sc_button.disable_set(false)
sc_button.disable_clear(false)
func _on_popup_hide():
_cancel_all()
# ------------
# Public
# ------------
func get_run_all():
return _ctrls.run_all.get_shortcut()
func get_run_current_script():
return _ctrls.run_current_script.get_shortcut()
func get_run_current_inner():
return _ctrls.run_current_inner.get_shortcut()
func get_run_current_test():
return _ctrls.run_current_test.get_shortcut()
func get_panel_button():
return _ctrls.panel_button.get_shortcut()
func _set_pref_value(pref, button):
pref.value = {shortcut = button.get_shortcut().events}
func save_shortcuts():
save_shortcuts_to_file(default_path)
func save_shortcuts_to_editor_settings():
_set_pref_value(_user_prefs.shortcut_run_all, _ctrls.run_all)
_set_pref_value(_user_prefs.shortcut_run_current_script, _ctrls.run_current_script)
_set_pref_value(_user_prefs.shortcut_run_current_inner, _ctrls.run_current_inner)
_set_pref_value(_user_prefs.shortcut_run_current_test, _ctrls.run_current_test)
_set_pref_value(_user_prefs.shortcut_panel_button, _ctrls.panel_button)
_user_prefs.save_it()
func save_shortcuts_to_file(path):
var f = ConfigFile.new()
f.set_value('main', 'run_all', _ctrls.run_all.get_shortcut())
f.set_value('main', 'run_current_script', _ctrls.run_current_script.get_shortcut())
f.set_value('main', 'run_current_inner', _ctrls.run_current_inner.get_shortcut())
f.set_value('main', 'run_current_test', _ctrls.run_current_test.get_shortcut())
f.set_value('main', 'panel_button', _ctrls.panel_button.get_shortcut())
f.save(path)
func _load_shortcut_from_pref(user_pref):
var to_return = Shortcut.new()
# value with be _user_prefs.EMPTY which is a string when the value
# has not been set.
if(typeof(user_pref.value) == TYPE_DICTIONARY):
to_return.events.append(user_pref.value.shortcut[0])
# to_return = user_pref.value
return to_return
func load_shortcuts():
load_shortcuts_from_file(default_path)
func load_shortcuts_from_editor_settings():
var empty = Shortcut.new()
_ctrls.run_all.set_shortcut(_load_shortcut_from_pref(_user_prefs.shortcut_run_all))
_ctrls.run_current_script.set_shortcut(_load_shortcut_from_pref(_user_prefs.shortcut_run_current_script))
_ctrls.run_current_inner.set_shortcut(_load_shortcut_from_pref(_user_prefs.shortcut_run_current_inner))
_ctrls.run_current_test.set_shortcut(_load_shortcut_from_pref(_user_prefs.shortcut_run_current_test))
_ctrls.panel_button.set_shortcut(_load_shortcut_from_pref(_user_prefs.shortcut_panel_button))
func load_shortcuts_from_file(path):
var f = ConfigFile.new()
var empty = Shortcut.new()
f.load(path)
_ctrls.run_all.set_shortcut(f.get_value('main', 'run_all', empty))
_ctrls.run_current_script.set_shortcut(f.get_value('main', 'run_current_script', empty))
_ctrls.run_current_inner.set_shortcut(f.get_value('main', 'run_current_inner', empty))
_ctrls.run_current_test.set_shortcut(f.get_value('main', 'run_current_test', empty))
_ctrls.panel_button.set_shortcut(f.get_value('main', 'panel_button', empty))