mirror of
https://github.com/cyberarm/w3d_hub_linux_launcher.git
synced 2025-12-15 16:52:34 +00:00
119 lines
4.3 KiB
Ruby
119 lines
4.3 KiB
Ruby
class W3DHub
|
|
class Pages
|
|
class Settings < Page
|
|
def setup
|
|
body.clear do
|
|
stack(width: 1.0, height: 1.0, padding: 16) do
|
|
background 0xaa_252525
|
|
|
|
stack(width: 1.0, fill: true, max_width: 720, h_align: :center, scroll: true) do
|
|
stack(width: 1.0, height: 112) do
|
|
tagline "Launcher Language"
|
|
@language_menu = list_box items: I18n.available_locales.map { |l| expand_language_code(l.to_s) }, choose: expand_language_code(Store.settings[:language]), width: 1.0, margin_left: 16
|
|
para "Select the UI language you'd like to use in the W3D Hub Launcher.", margin_left: 16
|
|
end
|
|
|
|
|
|
stack(width: 1.0, height: 200, margin_top: 16) do
|
|
tagline "Launcher Directories"
|
|
caption "Applications Install Directory", margin_left: 16
|
|
flow(width: 1.0, fill: true, margin_left: 16) do
|
|
@app_install_dir_input = edit_line Store.settings[:app_install_dir], fill: true
|
|
button "Browse...", width: 128, tip: "Browse for applications install directory" do
|
|
path = W3DHub.ask_folder
|
|
@app_install_dir_input.value = path unless path.empty?
|
|
end
|
|
end
|
|
|
|
caption "Package Cache Directory", margin_left: 16, margin_top: 16
|
|
flow(width: 1.0, fill: true, margin_left: 16) do
|
|
@package_cache_dir_input = edit_line Store.settings[:package_cache_dir], fill: true
|
|
button "Browse...", width: 128, tip: "Browse for package cache directory" do
|
|
path = W3DHub.ask_folder
|
|
@package_cache_dir_input.value = path unless path.empty?
|
|
end
|
|
end
|
|
end
|
|
|
|
if W3DHub.unix?
|
|
stack(width: 1.0, height: 224, margin_top: 16) do
|
|
tagline "Wine - Windows compatibility layer"
|
|
caption "Wine Command", margin_left: 16
|
|
@wine_command_input = edit_line Store.settings[:wine_command], width: 1.0, margin_left: 16
|
|
para "Command to use to for Windows compatiblity layer.", margin_left: 16
|
|
|
|
caption "Wine Prefix", margin_left: 16, margin_top: 16
|
|
flow(width: 1.0, height: 48, margin_left: 16) do
|
|
@wine_prefix_toggle = toggle_button checked: Store.settings[:wine_prefix], enabled: false
|
|
para "Whether each game gets its own prefix. Uses global/default prefix by default."
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
stack(width: 128, max_height: 256, h_align: :center, margin_top: 16, fill: true) do
|
|
button "Save", width: 1.0 do
|
|
save_settings!
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def language_code(string)
|
|
case string.downcase.strip
|
|
when "deutsch"
|
|
"de"
|
|
when "français"
|
|
"fr"
|
|
when "español"
|
|
"es"
|
|
else
|
|
"en"
|
|
end
|
|
end
|
|
|
|
def expand_language_code(string)
|
|
case string.downcase.strip
|
|
when "en"
|
|
"English"
|
|
when "de"
|
|
"Deutsch"
|
|
when "fr"
|
|
"Français"
|
|
when "es"
|
|
"Español"
|
|
else
|
|
logger.warn("W3DHub::Settings") { "Unknown language code: #{string.inspect}" }
|
|
end
|
|
end
|
|
|
|
def save_settings!
|
|
old_language = Store.settings[:language]
|
|
Store.settings[:language] = language_code(@language_menu.value)
|
|
|
|
Store.settings[:app_install_dir] = @app_install_dir_input.value
|
|
Store.settings[:package_cache_dir] = @package_cache_dir_input.value
|
|
|
|
Store.settings[:wine_command] = @wine_command_input.value
|
|
Store.settings[:wine_prefix] = @wine_prefix_toggle.value
|
|
|
|
Store.settings.save_settings
|
|
|
|
begin
|
|
I18n.locale = Store.settings[:language]
|
|
rescue I18n::InvalidLocale
|
|
I18n.locale = :en
|
|
end
|
|
|
|
if old_language == Store.settings[:language]
|
|
page(Pages::Games)
|
|
else
|
|
# pop back to Boot state which will immediately push a new instance of Interface
|
|
pop_state
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|