Quantcast

minor version update, revised profiles and data

Steven Jackson [03-06-15 - 01:01]
minor version update, revised profiles and data
Filename
SVUI_!Core/SVUI_!Core.toc
SVUI_!Core/libs/_SVUI_Lib/Registry.lua
SVUI_!Core/system/core.lua
SVUI_!Options/SVUI_!Options.lua
SVUI_!Options/SVUI_!Options.toc
SVUI_ActionBars/SVUI_ActionBars.toc
SVUI_Auras/Loader.lua
SVUI_Auras/SVUI_Auras.toc
SVUI_Auras/components/procs.lua
SVUI_CraftOMatic/SVUI_CraftOMatic.toc
SVUI_NamePlates/SVUI_NamePlates.toc
SVUI_QuestTracker/SVUI_QuestTracker.toc
SVUI_Tooltip/SVUI_Tooltip.toc
SVUI_UnitFrames/SVUI_UnitFrames.toc
SVUI_UnitFrames/libs/Plugins/oUF_ActionPanel/oUF_ActionPanel.toc
SVUI_UnitFrames/libs/Plugins/oUF_Afflicted/oUF_Afflicted.toc
SVUI_UnitFrames/libs/Plugins/oUF_CombatFader/oUF_CombatFader.toc
SVUI_UnitFrames/libs/Plugins/oUF_Gladiator/oUF_Gladiator.toc
SVUI_UnitFrames/libs/Plugins/oUF_MageMagic/oUF_MageMagic.toc
SVUI_UnitFrames/libs/oUF/elements/aura.lua
diff --git a/SVUI_!Core/SVUI_!Core.toc b/SVUI_!Core/SVUI_!Core.toc
index 6ae699b..7e96be8 100644
--- a/SVUI_!Core/SVUI_!Core.toc
+++ b/SVUI_!Core/SVUI_!Core.toc
@@ -1,6 +1,6 @@
 ## Interface: 60100
 ## Author: Munglunch
-## Version: 1.0.092
+## Version: 1.1.0
 ## Title: |cffFF9900SuperVillain UI: |r|cff00FF00!Core|r
 ## Notes: SVUI [|cff9911FFCore Framework|r].
 ## SavedVariables: SVUI_Global, SVUI_Errors, SVUI_Filters, SVUI_Media
diff --git a/SVUI_!Core/libs/_SVUI_Lib/Registry.lua b/SVUI_!Core/libs/_SVUI_Lib/Registry.lua
index 0d1ce14..5712e9e 100644
--- a/SVUI_!Core/libs/_SVUI_Lib/Registry.lua
+++ b/SVUI_!Core/libs/_SVUI_Lib/Registry.lua
@@ -102,6 +102,8 @@ local GLOBAL_SV, PRIVATE_SV, FILTER_SV, MEDIA_SV, ERROR_SV;
 local MODULES, PLUGINS;
 local LoadOnDemand, ScriptQueue = {},{};
 local DirtyDataList, DirtyMediaList = {},{};
+local SAFE_MEDIA_KEYS = {["customClassColor"] = true, ["extended"] = true, ["shared"] = true, ["color"] = true, ["bordercolor"] = true}
+local SAFE_THEME_KEYS = {["Default"] = true, ["Simple"] = true, ["Warcraft"] = true}
 local debugHeader = "|cffFF2F00%s|r [|cff992FFF%s|r]|cffFF2F00:|r";
 local debugPattern = '|cffFF2F00%s|r [|cff0affff%s|r]|cffFF2F00:|r @|cffFF0000(|r%s|cffFF0000)|r - %s';

@@ -112,6 +114,7 @@ local PROFILE_KEY           = DEFAULT_PROFILE_KEY;
 local DEFAULT_THEME_KEY     = "Default";
 local THEME_KEY             = DEFAULT_THEME_KEY;
 local DATESTAMP             = date("%m_%d_%y");
+local DEEP_CLEAN_REQUESTED  = false;

 local INFO_FORMAT = "|cffFFFF00%s|r\n        |cff33FF00Version: %s|r |cff0099FFby %s|r";

@@ -241,6 +244,20 @@ local function sanitize(db, src)
     end
 end

