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.
291 lines
8.1 KiB
291 lines
8.1 KiB
--[[ Line:header
|
|
Documentation for the [Line](Line) object.
|
|
Created with [LibDropDown:CreateLine()](LibDropDown#libdropdowncreatelinemenu).
|
|
--]]
|
|
local lib = LibStub('LibDropDown')
|
|
|
|
local function OnShow(self)
|
|
if(self.checked) then
|
|
if(self.isRadio) then
|
|
self:SetRadioState(self:checked())
|
|
else
|
|
self:SetCheckedState(self:checked())
|
|
end
|
|
end
|
|
end
|
|
|
|
local function OnEnter(self)
|
|
-- hide all submenues for the current menu
|
|
for _, Menu in next, self:GetParent().menus do
|
|
Menu:Hide()
|
|
end
|
|
|
|
if(self.Expand:IsShown()) then
|
|
-- show this line's submenu
|
|
self.Menu:Show()
|
|
end
|
|
|
|
self.Highlight:Show()
|
|
|
|
if(self.tooltip) then
|
|
GameTooltip:SetOwner(self, 'ANCHOR_RIGHT')
|
|
|
|
if(self.tooltipTitle) then
|
|
GameTooltip:AddLine(self.tooltipTitle, 1, 1, 1)
|
|
end
|
|
|
|
GameTooltip:AddLine(self.tooltip, nil, nil, nil, true)
|
|
GameTooltip:Show()
|
|
end
|
|
end
|
|
|
|
local function OnLeave(self)
|
|
self.Highlight:Hide()
|
|
|
|
if(self.tooltip) then
|
|
GameTooltip:Hide()
|
|
end
|
|
end
|
|
|
|
local function OnClick(self, button)
|
|
if(self.ColorSwatch:IsShown()) then
|
|
ColorPickerFrame.func = function()
|
|
local r, g, b = ColorPickerFrame:GetColorRGB()
|
|
local a = ColorPickerFrame.hasOpacity and (1 - OpacitySliderFrame:GetValue()) or 1
|
|
self.colorPickerCallback(CreateColor(r, g, b , a))
|
|
end
|
|
|
|
ColorPickerFrame.opacityFunc = ColorPickerFrame.func
|
|
ColorPickerFrame.cancelFunc = function()
|
|
self.colorPickerCallback(self.colors)
|
|
end
|
|
|
|
local r, g, b, a = self.colors:GetRGBA()
|
|
ColorPickerFrame.hasOpacity = not not a
|
|
ColorPickerFrame.opacity = a
|
|
-- BUG: ColorSelect not reacting to SetColorRGB in build 24015
|
|
ColorPickerFrame:SetColorRGB(r, g, b)
|
|
|
|
ShowUIPanel(ColorPickerFrame)
|
|
PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON)
|
|
else
|
|
pcall(self.func, self, button, unpack(self.args or {}))
|
|
end
|
|
|
|
if(not self.keepShown) then
|
|
lib:CloseAll()
|
|
end
|
|
end
|
|
|
|
local lineMixin = {}
|
|
--[[ Line:SetRadioState(_state_)
|
|
Sets the state of a radio button.
|
|
|
|
* `state`: Enables/disables a radio button _(boolean)_
|
|
--]]
|
|
function lineMixin:SetRadioState(state)
|
|
self.Radio.state = state
|
|
|
|
if(state) then
|
|
self.Radio:SetTexCoord(0, 0.5, 0.5, 1)
|
|
else
|
|
self.Radio:SetTexCoord(0.5, 1, 0.5, 1)
|
|
end
|
|
end
|
|
|
|
--[[ Line:GetRadioState()
|
|
Returns the current boolean state of a radio button.
|
|
--]]
|
|
function lineMixin:GetRadioState()
|
|
return self.Radio.state
|
|
end
|
|
|
|
--[[ Line:SetCheckedState(_state_)
|
|
Sets the state of a checkbutton.
|
|
|
|
* `state`: Enables/disables a checkbutton _(boolean)_
|
|
--]]
|
|
function lineMixin:SetCheckedState(state)
|
|
self.Radio.state = state
|
|
|
|
if(state) then
|
|
self.Radio:SetTexCoord(0, 0.5, 0, 0.5)
|
|
else
|
|
self.Radio:SetTexCoord(0.5, 1, 0, 0.5)
|
|
end
|
|
end
|
|
|
|
--[[ Line:GetCheckedState()
|
|
Returns the current boolean state of a checkbutton.
|
|
--]]
|
|
function lineMixin:GetCheckedState()
|
|
return self.Radio.state
|
|
end
|
|
|
|
--[[ Line:SetIcon(_..._)
|
|
See [FrameXML/Util.lua's CreateTextureMarkup](https://www.townlong-yak.com/framexml/live/go/CreateTextureMarkup)
|
|
--]]
|
|
function lineMixin:SetIcon(...)
|
|
local markup = CreateTextureMarkup(...)
|
|
self.__icon = markup .. ' '
|
|
self:UpdateText()
|
|
end
|
|
|
|
--[[ Line:GetIcon()
|
|
See [FrameXML/Util.lua's CreateTextureMarkup](https://www.townlong-yak.com/framexml/live/go/CreateTextureMarkup)
|
|
--]]
|
|
function lineMixin:GetIcon()
|
|
return self.__icon
|
|
end
|
|
|
|
--[[ Line:SetAtlas(_..._)
|
|
See [FrameXML/Util.lua's CreateAtlasMarkup](https://www.townlong-yak.com/framexml/live/go/CreateAtlasMarkup)
|
|
--]]
|
|
function lineMixin:SetAtlas(...)
|
|
local markup = CreateAtlasMarkup(...)
|
|
self.__atlas = markup .. ' '
|
|
self:UpdateText()
|
|
end
|
|
|
|
--[[ Line:GetAtlas()
|
|
See [FrameXML/Util.lua's CreateAtlasMarkup](https://www.townlong-yak.com/framexml/live/go/CreateAtlasMarkup)
|
|
--]]
|
|
function lineMixin:GetAtlas()
|
|
return self.__atlas
|
|
end
|
|
|
|
--[[ Line:SetText(_text_)
|
|
Sets the Line text.
|
|
|
|
* `text` - text to set on the Line _(string)_
|
|
--]]
|
|
function lineMixin:SetText(text)
|
|
self.Text:SetFormattedText('%s%s', self.__icon or self.__atlas or '', text)
|
|
end
|
|
|
|
--[[ Line:UpdateText()
|
|
Updates the Line text.
|
|
--]]
|
|
function lineMixin:UpdateText()
|
|
local text = self.Text:GetText():gsub('|T.*|t', ''):gsub('|A.*|a', '')
|
|
self.Text:SetText(text)
|
|
end
|
|
|
|
--[[ Line:SetTexture(_texture[, color]_)
|
|
Sets the texture (and optional color) on the Line.
|
|
|
|
* `texture` - texture to set _(string)_
|
|
* `color` - color to set _(object)_
|
|
--]]
|
|
function lineMixin:SetTexture(texture, color)
|
|
self.Texture:SetTexture(texture)
|
|
if(color) then
|
|
self.Texture:SetVertexColor(color:GetRGBA())
|
|
else
|
|
self.Texture:SetVertexColor(1, 1, 1, 1)
|
|
end
|
|
|
|
self.Texture:Show()
|
|
end
|
|
|
|
--[[ Line:Reset()
|
|
Resets the state of the Line back to default.
|
|
Is called at the start of [Menu:UpdateLine()](Menu#menuupdatelineindexdata).
|
|
--]]
|
|
function lineMixin:Reset()
|
|
self.checked = nil
|
|
self.isRadio = nil
|
|
self.__icon = nil
|
|
self.__atlas = nil
|
|
|
|
self.Texture:Hide()
|
|
self.Highlight:Hide()
|
|
self.Radio:Hide()
|
|
self.Expand:Hide()
|
|
self.Spacer:Hide()
|
|
self.ColorSwatch:Hide()
|
|
|
|
self.Text:SetText('')
|
|
end
|
|
|
|
--[[ LibDropDown:CreateLine(_Menu_)
|
|
Creates and returns a new [Line](Line) object for the given [Menu](Menu).
|
|
|
|
* `Menu` - [Menu](Menu) object to parent the new [Line](Line) _(object)_
|
|
--]]
|
|
function lib:CreateLine(Menu)
|
|
local Line = Mixin(CreateFrame('Button', nil, Menu), lineMixin)
|
|
Line:SetSize(1, 16)
|
|
Line:SetScript('OnShow', OnShow)
|
|
Line:SetScript('OnEnter', OnEnter)
|
|
Line:SetScript('OnLeave', OnLeave)
|
|
Line:SetScript('OnClick', OnClick)
|
|
Line:SetFrameLevel(Menu:GetFrameLevel() + 2)
|
|
Line.parent = Menu.parent
|
|
|
|
Line:SetNormalFontObject(Menu.parent.normalFont or 'GameFontHighlightSmallLeft')
|
|
Line:SetHighlightFontObject(Menu.parent.highlightFont or 'GameFontHighlightSmallLeft')
|
|
Line:SetDisabledFontObject(Menu.parent.disabledFont or 'GameFontDisableSmallLeft')
|
|
|
|
local Texture = Line:CreateTexture('$parentTexture', 'BACKGROUND')
|
|
Texture:SetAllPoints()
|
|
Line.Texture = Texture
|
|
|
|
local Highlight = Line:CreateTexture('$parentHighlight', 'BACKGROUND')
|
|
Highlight:SetAllPoints()
|
|
Highlight:SetBlendMode('ADD')
|
|
Highlight:SetTexture(Menu.parent.highlightTexture or 'Interface\\QuestFrame\\UI-QuestTitleHighlight')
|
|
Line.Highlight = Highlight
|
|
|
|
local Radio = Line:CreateTexture('$parentRadio', 'ARTWORK')
|
|
Radio:SetPoint('RIGHT')
|
|
Radio:SetSize(16, 16)
|
|
Radio:SetTexture(Menu.parent.radioTexture or 'Interface\\Common\\UI-DropDownRadioChecks')
|
|
Line.Radio = Radio
|
|
|
|
local Expand = Line:CreateTexture('$parentExpand', 'ARTWORK')
|
|
Expand:SetPoint('RIGHT')
|
|
Expand:SetSize(16, 16)
|
|
Expand:SetTexture(Menu.parent.expandTexture or 'Interface\\ChatFrame\\ChatFrameExpandArrow')
|
|
Line.Expand = Expand
|
|
|
|
local Spacer = Line:CreateTexture('$parentSpacer', 'ARTWORK')
|
|
Spacer:SetPoint('LEFT')
|
|
Spacer:SetPoint('RIGHT')
|
|
Spacer:SetSize(1, 1)
|
|
Spacer:SetAlpha(0.5)
|
|
Spacer:SetTexture('Interface\\ChatFrame\\ChatFrameBackground')
|
|
Line.Spacer = Spacer
|
|
|
|
local Text = Line:CreateFontString('$parentText', 'ARTWORK', 'GameFontHighlightSmallLeft')
|
|
Text:SetPoint('LEFT')
|
|
Line.Text = Text
|
|
|
|
local ColorSwatch = CreateFrame('Button', '$parentColorSwatch', Line)
|
|
ColorSwatch:SetPoint('RIGHT')
|
|
ColorSwatch:SetSize(16, 16)
|
|
Line.ColorSwatch = ColorSwatch
|
|
|
|
local ColorSwatchBackground = ColorSwatch:CreateTexture('$parentBackground', 'BACKGROUND')
|
|
ColorSwatchBackground:SetPoint('CENTER')
|
|
ColorSwatchBackground:SetSize(14, 14)
|
|
ColorSwatchBackground:SetColorTexture(1, 1, 1)
|
|
ColorSwatch.Background = ColorSwatchBackground
|
|
|
|
local ColorSwatchCheckers = ColorSwatch:CreateTexture('$parentCheckers', 'BACKGROUND')
|
|
ColorSwatchCheckers:SetPoint('CENTER')
|
|
ColorSwatchCheckers:SetSize(14, 14)
|
|
ColorSwatchCheckers:SetTexture('Tileset\\Generic\\Checkers')
|
|
ColorSwatchCheckers:SetTexCoord(0.25, 0, 0.5, 0.25)
|
|
ColorSwatchCheckers:SetDesaturated(true)
|
|
ColorSwatchCheckers:SetVertexColor(1, 1, 1, 0.75)
|
|
ColorSwatch.Checkers = ColorSwatchCheckers
|
|
|
|
local ColorSwatchSwatch = ColorSwatch:CreateTexture('$parentSwatch', 'OVERLAY')
|
|
ColorSwatchSwatch:SetPoint('CENTER')
|
|
ColorSwatchSwatch:SetSize(20, 20)
|
|
ColorSwatchSwatch:SetTexture('Interface\\ChatFrame\\ChatFrameColorSwatch')
|
|
ColorSwatch.Swatch = ColorSwatchSwatch
|
|
|
|
return Line
|
|
end
|
|
|