--[[ 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