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.

222 lines
6.5 KiB

--[[ Button:header
Documentation for the [Button](Button) object.
Created with [LibDropDown:NewButton()](LibDropDown#libdropdownnewbuttonparent-name).
For all intents and purposes, this is the equivalent to [UIDropDownMenuButtonTemplate](https://www.townlong-yak.com/framexml/live/go/UIDropDownMenuButtonTemplate).
--]]
local lib = LibStub('LibDropDown')
local function OnEnter(self)
local script = self:GetParent():GetScript('OnEnter')
if(script) then
script(self:GetParent())
end
end
local function OnLeave(self)
local script = self:GetParent():GetScript('OnLeave')
if(script) then
script(self:GetParent())
end
end
local function OnClick(self)
self:GetParent():Toggle()
PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON)
end
local function OnHide()
lib:CloseAll()
end
local buttonMixin = {}
--[[ Button:Add(_..._)
See [Menu:AddLines()](Menu#menuaddlines).
--]]
function buttonMixin:Add(...)
self.Menu:AddLines(...)
end
--[[ Button:Remove(_..._)
See [Menu:RemoveLine()](Menu#menuremoveline).
--]]
function buttonMixin:Remove(...)
self.Menu:RemoveLine(...)
end
--[[ Button:Clear()
See [Menu:ClearLines()](Menu#menuclearlines)
--]]
function buttonMixin:Clear()
self.Menu:ClearLines()
end
--[[ Button:Toggle()
See [Menu:Toggle()](Menu#menutoggle).
--]]
function buttonMixin:Toggle()
self.Menu:Toggle()
end
--[[ Button:SetAnchor(_..._)
See [Menu:SetAnchor(_point, anchor, relativePoint, x, y_)](Menu#menusetanchorpointanchorrelativepointxy).
--]]
function buttonMixin:SetAnchor(...)
self.Menu:SetAnchor(...)
end
--[[ Button:GetAnchor()
See [Menu:GetAnchor()](Menu#menugetanchor).
--]]
function buttonMixin:GetAnchor()
return self.Menu:GetAnchor()
end
--[[ Button:SetAnchorCursor(_flag_)
See [Menu:SetAnchorCursor(_flag_)](Menu#menusetanchorcursorflag).
--]]
function buttonMixin:SetAnchorCursor(...)
self.Menu:SetAnchorCursor(...)
end
--[[ Button:IsAnchorCursor()
See [Menu:IsAnchorCursor()](Menu#menuisanchorcursor).
--]]
function buttonMixin:IsAnchorCursor()
return self.Menu:IsAnchorCursor()
end
--[[ Button:SetStyle(...)
See [Menu:SetStyle(_name_)](Menu#menusetstylename).
--]]
function buttonMixin:SetStyle(...)
self.Menu:SetStyle(...)
end
--[[ Button:GetStyle()
See [Menu:GetStyle()](Menu#menugetstyle).
--]]
function buttonMixin:GetStyle()
return self.Menu:GetStyle()
end
--[[ Button:SetJustifyH(_..._)
See [Widget:SetJustifyH](http://wowprogramming.com/docs/widgets/FontInstance/SetJustifyH).
--]]
function buttonMixin:SetJustifyH(...)
self.Text:SetJustifyH(...)
end
--[[ Button:GetJustifyH()
See [Widget:GetJustifyH](http://wowprogramming.com/docs/widgets/FontInstance/GetJustifyH).
--]]
function buttonMixin:GetJustifyH()
return self.Text:GetJustifyH()
end
--[[ Button:SetText(_..._)
See [Widget:SetText](http://wowprogramming.com/docs/widgets/Button/SetText).
--]]
function buttonMixin:SetText(...)
self.Text:SetText(...)
end
--[[ Button:GetText()
See [Widget:GetText](http://wowprogramming.com/docs/widgets/Button/GetText).
--]]
function buttonMixin:GetText()
return self.Text:GetText()
end
--[[ Button:SetFormattedText(_..._)
See [Widget:SetFormattedText](http://wowprogramming.com/docs/widgets/Button/SetFormattedText).
--]]
function buttonMixin:SetFormattedText(...)
self.Text:SetFormattedText(...)
end
--[[ Button:SetCheckAlignment(...)
See [Menu:SetCheckAlignment(...)](Menu#menusetcheckalignment).
--]]
function buttonMixin:SetCheckAlignment(...)
self.Menu:SetCheckAlignment(...)
end
--[[ LibDropDown:NewButton(_parent[, name]_)
Creates and returns a new menu button object.
* `parent`: parent for the new button _(string|object)_
* `name`: name for the new button _(string, default = derived from parent)_
--]]
function lib:NewButton(parent, name)
assert(parent, 'A button requres a given parent')
if(type(parent) == 'string') then
parent = _G[parent]
end
local Button = Mixin(CreateFrame('Frame', (name or parent:GetDebugName() .. 'MenuButton'), parent), buttonMixin, CallbackRegistryMixin)
Button:SetSize(165, 32)
Button:SetScript('OnHide', OnHide)
Button.Menu = lib:NewMenu(Button)
local Left = Button:CreateTexture('$parentLeft', 'ARTWORK')
Left:SetPoint('TOPLEFT', 0, 17)
Left:SetSize(25, 64)
Left:SetTexture('Interface\\Glues\\CharacterCreate\\CharacterCreate-LabelFrame')
Left:SetTexCoord(0, 0.1953125, 0, 1)
Button.Left = Left
local Right = Button:CreateTexture('$parentRight', 'ARTWORK')
Right:SetPoint('TOPRIGHT', 0, 17)
Right:SetSize(25, 64)
Right:SetTexture('Interface\\Glues\\CharacterCreate\\CharacterCreate-LabelFrame')
Right:SetTexCoord(0.8046875, 1, 0, 1)
Button.Right = Right
local Middle = Button:CreateTexture('$parentMiddle', 'ARTWORK')
Middle:SetPoint('LEFT', Left, 'RIGHT')
Middle:SetPoint('RIGHT', Right, 'LEFT')
Middle:SetSize(115, 64)
Middle:SetTexture('Interface\\Glues\\CharacterCreate\\CharacterCreate-LabelFrame')
Middle:SetTexCoord(0.1953125, 0.8046875, 0, 1)
Button.Middle = Middle
local Text = Button:CreateFontString('$parentText', 'ARTWORK', 'GameFontHighlightSmall')
Text:SetPoint('RIGHT', Right, -43, 2)
Text:SetPoint('LEFT', Left, 27, 2)
Text:SetSize(0, 10)
Text:SetWordWrap(false)
Text:SetJustifyH('RIGHT')
Button.Text = Text
local Icon = Button:CreateTexture('$parentIcon', 'OVERLAY')
Icon:SetPoint('LEFT', 30, 2)
Icon:SetSize(16, 16)
Icon:Hide()
Button.Icon = Icon
local OpenButton = CreateFrame('Button', '$parentButton', Button)
OpenButton:SetPoint('TOPRIGHT', Right, -16, -18)
OpenButton:SetSize(24, 24)
OpenButton:SetScript('OnEnter', OnEnter)
OpenButton:SetScript('OnLeave', OnLeave)
OpenButton:SetScript('OnClick', OnClick)
OpenButton:SetMotionScriptsWhileDisabled(true)
OpenButton:SetNormalTexture('Interface\\ChatFrame\\UI-ChatIcon-ScrollDown-Up')
OpenButton:GetNormalTexture():SetPoint('RIGHT')
OpenButton:GetNormalTexture():SetSize(24, 24)
OpenButton:SetPushedTexture('Interface\\ChatFrame\\UI-ChatIcon-ScrollDown-Down')
OpenButton:GetPushedTexture():SetPoint('RIGHT')
OpenButton:GetPushedTexture():SetSize(24, 24)
OpenButton:SetDisabledTexture('Interface\\ChatFrame\\UI-ChatIcon-ScrollDown-Disabled')
OpenButton:GetDisabledTexture():SetPoint('RIGHT')
OpenButton:GetDisabledTexture():SetSize(24, 24)
OpenButton:SetHighlightTexture('Interface\\Buttons\\UI-Common-MouseHilight')
OpenButton:GetHighlightTexture():SetPoint('RIGHT')
OpenButton:GetHighlightTexture():SetSize(24, 24)
OpenButton:GetHighlightTexture():SetBlendMode('ADD')
Button.Button = OpenButton
return Button
end