WoWInterface SVN PhanxConfigWidgets

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /trunk
    from Rev 1 to Rev 2
    Reverse comparison

Rev 1 → Rev 2

Checkbox/PhanxConfig-Checkbox.lua New file
0,0 → 1,46
--[[--------------------------------------------------------------------
PhanxConfig-Checkbox
Simple checkbox widget generator. Requires LibStub.
Based on tekKonfig-Checkbox by Tekkub.
----------------------------------------------------------------------]]
 
local lib, oldminor = LibStub:NewLibrary("PhanxConfig-Checkbox", 1)
if not lib then return end
 
local function OnEnter(self)
if self.hint then
GameTooltip:SetOwner(self, "ANCHOR_RIGHT")
GameTooltip:SetText(self.hint, nil, nil, nil, nil, true)
end
end
 
local function OnLeave()
GameTooltip:Hide()
end
 
function lib.CreateCheckbox(parent, text, size)
local check = CreateFrame("CheckButton", nil, parent)
check:SetWidth(size or 26)
check:SetHeight(size or 26)
 
check:SetHitRectInsets(0, -100, 0, 0)
 
check:SetNormalTexture("Interface\\Buttons\\UI-CheckBox-Up")
check:SetPushedTexture("Interface\\Buttons\\UI-CheckBox-Down")
check:SetHighlightTexture("Interface\\Buttons\\UI-CheckBox-Highlight")
check:SetDisabledCheckedTexture("Interface\\Buttons\\UI-CheckBox-Check-Disabled")
check:SetCheckedTexture("Interface\\Buttons\\UI-CheckBox-Check")
 
check:SetScript("OnEnter", OnEnter)
check:SetScript("OnLeave", OnLeave)
 
check:SetScript("OnClick", Checkbox_OnClick)
 
local label = check:CreateFontString(nil, "ARTWORK", "GameFontHighlight")
label:SetPoint("LEFT", check, "RIGHT", 0, 1)
label:SetText(text)
 
check.label = label
 
return check
end
\ No newline at end of file
ScrollingDropdown/PhanxConfig-ScrollingDropdown.lua New file
0,0 → 1,176
--[[--------------------------------------------------------------------
PhanxConfig-ScrollingDropdown
Simple scrolling dropdown widget generator. Requires LibStub.
Based on tekKonfig-Dropdown by Tekkub and OmniCC_Options by Tuller.
Requires PhanxConfig-Dropdown.
----------------------------------------------------------------------]]
 
local PhanxConfigDropdown = LibStub:GetLibrary("PhanxConfig-Dropdown", true)
assert(PhanxConfigDropdown, "PhanxConfig-ScrollingDropdown requires PhanxConfig-Dropdown!")
 
local lib, oldminor = LibStub:NewLibrary("PhanxConfig-ScrollingDropdown", 1)
if not lib then return end
 
local MAX_LIST_SIZE = 15
 
local function ListButton_OnClick(self)
local dropdown = self:GetParent():GetParent()
dropdown.list.selected = self.value
dropdown.list:Hide()
dropdown.value:SetText(self.value)
 
if dropdown.OnValueChanged then
dropdown:OnValueChanged(self.value)
end
 
PlaySound("UChatScrollButton")
end
 
local function CreateListButton(parent)
local button = CreateFrame("Button", nil, parent)
button:SetHeight(UIDROPDOWNMENU_BUTTON_HEIGHT)
 
button.label = button:CreateFontString()
button.label:SetFont("Fonts\\FRIZQT__.ttf", UIDROPDOWNMENU_DEFAULT_TEXT_HEIGHT)
button.label:SetJustifyH("LEFT")
button.label:SetPoint("LEFT", 27, 0)
 
button.check = button:CreateTexture(nil, "ARTWORK")
button.check:SetWidth(24)
button.check:SetHeight(24)
button.check:SetTexture("Interface\\Buttons\\UI-CheckBox-Check")
button.check:SetPoint("LEFT")
 
local highlight = button:CreateTexture(nil, "BACKGROUND")
highlight:SetAllPoints(button)
highlight:SetTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight")
highlight:SetAlpha(0.4)
highlight:SetBlendMode("ADD")
highlight:Hide()
button:SetHighlightTexture(highlight)
 
