You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

995 lines
35 KiB

local GlobalAddonName, WQLdb = ...
local ELib = {}
WQLdb.ELib = ELib
ELib.Templates = {}
function ELib.Templates:Border(self,cR,cG,cB,cA,size,offsetX,offsetY)
offsetX = offsetX or 0
offsetY = offsetY or 0
self.BorderTop = self:CreateTexture(nil,"BACKGROUND")
self.BorderTop:SetColorTexture(cR,cG,cB,cA)
self.BorderTop:SetPoint("TOPLEFT",-size-offsetX,size+offsetY)
self.BorderTop:SetPoint("BOTTOMRIGHT",self,"TOPRIGHT",size+offsetX,offsetY)
self.BorderLeft = self:CreateTexture(nil,"BACKGROUND")
self.BorderLeft:SetColorTexture(cR,cG,cB,cA)
self.BorderLeft:SetPoint("TOPLEFT",-size-offsetX,offsetY)
self.BorderLeft:SetPoint("BOTTOMRIGHT",self,"BOTTOMLEFT",-offsetX,-offsetY)
self.BorderBottom = self:CreateTexture(nil,"BACKGROUND")
self.BorderBottom:SetColorTexture(cR,cG,cB,cA)
self.BorderBottom:SetPoint("BOTTOMLEFT",-size-offsetX,-size-offsetY)
self.BorderBottom:SetPoint("TOPRIGHT",self,"BOTTOMRIGHT",size+offsetX,-offsetY)
self.BorderRight = self:CreateTexture(nil,"BACKGROUND")
self.BorderRight:SetColorTexture(cR,cG,cB,cA)
self.BorderRight:SetPoint("BOTTOMRIGHT",size+offsetX,offsetY)
self.BorderRight:SetPoint("TOPLEFT",self,"TOPRIGHT",offsetX,-offsetY)
self.BorderColor = {cR,cG,cB,cA}
end
function ELib:Shadow(parent,size,edgeSize)
local self = CreateFrame("Frame",nil,parent,"BackdropTemplate")
self:SetPoint("LEFT",-size,0)
self:SetPoint("RIGHT",size,0)
self:SetPoint("TOP",0,size)
self:SetPoint("BOTTOM",0,-size)
self:SetBackdrop({edgeFile="Interface/AddOns/WorldQuestsList/shadow",edgeSize=edgeSize or 28,insets={left=size,right=size,top=size,bottom=size}})
self:SetBackdropBorderColor(0,0,0,.45)
return self
end
function ELib:Shadow2(self,size,offsetX,offsetY,isBold)
offsetX = offsetX or 0
offsetY = offsetY or 0
isBold = true
self.ShadowTop = self:CreateTexture(nil,"BACKGROUND")
self.ShadowTop:SetTexture("Interface/AddOns/WorldQuestsList/shadow")
self.ShadowTop:SetPoint("TOPLEFT",10,size+offsetY)
self.ShadowTop:SetPoint("BOTTOMRIGHT",self,"TOPRIGHT",-10,offsetY)
self.ShadowTop:SetVertexColor(0,0,0,.45)
self.ShadowTop:SetTexCoord((128+31)/256,(128+32)/256,0,22/32)
self.ShadowTopLeftInside = self:CreateTexture(nil,"BACKGROUND")
self.ShadowTopLeftInside:SetTexture("Interface/AddOns/WorldQuestsList/shadow")
self.ShadowTopLeftInside:SetPoint("TOPLEFT",-offsetX,size+offsetY)
self.ShadowTopLeftInside:SetPoint("BOTTOMRIGHT",self,"TOPLEFT",-offsetX+10,offsetY)
self.ShadowTopLeftInside:SetVertexColor(0,0,0,.45)
self.ShadowTopLeftInside:SetTexCoord((128+22)/256,(128+32)/256,0,22/32)
self.ShadowTopLeft = self:CreateTexture(nil,"BACKGROUND")
self.ShadowTopLeft:SetTexture("Interface/AddOns/WorldQuestsList/shadow")
self.ShadowTopLeft:SetPoint("TOPLEFT",-offsetX-size,size+offsetY)
self.ShadowTopLeft:SetPoint("BOTTOMRIGHT",self,"TOPLEFT",-offsetX,offsetY)
self.ShadowTopLeft:SetVertexColor(0,0,0,.45)
self.ShadowTopLeft:SetTexCoord((128+0)/256,(128+22)/256,0,22/32)
self.ShadowTopRightInside = self:CreateTexture(nil,"BACKGROUND")
self.ShadowTopRightInside:SetTexture("Interface/AddOns/WorldQuestsList/shadow")
self.ShadowTopRightInside:SetPoint("TOPLEFT",self,"TOPRIGHT",offsetX-10,size+offsetY)
self.ShadowTopRightInside:SetPoint("BOTTOMRIGHT",self,"TOPRIGHT",offsetX,offsetY)
self.ShadowTopRightInside:SetVertexColor(0,0,0,.45)
self.ShadowTopRightInside:SetTexCoord((128+32)/256,(128+22)/256,0,22/32)
self.ShadowTopRight = self:CreateTexture(nil,"BACKGROUND")
self.ShadowTopRight:SetTexture("Interface/AddOns/WorldQuestsList/shadow")
self.ShadowTopRight:SetPoint("TOPLEFT",self,"TOPRIGHT",offsetX,size+offsetY)
self.ShadowTopRight:SetPoint("BOTTOMRIGHT",self,"TOPRIGHT",offsetX+size,offsetY)
self.ShadowTopRight:SetVertexColor(0,0,0,.45)
self.ShadowTopRight:SetTexCoord((128+22)/256,(128+0)/256,0,22/32)
self.ShadowLeftTopInside = self:CreateTexture(nil,"BACKGROUND")
self.ShadowLeftTopInside:SetTexture("Interface/AddOns/WorldQuestsList/shadow")
self.ShadowLeftTopInside:SetPoint("TOPLEFT",-offsetX-size,offsetY)
self.ShadowLeftTopInside:SetPoint("BOTTOMRIGHT",self,"TOPLEFT",-offsetX,offsetY-10)
self.ShadowLeftTopInside:SetVertexColor(0,0,0,.45)
self.ShadowLeftTopInside:SetTexCoord((128+0)/256,(128+22)/256,22/32,32/32)
self.ShadowLeft = self:CreateTexture(nil,"BACKGROUND")
self.ShadowLeft:SetTexture("Interface/AddOns/WorldQuestsList/shadow")
self.ShadowLeft:SetPoint("TOPLEFT",-offsetX-size,offsetY-10)
self.ShadowLeft:SetPoint("BOTTOMRIGHT",self,"BOTTOMLEFT",-offsetX,-offsetY+10)
self.ShadowLeft:SetVertexColor(0,0,0,.45)
self.ShadowLeft:SetTexCoord((128+0)/256,(128+22)/256,31/32,32/32)
self.ShadowLeftBottomInside = self:CreateTexture(nil,"BACKGROUND")
self.ShadowLeftBottomInside:SetTexture("Interface/AddOns/WorldQuestsList/shadow")
self.ShadowLeftBottomInside:SetPoint("TOPLEFT",self,"BOTTOMLEFT",-offsetX-size,-offsetY+10)
self.ShadowLeftBottomInside:SetPoint("BOTTOMRIGHT",self,"BOTTOMLEFT",-offsetX,-offsetY)
self.ShadowLeftBottomInside:SetVertexColor(0,0,0,.45)
self.ShadowLeftBottomInside:SetTexCoord((128+0)/256,(128+22)/256,32/32,22/32)
self.ShadowLeftBottom = self:CreateTexture(nil,"BACKGROUND")
self.ShadowLeftBottom:SetTexture("Interface/AddOns/WorldQuestsList/shadow")
self.ShadowLeftBottom:SetPoint("TOPLEFT",self,"BOTTOMLEFT",-offsetX-size,-offsetY)
self.ShadowLeftBottom:SetPoint("BOTTOMRIGHT",self,"BOTTOMLEFT",-offsetX,-offsetY-size)
self.ShadowLeftBottom:SetVertexColor(0,0,0,.45)
self.ShadowLeftBottom:SetTexCoord((128+0)/256,(128+22)/256,22/32,0)
self.ShadowBottomLeftInside = self:CreateTexture(nil,"BACKGROUND")
self.ShadowBottomLeftInside:SetTexture("Interface/AddOns/WorldQuestsList/shadow")
self.ShadowBottomLeftInside:SetPoint("TOPLEFT",self,"BOTTOMLEFT",-offsetX,-offsetY)
self.ShadowBottomLeftInside:SetPoint("BOTTOMRIGHT",self,"BOTTOMLEFT",-offsetX+10,-offsetY-size)
self.ShadowBottomLeftInside:SetVertexColor(0,0,0,.45)
self.ShadowBottomLeftInside:SetTexCoord((128+22)/256,(128+32)/256,22/32,0)
self.ShadowBottom = self:CreateTexture(nil,"BACKGROUND")
self.ShadowBottom:SetTexture("Interface/AddOns/WorldQuestsList/shadow")
self.ShadowBottom:SetPoint("TOPLEFT",self,"BOTTOMLEFT",-offsetX+10,-offsetY)
self.ShadowBottom:SetPoint("BOTTOMRIGHT",self,"BOTTOMRIGHT",offsetX-10,-offsetY-size)
self.ShadowBottom:SetVertexColor(0,0,0,.45)
self.ShadowBottom:SetTexCoord((128+31)/256,(128+32)/256,22/32,0)
self.ShadowBottomRightInside = self:CreateTexture(nil,"BACKGROUND")
self.ShadowBottomRightInside:SetTexture("Interface/AddOns/WorldQuestsList/shadow")
self.ShadowBottomRightInside:SetPoint("TOPLEFT",self,"BOTTOMRIGHT",offsetX-10,-offsetY)
self.ShadowBottomRightInside:SetPoint("BOTTOMRIGHT",self,"BOTTOMRIGHT",offsetX,-offsetY-size)
self.ShadowBottomRightInside:SetVertexColor(0,0,0,.45)
self.ShadowBottomRightInside:SetTexCoord((128+32)/256,(128+22)/256,22/32,0)
self.ShadowBottomRight = self:CreateTexture(nil,"BACKGROUND")
self.ShadowBottomRight:SetTexture("Interface/AddOns/WorldQuestsList/shadow")
self.ShadowBottomRight:SetPoint("TOPLEFT",self,"BOTTOMRIGHT",offsetX,-offsetY)
self.ShadowBottomRight:SetPoint("BOTTOMRIGHT",self,"BOTTOMRIGHT",offsetX+size,-offsetY-size)
self.ShadowBottomRight:SetVertexColor(0,0,0,.45)
self.ShadowBottomRight:SetTexCoord((128+22)/256,(128+0)/256,22/32,0)
self.ShadowRightBottomInside = self:CreateTexture(nil,"BACKGROUND")
self.ShadowRightBottomInside:SetTexture("Interface/AddOns/WorldQuestsList/shadow")
self.ShadowRightBottomInside:SetPoint("TOPLEFT",self,"BOTTOMRIGHT",offsetX,-offsetY+10)
self.ShadowRightBottomInside:SetPoint("BOTTOMRIGHT",self,"BOTTOMRIGHT",offsetX+size,-offsetY)
self.ShadowRightBottomInside:SetVertexColor(0,0,0,.45)
self.ShadowRightBottomInside:SetTexCoord((128+22)/256,(128+0)/256,32/32,22/32)
self.ShadowRight = self:CreateTexture(nil,"BACKGROUND")
self.ShadowRight:SetTexture("Interface/AddOns/WorldQuestsList/shadow")
self.ShadowRight:SetPoint("TOPLEFT",self,"TOPRIGHT",offsetX,offsetY-10)
self.ShadowRight:SetPoint("BOTTOMRIGHT",self,"BOTTOMRIGHT",offsetX+size,-offsetY+10)
self.ShadowRight:SetVertexColor(0,0,0,.45)
self.ShadowRight:SetTexCoord((128+22)/256,(128+0)/256,31/32,32/32)
self.ShadowRightTopInside = self:CreateTexture(nil,"BACKGROUND")
self.ShadowRightTopInside:SetTexture("Interface/AddOns/WorldQuestsList/shadow")
self.ShadowRightTopInside:SetPoint("TOPLEFT",self,"TOPRIGHT",offsetX,offsetY)
self.ShadowRightTopInside:SetPoint("BOTTOMRIGHT",self,"TOPRIGHT",offsetX+size,offsetY-10)
self.ShadowRightTopInside:SetVertexColor(0,0,0,.45)
self.ShadowRightTopInside:SetTexCoord((128+22)/256,(128+0)/256,22/32,32/32)
if isBold then
self.ShadowTop:SetTexCoord((192+31)/256,(192+32)/256,1,10/32)
self.ShadowTopLeftInside:SetTexCoord((192+22)/256,(192+32)/256,1,10/32)
self.ShadowTopLeft:SetTexCoord((192+0)/256,(192+22)/256,1,10/32)
self.ShadowTopRightInside:SetTexCoord((192+32)/256,(192+22)/256,1,10/32)
self.ShadowTopRight:SetTexCoord((192+22)/256,(192+0)/256,1,10/32)
self.ShadowLeftTopInside:SetTexCoord((192+0)/256,(192+22)/256,10/32,0)
self.ShadowLeft:SetTexCoord((192+0)/256,(192+22)/256,1/32,0)
self.ShadowLeftBottomInside:SetTexCoord((192+0)/256,(192+22)/256,0,10/32)
self.ShadowLeftBottom:SetTexCoord((192+0)/256,(192+22)/256,10/32,1)
self.ShadowBottomLeftInside:SetTexCoord((192+22)/256,(192+32)/256,10/32,1)
self.ShadowBottom:SetTexCoord((192+31)/256,(192+32)/256,10/32,1)
self.ShadowBottomRightInside:SetTexCoord((192+32)/256,(192+22)/256,10/32,1)
self.ShadowBottomRight:SetTexCoord((192+22)/256,(192+0)/256,10/32,1)
self.ShadowRightBottomInside:SetTexCoord((192+22)/256,(192+0)/256,0,10/32)
self.ShadowRight:SetTexCoord((192+22)/256,(192+0)/256,1/32,0)
self.ShadowRightTopInside:SetTexCoord((192+22)/256,(192+0)/256,10/32,0)
end
end
do
local function MakeSolidButton(self)
self.Button:ClearAllPoints()
self.Button:SetAllPoints()
self.Button.i:Hide()
self.l:Hide()
end
function ELib:DropDown(parent,text)
local self = CreateFrame("Frame", nil, parent)
self:SetHeight(22)
self.b = self:CreateTexture(nil,"BACKGROUND",nil,1)
self.b:SetAllPoints()
self.b:SetColorTexture(0.04,0.04,0.14,.97)
self.t = self:CreateFontString(nil,"ARTWORK","GameFontHighlightSmall")
self.t:SetPoint("LEFT",8,0)
self.t:SetText(text)
self.l = self:CreateTexture(nil,"BACKGROUND",nil,2)
self.l:SetColorTexture(.22,.22,.3,1)
self.l:SetPoint("TOPLEFT",self,"TOPRIGHT",-23,0)
self.l:SetPoint("BOTTOMRIGHT",self,"BOTTOMRIGHT",-22,0)
ELib.Templates:Border(self,.22,.22,.3,1,1)
self.shadow = ELib:Shadow2(self,16)
self.ShadowLeftBottom:Hide()
self.ShadowBottom:Hide()
self.ShadowBottomLeftInside:Hide()
self.ShadowBottomRightInside:Hide()
self.ShadowBottomRight:Hide()
self.Button = CreateFrame("Button", nil, self)
self.Button:SetSize(22,22)
self.Button:SetPoint("RIGHT")
self.Button.i = self.Button:CreateTexture(nil,"ARTWORK")
self.Button.i:SetTexture("Interface\\AddOns\\WorldQuestsList\\navButtons")
self.Button.i:SetPoint("CENTER")
self.Button.i:SetTexCoord(0,.25,0,1)
self.Button.i:SetSize(22,22)
self.Button.hl = self.Button:CreateTexture(nil, "BACKGROUND")
self.Button.hl:SetPoint("TOPLEFT", 0, 0)
self.Button.hl:SetPoint("BOTTOMRIGHT", 0, 0)
self.Button.hl:SetTexture("Interface\\Buttons\\WHITE8X8")
self.Button.hl:SetVertexColor(.7,.7,1,.25)
self.Button.hl:Hide()
self.Button:SetScript("OnEnter",function(self) self.hl:Show() end)
self.Button:SetScript("OnLeave",function(self) self.hl:Hide() end)
self:SetScript("OnHide",function (self) ELib.ScrollDropDown.AutoClose(self.Button) end)
self.Button:SetScript("OnClick",function(self) ELib.ScrollDropDown.ClickButton(self) end)
self.Button.isButton = true
self.MakeSolidButton = MakeSolidButton
return self
end
end
function ELib:CreateBorder(parent,sZ)
local top = parent["border_top"] or parent:CreateTexture(nil, "BORDER")
local bottom = parent["border_bottom"] or parent:CreateTexture(nil, "BORDER")
local left = parent["border_left"] or parent:CreateTexture(nil, "BORDER")
local right = parent["border_right"] or parent:CreateTexture(nil, "BORDER")
parent["border_top"] = top
parent["border_bottom"] = bottom
parent["border_left"] = left
parent["border_right"] = right
local size,outside = sZ or 1,-1
top:SetPoint("TOPLEFT",parent,"TOPLEFT",-size-outside,size+outside)
top:SetPoint("BOTTOMRIGHT",parent,"TOPRIGHT",size+outside,outside)
bottom:SetPoint("BOTTOMLEFT",parent,"BOTTOMLEFT",-size-outside,-size-outside)
bottom:SetPoint("TOPRIGHT",parent,"BOTTOMRIGHT",size+outside,-outside)
left:SetPoint("TOPLEFT",parent,"TOPLEFT",-size-outside,outside)
left:SetPoint("BOTTOMRIGHT",parent,"BOTTOMLEFT",-outside,-outside)
right:SetPoint("TOPLEFT",parent,"TOPRIGHT",outside,outside)
right:SetPoint("BOTTOMRIGHT",parent,"BOTTOMRIGHT",size+outside,-outside)
parent.SetBorderColor = function(self,colorR,colorG,colorB,colorA)
top:SetColorTexture(colorR,colorG,colorB,colorA)
bottom:SetColorTexture(colorR,colorG,colorB,colorA)
left:SetColorTexture(colorR,colorG,colorB,colorA)
right:SetColorTexture(colorR,colorG,colorB,colorA)
end
top:Show()
bottom:Show()
left:Show()
right:Show()
end
do
local Templates = ELib.Templates
function ELib:Template(name,parent)
if not Templates[name] then
return
end
local obj = Templates[name](nil,parent)
--obj:SetParent(parent or UIParent)
return obj
end
do
local function OnEnter(self, motion)
--UIDropDownMenu_StopCounting(self, motion)
end
local function OnLeave(self, motion)
--UIDropDownMenu_StartCounting(self, motion)
end
local function OnClick(self)
self:Hide()
end
local function OnShow(self)
self:SetFrameLevel(1000)
if self.OnShow then
self:OnShow()
end
end
local function OnHide(self)
--UIDropDownMenu_StopCounting(self)
end
local function OnUpdate(self, elapsed)
ELib.ScrollDropDown.Update(self, elapsed)
end
function Templates:ExRTDropDownListTemplate(parent)
local self = CreateFrame("Button",nil,parent)
self:SetFrameStrata("TOOLTIP")
self:EnableMouse(true)
self:Hide()
self.Backdrop = CreateFrame("Frame",nil,self,"BackdropTemplate")
self.Backdrop:SetAllPoints()
self.Backdrop:SetBackdrop({
bgFile="Interface\\DialogFrame\\UI-DialogBox-Background-Dark",
edgeFile="Interface\\DialogFrame\\UI-DialogBox-Border",
tile = true,
insets = {
left = 11,
right = 12,
top = 11,
bottom = 9,
},
tileSize = 32,
edgeSize = 32,
})
self:SetScript("OnEnter",OnEnter)
self:SetScript("OnLeave",OnLeave)
self:SetScript("OnClick",OnClick)
self:SetScript("OnShow",OnShow)
self:SetScript("OnHide",OnHide)
self:SetScript("OnUpdate",OnUpdate)
return self
end
function Templates:ExRTDropDownListModernTemplate(parent)
local self = CreateFrame("Button",nil,parent)
self:SetFrameStrata("TOOLTIP")
self:EnableMouse(true)
self:Hide()
Templates:Border(self,0,0,0,1,1)
self.Background = self:CreateTexture(nil,"BACKGROUND")
self.Background:SetColorTexture(0,0,0,.9)
self.Background:SetPoint("TOPLEFT")
self.Background:SetPoint("BOTTOMRIGHT")
self:SetScript("OnEnter",OnEnter)
self:SetScript("OnLeave",OnLeave)
self:SetScript("OnClick",OnClick)
self:SetScript("OnShow",OnShow)
self:SetScript("OnHide",OnHide)
self:SetScript("OnUpdate",OnUpdate)
return self
end
end
do
local function OnEnter(self)
self.Highlight:Show()
--UIDropDownMenu_StopCounting(self:GetParent())
if ( self.tooltipTitle ) then
if ( self.tooltipOnButton ) then
GameTooltip:SetOwner(self, "ANCHOR_RIGHT")
GameTooltip:AddLine(self.tooltipTitle, 1.0, 1.0, 1.0)
GameTooltip:AddLine(self.tooltipText)
GameTooltip:Show()
else
GameTooltip_AddNewbieTip(self, self.tooltipTitle, 1.0, 1.0, 1.0, self.tooltipText, true)
end
end
if ( self.NormalText:IsTruncated() ) then
GameTooltip:SetOwner(self, "ANCHOR_RIGHT")
GameTooltip:AddLine(self.NormalText:GetText())
GameTooltip:Show()
end
ELib.ScrollDropDown.OnButtonEnter(self)
end
local function OnLeave(self)
self.Highlight:Hide()
--UIDropDownMenu_StartCounting(self:GetParent())
GameTooltip:Hide()
ELib.ScrollDropDown.OnButtonLeave(self)
end
local function OnClick(self, button, down)
ELib.ScrollDropDown.OnClick(self, button, down)
end
local function OnLoad(self)
self:SetFrameLevel(self:GetParent():GetFrameLevel()+2)
end
local function OnSliderChanged(self,val)
self.text:SetFormattedText("%d%s",val,self:GetParent().sliderAfterText or "")
if self:GetParent().sliderFunc then
self:GetParent().sliderFunc(self,val)
end
end
local function OnSliderShow(self)
if self:GetParent().sliderShow then
self:GetParent().sliderShow(self)
end
end
local function SliderOnMouseWheel(self,delta)
self:SetValue(self:GetValue()+delta)
end
function Templates:ExRTDropDownMenuButtonTemplate(parent)
local self = CreateFrame("Button",nil,parent)
self:SetSize(100,16)
self.Highlight = self:CreateTexture(nil,"BACKGROUND")
self.Highlight:SetTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight")
self.Highlight:SetAllPoints()
self.Highlight:SetBlendMode("ADD")
self.Highlight:Hide()
self.Texture = self:CreateTexture(nil,"BACKGROUND",nil,-8)
self.Texture:Hide()
self.Texture:SetAllPoints()
self.Icon = self:CreateTexture(nil,"ARTWORK")
self.Icon:SetSize(16,16)
self.Icon:SetPoint("LEFT")
self.Icon:Hide()
self.Arrow = self:CreateTexture(nil,"ARTWORK")
self.Arrow:SetTexture("Interface\\ChatFrame\\ChatFrameExpandArrow")
self.Arrow:SetSize(16,16)
self.Arrow:SetPoint("RIGHT")
self.Arrow:Hide()
self.NormalText = self:CreateFontString()
self.NormalText:SetPoint("LEFT")
self:SetFontString(self.NormalText)
self:SetNormalFontObject("GameFontHighlightSmallLeft")
self:SetHighlightFontObject("GameFontHighlightSmallLeft")
self:SetDisabledFontObject("GameFontDisableSmallLeft")
self:SetPushedTextOffset(1,-1)
self.slider = CreateFrame("Slider", nil, self)
self.slider:Hide()
self.slider:SetPoint("TOPLEFT",2,-2)
self.slider:SetPoint("BOTTOMRIGHT",-2,2)
ELib.Templates:Border(self.slider,.22,.22,.3,1,1,2)
self.slider.thumb = self.slider:CreateTexture(nil, "ARTWORK")
self.slider.thumb:SetColorTexture(.32,.32,.4,1)
self.slider.thumb:SetSize(28,10)
self.slider:SetThumbTexture(self.slider.thumb)
self.slider:SetOrientation("HORIZONTAL")
self.slider:SetMinMaxValues(1,2)
self.slider:SetValue(1)
self.slider:SetValueStep(1)
self.slider:SetObeyStepOnDrag(true)
self.slider.text = self.slider:CreateFontString(nil,"OVERLAY","GameFontHighlightSmall")
self.slider.text:SetPoint("CENTER",0,0)
self:SetScript("OnEnter",OnEnter)
self:SetScript("OnLeave",OnLeave)
self:SetScript("OnClick",OnClick)
self:SetScript("OnLoad",OnLoad)
self.slider:SetScript("OnValueChanged",OnSliderChanged)
self.slider:SetScript("OnMouseWheel", SliderOnMouseWheel)
self.slider:SetScript("OnShow",OnSliderShow)
return self
end
end
function Templates:ExRTCheckButtonModernTemplate(parent)
local self = CreateFrame("CheckButton",nil,parent)
self:SetSize(20,20)
self.text = self:CreateFontString(nil,"ARTWORK","GameFontNormalSmall")
self.text:SetPoint("TOPLEFT",self,"TOPRIGHT",4,0)
self.text:SetPoint("BOTTOMLEFT",self,"BOTTOMRIGHT",4,0)
self.text:SetJustifyV("MIDDLE")
self:SetFontString(self.text)
Templates:Border(self,0.24,0.25,0.3,1,1)
self.Texture = self:CreateTexture(nil,"BACKGROUND")
self.Texture:SetColorTexture(0,0,0,.3)
self.Texture:SetPoint("TOPLEFT")
self.Texture:SetPoint("BOTTOMRIGHT")
self.CheckedTexture = self:CreateTexture()
self.CheckedTexture:SetTexture("Interface\\Buttons\\UI-CheckBox-Check")
self.CheckedTexture:SetPoint("TOPLEFT",-4,4)
self.CheckedTexture:SetPoint("BOTTOMRIGHT",4,-4)
self:SetCheckedTexture(self.CheckedTexture)
self.PushedTexture = self:CreateTexture()
self.PushedTexture:SetTexture("Interface\\Buttons\\UI-CheckBox-Check")
self.PushedTexture:SetPoint("TOPLEFT",-4,4)
self.PushedTexture:SetPoint("BOTTOMRIGHT",4,-4)
self.PushedTexture:SetVertexColor(0.8,0.8,0.8,0.5)
self.PushedTexture:SetDesaturated(true)
self:SetPushedTexture(self.PushedTexture)
self.DisabledTexture = self:CreateTexture()
self.DisabledTexture:SetTexture("Interface\\Buttons\\UI-CheckBox-Check-Disabled")
self.DisabledTexture:SetPoint("TOPLEFT",-4,4)
self.DisabledTexture:SetPoint("BOTTOMRIGHT",4,-4)
self:SetDisabledTexture(self.DisabledTexture)
self.HighlightTexture = self:CreateTexture()
self.HighlightTexture:SetColorTexture(1,1,1,.3)
self.HighlightTexture:SetPoint("TOPLEFT")
self.HighlightTexture:SetPoint("BOTTOMRIGHT")
self:SetHighlightTexture(self.HighlightTexture)
return self
end
function Templates:ExRTRadioButtonModernTemplate(parent)
local self = CreateFrame("CheckButton",nil,parent)
self:SetSize(16,16)
self.text = self:CreateFontString(nil,"BACKGROUND","GameFontNormalSmall")
self.text:SetPoint("LEFT",self,"RIGHT",5,0)
self:SetFontString(self.text)
self.NormalTexture = self:CreateTexture()
self.NormalTexture:SetTexture("Interface\\Addons\\WorldQuestsList\\radioModern")
self.NormalTexture:SetAllPoints()
self.NormalTexture:SetTexCoord(0,0.25,0,1)
self:SetNormalTexture(self.NormalTexture)
self.HighlightTexture = self:CreateTexture()
self.HighlightTexture:SetTexture("Interface\\Addons\\WorldQuestsList\\radioModern")
self.HighlightTexture:SetAllPoints()
self.HighlightTexture:SetTexCoord(0.5,0.75,0,1)
self:SetHighlightTexture(self.HighlightTexture)
self.CheckedTexture = self:CreateTexture()
self.CheckedTexture:SetTexture("Interface\\Addons\\WorldQuestsList\\radioModern")
self.CheckedTexture:SetAllPoints()
self.CheckedTexture:SetTexCoord(0.25,0.5,0,1)
self:SetCheckedTexture(self.CheckedTexture)
return self
end
ELib.ScrollDropDown = {}
ELib.ScrollDropDown.List = {}
local ScrollDropDown_Modern = {}
for i=1,3 do
ScrollDropDown_Modern[i] = ELib:Template("ExRTDropDownListModernTemplate",UIParent)
_G["WQL_ExRTDropDownListModern"..i] = ScrollDropDown_Modern[i]
ScrollDropDown_Modern[i]:SetClampedToScreen(true)
ScrollDropDown_Modern[i].border = ELib:Shadow(ScrollDropDown_Modern[i],20)
ScrollDropDown_Modern[i].Buttons = {}
ScrollDropDown_Modern[i].MaxLines = 0
ScrollDropDown_Modern[i].isModern = true
ScrollDropDown_Modern[i].Level = i
do
ScrollDropDown_Modern[i].Animation = CreateFrame("Frame",nil,ScrollDropDown_Modern[i])
ScrollDropDown_Modern[i].Animation:SetSize(1,1)
ScrollDropDown_Modern[i].Animation:SetPoint("CENTER")
ScrollDropDown_Modern[i].Animation.P = 0
ScrollDropDown_Modern[i].Animation.parent = ScrollDropDown_Modern[i]
ScrollDropDown_Modern[i].Animation:SetScript("OnUpdate",function(self,elapsed)
self.P = self.P + elapsed
local P = self.P
if P > 2.5 then
P = P % 2.5
self.P = P
end
local color = P <= 1 and P / 2 or P <= 1.5 and 0.5 or (2.5 - P)/2
local parent = self.parent
parent.BorderTop:SetColorTexture(color,color,color,1)
parent.BorderLeft:SetColorTexture(color,color,color,1)
parent.BorderBottom:SetColorTexture(color,color,color,1)
parent.BorderRight:SetColorTexture(color,color,color,1)
end)
end
end
ELib.ScrollDropDown.DropDownList = ScrollDropDown_Modern
do
local function CheckButtonClick(self)
local parent = self:GetParent()
self:GetParent():GetParent().List[parent.id].checkState = self:GetChecked()
if parent.checkFunc then
parent.checkFunc(parent,self:GetChecked())
end
end
local function CheckButtonOnEnter(self)
--UIDropDownMenu_StopCounting(self:GetParent():GetParent())
end
local function CheckButtonOnLeave(self)
--UIDropDownMenu_StartCounting(self:GetParent():GetParent())
end
function ELib.ScrollDropDown.CreateButton(i,level)
level = level or 1
local dropDown = ELib.ScrollDropDown.DropDownList[level]
local button = dropDown.Buttons[i]
if button then
return
end
button = ELib:Template("ExRTDropDownMenuButtonTemplate",dropDown)
dropDown.Buttons[i] = button
button:SetPoint("TOPLEFT",8,-8 - (i-1) * 16)
button.NormalText:SetMaxLines(1)
button.checkButton = ELib:Template("ExRTCheckButtonModernTemplate",button)
button.checkButton:SetPoint("LEFT",1,0)
button.checkButton:SetSize(12,12)
button.radioButton = ELib:Template("ExRTRadioButtonModernTemplate",button)
button.radioButton:SetPoint("LEFT",1,0)
button.radioButton:SetSize(12,12)
button.radioButton:EnableMouse(false)
button.checkButton:SetScript("OnClick",CheckButtonClick)
button.checkButton:SetScript("OnEnter",CheckButtonOnEnter)
button.checkButton:SetScript("OnLeave",CheckButtonOnLeave)
button.checkButton:Hide()
button.radioButton:Hide()
button.Level = level
end
end
local function ScrollDropDown_DefaultCheckFunc(self)
self:Click()
end
function ELib.ScrollDropDown.ClickButton(self)
if ELib.ScrollDropDown.DropDownList[1]:IsShown() then
ELib:DropDownClose()
return
end
local dropDown = nil
if self.isButton then
dropDown = self
else
dropDown = self:GetParent()
end
ELib.ScrollDropDown.DropDownList[1]:SetFrameStrata("TOOLTIP")
ELib.ScrollDropDown.DropDownList[2]:SetFrameStrata("TOOLTIP")
ELib.ScrollDropDown.DropDownList[3]:SetFrameStrata("TOOLTIP")
ELib.ScrollDropDown.DropDownList[3]:SetToplevel(true)
ELib.ScrollDropDown.ToggleDropDownMenu(dropDown)
PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON)
end
function ELib.ScrollDropDown:Reload(level)
for j=1,#ELib.ScrollDropDown.DropDownList do
if ELib.ScrollDropDown.DropDownList[j]:IsShown() or level == j then
local val = ELib.ScrollDropDown.DropDownList[j].Position
local count = #ELib.ScrollDropDown.DropDownList[j].List
local now = 0
for i=val,count do
local data = ELib.ScrollDropDown.DropDownList[j].List[i]
if not data.isHidden and (not data.shownFunc or data.shownFunc(data)) then
now = now + 1
local button = ELib.ScrollDropDown.DropDownList[j].Buttons[now]
local text = button.NormalText
local icon = button.Icon
local paddingLeft = data.padding or 0
if data.icon then
icon:SetTexture(data.icon)
paddingLeft = paddingLeft + 18
icon:Show()
else
icon:Hide()
end
button:SetNormalFontObject(GameFontHighlightSmallLeft)
button:SetHighlightFontObject(GameFontHighlightSmallLeft)
if data.colorCode then
text:SetText( data.colorCode .. (data.text or "") .. "|r" )
else
text:SetText( data.text or "" )
end
text:ClearAllPoints()
if data.checkable or data.radio then
text:SetPoint("LEFT", paddingLeft + 16, 0)
else
text:SetPoint("LEFT", paddingLeft, 0)
end
text:SetPoint("RIGHT", button, "RIGHT", 0, 0)
text:SetJustifyH(data.justifyH or "LEFT")
if data.checkable then
button.checkButton:SetChecked(data.checkState)
button.checkButton:Show()
else
button.checkButton:Hide()
end
if data.radio then
button.radioButton:SetChecked(data.checkState)
button.radioButton:Show()
else
button.radioButton:Hide()
end
local texture = button.Texture
if data.texture then
texture:SetTexture(data.texture)
texture:Show()
else
texture:Hide()
end
if data.subMenu then
button.Arrow:Show()
else
button.Arrow:Hide()
end
if data.isTitle then
button:SetEnabled(false)
else
button:SetEnabled(true)
end
text:SetWordWrap(false)
if data.slider then -- {func = onChangedFunc, val = currVal, min = currMin, max = currMax}
button.slider:SetMinMaxValues(data.slider.min,data.slider.max)
button.sliderAfterText = data.slider.afterText
button.sliderFunc = nil
button.slider:SetValue(data.slider.val)
button.sliderFunc = data.slider.func
button.sliderShow = data.slider.show
button.slider:Show()
else
button.sliderFunc = nil
button.slider:Hide()
end
button.id = i
button.arg1 = data.arg1
button.arg2 = data.arg2
button.arg3 = data.arg3
button.arg4 = data.arg4
button.func = data.func
button.hoverFunc = data.hoverFunc
button.leaveFunc = data.leaveFunc
button.hoverArg = data.hoverArg
button.checkFunc = data.checkFunc
if not data.checkFunc then
button.checkFunc = ScrollDropDown_DefaultCheckFunc
end
button.subMenu = data.subMenu
button.Lines = data.Lines --Max lines for second level
button.data = data
button:Show()
if now >= ELib.ScrollDropDown.DropDownList[j].LinesNow then
break
end
end
end
for i=(now+1),ELib.ScrollDropDown.DropDownList[j].MaxLines do
ELib.ScrollDropDown.DropDownList[j].Buttons[i]:Hide()
end
if now < ELib.ScrollDropDown.DropDownList[j].MaxLines then
ELib.ScrollDropDown.DropDownList[j]:SetHeight(16 + 16*now)
end
end
end
end
function ELib.ScrollDropDown.UpdateChecks()
local parent = ELib.ScrollDropDown.DropDownList[1].parent
if parent.additionalToggle then
parent.additionalToggle(parent)
end
for j=1,#ELib.ScrollDropDown.DropDownList do
for i=1,#ELib.ScrollDropDown.DropDownList[j].Buttons do
local button = ELib.ScrollDropDown.DropDownList[j].Buttons[i]
if button:IsShown() and button.data then
button.checkButton:SetChecked(button.data.checkState)
end
end
end
end
function ELib.ScrollDropDown.Update(self, elapsed)
if ( not self.showTimer or not self.isCounting ) then
return
elseif ( self.showTimer < 0 ) then
self:Hide()
self.showTimer = nil
self.isCounting = nil
else
self.showTimer = self.showTimer - elapsed
end
end
function ELib.ScrollDropDown.OnClick(self, button, down)
local func = self.func
if func then
func(self, self.arg1, self.arg2, self.arg3, self.arg4)
end
local parent = ELib.ScrollDropDown.DropDownList[1].parent
if parent.additionalClick then
parent.additionalClick(self, button)
end
end
function ELib.ScrollDropDown.OnButtonEnter(self)
local func = self.hoverFunc
if func then
func(self,self.hoverArg)
end
ELib.ScrollDropDown:CloseSecondLevel(self.Level)
if self.subMenu then
ELib.ScrollDropDown.ToggleDropDownMenu(self,self.Level+1)
end
end
function ELib.ScrollDropDown.OnButtonLeave(self)
local func = self.leaveFunc
if func then
func(self)
end
end
function ELib.ScrollDropDown.ToggleDropDownMenu(self,level)
level = level or 1
if self.ToggleUpadte then
self:ToggleUpadte()
end
if level == 1 then
ELib.ScrollDropDown.DropDownList = ScrollDropDown_Modern
end
for i=level+1,#ELib.ScrollDropDown.DropDownList do
ELib.ScrollDropDown.DropDownList[i]:Hide()
end
local dropDown = ELib.ScrollDropDown.DropDownList[level]
local dropDownWidth = self.Width
if level > 1 then
local parent = ELib.ScrollDropDown.DropDownList[1].parent
dropDownWidth = parent.Width
end
dropDown.List = self.subMenu or self.List
local count = #dropDown.List
local maxLinesNow = self.Lines or count
for i=(dropDown.MaxLines+1),maxLinesNow do
ELib.ScrollDropDown.CreateButton(i,level)
end
dropDown.MaxLines = max(dropDown.MaxLines,maxLinesNow)
for i=1,maxLinesNow do
dropDown.Buttons[i]:SetSize(dropDownWidth - 16,16)
end
dropDown.Position = 1
dropDown.LinesNow = maxLinesNow
if self.additionalToggle then
self.additionalToggle(self)
end
dropDown:SetPoint("TOPRIGHT",self,"BOTTOMRIGHT",-16,0)
dropDown:SetSize(dropDownWidth,16 + 16 * maxLinesNow)
dropDown:ClearAllPoints()
if level > 1 then
if GetScreenWidth() - self:GetRight() < dropDownWidth then
dropDown:SetPoint("TOPRIGHT",self,"TOPLEFT",-10,8)
else
dropDown:SetPoint("TOPLEFT",self,"TOPRIGHT",12,8)
end
else
local toggleX = self.toggleX or -16
local toggleY = self.toggleY or 0
dropDown:SetPoint("TOPRIGHT",self,"BOTTOMRIGHT",toggleX,toggleY)
end
dropDown.parent = self
dropDown:Show()
dropDown:SetFrameLevel(0)
ELib.ScrollDropDown:Reload()
end
function ELib.ScrollDropDown.CreateInfo(self,info)
if info then
self.List[#self.List + 1] = info
end
self.List[#self.List + 1] = {}
return self.List[#self.List]
end
function ELib.ScrollDropDown.ClearData(self)
table.wipe(self.List)
return self.List
end
function ELib.ScrollDropDown.AutoClose(self)
if self and ELib.ScrollDropDown.DropDownList[1]:IsVisible() and ELib.ScrollDropDown.DropDownList[1].parent == self then
ELib.ScrollDropDown.Close()
end
end
function ELib.ScrollDropDown.Close()
ELib.ScrollDropDown.DropDownList[1]:Hide()
ELib.ScrollDropDown:CloseSecondLevel()
end
function ELib.ScrollDropDown:CloseSecondLevel(level)
level = level or 1
for i=(level+1),#ELib.ScrollDropDown.DropDownList do
ELib.ScrollDropDown.DropDownList[i]:Hide()
end
end
ELib.DropDownClose = ELib.ScrollDropDown.Close
---> End Scroll Drop Down
function Templates:ExRTButtonTransparentTemplate(parent)
local self = CreateFrame("Button",nil,parent)
self:SetSize(40,18)
self.HighlightTexture = self:CreateTexture()
self.HighlightTexture:SetColorTexture(1,1,1,.3)
self.HighlightTexture:SetPoint("TOPLEFT")
self.HighlightTexture:SetPoint("BOTTOMRIGHT")
self:SetHighlightTexture(self.HighlightTexture)
self.PushedTexture = self:CreateTexture()
self.PushedTexture:SetColorTexture(.9,.8,.1,.3)
self.PushedTexture:SetPoint("TOPLEFT")
self.PushedTexture:SetPoint("BOTTOMRIGHT")
self:SetPushedTexture(self.PushedTexture)
self:SetNormalFontObject("GameFontNormal")
self:SetHighlightFontObject("GameFontHighlight")
self:SetDisabledFontObject("GameFontDisable")
return self
end
function Templates:ExRTButtonModernTemplate(parent)
local self = Templates:ExRTButtonTransparentTemplate(parent)
Templates:Border(self,0,0,0,1,1)
self.Texture = self:CreateTexture(nil,"BACKGROUND")
self.Texture:SetColorTexture(1,1,1,1)
self.Texture:SetGradient("VERTICAL",CreateColor(0.05,0.06,0.09,1), CreateColor(0.20,0.21,0.25,1))
self.Texture:SetPoint("TOPLEFT")
self.Texture:SetPoint("BOTTOMRIGHT")
self.DisabledTexture = self:CreateTexture()
self.DisabledTexture:SetColorTexture(0.20,0.21,0.25,0.5)
self.DisabledTexture:SetPoint("TOPLEFT")
self.DisabledTexture:SetPoint("BOTTOMRIGHT")
self:SetDisabledTexture(self.DisabledTexture)
return self
end
function ELib:Button(parent,text)
local self = ELib:Template("ExRTButtonModernTemplate",parent)
self:SetText(text)
return self
end
5 years ago
end