Skip to content
Fetching contributors…
Cannot retrieve contributors at this time
250 lines (206 sloc) 6.15 KB
local Broker_Equipment = CreateFrame('Frame')
Broker_Equipment:RegisterEvent('PLAYER_LOGIN')
Broker_Equipment:SetScript('OnEvent', function(self, event, ...) self[event](self, ...) end)
Broker_Equipment:Hide()
local BACKDROP = {
bgFile = [[Interface\Tooltips\UI-Tooltip-Background]],
edgeFile = [[Interface\Tooltips\UI-Tooltip-Border]], edgeSize = 16,
insets = {top = 3, bottom = 3, left = 3, right = 3}
}
local LDB = LibStub('LibDataBroker-1.1'):NewDataObject('Broker_Equipment', {
type = 'data source',
})
local Menu, pending
local function UpdateDisplay()
if(InCombatLockdown() and pending) then
LDB.text = '|cffffff00' .. pending
LDB.icon = [[Interface\Icons\]] .. GetEquipmentSetInfoByName(pending)
else
for index = 1, GetNumEquipmentSets() do
local name, icon, _, equipped = GetEquipmentSetInfo(index)
if(equipped) then
LDB.text = name
LDB.icon = icon
return
end
end
LDB.text = UNKNOWN
LDB.icon = [[Interface\Icons\INV_Misc_QuestionMark]]
end
end
local function OnItemClick(self)
if(IsShiftKeyDown() and not pending) then
local dialog = StaticPopup_Show('CONFIRM_SAVE_EQUIPMENT_SET', self.name)
dialog.data = self.name
elseif(IsControlKeyDown() and not pending) then
local dialog = StaticPopup_Show('CONFIRM_DELETE_EQUIPMENT_SET', self.name)
dialog.data = self.name
else
if(InCombatLockdown()) then
Broker_Equipment:RegisterEvent('PLAYER_REGEN_ENABLED')
pending = self.name
UpdateDisplay()
else
EquipmentManager_EquipSet(pending or self.name)
end
end
Menu:Hide()
end
local function OnEnter()
Menu.Fader:Stop()
end
local function OnLeave()
Menu.Fader:Play()
end
local function OnItemEnter(self)
if(Broker_EquipmentDB.showTooltipMenu) then
GameTooltip:SetOwner(self, 'ANCHOR_RIGHT')
GameTooltip:SetEquipmentSet(self.name)
end
OnEnter()
end
local function UpdateMenu(parent)
local maxWidth = 0
local numEquipmentSets = GetNumEquipmentSets()
for index = 1, numEquipmentSets do
local Item = Menu.items[index]
if(not Item) then
Item = CreateFrame('Button', nil, Menu)
Item:SetPoint('TOPLEFT', 11, -((index - 1) * 18) - UIDROPDOWNMENU_BORDER_HEIGHT)
Item:SetHighlightTexture([[Interface\QuestFrame\UI-QuestTitleHighlight]])
Item:GetHighlightTexture():SetBlendMode('ADD')
Item:SetScript('OnClick', OnItemClick)
Item:SetScript('OnEnter', OnItemEnter)
Item:SetScript('OnLeave', GameTooltip_Hide)
Item:HookScript('OnLeave', OnLeave)
local Button = CreateFrame('CheckButton', nil, Item)
Button:SetPoint('LEFT')
Button:SetSize(16, 16)
Button:SetNormalTexture([[Interface\Common\UI-DropDownRadioChecks]])
Button:GetNormalTexture():SetTexCoord(0.5, 1, 0.5, 1)
Button:SetCheckedTexture([[Interface\Common\UI-DropDownRadioChecks]])
Button:GetCheckedTexture():SetTexCoord(0, 0.5, 0.5, 1)
Button:EnableMouse(false)
Item.Button = Button
local Label = Item:CreateFontString(nil, nil, 'GameFontHighlightSmall')
Label:SetPoint('LEFT', 20, 0)
Item:SetFontString(Label)
Item.Label = Label
local Icon = Item:CreateTexture(nil, 'ARTWORK')
Icon:SetPoint('RIGHT')
Icon:SetSize(16, 16)
Item.Icon = Icon
Menu.items[index] = Item
else
Item:Show()
end
local name, icon, _, equipped, _, _, _, missing = GetEquipmentSetInfo(index)
Item.Button:SetChecked(equipped)
Item.Icon:SetTexture(icon)
Item.name = name
if(pending == name) then
Item:SetFormattedText('|cffffff00%s|r', name)
elseif(missing > 0) then
Item:SetFormattedText('|cffff0000%s|r', name)
else
Item:SetText(name)
end
local width = Item.Label:GetWidth() + 50
if(width > maxWidth) then
maxWidth = width
end
end
for index = numEquipmentSets + 1, #Menu.items do
Menu.items[index]:Hide()
end
for _, Item in next, Menu.items do
Item:SetSize(maxWidth, 18)
end
Menu:SetSize(maxWidth + 25, (numEquipmentSets * 18) + (UIDROPDOWNMENU_BORDER_HEIGHT * 2))
end
function LDB:OnTooltipShow()
if(Broker_EquipmentDB.showTooltipDisplay) then
self:SetEquipmentSet(LDB.text)
end
end
local hooked = {}
function LDB:OnClick(button)
if(GameTooltip:GetOwner() == self) then
GameTooltip:Hide()
end
if(button ~= 'RightButton' and GetNumEquipmentSets() > 0) then
if(not Menu) then
Menu = CreateFrame('Frame', nil, UIParent)
Menu:SetBackdrop(BACKDROP)
Menu:SetBackdropColor(0, 0, 0)
Menu:SetFrameStrata('DIALOG')
Menu:SetScript('OnEnter', OnEnter)
Menu:SetScript('OnLeave', OnLeave)
Menu:Hide()
Menu.items = {}
local Fader = Menu:CreateAnimationGroup()
Fader:CreateAnimation():SetDuration(UIDROPDOWNMENU_SHOW_TIME)
Fader:SetScript('OnFinished', function()
Menu:Hide()
end)
Menu.Fader = Fader
end
if(Menu:IsShown()) then
Menu:Hide()
else
UpdateMenu(self)
Menu:ClearAllPoints()
Menu:SetPoint('TOP', self, 'BOTTOM') -- temporary anchor
local sideAnchor = ''
if(Menu:GetRight() > GetScreenWidth()) then
sideAnchor = 'RIGHT'
elseif(Menu:GetLeft() <= 0) then
sideAnchor = 'LEFT'
end
Menu:ClearAllPoints()
if(Menu:GetBottom() <= 0) then
Menu:SetPoint('BOTTOM' .. sideAnchor, self, 'TOP' .. sideAnchor)
else
Menu:SetPoint('TOP' .. sideAnchor, self, 'BOTTOM' .. sideAnchor)
end
Menu:Show()
end
PlaySound('igMainMenuOptionCheckBoxOn')
if(not hooked[self]) then
self:HookScript('OnEnter', OnEnter)
self:HookScript('OnLeave', OnLeave)
hooked[self] = true
end
else
if(not PaperDollFrame:IsVisible()) then
ToggleCharacter('PaperDollFrame')
end
if(not CharacterFrame.Expanded) then
SetCVar('characterFrameCollapsed', '0')
CharacterFrame_Expand()
end
if(not _G[PAPERDOLL_SIDEBARS[3].frame]:IsShown()) then
Broker_Equipment:Show()
end
end
end
function Broker_Equipment:PLAYER_LOGIN()
self:RegisterEvent('UNIT_INVENTORY_CHANGED')
self:RegisterEvent('EQUIPMENT_SETS_CHANGED')
self.EQUIPMENT_SETS_CHANGED = UpdateDisplay
UpdateDisplay()
end
function Broker_Equipment:UNIT_INVENTORY_CHANGED(unit)
if(unit == 'player') then
UpdateDisplay()
end
end
function Broker_Equipment:PLAYER_REGEN_ENABLED()
self:UnregisterEvent('PLAYER_REGEN_ENABLED')
OnItemClick()
pending = nil
end
Broker_Equipment:SetScript('OnUpdate', function(self)
PaperDollFrame_SetSidebar(nil, 3)
self:Hide()
end)
Jump to Line
Something went wrong with that request. Please try again.