Quantcast

Added BG Filters

Erik L. Vonderscheer [11-16-09 - 08:06]
Added BG Filters
Config GUI reorganization
Filename
Docs/changelog.txt
TradeFilter3.lua
TradeFilter3Options.lua
diff --git a/Docs/changelog.txt b/Docs/changelog.txt
index 27a8af5..6c4d851 100644
--- a/Docs/changelog.txt
+++ b/Docs/changelog.txt
@@ -1,4 +1,7 @@
 == ChangeLog
+*r192
+**++Added BG Filters++
+**++Config GUI reorganization++
 *r167
 **++Added simple duel spam block++
 *r159
diff --git a/TradeFilter3.lua b/TradeFilter3.lua
index 943e772..4ff5d6d 100644
--- a/TradeFilter3.lua
+++ b/TradeFilter3.lua
@@ -75,9 +75,12 @@ defaults = {
 		filterGAC = false,
 		filterSELF = false,
 		filterLFG = false,
+		filterBG = false,
 		filterGeneral = false,
 		filterTrade = true,
-		editfilter_enable = false,
+		editfilterTRADE_enable = false,
+		editfilterBASE_enable = false,
+		editfilterBG_enable = false,
 		ebl = false,
 		ewl = false,
 		blacklist_enable = true,
@@ -94,9 +97,6 @@ defaults = {
 		whitelist = {},
 		blacklist = {},
 		filters = {},
-		basefilters = {},
-		tradefilters = {},
-		specialfilters = {},
 	},
 }

@@ -531,10 +531,10 @@ local function PreFilterFunc_Say(self, event, ...)
 			if (TF3:FindRepeat(msg, userID, msgID, coloredName) == true) then
 				filtered = true
 			else
-				filtered = TF3:FilterFunc(...)
+				filtered = TF3:FilterFunc("0. " .. L["Say/Yell"], ...)
 			end
 		else
-			filtered = TF3:FilterFunc(...)
+			filtered = TF3:FilterFunc("0. " .. L["Say/Yell"], ...)
 		end
 	elseif (event == "CHAT_MSG_SAY" and not TF3.db.profile.filterSAY) then
 		filtered = false
@@ -566,10 +566,10 @@ local function PreFilterFunc_Yell(self, event, ...)
 			if (TF3:FindRepeat(msg, userID, msgID, coloredName) == true) then
 				filtered = true
 			else
-				filtered = TF3:FilterFunc(...)
+				filtered = TF3:FilterFunc("0. " .. L["Say/Yell"], ...)
 			end
 		else
-			filtered = TF3:FilterFunc(...)
+			filtered = TF3:FilterFunc("0. " .. L["Say/Yell"], ...)
 		end
 	elseif (event == "CHAT_MSG_YELL" and not TF3.db.profile.filterYELL) then
 		filtered = false
@@ -577,6 +577,41 @@ local function PreFilterFunc_Yell(self, event, ...)
 	return filtered
 end

+--[[ Check for Battleground Channel and User setting ]]--
+local function PreFilterFunc_BG(self, event, ...)
+	local filtered = false
+	local msg = arg1 or select(1, ...)
+	local userID = arg2 or select(2, ...)
+	local msgID = arg11 or select(11, ...)
+	local cName = arg12 or select(12, ...)
+	local coloredName = TF3:GetColoredName(userID, cName)
+	if not (repeatdata[userID]) then
+		repeatdata[userID] = {}
+		repeatdata[userID].lastmsg = msg
+		repeatdata[userID].lastmsgID = msgID
+		repeatdata[userID].lastIndex = 1
+		repeatdata[userID].repeats = 1
+	end
+	if (TF3.db.profile.filterBG and TF3:IsFriend(userID) == false and event == "CHAT_MSG_BATTLEGROUND" or event == "CHAT_MSG_BATTLEGROUND_LEADER") then
+		if (userID == UnitName("Player") and TF3.db.profile.filterSELF == false or TF3:WhiteList(msg, userID, msgID, coloredName) == true) then
+			filtered = false
+		elseif (TF3:BlackList(msg, userID, msgID, coloredName) == true) then
+			filtered = true
+		elseif (TF3.db.profile.repeat_enable) then
+			if (TF3:FindRepeat(msg, userID, msgID, coloredName) == true) then
+				filtered = true
+			else
+				filtered = TF3:FilterFunc("0. BG", ...)
+			end
+		else
+			filtered = TF3:FilterFunc("0. BG", ...)
+		end
+	elseif (not TF3.db.profile.filterBG and event == "CHAT_MSG_BATTLEGROUND" or event == "CHAT_MSG_BATTLEGROUND_LEADER") then
+		filtered = false
+	end
+	return filtered
+end
+
 --[[ Check for Trade/General/LFG Channel and User setting ]]--
 local function PreFilterFunc(self, event, ...)
 	local filtered = false
