------------------------------------------------------------------------------- ---------------------------------- NAMESPACE ---------------------------------- ------------------------------------------------------------------------------- local _, ns = ... local L = ns.locale ------------------------------------------------------------------------------- ---------------------------------- DEFAULTS ----------------------------------- ------------------------------------------------------------------------------- ns.optionDefaults = { profile = { -- visibility hide_done_rares = false, hide_minimap = false, show_completed_nodes = false, -- tooltip show_loot = true, show_notes = true, -- development development = false, show_debug_map = false, show_debug_quest = false, force_nodes = false, -- poi/path scale poi_scale = 1, -- poi color poi_color_R = 0, poi_color_G = 0.5, poi_color_B = 1, poi_color_A = 1, -- path color path_color_R = 0, path_color_G = 0.5, path_color_B = 1, path_color_A = 1 }, } ------------------------------------------------------------------------------- ----------------------------------- HELPERS ----------------------------------- ------------------------------------------------------------------------------- function ns:GetOpt(n) return ns.addon.db.profile[n] end function ns:SetOpt(n, v) ns.addon.db.profile[n] = v; ns.addon:Refresh() end function ns:GetColorOpt(n) local db = ns.addon.db.profile return db[n..'_R'], db[n..'_G'], db[n..'_B'], db[n..'_A'] end function ns:SetColorOpt(n, r, g, b, a) local db = ns.addon.db.profile db[n..'_R'], db[n..'_G'], db[n..'_B'], db[n..'_A'] = r, g, b, a ns.addon:Refresh() end ------------------------------------------------------------------------------- --------------------------------- OPTIONS UI ---------------------------------- ------------------------------------------------------------------------------- ns.options = { type = "group", name = L["options_title"], childGroups = "tab", get = function(info) return ns:GetOpt(info.arg) end, set = function(info, v) ns:SetOpt(info.arg, v) end, args = { GeneralTab = { type = "group", name = L["options_general_settings"], desc = L["options_general_description"], order = 0, args = { VisibilityHeader = { type = "header", name = L["options_visibility_settings"], order = 10, }, show_completed_nodes = { type = "toggle", arg = "show_completed_nodes", name = L["options_show_completed_nodes"], desc = L["options_show_completed_nodes_desc"], order = 11, width = "full", }, hide_done_rare = { type = "toggle", arg = "hide_done_rares", name = L["options_toggle_hide_done_rare"], desc = L["options_toggle_hide_done_rare_desc"], order = 12, width = "full", }, hide_minimap = { type = "toggle", arg = "hide_minimap", name = L["options_toggle_hide_minimap"], desc = L["options_toggle_hide_minimap_desc"], order = 13, width = "full", }, restore_all_nodes = { type = "execute", name = L["options_restore_hidden_nodes"], desc = L["options_restore_hidden_nodes_desc"], order = 14, width = "full", func = function () wipe(ns.addon.db.char) ns.addon:Refresh() end }, FocusHeader = { type = "header", name = L["options_focus_settings"], order = 20, }, POI_scale = { type = "range", name = L["options_scale"], desc = L["options_scale_desc"], min = 1, max = 3, step = 0.01, arg = "poi_scale", width = "full", order = 21, }, POI_color = { type = "color", name = L["options_poi_color"], desc = L["options_poi_color_desc"], hasAlpha = true, set = function(_, ...) ns:SetColorOpt('poi_color', ...) end, get = function() return ns:GetColorOpt('poi_color') end, order = 22, }, PATH_color = { type = "color", name = L["options_path_color"], desc = L["options_path_color_desc"], hasAlpha = true, set = function(_, ...) ns:SetColorOpt('path_color', ...) end, get = function() return ns:GetColorOpt('path_color') end, order = 23, }, restore_poi_colors = { type = "execute", name = L["options_reset_poi_colors"], desc = L["options_reset_poi_colors_desc"], order = 24, width = "full", func = function () local df = ns.optionDefaults.profile ns:SetColorOpt('poi_color', df.poi_color_R, df.poi_color_G, df.poi_color_B, df.poi_color_A) ns:SetColorOpt('path_color', df.path_color_R, df.path_color_G, df.path_color_B, df.path_color_A) end }, TooltipsHeader = { type = "header", name = L["options_tooltip_settings"], order = 30, }, show_loot = { type = "toggle", arg = "show_loot", name = L["options_toggle_show_loot"], desc = L["options_toggle_show_loot_desc"], order = 31, }, show_notes = { type = "toggle", arg = "show_notes", name = L["options_toggle_show_notes"], desc = L["options_toggle_show_notes_desc"], order = 32, } } }, GlobalTab = { type = "group", name = L["options_global"], desc = L["options_global_description"], order = 1, args = { } }, ZonesTab = { type = "group", name = L["options_zones"], desc = L["options_zones_description"], childGroups = "select", order = 2, args = { } } } } -- Display these groups in the global settings tab. They are the most common -- group options that players might want to customize. function ns.CreateGlobalGroupOptions() for i, group in ipairs({ ns.groups.RARE, ns.groups.TREASURE, ns.groups.PETBATTLE, ns.groups.OTHER }) do ns.options.args.GlobalTab.args['group_icon_'..group.name] = { type = "header", name = L["options_icons_"..group.name], order = i * 10, } ns.options.args.GlobalTab.args['icon_scale_'..group.name] = { type = "range", name = L["options_scale"], desc = L["options_scale_desc"], min = 0.3, max = 3, step = 0.01, arg = group.scaleArg, width = 1.13, order = i * 10 + 1, } ns.options.args.GlobalTab.args['icon_alpha_'..group.name] = { type = "range", name = L["options_opacity"], desc = L["options_opacity_desc"], min = 0, max = 1, step = 0.01, arg = group.alphaArg, width = 1.13, order = i * 10 + 2, } end end ------------------------------------------------------------------------------- ------------------------------- OPTIONS HELPERS ------------------------------- ------------------------------------------------------------------------------- local _INITIALIZED = {} function ns.CreateGroupOptions (map, group) -- Check if we've already initialized this group if _INITIALIZED[group.name..map.id] then return end _INITIALIZED[group.name..map.id] = true -- Create map options group under zones tab local options = ns.options.args.ZonesTab.args['Zone_'..map.id] if not options then options = { type = "group", name = C_Map.GetMapInfo(map.id).name, args = { IconsGroup = { type = "group", name = L["options_icon_settings"], inline = true, order = 1, args = {} }, VisibilityGroup = { type = "group", name = L["options_visibility_settings"], inline = true, order = 2, args = {} } } } ns.options.args.ZonesTab.args['Zone_'..map.id] = options end map._icons_order = map._icons_order or 0 map._visibility_order = map._visibility_order or 0 options.args.IconsGroup.args["icon_toggle_"..group.name] = { type = "toggle", arg = group.displayArg, name = L["options_icons_"..group.name], desc = L["options_icons_"..group.name.."_desc"], disabled = function () return not group:IsEnabled() end, width = 0.9, order = map._icons_order } options.args.VisibilityGroup.args["header_"..group.name] = { type = "header", name = L["options_icons_"..group.name], order = map._visibility_order } options.args.VisibilityGroup.args['icon_scale_'..group.name] = { type = "range", name = L["options_scale"], desc = L["options_scale_desc"], disabled = function () return not (group:IsEnabled() and group:GetDisplay()) end, min = 0.3, max = 3, step = 0.01, arg = group.scaleArg, width = 0.95, order = map._visibility_order + 1 } options.args.VisibilityGroup.args['icon_alpha_'..group.name] = { type = "range", name = L["options_opacity"], desc = L["options_opacity_desc"], disabled = function () return not (group:IsEnabled() and group:GetDisplay()) end, min = 0, max = 1, step = 0.01, arg = group.alphaArg, width = 0.95, order = map._visibility_order + 2 } map._icons_order = map._icons_order + 1 map._visibility_order = map._visibility_order + 3 end