class W3DHub
class States
class Interface < CyberarmEngine::GuiState
attr_reader :main_thread_queue
attr_accessor :interface_task_update_pending
def setup
window.show_cursor = true
@account = @options[:account]
@service_status = @options[:service_status]
@applications = @options[:applications]
@interface_task_update_pending = nil
@page = nil
@pages = {}
@main_thread_queue = []
Store.application_manager.auto_import
theme(W3DHub::THEME)
stack(width: 1.0, height: 1.0, border_thickness: 1, border_color: 0xff_aaaaaa) do
background 0xff_252525
@header_container = flow(width: 1.0, height: 0.15, padding: 4) do
image "#{GAME_ROOT_PATH}/media/icons/w3dhub.png", width: 0.11
stack(width: 0.89, height: 1.0) do
# background 0xff_885500
@app_info_container = flow(width: 1.0, height: 0.65) do
# background 0xff_8855ff
stack(width: 0.75, height: 1.0) do
title "#{I18n.t(:"app_name")}", height: 0.5
flow(width: 1.0, height: 0.5) do
flow(width: 0.18, height: 1.0) do
button(
get_image("#{GAME_ROOT_PATH}/media/ui_icons/gear.png"),
tip: I18n.t(:"interface.app_settings_tip"),
image_height: 1.0,
padding_left: 4,
padding_top: 4,
padding_right: 4,
padding_bottom: 4,
margin_left: 32
) do
page(W3DHub::Pages::Settings)
end
button(
get_image("#{GAME_ROOT_PATH}/media/ui_icons/import.png"),
tip: I18n.t(:"interface.download_manager"),
image_height: 1.0,
padding_left: 4,
padding_top: 4,
padding_right: 4,
padding_bottom: 4,
margin_left: 4
) do
page(W3DHub::Pages::DownloadManager)
end
end
@application_taskbar_container = stack(width: 0.77, height: 1.0, margin_left: 16) do
flow(width: 1.0, height: 0.65) do
@application_taskbar_label = inscription "", width: 0.65, text_wrap: :none
@application_taskbar_status_label = inscription "", width: 0.35, text_align: :right, text_wrap: :none
end
@application_taskbar_progressbar = progress fraction: 0.0, height: 2, width: 1.0
end
end
end
@account_container = flow(width: 0.25, height: 1.0) do
stack(width: 0.7, height: 1.0) do
# background 0xff_222222
tagline "#{I18n.t(:"interface.not_logged_in")}", text_wrap: :none
flow(width: 1.0) do
link(I18n.t(:"interface.log_in"), text_size: 16, width: 0.5) { page(W3DHub::Pages::Login) }
link I18n.t(:"interface.register"), text_size: 16, width: 0.49 do
Launchy.open("https://secure.w3dhub.com/forum/index.php?app=core&module=global§ion=register")
end
end
end
end
end
@navigation_container = flow(width: 1.0, height: 0.35) do
# background 0xff_666666
flow(width: 0.20, height: 1.0) do
end
flow(width: 0.55, height: 1.0) do
link I18n.t(:"interface.games") do
page(W3DHub::Pages::Games)
end
link I18n.t(:"interface.server_browser"), margin_left: 18 do
page(W3DHub::Pages::ServerBrowser)
end
link I18n.t(:"interface.community"), margin_left: 18 do
page(W3DHub::Pages::Community)
end
end
flow(width: 0.20, height: 1.0) do
end
end
end
end
@content_container = flow(width: 1.0, height: 0.85) do
end
end
if Store.account
page(W3DHub::Pages::Login)
else
page(W3DHub::Pages::Games)
end
hide_application_taskbar
end
def draw
super
@page&.draw
end
def update
super
@page&.update
while(block = @main_thread_queue.shift)
block&.call
end
update_interface_task_status(@interface_task_update_pending) if @interface_task_update_pending
end
def button_down(id)
super
@page&.button_down(id)
end
def button_up(id)
super
@page&.button_up(id)
end
def body
@content_container
end
def page(klass, options = {})
# @menu_bar.clear
# @status_bar.clear
body.clear
@page.blur if @page
@pages[klass] = klass.new(host: self) unless @pages[klass]
@page = @pages[klass]
@page.options = options
@page.setup
@page.focus
end
def show_application_taskbar
@application_taskbar_container.show
end
def hide_application_taskbar
@application_taskbar_container.hide
end
def update_interface_task_status(task)
show_application_taskbar
@application_taskbar_label.value = task.status.label
@application_taskbar_status_label.value = task.status.value
@application_taskbar_progressbar.value = task.status.progress.clamp(0.0, 1.0)
return unless @page.is_a?(Pages::DownloadManager)
operation_info = @page.operation_info
operation_step = @page.operation_info[:___step]
if task.status.step != operation_step
@page.regenerate(task)
return
end
task.status.operations.each do |key, operation|
name_ = operation_info["#{key}_name"]
status_ = operation_info["#{key}_status"]
progress_ = operation_info["#{key}_progress"]
next if name_.value == operation.label &&
status_.value == operation.value &&
progress_.value == operation.value
name_.value = operation.label if operation.label
status_.value = operation.value if operation.value
progress_.value = operation.progress.clamp(0.0, 1.0) if operation.progress
end
end
end
end
end