+local function sanitizeMedia(db, src)
+    if((type(src) == "table")) then
+        if(type(db) == "table") then
+            for k,v in pairs(db) do
+                if(SAFE_MEDIA_KEYS[k] and (src[k] ~= nil)) then
+                    removedefaults(db[k], src[k])
+                else
+                    db[k] = nil
+                end
+            end
+        end
+    end
+end
+
 --DATABASE META METHODS
 local meta_transdata = {
     __index = function(t, k)
@@ -495,27 +512,37 @@ end
 function lib:CleanUpData(deep)
     local defaults = CoreObject.defaults
     local media = CoreObject.mediadefaults
-    if(not deep) then
+    if(DEEP_CLEAN_REQUESTED) then
         for key,data in pairs(GLOBAL_SV.profiles) do
-            local linked = DirtyDataList[key]
-            if(linked) then
+            if(not GLOBAL_SV.profileKeys[key]) then
+                GLOBAL_SV.profiles[key] = nil
+            else
                 sanitize(data, defaults)
-                sanitize(MEDIA_SV.profiles[key][linked], media)
             end
         end
-    else
-        for key,data in pairs(GLOBAL_SV.profiles) do
-            sanitize(data, defaults)
-        end
-        for key,themes in pairs(MEDIA_SV.profiles) do
-            if(not GLOBAL_SV.profiles[key]) then
-                MEDIA_SV.profiles[key] = nil
+        for theme,profile in pairs(MEDIA_SV.profiles) do
+            if(not SAFE_THEME_KEYS[theme]) then
+                MEDIA_SV.profiles[theme] = nil
             else
-                for theme,themedata in pairs(themes) do
-                    sanitize(themedata, media)
+                for key,data in pairs(profile) do
+                    if(not GLOBAL_SV.profileKeys[key]) then
+                        MEDIA_SV.profiles[theme][key] = nil
+                    else
+                        sanitizeMedia(data, media)
+                    end
                 end
             end
         end
+    elseif(not deep) then
+        for key,data in pairs(GLOBAL_SV.profiles) do
+            local linked = DirtyDataList[key]
+            if(linked) then
+                sanitize(data, defaults)
+                sanitizeMedia(MEDIA_SV.profiles[linked][key], media)
+            end
+        end
+    else
+        DEEP_CLEAN_REQUESTED = true
     end
 end

@@ -572,21 +599,22 @@ local function UpdateProfileSources(newKey)
     if(not MEDIA_SV.profiles[THEME_KEY][PROFILE_KEY]) then MEDIA_SV.profiles[THEME_KEY][PROFILE_KEY] = {} end

     DirtyDataList[PROFILE_KEY] = THEME_KEY;
-
-    if((CoreObject.___initialized) and (PREVIOUS_PROFILE_KEY ~= PROFILE_KEY)) then
-        local db           = setmetatable({}, meta_transdata)
-        db.data            = GLOBAL_SV.profiles[PROFILE_KEY]
-        db.defaults        = CoreObject.defaults
-        if(CoreObject.db) then wipe(CoreObject.db) end
-        CoreObject.db      = db
-
-        local media        = setmetatable({}, meta_transdata)
-        media.data         = MEDIA_SV.profiles[THEME_KEY][PROFILE_KEY]
-        media.defaults     = CoreObject.mediadefaults
-        if(CoreObject.media) then wipe(CoreObject.media) end
-        CoreObject.media   = media
-
-        lib:LiveUpdate(true)
+    if(not newKey) then
+        if((CoreObject.___initialized) and (PREVIOUS_PROFILE_KEY ~= PROFILE_KEY)) then
+            local db           = setmetatable({}, meta_transdata)
+            db.data            = GLOBAL_SV.profiles[PROFILE_KEY]
+            db.defaults        = CoreObject.defaults
+            if(CoreObject.db) then wipe(CoreObject.db) end
+            CoreObject.db      = db
+
+            local media        = setmetatable({}, meta_transdata)
+            media.data         = MEDIA_SV.profiles[THEME_KEY][PROFILE_KEY]
+            media.defaults     = CoreObject.mediadefaults
+            if(CoreObject.media) then wipe(CoreObject.media) end
+            CoreObject.media   = media
+
+            lib:LiveUpdate(true)
+        end
     end
 end

@@ -620,6 +648,7 @@ local function CorePreInitialize()
     if(not PRIVATE_SV.SAFEDATA.THEME) then PRIVATE_SV.SAFEDATA.THEME = DEFAULT_THEME_KEY end
     if(not PRIVATE_SV.SAFEDATA.DUALSPEC) then PRIVATE_SV.SAFEDATA.DUALSPEC = false end
     if(not PRIVATE_SV.SAFEDATA.NEEDSLIVEUPDATE) then PRIVATE_SV.SAFEDATA.NEEDSLIVEUPDATE = false end
+
     --GLOBAL SAVED VARIABLES
     if(not _G[GLOBAL_FILENAME]) then _G[GLOBAL_FILENAME] = {} end
     GLOBAL_SV = _G[GLOBAL_FILENAME]
@@ -1178,6 +1207,7 @@ function lib:ImportDatabase(key, linked)
         ReloadUI()
     else
         UpdateProfileSources(key)
+        ReloadUI()
     end
 end

diff --git a/SVUI_!Core/system/core.lua b/SVUI_!Core/system/core.lua
index 889f7cc..f3c4a3e 100644
--- a/SVUI_!Core/system/core.lua
+++ b/SVUI_!Core/system/core.lua
@@ -98,80 +98,6 @@ local numCallbacks = 0;
 local playerClass = select(2, UnitClass("player"));
 local errorPattern = "|cffff0000Error -- |r|cffff9900Required addon '|r|cffffff00%s|r|cffff9900' is %s.|r";

---[[ HELPERS ]]--
-
-local function _removedeprecated()
-    --[[ BEGIN DEPRECATED ]]--
-    if(_G.SVUI_Filters) then
-        local d = SV.db.Filters;
-        for k, v in pairs(_G.SVUI_Filters) do
-            local saved = d[k]
-            if type(v) == "table" then
-                if not saved then d[k] = {} end
-                tablecopy(d[k], v)
-            elseif(saved == nil or (saved and type(saved) ~= type(v))) then
-                d[k] = v
-            end
-        end
-
-        _G.SVUI_Filters = nil
-    end
-    --[[ END DEPRECATED ]]--
-end
-
-local function _explode(this, delim)
-    local pattern = string.format("([^%s]+)", delim)
-    local res = {}
-    for line in string.gmatch(this, pattern) do
-        tinsert(res, line)
-    end
-    return res
-end
-
-local function _needsupdate(value, lowMajor, lowMinor, lowPatch)
-    _removedeprecated();
-    lowMajor = lowMajor or 0;
-    lowMinor = lowMinor or 0;
-    lowPatch = lowPatch or 0;
-    local version = value or '0.0';
-    if(version and type(version) ~= string) then
-        version = tostring(version)
-    end
-    if(not version) then
-        return true
-    end
-    local vt = _explode(version, ".")
-    local MAJOR,MINOR,PATCH = unpack(vt)
-    if(PATCH and (lowPatch > 0)) then
-        if(type(PATCH) == "string") then
-            PATCH = tonumber(PATCH)
-        end
-        if(type(PATCH) == "number" and PATCH < lowPatch) then
-            SVUILib:CleanUpData();
-        end
-    end
-    if(MINOR and (lowMinor > 0)) then
-        if(type(MINOR) == "string") then
-            MINOR = tonumber(MINOR)
-        end
-        if(type(MINOR) == "number" and MINOR < lowMinor) then
-            SVUILib:CleanUpData();
-        end
-    end
-    if(MAJOR and (lowMajor > 0)) then
-        if(type(MAJOR) == "string") then
-            MAJOR = tonumber(MAJOR)
-        end
-        if(type(MAJOR) == "number" and MAJOR < lowMajor) then
-            return true
-        else
-            return false
-        end
-    else
-        return true
-    end
-end
-
 --[[ BUILD CLASS COLOR GLOBAL, CAN BE OVERRIDDEN BY THE ADDON !ClassColors ]]--

 local CUSTOM_CLASS_COLORS = _G.CUSTOM_CLASS_COLORS;
@@ -513,6 +439,86 @@ SV.Options = {
     }
 };

