Quantcast

4.8.0

Steven Jackson [10-01-14 - 23:12]
4.8.0
Filename
Interface/AddOns/SVUI/SVUI.toc
Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/LibSuperVillain-1.0.lua
Interface/AddOns/SVUI/libs/libdatabroker-1.1/Changelog-libdatabroker-1-1-v1.1.4.txt
Interface/AddOns/SVUI/libs/libdatabroker-1.1/LibDataBroker-1.1.lua
Interface/AddOns/SVUI/libs/libdatabroker-1.1/README.textile
Interface/AddOns/SVUI/libs/libs.xml
Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ActionPanel/oUF_ActionPanel.toc
Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Afflicted/oUF_Afflicted.toc
Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ArcaneCharge/oUF_ArcaneCharge.toc
Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Combatant/oUF_Combatant.toc
Interface/AddOns/SVUI/packages/stats/SVStats.lua
Interface/AddOns/SVUI/packages/stats/stats/experience.lua
Interface/AddOns/SVUI/packages/unit/SVUnit.lua
Interface/AddOns/SVUI_ChatOMatic/SVUI_ChatOMatic.lua
Interface/AddOns/SVUI_ChatOMatic/SVUI_ChatOMatic.toc
Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.toc
Interface/AddOns/SVUI_CraftOMatic/SVUI_CraftOMatic.toc
Interface/AddOns/SVUI_FightOMatic/SVUI_FightOMatic.toc
Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.toc
Interface/AddOns/SVUI_StyleOMatic/SVUI_StyleOMatic.toc
Interface/AddOns/SVUI_TrackOMatic/SVUI_TrackOMatic.toc
diff --git a/Interface/AddOns/SVUI/SVUI.toc b/Interface/AddOns/SVUI/SVUI.toc
index 535ac86..4e5264d 100644
--- a/Interface/AddOns/SVUI/SVUI.toc
+++ b/Interface/AddOns/SVUI/SVUI.toc
@@ -1,6 +1,6 @@
 ## Interface: 60000
 ## Author: Munglunch
-## Version: 4.7
+## Version: 4.8
 ## Title: |cffFF9900SVUI|r
 ## Notes: Supervillain UI [|cff9911FFCore Framework|r].
 ## SavedVariables: SVUI_Global
diff --git a/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/LibSuperVillain-1.0.lua b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/LibSuperVillain-1.0.lua
index 5b72ec7..feddff9 100644
--- a/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/LibSuperVillain-1.0.lua
+++ b/Interface/AddOns/SVUI/libs/LibSuperVillain-1.0/LibSuperVillain-1.0.lua
@@ -498,7 +498,7 @@ end

 function lib:NewCache(index)
     index = index or CoreObject.Schema
-    AllowedIndexes.C[index] = true
+    AllowedIndexes.C[index] = index
     if(not CACHE_SV[index]) then
         CACHE_SV[index] = {}
     end
@@ -507,7 +507,7 @@ end

 function lib:NewGlobal(index)
     index = index or CoreObject.Schema
-    AllowedIndexes.G[index] = true
+    AllowedIndexes.G[index] = index
     if(not GLOBAL_SV[index]) then
         GLOBAL_SV[index] = {}
     end
