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.

200 lines
6.7 KiB

-- ///////////////////////////////////////////////////////////////////////////////////////////
--
-- Module to create the saved set character scrolling menu
-- ///////////////////////////////////////////////////////////////////////////////////////////
local addonName, addon = ...
addon = LibStub("AceAddon-3.0"):GetAddon(addonName)
local L = LibStub("AceLocale-3.0"):GetLocale(addonName)
BetterWardrobeSavedOutfitDropDownMenuMixin = {}
function BetterWardrobeSavedOutfitDropDownMenuMixin:OnLoad()
local button = _G[self:GetName().."Button"]
button:SetScript("OnMouseDown", function(self)
PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON)
BetterWardrobeSavedOutfitDropdownFrame:Toggle(self:GetParent())
end
)
BW_UIDropDownMenu_JustifyText(self, "LEFT")
if ( self.width ) then
BW_UIDropDownMenu_SetWidth(self, self.width)
end
end
function BetterWardrobeSavedOutfitDropDownMenuMixin:OnShow()
end
function BetterWardrobeSavedOutfitDropDownMenuMixin:OnHide()
if BetterWardrobeSavedOutfitDropdownFrame.dropDown == self then
BetterWardrobeSavedOutfitDropdownFrame:Hide()
end
end
----
local OUTFIT_FRAME_MIN_STRING_WIDTH = 152
local OUTFIT_FRAME_MAX_STRING_WIDTH = 216
local OUTFIT_FRAME_ADDED_PIXELS = 90 -- pixels added to string width
BetterWardrobeSavedOutfitDropdownFrameMixin = {}
function BetterWardrobeSavedOutfitDropdownFrameMixin:OnHide()
self.timer = nil
end
function BetterWardrobeSavedOutfitDropdownFrameMixin:Toggle(dropDown)
if ( self.dropDown == dropDown and self:IsShown() ) then
BetterWardrobeSavedOutfitDropdownFrame:Hide()
else
CloseDropDownMenus()
self.dropDown = dropDown
self:Show()
self:SetPoint("TOPLEFT", self.dropDown, "BOTTOMLEFT", 8, -3)
self:Update()
end
end
function BetterWardrobeSavedOutfitDropdownFrameMixin:OnUpdate(elapsed)
local mouseFocus = GetMouseFocus()
for i = 1, #self.Buttons do
local button = self.Buttons[i]
if ( button == mouseFocus or button:IsMouseOver() ) then
button.Highlight:Show()
else
button.Highlight:Hide()
end
end
if ( BW_UIDROPDOWNMENU_OPEN_MENU ) then
self:Hide()
end
if ( self.timer ) then
self.timer = self.timer - elapsed
if ( self.timer < 0 ) then
self:Hide()
end
end
end
function BetterWardrobeSavedOutfitDropdownFrameMixin:StartHideCountDown()
self.timer = BW_UIDROPDOWNMENU_SHOW_TIME
end
function BetterWardrobeSavedOutfitDropdownFrameMixin:StopHideCountDown()
self.timer = nil
end
function BetterWardrobeSavedOutfitDropdownFrameMixin:Update()
local buttons = self.Buttons
local numButtons = 1
local stringWidth = 0
local minStringWidth = self.dropDown.minMenuStringWidth or OUTFIT_FRAME_MIN_STRING_WIDTH
local maxStringWidth = self.dropDown.maxMenuStringWidth or OUTFIT_FRAME_MAX_STRING_WIDTH
self:SetWidth(maxStringWidth + OUTFIT_FRAME_ADDED_PIXELS)
for name in pairs(addon.setdb.global.sets)do
local button = buttons[numButtons]
if ( not button ) then
button = CreateFrame("BUTTON", nil, self.Content, "BetterWardrobeCharacterOutfitButtonTemplate")
if numButtons == 1 then
button:SetPoint("TOPLEFT", self.Content, "TOPLEFT")
button:SetPoint("TOPRIGHT", self.Content, "TOPRIGHT", -20, 0)
else
button:SetPoint("TOPLEFT", buttons[numButtons-1], "BOTTOMLEFT", 0, 0)
button:SetPoint("TOPRIGHT", buttons[numButtons-1], "BOTTOMRIGHT", 0, 0)
end
end
button:Show();
button.name = name
button.Selection:Hide();
button.Check:Hide();
button.Text:SetWidth(0);
button:SetText(NORMAL_FONT_COLOR_CODE..name..FONT_COLOR_CODE_CLOSE);
stringWidth = max(stringWidth, button.Text:GetStringWidth())
if ( button.Text:GetStringWidth() > maxStringWidth ) then
button.Text:SetWidth(maxStringWidth)
end
numButtons = numButtons + 1
end
for count = numButtons, #buttons do
buttons[count]:Hide()
end
stringWidth = max(stringWidth, minStringWidth)
stringWidth = min(stringWidth, maxStringWidth)
self:SetWidth(stringWidth + OUTFIT_FRAME_ADDED_PIXELS)
if numButtons > 12 then
self:SetHeight(30 + 12 * 20)
else
self:SetHeight(30 + numButtons * 20)
end
end
function BetterWardrobeSavedOutfitDropdownFrameMixin:CreateScrollFrame()
self:SetFrameLevel(5000)
self.scrollframe = self.scrollframe or CreateFrame("ScrollFrame", self:GetName().."ScrollFrame", self, "UIPanelScrollFrameTemplate")
self.scrollchild = self.scrollchild or CreateFrame("Frame") -- not sure what happens if you do, but to be safe, don't parent this yet (or do anything with it)
local scrollbarName = self.scrollframe:GetName()
self.scrollbar = _G[scrollbarName.."ScrollBar"]
self.scrollupbutton = _G[scrollbarName.."ScrollBarScrollUpButton"]
self.scrolldownbutton = _G[scrollbarName.."ScrollBarScrollDownButton"]
self.scrollupbutton:ClearAllPoints()
self.scrollupbutton:SetPoint("TOPRIGHT", self.scrollframe, "TOPRIGHT", -2, -2)
self.scrolldownbutton:ClearAllPoints()
self.scrolldownbutton:SetPoint("BOTTOMRIGHT", self.scrollframe, "BOTTOMRIGHT", -2, 2)
self.scrollbar:ClearAllPoints()
self.scrollbar:SetPoint("TOP", self.scrollupbutton, "BOTTOM", 0, -2)
self.scrollbar:SetPoint("BOTTOM", self.scrolldownbutton, "TOP", 0, 2)
self.scrollframe:SetScrollChild(self.scrollchild)
self.scrollframe:SetAllPoints(self)
self.scrollframe:ClearAllPoints()
self.scrollframe:SetPoint("TOPLEFT", self, "TOPLEFT", 11, -15)
self.scrollframe:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", -11, 15)
self.scrollchild:SetSize(self.scrollframe:GetWidth(), ( self.scrollframe:GetHeight() * 2 ))
self.moduleoptions = self.moduleoptions or CreateFrame("Frame", nil, self.scrollchild)
self.moduleoptions:SetAllPoints(self.scrollchild)
self.Content = self.moduleoptions
function self.moduleoptions:StartHideCountDown()
return BetterWardrobeSavedOutfitDropdownFrame:StartHideCountDown()
end
function self.moduleoptions:StopHideCountDown()
return BetterWardrobeSavedOutfitDropdownFrame:StopHideCountDown()
end
self.moduleoptions.Buttons = self.moduleoptions.Buttons or {}
self.Buttons = self.moduleoptions.Buttons
end
--===================================================================================================================================
BetterWardrobeSavedOutfitButtonTemplate = { }
function BetterWardrobeSavedOutfitButtonTemplate:OnClick()
PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON)
BetterWardrobeSavedOutfitDropdownFrame:Hide()
if ( self.name ~= addon.setdb:GetCurrentProfile() ) then
addon.SelecteSavedList = self.name
else
addon.SelecteSavedList = false
end
BetterWardrobeCollectionFrame.SetsCollectionFrame:OnSearchUpdate()
BetterWardrobeCollectionFrame.SetsTransmogFrame:OnSearchUpdate()
BW_UIDropDownMenu_SetText(SavedOutfitDropDownMenu, self.name)
end