view Config.lua @ 3:91634c6a6635 Release

Tagging as 2.0 - changes from original Bloodhound -Updated original addon herb and ore database -Fixed the configuration options -Added the 2 new zones in Pandaria (Isle of Giants and Isle of Thunder) -Changed the layer of the BH arrow so that it is always on top of the rubies. -Added the ability for Trove of the Thunderking to be tracked while on Isle of Thunder with Find Minerals or Find Herbs enabled. Config options have not been added and these nodes will only show up if you haven't looted a trove this week and should disappear as soon as you do loot a trove.
author only1yzerman
date Sun, 12 May 2013 15:30:15 -0400
parents ff01eb61abab
children 75ca29b399e8
line wrap: on
line source
-------- YOU'RE ON YOUR OWN HERE, THIS IS A FRIKKIN MESS - Osmium
-------- Challenge Accepted - Whyzerman

local element;
local frame;

Settings = {};
Settings.MultiZoneMode = 0;
Settings.HerbFilter = {};
Settings.OreFilter = {};
Settings.ZoneFilter = {{}, {}, {}, {}, {}};
Settings.InspectionRadius = 60;
local function Title(text)
	local str = frame:CreateFontString(nil, "ARTWORK", "GameFontNormalLarge");
	str:SetPoint("TOPLEFT", element, "TOPLEFT", 16, -16);
	str:SetJustifyH("LEFT");
	str:SetJustifyV("TOP");
	str:SetText(text);
	element = str;
end

local function Column2(offset)
	local str = frame:CreateFontString(nil, "ARTWORK", "GameFontNormalLarge");
	str:SetPoint("TOPLEFT", element, "TOPRIGHT", -offset, -16);
	str:SetText(" ");
	element = str;
end

local function Heading(text)
	local str = frame:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
	str:SetPoint("TOPLEFT", element, "BOTTOMLEFT", 0, -8);
	str:SetText(text);
	element = str;
end

local ddCount = 0;

local function DropDown(settings, key, width, init)
	ddCount = ddCount + 1;
	local dd = CreateFrame("Frame", "dropDown"..ddCount, frame, "UIDropDownMenuTemplate");
	dd:EnableMouse(true);
	dd:SetPoint("TOPLEFT", element, "BOTTOMLEFT", 0, -8);
	dd.State = {};
	UIDropDownMenu_Initialize(dd, init);
	UIDropDownMenu_SetWidth(dd, width);
	UIDropDownMenu_JustifyText(dd, "LEFT");
	UIDropDownMenu_SetSelectedValue(dd, settings[key]);
	element = dd;
end

function AddButton(settings, key, menu, label, value)
	local info = UIDropDownMenu_CreateInfo();
	info.text = label;
	info.value = value;
	info.owner = menu;
	info.func = function()
		UIDropDownMenu_SetSelectedValue(menu, value);
		settings[key] = value;
		Bloodhound2.UpdateMinimap();
	end;
	UIDropDownMenu_AddButton(info);
end

local cbCount = 0;

function CheckBox(label, value, relative, anchor, dx, dy, state)
	cbCount = cbCount + 1;
	local cb = CreateFrame("CheckButton", "checkBox"..cbCount, frame, "UICheckButtonTemplate");
	cb:SetWidth(16);
	cb:SetHeight(16);
	cb:SetPoint("TOPLEFT", relative, anchor, dx, dy);
	local text = getglobal(cb:GetName() .. "Text");
	text:SetText(label);
	cb:SetChecked(not state[value]);
	cb:SetScript("OnClick", function(self)
		if (self:GetChecked()) then
			state[value] = nil;
		else
			state[value] = 1;
		end
		Bloodhound2.UpdateMinimap();
	end);
	element = cb;
	return text:GetWidth();
end

function ContinentName()
	return select(GetCurrentMapContinent(), GetMapContinents());
end

