81 lines
2.5 KiB
Lua
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) |