+local function _tablecopy(d, s)
+    if(type(s) ~= "table") then return end
+    if(type(d) ~= "table") then return end
+    for k, v in pairs(s) do
+        local saved = d[k]
+        if type(v) == "table" then
+            if not saved then d[k] = {} end
+            _tablecopy(d[k], v)
+        elseif(saved == nil or (saved and type(saved) ~= type(v))) then
+            d[k] = v
+        end
+    end
+end
+
+local function _removedeprecated()
+    --[[ BEGIN DEPRECATED ]]--
+    if(_G.SVUI_Filters) then
+        _tablecopy(SV.db.Filters, _G.SVUI_Filters)
+        _G.SVUI_Filters = nil
+    end
+    --[[ END DEPRECATED ]]--
+end
+
+local function _explode(this, delim)
+    local pattern = string.format("([^%s]+)", delim)
+    local res = {}
+    for line in string.gmatch(this, pattern) do
+        tinsert(res, line)
+    end
+    return res
+end
+
+local function _needsupdate(value, lowMajor, lowMinor, lowPatch)
+    _removedeprecated();
+    lowMajor = lowMajor or 0;
+    lowMinor = lowMinor or 0;
+    lowPatch = lowPatch or 0;
+    local version = value or '0.0';
+    if(version and type(version) ~= string) then
+        version = tostring(version)
+    end
+    if(not version) then
+       -- print('No Version Found')
+        return true
+    end
+    local vt = _explode(version, ".")
+    local MAJOR,MINOR,PATCH = unpack(vt)
+    --print(PATCH)print(type(lowPatch))
+    if(PATCH and (lowPatch > 0)) then
+        if(type(PATCH) == "string") then
+            PATCH = tonumber(PATCH)
+        end
+        if(type(PATCH) == "number" and PATCH < lowPatch) then
+            SVUILib:CleanUpData(true);
+            SVUILib:SaveSafeData("install_version", SV.Version);
+        end
+    end
+    if(MINOR and (lowMinor > 0)) then
+        if(type(MINOR) == "string") then
+            MINOR = tonumber(MINOR)
+        end
+        if(type(MINOR) == "number" and MINOR < lowMinor) then
+            SVUILib:CleanUpData(true);
+            SVUILib:SaveSafeData("install_version", SV.Version);
+        end
+    end
+    if(MAJOR and (lowMajor > 0)) then
+        if(type(MAJOR) == "string") then
+            MAJOR = tonumber(MAJOR)
+        end
+        if(type(MAJOR) == "number" and MAJOR < lowMajor) then
+            return true
+        else
+            return false
+        end
+    else
+        return true
+    end
+end
+
 --[[ BUILD LOGIN MESSAGES ]]--
 local SetLoginMessage;
 do