@@ -801,7 +801,7 @@ function lib:NewPlugin(addonName, addonObject)
     if(not PLUGINS) then PLUGINS = {} end

     PLUGINS[#PLUGINS+1] = schema
-    AllowedIndexes.P[schema] = true
+    AllowedIndexes.P[schema] = schema

     local infoString = SetPluginString(addonName)
     local oldString = PluginString
@@ -879,7 +879,7 @@ local Core_NewPackage = function(self, schema, header)
     if(not MODULES) then MODULES = {} end
     MODULES[#MODULES+1] = schema

-    AllowedIndexes.P[schema] = true
+    AllowedIndexes.P[schema] = schema

     local addonName = ("SVUI [%s]"):format(schema)

@@ -993,8 +993,8 @@ function lib:Initialize()
         GLOBAL_SV.profileKeys[k] = k
     end

-    AllowedIndexes.G["profileKeys"] = true
-    AllowedIndexes.G["profiles"] = true
+    AllowedIndexes.G["profileKeys"] = "profileKeys"
+    AllowedIndexes.G["profiles"] = "profiles"

     --CACHE SAVED VARIABLES
     if not _G[CACHE_FILENAME] then _G[CACHE_FILENAME] = {} end
diff --git a/Interface/AddOns/SVUI/libs/libdatabroker-1.1/Changelog-libdatabroker-1-1-v1.1.4.txt b/Interface/AddOns/SVUI/libs/libdatabroker-1.1/Changelog-libdatabroker-1-1-v1.1.4.txt
deleted file mode 100644
index d5b31ed..0000000
--- a/Interface/AddOns/SVUI/libs/libdatabroker-1.1/Changelog-libdatabroker-1-1-v1.1.4.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-tag v1.1.4
-ddb0519a000c69ddf3a28c3f9fe2e62bb3fd00c5
-Tekkub <tekkub@gmail.com>
-2008-11-06 22:03:04 -0700
-
-Build 1.1.4
-
-
---------------------
-
-Tekkub:
-	Add pairs and ipairs iters, since we can't use the normal iters on our dataobjs
-	Simplify readme, all docs have been moved into GitHub wiki pages
-	Documentation on how to use LDB data (for display addons)
-	Add StatBlockCore forum link
-	Add link to Fortress thread
-	And rearrange the addon list a bit too
-	Make field lists into nice pretty tables
-	Add list of who is using LDB
-	Always with the typos, I hate my fingers
-	Add tooltiptext and OnTooltipShow to data addon spec
-	Readme rejiggering
-	Add in some documentation on how to push data into LDB
-	Meh, fuck you textile
-	Adding readme
-	Pass current dataobj with attr change callbacks to avoid excessive calls to :GetDataObjectByName
-Tekkub Stoutwrithe:
-	Make passed dataobj actually work
-	I always forget the 'then'
-	Minor memory optimization
-	- Only hold upvalues to locals in the functions called frequently
-	 - Retain the metatable across future lib upgrades (the one in v1 will be lost)
-	Allow caller to pass a pre-populated table to NewDataObject
diff --git a/Interface/AddOns/SVUI/libs/libdatabroker-1.1/LibDataBroker-1.1.lua b/Interface/AddOns/SVUI/libs/libdatabroker-1.1/LibDataBroker-1.1.lua
deleted file mode 100644
index f47c0cd..0000000
--- a/Interface/AddOns/SVUI/libs/libdatabroker-1.1/LibDataBroker-1.1.lua
+++ /dev/null
@@ -1,90 +0,0 @@
-
-assert(LibStub, "LibDataBroker-1.1 requires LibStub")
-assert(LibStub:GetLibrary("CallbackHandler-1.0", true), "LibDataBroker-1.1 requires CallbackHandler-1.0")
-
-local lib, oldminor = LibStub:NewLibrary("LibDataBroker-1.1", 4)
-if not lib then return end
-oldminor = oldminor or 0
-
-
-lib.callbacks = lib.callbacks or LibStub:GetLibrary("CallbackHandler-1.0"):New(lib)
-lib.attributestorage, lib.namestorage, lib.proxystorage = lib.attributestorage or {}, lib.namestorage or {}, lib.proxystorage or {}
-local attributestorage, namestorage, callbacks = lib.attributestorage, lib.namestorage, lib.callbacks
-
-if oldminor < 2 then
-	lib.domt = {
-		__metatable = "access denied",
-		__index = function(self, key) return attributestorage[self] and attributestorage[self][key] end,
-	}
-end
-
-if oldminor < 3 then
-	lib.domt.__newindex = function(self, key, value)
-		if not attributestorage[self] then attributestorage[self] = {} end
-		if attributestorage[self][key] == value then return end
-		attributestorage[self][key] = value
-		local name = namestorage[self]
-		if not name then return end
-		callbacks:Fire("LibDataBroker_AttributeChanged", name, key, value, self)
-		callbacks:Fire("LibDataBroker_AttributeChanged_"..name, name, key, value, self)
-		callbacks:Fire("LibDataBroker_AttributeChanged_"..name.."_"..key, name, key, value, self)
-		callbacks:Fire("LibDataBroker_AttributeChanged__"..key, name, key, value, self)
-	end
-end
-
-if oldminor < 2 then
-	function lib:NewDataObject(name, dataobj)
-		if self.proxystorage[name] then return end
-
-		if dataobj then
-			assert(type(dataobj) == "table", "Invalid dataobj, must be nil or a table")
-			self.attributestorage[dataobj] = {}
-			for i,v in pairs(dataobj) do
-				self.attributestorage[dataobj][i] = v
-				dataobj[i] = nil
-			end
-		end
-		dataobj = setmetatable(dataobj or {}, self.domt)
-		self.proxystorage[name], self.namestorage[dataobj] = dataobj, name
-		self.callbacks:Fire("LibDataBroker_DataObjectCreated", name, dataobj)
-		return dataobj
-	end
-end
-
-if oldminor < 1 then
-	function lib:DataObjectIterator()
-		return pairs(self.proxystorage)
-	end
-
-	function lib:GetDataObjectByName(dataobjectname)
-		return self.proxystorage[dataobjectname]
-	end
-
-	function lib:GetNameByDataObject(dataobject)
-		return self.namestorage[dataobject]
-	end
-end
-
-if oldminor < 4 then
-	local next = pairs(attributestorage)
-	function lib:pairs(dataobject_or_name)
-		local t = type(dataobject_or_name)
-		assert(t == "string" or t == "table", "Usage: ldb:pairs('dataobjectname') or ldb:pairs(dataobject)")
-
-		local dataobj = self.proxystorage[dataobject_or_name] or dataobject_or_name
-		assert(attributestorage[dataobj], "Data object not found")
-
-		return next, attributestorage[dataobj], nil
-	end
-
-	local ipairs_iter = ipairs(attributestorage)
-	function lib:ipairs(dataobject_or_name)
-		local t = type(dataobject_or_name)
-		assert(t == "string" or t == "table", "Usage: ldb:ipairs('dataobjectname') or ldb:ipairs(dataobject)")
-
-		local dataobj = self.proxystorage[dataobject_or_name] or dataobject_or_name
-		assert(attributestorage[dataobj], "Data object not found")
-
-		return ipairs_iter, attributestorage[dataobj], 0
-	end
-end
diff --git a/Interface/AddOns/SVUI/libs/libdatabroker-1.1/README.textile b/Interface/AddOns/SVUI/libs/libdatabroker-1.1/README.textile
deleted file mode 100644
index ef16fed..0000000
--- a/Interface/AddOns/SVUI/libs/libdatabroker-1.1/README.textile
+++ /dev/null
@@ -1,13 +0,0 @@
-LibDataBroker is a small WoW addon library designed to provide a "MVC":http://en.wikipedia.org/wiki/Model-view-controller interface for use in various addons.
-LDB's primary goal is to "detach" plugins for TitanPanel and FuBar from the display addon.
-Plugins can provide data into a simple table, and display addons can receive callbacks to refresh their display of this data.
-LDB also provides a place for addons to register "quicklaunch" functions, removing the need for authors to embed many large libraries to create minimap buttons.
-Users who do not wish to be "plagued" by these buttons simply do not install an addon to render them.
-
-Due to it's simple generic design, LDB can be used for any design where you wish to have an addon notified of changes to a table.
-
-h2. Links
-
-* "API documentation":http://github.com/tekkub/libdatabroker-1-1/wikis/api
-* "Data specifications":http://github.com/tekkub/libdatabroker-1-1/wikis/data-specifications
-* "Addons using LDB":http://github.com/tekkub/libdatabroker-1-1/wikis/addons-using-ldb
diff --git a/Interface/AddOns/SVUI/libs/libs.xml b/Interface/AddOns/SVUI/libs/libs.xml
index 5b4ca2f..bc724e1 100644
--- a/Interface/AddOns/SVUI/libs/libs.xml
+++ b/Interface/AddOns/SVUI/libs/libs.xml
@@ -4,6 +4,5 @@
     <Script file="CallbackHandler-1.0\CallbackHandler-1.0.lua"/>
     <Script file="LibSharedMedia-3.0\LibSharedMedia-3.0.lua"/>
     <Script file="LibActionButton-1.0\LibActionButton-1.0.lua"/>
-    <Script file="LibDataBroker-1.1\LibDataBroker-1.1.lua"/>
     <Include file="oUF_Villain\oUF_Villain.xml"/>
 </Ui>
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ActionPanel/oUF_ActionPanel.toc b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ActionPanel/oUF_ActionPanel.toc
index 017ed59..5517fa0 100644
--- a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ActionPanel/oUF_ActionPanel.toc
+++ b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ActionPanel/oUF_ActionPanel.toc
@@ -2,7 +2,7 @@
 ## Title: oUF ActionPanel
 ## Notes: Adds a backing to all unit frames that provides many utilities.
 ## Author: Munglunch
-## Version: 4.7
+## Version: 4.8
 ## X-Category: oUF
 ## Dependencies: oUF

diff --git a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Afflicted/oUF_Afflicted.toc b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Afflicted/oUF_Afflicted.toc
index 85eec06..f86751f 100644
--- a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Afflicted/oUF_Afflicted.toc
+++ b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Afflicted/oUF_Afflicted.toc
@@ -2,7 +2,7 @@
 ## Title: oUF Afflicted
 ## Notes: Adds Custom Debuff Highlighting to oUF.
 ## Author: Munglunch
-## Version: 4.7
+## Version: 4.8
 ## X-Category: oUF
 ## Dependencies: oUF

diff --git a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ArcaneCharge/oUF_ArcaneCharge.toc b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ArcaneCharge/oUF_ArcaneCharge.toc
index afd78ed..4c12506 100644
--- a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ArcaneCharge/oUF_ArcaneCharge.toc
+++ b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_ArcaneCharge/oUF_ArcaneCharge.toc
@@ -2,7 +2,7 @@
 ## Title: oUF Arcane Charge
 ## Notes: Adds support for arcane charge indicators to oUF.
 ## Author: Munglunch
-## Version: 4.7
+## Version: 4.8
 ## Dependencies: oUF

 oUF_ArcaneCharge.lua
\ No newline at end of file
diff --git a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Combatant/oUF_Combatant.toc b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Combatant/oUF_Combatant.toc
index 4d49a4a..2d58083 100644
--- a/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Combatant/oUF_Combatant.toc
+++ b/Interface/AddOns/SVUI/libs/oUF_Villain/Plugins/oUF_Combatant/oUF_Combatant.toc
@@ -2,7 +2,7 @@
 ## Title: oUF Combatant
 ## Notes: Adds PvP trinket status and spec icons to oUF frames.
 ## Author: Munglunch
-## Version: 4.70
+## Version: 4.80
 ## X-Category: oUF
 ## Dependencies: oUF

diff --git a/Interface/AddOns/SVUI/packages/stats/SVStats.lua b/Interface/AddOns/SVUI/packages/stats/SVStats.lua
index d807661..3d94bb0 100644
--- a/Interface/AddOns/SVUI/packages/stats/SVStats.lua
+++ b/Interface/AddOns/SVUI/packages/stats/SVStats.lua
@@ -24,10 +24,12 @@ local pairs     = _G.pairs;
 local type      = _G.type;
 local string    = _G.string;
 local math      = _G.math;
+local table 	= _G.table;
 --[[ STRING METHODS ]]--
-local join = string.join;
+local join, len = string.join, string.len;
 --[[ MATH METHODS ]]--
 local min = math.min;
+local tsort, twipe = table.sort, _G.wipe;
 --[[
 ##########################################################
 GET ADDON DATA
@@ -36,11 +38,12 @@ GET ADDON DATA
 local SV = select(2, ...)
 local L = SV.L
 local LSM = LibStub("LibSharedMedia-3.0")
-local LDB = LibStub("LibDataBroker-1.1")
+local LDB = LibStub("LibDataBroker-1.1", true)
 local MOD = SV:NewPackage("SVStats", L["Statistics"]);

 MOD.Anchors = {};
 MOD.Statistics = {};
+MOD.DisabledList = {};
 MOD.StatListing = {[""] = "None"};
 MOD.tooltip = CreateFrame("GameTooltip", "StatisticTooltip", UIParent, "GameTooltipTemplate")
 MOD.BGPanels = {
@@ -62,6 +65,7 @@ MOD.BGStats = {
 	["Changes"] = {13, RATING_CHANGE},
 	["Spec"] = {16, SPECIALIZATION}
 };
+MOD.ListNeedsUpdate = true
 --[[
 ##########################################################
 LOCALIZED GLOBALS
@@ -81,10 +85,9 @@ local myName = UnitName("player");
 local myClass = select(2,UnitClass("player"));
 local classColor = RAID_CLASS_COLORS[myClass];
 local StatMenuFrame = CreateFrame("Frame", "SVUI_StatMenu", UIParent);
-local ListNeedsUpdate = true
 local SCORE_CACHE = {};
 local hexHighlight = "FFFFFF";
-
+local StatMenuListing = {}
 -- When its vertical then "left" = "top" and "right" = "bottom". Yes I know thats ghetto, bite me!
 local positionIndex = {{"middle", "left", "right"}, {"middle", "top", "bottom"}};
 --[[
@@ -183,7 +186,7 @@ function MOD:ShowTip(noSpace)
 end

 function MOD:NewAnchor(parent, maxCount, tipAnchor, isTop, customTemplate, isVertical)
-	ListNeedsUpdate = true
+	self.ListNeedsUpdate = true

 	local activeIndex = isVertical and 2 or 1
 	local template, strata
@@ -273,6 +276,7 @@ function MOD:Extend(newStat, eventList, onEvents, update, click, focus, blur, in
 	if not newStat then return end
 	self.Statistics[newStat] = {}
 	self.StatListing[newStat] = newStat
+	tinsert(StatMenuListing, newStat)
 	if type(eventList) == "table" then
 		self.Statistics[newStat]["events"] = eventList;
 		self.Statistics[newStat]["event_handler"] = onEvents
@@ -294,14 +298,6 @@ function MOD:Extend(newStat, eventList, onEvents, update, click, focus, blur, in
 	end
 end

-function MOD:UnSet(parent)
-	parent:UnregisterAllEvents()
-	parent:SetScript("OnUpdate", nil)
-	parent:SetScript("OnEnter", nil)
-	parent:SetScript("OnLeave", nil)
-	parent:SetScript("OnClick", nil)
-end
-
 do
 	local dataStrings = {
 		NAME,
@@ -386,6 +382,7 @@ do
 		for i=1, #StatMenuFrame.buttons do
 			StatMenuFrame.buttons[i]:Hide()
 		end
+
 		for i=1, #list do
 			if not StatMenuFrame.buttons[i] then
 				StatMenuFrame.buttons[i] = CreateFrame("Button", nil, StatMenuFrame)
@@ -441,7 +438,8 @@ do
 		end
 	end

-	local function _load(parent, config)
+	local function _load(parent, name, config)
+		parent.StatParent = name
 		if config["events"]then
 			for _, event in pairs(config["events"])do
 				parent:RegisterEvent(event)
@@ -544,22 +542,34 @@ do
 		SV:AddonMessage(L["Battleground statistics temporarily hidden, to show type \"/sv bg\" or \"/sv pvp\""])
 	end

-	local function SetMenuLists()
-		for place,parent in pairs(MOD.Anchors)do
+	local sortMenuList = function(a, b) return a < b end
+
+	function MOD:SetMenuLists()
+		local stats = self.Anchors;
+		local list = StatMenuListing;
+		local disabled = self.DisabledList;
+
+		tsort(list)
+
+		for place,parent in pairs(stats)do
 			for i = 1, parent.numPoints do
 				local this = positionIndex[parent.useIndex][i]
-				tinsert(parent.holders[this].MenuList,{text = NONE, func = function() MOD:ChangeDBVar(NONE, this, "panels", place); MOD:Generate() end});
-				for name,config in pairs(MOD.Statistics) do
-					tinsert(parent.holders[this].MenuList,{text = name, func = function() MOD:ChangeDBVar(name, this, "panels", place); MOD:Generate() end});
-				end
+				local subList = twipe(parent.holders[this].MenuList)
+
+				tinsert(subList,{text = NONE, func = function() MOD:ChangeDBVar(NONE, this, "panels", place); MOD:Generate() end});
+				for _,name in pairs(list) do
+					if(not disabled[name]) then
+						tinsert(subList,{text = name, func = function() MOD:ChangeDBVar(name, this, "panels", place); MOD:Generate() end});
+					end
+				end
 			end
-			ListNeedsUpdate = false;
+			self.ListNeedsUpdate = false;
 		end
 	end

 	function MOD:Generate()
-		if(ListNeedsUpdate) then
-			SetMenuLists()
+		if(self.ListNeedsUpdate) then
+			self:SetMenuLists()
 		end
 		local instance, groupType = IsInInstance()
 		local anchorTable = self.Anchors
@@ -607,11 +617,11 @@ do
 						for panelName, panelData in pairs(db.panels) do
 							if(panelData and type(panelData) == "table") then
 								if(panelName == place and panelData[position] and panelData[position] == name) then
-									_load(parent.holders[position], config)
+									_load(parent.holders[position], name, config)
 								end
 							elseif(panelData and type(panelData) == "string" and panelData == name) then
 								if(name == place) then
-									_load(parent.holders[position], config)
+									_load(parent.holders[position], name, config)
 								end
 							end
 						end
@@ -623,57 +633,14 @@ do
 	end
 end

-local function LoadStatBroker()
-  	for dataName, dataObj in LDB:DataObjectIterator() do
-
-	    local OnEnter, OnLeave, OnClick, lastObj;
-
-	    if dataObj.OnTooltipShow then
-	      	function OnEnter(self)
-				MOD:Tip(self)
-				dataObj.OnTooltipShow(MOD.tooltip)
-				MOD:ShowTip()
-			end
-	    end
-
-	    if dataObj.OnEnter then
-	      	function OnEnter(self)
-				MOD:Tip(self)
-				dataObj.OnEnter(MOD.tooltip)
-				MOD:ShowTip()
-			end
-	    end
-
-	    if dataObj.OnLeave then
-			function OnLeave(self)
-				dataObj.OnLeave(self)
-				MOD.tooltip:Hide()
-			end
-	    end
-
-	    if dataObj.OnClick then
-	    	function OnClick(self, button)
-		      	dataObj.OnClick(self, button)
-		    end
-		end
-
-		local function textUpdate(event, name, key, value, dataobj)
-			if value == nil or (len(value) > 5) or value == 'n/a' or name == value then
-				lastObj.text:SetText(value ~= 'n/a' and value or name)
-			else
-				lastObj.text:SetText(name..': '.. '|cff' .. hexHighlight ..value..'|r')
-			end
-		end
-
-	    local function OnEvent(self)
-			lastObj = self;
-			LDB:RegisterCallback("LibDataBroker_AttributeChanged_"..dataName.."_text", textUpdate)
-			LDB:RegisterCallback("LibDataBroker_AttributeChanged_"..dataName.."_value", textUpdate)
-			LDB.callbacks:Fire("LibDataBroker_AttributeChanged_"..dataName.."_text", dataName, nil, dataObj.text, dataObj)
-	    end
-
-	    MOD:Extend(dataName, {"PLAYER_ENTERING_WORLD"}, OnEvent, nil, OnClick, OnEnter, OnLeave)
-  	end
+function MOD:UnSet(parent)
+	parent:UnregisterAllEvents()
+	parent:SetScript("OnUpdate", nil)
+	parent:SetScript("OnEnter", nil)
+	parent:SetScript("OnLeave", nil)
+	parent:SetScript("OnClick", nil)
+	self.DisabledList[parent.StatParent] = true
+	self:SetMenuLists()
 end
 --[[
 ##########################################################
@@ -698,8 +665,6 @@ function MOD:Load()
 	self.Accountant[playerRealm]["tokens"] = self.Accountant[playerRealm]["tokens"] or {};
 	self.Accountant[playerRealm]["tokens"][playerName] = self.Accountant[playerRealm]["tokens"][playerName] or 738;

-	LoadStatBroker()
-
 	self:LoadServerGold()
 	self:CacheRepData()
 	self:CacheTokenData()
@@ -712,6 +677,59 @@ function MOD:Load()
 	self.tooltip:SetFrameStrata("DIALOG")
 	self.tooltip:HookScript("OnShow", _hook_TooltipOnShow)

+	if(LDB) then
+	  	for dataName, dataObj in LDB:DataObjectIterator() do
+
+		    local OnEnter, OnLeave, OnClick, lastObj;
+
+		    if dataObj.OnTooltipShow then
+		      	function OnEnter(self)
+					MOD:Tip(self)
+					dataObj.OnTooltipShow(MOD.tooltip)
+					MOD:ShowTip()
+				end
+		    end
+
+		    if dataObj.OnEnter then
+		      	function OnEnter(self)
+					MOD:Tip(self)
+					dataObj.OnEnter(MOD.tooltip)
+					MOD:ShowTip()
+				end
+		    end
+
+		    if dataObj.OnLeave then
+				function OnLeave(self)
+					dataObj.OnLeave(self)
+					MOD.tooltip:Hide()
+				end
+		    end
+
+		    if dataObj.OnClick then
+		    	function OnClick(self, button)
+			      	dataObj.OnClick(self, button)
+			    end
+			end
+
+			local function textUpdate(event, name, key, value, dataobj)
+				if value == nil or (len(value) > 5) or value == 'n/a' or name == value then
+					lastObj.text:SetText(value ~= 'n/a' and value or name)
+				else
+					lastObj.text:SetText(name..': '.. '|cff' .. hexHighlight ..value..'|r')
+				end
+			end
+
+		    local function OnEvent(self)
+				lastObj = self;
+				LDB:RegisterCallback("LibDataBroker_AttributeChanged_"..dataName.."_text", textUpdate)
+				LDB:RegisterCallback("LibDataBroker_AttributeChanged_"..dataName.."_value", textUpdate)
+				LDB.callbacks:Fire("LibDataBroker_AttributeChanged_"..dataName.."_text", dataName, nil, dataObj.text, dataObj)
+		    end
+
+		    MOD:Extend(dataName, {"PLAYER_ENTERING_WORLD"}, OnEvent, nil, OnClick, OnEnter, OnLeave)
+	  	end
+	end
+
 	self:Generate()
 	self:RegisterEvent("PLAYER_ENTERING_WORLD", "Generate")

diff --git a/Interface/AddOns/SVUI/packages/stats/stats/experience.lua b/Interface/AddOns/SVUI/packages/stats/stats/experience.lua
index 76746e1..eafb704 100644
--- a/Interface/AddOns/SVUI/packages/stats/stats/experience.lua
+++ b/Interface/AddOns/SVUI/packages/stats/stats/experience.lua
@@ -19,6 +19,7 @@ STATS:Extend EXAMPLE USAGE: MOD:Extend(newStat,eventList,onEvents,update,click,f
 LOCALIZED LUA FUNCTIONS
 ##########################################################
 ]]--
+if (UnitLevel("player") == GetMaxPlayerLevel()) then return end;
 --[[ GLOBALS ]]--
 local _G = _G;
 local unpack 	= _G.unpack;
@@ -129,7 +130,7 @@ local function Experience_OnEnter(self)
 end

 local function ExperienceBar_OnLoad(self)
-	if (UnitLevel("player") == GetMaxPlayerLevel())then
+	if (UnitLevel("player") == GetMaxPlayerLevel()) then
 		self:Hide()
 		MOD:UnSet(self)
 	end
diff --git a/Interface/AddOns/SVUI/packages/unit/SVUnit.lua b/Interface/AddOns/SVUI/packages/unit/SVUnit.lua
index 81e418c..12023ad 100644
--- a/Interface/AddOns/SVUI/packages/unit/SVUnit.lua
+++ b/Interface/AddOns/SVUI/packages/unit/SVUnit.lua
@@ -1487,7 +1487,7 @@ function MOD:SPELLS_CHANGED()
 	end
 	if GetSpellInfo(droodSpell1) == droodSpell2 then
 		self.Dispellable["Disease"] = true
-	elseif(SV.Dispellable["Disease"]) then
+	elseif(self.Dispellable["Disease"]) then
 		self.Dispellable["Disease"] = nil
 	end
 end
diff --git a/Interface/AddOns/SVUI_ChatOMatic/SVUI_ChatOMatic.lua b/Interface/AddOns/SVUI_ChatOMatic/SVUI_ChatOMatic.lua
index ec67c00..5b1397b 100644
--- a/Interface/AddOns/SVUI_ChatOMatic/SVUI_ChatOMatic.lua
+++ b/Interface/AddOns/SVUI_ChatOMatic/SVUI_ChatOMatic.lua
@@ -52,7 +52,8 @@ local PLUGIN = select(2, ...)
 local Schema = PLUGIN.Schema;
 local PlayersName = UnitName("player")

-local SV = _G["SVUI"];
+local SV = _G["SVUI"]
+local L = SV.L
 --[[
 ##########################################################
 LOCAL VARS
diff --git a/Interface/AddOns/SVUI_ChatOMatic/SVUI_ChatOMatic.toc b/Interface/AddOns/SVUI_ChatOMatic/SVUI_ChatOMatic.toc
index 9eb5673..b0f87ae 100644
--- a/Interface/AddOns/SVUI_ChatOMatic/SVUI_ChatOMatic.toc
+++ b/Interface/AddOns/SVUI_ChatOMatic/SVUI_ChatOMatic.toc
@@ -1,6 +1,6 @@
 ## Interface: 60000
 ## Author: Munglunch
-## Version: 4.7
+## Version: 4.8
 ## Title: |cffFF9900SVUI |r|cffFFEF00Chat-O-Matic|r
 ## Notes: Supervillain UI [|cff9911FFAuto-Chat Gadgets|r]
 ## RequiredDeps: SVUI
diff --git a/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.toc b/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.toc
index b303934..0bb6d7b 100644
--- a/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.toc
+++ b/Interface/AddOns/SVUI_ConfigOMatic/SVUI_ConfigOMatic.toc
@@ -1,7 +1,7 @@
 ## Interface: 60000
 ## Author: Munglunch
-## Version: 4.7
-## Title: |cffFF9900SVUI |r|cffFFEF00Config O Matic|r
+## Version: 4.8
+## Title: |cffFF9900SVUI |r|cffFFEF00Config-O-Matic|r
 ## Notes: Supervillain UI [|cff9911FFConfig Options|r]
 ## RequiredDeps: SVUI
 ## LoadOnDemand: 1
diff --git a/Interface/AddOns/SVUI_CraftOMatic/SVUI_CraftOMatic.toc b/Interface/AddOns/SVUI_CraftOMatic/SVUI_CraftOMatic.toc
index 01a991d..c32772a 100644
--- a/Interface/AddOns/SVUI_CraftOMatic/SVUI_CraftOMatic.toc
+++ b/Interface/AddOns/SVUI_CraftOMatic/SVUI_CraftOMatic.toc
@@ -1,6 +1,6 @@
 ## Interface: 60000
 ## Author: Munglunch
-## Version: 4.7
+## Version: 4.8
 ## Title: |cffFF9900SVUI |r|cffFFEF00Craft-O-Matic|r
 ## Notes: Supervillain UI [|cff9911FFProfession Tools|r].
 ## Interface: 60000
diff --git a/Interface/AddOns/SVUI_FightOMatic/SVUI_FightOMatic.toc b/Interface/AddOns/SVUI_FightOMatic/SVUI_FightOMatic.toc
index cfb7232..b58b7c1 100644
--- a/Interface/AddOns/SVUI_FightOMatic/SVUI_FightOMatic.toc
+++ b/Interface/AddOns/SVUI_FightOMatic/SVUI_FightOMatic.toc
@@ -1,7 +1,7 @@
 ## Interface: 60000
 ## Author: Munglunch
-## Version: 4.7
-## Title: |cffFF9900SVUI |r|cffFFEF00Fight O Matic|r
+## Version: 4.8
+## Title: |cffFF9900SVUI |r|cffFFEF00Fight-O-Matic|r
 ## Notes: Supervillain UI [|cff9911FFPvP Tools|r].
 ## SavedVariables: FightOMatic_Data
 ## SavedVariablesPerCharacter: FightOMatic_Cache
diff --git a/Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.toc b/Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.toc
index 726cdca..0196894 100644
--- a/Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.toc
+++ b/Interface/AddOns/SVUI_LogOMatic/SVUI_LogOMatic.toc
@@ -1,7 +1,7 @@
 ## Interface: 60000
 ## Author: Munglunch
-## Version: 4.7
-## Title: |cffFF9900SVUI |r|cffFFEF00Log O Matic|r
+## Version: 4.8
+## Title: |cffFF9900SVUI |r|cffFFEF00Log-O-Matic|r
 ## Notes: Supervillain UI [|cff9911FFData Logging|r].
 ## SavedVariables: LogOMatic_Data
 ## SavedVariablesPerCharacter: LogOMatic_Cache
diff --git a/Interface/AddOns/SVUI_StyleOMatic/SVUI_StyleOMatic.toc b/Interface/AddOns/SVUI_StyleOMatic/SVUI_StyleOMatic.toc
index 319dae5..a7f1c43 100644
--- a/Interface/AddOns/SVUI_StyleOMatic/SVUI_StyleOMatic.toc
+++ b/Interface/AddOns/SVUI_StyleOMatic/SVUI_StyleOMatic.toc
@@ -1,7 +1,7 @@
 ## Interface: 60000
 ## Author: Munglunch, Azilroka, Sortokk
-## Version: 4.7
-## Title: |cffFF9900SVUI |r|cffFFEF00Style O Matic|r
+## Version: 4.8
+## Title: |cffFF9900SVUI |r|cffFFEF00Style-O-Matic|r
 ## Notes: Supervillain UI [|cff9911FFAddon Skins|r].
 ## RequiredDeps: SVUI
 ## OptionalDeps: Blizzard_DebugTools, Blizzard_PetJournal, SharedMedia
diff --git a/Interface/AddOns/SVUI_TrackOMatic/SVUI_TrackOMatic.toc b/Interface/AddOns/SVUI_TrackOMatic/SVUI_TrackOMatic.toc
index 6257485..10c2ffa 100644
--- a/Interface/AddOns/SVUI_TrackOMatic/SVUI_TrackOMatic.toc
+++ b/Interface/AddOns/SVUI_TrackOMatic/SVUI_TrackOMatic.toc
@@ -1,7 +1,7 @@
 ## Interface: 60000
 ## Author: Munglunch
-## Version: 4.7
-## Title: |cffFF9900SVUI |r|cffFFEF00Track O Matic|r
+## Version: 4.8
+## Title: |cffFF9900SVUI |r|cffFFEF00Track-O-Matic|r
 ## Notes: Supervillain UI [|cff9911FFRaid & Party Member Tracking|r].
 ## RequiredDeps: SVUI
 ## LoadOnDemand: 1