Files
Andrew6810 f3e579cb57 init
2022-11-05 21:19:42 -07:00

258 lines
6.3 KiB
Lua

-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster --
-- http://www.curse.com/addons/wow/tradeskill-master --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
-- Much of this code is copied from .../AceGUI-3.0/widgets/AceGUIWidget-Dropdown-Items.lua
-- This Dropdown-Items widget is modified to fit TSM's theme / needs
local TSM = select(2, ...)
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
-- Lua APIs
local select, assert = select, assert
-- WoW APIs
local PlaySound = PlaySound
local CreateFrame = CreateFrame
local ItemBase = {}
do
--[[-----------------------------------------------------------------------------
Support functions
-------------------------------------------------------------------------------]]
local function fixlevels(parent,...)
local i = 1
local child = select(i, ...)
while child do
child:SetFrameLevel(parent:GetFrameLevel()+1)
fixlevels(child, child:GetChildren())
i = i + 1
child = select(i, ...)
end
end
--[[-----------------------------------------------------------------------------
Scripts
-------------------------------------------------------------------------------]]
local function Frame_OnEnter(this)
local self = this.obj
if self.useHighlight then
self.highlight:Show()
end
self:Fire("OnEnter")
if self.specialOnEnter then
self.specialOnEnter(self)
end
end
local function Frame_OnLeave(this)
local self = this.obj
self.highlight:Hide()
self:Fire("OnLeave")
if self.specialOnLeave then
self.specialOnLeave(self)
end
end
--[[-----------------------------------------------------------------------------
Methods
-------------------------------------------------------------------------------]]
local methods = {
["OnAcquire"] = function(self)
self:SetDisabled()
self.frame:SetToplevel(true)
self.frame:SetFrameStrata("FULLSCREEN_DIALOG")
end,
["OnRelease"] = function(self)
self:SetDisabled()
self.pullout = nil
self.frame:SetParent(nil)
self.frame:ClearAllPoints()
self.frame:Hide()
end,
["SetPullout"] = function(self, pullout)
self.pullout = pullout
self.frame:SetParent(nil)
self.frame:SetParent(pullout.itemFrame)
self.parent = pullout.itemFrame
fixlevels(pullout.itemFrame, pullout.itemFrame:GetChildren())
end,
["SetText"] = function(self, text)
self.text:SetText(text or "")
end,
["GetText"] = function(self)
return self.text:GetText()
end,
["SetPoint"] = function(self, ...)
self.frame:SetPoint(...)
end,
["Show"] = function(self)
self.frame:Show()
end,
["Hide"] = function(self)
self.frame:Hide()
end,
["SetDisabled"] = function(self, disabled)
self.disabled = disabled
TSMAPI.Design:SetWidgetTextColor(self.text, disabled)
self.useHighlight = not disabled
end,
["SetOnLeave"] = function(self, func)
self.specialOnLeave = func
end,
["SetOnEnter"] = function(self, func)
self.specialOnEnter = func
end,
}
function ItemBase.Create(type)
local count = AceGUI:GetNextWidgetNum(type)
local frame = CreateFrame("Button", "TSMDropDownItem"..count)
frame:SetHeight(17)
frame:SetFrameStrata("FULLSCREEN_DIALOG")
local text = frame:CreateFontString(nil,"OVERLAY")
text:SetFont(TSMAPI.Design:GetContentFont("normal"))
text:SetJustifyH("LEFT")
text:SetPoint("TOPLEFT",frame,"TOPLEFT",18,0)
text:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",-8,0)
local highlight = frame:CreateTexture(nil, "OVERLAY")
highlight:SetTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight")
highlight:SetBlendMode("ADD")
highlight:SetHeight(14)
highlight:ClearAllPoints()
highlight:SetPoint("RIGHT",frame,"RIGHT",-3,0)
highlight:SetPoint("LEFT",frame,"LEFT",5,0)
highlight:Hide()
local check = frame:CreateTexture("OVERLAY")
check:SetWidth(16)
check:SetHeight(16)
check:SetPoint("LEFT",frame,"LEFT",3,-1)
check:SetTexture("Interface\\Buttons\\UI-CheckBox-Check")
check:Hide()
local sub = frame:CreateTexture("OVERLAY")
sub:SetWidth(16)
sub:SetHeight(16)
sub:SetPoint("RIGHT",frame,"RIGHT",-3,-1)
sub:SetTexture("Interface\\ChatFrame\\ChatFrameExpandArrow")
sub:Hide()
frame:SetScript("OnEnter", Frame_OnEnter)
frame:SetScript("OnLeave", Frame_OnLeave)
local widget = {
frame = frame,
text = text,
highlight = highlight,
check = check,
sub = sub,
useHighlight = true,
origMethods = methods,
type = type,
}
for method, func in pairs(methods) do
widget[method] = func
end
frame.obj = widget
return widget
end
end
do
local Type, Version = "TSMDropdown-Item-Execute", 2
local function Frame_OnClick(this)
local self = this.obj
if self.disabled then return end
self:Fire("OnClick")
if self.pullout then
self.pullout:Close()
end
end
local function Constructor()
local item = ItemBase.Create(Type)
item.frame:SetScript("OnClick", Frame_OnClick)
return AceGUI:RegisterAsWidget(item)
end
AceGUI:RegisterWidgetType(Type, Constructor, Version)
end
do
local Type, Version = "TSMDropdown-Item-Toggle", 2
local function Frame_OnClick(this, button)
local self = this.obj
if self.disabled then return end
self.value = not self.value
if self.value then
PlaySound("igMainMenuOptionCheckBoxOn")
else
PlaySound("igMainMenuOptionCheckBoxOff")
end
self:UpdateToggle()
self:Fire("OnValueChanged", self.value)
end
local methods = {
["UpdateToggle"] = function(self)
if self.value then
self.check:Show()
else
self.check:Hide()
end
end,
["SetValue"] = function(self, value)
self.value = value
self:UpdateToggle()
end,
["GetValue"] = function(self)
return self.value
end,
}
local function Constructor()
local item = ItemBase.Create(Type)
item.frame:SetScript("OnClick", Frame_OnClick)
for method, func in pairs(methods) do
item[method] = func
end
return AceGUI:RegisterAsWidget(item)
end
AceGUI:RegisterWidgetType(Type, Constructor, Version)
end