local addonname, addon = ... local L = addon.L local options = {} local UpdateIconLists local function getprofile(info) return addon.db.profile[info[2]] end local function setprofile(info, val) addon.db.profile[info[2]] = val end options.general = { type = 'group', name = addonname, args = { general = { name = L['General'], type = 'group', order = 1, inline = true, args = { desc = { name = function(info) for k,v in pairs(addon.db.profile.enabled_in) do if v == true then return L['Kungaloosh will be automatically enabled when getting assigned as tank but can also be manually enabled with the slash command |cff00ff00/kl|r.'] end end return L['Kungaloosh must be manually enabled with the slash command |cff00ff00/kl|r.'] end, type = 'description', order = 1 }, sep = { order = 2, type = 'header', name = '' }, enabled_in = { name = L['Enable when assigned as tank in a ...'], desc = L['Enables the addon automatically if you\'re assigned as tank in a dungeon or raid'], type = 'multiselect', order = 3, width = 'half', values = { dungeon = L['Dungeon'], raid = L['Raid'] }, get = function(info, key) return addon.db.profile.enabled_in[key] end, set = function(info, key, val) addon.db.profile.enabled_in[key] = val end }, }, }, threat = { name = L['Threat'], type = 'group', order = 2, inline = true, args = { desc = { name = function(info) return L['Kungaloosh will place a raid target icon on the target when you have done |cffff0000%d|r or more threat to it.']:format(addon:GetMinThreat()) end, type = 'description', order = 1 }, sep = { order = 2, type = 'header', name = '' }, dynamic_minthreat = { name = L['Dynamic threat value'], desc = L['Tries to guess a good threat value based on your level'], type = 'toggle', order = 3, set = setprofile, get = getprofile }, minthreat = { name = L['Manual threat value'], desc = L['Threat value to have before placing a raid target icon'], type = 'input', order = 4, set = function(info, val) setprofile(info, tonumber(val)) end, get = function(info) return tostring(getprofile(info)) end, disabled = function(info) return addon.db.profile.dynamic_minthreat end, validate = function(info, value) if tonumber(value) then return true else return L['Invalid number'] end end } } }, icons = { name = L['Icons'], type = 'group', order = 3, inline = true, args = { desc = { name = L['Here you can customize what icons to use and in what order they will be placed. Click on the icon to either add or remove it.'], type = 'description', order = 1 }, sep = { order = 2, type = 'header', name = '' }, enabled = { name = L['Enabled'], type = 'group', order = 3, args = {} }, disabled = { name = L['Available'], type = 'group', order = 4, args = {} } }, }, } } local GetRaidTargetCoords, CreateIconOptions, IconExecuteFunc, UpdateIconLists local iconopts = {} function GetRaidTargetCoords(i) local index = i - 1 local inc = RAID_TARGET_ICON_DIMENSION / RAID_TARGET_TEXTURE_DIMENSION local left = mod(index, RAID_TARGET_TEXTURE_COLUMNS) * inc local right = left + inc local top = floor(index / RAID_TARGET_TEXTURE_ROWS) * inc local bottom = top + inc return left, right, top, bottom end function IconExecuteFunc(info) local state, icon = info[2], tonumber(info[3]) if state == 'enabled' then for i,v in ipairs(addon.db.profile.raid_icons) do if v == icon then table.remove(addon.db.profile.raid_icons, i) end end else table.insert(addon.db.profile.raid_icons, icon) end UpdateIconLists() end function CreateIconOptions(icon) return { type = 'execute', name = _G['RAID_TARGET_'..icon], image = [[Interface\TargetingFrame\UI-RaidTargetingIcons]], imageCoords = { GetRaidTargetCoords(icon) }, imageWidth = 16, imageHeight = 16, width = 'half', func = IconExecuteFunc } end function UpdateIconLists() local function IsEnabled(icon) for i,v in ipairs(addon.db.profile.raid_icons) do if v == icon then return true end end end table.wipe(options.general.args.icons.args.enabled.args) table.wipe(options.general.args.icons.args.disabled.args) for i, icon in ipairs(addon.db.profile.raid_icons) do local icontbl = iconopts[icon] icontbl.order = i options.general.args.icons.args.enabled.args[tostring(icon)] = icontbl end for i = 1,8 do if not IsEnabled(i) then local icontbl = iconopts[i] icontbl.order = i options.general.args.icons.args.disabled.args[tostring(i)] = icontbl end end LibStub('AceConfigRegistry-3.0'):NotifyChange(addonname) end function addon:CreateConfig() options.profiles = LibStub('AceDBOptions-3.0'):GetOptionsTable(self.db) LibStub('AceConfig-3.0'):RegisterOptionsTable('Kungaloosh-General', options.general) LibStub('AceConfig-3.0'):RegisterOptionsTable('Kungaloosh-Profiles', options.profiles) LibStub('AceConfigDialog-3.0'):AddToBlizOptions('Kungaloosh-General', addonname) LibStub('AceConfigDialog-3.0'):AddToBlizOptions('Kungaloosh-Profiles', 'Profiles', addonname) LibStub('tekKonfig-AboutPanel').new(addonname, addonname) for i = 1,8 do iconopts[i] = CreateIconOptions(i) end self.db.RegisterCallback(self, 'OnNewProfile', UpdateIconLists) self.db.RegisterCallback(self, 'OnProfileChanged', UpdateIconLists) self.db.RegisterCallback(self, 'OnProfileCopied', UpdateIconLists) self.db.RegisterCallback(self, 'OnProfileDeleted', UpdateIconLists) self.db.RegisterCallback(self, 'OnProfileReset', UpdateIconLists) UpdateIconLists() end