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.

1673 lines
72 KiB

local _, S = ...
local pairs, ipairs, string, type, time = pairs, ipairs, string, type, time
local IsUsableSpell = IsUsableSpell
if C_Spell then
if C_Spell.IsSpellUsable then
IsUsableSpell = C_Spell.IsSpellUsable
end
end
local GetItemInfoInstant, GetItemInfo, GetItemClassInfo, GetItemSubClassInfo, GetDetailedItemLevelInfo, IsEquippableItem = GetItemInfoInstant, GetItemInfo, GetItemClassInfo, GetItemSubClassInfo, GetDetailedItemLevelInfo, IsEquippableItem
if C_Item then
GetItemInfoInstant, GetItemInfo, GetItemClassInfo, GetItemSubClassInfo, GetDetailedItemLevelInfo, IsEquippableItem = C_Item.GetItemInfoInstant, C_Item.GetItemInfo, C_Item.GetItemClassInfo, C_Item.GetItemSubClassInfo, C_Item.GetDetailedItemLevelInfo, C_Item.IsEquippableItem
end
S.itemLists = {}
local MIN_HEIGHT = 400
-- Create the primary frame, and give it a global name to allow its position and size to be saved between sessions
local f = CreateFrame("FRAME", "SortedPrimaryFrame", UIParent)
table.insert(UISpecialFrames, "SortedPrimaryFrame")
S.primaryFrame = f
f:SetPoint("BOTTOMRIGHT", -64, 128)
f:SetSize(800, 600)
f:SetClampedToScreen(true)
f:EnableMouse()
f:SetResizable(true)
f:SetMovable(true)
f:SetDontSavePosition(true)
function f:SavePosition()
local points = {}
for i = 1, f:GetNumPoints() do
local point, relativeTo, relativePoint, offsetX, offsetY = f:GetPoint(i)
points[i] = {point, relativeTo, relativePoint, offsetX, offsetY}
end
S.Settings.Set("windowPosition", {points, {f:GetWidth(), f:GetHeight()}})
end
function f:RestorePosition()
self:ClearAllPoints()
local position = S.Settings.Get("windowPosition")
if position and position[1] and #position[1] > 0 then
for k, point in pairs(position[1]) do
self:SetPoint(point[1], point[2], point[3], point[4], point[5])
end
local width, height = position[2][1], position[2][2]
local minWidth, minHeight = self:GetResizeBounds()
if width < 0 then width = 800 elseif width < minWidth then width = minWidth end
if height < 0 then height = 600 elseif height < minHeight then height = minHeight end
self:SetSize(width, height)
else
self:SetPoint("BOTTOMRIGHT", -64, 128)
self:SetSize(800, 600)
end
end
S.Utils.RunOnEvent(f, "SettingChanged-windowPosition", f.RestorePosition)
S.Utils.RunOnEvent(f, "ProfileChanged", f.RestorePosition)
f:SetFrameStrata("HIGH")
f:SetFrameLevel(572)
S.FrameTools.AddMetalBorder(f)
S.FrameTools.AddOuterShadow(f, 100)
S.FrameTools.AddSortedBackdrop(f)
f:Hide()
f:SetScript("OnMouseDown", function(self) end) -- Prevent click-through
function f:UpdateMinSize()
local minWidth = S.primaryItemList:GetMinWidth()
if self.SetMinResize then
self:SetMinResize(minWidth, MIN_HEIGHT)
elseif self.SetResizeBounds then
self:SetResizeBounds(minWidth, MIN_HEIGHT)
end
if self:GetWidth() < minWidth then
self:SetWidth(minWidth)
end
end
S.Utils.RunOnEvent(f, "EnteredWorld", f.UpdateMinSize)
S.Utils.RunOnEvent(f, "EnteredWorld", f.RestorePosition)
S.Utils.RunOnEvent(f, "MinSizeChanged", f.UpdateMinSize)
f:SetScript("OnSizeChanged", function(self)
S.Utils.TriggerEvent("Resizing")
end)
S.Utils.RunOnEvent(f, "SettingChanged-scale", function(self, event, value)
self:SetScale(value)
end)
f.closeButton = S.FrameTools.CreateCloseButton(f)
f.closeButton:SetFrameLevel(600)
--[[function f:SetMinimised(minimised)
if minimised then
self.minimised = true
self.searchBox:SetText("")
self.searchBox:Hide()
self.categoriesFrame:Hide()
self.head:SetPoint("BOTTOM", self, "TOP", 0, -24)
f.main:SetPoint("BOTTOMRIGHT")
self.foot:Hide()
--self.main:SetPoint("BOTTOMRIGHT")
self.minimiseButton:GetNormalTexture():SetTexCoord(0, 0.1484375, 0, 0.3125)
self.minimiseButton:GetHighlightTexture():SetTexCoord(0.59375, 0.7421875, 0, 0.3125)
self.minimiseButton:GetPushedTexture():SetTexCoord(0, 0.1484375, 0.625, 0.9375)
S.primaryItemList.scrollBar:SetPoint("BOTTOM", 0, 18 + 20)
else
self.minimised = false
self.searchBox:Show()
self.categoriesFrame:Show()
if S.Skinning.GetSkin() == S.Skinning.CLEAN then
self.head:SetPoint("BOTTOM", f, "TOP", 0, -52)
else
self.head:SetPoint("BOTTOM", f, "TOP", 0, -60)
end
self.categoriesFrame:UpdatePosition()
self.foot:Show()
--self.main:SetPoint("BOTTOMRIGHT", self.foot, "TOPRIGHT")
self.minimiseButton:GetNormalTexture():SetTexCoord(0.1484375 * 2, 0.1484375 * 3, 0, 0.3125)
self.minimiseButton:GetHighlightTexture():SetTexCoord(0.59375, 0.7421875, 0, 0.3125)
self.minimiseButton:GetPushedTexture():SetTexCoord(0.1484375 * 2, 0.1484375 * 3, 0.625, 0.9375)
S.primaryItemList.scrollBar:SetPoint("BOTTOM", 0, 18)
end
S.primaryItemList:SetMinimised(minimised)
if S.WoWVersion() > 1 then
S.CurrencyList:SetMinimised(minimised)
end
S.BankItemList:SetMinimised(minimised)
if S.WoWVersion() >= 6 then
S.ReagentItemList:SetMinimised(minimised)
elseif S.WoWVersion() <= 3 then
S.KeyringItemList:SetMinimised(minimised)
end
S.Utils.TriggerEvent("Resized")
end
function f:ToggleMinimised()
self:SetMinimised(not self.minimised)
f.minimiseButton:Update()
end
function f:GetMinimised()
return self.minimised
end]]
f.minimised = false
--[[local texSizeX, texSizeY = 0.296875, 0.3125
f.minimiseButton = CreateFrame("BUTTON", nil, f)
f.minimiseButton:SetNormalTexture("Interface\\Addons\\Sorted\\Textures\\redbutton2x")
f.minimiseButton:SetHighlightTexture("Interface\\Addons\\Sorted\\Textures\\redbutton2x")
f.minimiseButton:SetPushedTexture("Interface\\Addons\\Sorted\\Textures\\redbutton2x")
f.minimiseButton:GetHighlightTexture():SetTexCoord(texSizeX * 2, texSizeX * 2.5, 0, texSizeY)
f.minimiseButton:SetSize(29, 30)
f.minimiseButton:SetPoint("CENTER", f, "TOPRIGHT", -42, -12)
f.minimiseButton:SetFrameLevel(600)
function f.minimiseButton:Update()
if f.minimised then
self:GetNormalTexture():SetTexCoord(0, texSizeX * 0.5, 0, texSizeY)
self:GetPushedTexture():SetTexCoord(0, texSizeX * 0.5, texSizeY * 2, texSizeY * 3)
if self.clean then
self:GetHighlightTexture():SetTexCoord(0, texSizeX * 0.5, 0, texSizeY)
else
self:GetHighlightTexture():SetTexCoord(texSizeX * 2, texSizeX * 2.5, 0, texSizeY)
end
else
self:GetNormalTexture():SetTexCoord(texSizeX, texSizeX * 1.5, 0, texSizeY)
self:GetPushedTexture():SetTexCoord(texSizeX, texSizeX * 1.5, texSizeY * 2, texSizeY * 3)
if self.clean then
self:GetHighlightTexture():SetTexCoord(texSizeX, texSizeX * 1.5, 0, texSizeY)
else
self:GetHighlightTexture():SetTexCoord(texSizeX * 2, texSizeX * 2.5, 0, texSizeY)
end
end
end
f.minimiseButton:SetScript("OnClick", function(self, button, down)
if button == "LeftButton" then
f:ToggleMinimised()
end
end)
f.minimiseButton:Update()]]
local texSizeX, texSizeY = 0.296875, 0.3125
f.wowButton = CreateFrame("BUTTON", nil, f)
f.wowButton:SetNormalTexture("Interface\\Addons\\Sorted\\Textures\\wow-button")
f.wowButton:SetHighlightTexture("Interface\\Addons\\Sorted\\Textures\\wow-button")
f.wowButton:SetPushedTexture("Interface\\Addons\\Sorted\\Textures\\wow-button")
f.wowButton:GetNormalTexture():SetTexCoord(0, texSizeX, 0, texSizeY)
f.wowButton:GetHighlightTexture():SetTexCoord(texSizeX, texSizeX * 2, 0, texSizeY)
f.wowButton:GetPushedTexture():SetTexCoord(0, texSizeX, texSizeY * 2, texSizeY * 3)
f.wowButton:SetSize(29, 30)
f.wowButton:SetPoint("CENTER", f, "TOPRIGHT", -42, -12)
f.wowButton:SetFrameLevel(600)
f.wowButton:SetScript("OnClick", function(self, button, down)
S.Utils.ResurrectBlizzBags()
CloseAllBags()
OpenAllBags()
end)
-- SIDE FRAME (Banks, reagents, currency)
f.sideFrame = CreateFrame("FRAME", nil, f)
f.sideFrame:SetFrameLevel(f:GetFrameLevel() - 20)
f.sideFrame:SetPoint("RIGHT", f, "LEFT", -2, 0)
f.sideFrame:SetPoint("BOTTOM", 0, 16)
f.sideFrame:SetWidth(500)
S.FrameTools.AddBorder(f.sideFrame, "border", "Interface\\Addons\\Sorted\\Textures\\Side-Frame-Border", 13, 7)
S.FrameTools.AddSortedBackdrop(f.sideFrame)
f.sideFrame:Hide()
f.sideFrame:EnableMouse()
f.sideFrame:SetScript("OnMouseDown", function(self) end) -- Prevent click-through
-- Give the side frame the same width as the main frame
--[[function f.sideFrame:Resize()
f.sideFrame:SetWidth(f:GetWidth())
end
S.Utils.RunOnEvent(f.sideFrame, "Resizing", f.sideFrame.Resize)]]
f.sideFrame.content = CreateFrame("FRAME", nil, f.sideFrame)
f.sideFrame.content:SetPoint("TOPLEFT", 1, -1)
f.sideFrame.content:SetPoint("BOTTOMRIGHT", -1, 1)
function f.sideFrame:UpdateMinSize()
if f.selectedSideTab then
local minWidth = S.GetSelectedSideTab().itemList:GetMinWidth()
if self:GetWidth() < minWidth then
self:SetWidth(minWidth)
end
self.minWidth = minWidth
end
end
S.Utils.RunOnEvent(f.sideFrame, "MinSizeChanged", f.sideFrame.UpdateMinSize)
--[[if S.WoWVersion() >= 10 then
S.ReagentBagList = S.CreateItemList(f.sideFrame.content, "REAGENT_BAGS", "ContainerFrameItemButtonTemplate")
table.insert(S.itemLists, S.ReagentBagList)
for _, containerID in pairs(S.Utils.ContainersOfType("REAGENT_BAGS")) do
S.ReagentBagList:AddContainerButton(containerID, true) -- reagent bag, make it grey
end
end]]
if S.WoWVersion() > 1 then
S.CurrencyList = S.CreateCurrencyList(f.sideFrame.content)
end
S.BankItemList = S.CreateItemList(f.sideFrame.content, "BANK", 400, "ContainerFrameItemButtonTemplate")
table.insert(S.itemLists, S.BankItemList)
for _, containerID in pairs(S.Utils.ContainersOfType("BANK")) do
if containerID ~= BANK_CONTAINER then
S.BankItemList:AddContainerButton(containerID)
end
end
if S.WoWVersion() >= 6 then
S.ReagentItemList = S.CreateItemList(f.sideFrame.content, "REAGENT", 400, "ReagentBankItemButtonGenericTemplate")
table.insert(S.itemLists, S.ReagentItemList)
elseif S.WoWVersion() <= 3 then
S.KeyringItemList = S.CreateItemList(f.sideFrame.content, "KEYRING", 400, "ContainerFrameItemButtonTemplate")
table.insert(S.itemLists, S.KeyringItemList)
end
-- SIDE TABS (Bank, reagents, currency)
f.sideTabs = {}
f.selectedSideTab = nil
local function GetSelectedSideTab()
for i,v in ipairs(f.sideTabs) do
if v.key == f.selectedSideTab then
return v
end
end
end
S.GetSelectedSideTab = GetSelectedSideTab
local function SelectSideTab(key, dontToggle)
f.sideTabFrame:ClearAllPoints()
local currentSkin = S.Skinning.GetSkin()
if f.selectedSideTab == key and not dontToggle or key == nil then
f.selectedSideTab = nil
if currentSkin == S.Skinning.ADDONSKINS or currentSkin == S.Skinning.CLEAN then
f.sideTabFrame:SetPoint("BOTTOMRIGHT", f, "BOTTOMLEFT", 1, 16)
elseif currentSkin == S.Skinning.DEFAULT then
f.sideTabFrame:SetPoint("BOTTOMRIGHT", f, "BOTTOMLEFT", -1, 16)
end
f.sideFrame:Hide()
else
f.selectedSideTab = key
if currentSkin == S.Skinning.ADDONSKINS or currentSkin == S.Skinning.CLEAN then
f.sideTabFrame:SetPoint("BOTTOMRIGHT", f.sideFrame, "BOTTOMLEFT", 2, 16)
elseif currentSkin == S.Skinning.DEFAULT then
f.sideTabFrame:SetPoint("BOTTOMRIGHT", f.sideFrame, "BOTTOMLEFT", -1, 16)
end
f.sideFrame:Show()
end
f.sideTabFrame:SetSize(1,1)
for i,v in ipairs(f.sideTabs) do
v:Update(f.selectedSideTab == v.key)
end
if f.selectedSideTab then
f.sideFrame.minWidth = GetSelectedSideTab().itemList:GetMinWidth()
f.sideFrame:SetWidth(f.sideFrame.minWidth + 80)
end
end
S.primaryFrame.SelectSideTab = SelectSideTab
local function UpdateSideTabHeight(self)
self:SetHeight(self.text:GetStringWidth() + 28)
--self.text:SetSize(self.text:GetStringWidth() + 8, self.text:GetStringWidth() + 8)
end
local function UpdateSideTab(self, selected)
local skin = S.Skinning.GetSkin()
if selected then
self.itemList:Show()
self.text:SetTextColor(1, 0.975, 0.85)
if skin == S.Skinning.ADDONSKINS then
self:SetBackdropBorderColor(unpack(S.ASS.Media.valueColor))
else
self.text:SetPoint("CENTER", -4, -4)
self.normalTexTop:SetTexture("Interface\\Addons\\Sorted\\Textures\\Side-Tab-Selected")
self.normalTexCen:SetTexture("Interface\\Addons\\Sorted\\Textures\\Side-Tab-Selected")
self.normalTexBot:SetTexture("Interface\\Addons\\Sorted\\Textures\\Side-Tab-Selected")
self.highlightTexTop:SetTexture("Interface\\Addons\\Sorted\\Textures\\Side-Tab-Selected-Highlight")
self.highlightTexCen:SetTexture("Interface\\Addons\\Sorted\\Textures\\Side-Tab-Selected-Highlight")
self.highlightTexBot:SetTexture("Interface\\Addons\\Sorted\\Textures\\Side-Tab-Selected-Highlight")
end
else
self.itemList:Hide()
self.text:SetTextColor(S.Utils.GetButtonTextColor():GetRGB())
if skin == S.Skinning.ADDONSKINS then
self:SetBackdropBorderColor(unpack(S.ASS.Media.borderColor))
else
self.text:SetPoint("CENTER", 0.5, -4)
self.normalTexTop:SetTexture("Interface\\Addons\\Sorted\\Textures\\Side-Tab")
self.normalTexCen:SetTexture("Interface\\Addons\\Sorted\\Textures\\Side-Tab")
self.normalTexBot:SetTexture("Interface\\Addons\\Sorted\\Textures\\Side-Tab")
self.highlightTexTop:SetTexture("Interface\\Addons\\Sorted\\Textures\\Side-Tab-Highlight")
self.highlightTexCen:SetTexture("Interface\\Addons\\Sorted\\Textures\\Side-Tab-Highlight")
self.highlightTexBot:SetTexture("Interface\\Addons\\Sorted\\Textures\\Side-Tab-Highlight")
end
end
end
local function CreateSideTab(parent, text, key, itemList)
local b = CreateFrame("BUTTON", nil, parent)
b:SetPoint("RIGHT", parent, "LEFT")
b:SetSize(34, 100)
b.key = key
b.Update = UpdateSideTab
b.itemList = itemList
b.normalTexTop = b:CreateTexture()
b.normalTexCen = b:CreateTexture()
b.normalTexBot = b:CreateTexture()
b.normalTexTop:SetPoint("TOPLEFT")
b.normalTexTop:SetPoint("BOTTOMRIGHT", b, "TOPRIGHT", 0, -14)
b.normalTexTop:SetTexCoord(0.375, 1, 0, 0.25)
b.normalTexCen:SetPoint("TOPLEFT", 0, -14)
b.normalTexCen:SetPoint("BOTTOMRIGHT", 0, 14)
b.normalTexCen:SetTexCoord(0.375, 1, 0.25, 0.75)
b.normalTexBot:SetPoint("TOPLEFT", b, "BOTTOMLEFT", 0, 14)
b.normalTexBot:SetPoint("BOTTOMRIGHT")
b.normalTexBot:SetTexCoord(0.375, 1, 0.75, 1)
b.highlightTexTop = b:CreateTexture(nil, "HIGHLIGHT")
b.highlightTexCen = b:CreateTexture(nil, "HIGHLIGHT")
b.highlightTexBot = b:CreateTexture(nil, "HIGHLIGHT")
b.highlightTexTop:SetBlendMode("ADD")
b.highlightTexCen:SetBlendMode("ADD")
b.highlightTexBot:SetBlendMode("ADD")
b.highlightTexTop:SetPoint("TOPLEFT")
b.highlightTexTop:SetPoint("BOTTOMRIGHT", b, "TOPRIGHT", 0, -14)
b.highlightTexTop:SetTexCoord(0.375, 1, 0, 0.25)
b.highlightTexCen:SetPoint("TOPLEFT", 0, -14)
b.highlightTexCen:SetPoint("BOTTOMRIGHT", 0, 14)
b.highlightTexCen:SetTexCoord(0.375, 1, 0.25, 0.75)
b.highlightTexBot:SetPoint("TOPLEFT", b, "BOTTOMLEFT", 0, 14)
b.highlightTexBot:SetPoint("BOTTOMRIGHT")
b.highlightTexBot:SetTexCoord(0.375, 1, 0.75, 1)
b.overlayShadowFrame = CreateFrame("FRAME", nil, b)
b.overlayShadowFrame:SetAllPoints()
b.overlayShadowFrame:SetFrameLevel(b:GetFrameLevel() + 1)
b.overlayShadowTop = b.overlayShadowFrame:CreateTexture()
b.overlayShadowCen = b.overlayShadowFrame:CreateTexture()
b.overlayShadowBot = b.overlayShadowFrame:CreateTexture()
b.overlayShadowTop:SetTexture("Interface\\Addons\\Sorted\\Textures\\Side-Tab-Shadow")
b.overlayShadowCen:SetTexture("Interface\\Addons\\Sorted\\Textures\\Side-Tab-Shadow")
b.overlayShadowBot:SetTexture("Interface\\Addons\\Sorted\\Textures\\Side-Tab-Shadow")
b.overlayShadowTop:SetBlendMode("MOD")
b.overlayShadowCen:SetBlendMode("MOD")
b.overlayShadowBot:SetBlendMode("MOD")
b.overlayShadowTop:SetPoint("TOPLEFT")
b.overlayShadowTop:SetPoint("BOTTOMRIGHT", b.overlayShadowFrame, "TOPRIGHT", 0, -14)
b.overlayShadowTop:SetTexCoord(0, 1, 0, 0.25)
b.overlayShadowCen:SetPoint("TOPLEFT", 0, -14)
b.overlayShadowCen:SetPoint("BOTTOMRIGHT", 0, 14)
b.overlayShadowCen:SetTexCoord(0, 1, 0.25, 0.75)
b.overlayShadowBot:SetPoint("TOPLEFT", b.overlayShadowFrame, "BOTTOMLEFT", 0, 14)
b.overlayShadowBot:SetPoint("BOTTOMRIGHT")
b.overlayShadowBot:SetTexCoord(0, 1, 0.75, 1)
b.text = b:CreateFontString(nil, "OVERLAY", "SortedFont")
b.text:SetText(text)
local ag = b:CreateAnimationGroup()
local a = ag:CreateAnimation("Rotation", nil)
a:SetDuration(0)
a:SetDegrees(90)
a:SetChildKey("text")
ag:SetLooping("REPEAT")
ag:Play()
b:RegisterForClicks("LeftButtonUp")
b:RegisterForDrag("LeftButton")
b:SetScript("OnClick", function(self)
SelectSideTab(self.key)
end)
-- Resizing
local function OnUpdate(self)
local x, _ = GetCursorPosition()
local width = (self.mouseStartX - x) / self.scale + self.startWidth
if width < f.sideFrame.minWidth then
width = f.sideFrame.minWidth
end
f.sideFrame:SetWidth(width)
end
b:SetScript("OnMouseDown", function(self)
self.mouseStartX, _ = GetCursorPosition()
self.scale = self:GetEffectiveScale()
self.startWidth = f.sideFrame:GetWidth()
end)
b:SetScript("OnDragStart", function(self)
if f.sideFrame:IsShown() then
self:SetScript("OnUpdate", OnUpdate)
OnUpdate(self)
end
end)
b:SetScript("OnDragStop", function(self)
self:SetScript("OnUpdate", nil)
end)
b:SetScript("OnEnter", function(self)
self.text:SetTextColor(0.95, 0.875, 0.7)
if S.Skinning.GetSkin() == S.Skinning.ADDONSKINS then
if f.selectedSideTab == self.key then
self:SetBackdropBorderColor(unpack(S.ASS.Media.valueColor))
else
self:SetBackdropBorderColor(unpack(S.ASS.Media.borderColor))
end
end
end)
b:SetScript("OnLeave", function(self)
if f.selectedSideTab == self.key then
self.text:SetTextColor(1, 0.975, 0.85)
else
self.text:SetTextColor(S.Utils.GetButtonTextColor():GetRGB())
end
if S.Skinning.GetSkin() == S.Skinning.ADDONSKINS then
if f.selectedSideTab == self.key then
self:SetBackdropBorderColor(unpack(S.ASS.Media.valueColor))
else
self:SetBackdropBorderColor(unpack(S.ASS.Media.borderColor))
end
end
end)
S.Utils.RunOnEvent(b, "FontChanged", UpdateSideTabHeight)
b:Update()
table.insert(f.sideTabs, b)
return b
end
-- Create a point for the tabs to attach to. Move all the tabs by moving this one frame
f.sideTabFrame = CreateFrame("FRAME", nil, f)
f.sideTabFrame:SetFrameLevel(f:GetFrameLevel() - 10)
-- Create the tabs
if S.WoWVersion() == 1 then
CreateSideTab(f.sideTabFrame, S.Localize("TAB_BANK"), "BANK", S.BankItemList)
CreateSideTab(f.sideTabFrame, KEYRING, "KEYRING", S.KeyringItemList)
SelectSideTab(nil)
S.Utils.RunOnEvent(nil, "BankOpened", function()
SelectSideTab("BANK", true)
end)
else
CreateSideTab(f.sideTabFrame, S.Localize("TAB_CURRENCY"), "CURRENCY", S.CurrencyList)
CreateSideTab(f.sideTabFrame, S.Localize("TAB_BANK"), "BANK", S.BankItemList)
if S.WoWVersion() >= 6 then
CreateSideTab(f.sideTabFrame, S.Localize("TAB_REAGENTS"), "REAGENTS", S.ReagentItemList)
elseif S.WoWVersion() <= 3 then
CreateSideTab(f.sideTabFrame, KEYRING, "KEYRING", S.KeyringItemList)
end
SelectSideTab(nil)
S.Utils.RunOnEvent(nil, "BankOpened", function()
SelectSideTab("BANK", true)
end)
end
S.Utils.RunOnEvent(nil, "BankClosed", function()
SelectSideTab(nil, true)
end)
function S.AddSideTab(text, key)
local f = CreateFrame("FRAME", nil, S.primaryFrame.sideFrame.content)
f:SetAllPoints()
local tab = CreateSideTab(S.primaryFrame.sideTabFrame, text, key, f)
return tab, f
end
-- Showing and hiding of side tabs
local function UpdateSideTabPositions()
local lastVisibleTabIndex
for i,v in ipairs(f.sideTabs) do
if v:IsShown() then
if not lastVisibleTabIndex then
v:SetPoint("BOTTOM")
else
if S.Skinning.GetSkin() == S.Skinning.ADDONSKINS then
v:SetPoint("BOTTOM", f.sideTabs[lastVisibleTabIndex], "TOP", 0, 2)
else
v:SetPoint("BOTTOM", f.sideTabs[lastVisibleTabIndex], "TOP", 0, -6)
end
end
lastVisibleTabIndex = i
end
end
end
function S.SetSideTabShown(key, shown)
for i,v in ipairs(f.sideTabs) do
if v.key == key then
v:SetShown(shown)
if not shown and f.selectedSideTab == key then
SelectSideTab(nil)
end
UpdateSideTabPositions()
return
end
end
end
function S.ShowSideTab(key)
for i,v in ipairs(f.sideTabs) do
if v.key == key then
v:Show()
UpdateSideTabPositions()
return
end
end
end
function S.HideSideTab(key)
for i,v in ipairs(f.sideTabs) do
if v.key == key then
v:Hide()
if f.selectedSideTab == key then
SelectSideTab(nil)
end
UpdateSideTabPositions()
return
end
end
end
UpdateSideTabPositions()
S.Utils.RunOnEvent(nil, "SettingChanged-skinning", UpdateSideTabPositions)
-- HEADER (Title bar, searchbox, category buttons)
f.head = CreateFrame("FRAME", nil, f)
f.sideFrame:SetPoint("TOP", f.head, "BOTTOM", 0, 1)
f.head:SetPoint("TOPLEFT")
f.head:SetPoint("BOTTOM", f, "TOP", 0, -60)
f.head:SetPoint("RIGHT")
f.head:EnableMouse()
f.head:SetScript("OnMouseDown", function(self, button)
if button == "LeftButton" then
f:StartMoving()
end
end)
f.head:SetScript("OnMouseUp", function(self, button)
if button == "LeftButton" then
f:StopMovingOrSizing()
S.Utils.TriggerEvent("Moved")
f:SavePosition()
end
end)
f.head.bg = f.head:CreateTexture(nil, "ARTWORK")
f.head.bg:SetTexture("Interface\\Addons\\Sorted\\Textures\\UI-Background-Rock", "REPEAT", "REPEAT")
f.head.bg:SetPoint("TOPLEFT")
f.head.bg:SetPoint("BOTTOMRIGHT", f.head, "TOPRIGHT", 0, -24)
f.head.bg:SetVertTile(true)
f.head.bg:SetHorizTile(true)
f.head.bgLower = f.head:CreateTexture(nil, "BACKGROUND")
f.head.bgLower:SetTexture("Interface\\Addons\\Sorted\\Textures\\Head-Background", "REPEAT", "REPEAT")
f.head.bgLower:SetPoint("TOPLEFT", 0, 0)
f.head.bgLower:SetPoint("BOTTOMRIGHT")
f.head.bgLower:SetHorizTile(true)
--[[f.head.bg = f.head:CreateTexture()
f.head.bg:SetColorTexture(0, 0, 0, 1)
f.head.bg:SetAllPoints()]]
f.head.characterSelectDropdown = CreateFrame("BUTTON", nil, f.head)
local dropdown = f.head.characterSelectDropdown
dropdown:SetPoint("TOPLEFT", 48, 0)
dropdown:SetHeight(22)
dropdown.text = dropdown:CreateFontString(nil, "OVERLAY", "SortedFont")
dropdown.text:SetPoint("LEFT", 6, 0)
dropdown.text:SetTextScale(1.1)
dropdown.arrow = dropdown:CreateTexture()
dropdown.arrow:SetPoint("RIGHT", -4, 0)
dropdown.arrow:SetSize(14, 14)
dropdown.arrow:SetDrawLayer("OVERLAY")
dropdown.arrow:SetTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Button")
dropdown.arrowHighlight = dropdown:CreateTexture()
dropdown.arrowHighlight:SetPoint("RIGHT", -4, 0)
dropdown.arrowHighlight:SetSize(14, 14)
dropdown.arrowHighlight:SetDrawLayer("HIGHLIGHT")
dropdown.arrowHighlight:SetBlendMode("ADD")
dropdown.arrowHighlight:SetTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Button")
dropdown.bg = dropdown:CreateTexture()
dropdown.bg:SetPoint("TOPLEFT", dropdown, -16, 0)
dropdown.bg:SetPoint("BOTTOMRIGHT", dropdown, 4, 0)
dropdown.bg:SetDrawLayer("BACKGROUND")
dropdown.bg:SetTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Background")
dropdown.separator = f.border:CreateTexture()
dropdown.separator:SetPoint("LEFT", dropdown, "RIGHT", -4, 0.75)
dropdown.separator:SetSize(18, 35)
dropdown.separator:SetDrawLayer("OVERLAY")
dropdown.separator:SetTexture("Interface\\Addons\\Sorted\\Textures\\Titlebar-Separator")
dropdown.warning = dropdown:CreateTexture()
dropdown.warning:SetPoint("LEFT")
dropdown.warning:SetTexture("Interface\\Addons\\Sorted\\Textures\\Type-Icons")
dropdown.warning:SetTexCoord(0.5, 0.625, 0.125, 0.25)
dropdown.warning:SetSize(20, 20)
dropdown.warning.anim = dropdown.warning:CreateAnimationGroup()
dropdown.warning.anim:SetLooping("REPEAT")
local anim = dropdown.warning.anim:CreateAnimation("Scale")
anim:SetDuration(0.5)
anim:SetScaleFrom(1, 1)
anim:SetScaleTo(0.75, 0.75)
anim:SetSmoothing("IN_OUT")
anim:SetOrder(1)
anim = dropdown.warning.anim:CreateAnimation("Scale")
anim:SetDuration(0.5)
anim:SetScaleFrom(1, 1)
anim:SetScaleTo(1.33333333, 1.33333333)
anim:SetSmoothing("IN_OUT")
anim:SetOrder(2)
dropdown.warningHighlight = dropdown:CreateTexture()
dropdown.warningHighlight:SetPoint("TOPLEFT", dropdown.text, "TOPLEFT", -26, 8)
dropdown.warningHighlight:SetPoint("BOTTOMRIGHT", dropdown.text, "BOTTOMRIGHT", 36, -8)
dropdown.warningHighlight:SetTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Glow-Yellow")
dropdown.warningHighlight:SetBlendMode("ADD")
dropdown.warningHighlight.anim = dropdown.warningHighlight:CreateAnimationGroup()
dropdown.warningHighlight.anim:SetLooping("REPEAT")
anim = dropdown.warningHighlight.anim:CreateAnimation("Alpha")
anim:SetDuration(0.4)
anim:SetFromAlpha(0.3)
anim:SetToAlpha(0.6)
anim:SetSmoothing("IN_OUT")
anim:SetOrder(1)
anim = dropdown.warningHighlight.anim:CreateAnimation("Alpha")
anim:SetDuration(0.4)
anim:SetFromAlpha(0.6)
anim:SetToAlpha(0.3)
anim:SetSmoothing("IN_OUT")
anim:SetOrder(2)
function dropdown:Update()
self.text:SetText(S.GetData().name)
self.text:SetTextColor(S.Utils.GetClassColor(S.GetData().class):GetRGB())
if S.IsPlayingCharacterSelected() then
self.warning:Hide()
self.warning.anim:Stop()
self.warningHighlight:Hide()
self.warningHighlight.anim:Stop()
self.text:SetPoint("LEFT", self, "LEFT", 6, 0)
self:SetWidth(self.text:GetStringWidth() + 30)
else
self.warning:Show()
self.warning.anim:Play()
self.warningHighlight:Show()
self.warningHighlight.anim:Play()
self.text:SetPoint("LEFT", self.warning, "RIGHT", -4, 0)
self:SetWidth(24 + self.text:GetStringWidth() + 20)
end
end
S.Utils.RunOnEvent(dropdown, "CharacterSelected", dropdown.Update)
S.Utils.RunOnEvent(dropdown, "SettingChanged-fontOutline", dropdown.Update)
S.Utils.RunOnEvent(dropdown, "SettingChanged-fontShadow", dropdown.Update)
S.Utils.RunOnEvent(dropdown, "SettingChanged-fontSizePts", dropdown.Update)
S.Utils.RunOnEvent(dropdown, "SettingChanged-font", dropdown.Update)
dropdown:SetScript("OnShow", dropdown.Update)
function dropdown:OnEnter()
self.arrowHighlight:Show()
local color = S.Utils.GetClassColor(S.GetData().class)
color = CreateColor(color.r, color.g, color.b)
color.r = color.r + 0.2
color.g = color.g + 0.2
color.b = color.b + 0.2
self.text:SetTextColor(color:GetRGB())
end
function dropdown:OnLeave()
self.arrowHighlight:Hide()
self.text:SetTextColor(S.Utils.GetClassColor(S.GetData().class):GetRGB())
end
local function CharacterSelectDropdownEntryClick(self)
local selectedChar = S.GetSelectedCharacter()
S.SelectCharacter(self.data1)
if S.GetSelectedCharacter() ~= selectedChar then -- Hide dropdown if a new character has been selected
S.Dropdown.Hide()
end
end
local function SortCharacters(char1, char2)
-- Put current character at the top
if char1 == UnitGUID("player") then
return true
elseif char2 == UnitGUID("player") then
return false
end
-- Realms are the same, sort by name
if Sorted_Data[char1].realm == Sorted_Data[char2].realm then
return Sorted_Data[char1].name < Sorted_Data[char2].name
end
-- Sort current realm to the top
if Sorted_Data[char1].realm == GetRealmName() then
return true
elseif Sorted_Data[char2].realm == GetRealmName() then
return false
end
-- Sort by realm
return Sorted_Data[char1].realm < Sorted_Data[char2].realm
end
local function DeleteCharacter(self)
S.Data.DeleteCharacter(self.data1)
S.primaryFrame.head.characterSelectDropdown:ShowDropdown()
end
function dropdown:ShowDropdown()
local characters = {}
for k, v in pairs(Sorted_Data) do
--if v.realm == GetRealmName() then
table.insert(characters, k)
--end
end
table.sort(characters, SortCharacters)
S.Dropdown.Reset()
local realm = nil
for i, v in ipairs(characters) do
-- New realm, add a realm heading
if Sorted_Data[v].realm ~= realm then
realm = Sorted_Data[v].realm
S.Dropdown.AddEntry(realm, nil, nil, nil, S.Utils.GetButtonTextColor())
end
-- Create the entry
S.Dropdown.AddEntry(S.Utils.FormatFaction(Sorted_Data[v].faction, S.Settings.Get("fontSizePts") * 1.4).." "..Sorted_Data[v].name, CharacterSelectDropdownEntryClick, v, nil, S.Utils.GetClassColor(Sorted_Data[v].class))
S.Dropdown.AddRightText(Sorted_Data[v].level.." "..S.Utils.GetRaceName(Sorted_Data[v].race))
if i > 1 then
S.Dropdown.AddDeleteButton(DeleteCharacter, v, nil, "TOOLTIP_FORGET_CHARACTER")
end
S.Dropdown.AddRadioButton(S.GetSelectedCharacter() == v, true)
end
S.Dropdown.Show(self, "TOP", "BOTTOM")
end
function dropdown:OnMouseDown()
self.arrowHighlight:Hide()
self.arrow:SetTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Button-Pushed")
if S.Dropdown.IsShown() then
S.Dropdown:Hide()
else
self:ShowDropdown()
end
end
function dropdown:OnMouseUp()
self.arrow:SetTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Button")
if self:IsMouseOver() then
self.arrowHighlight:Show()
end
end
dropdown:SetScript("OnEnter", dropdown.OnEnter)
dropdown:SetScript("OnLeave", dropdown.OnLeave)
dropdown:SetScript("OnMouseDown", dropdown.OnMouseDown)
dropdown:SetScript("OnMouseUp", dropdown.OnMouseUp)
if S.WoWVersion() >= 3 then
f.head.equipSetDropdown = CreateFrame("BUTTON", nil, f.head)
dropdown = f.head.equipSetDropdown
dropdown:SetPoint("TOPLEFT", f.head.characterSelectDropdown, "TOPRIGHT", 12, 0)
dropdown:SetHeight(22)
dropdown.text = dropdown:CreateFontString(nil, "OVERLAY", "SortedFont")
dropdown.text:SetPoint("LEFT", 4, 0.25)
dropdown.text:SetTextScale(1.1)
dropdown.arrow = dropdown:CreateTexture()
dropdown.arrow:SetPoint("RIGHT", -4, 0)
dropdown.arrow:SetSize(14, 14)
dropdown.arrow:SetDrawLayer("OVERLAY")
dropdown.arrow:SetTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Button")
dropdown.arrowHighlight = dropdown:CreateTexture()
dropdown.arrowHighlight:SetPoint("RIGHT", -4, 0)
dropdown.arrowHighlight:SetSize(14, 14)
dropdown.arrowHighlight:SetDrawLayer("HIGHLIGHT")
dropdown.arrowHighlight:SetBlendMode("ADD")
dropdown.arrowHighlight:SetTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Button")
dropdown.bg = dropdown:CreateTexture()
dropdown.bg:SetPoint("TOPLEFT", dropdown, -8, 0)
dropdown.bg:SetPoint("BOTTOMRIGHT", dropdown, 4, 0)
dropdown.bg:SetDrawLayer("BACKGROUND")
dropdown.bg:SetTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Background")
dropdown.separator = f.border:CreateTexture()
dropdown.separator:SetPoint("LEFT", dropdown, "RIGHT", -4, 0.75)
dropdown.separator:SetSize(18, 36)
dropdown.separator:SetDrawLayer("OVERLAY")
dropdown.separator:SetTexture("Interface\\Addons\\Sorted\\Textures\\Titlebar-Separator")
function dropdown:Update()
local equipSetID = S.GetSelectedEquipmentSet()
local data = S.GetData().equipSets
if equipSetID == -1 then
if S.WoWVersion() < 6 then
self.text:SetText("|TInterface\\PaperDollInfoFrame\\UI-GearManager-Button:16:13:0:0:64:64:11:50:8:56|t")
else
self.text:SetText("|TInterface\\Icons\\Garrison_Building_Armory:16:16:-2:0:64:64:4:60:4:60|t")
end
elseif equipSetID == -2 then
self.text:SetText("|cfffa373b "..S.Localize("DROPDOWN_MENU_EQUIPMENT_SET_NONE"))
elseif data[equipSetID] then
self.text:SetText("|T"..data[equipSetID].icon..":16:16:-2:0:64:64:4:60:4:60|t |cffeee2cf"..data[equipSetID].name)
else
self.text:SetText()
end
self:SetWidth(self.text:GetStringWidth() + 24)
end
S.Utils.RunOnEvent(dropdown, "EquipmentSetsUpdated", dropdown.Update)
S.Utils.RunOnEvent(dropdown, "CharacterSelected", dropdown.Update)
S.Utils.RunOnEvent(dropdown, "EquipmentSetSelected", dropdown.Update)
function dropdown:OnEnter()
self.arrowHighlight:Show()
end
function dropdown:OnLeave()
self.arrowHighlight:Hide()
end
local function EquipSetDropdownEntryClick(self)
local selectedEquipSet = S.GetSelectedEquipmentSet()
if selectedEquipSet == self.data1 then
S.SelectEquipmentSet(-1)
else
S.SelectEquipmentSet(self.data1)
end
S.Dropdown.Hide()
end
function dropdown:ShowDropdown()
local data = S.GetData().equipSets
local selectedEquipSet = S.GetSelectedEquipmentSet()
S.Dropdown.Reset()
S.Dropdown.AddEntry(S.Localize("DROPDOWN_MENU_EQUIPMENT_SET"), nil, nil, nil, S.Utils.GetButtonTextColor())
for k,v in pairs(data) do
S.Dropdown.AddEntry("|T"..v.icon..":16:16:-2:0:64:64:4:60:4:60|t |cffffffff"..v.name, EquipSetDropdownEntryClick, k)
S.Dropdown.AddRadioButton(selectedEquipSet == k, true)
end
S.Dropdown.AddEntry("|cfffa373b "..S.Localize("DROPDOWN_MENU_EQUIPMENT_SET_NONE"), EquipSetDropdownEntryClick, -2)
S.Dropdown.AddRadioButton(selectedEquipSet == -2, true)
S.Dropdown.AddEntry("|cffaaaaaa "..S.Localize("DROPDOWN_MENU_CLEAR"), EquipSetDropdownEntryClick, -1)
S.Dropdown.Show(self, "TOP", "BOTTOM")
end
function dropdown:OnMouseDown()
self.arrowHighlight:Hide()
self.arrow:SetTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Button-Pushed")
if S.Dropdown.IsShown() then
S.Dropdown:Hide()
else
self:ShowDropdown()
end
end
function dropdown:OnMouseUp()
self.arrow:SetTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Button")
if self:IsMouseOver() then
self.arrowHighlight:Show()
end
end
dropdown:SetScript("OnEnter", dropdown.OnEnter)
dropdown:SetScript("OnLeave", dropdown.OnLeave)
dropdown:SetScript("OnMouseDown", dropdown.OnMouseDown)
dropdown:SetScript("OnMouseUp", dropdown.OnMouseUp)
end
f.head.searchBoxFrame = CreateFrame("FRAME", nil, f.head)
f.head.searchBoxFrame:SetPoint("TOPLEFT", 0, -24)
f.head.searchBoxFrame:SetPoint("BOTTOM")
f.head.searchBoxFrame:SetWidth(200)
f.searchBox = CreateFrame("EditBox", nil, f.head.searchBoxFrame, "BagSearchBoxTemplate")
f.searchBox:SetPoint("LEFT", 12, 0)
f.searchBox:SetSize(160, 24)
f.searchBox.minWidth = 140 -- Used by the categories frame when it resizes
f.searchBox.Left:Hide()
f.searchBox.Middle:SetTexture("Interface\\Addons\\Sorted\\Textures\\Circle-Button")
f.searchBox.Middle:SetTexCoord(0.125, 0.375, 0.5, 0.75)
f.searchBox.Middle:ClearAllPoints()
f.searchBox.Middle:SetPoint("TOP", 0, 4)
f.searchBox.Middle:SetPoint("LEFT", f)
f.searchBox.Middle:SetPoint("BOTTOMRIGHT", -12, -4)
f.searchBox.Right:SetTexture("Interface\\Addons\\Sorted\\Textures\\Circle-Button")
f.searchBox.Right:SetTexCoord(0.375, 0.5, 0.5, 0.75)
f.searchBox.Right:ClearAllPoints()
f.searchBox.Right:SetPoint("TOPLEFT", f.searchBox, "TOPRIGHT", -12, 4)
f.searchBox.Right:SetPoint("BOTTOMRIGHT", 4, -4)
function f.searchBox:Update()
if self:HasFocus() then
self.Middle:SetTexCoord(0.625, 0.875, 0.5, 0.75)
self.Right:SetTexCoord(0.875, 1, 0.5, 0.75)
else
self.Middle:SetTexCoord(0.125, 0.375, 0.5, 0.75)
self.Right:SetTexCoord(0.375, 0.5, 0.5, 0.75)
end
end
f.searchBox:HookScript("OnEditFocusGained", function(self)
self:Update()
self:ClearAllPoints()
self:SetPoint("LEFT", 12, 0)
self:SetPoint("RIGHT", f.head)
self.Middle:SetPoint("BOTTOMRIGHT", 0, -4)
self.Right:Hide()
if S.Settings.Get("categoriesPosition") == 0 then
f.categoriesFrame:Hide()
end
end)
function f.searchBox:OnEditFocusLost()
self:SetCursorPosition(0)
self:Update()
self:ClearAllPoints()
self:SetPoint("LEFT", 12, 0)
self:SetSize(160, 24)
self.Middle:SetPoint("BOTTOMRIGHT", -12, -4)
self.Right:Show()
f.categoriesFrame:Show()
f.categoriesFrame:OnResize()
end
f.searchBox:HookScript("OnEditFocusLost", function(self)
if not SortedPrimaryFrameClearButton:IsMouseOver() or #self:GetText() == 0 then
self:OnEditFocusLost()
end
end)
SortedPrimaryFrameClearButton:HookScript("OnClick", function(self)
f.searchBox:OnEditFocusLost()
end)
f.searchBox:SetScript("OnHide", nil)
f.searchBox:SetScript("OnTextChanged", function(self)
SearchBoxTemplate_OnTextChanged(self)
S.Utils.TriggerEvent("SearchChanged")
end)
f.searchBox.Instructions:SetFontObject("SortedFont")
f.searchBox:SetFontObject("SortedFont")
--[[f.searchBox:SetScript("OnHide", function(self)
self:SetText("")
S.Utils.TriggerEvent("SearchChanged")
end)]]
f.categoriesFrame = CreateFrame("FRAME", nil, f.head)
f.categoriesFrame:SetPoint("TOP", f.head.searchBoxFrame)
f.categoriesFrame:SetPoint("BOTTOMRIGHT")
f.categoriesFrame:SetWidth(200)
f.categoriesFrame.buttons = {}
f.categoriesFrame.dropdownButton = CreateFrame("BUTTON", nil, f.categoriesFrame)
f.categoriesFrame.dropdownButton:SetPoint("RIGHT", -5, 0)
f.categoriesFrame.dropdownButton:SetSize(16, 16)
f.categoriesFrame.dropdownButton:SetNormalTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Button")
f.categoriesFrame.dropdownButton:SetHighlightTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Button")
f.categoriesFrame.dropdownButton:SetPushedTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Button-Pushed")
f.categoriesFrame.dropdownButton:GetNormalTexture():SetDesaturated(true)
f.categoriesFrame.dropdownButton:Hide()
f.categoriesFrame.dropdownButton:RegisterForClicks("LeftButtonDown")
local function OnCategoriesDropdownDisableButtonClick(self)
S.DeselectCategory()
S.Dropdown.Hide()
end
local function OnCategoriesDropdownButtonClick(self)
S.ToggleCategory(self.data1)
S.Dropdown.Hide()
end
f.categoriesFrame.dropdownButton:SetScript("OnEnter", function(self)
S.Tooltip.CreateText(self, "ANCHOR_RIGHT", LFG_LIST_MORE)
end)
f.categoriesFrame.dropdownButton:SetScript("OnLeave", function(self)
S.Tooltip.Cancel()
end)
f.categoriesFrame.dropdownButton:SetScript("OnClick", function(self)
local categories = S.Settings.Get("categories2")
if S.Dropdown.IsShown() then
S.Dropdown.Hide()
else
S.Dropdown.Reset()
--S.Dropdown.AddEntry(S.Localize("CONFIG_CATEGORIES"), nil, nil, nil, {S.Utils.GetButtonTextColor()})
for i = f.categoriesFrame.numShownCategories + 1, #categories do
local cat = categories[i]
if S.Category.CategoryModifiedInDropdown(i) then
S.Dropdown.AddEntry("|cffffdd00* |cffffffff"..cat.name, OnCategoriesDropdownButtonClick, i, nil)
else
S.Dropdown.AddEntry(cat.name, OnCategoriesDropdownButtonClick, i, nil)
end
S.Dropdown.AddRadioButton(S.GetSelectedCategory() == i)
end
if S.Settings.Get("categoriesPosition") == 0 then
S.Dropdown.Show(self, "TOPRIGHT", "BOTTOMRIGHT")
else
S.Dropdown.Show(self, "BOTTOMRIGHT", "BOTTOMLEFT", -6, 6)
end
end
end)
local function ShowCategoryTooltip(self)
GameTooltip:SetOwner(self, "ANCHOR_RIGHT")
GameTooltip:ClearLines()
GameTooltip:AddLine(self.tooltipText)
-- Add "Right-click for settings" to the tooltip. Don't show after player knows how to change the settings
if not S.Settings.Get("categorySettingsHaveChanged") then
if BANK_TAB_TOOLTIP_CLICK_INSTRUCTION then
GameTooltip:AddLine(BANK_TAB_TOOLTIP_CLICK_INSTRUCTION, 0, 1, 0)
else
GameTooltip:AddLine(S.Localize("TOOLTIP_CLICK_INSTRUCTION_SETTINGS"), 0, 1, 0)
end
end
GameTooltip:Show()
end
-- Create category buttons
local function CategoryButtonOnCategoryDropdownModified(self)
self.asterix:SetShown(S.Category.CategoryModifiedInDropdown(self:GetID()))
end
for i = 1, S.Utils.GetMaxNumCategories() do
local b = S.FrameTools.CreateCircleButton("CheckButton", f.categoriesFrame, false, "", true)
b:SetID(i)
b.icon:SetDesaturated(S.GetSelectedCategory() and S.Settings.Get("desaturateCategories") == 1)
b.asterix = b:CreateFontString(nil, "OVERLAY", "SortedFont")
b.asterix:SetText("*")
b.asterix:SetTextScale(1.6)
b.asterix:SetTextColor(1, 0.9, 0.1)
b.asterix:SetPoint("TOPRIGHT")
b.asterix:Hide()
S.Utils.RunOnEvent(b, "CategoryDropdownModified", CategoryButtonOnCategoryDropdownModified)
b:HookScript("OnEnter", function(self)
self.icon:SetDesaturated(false)
if self.tooltipText and S.Settings.Get("categoriesPosition") ~= 2 then
S.Tooltip.Schedule(function()
ShowCategoryTooltip(self)
end)
end
end)
b:HookScript("OnLeave", function(self)
if not self:GetChecked() then
self.icon:SetDesaturated(S.GetSelectedCategory() and S.Settings.Get("desaturateCategories") == 1)
end
S.Tooltip.Cancel()
end)
b:RegisterForClicks("LeftButtonDown", "RightButtonDown")
-- On category button click
b:HookScript("OnClick", function(self, button, down)
if button == "LeftButton" then
local infoType, itemID, itemLink = GetCursorInfo()
-- Add item to category
if infoType == "item" then
local itemName = GetItemInfo(itemLink)
S.Category.AddSpecificItem(self:GetID(), itemID, itemName)
ClearCursor()
S.Utils.TriggerEvent("CategorySelected")
f.categoriesFrame:Update()
-- Select category
else
if self:GetChecked() then
S.SelectCategory(self:GetID())
else
S.SelectCategory(nil)
end
end
else
S.Category.CreateAttributesDropdown(self, self:GetID())
f.categoriesFrame:Update()
end
end)
b:SetPoint("LEFT", i * 30 - 14, 0)
b:SetSize(32, 32)
f.categoriesFrame.buttons[i] = b
b:Hide()
end
function f.categoriesFrame:OnResize()
local categories = S.Settings.Get("categories2")
-- TOP
if S.Settings.Get("categoriesPosition") == 0 then
self.numShownCategories = floor((self:GetParent():GetWidth() - f.searchBox.minWidth) / 32)
local width = 0
self.dropdownButton:Hide()
if self.numShownCategories > #categories then
self.numShownCategories = #categories
elseif self.numShownCategories < #categories then
self.dropdownButton:Show()
width = width + 20
end
width = width + self.numShownCategories * 30 + 20
if width < 40 then
width = 60
end
self:SetWidth(width)
if S.Skinning.GetSkin() == S.Skinning.ADDONSKINS then
f.searchBox:SetWidth((self:GetParent():GetWidth() - self:GetWidth()))
else
f.searchBox:SetWidth((self:GetParent():GetWidth() - self:GetWidth()) + 2)
end
for i,v in ipairs(self.buttons) do
v:SetShown(i <= self.numShownCategories)
end
--SIDE
else
-- Calculate the number of category buttons which will be visible. If there's enough room for all of them, the dropdown button won't be needed, so it doesn't need quite as much space
if self:GetHeight() > #categories * 30 then
self.numShownCategories = #categories
else
self.numShownCategories = floor((self:GetHeight() - 16) / 30)
end
local height = 0
self.dropdownButton:Hide()
if self.numShownCategories > #categories then
self.numShownCategories = #categories
elseif self.numShownCategories < #categories then
self.dropdownButton:Show()
if S.Settings.Get("categoriesPosition") == 1 then
self.dropdownButton:SetPoint("TOP", 0, -self.numShownCategories * 30 -2)
else
self.dropdownButton:SetPoint("TOP", 0, -self.numShownCategories * 30 + 2)
end
height = height + 20
end
height = height + self.numShownCategories * 30 + 20
if height < 40 then
height = 60
end
--self:SetWidth(width)
f.searchBox:SetWidth(self:GetParent():GetWidth() - 24)
for i,v in ipairs(self.buttons) do
v:SetShown(i <= self.numShownCategories)
end
end
end
function f.categoriesFrame:UpdatePosition()
for i, b in ipairs(f.categoriesFrame.buttons) do
-- TOP
if S.Settings.Get("categoriesPosition") == 0 then
if f.categoriesFrame.bg then
f.categoriesFrame.bg:Hide()
f.categoriesFrame.cleanBorder:Hide()
f.categoriesFrame.bgLeft:Hide()
f.categoriesFrame.bgCorner:Hide()
f.categoriesFrame.bgBottom:Hide()
end
f.categoriesFrame:ClearAllPoints()
f.categoriesFrame:SetParent(f.head)
f.categoriesFrame:SetPoint("TOP", f.head.searchBoxFrame)
f.categoriesFrame:SetPoint("BOTTOMRIGHT")
f.categoriesFrame:SetWidth(200)
f.main:SetPoint("BOTTOMRIGHT")
b:ClearAllPoints()
b:SetPoint("LEFT", i * 30 - 14, 0)
--b:SetSize(32, 32)
f.categoriesFrame.dropdownButton:ClearAllPoints()
f.categoriesFrame.dropdownButton:SetPoint("RIGHT", -4, 0)
f.categoriesFrame.dropdownButton:SetSize(16, 16)
f.categoriesFrame.dropdownButton:SetNormalTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Button")
f.categoriesFrame.dropdownButton:SetHighlightTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Button")
f.categoriesFrame.dropdownButton:SetPushedTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Button-Pushed")
-- SIDE
elseif S.Settings.Get("categoriesPosition") == 1 then
if f.categoriesFrame.bg then
f.categoriesFrame.bg:Hide()
f.categoriesFrame.cleanBorder:Hide()
f.categoriesFrame.bgLeft:Hide()
f.categoriesFrame.bgCorner:Hide()
f.categoriesFrame.bgBottom:Hide()
end
f.categoriesFrame:ClearAllPoints()
f.categoriesFrame:SetParent(f.head)
f.categoriesFrame:SetPoint("TOP", f.head, "BOTTOM")
f.categoriesFrame:SetPoint("LEFT", f, "RIGHT", -32, 0)
f.categoriesFrame:SetPoint("RIGHT", f, -4, 0)
f.categoriesFrame:SetPoint("BOTTOM", f.foot, "TOP")
f.main:SetPoint("BOTTOMRIGHT", -34, 0)
--[[if not f:GetMinimised() then
end]]
b:ClearAllPoints()
b:SetPoint("TOP", 0, -i * 30 + 30)
--b:SetSize(32, 32)
f.categoriesFrame.dropdownButton:ClearAllPoints()
f.categoriesFrame.dropdownButton:SetSize(16, 16)
f.categoriesFrame.dropdownButton:SetNormalTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Button-Left")
f.categoriesFrame.dropdownButton:SetHighlightTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Button-Left")
f.categoriesFrame.dropdownButton:SetPushedTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Button-Left-Pushed")
-- SIDE TEXT
else
if not f.categoriesFrame.bg then
f.categoriesFrame.bg = f.categoriesFrame:CreateTexture()
f.categoriesFrame.bg:SetColorTexture(0.07, 0.06, 0.05)
f.categoriesFrame.cleanBorder = f.categoriesFrame:CreateTexture()
f.categoriesFrame.cleanBorder:SetColorTexture(1, 0.8, 0)
f.categoriesFrame.bgLeft = f.categoriesFrame:CreateTexture(nil, "OVERLAY", nil, 1)
f.categoriesFrame.bgLeft:SetTexture("Interface\\Addons\\Sorted\\Textures\\Categories-Border")
f.categoriesFrame.bgLeft:SetTexCoord(0, 1, 0, 0.1)
f.categoriesFrame.bgCorner = f.categoriesFrame:CreateTexture(nil, "OVERLAY", nil, 1)
f.categoriesFrame.bgCorner:SetTexture("Interface\\Addons\\Sorted\\Textures\\Categories-Border")
f.categoriesFrame.bgCorner:SetTexCoord(0, 1, 0, 1)
f.categoriesFrame.bgBottom = f.categoriesFrame:CreateTexture(nil, "OVERLAY", nil, 1)
f.categoriesFrame.bgBottom:SetTexture("Interface\\Addons\\Sorted\\Textures\\Categories-Border")
f.categoriesFrame.bgBottom:SetTexCoord(0.9, 1, 0, 1)
f.categoriesFrame.bg:SetAllPoints()
f.categoriesFrame.cleanBorder:SetPoint("TOPLEFT")
f.categoriesFrame.cleanBorder:SetPoint("BOTTOMRIGHT", f.categoriesFrame, "BOTTOMLEFT", 1, 0)
f.categoriesFrame.bgLeft:SetPoint("TOPLEFT")
f.categoriesFrame.bgLeft:SetPoint("BOTTOMRIGHT", f.categoriesFrame, "BOTTOMLEFT", 3, 3)
f.categoriesFrame.bgCorner:SetPoint("TOPLEFT", f.categoriesFrame, "BOTTOMLEFT", 0, 3)
f.categoriesFrame.bgCorner:SetPoint("BOTTOMRIGHT", f.categoriesFrame, "BOTTOMLEFT", 3, 0)
f.categoriesFrame.bgBottom:SetPoint("TOPLEFT", f.categoriesFrame, "BOTTOMLEFT", 3, 3)
f.categoriesFrame.bgBottom:SetPoint("BOTTOMRIGHT")
end
if S.Settings.Get("skinning") == S.Skinning.DEFAULT then
f.categoriesFrame.bg:SetColorTexture(0.07, 0.06, 0.05)
f.categoriesFrame.bg:Show()
f.categoriesFrame.cleanBorder:Hide()
f.categoriesFrame.bgLeft:Show()
f.categoriesFrame.bgCorner:Show()
f.categoriesFrame.bgBottom:Show()
elseif S.Settings.Get("skinning") == S.Skinning.CLEAN then
f.categoriesFrame.bg:SetColorTexture(0, 0, 0, 0.2)
f.categoriesFrame.bg:Show()
f.categoriesFrame.cleanBorder:Show()
f.categoriesFrame.bgLeft:Hide()
f.categoriesFrame.bgCorner:Hide()
f.categoriesFrame.bgBottom:Hide()
else
f.categoriesFrame.bg:Hide()
f.categoriesFrame.cleanBorder:Hide()
f.categoriesFrame.bgLeft:Hide()
f.categoriesFrame.bgCorner:Hide()
f.categoriesFrame.bgBottom:Hide()
end
f.categoriesFrame:ClearAllPoints()
f.categoriesFrame:SetParent(f.head)
f.categoriesFrame:SetPoint("TOP", f.head, "BOTTOM")
f.categoriesFrame:SetPoint("LEFT", f, "RIGHT", -154, 0)
f.categoriesFrame:SetPoint("RIGHT", f, 0, 0)
f.categoriesFrame:SetPoint("BOTTOM", f.foot, "TOP")
f.main:SetPoint("BOTTOMRIGHT", -154, 0)
b:ClearAllPoints()
b:SetPoint("TOP", 0, -i * 30 + 30)
f.categoriesFrame.dropdownButton:ClearAllPoints()
f.categoriesFrame.dropdownButton:SetSize(24, 24)
f.categoriesFrame.dropdownButton:SetNormalTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Button")
f.categoriesFrame.dropdownButton:SetHighlightTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Button")
f.categoriesFrame.dropdownButton:SetPushedTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Button-Pushed")
end
end
S.Utils.TriggerEvent("Resized")
f.categoriesFrame:OnResize()
f.categoriesFrame:Update()
end
function f.categoriesFrame:Update()
local categories = S.Settings.Get("categories2")
local selectedCategory = S.GetSelectedCategory()
for i = 1, #categories do
local button = self.buttons[i]
button:SetID(i)
button.icon:SetTexture("Interface\\Icons\\"..categories[i].icon)
button.tooltipText = categories[i].name
if button:GetID() == selectedCategory then
button:SetChecked(true)
button.icon:SetDesaturated(false)
else
button:SetChecked(false)
button.icon:SetDesaturated(selectedCategory and S.Settings.Get("desaturateCategories") == 1)
end
-- Text button Categories
if S.Settings.Get("categoriesPosition") == 2 then
button:SetSize(154, 30)
if not button.text then
button.text = button:CreateFontString(nil, "OVERLAY", "SortedFont")
button.text:SetWidth(140)
button.text:SetWordWrap(false)
button.textShadow = button:CreateTexture(nil, "OVERLAY", nil, 5)
button.textShadow:SetTexture("Interface\\Addons\\Sorted\\Textures\\Shadow-Mod")
button.textShadow:SetBlendMode("MOD")
button.textShadow:SetPoint("CENTER")
button.textShadow:SetHeight(30)
end
button.text:SetText(categories[i].name)
button.text:Show()
button.mask:SetTexture("Interface\\Addons\\Sorted\\Textures\\Button-Mask")
button.icon:SetTexCoord(0.03, 0.98, 0.25, 0.6)
if button:GetID() == selectedCategory then
button.icon:SetAlpha(0.9)
button.text:SetTextColor(1, 1, 1, 1)
button.text:SetTextScale(1.1)
button.text:SetPoint("CENTER", 0, 1)
button.textShadow:SetWidth(button.text:GetStringWidth() * 1.5 + 10)
button.textShadow:Show()
elseif not selectedCategory then
button.icon:SetAlpha(0.1)
button.text:SetTextColor(S.Utils.GetButtonTextColor():GetRGB())
button.text:SetAlpha(1)
button.text:SetTextScale(1)
button.text:SetPoint("CENTER", 0, 0.5)
button.textShadow:Hide()
else
button.icon:SetAlpha(0.05)
button.text:SetTextColor(S.Utils.GetButtonTextColor():GetRGB())
button.text:SetAlpha(0.5)
button.text:SetTextScale(1)
button.text:SetPoint("CENTER", 0, 0.5)
button.textShadow:Hide()
end
if S.Settings.Get("skinning") == S.Skinning.DEFAULT then
if S.WoWVersion() < 10 then -- Classic doesn't like the semi-transparent icon overlay
button.icon:SetAlpha(0)
button.textShadow:Hide()
end
button:SetNormalTexture("Interface\\Addons\\Sorted\\Textures\\Buttons")
button:GetNormalTexture():SetTexCoord(0.0, 0.98, 0, 0.17)
button:GetNormalTexture():SetAllPoints()
button:SetHighlightTexture("Interface\\Addons\\Sorted\\Textures\\Buttons")
button:GetHighlightTexture():SetTexCoord(0.0, 0.98, 0.5675, 0.7375)
button:GetHighlightTexture():SetAllPoints()
button:GetCheckedTexture():ClearAllPoints()
else
button.icon:SetAlpha(0)
button:GetNormalTexture():ClearAllPoints()
if S.Settings.Get("skinning") == S.Skinning.CLEAN then
button:SetHighlightTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Highlight")
button:GetHighlightTexture():SetTexCoord(0.0, 1.0, 0.0, 1.0)
button:GetHighlightTexture():SetVertexColor(0.3, 0.5, 0.8)
button:GetHighlightTexture():SetAllPoints()
button:SetCheckedTexture("Interface\\Addons\\Sorted\\Textures\\Dropdown-Highlight")
button:GetCheckedTexture():SetTexCoord(0.0, 1.0, 0.0, 1.0)
button:GetCheckedTexture():SetVertexColor(1, 0.8, 0)
button:GetCheckedTexture():SetBlendMode("ADD")
button:GetCheckedTexture():SetAllPoints()
else
button:GetHighlightTexture():ClearAllPoints()
button:GetCheckedTexture():ClearAllPoints()
end
button.textShadow:Hide()
end
-- Round icon Categories
else
if button.text then
button.text:Hide()
button.textShadow:Hide()
end
button.icon:AddMaskTexture(button.mask)
if button.squareMask then
button.icon:RemoveMaskTexture(button.squareMask)
end
if S.Settings.Get("skinning") ~= S.Skinning.ADDONSKINS then
button:SetSize(32, 32)
button.icon:SetTexCoord(-0.13, 1.13, -0.13, 1.13)
button.icon:SetAlpha(1)
button.icon:AddMaskTexture(button.mask)
button.mask:SetTexture("Interface\\Addons\\Sorted\\Textures\\Circle-Button-Mask-Large")
button:SetNormalTexture("Interface\\Addons\\Sorted\\Textures\\Circle-Button")
button:GetNormalTexture():SetTexCoord(0.25, 0.5, 0, 0.25)
button:GetNormalTexture():SetAllPoints()
button:SetHighlightTexture("Interface\\Addons\\Sorted\\Textures\\Circle-Button")
button:GetHighlightTexture():SetTexCoord(0.75, 1, 0.25, 0.5)
button:GetHighlightTexture():SetVertexColor(1, 1, 1)
button:GetHighlightTexture():SetAllPoints()
button:SetCheckedTexture("Interface\\Addons\\Sorted\\Textures\\Circle-Button")
button:GetCheckedTexture():SetTexCoord(0, 0.25, 0.25, 0.5)
button:GetCheckedTexture():SetVertexColor(1, 1, 1)
button:GetCheckedTexture():SetAllPoints()
button:GetCheckedTexture():SetBlendMode("BLEND")
else
button:SetSize(29, 29)
button.icon:SetTexCoord(0.07, 0.93, 0.07, 0.93)
button.icon:SetAlpha(1)
button.icon:RemoveMaskTexture(button.mask)
button:GetCheckedTexture():ClearAllPoints()
end
end
end
if selectedCategory and self.numShownCategories < selectedCategory then
f.categoriesFrame.dropdownButton:GetNormalTexture():SetDesaturated(false)
else
f.categoriesFrame.dropdownButton:GetNormalTexture():SetDesaturated(true)
end
end
S.Utils.RunOnEvent(f.categoriesFrame, "SettingChanged-categories2", function(self)
f.categoriesFrame:OnResize()
f.categoriesFrame:Update()
end)
--S.Utils.RunOnEvent(f.categoriesFrame, "Resizing", f.categoriesFrame.OnResize)
S.Utils.RunOnEvent(f.categoriesFrame, "Resized", f.categoriesFrame.OnResize)
S.Utils.RunOnEvent(f.categoriesFrame, "CategorySelected", f.categoriesFrame.Update)
S.Utils.RunOnEvent(f.categoriesFrame, "SettingChanged-desaturateCategories", f.categoriesFrame.Update)
S.Utils.RunOnEvent(f.categoriesFrame, "SettingChanged-categoriesPosition", f.categoriesFrame.UpdatePosition)
S.Utils.RunOnEvent(f.categoriesFrame, "CharacterSelected", function(self)
f.categoriesFrame:OnResize()
f.categoriesFrame:Update()
end)
--[[f.categoriesFrame:SetScript("OnHide", function(self)
S.SelectCategory(nil)
end)]]
S.Utils.RunOnEvent(f.categoriesFrame, "SettingChanged-skinning", f.categoriesFrame.UpdatePosition)
f.settingsButton = CreateFrame("BUTTON", nil, f)
f.settingsButton:SetNormalTexture("Interface\\Addons\\Sorted\\Textures\\BagSlots2x")
f.settingsButton:SetHighlightTexture("Interface\\Addons\\Sorted\\Textures\\BagSlots2x")
f.settingsButton:SetPushedTexture("Interface\\Addons\\Sorted\\Textures\\BagSlots2x")
f.settingsButton:GetNormalTexture():SetTexCoord(0, 0.375, 0, 0.375)
f.settingsButton:GetHighlightTexture():SetTexCoord(0.375, 0.75, 0, 0.375)
f.settingsButton:GetPushedTexture():SetTexCoord(0, 0.375, 0, 0.375)
f.settingsButton:SetPoint("CENTER", f, "TOPLEFT", 20, -4)
f.settingsButton:SetSize(40, 40)
f.settingsButton:GetNormalTexture():ClearAllPoints()
f.settingsButton:GetNormalTexture():SetPoint("CENTER")
f.settingsButton:GetNormalTexture():SetSize(64, 64)
f.settingsButton:GetHighlightTexture():ClearAllPoints()
f.settingsButton:GetHighlightTexture():SetPoint("CENTER")
f.settingsButton:GetHighlightTexture():SetSize(64, 64)
f.settingsButton:GetPushedTexture():ClearAllPoints()
f.settingsButton:GetPushedTexture():SetPoint("CENTER")
f.settingsButton:GetPushedTexture():SetSize(64, 64)
f.settingsButton:SetFrameLevel(600)
f.settingsButton.textFrame = CreateFrame("FRAME", nil, f.settingsButton)
f.settingsButton.textFrame:SetAllPoints()
f.settingsButton.textFrame:SetFrameLevel(605)
f.settingsButton.text = f.settingsButton.textFrame:CreateTexture()
f.settingsButton.text:SetTexture("Interface\\Addons\\Sorted\\Textures\\Portrait-Text")
f.settingsButton.text:SetPoint("CENTER")
f.settingsButton.text:SetSize(64, 64)
f.settingsButton.text:SetDrawLayer("OVERLAY")
f.settingsButton.text:Hide()
f.settingsButton:HookScript("OnEnter", function(self)
self.text:Show()
S.Tooltip.CreateLocalized(self, "ANCHOR_RIGHT", "TOOLTIP_CONFIG")
end)
f.settingsButton:HookScript("OnLeave", function(self)
self.text:Hide()
S.Tooltip.Cancel()
end)
f.settingsButton:HookScript("OnClick", function(self)
S.settingsFrame:Show()
end)
f.foot = CreateFrame("FRAME", nil, f)
f.foot:SetPoint("LEFT")
f.foot:SetPoint("BOTTOMRIGHT")
f.foot:SetHeight(32)
f.foot.resizeButtonFrame = CreateFrame("FRAME", nil, f)
f.foot.resizeButtonFrame:SetPoint("BOTTOMRIGHT")
f.foot.resizeButtonFrame:SetSize(24, 24)
f.foot.resizeButton = CreateFrame("BUTTON", nil, f.foot.resizeButtonFrame)
f.foot.resizeButton:SetNormalTexture("Interface\\Addons\\Sorted\\Textures\\UI-Resize-Button-Highlight")
f.foot.resizeButton:SetHighlightTexture("Interface\\Addons\\Sorted\\Textures\\UI-Resize-Button-Highlight")
f.foot.resizeButton:SetPushedTexture("Interface\\Addons\\Sorted\\Textures\\UI-Resize-Button-Highlight")
f.foot.resizeButton:GetNormalTexture():SetTexCoord(0, 1, 0.1, 0.6)
f.foot.resizeButton:GetHighlightTexture():SetTexCoord(0, 1, 0.1, 0.6)
f.foot.resizeButton:GetPushedTexture():SetTexCoord(0, 1, 0.1, 0.6)
f.foot.resizeButton:SetPoint("TOPLEFT")
f.foot.resizeButton:SetPoint("BOTTOMRIGHT")
local resizingFrame = CreateFrame("FRAME")
resizingFrame:SetResizable(true)
S.FrameTools.AddBorder(resizingFrame, "highlight", "Interface\\Addons\\Sorted\\Textures\\Place-Item-Highlight", 8, 2, true)
for k,v in pairs(resizingFrame.highlight.parts) do
v:SetBlendMode("ADD")
end
resizingFrame.highlight:SetFrameStrata("FULLSCREEN")
f.foot.resizeButton:SetScript("OnMouseDown", function(self, button)
if button == "LeftButton" then
if f:GetNumPoints() > 0 then
resizingFrame:SetParent(f:GetParent())
resizingFrame:ClearAllPoints()
for i = 1, f:GetNumPoints() do
local point, relativeTo, relativePoint, offsetX, offsetY = f:GetPoint(i)
resizingFrame:SetPoint(point, relativeTo, relativePoint, offsetX, offsetY)
end
resizingFrame:SetWidth(f:GetWidth())
resizingFrame:SetHeight(f:GetHeight())
else
-- Frame hasn't been positioned yet, so use defaults
resizingFrame:SetParent(UIParent)
resizingFrame:SetPoint("BOTTOMRIGHT", -64, 128)
resizingFrame:SetSize(800, 600)
end
resizingFrame:SetResizeBounds(f:GetResizeBounds())
resizingFrame:Show()
resizingFrame:StartSizing()
--[[f.categoriesFrame:Hide()
f.head.searchBoxFrame:Hide()]]
end
end)
f.foot.resizeButton:SetScript("OnMouseUp", function(self, button)
if button == "LeftButton" then
resizingFrame:StopMovingOrSizing()
f:ClearAllPoints()
for i = 1, resizingFrame:GetNumPoints() do
local point, relativeTo, relativePoint, offsetX, offsetY = resizingFrame:GetPoint(i)
f:SetPoint(point, relativeTo, relativePoint, offsetX, offsetY)
end
f:SetWidth(resizingFrame:GetWidth())
f:SetHeight(resizingFrame:GetHeight())
resizingFrame:Hide()
S.Utils.TriggerEvent("Resized")
f:SavePosition()
--[[if not f.minimised then
f.categoriesFrame:Show()
end
f.head.searchBoxFrame:Show()]]
end
end)
f.foot.resizeButton:SetScript("OnEnter", function(self)
SetCursor("Interface\\CURSOR\\UI-Cursor-SizeRight")
end)
f.foot.resizeButton:SetScript("OnLeave", function(self)
ResetCursor()
end)
f.foot.moneyFrame = S.FrameTools.CreateMoneyFrame(f.foot)
f.foot.moneyFrame:SetPoint("BOTTOMRIGHT", -24, 0)
f.foot.moneyFrame:HookScript("OnEnter", function(self)
S.Tooltip.Schedule(function()
GameTooltip:SetOwner(self, "ANCHOR_TOPRIGHT")
GameTooltip:ClearLines()
local totalMoney = S.Data.GetTotalMoney()
local orderedKeys = {}
for realm, v in pairs(totalMoney) do
table.insert(orderedKeys, realm)
end
table.sort(orderedKeys)
GameTooltip:AddLine(S.Localize("TOOLTIP_TITLE_ACCOUNT_GOLD"), 1, 1, 1)
for i, realm in ipairs(orderedKeys) do
local v = totalMoney[realm]
local allianceMoney = v.alliance
local hordeMoney = v.horde
if realm == GetRealmName() then
if UnitFactionGroup("player") == "Alliance" then
allianceMoney = allianceMoney + GetMoney()
else
hordeMoney = hordeMoney + GetMoney()
end
end
GameTooltip:AddLine(" ")
GameTooltip:AddLine(" "..realm)
GameTooltip:AddLine("|TInterface\\WORLDSTATEFRAME\\AllianceIcon:18|t "..GetMoneyString(allianceMoney, true).. " ", 1, 1, 1)
GameTooltip:AddLine("|TInterface\\PVPFrame\\PVP-Currency-Horde:18|t "..GetMoneyString(hordeMoney, true).." ", 1, 1, 1)
end
GameTooltip:Show()
end)
end)
f.foot.moneyFrame:HookScript("OnLeave", function(self)
S.Tooltip.Cancel()
end)
function f.foot.moneyFrame.Update(self)
S.GetData(UnitGUID("player")).money = GetMoney()
local money = S.GetData().money
if not money then money = 0 end -- for new characters without money
if money >= 10000000000 then -- Hide silvers/coppers when player has >1mil gold
money = math.floor(money / 10000) * 10000
elseif money >= 100000000 then -- Hide coppers when player has >10k gold
money = math.floor(money / 100) * 100
end
self.text:SetText(GetMoneyString(money, true))
self:SetWidth(self.text:GetWidth() + 40)
end
S.Utils.RunOnEvent(f.foot.moneyFrame, "FontChanged", function(self, event, setting, value)
self:Update()
end)
S.Utils.RunOnEvent(f.foot.moneyFrame, "CharacterSelected", f.foot.moneyFrame.Update)
f.foot.moneyFrame:SetScript("OnShow", f.foot.moneyFrame.Update)
--f.foot.moneyFrame:RegisterEvent("CURRENCY_DISPLAY_UPDATE")
f.foot.moneyFrame:RegisterEvent("PLAYER_MONEY")
f.foot.moneyFrame:SetScript("OnEvent", f.foot.moneyFrame.Update)
f.foot.sellTrashButton = CreateFrame("BUTTON", nil, f.foot)
local stb = f.foot.sellTrashButton
stb:SetNormalTexture("Interface\\Addons\\Sorted\\Textures\\Sell-Trash-Button")
stb:SetHighlightTexture("Interface\\Addons\\Sorted\\Textures\\Sell-Trash-Button")
stb:SetPushedTexture("Interface\\Addons\\Sorted\\Textures\\Sell-Trash-Button")
stb:GetNormalTexture():SetTexCoord(0, 0.25, 0.25, 0.75)
stb:GetHighlightTexture():SetTexCoord(0, 0.25, 0.25, 0.75)
stb:GetPushedTexture():SetTexCoord(0.25, 0.5, 0.25, 0.75)
stb:SetPoint("RIGHT", f.foot.moneyFrame, "LEFT")
stb:SetSize(4, 32)
stb:SetScript("OnEnter", function(self)
S.Tooltip.CreateLocalized(self, "ANCHOR_TOP", "BUTTON_SELL_TRASH")
end)
stb:SetScript("OnLeave", function(self)
S.Tooltip.Cancel()
end)
stb:SetScript("OnClick", function(self)
S.Utils.VendorTrash()
end)
stb:SetScript("OnMouseDown", function(self)
stb:GetHighlightTexture():SetTexCoord(0.25, 0.5, 0.25, 0.75)
end)
stb:SetScript("OnMouseUp", function(self)
stb:GetHighlightTexture():SetTexCoord(0, 0.25, 0.25, 0.75)
end)
stb:RegisterEvent("MERCHANT_SHOW")
stb:RegisterEvent("MERCHANT_CLOSED")
stb:SetScript("OnEvent", function(self, event)
if event == "MERCHANT_SHOW" then
self:Show()
self:SetWidth(64)
else
self:Hide()
self:SetWidth(4)
end
end)
stb:Hide()
--[[f.foot.bagsFrame = CreateFrame("FRAME", nil, f.foot)
f.foot.bagsFrame:SetPoint("LEFT", f.foot.freeSpace, "RIGHT")
f.foot.bagsFrame:SetPoint("BOTTOM")
f.foot.bagsFrame:SetPoint("TOP")
f.foot.bagsFrame.bags = {}
for i = 1, S.Utils.GetMaxNumBags() do
local button = S.FrameTools.CreateCircleButton(f.foot.bagsFrame, true)
button:SetPoint("CENTER", f.foot.bagsFrame, "LEFT", -16 + i * 32, 0)
f.foot.bagsFrame.bags[i] = button
end]]
f.main = CreateFrame("FRAME", nil, f)
f.main:SetPoint("TOP", f.head, "BOTTOM")
f.main:SetPoint("LEFT", 1, 0)
f.main:SetPoint("BOTTOMRIGHT")
-- PRIMARY ITEM LIST
S.primaryItemList = S.CreateItemList(S.primaryFrame.main, "BAGS", 400, "ContainerFrameItemButtonTemplate")
table.insert(S.itemLists, S.primaryItemList)
for _, containerID in pairs(S.Utils.ContainersOfType("BAGS")) do
if containerID ~= BACKPACK_CONTAINER then
S.primaryItemList:AddContainerButton(containerID, containerID > NUM_BAG_SLOTS) -- If reagent bag, make it grey
end
end
-- Disenchant button
f.deButton = CreateFrame("BUTTON", nil, f, "InsecureActionButtonTemplate")
f.deButton:RegisterForClicks("AnyUp", "AnyDown")
f.deButton:SetAttribute("type", "macro")
f.deButton:SetAttribute("macrotext", "/cast Disenchant")
f.deButton:SetSize(30, 30)
f.deButton:SetPoint("RIGHT", f.foot.sellTrashButton, "LEFT")
f.deButton:SetNormalTexture("Interface\\Buttons\\UI-GroupLoot-DE-Up")
f.deButton:SetHighlightTexture("Interface\\Buttons\\UI-GroupLoot-DE-Highlight")
f.deButton:SetPushedTexture("Interface\\Buttons\\UI-GroupLoot-DE-Down")
f:HookScript("OnShow", function(self)
self.deButton:SetShown(IsUsableSpell("Disenchant"))
end)
f.deButton:HookScript("OnEnter", function(self)
GameTooltip:SetOwner(self, "ANCHOR_TOP")
GameTooltip:ClearLines()
GameTooltip:SetSpellByID(13262)
GameTooltip:Show()
end)
f.deButton:HookScript("OnLeave", function(self)
GameTooltip:Hide()
end)
f.deButton:RegisterEvent("SPELLS_CHANGED")
f.deButton:HookScript("OnEvent", function(self, event)
if event == "SPELLS_CHANGED" then
self:SetShown(IsUsableSpell("Disenchant"))
end
end)
f.deButton:SetScript("OnUpdate", function(self, event)
self:GetNormalTexture():SetDesaturated(InCombatLockdown())
self:GetHighlightTexture():SetDesaturated(InCombatLockdown())
self:GetPushedTexture():SetDesaturated(InCombatLockdown())
end)