function CheckBoxes(table, state)
	local relative;
	local bottom;
	local height = 1;
	local maxWidth = 0;
	local i = 0;
	local checkboxes = {};

	for k, v in pairs(table) do
		height = height + 1;
	end

	height = floor(height / 2);
	if height > 19 then height = 19; end;

	for k, v in pairs(table) do
		i = i + 1;
		if (i > 1) and (mod(i, height) == 1) then
			width = CheckBox(v, k, relative, "TOPRIGHT", maxWidth + 6, 0, state);	
			relative = element;
			maxWidth = width;
		else
			width = CheckBox(v, k, element, "BOTTOMLEFT", 0, 0, state);
			if (i == 1) then relative = element; end;
			maxWidth = max(width, maxWidth);
		end
		if (i == height) then bottom = element; end;
		checkboxes[k] = element;
	end

	local button = CreateFrame("Button", nil, frame, "UIPanelButtonTemplate");
	button:SetText(L["All"]);
	local allWidth = button:GetTextWidth() + 30;
	button:SetWidth(allWidth);
	button:SetHeight(22);
	button:SetPoint("TOPLEFT", bottom, "TOPLEFT", 0, -20);
	button:SetScript("OnClick", 
		function(self, button, down)
			for k, v in pairs(table) do
				checkboxes[k]:SetChecked(true);
				state[k] = nil;
			end
		end
	);

	element = button;

	local button = CreateFrame("Button", nil, frame, "UIPanelButtonTemplate");
	button:SetText(L["None"]);
	button:SetWidth(button:GetTextWidth() + 30);
	button:SetHeight(22);
	button:SetPoint("TOPLEFT", bottom, "TOPLEFT", allWidth + 20, -20);
	button:SetScript("OnClick", 
		function(self, button, down)
			for k, v in pairs(table) do
				checkboxes[k]:SetChecked(false);
				state[k] = 1;
			end
		end
	);
end

function AddZones(...)
	local table = {};

	for i=1,select("#", ...),1 do
		table[i] = select(i, ...);
	end

	if not Settings.ZoneFilter then
		Settings.ZoneFilter = {{},{},{},{},{}};
	end
	
	local c = GetCurrentMapContinent()
	
	if not Settings.ZoneFilter[c] then
		Settings.ZoneFilter[c] = {}
	end

	CheckBoxes(table, Settings.ZoneFilter[c]);
end

function AddHerbs()
	local table = {};

	for h, v in pairs(Bloodhound2.ContinentHerbs) do
		local name = L[h];
		if not name then name="Herb "..h; end;
		table[h] = name;
	end

	if not Settings.HerbFilter then
		Settings.HerbFilter = {};
	end

	CheckBoxes(table, Settings.HerbFilter);
end

function AddOre()
	local table = {};

	for h, v in pairs(Bloodhound2.ContinentOre) do
		local name = L[h];
		if not name then name="Ore "..h; end;
		table[h] = name;
	end

	if not Settings.OreFilter then
		Settings.OreFilter = {};
	end

	CheckBoxes(table, Settings.OreFilter);
end

local function CopyTable(table)
	local copy = {};
	for k,v in pairs(table) do
		if (type(v) == "table") then
			copy[k] = CopyTable(v);
		else
			copy[k] = v;
		end
	end
	return copy;
end

local configFrame;
local BackupSettings;