@@ -605,10 +640,10 @@ local function PreFilterFunc(self, event, ...)
 			if (TF3:FindRepeat(msg, userID, msgID, coloredName) == true) then
 				filtered = true
 			else
-				filtered = TF3:FilterFunc(...)
+				filtered = TF3:FilterFunc("2. " .. L["Trade"], ...)
 			end
 		else
-			filtered = TF3:FilterFunc(...)
+			filtered = TF3:FilterFunc("2. " .. L["Trade"], ...)
 		end
 	elseif (zoneID == 2 and not TF3.db.profile.filterTrade) then
 		filtered = false
@@ -623,10 +658,10 @@ local function PreFilterFunc(self, event, ...)
 			if (TF3:FindRepeat(msg, userID, msgID, coloredName) == true) then
 				filtered = true
 			else
-				filtered = TF3:FilterFunc(...)
+				filtered = TF3:FilterFunc("1. " .. L["General"], ...)
 			end
 		else
-			filtered = TF3:FilterFunc(...)
+			filtered = TF3:FilterFunc("1. " .. L["General"], ...)
 		end
 	elseif (chanID == 1 and not TF3.db.profile.filterGeneral) then
 		filtered = false
@@ -641,10 +676,10 @@ local function PreFilterFunc(self, event, ...)
 			if (TF3:FindRepeat(msg, userID, msgID, coloredName) == true) then
 				filtered = true
 			else
-				filtered = TF3:FilterFunc(...)
+				filtered = TF3:FilterFunc("26. " .. L["LFG"], ...)
 			end
 		else
-			filtered = TF3:FilterFunc(...)
+			filtered = TF3:FilterFunc("26. " .. L["LFG"], ...)
 		end
 	elseif (chanID == 26 and not TF3.db.profile.filterLFG) then
 		filtered = false
@@ -659,10 +694,10 @@ local function PreFilterFunc(self, event, ...)
 			if (TF3:FindRepeat(msg, userID, msgID, coloredName) == true) then
 				filtered = true
 			else
-				filtered = TF3:FilterFunc(...)
+				filtered = TF3:FilterFunc("X. " .. chanName, ...)
 			end
 		else
-			filtered = TF3:FilterFunc(...)
+			filtered = TF3:FilterFunc("X. " .. chanName, ...)
 		end
 	elseif (TF3:SpecialChans(chanName) == true and not TF3.db.profile.special_enable) then
 		filtered = false
@@ -671,7 +706,7 @@ local function PreFilterFunc(self, event, ...)
 end

 --[[ Filter Func ]]--
-function TF3:FilterFunc(...)
+function TF3:FilterFunc(chan, ...)
 	local filterFuncList = ChatFrame_GetMessageEventFilters("CHAT_MSG_CHANNEL")
 	local msg = arg1 or select(1, ...)
 	local userID = arg2 or select(2, ...)
@@ -682,17 +717,17 @@ function TF3:FilterFunc(...)
 	local cName = arg12 or select(12, ...)
 	local coloredName = TF3:GetColoredName(userID, cName)
 	local msg = lower(msg)
-	if (chanID == 1) then
-		chan = "1. " .. L["General"]
-	elseif (zoneID == 2) then
-		chan = "2. " .. L["Trade"]
-	elseif (zoneID == 26) then
-		chan = "26. " .. L["LFG"]
-	elseif (TF3:SpecialChans(chanName) == true) then
-		chan = "X. Special Channel"
-	else
-		chan = "0. " .. L["Say/Yell"]
-	end
+--~ 	if (chanID == 1) then
+--~ 		chan = "1. " .. L["General"]
+--~ 	elseif (zoneID == 2) then
+--~ 		chan = "2. " .. L["Trade"]
+--~ 	elseif (zoneID == 26) then
+--~ 		chan = "26. " .. L["LFG"]
+--~ 	elseif (TF3:SpecialChans(chanName) == true) then
+--~ 		chan = "X. Special Channel"
+--~ 	else
+--~ 		chan = "0. " .. L["Say/Yell"]
+--~ 	end
 	if (filterFuncList and TF3.db.profile.turnOn) then
 		filtered = true
 		if (TF3.db.profile.debug) then
