------------------------------------------------------------------------------- ---------------------------------- NAMESPACE ---------------------------------- ------------------------------------------------------------------------------- local ADDON_NAME, ns = ... local L = ns.locale ------------------------------------------------------------------------------- --------------------------- UIDROPDOWNMENU_ADDSLIDER -------------------------- ------------------------------------------------------------------------------- local function UIDropDownMenu_AddSlider (info, level) local function format (v) if info.percentage then return FormatPercentage(v, true) end return string.format("%.2f", v) end info.frame.Label:SetText(info.text) info.frame.Value:SetText(format(info.value)) info.frame.Slider:SetMinMaxValues(info.min, info.max) info.frame.Slider:SetMinMaxValues(info.min, info.max) info.frame.Slider:SetValueStep(info.step) info.frame.Slider:SetAccessorFunction(function () return info.value end) info.frame.Slider:SetMutatorFunction(function (v) info.frame.Value:SetText(format(v)) info.func(v) end) info.frame.Slider:UpdateVisibleState() UIDropDownMenu_AddButton({ customFrame = info.frame }, level) end ------------------------------------------------------------------------------- ---------------------------- WORLD MAP BUTTON MIXIN --------------------------- ------------------------------------------------------------------------------- local WorldMapOptionsButtonMixin = {} _G[ADDON_NAME.."WorldMapOptionsButtonMixin"] = WorldMapOptionsButtonMixin function WorldMapOptionsButtonMixin:OnLoad() UIDropDownMenu_SetInitializeFunction(self.DropDown, function (dropdown, level) dropdown:GetParent():InitializeDropDown(level) end) UIDropDownMenu_SetDisplayMode(self.DropDown, "MENU") self.AlphaOption = CreateFrame('Frame', ADDON_NAME..'AlphaMenuSliderOption', nil, ADDON_NAME..'SliderMenuOptionTemplate') self.ScaleOption = CreateFrame('Frame', ADDON_NAME..'ScaleMenuSliderOption', nil, ADDON_NAME..'SliderMenuOptionTemplate') end function WorldMapOptionsButtonMixin:OnMouseDown(button) self.Icon:SetPoint("TOPLEFT", 6, -6) local xOffset = WorldMapFrame.isMaximized and -125 or 0 ToggleDropDownMenu(1, nil, self.DropDown, self, xOffset, -5) PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON) end function WorldMapOptionsButtonMixin:OnMouseUp() self.Icon:SetPoint("TOPLEFT", self, "TOPLEFT", 4, -4) end function WorldMapOptionsButtonMixin:OnEnter() GameTooltip:SetOwner(self, "ANCHOR_RIGHT") GameTooltip_SetTitle(GameTooltip, L["context_menu_title"]) GameTooltip_AddNormalLine(GameTooltip, L["map_button_text"]) GameTooltip:Show() end function WorldMapOptionsButtonMixin:Refresh() local map = ns.maps[self:GetParent():GetMapID() or 0] if map and map:HasEnabledGroups() then self:Show() else self:Hide() end end function WorldMapOptionsButtonMixin:InitializeDropDown(level) if level == 1 then UIDropDownMenu_AddButton({ isTitle = true, notCheckable = true, text = WORLD_MAP_FILTER_TITLE }) local map = ns.maps[self:GetParent():GetMapID()] for i, group in ipairs(map.groups) do if group:IsEnabled() then UIDropDownMenu_AddButton({ text = L["options_icons_"..group.name], isNotRadio = true, keepShownOnClick = true, hasArrow = true, value = group, checked = group:GetDisplay(), arg1 = group, func = function (button, group) group:SetDisplay(button.checked) end }) end end UIDropDownMenu_AddSeparator() UIDropDownMenu_AddButton({ text = L["options_show_completed_nodes"], isNotRadio = true, keepShownOnClick = true, checked = ns:GetOpt('show_completed_nodes'), func = function (button, option) ns:SetOpt('show_completed_nodes', button.checked) end }) elseif level == 2 then -- Get correct map ID to query/set options for local group = UIDROPDOWNMENU_MENU_VALUE UIDropDownMenu_AddSlider({ text = L["options_opacity"], min = 0, max = 1, step=0.01, value = group:GetAlpha(), frame = self.AlphaOption, percentage = true, func = function (v) group:SetAlpha(v) end }, 2) UIDropDownMenu_AddSlider({ text = L["options_scale"], min = 0.3, max = 3, step=0.05, value = group:GetScale(), frame = self.ScaleOption, func = function (v) group:SetScale(v) end }, 2) end end