local function RefreshConfigFrame()
	if (configFrame) then
		configFrame:Hide();
	end

	BackupSettings = CopyTable(Settings);

	configFrame = CreateFrame("Frame", nil, Bloodhound2.panel);
	configFrame:SetAllPoints(Bloodhound2.panel);
	frame = configFrame;
	element = frame;
	Title(L["Bloodhound2 Options"]);
	Heading(L["Multi-Zone"]);
	DropDown(Settings, "MultiZoneMode", 120, function(menu)
		AddButton(Settings, "MultiZoneMode", menu, L["While flying"], 0);
		AddButton(Settings, "MultiZoneMode", menu, L["Always"], 1);
		AddButton(Settings, "MultiZoneMode", menu, L["Never"], 2);
	end);
	Heading(L["Zones"].." ("..ContinentName()..")");
	AddZones(GetMapZones(GetCurrentMapContinent()));
	element = frame;
	Column2(150);
	Heading(L["Inspection radius"]);
	DropDown(Settings, "InspectionRadius", 70, function(menu)
		AddButton(Settings, "InspectionRadius", menu, 30, 30);
		AddButton(Settings, "InspectionRadius", menu, 35, 35);
		AddButton(Settings, "InspectionRadius", menu, 40, 40);
		AddButton(Settings, "InspectionRadius", menu, 45, 45);
		AddButton(Settings, "InspectionRadius", menu, 50, 50);
		AddButton(Settings, "InspectionRadius", menu, 60, 60);
		AddButton(Settings, "InspectionRadius", menu, 70, 70);
		AddButton(Settings, "InspectionRadius", menu, 80, 80);
		AddButton(Settings, "InspectionRadius", menu, 90, 90);
		AddButton(Settings, "InspectionRadius", menu, 100, 100);
		AddButton(Settings, "InspectionRadius", menu, 120, 120);
	end);
end

local herbFrame;

local function RefreshHerbs()
	if (herbFrame) then herbFrame:Hide(); end;
	herbFrame = CreateFrame("Frame", nil, Bloodhound2.herbPanel);
	herbFrame:SetAllPoints(Bloodhound2.herbPanel);
	frame = herbFrame;
	element = frame;
	Title(L["Bloodhound2 Options"]);
	Heading(L["Herbs"].." ("..ContinentName()..")");
	AddHerbs();
end

local oreFrame;

local function RefreshOre()
	if (oreFrame) then oreFrame:Hide(); end;
	oreFrame= CreateFrame("Frame", nil, Bloodhound2.orePanel);
	oreFrame:SetAllPoints(Bloodhound2.orePanel);
	frame = oreFrame;
	element = frame;
	Title(L["Bloodhound2 Options"]);
	Heading(L["Minerals"].." ("..ContinentName()..")");
	AddOre();
end

local function RestoreHerbDefaults()
	Settings.HerbFilter = {};
end

local function RestoreOreDefaults()
	Settings.OreFilter = {};
end

local function RestoreZoneDefaults()
	Settings.MultiZoneMode = 0;
	Settings.InspectionRadius = 60;
	Settings.ZoneFilter[GetCurrentMapContinent()] = {};
end

Bloodhound2.panel = CreateFrame("FRAME", "Bloodhound2", Bloodhound2.Frame);
Bloodhound2.panel.name = L["Bloodhound2"];
Bloodhound2.panel.default = RestoreZoneDefaults;
Bloodhound2.panel.okay = function() end;
Bloodhound2.panel.cancel = function() Settings = BackupSettings; Bloodhound2.UpdateMinimap(); end;
Bloodhound2.panel.refresh = RefreshConfigFrame;
InterfaceOptions_AddCategory(Bloodhound2.panel);

Bloodhound2.herbPanel = CreateFrame("FRAME", "Bloodhound2_Herbs", Bloodhound2.Frame);
Bloodhound2.herbPanel.name = L["Herbs"];
Bloodhound2.herbPanel.parent = "Bloodhound2";
Bloodhound2.herbPanel.default = RestoreHerbDefaults;
Bloodhound2.herbPanel.okay = function() end;
Bloodhound2.herbPanel.cancel = function() end;
Bloodhound2.herbPanel.refresh = RefreshHerbs;
InterfaceOptions_AddCategory(Bloodhound2.herbPanel);

Bloodhound2.orePanel = CreateFrame("FRAME", "Bloodhound2_Ore", Bloodhound2.Frame);
Bloodhound2.orePanel.name = L["Minerals"];
Bloodhound2.orePanel.parent = "Bloodhound2";
Bloodhound2.orePanel.default = RestoreOreDefaults;
Bloodhound2.orePanel.okay = function() end;
Bloodhound2.orePanel.cancel = function() end;
Bloodhound2.orePanel.refresh = RefreshOre;
InterfaceOptions_AddCategory(Bloodhound2.orePanel);