You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1271 lines
35 KiB

4 years ago
local GatherMate = LibStub("AceAddon-3.0"):GetAddon("GatherMate2")
local Config = GatherMate:NewModule("Config","AceEvent-3.0")
local Display = GatherMate:GetModule("Display")
local L = LibStub("AceLocale-3.0"):GetLocale("GatherMate2", false)
-- Databroker support
local DataBroker = LibStub:GetLibrary("LibDataBroker-1.1",true)
local SaveBindings = SaveBindings or AttemptToSaveBindings
--[[
Code here for configuring the mod, and making the minimap button
]]
-- Setup keybinds (these need to be global strings to show up properly in ESC -> Key Bindings)
BINDING_HEADER_GatherMate2 = "GatherMate2"
BINDING_NAME_TOGGLE_GATHERMATE2_MINIMAPICONS = L["Keybind to toggle Minimap Icons"]
BINDING_NAME_TOGGLE_GATHERMATE2_MAINMAPICONS = L["Keybind to toggle Worldmap Icons"]
-- A helper function for keybindings
local KeybindHelper = {}
do
local t = {}
function KeybindHelper:MakeKeyBindingTable(...)
for k in pairs(t) do t[k] = nil end
for i = 1, select("#", ...) do
local key = select(i, ...)
if key ~= "" then
tinsert(t, key)
end
end
return t
end
end
local prof_options = {
always = L["Always show"],
with_profession = L["Only with profession"],
active = L["Only while tracking"],
never = L["Never show"],
}
local prof_options2 = { -- For Gas, which doesn't have tracking as a skill
always = L["Always show"],
with_profession = L["Only with profession"],
never = L["Never show"],
}
local prof_options3 = {
always = L["Always show"],
active = L["Only while tracking"],
never = L["Never show"],
}
local prof_options4 = { -- For Archaeology, which doesn't have tracking as a skill
always = L["Always show"],
active = L["Only with digsite"],
with_profession = L["Only with profession"],
never = L["Never show"],
}
local db
local imported = {}
-- setup the options, we need to reference GatherMate for this
local function get(k) return db[k.arg] end
local function set(k, v) db[k.arg] = v; Config:UpdateConfig(); end
local generalOptions = {
type = "group",
get = function(k) return db.show[k.arg] end,
set = function(k, v) db.show[k.arg] = v; Config:UpdateConfig(); end,
args = {
desc = {
order = 0,
type = "description",
name = L["Selected databases are shown on both the World Map and Minimap."],
},
showMinerals = {
order = 1,
name = L["Show Mining Nodes"],
desc = L["Toggle showing mining nodes."],
type = "select",
values = prof_options,
arg = "Mining"
},
showHerbs = {
order = 2,
name = L["Show Herbalism Nodes"],
desc = L["Toggle showing herbalism nodes."],
type = "select",
values = prof_options,
arg = "Herb Gathering"
},
showFishes = {
order = 3,
name = L["Show Fishing Nodes"],
desc = L["Toggle showing fishing nodes."],
type = "select",
values = prof_options,
arg = "Fishing"
},
showGases = {
order = 4,
name = L["Show Gas Clouds"],
desc = L["Toggle showing gas clouds."],
type = "select",
values = prof_options2,
arg = "Extract Gas",
},
showTreasure = {
order = 5,
name = L["Show Treasure Nodes"],
desc = L["Toggle showing treasure nodes."],
type = "select",
values = prof_options3,
arg = "Treasure"
},
showArchaeology = {
order = 6,
name = L["Show Archaeology Nodes"],
desc = L["Toggle showing archaeology nodes."],
type = "select",
values = prof_options4,
arg = "Archaeology",
},
showTimber = {
order = 7,
name = L["Show Timber Nodes"],
desc = L["Toggle showing timber nodes."],
type = "select",
values = prof_options3,
arg = "Logging",
},
},
}
local minimapOptions = {
type = "group",
get = get,
set = set,
args = {
desc = {
order = 0,
type = "description",
name = L["Control various aspects of node icons on both the World Map and Minimap."],
},
showWorldMapIcons = {
order = 1,
name = L["Show World Map Icons"],
desc = L["Toggle showing World Map icons."],
type = "toggle",
arg = "showWorldMap",
width = "full",
},
worldMapIconsInteractive = {
order = 1.5,
name = L["World Map Icons Clickable"],
desc = L["Toggle if World Map icons are clickable (to remove them or generate way points)."],
type = "toggle",
arg = "worldMapIconsInteractive",
width = "full",
disabled = function() return not db.showWorldMap end,
},
showMinimapIcons = {
order = 2,
name = L["Show Minimap Icons"],
desc = L["Toggle showing Minimap icons."],
type = "toggle",
arg = "showMinimap",
width = "full",
},
minimapTooltips = {
order = 3,
name = L["Minimap Icon Tooltips"],
desc = L["Toggle showing Minimap icon tooltips."],
type = "toggle",
arg = "minimapTooltips",
width = "full",
disabled = function() return not db.showMinimap end,
},
minimapNodeRange = {
order = 4,
type = "toggle",
name = L["Show Nodes on Minimap Border"],
desc = L["Shows more Nodes that are currently out of range on the minimap's border."],
arg = "nodeRange",
width = "full",
disabled = function() return not db.showMinimap end,
},
togglekey = {
order = 5,
name = L["Keybind to toggle Minimap Icons"],
desc = L["Keybind to toggle Minimap Icons"],
type = "keybinding",
width = "full",
get = function(info)
return table.concat(KeybindHelper:MakeKeyBindingTable(GetBindingKey("TOGGLE_GATHERMATE2_MINIMAPICONS")), ", ")
end,
set = function(info, key)
if key == "" then
local t = KeybindHelper:MakeKeyBindingTable(GetBindingKey("TOGGLE_GATHERMATE2_MINIMAPICONS"))
for i = 1, #t do
SetBinding(t[i])
end
else
local oldAction = GetBindingAction(key)
local frame = LibStub("AceConfigDialog-3.0").OpenFrames["GatherMate"]
if frame then
if ( oldAction ~= "" and oldAction ~= "TOGGLE_GATHERMATE2_MINIMAPICONS" ) then
frame:SetStatusText(KEY_UNBOUND_ERROR:format(GetBindingText(oldAction, "BINDING_NAME_")))
else
frame:SetStatusText(KEY_BOUND)
end
end
SetBinding(key, "TOGGLE_GATHERMATE2_MINIMAPICONS")
end
SaveBindings(GetCurrentBindingSet())
end,
},
toggleWkey = {
order = 6,
name = L["Keybind to toggle Worldmap Icons"],
desc = L["Keybind to toggle Worldmap Icons"],
type = "keybinding",
width = "full",
get = function(info)
return table.concat(KeybindHelper:MakeKeyBindingTable(GetBindingKey("TOGGLE_GATHERMATE2_MAINMAPICONS")), ", ")
end,
set = function(info, key)
if key == "" then
local t = KeybindHelper:MakeKeyBindingTable(GetBindingKey("TOGGLE_GATHERMATE2_MAINMAPICONS"))
for i = 1, #t do
SetBinding(t[i])
end
else
local oldAction = GetBindingAction(key)
local frame = LibStub("AceConfigDialog-3.0").OpenFrames["GatherMate"]
if frame then
if ( oldAction ~= "" and oldAction ~= "TOGGLE_GATHERMATE2_MAINMAPICONS" ) then
frame:SetStatusText(KEY_UNBOUND_ERROR:format(GetBindingText(oldAction, "BINDING_NAME_")))
else
frame:SetStatusText(KEY_BOUND)
end
end
SetBinding(key, "TOGGLE_GATHERMATE2_MAINMAPICONS")
end
SaveBindings(GetCurrentBindingSet())
end,
},
iconScale = {
order = 10,
name = L["World Map Icon Scale"],
desc = L["Icon scaling, this lets you enlarge or shrink your icons on the World Map."],
type = "range",
min = 0.5, max = 5, step = 0.01,
arg = "scale",
},
miconScale = {
order = 11,
name = L["Minimap Icon Scale"],
desc = L["Icon scaling, this lets you enlarge or shrink your icons on the Minimap."],
type = "range",
min = 0.5, max = 5, step = 0.01,
arg = "miniscale",
},
iconAlpha = {
order = 12,
name = L["Icon Alpha"],
desc = L["Icon alpha value, this lets you change the transparency of the icons. Only applies on World Map."],
type = "range",
min = 0.1, max = 1, step = 0.05,
arg = "alpha",
},
tracking = {
order = 20,
name = L["Tracking Circle Color"],
desc = L["Color of the tracking circle."],
type = "group",
inline = true,
get = function(info)
local t = db.trackColors[info.arg]
return t.Red, t.Green, t.Blue, t.Alpha
end,
set = function(info, r, g, b, a)
local t = db.trackColors[info.arg]
t.Red = r
t.Green = g
t.Blue = b
t.Alpha = a
Config:UpdateConfig()
end,
args = {
trackingColorMine = {
order = 1,
name = L["Mineral Veins"],
desc = L["Color of the tracking circle."],
type = "color",
hasAlpha = true,
arg = "Mining",
},
trackingColorHerb = {
order = 2,
name = L["Herb Bushes"],
desc = L["Color of the tracking circle."],
type = "color",
hasAlpha = true,
arg = "Herb Gathering",
},
trackingColorFish = {
order = 3,
name = L["Fishing"],
desc = L["Color of the tracking circle."],
type = "color",
hasAlpha = true,
arg = "Fishing",
},
trackingColorGas = {
order = 4,
name = L["Gas Clouds"],
desc = L["Color of the tracking circle."],
type = "color",
hasAlpha = true,
arg = "Extract Gas",
},
trackingColorTreasure = {
order = 6,
name = L["Treasure"],
desc = L["Color of the tracking circle."],
type = "color",
hasAlpha = true,
arg = "Treasure",
},
trackingColorArchaelogy = {
order = 7,
name = L["Archaeology"],
desc = L["Color of the tracking circle."],
type = "color",
hasAlpha = true,
arg = "Archaeology",
},
space = {
order = 10,
name = "",
desc = "",
type = "description",
width = "full",
},
trackDistance = {
order = 15,
name = L["Tracking Distance"],
desc = L["The distance in yards to a node before it turns into a tracking circle"],
type = "range",
min = 50, max = 240, step = 5,
get = get,
set = set,
arg = "trackDistance",
},
trackShow = {
order = 20,
name = L["Show Tracking Circle"],
desc = L["Toggle showing the tracking circle."],
type = "select",
get = get,
set = set,
values = prof_options,
arg = "trackShow",
},
},
},
},
}
-- Setup some storage arrays by db to sort node names and zones alphabetically
local delocalizedZones = {}
local denormalizedNames = {}
local sortedFilter = setmetatable({}, {__index = function(t, k)
local new = {}
table.wipe(delocalizedZones)
if k == "zones" then
for index, zoneID in pairs(GatherMate.HBD:GetAllMapIDs()) do
local name = GatherMate:MapLocalize(zoneID)
new[name] = name
delocalizedZones[name] = zoneID
end
else
local expansion = GatherMate.nodeExpansion[k]
local map = GatherMate.nodeIDs[k]
for name in pairs(map) do
local idx = #new+1
new[idx] = name
denormalizedNames[name] = name
end
if expansion then
-- We only end up creating one function per tracked type anyway
table.sort(new, function(a, b)
local mA, mB = expansion[map[a]], expansion[map[b]]
if not mA or not mB or mA == mB then return map[a] > map[b]
else return mA > mB end
end)
else
table.sort(new)
end
end
rawset(t, k, new)
return new
end})
-- Setup some helper functions
local ConfigFilterHelper = {}
function ConfigFilterHelper:SelectAll(info)
local db = db.filter[info.arg]
local nids = GatherMate.nodeIDs[info.arg]
for k, v in pairs(nids) do
db[v] = true
end
Config:UpdateConfig()
end
function ConfigFilterHelper:SelectNone(info)
local db = db.filter[info.arg]
local nids = GatherMate.nodeIDs[info.arg]
for k, v in pairs(nids) do
db[v] = false
end
Config:UpdateConfig()
end
function ConfigFilterHelper:SetState(info, nodeIndex, state)
local nodeName = sortedFilter[info.arg][nodeIndex]
if nodeName:find("^%(%d+%)") then nodeName = nodeName:match("^%(%d+%) (.*)$") end
db.filter[info.arg][GatherMate.nodeIDs[info.arg][nodeName]] = state
Config:UpdateConfig()
end
function ConfigFilterHelper:GetState(info, nodeIndex)
local nodeName = sortedFilter[info.arg][nodeIndex]
if nodeName:find("^%(%d+%)") then nodeName = nodeName:match("^%(%d+%) (.*)$") end
return db.filter[info.arg][GatherMate.nodeIDs[info.arg][nodeName]]
end
local ImportHelper = {}
function ImportHelper:GetImportStyle(info,k)
return db["importers"][info.arg].Style
end
function ImportHelper:SetImportStyle(info,k,state)
db["importers"][info.arg].Style = k
end
function ImportHelper:GetImportDatabase(info,k)
return db["importers"][info.arg].Databases[k]
end
function ImportHelper:SetImportDatabase(info,k,state)
db["importers"][info.arg].Databases[k] = state
end
function ImportHelper:GetAutoImport(info, k)
return db["importers"][info.arg].autoImport
end
function ImportHelper:SetAutoImport(info,state)
db["importers"][info.arg].autoImport = state
end
function ImportHelper:GetBCOnly(info,k)
return db["importers"][info.arg].bcOnly
end
function ImportHelper:SetBCOnly(info,state)
db["importers"][info.arg].bcOnly = state
end
function ImportHelper:GetExpacOnly(info,k)
return db["importers"][info.arg].expacOnly
end
function ImportHelper:SetExpacOnly(info,state)
db["importers"][info.arg].expacOnly = state
end
function ImportHelper:GetExpac(info,k)
return db["importers"][info.arg].expac
end
function ImportHelper:SetExpac(info,state)
db["importers"][info.arg].expac = state
end
local filterOptions = {
type = "group",
name = L["Filters"],
order = 2,
get = get,
set = set,
childGroups = "tab",
handler = ConfigFilterHelper,
args = {
heading = {
order = 0,
type = "description",
name = L["Filter_Desc"],
width = "full",
},
},
}
filterOptions.args.herbs = {
type = "group",
name = L["Herbalism"],
desc = L["Select the herb nodes you wish to display."],
args = {
select_all = {
order = 1,
name = L["Select All"],
desc = L["Select all nodes"],
type = "execute",
func = "SelectAll",
arg = "Herb Gathering",
},
select_none = {
order = 2,
desc = L["Clear node selections"],
name = L["Select None"],
type = "execute",
func = "SelectNone",
arg = "Herb Gathering",
},
herblist = {
order = 3,
name = L["Herb Bushes"],
type = "multiselect",
values = sortedFilter["Herb Gathering"],
set = "SetState",
get = "GetState",
arg = "Herb Gathering",
},
},
}
filterOptions.args.mines = {
type = "group",
name = L["Mining"],
desc = L["Select the mining nodes you wish to display."],
args = {
select_all = {
order = 1,
name = L["Select All"],
desc = L["Select all nodes"],
type = "execute",
func = "SelectAll",
arg = "Mining",
},
select_none = {
order = 2,
desc = L["Clear node selections"],
name = L["Select None"],
type = "execute",
func = "SelectNone",
arg = "Mining",
},
minelist = {
order = 3,
name = L["Mineral Veins"],
type = "multiselect",
values = sortedFilter["Mining"],
set = "SetState",
get = "GetState",
arg = "Mining",
},
},
}
filterOptions.args.fish = {
type = "group",
name = L["Fishing"],
args = {
select_all = {
order = 1,
name = L["Select All"],
desc = L["Select all nodes"],
type = "execute",
func = "SelectAll",
arg = "Fishing",
},
select_none = {
order = 2,
desc = L["Clear node selections"],
name = L["Select None"],
type = "execute",
func = "SelectNone",
arg = "Fishing",
},
fishlist = {
order = 3,
name = L["Fishes"],
type = "multiselect",
desc = L["Select the fish nodes you wish to display."],
values = sortedFilter["Fishing"],
set = "SetState",
get = "GetState",
arg = "Fishing",
},
},
}
filterOptions.args.gas = {
type = "group",
name = L["Gas Clouds"],
args = {
select_all = {
order = 1,
name = L["Select All"],
desc = L["Select all nodes"],
type = "execute",
func = "SelectAll",
arg = "Extract Gas",
},
select_none = {
order = 2,
name = L["Select None"],
desc = L["Clear node selections"],
type = "execute",
func = "SelectNone",
arg = "Extract Gas",
},
gaslist = {
order = 3,
name = L["Gas Clouds"],
desc = L["Select the gas clouds you wish to display."],
type = "multiselect",
values = sortedFilter["Extract Gas"],
set = "SetState",
get = "GetState",
arg = "Extract Gas",
},
},
}
filterOptions.args.treasure = {
type = "group",
name = L["Treasure"],
args = {
select_all = {
order = 1,
name = L["Select All"],
desc = L["Select all nodes"],
type = "execute",
func = "SelectAll",
arg = "Treasure",
},
select_none = {
order = 2,
name = L["Select None"],
desc = L["Clear node selections"],
type = "execute",
func = "SelectNone",
arg = "Treasure",
},
treasurelist = {
order = 3,
name = L["Treasure"],
desc = L["Select the treasure you wish to display."],
type = "multiselect",
values = sortedFilter["Treasure"],
set = "SetState",
get = "GetState",
arg = "Treasure",
},
},
}
filterOptions.args.archaeology = {
type = "group",
name = L["Archaeology"],
args = {
select_all = {
order = 1,
name = L["Select All"],
desc = L["Select all nodes"],
type = "execute",
func = "SelectAll",
arg = "Archaeology",
},
select_none = {
order = 2,
name = L["Select None"],
desc = L["Clear node selections"],
type = "execute",
func = "SelectNone",
arg = "Archaeology",
},
diglist = {
order = 3,
name = L["Archaeology"],
desc = L["Select the archaeology nodes you wish to display."],
type = "multiselect",
values = sortedFilter["Archaeology"],
set = "SetState",
get = "GetState",
arg = "Archaeology",
},
},
}
local selectedDatabase, selectedNode, selectedZone = "Herb Gathering", 0, nil
-- Cleanup config tree
local maintenanceOptions = {
type = "group",
name = L["Database Maintenance"],
get = get,
set = set,
args = {
desc = {
order = 1,
type = "description",
name = L["Cleanup_Desc"],
},
cleanup = {
name = L["Cleanup Database"],
desc = L["Cleanup your database by removing duplicates. This takes a few moments, be patient."],
type = "execute",
handler = GatherMate,
func = "CleanupDB",
order = 5,
width = "full",
disabled = function() return GatherMate:IsCleanupRunning() end
},
cleanup_range = {
order = 10,
name = L["Cleanup radius"],
type = "group",
get = function(info)
return db.cleanupRange[info.arg]
end,
set = function(info, v)
db.cleanupRange[info.arg] = v
end,
args = {
desc = {
order = 0,
type = "description",
name = L["CLEANUP_RADIUS_DESC"],
},
Mine = {
order = 5,
name = L["Mineral Veins"],
desc = L["Cleanup radius"],
type = "range",
min = 0, max = 30, step = 1,
arg = "Mining",
},
Herb = {
order = 5,
name = L["Herb Bushes"],
desc = L["Cleanup radius"],
type = "range",
min = 0, max = 30, step = 1,
arg = "Herb Gathering",
},
Fish = {
order = 5,
name = L["Fishes"],
desc = L["Cleanup radius"],
type = "range",
min = 0, max = 30, step = 1,
arg = "Fishing",
},
Gas = {
order = 5,
name = L["Gas Clouds"],
desc = L["Cleanup radius"],
type = "range",
min = 0, max = 100, step = 1,
arg = "Extract Gas",
},
Treasure = {
order = 5,
name = L["Treasure"],
desc = L["Cleanup radius"],
type = "range",
min = 0, max = 30, step = 1,
arg = "Treasure",
},
Archaeology = {
order = 5,
name = L["Archaeology"],
desc = L["Cleanup radius"],
type = "range",
min = 0, max = 30, step = 1,
arg = "Archaeology",
}
},
},
deleteSelective = {
order = 20,
name = L["Delete Specific Nodes"],
type = "group",
args = {
desc = {
order = 0,
type = "description",
name = L["DELETE_SPECIFIC_DESC"],
},
selectDB = {
order = 30,
name = L["Select Database"],
desc = L["Select Database"],
type = "select",
values = {
["Fishing"] = L["Fishes"],
["Treasure"] = L["Treasure"],
["Herb Gathering"] = L["Herb Bushes"],
["Mining"] = L["Mineral Veins"],
["Extract Gas"] = L["Gas Clouds"],
["Archaeology"] = L["Archaeology"],
},
get = function() return selectedDatabase end,
set = function(k, v)
selectedDatabase = v
selectedNode = 0
end,
},
selectNode = {
order = 40,
name = L["Select Node"],
desc = L["Select Node"],
type = "select",
values = function()
return sortedFilter[selectedDatabase]
end,
get = function() return selectedNode end,
set = function(k, v) selectedNode = v end,
},
selectZone = {
order = 50,
name = L["Select Zone"],
desc = L["Select Zone"],
type = "select",
values = sortedFilter["zones"],
get = function() return selectedZone end,
set = function(k, v) selectedZone = v end,
},
delete = {
order = 60,
name = L["Delete"],
desc = L["Delete selected node from selected zone"],
type = "execute",
confirm = true,
confirmText = L["Are you sure you want to delete all of the selected node from the selected zone?"],
func = function()
if selectedZone and selectedNode ~= 0 then
local nodeName = sortedFilter[selectedDatabase][selectedNode]
nodeName = denormalizedNames[nodeName]
GatherMate:DeleteNodeFromZone(selectedDatabase, GatherMate.nodeIDs[selectedDatabase][nodeName], delocalizedZones[selectedZone])
end
end,
disabled = function()
return selectedNode == 0 or selectedZone == nil
end,
},
},
},
delete = {
order = 30,
name = L["Delete Entire Database"],
type = "group",
func = function(info)
GatherMate:ClearDB(info.arg)
end,
args = {
desc = {
order = 0,
type = "description",
name = L["DELETE_ENTIRE_DESC"],
},
Mine = {
order = 5,
name = L["Mineral Veins"],
desc = L["Delete Entire Database"],
type = "execute",
arg = "Mining",
confirm = true,
confirmText = L["Are you sure you want to delete all nodes from this database?"],
},
Herb = {
order = 5,
name = L["Herb Bushes"],
desc = L["Delete Entire Database"],
type = "execute",
arg = "Herb Gathering",
confirm = true,
confirmText = L["Are you sure you want to delete all nodes from this database?"],
},
Fish = {
order = 5,
name = L["Fishes"],
desc = L["Delete Entire Database"],
type = "execute",
arg = "Fishing",
confirm = true,
confirmText = L["Are you sure you want to delete all nodes from this database?"],
},
Gas = {
order = 5,
name = L["Gas Clouds"],
desc = L["Delete Entire Database"],
type = "execute",
arg = "Extract Gas",
confirm = true,
confirmText = L["Are you sure you want to delete all nodes from this database?"],
},
Treasure = {
order = 5,
name = L["Treasure"],
desc = L["Delete Entire Database"],
type = "execute",
arg = "Treasure",
confirm = true,
confirmText = L["Are you sure you want to delete all nodes from this database?"],
},
Archaeology = {
order = 5,
name = L["Archaeology"],
desc = L["Delete Entire Database"],
type = "execute",
arg = "Archaeology",
confirm = true,
confirmText = L["Are you sure you want to delete all nodes from this database?"],
},
},
},
dblocking = {
order = 11,
name = L["Database Locking"],
type = "group",
get = function(info)
return db.dbLocks[info.arg]
end,
set = function(info,v)
db.dbLocks[info.arg] = v
end,
args = {
desc = {
order = 0,
type = "description",
name = L["DATABASE_LOCKING_DESC"],
},
Mine = {
order = 5,
name = L["Mineral Veins"],
desc = L["Database locking"],
type = "toggle",
arg = "Mining",
},
Herb = {
order = 5,
name = L["Herb Bushes"],
desc = L["Database locking"],
type = "toggle",
arg = "Herb Gathering",
},
Fish = {
order = 5,
name = L["Fishes"],
desc = L["Database locking"],
type = "toggle",
arg = "Fishing",
},
Gas = {
order = 5,
name = L["Gas Clouds"],
desc = L["Database locking"],
type = "toggle",
arg = "Extract Gas",
},
Treasure = {
order = 5,
name = L["Treasure"],
desc = L["Database locking"],
type = "toggle",
arg = "Treasure",
},
Archaeology = {
order = 5,
name = L["Archaeology"],
desc = L["Database locking"],
type = "toggle",
arg = "Archaeology",
}
}
},
},
}
-- GatherMateData Import config tree
local importOptions = {
type = "group",
name = L["Import Data"],
order = 10,
args = {},
get = get,
set = set,
childGroups = "tab",
}
ImportHelper.db_options = {
["Merge"] = L["Merge"],
["Overwrite"] = L["Overwrite"]
}
ImportHelper.db_tables =
{
["Herbs"] = L["Herbalism"],
["Mines"] = L["Mining"],
["Gases"] = L["Gas Clouds"],
["Fish"] = L["Fishing"],
["Treasure"] = L["Treasure"],
["Archaeology"] = L["Archaeology"],
}
ImportHelper.expac_data = {
["TBC"] = L["The Burning Crusades"],
["WRATH"] = L["Wrath of the Lich King"],
["CATACLYSM"] = L["Cataclysm"],
["MISTS"] = L["Mists of Pandaria"],
["WOD"] = L["Warlords of Draenor"],
["LEGION"] = L["Legion"],
["BFA"] = L["Battle for Azeroth"],
["SL"] = L["Shadowlands"],
}
imported["GatherMate2_Data"] = false
importOptions.args.GatherMateData = {
type = "group",
name = "GatherMate2Data", -- addon name to import from, don't localize
handler = ImportHelper,
disabled = function()
local name, title, notes, loadable, reason, security, newVersion = GetAddOnInfo("GatherMate2_Data")
local enabled = GetAddOnEnableState(UnitName("player"), "GatherMate2_Data") > 0
-- disable if the addon is not enabled, or
-- disable if there is a reason why it can't be loaded ("MISSING" or "DISABLED")
return not enabled or (reason ~= nil and reason ~= "DEMAND_LOADED")
end,
args = {
desc = {
order = 0,
type = "description",
name = L["Importing_Desc"],
},
loadType = {
order = 1,
name = L["Import Style"],
desc = L["Merge will add GatherMate2Data to your database. Overwrite will replace your database with the data in GatherMate2Data"],
type = "select",
values = ImportHelper.db_options,
set = "SetImportStyle",
get = "GetImportStyle",
arg = "GatherMate2_Data",
},
loadDatabase = {
order = 2,
name = L["Databases to Import"],
desc = L["Databases you wish to import"],
type = "multiselect",
values = ImportHelper.db_tables,
set = "SetImportDatabase",
get = "GetImportDatabase",
arg = "GatherMate2_Data",
},
stylebox = {
order = 4,
type = "group",
name = L["Import Options"],
inline = true,
args = {
loadExpacToggle = {
order = 4,
name = L["Expansion Data Only"],
type = "toggle",
get = "GetExpacOnly",
set = "SetExpacOnly",
arg = "GatherMate2_Data"
},
loadExpansion = {
order = 4,
name = L["Expansion"],
desc = L["Only import selected expansion data from WoWhead"],
type = "select",
get = "GetExpac",
set = "SetExpac",
values = ImportHelper.expac_data,
arg = "GatherMate2_Data",
},
loadAuto = {
order = 5,
name = L["Auto Import"],
desc = L["Automatically import when ever you update your data module, your current import choice will be used."],
type = "toggle",
get = "GetAutoImport",
set = "SetAutoImport",
arg = "GatherMate2_Data",
},
}
},
loadData = {
order = 8,
name = L["Import GatherMate2Data"],
desc = L["Load GatherMate2Data and import the data to your database."],
type = "execute",
func = function()
local loaded, reason = LoadAddOn("GatherMate2_Data")
local GatherMateData = LibStub("AceAddon-3.0"):GetAddon("GatherMate2_Data")
if loaded and GatherMateData.generatedVersion then
local dataVersion = tonumber(GatherMateData.generatedVersion:match("%d+"))
local filter = nil
if db.importers["GatherMate2_Data"].expacOnly then
filter = db.importers["GatherMate2_Data"].expac
end
GatherMateData:PerformMerge(db.importers["GatherMate2_Data"].Databases,db.importers["GatherMate2_Data"].Style,filter)
GatherMateData:CleanupImportData()
print(L["GatherMate2Data has been imported."])
Config:SendMessage("GatherMate2ConfigChanged")
db["importers"]["GatherMate2_Data"]["lastImport"] = dataVersion
imported["GatherMate2_Data"] = true
GatherMate:RemoveDepracatedNodes()
else
print(L["Failed to load GatherMateData due to "]..reason)
end
end,
disabled = function()
local cm = 0
if db["importers"]["GatherMate2_Data"].Databases["Mines"] then cm = 1 end
if db["importers"]["GatherMate2_Data"].Databases["Herbs"] then cm = 1 end
if db["importers"]["GatherMate2_Data"].Databases["Fish"] then cm = 1 end
if db["importers"]["GatherMate2_Data"].Databases["Gases"] then cm = 1 end
if db["importers"]["GatherMate2_Data"].Databases["Treasure"] then cm = 1 end
if db["importers"]["GatherMate2_Data"].Databases["Archaeology"] then cm = 1 end
return imported["GatherMate2_Data"] or (cm == 0 and not imported["GatherMate2_Data"])
end,
}
},
}
local faqOptions = {
type = "group",
name = L["Frequently Asked Questions"],
args = {
desc = {
type = "description",
name = L["FAQ_TEXT"],
width = "full",
fontSize = "medium",
},
},
}
--[[
Initialize the Config System
]]
local acr = LibStub("AceConfigRegistry-3.0")
local acd = LibStub("AceConfigDialog-3.0")
local function findPanel(name, parent)
for i, button in next, InterfaceOptionsFrameAddOns.buttons do
if button.element then
if name and button.element.name == name then return button
elseif parent and button.element.parent == parent then return button
end
end
end
end
function Config:OnInitialize()
db = GatherMate.db.profile
self.importHelper = ImportHelper
acr:RegisterOptionsTable("GatherMate 2", generalOptions)
local options = acd:AddToBlizOptions("GatherMate 2", "GatherMate 2")
if InterfaceOptionsFrameAddOns then
options:HookScript("OnShow", function()
local p = findPanel("GatherMate 2")
if p and p.element.collapsed then OptionsListButtonToggle_OnClick(p.toggle) end
end)
end
4 years ago
acr:RegisterOptionsTable("GM2/Minimap", minimapOptions)
acd:AddToBlizOptions("GM2/Minimap", "Minimap", "GatherMate 2")
acr:RegisterOptionsTable("GM2/Filter", filterOptions)
acd:AddToBlizOptions("GM2/Filter", "Filters", "GatherMate 2")
acr:RegisterOptionsTable("GM2/Maintenance", maintenanceOptions)
acd:AddToBlizOptions("GM2/Maintenance", "Maintenance", "GatherMate 2")
acr:RegisterOptionsTable("GM2/Import", importOptions)
acd:AddToBlizOptions("GM2/Import", "Import", "GatherMate 2")
acr:RegisterOptionsTable("GM2/Profiles", LibStub("AceDBOptions-3.0"):GetOptionsTable(GatherMate2.db))
acd:AddToBlizOptions("GM2/Profiles", "Profiles", "GatherMate 2")
acr:RegisterOptionsTable("GM2/FAQ", faqOptions)
acd:AddToBlizOptions("GM2/FAQ", "FAQ", "GatherMate 2")
local function openOptions()
InterfaceOptionsFrame_OpenToCategory("GatherMate 2")
end
SLASH_GatherMate21 = "/gathermate"
SlashCmdList.GatherMate2 = openOptions
self:RegisterMessage("GatherMate2ConfigChanged")
if DataBroker then
local launcher = DataBroker:NewDataObject("GatherMate2", {
type = "launcher",
icon = "Interface\\AddOns\\GatherMate2\\Artwork\\Icon.tga",
OnClick = function(obj, btn)
if btn == "RightButton" then
return openOptions()
elseif IsShiftKeyDown() then
GatherMate2.db.profile.showWorldMap = not GatherMate2.db.profile.showWorldMap
else
GatherMate2.db.profile.showMinimap = not GatherMate2.db.profile.showMinimap
end
Config:UpdateConfig()
end,
OnTooltipShow = function(tip)
tip:AddLine("GatherMate2", NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b)
tip:AddLine(" ")
tip:AddDoubleLine(L["Minimap Icons"], GatherMate2.db.profile.showMinimap and (GREEN_FONT_COLOR_CODE .. L["Enabled"] .. "|r") or (GRAY_FONT_COLOR_CODE .. L["Disabled"] .. "|r"))
tip:AddDoubleLine(L["World Map Icons"], GatherMate2.db.profile.showWorldMap and (GREEN_FONT_COLOR_CODE .. L["Enabled"] .. "|r") or (GRAY_FONT_COLOR_CODE .. L["Disabled"] .. "|r"))
tip:AddLine(" ")
tip:AddLine(L["Click to toggle minimap icons."])
tip:AddLine(L["Shift-click to toggle world map icons."])
tip:AddLine(L["Right-click for options."])
tip:Show()
end,
})
end
end
function Config:OnEnable()
self:CheckAutoImport()
end
function Config:UpdateConfig()
self:SendMessage("GatherMate2ConfigChanged")
end
function Config:GatherMate2ConfigChanged()
db = GatherMate.db.profile
end
function Config:CheckAutoImport()
for k,v in pairs(db.importers) do
local verline = GetAddOnMetadata(k, "X-Generated-Version")
if verline and v["autoImport"] then
local dataVersion = tonumber(verline:match("%d+"))
if dataVersion and dataVersion > v["lastImport"] then
local loaded, reason = LoadAddOn(k)
if loaded then
local addon = LibStub("AceAddon-3.0"):GetAddon(k)
local filter = nil
if v.expacOnly then
filter = v.expac
end
addon:PerformMerge(v.Databases,v.Style,filter)
addon:CleanupImportData()
imported[k] = true
Config:SendMessage("GatherMate2ConfigChanged")
v["lastImport"] = dataVersion
print(L["Auto import complete for addon "]..k)
end
end
end
end
end
-- Allows an external import module to insert their aceopttable into the Importing tree
-- returns a reference to the saved variables state for the addon
function Config:RegisterImportModule(moduleName, optionsTable)
importOptions.args[moduleName] = optionsTable
return db.importers[moduleName]
end
-- Allows an external module to insert their aceopttable
function Config:RegisterModule(moduleName, optionsTable)
acr:RegisterOptionsTable("GM2/" .. moduleName, optionsTable)
acd:AddToBlizOptions("GM2/" .. moduleName, moduleName, "GatherMate 2")
end