@@ -649,10 +655,6 @@ function SV:ToggleConfig()
         local _,_,_,_,_,state = GetAddOnInfo(self.ConfigID)
         if state ~= "MISSING" and state ~= "DISABLED" then
             LoadAddOn(self.ConfigID)
-            local config_version = GetAddOnMetadata(self.ConfigID, "Version")
-            if(_needsupdate(config_version, 1)) then
-                self:StaticPopup_Show("CLIENT_UPDATE_REQUEST")
-            end
         else
             local errorMessage = (errorPattern):format(self.ConfigID, state)
             self:AddonMessage(errorMessage)
@@ -675,7 +677,7 @@ function SV:VersionCheck()
         end
     else
         local version = SVUILib:GetSafeData("install_version");
-        if(not version or (version and _needsupdate(version, 1, 0, 1))) then
+        if(not version or (version and _needsupdate(version, 1, 1, 0))) then
             self.Setup:Install(true)
         end
     end
diff --git a/SVUI_!Options/SVUI_!Options.lua b/SVUI_!Options/SVUI_!Options.lua
index b80da64..954c965 100644
--- a/SVUI_!Options/SVUI_!Options.lua
+++ b/SVUI_!Options/SVUI_!Options.lua
@@ -144,7 +144,13 @@ local function RefreshProfileOptions()
 	optionGroup.importdesc = {
 		order = 4,
 		type = "description",
-		name = "\n" .. L["import_desc"],
+		name = function()
+			if(SVUILib:CheckDualProfile()) then
+				return "\n" .. L["Can not Save, Copy or Change while dual spec swapping is enabled"]
+			else
+				return "\n" .. L["import_desc"]
+			end
+		end,
 		width = "full"
 	}
 	optionGroup.spacer3 = {
@@ -160,6 +166,10 @@ local function RefreshProfileOptions()
 		order = 6,
 		get = false,
 		set = function(key, value) SVUILib:ExportDatabase(value) SV:SavedPopup() RefreshProfileOptions() end,
+		disabled = function()
+			local t = SVUILib:CheckDualProfile()
+			return t
+		end,
 	}
 	optionGroup.copy = {
 		name = L["Copy From"],
@@ -168,7 +178,10 @@ local function RefreshProfileOptions()
 		order = 7,
 		get = function() return currentProfile end,
 		set = function(key, value) SV:CopyProfile(value) SV:SavedPopup() RefreshProfileOptions() end,
-		disabled = function() local t = SVUILib:CheckProfiles() return (not t) end,
+		disabled = function()
+			local t = SVUILib:CheckProfiles()
+			return ((not t) or SVUILib:CheckDualProfile())
+		end,
 		values = SVUILib:GetProfiles(),
 	}
 	optionGroup.import = {
@@ -178,7 +191,10 @@ local function RefreshProfileOptions()
 		order = 8,
 		get = function() return currentProfile end,
 		set = function(key, value) SV:ImportProfile(value) SV:SavedPopup() RefreshProfileOptions() end,
-		disabled = function() local t = SVUILib:CheckProfiles() return (not t) end,
+		disabled = function()
+			local t = SVUILib:CheckProfiles()
+			return ((not t) or SVUILib:CheckDualProfile())
+		end,
 		values = SVUILib:GetProfiles(),
 		width = 'fill',
 	}
