Files
2026-10-30 16:27:05 +00:00

81 lines
2.5 KiB
Lua

-- Recommended width: 100+ px / Recommended height: 36-40 px
PTGuiEditBoxSlider = PTGuiComponent:Extend("editbox_slider")
PTGuiEditBoxSlider:ImportComponent("slider", true, "SetMinMaxValues", "SetValue", "SetValueStep")
PTGuiEditBoxSlider:ImportComponent("slider", false, "GetMinMaxValues", "GetValue", "GetValueStep")
PTGuiEditBoxSlider:ImportComponent("editbox", true, "SetText")
PTGuiEditBoxSlider:ImportComponent("editbox", false, "GetText")
function PTGuiEditBoxSlider:New()
local obj = setmetatable({}, self)
local frame = CreateFrame("Frame", self:GenerateName(), nil)
obj:SetHandle(frame)
local slider = PTGuiLib.Get("slider", frame)
obj:AddComponent("slider", slider)
local editbox = PTGuiLib.Get("editbox", frame)
obj:AddComponent("editbox", editbox)
return obj
end
function PTGuiEditBoxSlider:OnAcquire()
self.super.OnAcquire(self)
local slider = self:GetSlider()
local editbox = self:GetEditbox()
self:SetPrimary()
slider:SetPoint("TOPLEFT", self, "TOPLEFT")
slider:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", 0, 20)
editbox:SetJustifyH("CENTER")
self:SetEditboxPadding(35)
slider:GetHandle():SetHitRectInsets(0, 0, 0, 3)
slider:SetScript("OnValueChanged", function()
if not editbox.hasFocus then
editbox:SetText(slider:GetValue())
end
end, true)
editbox:SetText(slider:GetValue())
editbox:SetScript("OnTextChanged", function()
slider:SetValue(editbox:GetHandle():GetNumber())
end, true)
editbox:SetScript("OnEditFocusGained", function()
editbox.hasFocus = true
editbox:GetHandle():HighlightText()
end, true)
editbox:SetScript("OnEditFocusLost", function()
editbox:SetText(slider:GetValue())
editbox.hasFocus = nil
end, true)
editbox:SetScript("OnEnterPressed", function()
editbox:GetScript("OnTextChanged")()
editbox:ClearFocus()
end, true)
end
-- TODO: Handle disposal
function PTGuiEditBoxSlider:OnDispose()
self.super.OnDispose(self)
end
function PTGuiEditBoxSlider:GetSlider()
return self:GetComponent("slider")
end
function PTGuiEditBoxSlider:GetEditbox()
return self:GetComponent("editbox")
end
function PTGuiEditBoxSlider:SetEditboxPadding(padding)
local editbox = self:GetEditbox()
editbox:ClearAllPoints()
editbox:SetPoint("TOPLEFT", self:GetSlider(), "BOTTOMLEFT", padding, 0)
editbox:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", -padding, 0)
end
PTGuiLib.RegisterComponent(PTGuiEditBoxSlider)