button:SetScript("OnClick", ListButton_OnClick)
 
return button
end
 
local function UpdateList(self)
local buttons = self.buttons
local items = self:GetParent().items
local listSize = min(#items, MAX_LIST_SIZE)
 
local scrollFrame = self.scrollFrame
local offset = scrollFrame.offset
FauxScrollFrame_Update(scrollFrame, #items, listSize, UIDROPDOWNMENU_BUTTON_HEIGHT)
 
for i = 1, listSize do
local index = i + offset
local button = self.buttons[i]
 
local item = items[index]
if item then
button.value = item
button.label:SetText(item)
 
if item == self.selected then
button.check:Show()
else
button.check:Hide()
end
 
button:SetWidth(self.width)
button:Show()
else
button.value = nil
button.label:SetText()
button.check:Hide()
button:Hide()
end
end
 
for i = listSize + 1, #buttons do
buttons[i]:Hide()
end
 
if self.scrollFrame:IsShown() then
self:SetWidth(self.width + 50)
else
self:SetWidth(self.width + 30)
end
self:SetHeight((listSize * UIDROPDOWNMENU_BUTTON_HEIGHT) + (UIDROPDOWNMENU_BORDER_HEIGHT * 2))
end
 
local function CreateList(parent)
local list = CreateFrame("Button", parent:GetName() .. "List", parent)
list:SetToplevel(true)
list:Raise()
 
list.text = list:CreateFontString()
list.text:SetFont("Fonts\\FRIZQT__.ttf", UIDROPDOWNMENU_DEFAULT_TEXT_HEIGHT + 2)
 
list.buttons = setmetatable({}, { __index = function(t, i)
local button = CreateListButton(list)
if i > 1 then
button:SetPoint("TOPLEFT", t[i-1], "BOTTOMLEFT")
else
button:SetPoint("TOPLEFT", 15, -15)
end
t[i] = button
 
return button
end })
 
list.scrollFrame = CreateFrame("ScrollFrame", list:GetName() .. "ScrollFrame", list, "FauxScrollFrameTemplate")
list.scrollFrame:SetPoint("TOPLEFT", 12, -14)
list.scrollFrame:SetPoint("BOTTOMRIGHT", -36, 13)
list.scrollFrame:SetScript("OnVerticalScroll", function(self, delta)
FauxScrollFrame_OnVerticalScroll(self, delta, UIDROPDOWNMENU_BUTTON_HEIGHT, function() UpdateList(list) end)
end)
 
list:SetBackdrop({
bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background",
edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border",
insets = { left = 11, right = 12, top = 12, bottom = 11 },
tile = true, tileSize = 32, edgeSize = 32,
})
 
list:SetScript("OnShow", function(self)
self.width = 0
for i, item in pairs(self:GetParent().items) do
self.text:SetText(item)
self.width = max(self.text:GetWidth() + 60, self.width)
end
UpdateList(self)
end)
list:SetScript("OnHide", list.Hide)
list:SetScript("OnClick", list.Hide)
list:SetPoint("TOPLEFT", parent, "BOTTOMLEFT", 6, 8)
list:Hide()
 
return list
end
 
local function DropdownButton_OnClick(self)
local list = self:GetParent().list
if list then
if list:IsShown() then
list:Hide()
else
list:Show()
end
else
local dropdown = self:GetParent()
dropdown.list = CreateList(dropdown)
dropdown.list:Show()
end
end
 
function lib.CreateScrollingDropdown(parent, name, items)
assert(items and type(items) == "table", "Bad argument #3 to CreateScrollingDropdown (table expected, got " .. type(items) .. ")")
 
local dropdown = PhanxConfigDropdown.CreateDropdown(parent, name)
dropdown.button:SetScript("OnClick", DropdownButton_OnClick)
dropdown.items = items
 
return dropdown
end
\ No newline at end of file
ColorPicker/PhanxConfig-ColorPicker.lua New file
0,0 → 1,88
--[[--------------------------------------------------------------------
PhanxConfig-ColorPicker
Simple color picker widget generator. Requires LibStub.
Based on OmniCC_Options by Tuller.
----------------------------------------------------------------------]]
 
local lib, oldminor = LibStub:NewLibrary("PhanxConfig-ColorPicker", 1)
if not lib then return end
 
local function OnEnter(self)
local color = NORMAL_FONT_COLOR
self.bg:SetVertexColor(color.r, color.g, color.b)
 
if self.hint then
GameTooltip:SetOwner(self, "ANCHOR_RIGHT")
GameTooltip:SetText(self.hint, nil, nil, nil, nil, true)
end
end
 
local function OnLeave(self)
local color = HIGHLIGHT_FONT_COLOR
self.bg:SetVertexColor(color.r, color.g, color.b)
 
GameTooltip:Hide()
end
 
local function OnClick(self)
OnLeave(self)
 
if ColorPickerFrame:IsShown() then
ColorPickerFrame:Hide()
else
self.r, self.g, self.b = self:GetValue()
 
UIDropDownMenuButton_OpenColorPicker(self)
ColorPickerFrame:SetFrameStrata("TOOLTIP")
ColorPickerFrame:Raise()
end
end
 
local function SetColor(self, r, g, b)
self.swatch:SetVertexColor(r, g, b)
if not ColorPickerFrame:IsShown() then
self:SetValue(r, g, b)
end
end
 
function lib.CreateColorPicker(parent, name)
local frame = CreateFrame("Button", nil, parent)
frame:SetHeight(19)
frame:SetWidth(100)
 
local swatch = frame:CreateTexture(nil, "OVERLAY")
swatch:SetTexture("Interface\\ChatFrame\\ChatFrameColorSwatch")
swatch:SetPoint("LEFT")
swatch:SetWidth(19)
swatch:SetHeight(19)
 
local bg = frame:CreateTexture(nil, "BACKGROUND")
bg:SetTexture(1, 1, 1)
bg:SetPoint("CENTER", swatch)
bg:SetWidth(16)
bg:SetHeight(16)
 
local label = frame:CreateFontString(nil, "ARTWORK", "GameFontHighlight")
label:SetPoint("LEFT", swatch, "RIGHT", 4, 1)
label:SetHeight(19)
label:SetText(name)
 
frame.SetColor = SetColor
frame.swatchFunc = function() frame:SetColor(ColorPickerFrame:GetColorRGB()) end
frame.cancelFunc = function() frame:SetColor(frame.r, frame.g, frame.b) end
 
frame:SetScript("OnClick", OnClick)
frame:SetScript("OnEnter", OnEnter)
frame:SetScript("OnLeave", OnLeave)
 
local width = 19 + 4 + label:GetStringWidth()
if width > 100 then
frame:SetWidth(width)
end
 
frame.swatch = swatch
frame.bg = bg
frame.label = label
 
return frame
end
\ No newline at end of file
Dropdown/PhanxConfig-Dropdown.lua New file
0,0 → 1,107
--[[--------------------------------------------------------------------
PhanxConfig-Dropdown
Simple color picker widget generator. Requires LibStub.
Based on tekKonfig-Dropdown by Tekkub.
----------------------------------------------------------------------]]
 
local lib, oldminor = LibStub:NewLibrary("PhanxConfig-Dropdown", 1)
if not lib then return end
 
local function Frame_OnEnter(self)
if self.hint then
GameTooltip:SetOwner(self, "ANCHOR_RIGHT")
GameTooltip:SetText(self.hint, nil, nil, nil, nil, true)
end
end
 
local function Button_OnEnter(self)
if self:GetParent().hint then
GameTooltip:SetOwner(self, "ANCHOR_RIGHT")
GameTooltip:SetText(self.hint, nil, nil, nil, nil, true)
end
end
 
local function OnLeave()
GameTooltip:Hide()
end
 
local function OnClick(self)
PlaySound("igMainMenuOptionCheckBoxOn")
ToggleDropDownMenu(nil, nil, self:GetParent())
end
 
local function OnHide()
CloseDropDownMenus()
end
 
local i = 0
function lib.CreateDropdown(parent, name)
i = i + 1
 
local frame = CreateFrame("Frame", nil, parent)
frame:SetHeight(42)
frame:SetWidth(162)
frame:EnableMouse(true)
frame:SetScript("OnEnter", Frame_OnEnter)
frame:SetScript("OnLeave", OnLeave)
frame:SetScript("OnHide", OnHide)
 
local dropdown = CreateFrame("Frame", "PhanxConfigDropdown" .. i, frame)
dropdown:SetPoint("TOPLEFT", frame, -16, -14)
dropdown:SetPoint("TOPRIGHT", frame, 16, -14)
dropdown:SetHeight(32)
 
local ltex = dropdown:CreateTexture(dropdown:GetName() .. "Left", "ARTWORK")
ltex:SetTexture("Interface\\Glues\\CharacterCreate\\CharacterCreate-LabelFrame")
ltex:SetTexCoord(0, 0.1953125, 0, 1)
ltex:SetPoint("TOPLEFT", dropdown, 0, 17)
ltex:SetWidth(25)
ltex:SetHeight(64)
 
local rtex = dropdown:CreateTexture(nil, "ARTWORK")
rtex:SetTexture("Interface\\Glues\\CharacterCreate\\CharacterCreate-LabelFrame")
rtex:SetTexCoord(0.8046875, 1, 0, 1)
rtex:SetPoint("TOPRIGHT", dropdown, 0, 17)
rtex:SetWidth(25)
rtex:SetHeight(64)
 
local mtex = dropdown:CreateTexture(nil, "ARTWORK")
mtex:SetTexture("Interface\\Glues\\CharacterCreate\\CharacterCreate-LabelFrame")
mtex:SetTexCoord(0.1953125, 0.8046875, 0, 1)
mtex:SetPoint("LEFT", ltex, "RIGHT")
mtex:SetPoint("RIGHT", rtex, "LEFT")
mtex:SetHeight(64)
 
local label = frame:CreateFontString(nil, "ARTWORK", "GameFontNormal")
label:SetPoint("BOTTOMLEFT", dropdown, "TOPLEFT", 20, 0)
label:SetPoint("BOTTOMRIGHT", dropdown, "TOPRIGHT", -20, 0)
label:SetJustifyH("LEFT")
label:SetText(name)
 
local value = dropdown:CreateFontString(dropdown:GetName() .. "Text", "ARTWORK", "GameFontHighlightSmall")
value:SetPoint("LEFT", ltex, 26, 2)
value:SetPoint("RIGHT", rtex, -43, 2)
value:SetJustifyH("LEFT")
value:SetHeight(10)
 
local button = CreateFrame("Button", nil, dropdown)
button:SetPoint("TOPRIGHT", rtex, -16, -18)
button:SetWidth(24)
button:SetHeight(24)
button:SetScript("OnEnter", Button_OnEnter)
button:SetScript("OnLeave", OnLeave)
button:SetScript("OnClick", OnClick)
 
button:SetNormalTexture("Interface\\ChatFrame\\UI-ChatIcon-ScrollDown-Up")
button:SetPushedTexture("Interface\\ChatFrame\\UI-ChatIcon-ScrollDown-Down")
button:SetHighlightTexture("Interface\\Buttons\\UI-Common-MouseHilight")
button:SetDisabledTexture("Interface\\ChatFrame\\UI-ChatIcon-ScrollDown-Disabled")
button:GetHighlightTexture():SetBlendMode("ADD")
 
dropdown.container = frame
dropdown.button = button
dropdown.label = label
dropdown.value = value
 
return dropdown
end
\ No newline at end of file
Panel/PhanxConfig-Panel.lua New file
0,0 → 1,24
--[[--------------------------------------------------------------------
PhanxConfig-Panel
Simple background panel widget generator. Requires LibStub.
----------------------------------------------------------------------]]
 
local lib, oldminor = LibStub:NewLibrary("PhanxConfig-Panel", 1)
if not lib then return end
 
local panelBackdrop = GameTooltip:GetBackdrop()
 
function lib.CreatePanel(parent, width, height)
local frame = CreateFrame("Frame", nil, parent)
frame:SetFrameStrata(parent:GetFrameStrata())
frame:SetFrameLevel(parent:GetFrameLevel() + 1)
 
frame:SetBackdrop(panelBackdrop)
frame:SetBackdropColor(0.1, 0.1, 0.1, 0.5)
frame:SetBackdropBorderColor(0.8, 0.8, 0.8, 0.5)
 
frame:SetWidth(width or 1)
frame:SetHeight(height or 1)
 
return frame
end
\ No newline at end of file
PhanxConfigWidgets.toc New file
0,0 → 1,15
## Interface: 30100
## Version: 1
## Title: |cffffcc00Lib:|r PhanxConfigWidgets
## Notes: Simple GUI configuration widgets.
## X-Category: Library
## Author: Phanx
## X-Email: addons@phanx.net
## OptionalDependencies: LibStub
 
Checkbox\PhanxConfig-Checkbox.lua
ColorPicker\PhanxConfig-ColorPicker.lua
Dropdown\PhanxConfig-Dropdown.lua
Panel\PhanxConfig-Panel.lua
ScrollingDropdown\PhanxConfig-ScrollingDropdown.lua
Slider\PhanxConfig-Slider.lua
\ No newline at end of file
Slider/PhanxConfig-Slider.lua New file
0,0 → 1,98
--[[--------------------------------------------------------------------
PhanxConfig-Slider
Simple color picker widget generator. Requires LibStub.
Based on tekKonfig-Slider by Tekkub and Ace3.
----------------------------------------------------------------------]]
 
local lib, oldminor = LibStub:NewLibrary("PhanxConfig-Slider", 1)
if not lib then return end
 
local function OnEnter(self)
if self.hint then
GameTooltip:SetOwner(self, "ANCHOR_RIGHT")
GameTooltip:SetText(self.hint, nil, nil, nil, nil, true)
end
end
 
local function OnLeave()
GameTooltip:Hide()
end
 
local function OnMouseWheel(self, delta)
local step = self:GetValueStep() * delta
local minValue, maxValue = self:GetMinMaxValues()
 
if step > 0 then
self:SetValue(min(self:GetValue() + step, maxValue))
else
self:SetValue(max(self:GetValue() + step, minValue))
end
end
 
local sliderBG = {
bgFile = "Interface\\Buttons\\UI-SliderBar-Background",
edgeFile = "Interface\\Buttons\\UI-SliderBar-Border",
edgeSize = 8, tile = true, tileSize = 8,
insets = { left = 3, right = 3, top = 6, bottom = 6 }
}
 
function lib.CreateSlider(parent, name, lowvalue, highvalue, valuestep, percent)
local frame = CreateFrame("Frame", nil, parent)
frame:SetWidth(144)
frame:SetHeight(42)
 
-- local bg = frame:CreateTexture(nil, "BACKGROUND")
-- bg:SetAllPoints(frame)
-- bg:SetTexture(0, 0, 0)
 
local slider = CreateFrame("Slider", nil, frame)
slider:SetPoint("LEFT", 5, 0)
slider:SetPoint("RIGHT", -5, 0)
slider:SetHeight(17)
slider:SetHitRectInsets(0, 0, -10, -10)
slider:SetOrientation("HORIZONTAL")
slider:SetThumbTexture("Interface\\Buttons\\UI-SliderBar-Button-Horizontal")
slider:SetBackdrop(sliderBG)
 
local label = slider:CreateFontString(nil, "ARTWORK", "GameFontNormal")
label:SetPoint("BOTTOMLEFT", slider, "TOPLEFT")
label:SetPoint("BOTTOMRIGHT", slider, "TOPRIGHT")
label:SetJustifyH("LEFT")
label:SetText(name)
 
local low = slider:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall")
low:SetPoint("TOPLEFT", slider, "BOTTOMLEFT", 0, 3)
if percent then
low:SetFormattedText("%d%%", lowvalue * 100)
else
low:SetText(lowvalue)
end
 
local high = slider:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall")
high:SetPoint("TOPRIGHT", slider, "BOTTOMRIGHT", 0, 3)
if percent then
high:SetFormattedText("%d%%", highvalue * 100)
else
high:SetText(highvalue)
end
 
local value = slider:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall")
value:SetPoint("TOP", slider, "BOTTOM", 0, 3)
value:SetTextColor(1, 0.8, 0)
 
slider:SetMinMaxValues(lowvalue, highvalue)
slider:SetValueStep(valuestep or 1)
 
slider:EnableMouseWheel(true)
slider:SetScript("OnMouseWheel", OnMouseWheel)
slider:SetScript("OnEnter", OnEnter)
slider:SetScript("OnLeave", OnLeave)
 
slider.container = frame
slider.label = label
slider.low = low
slider.high = high
slider.value = value
 
return slider
end
\ No newline at end of file