local _, S = ... local pairs, ipairs, string, type, time = pairs, ipairs, string, type, time 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: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, "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 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) f.minimised = false 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() 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", -68, -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 = f.sideTabs[f.selectedSideTab].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", "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", "ReagentBankItemButtonGenericTemplate") table.insert(S.itemLists, S.ReagentItemList) elseif S.WoWVersion() <= 3 then S.KeyringItemList = S.CreateItemList(f.sideFrame.content, "KEYRING", "ContainerFrameItemButtonTemplate") table.insert(S.itemLists, S.KeyringItemList) end -- SIDE TABS (Bank, reagents, currency) f.sideTabs = {} f.selectedSideTab = nil local function SelectSideTab(index, dontToggle) f.sideTabFrame:ClearAllPoints() local currentSkin = S.Skinning.GetSkin() if f.selectedSideTab == index and not dontToggle or index == 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 = index 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 == i) end if f.selectedSideTab then f.sideFrame.minWidth = f.sideTabs[f.selectedSideTab].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.AS.Color)) 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.AS.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, id, itemList) local b = CreateFrame("BUTTON", nil, parent) b:SetPoint("RIGHT", parent, "LEFT") b:SetSize(34, 100) b:SetID(id) 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:GetID()) 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:GetID() then self:SetBackdropBorderColor(unpack(S.AS.Color)) else self:SetBackdropBorderColor(unpack(S.AS.BorderColor)) end end end) b:SetScript("OnLeave", function(self) if f.selectedSideTab == self:GetID() 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:GetID() then self:SetBackdropBorderColor(unpack(S.AS.Color)) else self:SetBackdropBorderColor(unpack(S.AS.BorderColor)) end end end) S.Utils.RunOnEvent(b, "FontChanged", UpdateSideTabHeight) b:Update() 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 f.sideTabs[1] = CreateSideTab(f.sideTabFrame, S.Localize("TAB_BANK"), 1, S.BankItemList) f.sideTabs[2] = CreateSideTab(f.sideTabFrame, KEYRING, 2, S.KeyringItemList) f.sideTabs[1]:SetPoint("BOTTOM") f.sideTabs[2]:SetPoint("BOTTOM", f.sideTabs[1], "TOP", 0, -4) SelectSideTab(nil) S.Utils.RunOnEvent(nil, "BankOpened", function() SelectSideTab(1, true) end) else local id = 1 -- Reagent bag tab --[[if S.WoWVersion() >= 10 then f.sideTabs[id] = CreateSideTab(f.sideTabFrame, S.Localize("REAGENT_BAG"), id, S.ReagentBagList) f.sideTabs[id]:SetPoint("BOTTOM") id = id + 1 f.sideTabs[id] = CreateSideTab(f.sideTabFrame, S.Localize("TAB_CURRENCY"), id, S.CurrencyList) f.sideTabs[id]:SetPoint("BOTTOM", f.sideTabs[id - 1], "TOP", 0, -4) else]] f.sideTabs[id] = CreateSideTab(f.sideTabFrame, S.Localize("TAB_CURRENCY"), id, S.CurrencyList) f.sideTabs[id]:SetPoint("BOTTOM") --end id = id + 1 f.sideTabs[id] = CreateSideTab(f.sideTabFrame, S.Localize("TAB_BANK"), id, S.BankItemList) f.sideTabs[id]:SetPoint("BOTTOM", f.sideTabs[id - 1], "TOP", 0, -4) id = id + 1 if S.WoWVersion() >= 6 then f.sideTabs[id] = CreateSideTab(f.sideTabFrame, S.Localize("TAB_REAGENTS"), id, S.ReagentItemList) f.sideTabs[id]:SetPoint("BOTTOM", f.sideTabs[id - 1], "TOP", 0, -4) elseif S.WoWVersion() <= 3 then f.sideTabs[id] = CreateSideTab(f.sideTabFrame, KEYRING, id, S.KeyringItemList) f.sideTabs[id]:SetPoint("BOTTOM", f.sideTabs[id - 1], "TOP", 0, -4) end SelectSideTab(nil) S.Utils.RunOnEvent(nil, "BankOpened", function() SelectSideTab(2, true) end) end S.Utils.RunOnEvent(nil, "BankClosed", function() SelectSideTab(nil, true) end) function S.AddSideTab(text) local f = CreateFrame("FRAME", nil, S.primaryFrame.sideFrame.content) f:SetAllPoints() local tabID = #S.primaryFrame.sideTabs + 1 local tab = CreateSideTab(S.primaryFrame.sideTabFrame, text, tabID, f) tab:SetPoint("BOTTOM", S.primaryFrame.sideTabs[tabID - 1], "TOP", 0, -4) S.primaryFrame.sideTabs[tabID] = tab return tab, f end -- 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() 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", 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, -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") function dropdown:Update() self.text:SetText(S.GetData().name) self.text:SetTextColor(S.Utils.GetClassColor(S.GetData().class):GetRGB()) self:SetWidth(self.text:GetStringWidth() + 24) end S.Utils.RunOnEvent(dropdown, "CharacterSelected", 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:HookScript("OnTextChanged", function(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("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) 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 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 self.numShownCategories = floor((self:GetHeight() - 4) / 32) local height = 0 self.dropdownButton:Hide() if self.numShownCategories > #categories then self.numShownCategories = #categories elseif self.numShownCategories < #categories then self.dropdownButton:Show() self.dropdownButton:SetPoint("TOP", 0, -self.numShownCategories * 30 -2) 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 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 else 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("BOTTOMRIGHT", f, -4, 16) if not f:GetMinimised() then f.main:SetPoint("BOTTOMRIGHT", -34, 0) 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") 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 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) 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") f.foot.resizeButton:SetScript("OnMouseDown", function(self, button) if button == "LeftButton" then f:StartSizing() --[[f.categoriesFrame:Hide() f.head.searchBoxFrame:Hide()]] end end) f.foot.resizeButton:SetScript("OnMouseUp", function(self, button) if button == "LeftButton" then f:StopMovingOrSizing() S.Utils.TriggerEvent("Resized") --[[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", "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:SetAttribute("type", "spell") f.deButton:SetAttribute("spell", "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)