diff --git a/SVUI_!Options/SVUI_!Options.toc b/SVUI_!Options/SVUI_!Options.toc
index 8aaf6ba..e811e6b 100644
--- a/SVUI_!Options/SVUI_!Options.toc
+++ b/SVUI_!Options/SVUI_!Options.toc
@@ -1,6 +1,6 @@
 ## Interface: 60100
 ## Author: Munglunch
-## Version: 1.0.06
+## Version: 1.1.0
 ## Title: |cffFF9900SuperVillain UI: |r|cff00FF00!Options|r
 ## Notes: SVUI [|cff9911FFConfig Options|r]
 ## RequiredDeps: SVUI_!Core
diff --git a/SVUI_ActionBars/SVUI_ActionBars.toc b/SVUI_ActionBars/SVUI_ActionBars.toc
index 86e1748..9f842ad 100644
--- a/SVUI_ActionBars/SVUI_ActionBars.toc
+++ b/SVUI_ActionBars/SVUI_ActionBars.toc
@@ -1,6 +1,6 @@
 ## Interface: 60100
 ## Author: Munglunch
-## Version: 1.0.09
+## Version: 1.1.0
 ## Title: |cffFF9900SuperVillain UI: |r|cffFFEF00Action Bars|r
 ## Notes: Action Bar Plugin for [|cff9911FFSVUI|r].
 ## OptionalDeps: LibSharedMedia-3.0, LibActionButton-1.0
diff --git a/SVUI_Auras/Loader.lua b/SVUI_Auras/Loader.lua
index 8aa7bca..bb75d53 100644
--- a/SVUI_Auras/Loader.lua
+++ b/SVUI_Auras/Loader.lua
@@ -44,7 +44,7 @@ SV.defaults[Schema] = {
 	["timeOffsetV"] = -4,
 	["timeOffsetH"] = 0,
 	["fadeBy"] = 5,
-	["procsEnabled"] = true,
+	["procsEnabled"] = false,
 	["procSize"] = 40,
 	["buffs"] = {
 		["showBy"] = "LEFT_DOWN",
diff --git a/SVUI_Auras/SVUI_Auras.toc b/SVUI_Auras/SVUI_Auras.toc
index 24b25d0..3be1a96 100644
--- a/SVUI_Auras/SVUI_Auras.toc
+++ b/SVUI_Auras/SVUI_Auras.toc
@@ -1,6 +1,6 @@
 ## Interface: 60100
 ## Author: Munglunch
-## Version: 1.0.09
+## Version: 1.1.0
 ## Title: |cffFF9900SuperVillain UI: |r|cffFFEF00Auras|r
 ## Notes: Aura Plugin for [|cff9911FFSVUI|r].
 ## OptionalDeps: LibSharedMedia-3.0
diff --git a/SVUI_Auras/components/procs.lua b/SVUI_Auras/components/procs.lua
index 687a4ff..333d4e8 100644
--- a/SVUI_Auras/components/procs.lua
+++ b/SVUI_Auras/components/procs.lua
@@ -59,7 +59,6 @@ GET ADDON DATA
 ]]--
 local SV = _G['SVUI']
 local L = SV.L
-local LSM = _G.LibStub("LibSharedMedia-3.0")
 local MOD = SV.Auras;
 if(not MOD) then return end;
 --[[
@@ -69,7 +68,7 @@ LOCAL VARS
 ]]--
 local GUIDs = {};
 local RunningProcs = {};
-local Procs = CreateFrame('Frame', 'SVUI_ProcWatch', UIParent);
+local ProcWatch = CreateFrame('Frame', 'SVUI_ProcWatch', UIParent);

 local function CreateProcIcon()
 	local proc = CreateFrame("Frame", nil, ProcWatch)
@@ -103,7 +102,11 @@ local function CreateProcIcon()

 	proc.cd = CreateFrame("Cooldown", nil, proc)
 	proc.cd:SetAllPoints(proc)
-	proc.cd:SetReverse(true)
+	proc.cd:SetFrameLevel(proc:GetFrameLevel() + 10)
+	--proc.cd:SetReverse(true)
+	proc.cd:SetDrawEdge(false)
+    proc.cd:SetDrawBling(false)
+    proc.cd:SetSwipeColor(0, 0, 0, 1)
 	proc.cd:SetAlpha(1)

 	proc.highlight = proc:CreateTexture(nil, "HIGHLIGHT")
@@ -120,6 +123,7 @@ end
 CORE FUNCTIONS
 ##########################################################
 ]]--
+local setupGUID
 do
 	local cache = setmetatable({}, {__type = "k"})

@@ -136,7 +140,7 @@ do
 	frame:RegisterEvent"PLAYER_REGEN_ENABLED"
 	frame:RegisterEvent"PLAYER_ENTERING_WORLD"

