annotate WorldPlan.lua @ 40:589c444d4837

WowAce/Curseforge migration push
author Nenue
date Sun, 25 Dec 2016 13:04:57 -0500
parents 21bcff08b0f4
children 79e5e96e5f18
rev   line source
Nenue@0 1 -- WorldPlan.lua
Nenue@0 2 -- Created: 8/16/2016 8:19 AM
Nenue@0 3 -- %file-revision%
Nenue@40 4 local addonFileName, db = ...
Nenue@40 5 local print = DEVIAN_WORKSPACE and function(...) _G.print('WP', ...) end or function() end
Nenue@40 6 local WP_VERSION = "1.0"
Nenue@40 7 local tinsert, pairs, floor = tinsert, pairs, floor
Nenue@40 8 local tremove, ipairs, wipe, unpack = tremove, ipairs, wipe, unpack
Nenue@40 9 local select, type, tostring, tonumber = select, type, tostring, tonumber
Nenue@40 10 local ITEM_QUALITY_COLORS = ITEM_QUALITY_COLORS
Nenue@40 11 local BROKEN_ISLES_ID = 1007
Nenue@40 12 local GetCurrentMapAreaID = GetCurrentMapAreaID
Nenue@40 13 local GetTime, IsLoggedIn = GetTime, IsLoggedIn
Nenue@0 14
Nenue@40 15 -- Define tables here so the pointers match up
Nenue@40 16 WorldPlanCore = { defaults = {}, modules = {}, TaskQueue = {}, }
Nenue@36 17 WorldPlanQuestsMixin = {
Nenue@40 18 UsedPositions = {},
Nenue@36 19 }
Nenue@35 20 WorldPlanPOIMixin = {}
Nenue@40 21 WorldPlanSummaryMixin = {}
Nenue@40 22 db.filtersDirty = true
Nenue@40 23 db.questsDirty = true
Nenue@40 24 db.OrderedModules = {}
Nenue@40 25 db.LoadedModules = {}
Nenue@40 26 db.UsedFilters = {}
Nenue@40 27 db.QuestsByZone = {}
Nenue@40 28 db.QuestsByID = {}
Nenue@40 29 db.TasksByID = {}
Nenue@40 30 db.FreePins = {}
Nenue@40 31 db.UsedPins = {}
Nenue@40 32 db.ReportChunks = {}
Nenue@0 33
Nenue@0 34 -- default color templates
Nenue@40 35 db.DefaultType = {
Nenue@0 36 a = 1,
Nenue@0 37 r = 1, g = 1, b = 1,
Nenue@0 38 x = 0, y = 0,
Nenue@0 39 desaturated = true,
Nenue@33 40 pinMask = "Interface\\Minimap\\UI-Minimap-Background",
Nenue@33 41 rewardMask = "Interface\\Minimap\\UI-Minimap-Background",
Nenue@33 42 texture = "Interface\\BUTTONS\\YELLOWORANGE64",
Nenue@0 43 continent = {
Nenue@40 44 iconWidth = 14,
Nenue@40 45 borderWidth = 2,
Nenue@36 46 highlightWidth = 1,
Nenue@40 47 TagSize = 8,
Nenue@36 48 maxAlertLevel = 0,
Nenue@27 49 showNumber = true,
Nenue@30 50 numberFontObject = 'WorldPlanFont'
Nenue@0 51 },
Nenue@0 52 zone = {
Nenue@36 53 iconWidth = 22,
Nenue@36 54 borderWidth = 3,
Nenue@36 55 highlightWidth = 2,
Nenue@0 56 TagSize = 12,
Nenue@36 57 maxAlertLevel = 3,
Nenue@27 58 showNumber = true,
Nenue@30 59 numberFontObject = 'WorldPlanNumberFontThin'
Nenue@0 60 },
Nenue@0 61 minimized = {
Nenue@40 62 r = 0, g = 0, b = 0, a = 0.1,
Nenue@40 63 iconWidth = 8,
Nenue@40 64 borderWidth = 2,
Nenue@40 65 alpha = 0.5,
Nenue@36 66 highlightWidth = 0,
Nenue@40 67 maxAlertLevel = 0,
Nenue@0 68 NoIcon = true,
Nenue@40 69
Nenue@40 70 TagSize = 8,
Nenue@0 71 TimeleftStage = 1,
Nenue@27 72 showNumber = false,
Nenue@40 73 alpha = 0.1,
Nenue@0 74 }
Nenue@0 75 }
Nenue@29 76
Nenue@40 77 db.DefaultConfig = {
Nenue@27 78 ShowAllProfessionQuests = false,
Nenue@9 79 DisplayContinentSummary = true,
Nenue@9 80 DisplayContinentPins = true,
Nenue@9 81 NotifyWhenNewQuests = true,
Nenue@9 82 EnablePins = true,
Nenue@34 83 FadeWhileGrouped = false,
Nenue@40 84 FlightMapAlphaLimits = {1, 1, 1},
Nenue@40 85 FlightMapScalingLimits = {1, 3, 1.5},
Nenue@9 86 }
Nenue@9 87
Nenue@0 88
Nenue@0 89
Nenue@0 90 -- tracking menu toggler
Nenue@0 91 local DropDown_OnClick = function(self)
Nenue@0 92 local key = self.value
Nenue@0 93 if key then
Nenue@0 94 if WorldPlanData[key] then
Nenue@0 95 WorldPlanData[key] = nil
Nenue@0 96 else
Nenue@0 97 WorldPlanData[key] = true
Nenue@0 98 end
Nenue@0 99 end
Nenue@33 100 _G.WorldPlan:Refresh()
Nenue@0 101 end
Nenue@0 102
Nenue@40 103 function db.print(...)
Nenue@0 104 for i = 1, select('#', ...) do
Nenue@40 105 tinsert(db.ReportChunks, tostring(select(i, ...)))
Nenue@0 106 end
Nenue@0 107 end
Nenue@0 108
Nenue@40 109 function WorldPlanCore:print(...) db.print(...) end
Nenue@40 110
Nenue@40 111 function WorldPlanCore:AddHandler (frame)
Nenue@40 112 if not db.LoadedModules[frame] then
Nenue@40 113 print('|cFFFFFF00'..self:GetName()..':AddHandler()', frame:GetName(), self.initialized)
Nenue@40 114 db.LoadedModules[frame] = true
Nenue@40 115 tinsert(db.OrderedModules, frame)
Nenue@40 116
Nenue@40 117 if frame.defaults then
Nenue@40 118 db.DefaultConfig[frame:GetName()] = frame.defaults
Nenue@40 119 end
Nenue@40 120
Nenue@40 121 frame.GetTypeInfo = function(frame, typeID)
Nenue@40 122 return self:GetTypeInfo(frame, typeID)
Nenue@40 123 end
Nenue@40 124
Nenue@40 125 frame.owningFrame = self
Nenue@40 126 else
Nenue@40 127
Nenue@40 128 print('|cFFFF4400'..self:GetName()..':AddHandler()', frame:GetName())
Nenue@30 129 end
Nenue@30 130 end
Nenue@30 131
Nenue@36 132 function WorldPlanCore:OnLoad ()
Nenue@29 133
Nenue@29 134 self.Types = setmetatable({}, {
Nenue@29 135 __newindex = function(t, k, v)
Nenue@29 136 if type(v) == 'table' then
Nenue@30 137 print('adding owner', k)
Nenue@30 138 v = setmetatable(v, {
Nenue@30 139 __newindex = function(t2,k2,v2)
Nenue@30 140 if type(v2) == 'table' then
Nenue@40 141 --print('adding type', k2)
Nenue@30 142 v2 = setmetatable(v2, {__index = function(t3,k3)
Nenue@30 143 --print('##deferring to default key', k3)
Nenue@40 144 return db.DefaultType[k3]
Nenue@30 145 end})
Nenue@30 146 end
Nenue@30 147 rawset(t2,k2,v2)
Nenue@29 148 end})
Nenue@29 149 end
Nenue@29 150 rawset(t,k,v)
Nenue@29 151 end
Nenue@29 152 })
Nenue@29 153
Nenue@30 154 self.Types[self] = {}
Nenue@29 155
Nenue@29 156 for index, color in pairs(ITEM_QUALITY_COLORS) do
Nenue@30 157 self:AddTypeInfo(self, index, { r = color.r, g = color.g, b = color.b, hex = color.hex, })
Nenue@29 158 end
Nenue@29 159
Nenue@0 160
Nenue@40 161 db.print('v'..WP_VERSION)
Nenue@40 162
Nenue@0 163
Nenue@0 164 self:RegisterEvent("QUESTLINE_UPDATE")
Nenue@0 165 self:RegisterEvent("QUEST_LOG_UPDATE")
Nenue@0 166 self:RegisterEvent("WORLD_MAP_UPDATE")
Nenue@40 167 self:RegisterEvent("SPELLS_CHANGED")
Nenue@40 168 self:RegisterEvent('PLAYER_ENTERING_WORLD')
Nenue@0 169 self:RegisterEvent("WORLD_QUEST_COMPLETED_BY_SPELL")
Nenue@0 170 self:RegisterEvent("SUPER_TRACKED_QUEST_CHANGED")
Nenue@0 171 self:RegisterEvent("SKILL_LINES_CHANGED")
Nenue@0 172 self:RegisterEvent("ARTIFACT_XP_UPDATE")
Nenue@0 173 self:RegisterEvent("ADDON_LOADED")
Nenue@40 174 self:RegisterEvent("PLAYER_LOGIN")
Nenue@40 175 --self:SetParent(WorldMapFrame)
Nenue@0 176 end
Nenue@0 177
Nenue@36 178 function WorldPlanCore:OnShow()
Nenue@40 179 --print(self:GetName()..':OnShow()')
Nenue@40 180 --hooksecurefunc(self, 'SetScript', function(...) self:print('|cFFFFFF00'..self:GetName()..':SetScript()|r', ...) end)
Nenue@27 181 end
Nenue@27 182
Nenue@40 183 function WorldPlanCore:GetMapInfo()
Nenue@40 184
Nenue@40 185 db.currentMapID = GetCurrentMapAreaID()
Nenue@40 186 db.isContinentMap = (db.currentMapID == BROKEN_ISLES_ID)
Nenue@40 187 db.useContinentType = (WorldMapDetailFrame:GetScale() < 1)
Nenue@40 188
Nenue@40 189 end
Nenue@40 190
Nenue@40 191
Nenue@36 192 function WorldPlanCore:OnEvent (event, ...)
Nenue@40 193
Nenue@40 194 print('|cFF00FF88'..self:GetName().. ':OnEvent()|r', event, GetTime(), 'init:', self.initialized)
Nenue@0 195 if event == 'ADDON_LOADED' then
Nenue@0 196
Nenue@0 197 if IsLoggedIn() and not self.initialized then
Nenue@0 198 self:Setup()
Nenue@0 199 end
Nenue@27 200 else
Nenue@40 201 if (event == 'WORLD_MAP_UPDATE') or (event == 'PLAYER_ENTERING_WORLD') then
Nenue@40 202 print('|cFFFF4400currentMapID =', db.currentMapID, ...)
Nenue@40 203 self:GetMapInfo()
Nenue@33 204 end
Nenue@33 205
Nenue@40 206 for i, module in ipairs(db.OrderedModules) do
Nenue@27 207 if module.OnEvent then
Nenue@40 208 print(' |cFF00FFFF'..module:GetName() .. ':OnEvent()|r')
Nenue@27 209 module:OnEvent(event, ...)
Nenue@27 210 end
Nenue@0 211 end
Nenue@0 212 end
Nenue@0 213 end
Nenue@0 214
Nenue@33 215 function WorldPlanCore:OnNext(func)
Nenue@34 216
Nenue@34 217
Nenue@33 218 tinsert(self.TaskQueue, func)
Nenue@35 219 --self:print('|cFF00FF00adding scheduled task #', #self.TaskQueue)
Nenue@33 220 end
Nenue@33 221
Nenue@33 222 function WorldPlanCore:OnUpdate()
Nenue@33 223 if #self.TaskQueue >= 1 then
Nenue@34 224 local func = tremove(self.TaskQueue, 1)
Nenue@34 225 --self:print('|cFF00FF00running scheduled task #', #self.TaskQueue)
Nenue@33 226 func()
Nenue@33 227 end
Nenue@33 228
Nenue@33 229 if self.isStale then
Nenue@40 230 -- these need to happen in load order
Nenue@40 231 for i, module in ipairs(db.OrderedModules) do
Nenue@40 232 if module:IsVisible() and module.isStale then
Nenue@33 233 print('|cFF00FF00internal '..module:GetName()..':Refresh()|r')
Nenue@33 234 module:Refresh()
Nenue@33 235 end
Nenue@33 236 end
Nenue@40 237 self.isStale = nil
Nenue@33 238 end
Nenue@40 239
Nenue@40 240 if #db.ReportChunks >= 1 then
Nenue@40 241
Nenue@40 242 DEFAULT_CHAT_FRAME:AddMessage("|cFF0088FF"..addonFileName.."|r: " .. table.concat(db.ReportChunks, ', '))
Nenue@40 243 wipe(db.ReportChunks)
Nenue@40 244 end
Nenue@40 245
Nenue@33 246 end
Nenue@0 247
Nenue@36 248 function WorldPlanCore:Setup ()
Nenue@40 249 print('|cFFFFFF00'..self:GetName()..':Setup()|r')
Nenue@40 250
Nenue@0 251 if not WorldPlanData then
Nenue@40 252 WorldPlanData = {key = 0}
Nenue@0 253 end
Nenue@0 254 WorldPlanData.key = (WorldPlanData.key or 0) + 1
Nenue@40 255 db.Config = WorldPlanData
Nenue@40 256 for k,v in pairs(db.DefaultConfig) do
Nenue@18 257 --[===[@non-debug@
Nenue@40 258 if not db.Config[k] then
Nenue@40 259 db.Config[k] = v
Nenue@18 260 end
Nenue@18 261
Nenue@18 262 --@end-non-debug@]===]
Nenue@18 263 --@debug@
Nenue@40 264 db.Config[k] = v
Nenue@18 265 --@end-debug@
Nenue@9 266 end
Nenue@9 267
Nenue@0 268
Nenue@40 269 db.currentMapID = GetCurrentMapAreaID()
Nenue@40 270
Nenue@40 271 for i, module in ipairs(db.OrderedModules) do
Nenue@40 272 db.Config[module:GetName()] = db.Config[module:GetName()] or {}
Nenue@0 273 if module.Setup then module:Setup() end
Nenue@0 274 if not module.RegisterEvent then
Nenue@0 275 module.RegisterEvent = self.RegisterEvent
Nenue@0 276 end
Nenue@0 277 end
Nenue@40 278
Nenue@40 279
Nenue@0 280 self.initialized = true
Nenue@0 281
Nenue@9 282 hooksecurefunc("UIDropDownMenu_Initialize", self.OnDropDownInitialize)
Nenue@33 283
Nenue@33 284 hooksecurefunc("WorldMapTrackingOptionsDropDown_OnClick", function(button)
Nenue@33 285 print("|cFF0088FFWorldMapTrackingOptionsDropDown_OnClick|r")
Nenue@33 286 local value = button.value
Nenue@33 287 if (value == "worldQuestFilterOrderResources" or value == "worldQuestFilterArtifactPower" or
Nenue@33 288 value == "worldQuestFilterProfessionMaterials" or value == "worldQuestFilterGold" or
Nenue@33 289 value == "worldQuestFilterEquipment") then
Nenue@33 290 self:Refresh(true)
Nenue@33 291 end
Nenue@33 292 end)
Nenue@40 293
Nenue@40 294
Nenue@40 295 hooksecurefunc("WorldMapFrame_Update", function()
Nenue@40 296 print('|cFFFF4400WorldMapFrame_Update|r')
Nenue@40 297 self:GetMapInfo()
Nenue@40 298 end)
Nenue@40 299
Nenue@40 300
Nenue@40 301 SLASH_WORLDPLAN1 = "/worldplan"
Nenue@40 302 SLASH_WORLDPLAN2 = "/wp"
Nenue@40 303
Nenue@40 304
Nenue@40 305
Nenue@40 306 SlashCmdList.WORLDPLAN = function(args)
Nenue@40 307 local arg1, arg2, extraArgs = args:match("(%S+)%s*(%S*)%s*(.*)")
Nenue@40 308
Nenue@40 309 if arg1 == 'wq' then
Nenue@40 310 if arg2 and WorldPlanQuests[arg2] then
Nenue@40 311 self:print('WorldPlanQuests:'..arg2..'()')
Nenue@40 312 WorldPlanQuests[arg2](WorldPlanQuests)
Nenue@40 313 elseif arg2 == 'flightscale' and extraArgs then
Nenue@40 314 local val1, val2, val3 = extraArgs:match("(%S+)%s*(%S*)%s*(%S*)")
Nenue@40 315 if tonumber(val1) and tonumber(val2) and tonumber(val3) then
Nenue@40 316 db.Config.FlightMapScalingLimits = {tonumber(val1), tonumber(val2), tonumber(val3)}
Nenue@40 317 self:print('FlightMapFrame scaling limits updated:', unpack(db.Config.FlightMapScalingLimits))
Nenue@40 318 else
Nenue@40 319 self:print('FlightMapFrame scaling limits:', unpack(db.Config.FlightMapScalingLimits))
Nenue@40 320 end
Nenue@40 321 elseif arg2 == 'flightalpha' and extraArgs then
Nenue@40 322 local val1, val2, val3 = extraArgs:match("(%S+)%s*(%S*)%s*(%S*)")
Nenue@40 323 if tonumber(val1) and tonumber(val2) and tonumber(val3) then
Nenue@40 324 db.Config.FlightMapAlphaLimits = {tonumber(val1), tonumber(val2), tonumber(val3)}
Nenue@40 325 self:print('FlightMapFrame alpha limits updated:', unpack(db.Config.FlightMapAlphaLimits))
Nenue@40 326 else
Nenue@40 327 self:print('FlightMapFrame alpha limits:', unpack(db.Config.FlightMapAlphaLimits))
Nenue@40 328 end
Nenue@40 329 else
Nenue@40 330
Nenue@40 331 self:print('WorldPlanQuests:Refresh(true)')
Nenue@40 332 WorldPlanQuests:Refresh(true)
Nenue@40 333 end
Nenue@40 334 elseif arg1 == 'filter' then
Nenue@40 335 if arg2 and WorldPlanSummary[arg2] then
Nenue@40 336 self:print('WorldPlanSummary:'..arg2..'()')
Nenue@40 337 WorldPlanSummary[arg2](WorldPlanSummary)
Nenue@40 338 else
Nenue@40 339 self:print('WorldPlanSummary:Refresh(true)')
Nenue@40 340 WorldPlanSummary:Refresh(true)
Nenue@40 341 end
Nenue@40 342 else
Nenue@40 343 self:print('Refreshing data.')
Nenue@40 344 self:Refresh(true)
Nenue@40 345 end
Nenue@40 346
Nenue@40 347 end
Nenue@0 348 end
Nenue@0 349
Nenue@40 350 -- registers a template table
Nenue@36 351 function WorldPlanCore:AddTypeInfo(owner, id, info)
Nenue@30 352 self.Types[owner] = self.Types[owner] or {}
Nenue@30 353 self.Types[owner][id] = info
Nenue@30 354 print('Type('..owner:GetName()..')('..id..') = '.. tostring(info))
Nenue@30 355 end
Nenue@30 356
Nenue@40 357 -- recall a template table, with situational details filled in
Nenue@36 358 function WorldPlanCore:GetTypeInfo(owner, typeID)
Nenue@29 359 local info, extraInfo
Nenue@30 360 if not owner then
Nenue@30 361 --print('## deferring to default type list')
Nenue@30 362 else
Nenue@30 363 --print('## pulling for', owner:GetName(), 'id =', typeID)
Nenue@30 364 end
Nenue@30 365
Nenue@30 366 owner = owner or self
Nenue@30 367 if (not typeID) or (not self.Types[owner][typeID]) then
Nenue@30 368 --print('## sending list default')
Nenue@40 369 info = db.DefaultType
Nenue@29 370 else
Nenue@30 371 --print('## sent list definition', typeID)
Nenue@30 372 info = self.Types[owner][typeID]
Nenue@29 373 end
Nenue@29 374
Nenue@40 375 local subType = 'continent'
Nenue@40 376 if (
Nenue@40 377 FlightMapFrame
Nenue@40 378 and FlightMapFrame:IsVisible()
Nenue@40 379 and FlightMapFrame:IsZoomedIn()
Nenue@40 380 ) or (
Nenue@40 381 not db.isContinentMap
Nenue@40 382 ) or (
Nenue@40 383 db.useContinentType == false
Nenue@40 384 ) then
Nenue@40 385 subType = 'zone'
Nenue@40 386 end
Nenue@29 387
Nenue@40 388 return info, info[subType] or db.DefaultType[subType]
Nenue@29 389 end
Nenue@29 390
Nenue@29 391 do
Nenue@29 392 local timeStates = {
Nenue@29 393 {maxSeconds = 60,
Nenue@29 394 r=1, g=0.25, b =0, format = function (minutes) return '|cFFFF4400'.. minutes .. 'm' end,
Nenue@29 395 },
Nenue@29 396 {maxSeconds = 240,
Nenue@29 397 r=1, g=.5, b=0, format = function(minutes) return '|cFFFF4400'.. floor(minutes/60) .. 'h' end,
Nenue@29 398 },
Nenue@29 399 {maxSeconds = 1440,
Nenue@29 400 r=1, g=1, b=0, format = function(minutes) return '|cFFFFFF00'.. floor(minutes/60) .. 'h' end,
Nenue@29 401 },
Nenue@29 402 {maxSeconds = 10081,
Nenue@29 403 r=0, g=1, b=0,
Nenue@29 404 }, -- 7 days + 1 minute
Nenue@29 405 }
Nenue@29 406 -- Generates a timeleft string
Nenue@36 407 function WorldPlanCore:GetTimeInfo(timeLeft, limit)
Nenue@29 408 for index = 1, limit do
Nenue@29 409 local state = timeStates[index]
Nenue@29 410 if timeLeft <= state.maxSeconds then
Nenue@29 411 local text
Nenue@29 412 if state.format then
Nenue@29 413 text = state.format(timeLeft)
Nenue@29 414 end
Nenue@29 415 return text, index
Nenue@29 416 end
Nenue@29 417 end
Nenue@29 418 return nil, nil
Nenue@29 419 end
Nenue@29 420 end
Nenue@29 421
Nenue@36 422 function WorldPlanCore:Refresh (forced)
Nenue@30 423 print('|cFFFFFF00'..self:GetName()..':Refresh()|r forced:', forced, 'init:', self.initialized)
Nenue@9 424 if not self.initialized then
Nenue@9 425 return
Nenue@9 426 end
Nenue@9 427
Nenue@40 428 for i, module in ipairs(db.OrderedModules) do
Nenue@0 429 if module.Refresh then
Nenue@33 430 print('|cFF00FF00external '..module:GetName()..':Refresh()|r')
Nenue@33 431 module:Refresh(forced)
Nenue@0 432 end
Nenue@0 433 end
Nenue@40 434
Nenue@40 435 self.isStale = nil
Nenue@0 436 end
Nenue@0 437
Nenue@0 438 -- insert visual options into the tracking button menu
Nenue@36 439 WorldPlanCore.OnDropDownInitialize = function (self, callback, dropType)
Nenue@0 440 if self ~= WorldMapFrameDropDown then
Nenue@0 441 return
Nenue@0 442 end
Nenue@40 443 local config = WorldPlanData
Nenue@0 444 local info = UIDropDownMenu_CreateInfo()
Nenue@0 445 info.text = ""
Nenue@0 446 info.isTitle = true
Nenue@0 447 UIDropDownMenu_AddButton(info)
Nenue@0 448 info.text = "|cFF00AAFFWorldPlan|r"
Nenue@0 449 info.isTitle = true
Nenue@0 450 UIDropDownMenu_AddButton(info)
Nenue@0 451 info.isTitle = nil
Nenue@0 452 info.disabled = nil
Nenue@0 453 info.keepShownOnClick = true
Nenue@0 454 info.tooltipOnButton = 1
Nenue@0 455
Nenue@9 456 info.text = "Enable"
Nenue@9 457 info.isNotRadio = true
Nenue@9 458 info.value = "EnablePins"
Nenue@40 459 info.checked = config.EnablePins
Nenue@9 460 info.tooltipTitle = "Enable World Quest Overlays"
Nenue@9 461 info.tooltipText = "Toggle the detail layers here."
Nenue@9 462 info.func = DropDown_OnClick
Nenue@9 463 UIDropDownMenu_AddButton(info)
Nenue@9 464
Nenue@9 465 info.text = "Display All Profession Quests"
Nenue@0 466 info.isNotRadio = true
Nenue@0 467 info.value = "ShowAllProfessionQuests"
Nenue@40 468 info.checked = config.ShowAllProfessionQuests
Nenue@0 469 info.tooltipTitle = "Hidden Quests"
Nenue@0 470 info.tooltipText = "Display work order and profession-related quests that are skipped by the default UI."
Nenue@0 471 info.func = DropDown_OnClick
Nenue@0 472 UIDropDownMenu_AddButton(info)
Nenue@0 473
Nenue@0 474 info.text = "Show Continent Pins"
Nenue@0 475 info.isNotRadio = true
Nenue@0 476 info.value = "DisplayContinentPins"
Nenue@40 477 info.checked = config.DisplayContinentPins
Nenue@0 478 info.tooltipTitle = "Continent Pins"
Nenue@0 479 info.tooltipText = "Display quest pins on the continent map (may get cramped)."
Nenue@0 480 info.func = DropDown_OnClick
Nenue@0 481 UIDropDownMenu_AddButton(info)
Nenue@0 482
Nenue@0 483 info.text = "Show Summary"
Nenue@0 484 info.isNotRadio = true
Nenue@0 485 info.value = "DisplayContinentSummary"
Nenue@0 486 info.tooltipTitle = "Summary Bar"
Nenue@0 487 info.tooltipText = "Display a summary of active world quests. Note: requires directly viewing Broken Isle and Dalaran maps to gain complete info."
Nenue@40 488 info.checked = config.DisplayContinentSummary
Nenue@9 489 info.func = DropDown_OnClick
Nenue@9 490 UIDropDownMenu_AddButton(info)
Nenue@9 491
Nenue@40 492
Nenue@40 493 info.text = "Nudge Pins"
Nenue@40 494 info.isNotRadio = true
Nenue@40 495 info.value = "NudgePins"
Nenue@40 496 info.tooltipTitle = "Pin Nudging"
Nenue@40 497 info.tooltipText = "Adjust the position of quest pins that overlap."
Nenue@40 498 info.checked = config.NudgePins
Nenue@40 499 info.func = DropDown_OnClick
Nenue@40 500 UIDropDownMenu_AddButton(info)
Nenue@40 501
Nenue@40 502 info.text = "Fade Whiled Grouped"
Nenue@9 503 info.isNotRadio = true
Nenue@9 504 info.value = "FadeWhileGrouped"
Nenue@9 505 info.tooltipTitle = "Group Fade"
Nenue@9 506 info.tooltipText = "Reduce pin alpha when grouped, so player dots are easier to see."
Nenue@40 507 info.checked = config.FadeWhileGrouped
Nenue@0 508 info.func = DropDown_OnClick
Nenue@0 509 UIDropDownMenu_AddButton(info)
Nenue@0 510 end
Nenue@0 511
Nenue@30 512 --------------------------------------------------------------------------------------------------------------------
Nenue@35 513 -------------------
Nenue@0 514
Nenue@0 515
Nenue@0 516
Nenue@0 517
Nenue@0 518
Nenue@0 519
Nenue@0 520
Nenue@35 521 --%end-debug%