@@ -720,6 +755,26 @@ function TF3:FilterFunc(...)
 					filtered = false
 				end
 			end
+		elseif (chan == "0. BG") then
+			if (TF3.db.profile.filters.BG == nil) then
+				TF3.db.profile.filters.BG = L.FILTERS.BG
+			end
+			for k,v in pairs(TF3.db.profile.filters.BG) do
+				if (TF3.db.profile.debug and not TF3.db.profile.debug_checking) then
+					if (lastmsg ~= msg or lastuserID ~= userID) then
+						TF3:FindFrame(debugFrame, L["CFM"] .. " " .. v)
+					end
+				end
+				if (find(msg,v)) then
+					if (TF3.db.profile.debug) then
+						if (lastmsg ~= msg or lastuserID ~= userID) then
+							TF3:FindFrame(debugFrame, L["MATCHED"] .. " |cffff8080" .. v .. "|r")
+							lastmsg, lastuserID = msg, userID
+						end
+					end
+					filtered = false
+				end
+			end
 		else
 			if (TF3.db.profile.filters.BASE == nil) then
 				TF3.db.profile.filters.BASE = L.FILTERS.BASE
@@ -760,4 +815,6 @@ end
 ChatFrame_AddMessageEventFilter("CHAT_MSG_SAY", PreFilterFunc_Say)
 ChatFrame_AddMessageEventFilter("CHAT_MSG_YELL", PreFilterFunc_Yell)
 ChatFrame_AddMessageEventFilter("CHAT_MSG_ADDON", PreFilterFunc_Addon)
+ChatFrame_AddMessageEventFilter("CHAT_MSG_BATTLEGROUND", PreFilterFunc_BG)
+ChatFrame_AddMessageEventFilter("CHAT_MSG_BATTLEGROUND_LEADER", PreFilterFunc_BG)
 ChatFrame_AddMessageEventFilter("CHAT_MSG_CHANNEL", PreFilterFunc)
diff --git a/TradeFilter3Options.lua b/TradeFilter3Options.lua
index 314e6a8..a107765 100644
--- a/TradeFilter3Options.lua
+++ b/TradeFilter3Options.lua
@@ -93,6 +93,16 @@ options = {
 							get = function() return TF3.db.profile.filterLFG end,
 							set = function() TF3.db.profile.filterLFG = not TF3.db.profile.filterLFG end,
 						},