-	local function setupGUID(guid)
+	function setupGUID(guid)
 		local t = next(cache)
 		if t then
 			cache[t] = nil
@@ -145,71 +149,62 @@ do
 		end
 		GUIDs[guid] = t
 	end
+end

-	local function SetProcTimer(icon, count, duration, remaining)
-		icon:Show()
-		if icon.cd then
-			if duration and duration > 0 then
-				icon.cd:SetCooldown(remaining - duration, duration)
-			end
-		end
-		if icon.count then
-			icon.count:SetText((count > 1 and count))
+local function SetProcTimer(icon, count, duration, remaining)
+	icon:Show()
+	if icon.cd then
+		if duration and duration > 0 then
+			icon.cd:SetCooldown(remaining - duration, duration)
 		end
 	end
+	if icon.count then
+		icon.count:SetText((count > 1 and count))
+	end
+end

-	function MOD:UNIT_AURA(unit)
-		if not unit then return end
-		local index, icons = 1, ProcWatch.watched
-		local _, name, texture, count, duration, remaining, caster, key, aura, spellID
-		local filter = "HELPFUL"
-		local guid = UnitGUID(unit)
-		if not guid then return end
-		if not GUIDs[guid] then setupGUID(guid) end
-
-		for _, icon in pairs(icons) do
-			icon:Hide()
-		end
-
-		while true do
-			name, _, texture, count, _, duration, remaining, caster, _, _, spellID = UnitAura(unit, index, filter)
-			if not name then
-				if filter == "HELPFUL" then
-					filter = "HARMFUL"
-					index = 1
-				else
-					break
-				end
-			else
-				if icons[spellID] then
-					aura = icons[spellID]
-					aura.timeLeft = remaining;
-					aura.first = true;
-					GUIDs[guid][spellID] = true;
-					RunningProcs[spellID] = true;
-					SetProcTimer(aura, count, duration, remaining);
-				end
-				index = index + 1
+local PROC_UNIT_AURA = function(self, event, unit)
+	if not unit then return end
+	local index, icons = 1, ProcWatch.watched
+	local _, name, texture, count, duration, remaining, caster, key, aura, spellID
+	local filter = "HELPFUL"
+	local guid = UnitGUID(unit)
+	if not guid then return end
+	if not GUIDs[guid] then setupGUID(guid) end
+
+	for _, icon in pairs(icons) do
+		icon:Hide()
+	end
+
+	local x = 1
+	while true do
+		name, _, texture, count, _, duration, remaining, caster, _, _, spellID = UnitAura(unit, index, filter)
+		if not name then
+			if filter == "HELPFUL" then
+				filter = "HARMFUL"
+				index = 1
+			else
+				break
 			end
-		end
-
-		for key in pairs(GUIDs[guid]) do
-			if icons[key] and not RunningProcs[key] then
-				icons[key]:Hide()
+		else
+			if icons[spellID] then
+				aura = icons[spellID]
+				aura.timeLeft = remaining;
+				aura.first = true;
+				GUIDs[guid][spellID] = true;
+				RunningProcs[spellID] = true;
+				aura:ClearAllPoints()
+				aura:SetPoint('RIGHT', ProcWatch, 'RIGHT', -((x - 1) * 43), 0)
+				SetProcTimer(aura, count, duration, remaining);
+				x = x + 1
 			end
+			index = index + 1
 		end
-
-		index = 1
-		for k in pairs(RunningProcs) do
-			RunningProcs[k] = nil
-			-- local aura = icons[k]
-			-- if aura and aura:IsShown() then
-			-- 	aura:Hide()
-			-- end
-			-- aura:ClearAllPoints()
-			-- aura:SetPoint('RIGHT', ProcWatch, 'RIGHT', -((index - 1) * 43), 0)
-			-- aura:Show()
-			-- index = index + 1
+	end
+
+	for key in pairs(GUIDs[guid]) do
+		if icons[key] and not RunningProcs[key] then
+			icons[key]:Hide()
 		end
 	end
 end
@@ -246,7 +241,7 @@ function MOD:InitializeProcWatch()
 	ProcWatch.cache = {};
 	ProcWatch.watched = {};
 	ProcWatch:RegisterUnitEvent('UNIT_AURA',"player")
-	ProcWatch:SetScript('OnEvent', ProcEventHandler)
+	ProcWatch:SetScript('OnEvent', PROC_UNIT_AURA)

 	SV:NewAnchor(ProcsAnchor, L["Procs Frame"])

@@ -254,7 +249,7 @@ function MOD:InitializeProcWatch()
 	local pwSize = SV.db.Auras.procSize or 40;
 	--local list = SV.db.Filters.Procs
 	local list = SV.db.Filters.BuffWatch
