--[[ dropdown.lua A bagnon dropdown menu --]] local OptionsDropdown = Bagnon.Classy:New('Frame') Bagnon.OptionsDropdown = OptionsDropdown function OptionsDropdown:New(name, parent, width) local f = self:Bind(CreateFrame('Frame', parent:GetName() .. name, parent, 'UIDropDownMenuTemplate')) f.width = width local text = f:CreateFontString(nil, 'BACKGROUND', 'GameFontNormalSmall') text:SetPoint('BOTTOMLEFT', f, 'TOPLEFT', 21, 0) text:SetText(name) f.titleText = text f:SetScript('OnShow', f.OnShow) return f end --[[ Frame Evnets ]]-- function OptionsDropdown:OnShow() UIDropDownMenu_SetWidth(self.width, self) UIDropDownMenu_Initialize(self, self.Initialize) UIDropDownMenu_SetSelectedValue(self, self:GetSavedValue()) end --[[ Update Methods ]]-- function OptionsDropdown:Initialize() assert(false, 'Hey you forgot to implement Initialize for ' .. self:GetName()) end function OptionsDropdown:SetSavedValue(value) assert(false, 'Hey you forgot to implement SetSavedValue for ' .. self:GetName()) end function OptionsDropdown:GetSavedValue() assert(false, 'Hey you forgot to implement GetSavedValue for ' .. self:GetName()) end --[[ Item Adding ]]-- local function item_OnClick(self) self:SetSavedValue(this.value) UIDropDownMenu_SetSelectedValue(self, this.value) end function OptionsDropdown:AddItem(name, value) local info = UIDropDownMenu_CreateInfo() info.text = name info.value = value or name info.arg1 = self info.func = item_OnClick info.checked = (self:GetSavedValue() == info.value) UIDropDownMenu_AddButton(info) end