+						Battlegrounds = {
+							type = 'toggle',
+							order = 4,
+							width = "double",
+							disabled = false,
+							name = L["BGC"],
+							desc = L["BGCD"],
+							get = function() return TF3.db.profile.filterBG end,
+							set = function() TF3.db.profile.filterBG = not TF3.db.profile.filterBG end,
+						},
 						SAYChannel = {
 							type = 'toggle',
 							order = 5,
@@ -206,6 +216,7 @@ options = {
 				},
 				editFilterGroup = {
 					type = "group",
+					childGroups = "tab",
 					handler = TF3,
 					order = 2,
 					disabled = function()
@@ -214,132 +225,251 @@ options = {
 					name = L["EditFilterGroup"],
 					desc = L["EditFilterGD"],
 					args = {
-						optionsHeader2 = {
-							type	= "header",
-							order	= 1,
-							name	= L["EditFilter"],
-						},
-						editfilter_enable = {
-							type = 'toggle',
-							order = 2,
-							width = "double",
-							name = L["EditFilter"],
-							desc = L["EditFilterD"],
-							get = function() return TF3.db.profile.addfilter_enable end,
-							set = function() TF3.db.profile.addfilter_enable = not TF3.db.profile.addfilter_enable end,
-						},
-						optionsHeader2a = {
-							type	= "header",
-							order	= 3,
-							name	= L["BTF"],
-						},
-						tradefilters = {
-							type = 'input',
-							disabled = function()
-								return not TF3.db.profile.addfilter_enable
-							end,
-							multiline = 8,
-							order = 4,
-							width = "full",
-							name = L["BTF"],
-							desc = L["BTFD"],
-							usage = L["INPUSAGE"],
-							get = function(info)
-								local a = {}
-								local ret = ""
-								if (TF3.db.profile.filters.TRADE == nil) then
-									TF3.db.profile.filters.TRADE = L.FILTERS.TRADE
-								end
-								for _,v in pairs(TF3.db.profile.filters.TRADE) do
-									insert(a, v)
-								end
-								sort(a)
-								for _,v in ipairs(a) do
-									if ret == "" then
-										ret = v
-									else
-										ret = ret .. "\n" .. v
-									end
-								end
-								return ret
-							end,
-							set = function(info, value)
-								TF3:WipeTable(TF3.db.profile.filters.TRADE)
-								local tbl = { strsplit("\n", value) }
-								for k, v in pairs(tbl) do
-									key = "FILTER"
-									TF3.db.profile.filters.TRADE[key..k] = v
-								end
-							end,
-						},
-						reset_tradefilters = {
-							type = 'execute',
+						editFilterGroupTRADE = {
+							type = "group",
+							handler = TF3,
+							order = 1,
 							disabled = function()
-								return not TF3.db.profile.addfilter_enable
+								return not TF3.db.profile.turnOn
 							end,
-							order = 5,
-							name = L["RTF"],
-							desc = L["RTF"],
-							func = function() TF3.db.profile.filters.TRADE = TF3:CopyTable(L.FILTERS.TRADE) end,
-						},
-						optionsHeader2b = {
-							type	= "header",
-							order	= 6,
-							name	= L["BCF"],
-						},
-						basefilters = {
-							type = 'input',
+							name = "TRADE Filters",
+							desc = "TRADE Filters",
+							args = {
+								optionsHeader1 = {
+									type	= "header",
+									order	= 1,
+									name	= L["EditFilter"],
+								},
+								editfilter_enable = {
+									type = 'toggle',
+									order = 2,
+									width = "double",
+									name = L["EditFilter"],
+									desc = L["EditFilterD"],
+									get = function() return TF3.db.profile.addfilterTRADE_enable end,
+									set = function() TF3.db.profile.addfilterTRADE_enable = not TF3.db.profile.addfilterTRADE_enable end,
+								},
+								optionsHeader2 = {
+									type	= "header",
+									order	= 3,
+									name	= L["BTF"],
+								},
+								tradefilters = {
+									type = 'input',
+									disabled = function()
+										return not TF3.db.profile.addfilterTRADE_enable
+									end,
+									multiline = 10,
+									order = 4,
+									width = "full",
+									name = L["BTF"],
+									desc = L["BTFD"],
+									usage = L["INPUSAGE"],
+									get = function(info)
+										local a = {}
+										local ret = ""
+										if (TF3.db.profile.filters.TRADE == nil) then
+											TF3.db.profile.filters.TRADE = L.FILTERS.TRADE
+										end
+										for _,v in pairs(TF3.db.profile.filters.TRADE) do
+											insert(a, v)
+										end
+										sort(a)
+										for _,v in ipairs(a) do
+											if ret == "" then
+												ret = v
+											else
+												ret = ret .. "\n" .. v
+											end
+										end
+										return ret
+									end,
+									set = function(info, value)
+										TF3:WipeTable(TF3.db.profile.filters.TRADE)
+										local tbl = { strsplit("\n", value) }
+										for k, v in pairs(tbl) do
+											key = "FILTER"
+											TF3.db.profile.filters.TRADE[key..k] = v
+										end
+									end,
+								},
+								reset_tradefilters = {
+									type = 'execute',
+									disabled = function()
+										return not TF3.db.profile.addfilterTRADE_enable
+									end,
+									order = 5,
+									name = L["RTF"],
+									desc = L["RTF"],
+									func = function() TF3.db.profile.filters.TRADE = TF3:CopyTable(L.FILTERS.TRADE) end,
+								},
+							},
+						},
+						editFilterGroupBASE = {
+							type = "group",
+							handler = TF3,
+							order = 2,
 							disabled = function()
-								return not TF3.db.profile.addfilter_enable
-							end,
-							multiline = 8,
-							order = 7,
-							width = "full",
-							name = L["BCF"],
-							desc = L["BCFD"],
-							usage = L["INPUSAGE"],
-							get = function(info)
-								local a = {}
-								local ret = ""
-								if (TF3.db.profile.filters.BASE == nil) then
-									TF3.db.profile.filters.BASE = L.FILTERS.BASE
-								end
-								for _,v in pairs(TF3.db.profile.filters.BASE) do
-									insert(a, v)
-								end
-								sort(a)
-								for _,v in ipairs(a) do
-									if ret == "" then
-										ret = v
-									else
-										ret = ret .. "\n" .. v
-									end
-								end
-								return ret
-							end,
-							set = function(info, value)
-								TF3:WipeTable(TF3.db.profile.filters.BASE)
-								local tbl = { strsplit("\n", value) }
-								for k, v in pairs(tbl) do
-									key = "FILTER"
-									TF3.db.profile.filters.BASE[key..k] = v
-								end
+								return not TF3.db.profile.turnOn
 							end,
-						},
-						reset_basefilters = {
-							type = 'execute',
+							name = "BASE Filters",
+							desc = "BASE Filters",
+							args = {
+								optionsHeader1 = {
+									type	= "header",
+									order	= 1,
+									name	= L["EditFilter"],
+								},
+								editfilter_enable = {
+									type = 'toggle',
+									order = 2,
+									width = "double",
+									name = L["EditFilter"],
+									desc = L["EditFilterD"],
+									get = function() return TF3.db.profile.addfilterBASE_enable end,
+									set = function() TF3.db.profile.addfilterBASE_enable = not TF3.db.profile.addfilterBASE_enable end,
+								},
+								optionsHeader2 = {
+									type	= "header",
+									order	= 6,
+									name	= L["BCF"],
+								},
+								basefilters = {
+									type = 'input',
+									disabled = function()
+										return not TF3.db.profile.addfilterBASE_enable
+									end,
+									multiline = 10,
+									order = 7,
+									width = "full",
+									name = L["BCF"],
+									desc = L["BCFD"],
+									usage = L["INPUSAGE"],
+									get = function(info)
+										local a = {}
+										local ret = ""
+										if (TF3.db.profile.filters.BASE == nil) then
+											TF3.db.profile.filters.BASE = L.FILTERS.BASE
+										end
+										for _,v in pairs(TF3.db.profile.filters.BASE) do
+											insert(a, v)
+										end
+										sort(a)
+										for _,v in ipairs(a) do
+											if ret == "" then
+												ret = v
+											else
+												ret = ret .. "\n" .. v
+											end
+										end
+										return ret
+									end,
+									set = function(info, value)
+										TF3:WipeTable(TF3.db.profile.filters.BASE)
+										local tbl = { strsplit("\n", value) }
+										for k, v in pairs(tbl) do
+											key = "FILTER"
+											TF3.db.profile.filters.BASE[key..k] = v
+										end
+									end,
+								},
+								reset_basefilters = {
+									type = 'execute',
+									disabled = function()
+										return not TF3.db.profile.addfilterBASE_enable
+									end,
+									order = 8,
+									name = L["RBF"],
+									desc = L["RBF"],
+									func = function() TF3.db.profile.filters.BASE = TF3:CopyTable(L.FILTERS.BASE) end,
+								},
+							},
+						},
+						editFilterGroupBG = {
+							type = "group",
+							handler = TF3,
+							order = 3,
 							disabled = function()
-								return not TF3.db.profile.addfilter_enable
+								return not TF3.db.profile.turnOn
 							end,
-							order = 8,
-							name = L["RBF"],
-							desc = L["RBF"],
-							func = function() TF3.db.profile.filters.BASE = TF3:CopyTable(L.FILTERS.BASE) end,
+							name = "BG Filters",
+							desc = "BG Filters",
+							args = {
+								optionsHeader1 = {
+									type	= "header",
+									order	= 1,
+									name	= L["EditFilter"],
+								},
+								editfilter_enable = {
+									type = 'toggle',
+									order = 2,
+									width = "double",
+									name = L["EditFilter"],
+									desc = L["EditFilterD"],
+									get = function() return TF3.db.profile.addfilterBG_enable end,
+									set = function() TF3.db.profile.addfilterBG_enable = not TF3.db.profile.addfilterBG_enable end,
+								},
+								optionsHeader2 = {
+									type	= "header",
+									order	= 6,
+									name	= L["BG"],
+								},
+								bgfilters = {
+									type = 'input',
+									disabled = function()
+										return not TF3.db.profile.addfilterBG_enable
+									end,
+									multiline = 10,
+									order = 7,
+									width = "full",
+									name = L["BG"],
+									desc = L["BGD"],
+									usage = L["INPUSAGE"],
+									get = function(info)
+										local a = {}
+										local ret = ""
+										if (TF3.db.profile.filters.BG == nil) then
+											TF3.db.profile.filters.BG = L.FILTERS.BG
+										end
+										for _,v in pairs(TF3.db.profile.filters.BG) do
+											insert(a, v)
+										end
+										sort(a)
+										for _,v in ipairs(a) do
+											if ret == "" then
+												ret = v
+											else
+												ret = ret .. "\n" .. v
+											end
+										end
+										return ret
+									end,
+									set = function(info, value)
+										TF3:WipeTable(TF3.db.profile.filters.BG)
+										local tbl = { strsplit("\n", value) }
+										for k, v in pairs(tbl) do
+											key = "FILTER"
+											TF3.db.profile.filters.BG[key..k] = v
+										end
+									end,
+								},
+								reset_bgfilters = {
+									type = 'execute',
+									disabled = function()
+										return not TF3.db.profile.addfilterBG_enable
+									end,
+									order = 8,
+									name = L["RBF"],
+									desc = L["RBF"],
+									func = function() TF3.db.profile.filters.BG = TF3:CopyTable(L.FILTERS.BG) end,
+								},
+							},
 						},
 					},
 				},
 				listsGroup = {
 					type = "group",
+					childGroups = "tab",
 					handler = TF3,
 					order = 3,
 					disabled = function()
@@ -348,165 +478,189 @@ options = {
 					name = L["listsGroup"],
 					desc = L["listsGD"],
 					args = {
-						optionsHeader3a = {
-							type	= "header",
-							order	= 1,
-							name	= L["bLists"],
-						},
-						blacklist_enable = {
-							type = 'toggle',
-							order = 2,
-							width = "double",
-							name = L["BLE"],
-							desc = L["BLE"],
-							get = function() return TF3.db.profile.blacklist_enable end,
-							set = function() TF3.db.profile.blacklist_enable = not TF3.db.profile.blacklist_enable end,
-						},
-						editblacklist = {
-							type = 'toggle',
-							order = 3,
-							width = "double",
-							name = L["EBL"],
-							desc = L["EBL"],
-							get = function() return TF3.db.profile.ebl end,
-							set = function() TF3.db.profile.ebl = not TF3.db.profile.ebl end,
-						},
-						blist = {
-							type = 'input',
-							disabled = function()
-								return not TF3.db.profile.ebl
-							end,
-							multiline = 8,
-							order = 4,
-							width = "full",
-							name = L["bLists"],
-							usage = L["INPUSAGE"],
-							get = function(info)
-								local a = {}
-								local ret = ""
-								if (TF3.db.profile.blacklist == nil) then
-									TF3.db.profile.blacklist = L.BLACKLIST
-								end
-								for _,v in pairs(TF3.db.profile.blacklist) do
-									insert(a, v)
-								end
-								sort(a)
-								for _,v in ipairs(a) do
-									if ret == "" then
-										ret = v
-									else
-										ret = ret .. "\n" .. v
-									end
-								end
-								return ret
-							end,
-							set = function(info, value)
-								TF3:WipeTable(TF3.db.profile.blacklist)
-								local tbl = { strsplit("\n", value) }
-								for k, v in pairs(tbl) do
-									key = "BLIST"
-									TF3.db.profile.blacklist[key..k] = v
-								end
-							end,
-						},
-						reset_blist = {
-							type = 'execute',
-							disabled = function()
-								return not TF3.db.profile.ebl
-							end,
-							order = 5,
-							name = L["RBLS"],
-							desc = L["RBLS"],
-							func = function() TF3.db.profile.blacklist = TF3:CopyTable(L.BLACKLIST) end,
-						},
-						optionsHeader3b = {
-							type	= "header",
-							order	= 6,
-							name	= L["wLists"],
-						},
-						whitelist_enable = {
-							type = 'toggle',
-							order = 8,
-							width = "double",
-							name = L["WLE"],
-							desc = L["WLE"],
-							get = function() return TF3.db.profile.whitelist_enable end,
-							set = function() TF3.db.profile.whitelist_enable = not TF3.db.profile.whitelist_enable end,
-						},
-						editwhitelist = {
-							type = 'toggle',
-							order = 9,
-							width = "double",
-							name = L["EWL"],
-							desc = L["EWL"],
-							get = function() return TF3.db.profile.ewl end,
-							set = function() TF3.db.profile.ewl = not TF3.db.profile.ewl end,
-						},
-						whitelist_repeat_bypass = {
-							type = 'toggle',
-							order = 10,
-							width = "double",
-							name = L["RPTBYPASS"],
-							desc = L["RPTBYPASSD"],
-							get = function() return TF3.db.profile.wlbp end,
-							set = function() TF3.db.profile.wlbp = not TF3.db.profile.wlbp end,
-						},
-						whitelist_blacklist_bypass = {
-							type = 'toggle',
-							order = 11,
-							width = "double",
-							name = L["BLBYPASS"],
-							desc = L["BLBYPASSD"],
-							get = function() return TF3.db.profile.wlblbp end,
-							set = function() TF3.db.profile.wlblbp = not TF3.db.profile.wlblbp end,
-						},
-						wlist = {
-							type = 'input',
+						listsGroupBlack = {
+							type = "group",
+							handler = TF3,
+							order = 1,
 							disabled = function()
-								return not TF3.db.profile.ewl
-							end,
-							multiline = 8,
-							order = 12,
-							width = "full",
-							name = L["wLists"],
-							usage = L["INPUSAGE"],
-							get = function(info)
-								local a = {}
-								local ret = ""
-								if (TF3.db.profile.whitelist == nil) then
-									TF3.db.profile.whitelist = L.WHITELIST
-								end
-								for _,v in pairs(TF3.db.profile.whitelist) do
-									insert(a, v)
-								end
-								sort(a)
-								for _,v in ipairs(a) do
-									if ret == "" then
-										ret = v
-									else
-										ret = ret .. "\n" .. v
-									end
-								end
-								return ret
-							end,
-							set = function(info, value)
-								TF3:WipeTable(TF3.db.profile.whitelist)
-								local tbl = { strsplit("\n", value) }
-								for k, v in pairs(tbl) do
-									key = "WLIST"
-									TF3.db.profile.whitelist[key..k] = v
-								end
+								return not TF3.db.profile.turnOn
 							end,
-						},
-						reset_wlist = {
-							type = 'execute',
+							name = L["listsGroup"],
+							desc = L["listsGD"],
+							args = {
+								optionsHeader1 = {
+									type	= "header",
+									order	= 1,
+									name	= L["bLists"],
+								},
+								blacklist_enable = {
+									type = 'toggle',
+									order = 2,
+									width = "double",
+									name = L["BLE"],
+									desc = L["BLE"],
+									get = function() return TF3.db.profile.blacklist_enable end,
+									set = function() TF3.db.profile.blacklist_enable = not TF3.db.profile.blacklist_enable end,
+								},
+								editblacklist = {
+									type = 'toggle',
+									order = 3,
+									width = "double",
+									name = L["EBL"],
+									desc = L["EBL"],
+									get = function() return TF3.db.profile.ebl end,
+									set = function() TF3.db.profile.ebl = not TF3.db.profile.ebl end,
+								},
+								blist = {
+									type = 'input',
+									disabled = function()
+										return not TF3.db.profile.ebl
+									end,
+									multiline = 10,
+									order = 4,
+									width = "full",
+									name = L["bLists"],
+									usage = L["INPUSAGE"],
+									get = function(info)
+										local a = {}
+										local ret = ""
+										if (TF3.db.profile.blacklist == nil) then
+											TF3.db.profile.blacklist = L.BLACKLIST
+										end
+										for _,v in pairs(TF3.db.profile.blacklist) do
+											insert(a, v)
+										end
+										sort(a)
+										for _,v in ipairs(a) do
+											if ret == "" then
+												ret = v
+											else
+												ret = ret .. "\n" .. v
+											end
+										end
+										return ret
+									end,
+									set = function(info, value)
+										TF3:WipeTable(TF3.db.profile.blacklist)
+										local tbl = { strsplit("\n", value) }
+										for k, v in pairs(tbl) do
+											key = "BLIST"
+											TF3.db.profile.blacklist[key..k] = v
+										end
+									end,
+								},
+								reset_blist = {
+									type = 'execute',
+									disabled = function()
+										return not TF3.db.profile.ebl
+									end,
+									order = 5,
+									name = L["RBLS"],
+									desc = L["RBLS"],
+									func = function() TF3.db.profile.blacklist = TF3:CopyTable(L.BLACKLIST) end,
+								},
+							},
+						},
+						listsGroupWhite = {
+							type = "group",
+							handler = TF3,
+							order = 2,
 							disabled = function()
-								return not TF3.db.profile.ewl
+								return not TF3.db.profile.turnOn
 							end,
-							order = 13,
-							name = L["RWLS"],
-							desc = L["RWLS"],
-							func = function() TF3.db.profile.whitelist = TF3:CopyTable(L.WHITELIST) end,
+							name = L["listsGroup"],
+							desc = L["listsGD"],
+							args = {
+								optionsHeader3b = {
+									type	= "header",
+									order	= 1,
+									name	= L["wLists"],
+								},
+								whitelist_enable = {
+									type = 'toggle',
+									order = 2,
+									width = "double",
+									name = L["WLE"],
+									desc = L["WLE"],
+									get = function() return TF3.db.profile.whitelist_enable end,
+									set = function() TF3.db.profile.whitelist_enable = not TF3.db.profile.whitelist_enable end,
+								},
+								editwhitelist = {
+									type = 'toggle',
+									order = 3,
+									width = "double",
+									name = L["EWL"],
+									desc = L["EWL"],
+									get = function() return TF3.db.profile.ewl end,
+									set = function() TF3.db.profile.ewl = not TF3.db.profile.ewl end,
+								},
+								whitelist_repeat_bypass = {
+									type = 'toggle',
+									order = 4,
+									width = "double",
+									name = L["RPTBYPASS"],
+									desc = L["RPTBYPASSD"],
+									get = function() return TF3.db.profile.wlbp end,
+									set = function() TF3.db.profile.wlbp = not TF3.db.profile.wlbp end,
+								},
+								whitelist_blacklist_bypass = {
+									type = 'toggle',
+									order = 5,
+									width = "double",
+									name = L["BLBYPASS"],
+									desc = L["BLBYPASSD"],
+									get = function() return TF3.db.profile.wlblbp end,
+									set = function() TF3.db.profile.wlblbp = not TF3.db.profile.wlblbp end,
+								},
+								wlist = {
+									type = 'input',
+									disabled = function()
+										return not TF3.db.profile.ewl
+									end,
+									multiline = 10,
+									order = 6,
+									width = "full",
+									name = L["wLists"],
+									usage = L["INPUSAGE"],
+									get = function(info)
+										local a = {}
+										local ret = ""
+										if (TF3.db.profile.whitelist == nil) then
+											TF3.db.profile.whitelist = L.WHITELIST
+										end
+										for _,v in pairs(TF3.db.profile.whitelist) do
+											insert(a, v)
+										end
+										sort(a)
+										for _,v in ipairs(a) do
+											if ret == "" then
+												ret = v
+											else
+												ret = ret .. "\n" .. v
+											end
+										end
+										return ret
+									end,
+									set = function(info, value)
+										TF3:WipeTable(TF3.db.profile.whitelist)
+										local tbl = { strsplit("\n", value) }
+										for k, v in pairs(tbl) do
+											key = "WLIST"
+											TF3.db.profile.whitelist[key..k] = v
+										end
+									end,
+								},
+								reset_wlist = {
+									type = 'execute',
+									disabled = function()
+										return not TF3.db.profile.ewl
+									end,
+									order = 7,
+									name = L["RWLS"],
+									desc = L["RWLS"],
+									func = function() TF3.db.profile.whitelist = TF3:CopyTable(L.WHITELIST) end,
+								},
+							},
 						},
 					},
 				},