-
+	local i = 1;
 	for procID,procData in pairs(list) do
 		local spellID = tonumber(procID);
 		local spellName,_,spellTexture = GetSpellInfo(spellID)
@@ -281,7 +276,8 @@ function MOD:InitializeProcWatch()

 			if ProcWatch.watched then
 				ProcWatch.watched[procID] = proc
-			end
+			end
+			i = i + 1
 		end
 	end;

diff --git a/SVUI_CraftOMatic/SVUI_CraftOMatic.toc b/SVUI_CraftOMatic/SVUI_CraftOMatic.toc
index c02a671..531a52c 100644
--- a/SVUI_CraftOMatic/SVUI_CraftOMatic.toc
+++ b/SVUI_CraftOMatic/SVUI_CraftOMatic.toc
@@ -1,6 +1,6 @@
 ## Interface: 60100
 ## Author: Munglunch
-## Version: 1.0.09
+## Version: 1.1.0
 ## Title: |cffFF9900SVUI Plugin: |r|cffFF69B4Craft-O-Matic|r
 ## Notes: Supervillain UI [|cff9911FFProfession Tools|r].
 ## RequiredDeps: SVUI_!Core
diff --git a/SVUI_NamePlates/SVUI_NamePlates.toc b/SVUI_NamePlates/SVUI_NamePlates.toc
index ceb64df..f3ad2f8 100644
--- a/SVUI_NamePlates/SVUI_NamePlates.toc
+++ b/SVUI_NamePlates/SVUI_NamePlates.toc
@@ -1,6 +1,6 @@
 ## Interface: 60100
 ## Author: Munglunch
-## Version: 1.0.09
+## Version: 1.1.0
 ## Title: |cffFF9900SuperVillain UI: |r|cffFFEF00NamePlates|r
 ## Notes: NamePlates Plugin for [|cff9911FFSVUI|r].
 ## OptionalDeps: LibSharedMedia-3.0
diff --git a/SVUI_QuestTracker/SVUI_QuestTracker.toc b/SVUI_QuestTracker/SVUI_QuestTracker.toc
index 4c62375..e4ddda8 100644
--- a/SVUI_QuestTracker/SVUI_QuestTracker.toc
+++ b/SVUI_QuestTracker/SVUI_QuestTracker.toc
@@ -1,6 +1,6 @@
 ## Interface: 60100
 ## Author: Munglunch
-## Version: 1.0.09
+## Version: 1.1.0
 ## Title: |cffFF9900SuperVillain UI: |r|cffFFEF00QuestTracker|r
 ## Notes: QuestTracker Plugin for [|cff9911FFSVUI|r].
 ## OptionalDeps: LibSharedMedia-3.0
diff --git a/SVUI_Tooltip/SVUI_Tooltip.toc b/SVUI_Tooltip/SVUI_Tooltip.toc
index a8cf7a4..fafa530 100644
--- a/SVUI_Tooltip/SVUI_Tooltip.toc
+++ b/SVUI_Tooltip/SVUI_Tooltip.toc
@@ -1,6 +1,6 @@
 ## Interface: 60100
 ## Author: Munglunch
-## Version: 1.0.09
+## Version: 1.1.0
 ## Title: |cffFF9900SuperVillain UI: |r|cffFFEF00Tooltip|r
 ## Notes: Tooltip Plugin for [|cff9911FFSVUI|r].
 ## OptionalDeps: LibSharedMedia-3.0
diff --git a/SVUI_UnitFrames/SVUI_UnitFrames.toc b/SVUI_UnitFrames/SVUI_UnitFrames.toc
index d69fde0..f1f787d 100644
--- a/SVUI_UnitFrames/SVUI_UnitFrames.toc
+++ b/SVUI_UnitFrames/SVUI_UnitFrames.toc
@@ -1,6 +1,6 @@
 ## Interface: 60100
 ## Author: Munglunch
-## Version: 1.0.09
+## Version: 1.1.0
 ## Title: |cffFF9900SuperVillain UI: |r|cffFFEF00UnitFrames|r
 ## Notes: UnitFrames Plugin for [|cff9911FFSVUI|r].
 ## OptionalDeps: LibSharedMedia-3.0
diff --git a/SVUI_UnitFrames/libs/Plugins/oUF_ActionPanel/oUF_ActionPanel.toc b/SVUI_UnitFrames/libs/Plugins/oUF_ActionPanel/oUF_ActionPanel.toc
index 40d3a9d..1fbcad0 100644
--- a/SVUI_UnitFrames/libs/Plugins/oUF_ActionPanel/oUF_ActionPanel.toc
+++ b/SVUI_UnitFrames/libs/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: 1.0.09
+## Version: 1.1.0
 ## X-Category: oUF
 ## Dependencies: oUF
 ## X-Curse-Packaged-Version: r20150218022926
