WoWInterface SVN PhanxConfigWidgets

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 163 to Rev 164
    Reverse comparison

Rev 163 → Rev 164

trunk/PhanxConfig-ScrollingDropdown/PhanxConfig-ScrollingDropdown.lua
18,8 → 18,50
 
local MAX_LIST_SIZE = 15
 
-------------------------------------------------------------------------
------------------------------------------------------------------------
 
local CreateList
 
local function OpenScrollingDropdown(dropdown)
local list = dropdown.list
if not list then
list = CreateList(dropdown)
dropdown.list = list
end
 
local show = not list:IsShown()
CloseDropDownMenus()
 
if show then
list:Show()
list:Raise()
local selectedIndex
local items, selected = dropdown.items, dropdown.selected
for i = 1, #items do
if items[i] == selected then
selectedIndex = i
break
end
end
if selectedIndex then
local _, maxScroll = list.scrollFrame.ScrollBar:GetMinMaxValues()
list.scrollFrame.ScrollBar:SetValue((maxScroll / (#items - 15)) * (selectedIndex - 5))
-- #TODO: where does this 15 come from in BlizzBugsSuck ???
end
end
end
 
local function CloseScrollingDropdowns(_, _, dropDownFrame, _, _, _, _, clickedButton)
for i = 1, #lib.listFrames do
lib.listFrames[i]:Hide()
end
end
 
hooksecurefunc("CloseDropDownMenus", CloseScrollingDropdowns)
hooksecurefunc("ToggleDropDownMenu", CloseScrollingDropdowns)
 
------------------------------------------------------------------------
 
local function Frame_OnEnter(self)
if self.OnEnter then
self:OnEnter()
46,7 → 88,7
end
end
 
-------------------------------------------------------------------------
------------------------------------------------------------------------
 
local function ListButton_OnClick(self)
local dropdown = self:GetParent():GetParent()
60,6 → 102,10
end
 
PlaySound("UChatScrollButton")
 
if dropdown.keepShownOnClick then
OpenScrollingDropdown(dropdown)
end
end
 
local function CreateListButton(parent)
101,6 → 147,11
local buttons = self.buttons
local dropdown = self:GetParent()
local items = dropdown.items
 
if dropdown.PreUpdate then
dropdown:PreUpdate(items)
end
 
local listSize = min(#items, MAX_LIST_SIZE)
 
local scrollFrame = self.scrollFrame
112,7 → 163,11
local width = 0
for i = 1, #items do
local item = items[i]
self.text:SetText(item)
if type(item) == "table" then
self.text:SetText(item.text or item.value)
else
self.text:SetText(item)
end
width = max(width, self.text:GetStringWidth())
end
 
129,13 → 184,14
 
local item = items[index]
if item then
button.value = item
button:SetText(item)
 
if item == selected then
button.check:Show()
if type(item) == "table" then
button.value = item.value
button:SetText(item.text or item.value)
button.check:SetShown(item.selected or item.value == selected)
else
button.check:Hide()
button.value = item
button:SetText(item)
button.check:SetShown(item == selected)
end
 
button:SetWidth(width)
158,7 → 214,7
end
 
local id = 0
local function CreateList(parent)
function CreateList(parent) -- local
local dropdown = parent
if dropdown.list then
return dropdown.list
184,7 → 240,6
button:SetPoint("TOPLEFT", 15, -15)
end
t[i] = button
 
return button
end })
 
210,47 → 265,13
return list
end
 
-------------------------------------------------------------------------
------------------------------------------------------------------------
 
local function CloseScrollingDropdowns(_, _, dropDownFrame, _, _, _, _, clickedButton)
for i = 1, #lib.listFrames do
lib.listFrames[i]:Hide()
end
end
 
hooksecurefunc("CloseDropDownMenus", CloseScrollingDropdowns)
hooksecurefunc("ToggleDropDownMenu", CloseScrollingDropdowns)
 
local function Button_OnClick(self)
PlaySound("igMainMenuOptionCheckBoxOn")
 
local dropdown = self:GetParent()
local list = dropdown.list
if not list then
list = CreateList(dropdown)
dropdown.list = list
end
 
local show = not list:IsShown()
CloseDropDownMenus()
 
if show then
list:Show()
list:Raise()
local selectedIndex
local items, selected = dropdown.items, dropdown.selected
for i = 1, #items do
if items[i] == selected then
selectedIndex = i
break
end
end
if selectedIndex then
local _, maxScroll = list.scrollFrame.ScrollBar:GetMinMaxValues()
list.scrollFrame.ScrollBar:SetValue((maxScroll / (#items - 15)) * (selectedIndex - 5))
-- #TODO: where does this 15 come from in BlizzBugsSuck ???
end
end
OpenScrollingDropdown(dropdown)
end
 
local function Button_OnEnter(self)
297,6 → 318,10
self.items = list
end
 
function methods:SetKeepShownOnClick(value)
self.keepShownOnClick = value
end
 
function methods:Enable()
self.labelText:SetFontObject(GameFontNormal)
self.valueText:SetFontObject(GameFontHighlightSmall)
310,7 → 335,7
 
------------------------------------------------------------------------
 
function lib:New(parent, name, tooltipText, items)
function lib:New(parent, name, tooltipText, items, keepShownOnClick)
assert(type(parent) == "table" and type(rawget(parent, 0)) == "userdata", "PhanxConfig-ScrollingDropdown: parent must be a frame")
 
local dropdown = CreateFrame("Frame", nil, parent)
400,6 → 425,7
dropdown:SetLabel(name)
dropdown:SetTooltip(tooltipText)
dropdown:SetList(items)
dropdown.keepShownOnClick = keepShownOnClick
 
-- backwards compat?
dropdown.dropdown = dropdown