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.

106 lines
3.2 KiB

--[[
DropMenuItem.lua
@Author : DengSir (tdaddon@163.com)
@Link : https://dengsir.github.io
]]
local MAJOR, MINOR = 'DropMenuItem', 1
local GUI = LibStub('tdGUI-1.0')
local DropMenuItem, oldminor = GUI:NewClass(MAJOR, MINOR, GUI:GetClass('ViewItem'))
if not DropMenuItem then return end
local CHECK_COORDS = {
MULTI_NORMAL = {0.5, 1, 0, 0.5},
MULTI_CHECKED = {0, 0.5, 0, 0.5},
RADIO_NORMAL = {0.5, 1, 0.5, 1 },
RADIO_CHECKED = {0, 0.5, 0.5, 1 },
}
function DropMenuItem:Constructor()
local CheckBox = self:CreateTexture(nil, 'OVERLAY') do
CheckBox:SetTexture([[INTERFACE\COMMON\UI-DropDownRadioChecks]])
CheckBox:SetSize(16, 16)
CheckBox:SetPoint('LEFT')
end
local Arrow = self:CreateTexture(nil, 'OVERLAY') do
Arrow:SetTexture([[Interface\ChatFrame\ChatFrameExpandArrow]])
Arrow:SetSize(16, 16)
Arrow:SetPoint('RIGHT')
end
local Text = self:CreateFontString(nil, 'OVERLAY') do
Text:SetPoint('LEFT', CheckBox, 'RIGHT', 2, 0)
end
local Separator = self:CreateTexture(nil, 'BACKGROUND') do
Separator:SetTexture([[Interface\Common\UI-TooltipDivider-Transparent]])
Separator:SetHeight(8)
Separator:SetPoint('LEFT')
Separator:SetPoint('RIGHT')
Separator:Hide()
end
self:SetFontString(Text)
self:SetNormalFontObject('GameFontHighlightSmallLeft')
self:SetDisabledFontObject('GameFontNormalSmallLeft')
self:SetHighlightTexture([[INTERFACE\QUESTFRAME\UI-QuestTitleHighlight]], 'ADD')
self.Separator = Separator
self.CheckBox = CheckBox
self.Text = Text
self.Arrow = Arrow
self:SetScript('OnClick', self.OnClick)
self:SetScript('OnDoubleClick', nil)
self:RegisterForClicks('LeftButtonUp')
end
function DropMenuItem:SetCheckState(checkable, isNotRadio, checked)
if checkable then
if isNotRadio then
self.CheckBox:SetTexCoord(unpack(CHECK_COORDS[checked and 'MULTI_CHECKED' or 'MULTI_NORMAL']))
else
self.CheckBox:SetTexCoord(unpack(CHECK_COORDS[checked and 'RADIO_CHECKED' or 'RADIO_NORMAL']))
end
self.Text:SetPoint('LEFT', self.CheckBox, 'RIGHT', 2, 0)
self.CheckBox:Show()
else
self.Text:SetPoint('LEFT')
self.CheckBox:Hide()
end
self:SetChecked(checked)
self.checkable = checkable or nil
self.isNotRadio = isNotRadio or nil
end
function DropMenuItem:SetHasArrow(hasArrow)
self.Arrow:SetShown(hasArrow)
end
function DropMenuItem:GetAutoWidth()
return self.Text:GetStringWidth() +
(self.Arrow:IsShown() and 18 or 0) +
(self.CheckBox:IsShown() and 18 or 0)
end
function DropMenuItem:OnClick()
self:SetCheckState(self.checkable, self.isNotRadio, self:GetChecked())
self:FireHandler('OnItemClick')
end
function DropMenuItem:SetSeparator(flag)
self.Separator:SetShown(flag)
end
function DropMenuItem:SetFontObject(fontObject)
self:SetNormalFontObject(fontObject or 'GameFontHighlightSmallLeft')
end
function DropMenuItem:SetText(text)
self.Text:SetText(text or '')
self.Text:GetWidth() -- text有点问题,GetWidth就好了
end