diff --git a/SVUI_UnitFrames/libs/Plugins/oUF_Afflicted/oUF_Afflicted.toc b/SVUI_UnitFrames/libs/Plugins/oUF_Afflicted/oUF_Afflicted.toc
index d222122..f4f88ef 100644
--- a/SVUI_UnitFrames/libs/Plugins/oUF_Afflicted/oUF_Afflicted.toc
+++ b/SVUI_UnitFrames/libs/Plugins/oUF_Afflicted/oUF_Afflicted.toc
@@ -2,7 +2,7 @@
 ## Title: oUF Afflicted
 ## Notes: Adds Custom Debuff Highlighting to oUF.
 ## Author: Munglunch
-## Version: 1.0.09
+## Version: 1.1.0
 ## X-Category: oUF
 ## Dependencies: oUF
 ## X-Curse-Packaged-Version: r20150218022926
diff --git a/SVUI_UnitFrames/libs/Plugins/oUF_CombatFader/oUF_CombatFader.toc b/SVUI_UnitFrames/libs/Plugins/oUF_CombatFader/oUF_CombatFader.toc
index 48841c8..40eb460 100644
--- a/SVUI_UnitFrames/libs/Plugins/oUF_CombatFader/oUF_CombatFader.toc
+++ b/SVUI_UnitFrames/libs/Plugins/oUF_CombatFader/oUF_CombatFader.toc
@@ -2,7 +2,7 @@
 ## Title: oUF Combat Fader
 ## Notes: Adds combat fade ability to oUF
 ## Author: SV
-## Version: 1.0.09
+## Version: 1.1.0
 ## Dependencies: oUF
 ## X-Curse-Packaged-Version: r20150218022926
 ## X-Curse-Project-Name: SuperVillain UI: UnitFrames
diff --git a/SVUI_UnitFrames/libs/Plugins/oUF_Gladiator/oUF_Gladiator.toc b/SVUI_UnitFrames/libs/Plugins/oUF_Gladiator/oUF_Gladiator.toc
index a743310..26ead53 100644
--- a/SVUI_UnitFrames/libs/Plugins/oUF_Gladiator/oUF_Gladiator.toc
+++ b/SVUI_UnitFrames/libs/Plugins/oUF_Gladiator/oUF_Gladiator.toc
@@ -2,7 +2,7 @@
 ## Title: oUF Gladiator
 ## Notes: Adds PvP trinket status and spec icons to oUF frames.
 ## Author: Munglunch
-## Version: 1.0.09
+## Version: 1.1.0
 ## X-Category: oUF
 ## Dependencies: oUF
 ## X-Curse-Packaged-Version: r20150218022926
diff --git a/SVUI_UnitFrames/libs/Plugins/oUF_MageMagic/oUF_MageMagic.toc b/SVUI_UnitFrames/libs/Plugins/oUF_MageMagic/oUF_MageMagic.toc
index ebec3b1..486100f 100644
--- a/SVUI_UnitFrames/libs/Plugins/oUF_MageMagic/oUF_MageMagic.toc
+++ b/SVUI_UnitFrames/libs/Plugins/oUF_MageMagic/oUF_MageMagic.toc
@@ -2,7 +2,7 @@
 ## Title: oUF Mage Magic
 ## Notes: Adds support for mage spell indicators to oUF.
 ## Author: Munglunch
-## Version: 1.0.09
+## Version: 1.1.0
 ## Dependencies: oUF
 ## X-Curse-Packaged-Version: r20150218022926
 ## X-Curse-Project-Name: SuperVillain UI: UnitFrames
diff --git a/SVUI_UnitFrames/libs/oUF/elements/aura.lua b/SVUI_UnitFrames/libs/oUF/elements/aura.lua
index 4b904dd..ee7adec 100644
--- a/SVUI_UnitFrames/libs/oUF/elements/aura.lua
+++ b/SVUI_UnitFrames/libs/oUF/elements/aura.lua
@@ -256,21 +256,6 @@ local SetBarLayout = function(self, visible, cache)
 			end
 		end
 	end
-
-	local newWidth, newHeight;
-	if(visible > 0) then
-		local visibleRows = ceil(visible / cols);
-		newHeight = 1 + (size * visibleRows);
-		if(visibleRows <= 1) then
-			newWidth = 1 + (size * col)
-		else
-			newWidth = 1 + (size * cols)
-		end
-	else
-		newWidth = 1 + (size * cols)
-		newHeight = 1
-	end
-	self:SetSize(newWidth, newHeight)
 end

 local SetIconLayout = function(self, visible, cache)