128 lines
4.0 KiB
Lua

-------------------------------------------------------------------------------
--[Adjustment Pad]--
-------------------------------------------------------------------------------
local Pad = {}
local Event = require('__stdlib__/stdlib/event/event')
local Gui = require('__stdlib__/stdlib/event/gui')
local lib = require('__PickerAtheneum__/utils/lib')
function Pad.register_events(pad_name, func, events)
Gui.on_click(pad_name .. '_btn_reset', func)
Gui.on_confirmed(
pad_name .. '_text_box',
function(event)
event.change = true
func(event)
end
)
Gui.on_click(
pad_name .. '_btn_up',
function(event)
event.change = 1
func(event)
end
)
Gui.on_click(
pad_name .. '_btn_dn',
function(event)
event.change = -1
func(event)
end
)
local function keybind_event(event)
if event.input_name == 'adjustment-pad-increase' then
event.change = 1
func(event)
elseif event.input_name == 'adjustment-pad-decrease' then
event.change = -1
func(event)
end
end
Event.on_event({'adjustment-pad-increase', 'adjustment-pad-decrease'}, keybind_event)
for _, event in pairs(events or {}) do
Event.register(event, func)
end
end
function Pad.remove_gui(player, frame_name, flow_name)
flow_name = flow_name or 'picker'
local main_flow = lib.get_or_create_main_left_flow(player, flow_name)
return main_flow[frame_name] and main_flow[frame_name].destroy()
end
function Pad.get_or_create_adjustment_pad(player, pad_name, flow_name) -- return gui
flow_name = flow_name or 'picker'
local main_flow = lib.get_or_create_main_left_flow(player, flow_name)
local gui = main_flow[pad_name .. '_frame_main']
if not gui then
gui =
main_flow.add {
type = 'frame',
name = pad_name .. '_frame_main',
direction = 'horizontal',
style = 'adjustment_pad_frame_style'
}
local flow =
gui.add {
type = 'flow',
name = pad_name .. '_flow',
direction = 'horizontal',
style = 'adjustment_pad_flow_style'
}
flow.add {
type = 'label',
name = pad_name .. '_label',
caption = {pad_name .. '-gui.label-caption'},
tooltip = {pad_name .. '-tooltip.label-caption'},
style = 'heading_2_label'
}
flow.add {
type = 'textfield',
name = pad_name .. '_text_box',
text = 0,
style = 'adjustment_pad_text_style',
lose_focus_on_confirm = true,
numeric = true,
clear_and_focus_on_right_click = true
}
--Up/Down buttons
local button_flow =
flow.add {
type = 'flow',
name = pad_name .. '_button_flow',
direction = 'vertical',
style = 'adjustment_pad_button_flow_style'
}
button_flow.add {
type = 'sprite-button',
name = pad_name .. '_btn_up',
style = 'frame_action_button',
sprite = 'adjustment_pad_button_plus',
hovered_sprite = 'adjustment_pad_button_plus_dark',
clicked_sprite = 'adjustment_pad_button_plus_dark'
}
button_flow.add {
type = 'sprite-button',
name = pad_name .. '_btn_dn',
style = 'frame_action_button',
sprite = 'adjustment_pad_button_minus',
hovered_sprite = 'adjustment_pad_button_minus_dark',
clicked_sprite = 'adjustment_pad_button_minus_dark'
}
--Reset button
flow.add {
type = 'sprite-button',
name = pad_name .. '_btn_reset',
tooltip = {pad_name .. '-tooltip.label-reset'},
style = 'adjustment_pad_btn_reset_style',
sprite = 'utility/reset'
}
end
return gui[pad_name .. '_flow']
end
return Pad