Quantcast
local _, ns = ...

local THUMB = [=[Interface\Buttons\UI-SliderBar-Button-Horizontal]=]
local SLIDER = {
	bgFile = [=[Interface\Buttons\UI-SliderBar-Background]=],
	edgeFile = [=[Interface\Buttons\UI-SliderBar-Border]=],
	edgeSize = 8, tile = true, tileSize = 8,
	insets = {left = 3, right = 3, top = 6, bottom = 6},
}

local EDITBOX = {
	bgFile = [=[Interface\ChatFrame\ChatFrameBackground]=],
	edgeFile = [=[Interface\ChatFrame\ChatFrameBackground]=],
	tile = true, edgeSize = 1, tileSize = 5,
}

local function OnEnterPressed(self)
	local value = tonumber(self:GetText())
	if(value) then
		PlaySound('igMainMenuOptionCheckBoxOn')
		self:GetParent():SetValue(value)
	end
end

local function OnEnter(self)
	self:SetBackdropBorderColor(0.5, 0.5, 0.5, 1)
end

local function OnLeave(self)
	self:SetBackdropBorderColor(0.3, 0.3, 0.3, 0.8)
end

function ns.slider(parent, str, formatting, cur, min, max, step, ...)
	local slider = CreateFrame('Slider', nil, parent)
	slider:SetPoint(...)
	slider:SetSize(144, 16)
	slider:SetBackdrop(SLIDER)
	slider:SetThumbTexture(THUMB)
	slider:SetOrientation('HORIZONTAL')
	slider:SetMinMaxValues(min, max)
	slider:SetValueStep(step)
	slider:SetValue(cur)

	local left = slider:CreateFontString(nil, 'ARTWORK', 'GameFontHighlightSmall')
	left:SetPoint('TOPLEFT', slider, 'BOTTOMLEFT', -4, 3)
	left:SetText(min)

	local right = slider:CreateFontString(nil, 'ARTWORK', 'GameFontHighlightSmall')
	right:SetPoint('TOPRIGHT', slider, 'BOTTOMRIGHT', 4, 3)
	right:SetText(max)

	local label = slider:CreateFontString(nil, 'ARTWORK', 'GameFontNormal')
	label:SetPoint('BOTTOM', slider, 'TOP')
	label:SetText(str)

	local editbox = CreateFrame('EditBox', nil, slider)
	editbox:SetPoint('TOP', slider, 'BOTTOM')
	editbox:SetSize(40, 14)
	editbox:SetAutoFocus(false)
	editbox:SetFontObject(GameFontHighlightSmall)
	editbox:SetBackdrop(EDITBOX)
	editbox:SetBackdropColor(0, 0, 0, 0.5)
	editbox:SetBackdropBorderColor(0.3, 0.3, 0.3, 0.8)
	editbox:EnableMouse(true)
	editbox:SetScript('OnEnter', OnEnter)
	editbox:SetScript('OnLeave', OnLeave)
	editbox:SetScript('OnEnterPressed', OnEnterPressed)
	editbox:SetScript('OnEscapePressed', editbox.ClearFocus)
	editbox:SetJustifyH('CENTER')
	editbox:SetText(string.format(formatting, cur))

	slider:SetScript('OnValueChanged', function(self, value)
		editbox:SetText(string.format(formatting, value))
	end)

	return slider
end