Quantcast

Added a Quality filter menu to allow inclusion/exclusion of certain recipe item qualities.

James D. Callahan III [03-28-10 - 11:12]
Added a Quality filter menu to allow inclusion/exclusion of certain recipe item qualities.
Filename
ARL.lua
Frame.lua
Locales/devel-enUS.lua
diff --git a/ARL.lua b/ARL.lua
index 6567dbe..df9a8d7 100644
--- a/ARL.lua
+++ b/ARL.lua
@@ -306,6 +306,15 @@ function addon:OnInitialize()
 					},
 				},
 				-------------------------------------------------------------------------------
+				-- Quality Filters
+				-------------------------------------------------------------------------------
+				quality = {
+					common = true,
+					uncommon = true,
+					rare = true,
+					epic = true,
+				},
+				-------------------------------------------------------------------------------
 				-- Binding Filters
 				-------------------------------------------------------------------------------
 				binding = {
@@ -1316,6 +1325,26 @@ do
 		if not obtain_filters.wrath and game_version == V.WOTLK then
 			return false
 		end
+		local quality_filters = filter_db.quality
+		local recipe_quality = recipe.quality
+		local Q = private.item_qualities
+
+		-- Filter out certain recipe quality types.
+		if not quality_filters.common and recipe_quality == Q.COMMON then
+			return false
+		end
+
+		if not quality_filters.uncommon and recipe_quality == Q.UNCOMMON then
+			return false
+		end
+
+		if not quality_filters.rare and recipe_quality == Q.RARE then
+			return false
+		end
+
+		if not quality_filters.epic and recipe_quality == Q.EPIC then
+			return false
+		end

 		-------------------------------------------------------------------------------
 		-- Check the hard filter flags
diff --git a/Frame.lua b/Frame.lua
index 853a3ae..5c3712c 100644
--- a/Frame.lua
+++ b/Frame.lua
@@ -91,6 +91,7 @@ local CATEGORY_TEXT = {
 	["obtain"]	= L["Obtain"],
 	["binding"]	= L["Binding"],
 	["item"]	= L["Item"],
+	["quality"]	= _G.QUALITY,
 	["player"]	= _G.ROLE,
 	["rep"]		= _G.REPUTATION,
 	["misc"]	= _G.MISCELLANEOUS
@@ -1601,6 +1602,7 @@ do
 		["obtain"]	= L["FILTERING_OBTAIN_DESC"],
 		["binding"]	= L["FILTERING_BINDING_DESC"],
 		["item"]	= L["FILTERING_ITEM_DESC"],
+		["quality"]	= L["FILTERING_QUALITY_DESC"],
 		["player"]	= L["FILTERING_PLAYERTYPE_DESC"],
 		["rep"]		= L["FILTERING_REP_DESC"],
 		["misc"]	= L["FILTERING_MISC_DESC"]
@@ -1647,7 +1649,7 @@ do
 				MainPanel.filter_menu.texture:SetTexture([[Interface\Addons\AckisRecipeList\img\fly_2col]])
 				MainPanel.filter_menu.texture:SetAllPoints(MainPanel.filter_menu)
 				MainPanel.filter_menu.texture:SetTexCoord(0, (FILTERMENU_DOUBLE_WIDTH/256), 0, (FILTERMENU_HEIGHT/512))
-			elseif panel == "player" or panel == "rep" then
+			elseif panel == "player" or panel == "rep" or panel == "quality" then
 				MainPanel.filter_menu.texture:ClearAllPoints()
 				MainPanel.filter_menu:SetWidth(FILTERMENU_SINGLE_WIDTH)
 				MainPanel.filter_menu.texture:SetTexture([[Interface\Addons\AckisRecipeList\img\fly_1col]])
@@ -1662,12 +1664,12 @@ do
 		end
 	end

-	function CreateFilterMenuButton(bTex, category)
-		local ExpTextureSize = 34
+	function CreateFilterMenuButton(button_texture, category)
+		local button_size = 30
 		local cButton = CreateFrame("CheckButton", nil, MainPanel)

-		cButton:SetWidth(ExpTextureSize)
-		cButton:SetHeight(ExpTextureSize)
+		cButton:SetWidth(button_size)
+		cButton:SetHeight(button_size)
 		cButton:SetScript("OnClick",
 				  function(self, button, down)
 					  ToggleFilterMenu(category)
@@ -1675,13 +1677,13 @@ do

 		local bgTex = cButton:CreateTexture(nil, "BACKGROUND")
 		bgTex:SetTexture('Interface/SpellBook/UI-Spellbook-SpellBackground')
-		bgTex:SetHeight(ExpTextureSize + 6)
-		bgTex:SetWidth(ExpTextureSize + 4)
+		bgTex:SetHeight(button_size + 6)
+		bgTex:SetWidth(button_size + 4)
 		bgTex:SetTexCoord(0, (43/64), 0, (43/64))
 		bgTex:SetPoint("CENTER", cButton, "CENTER", 0, 0)

 		local iconTex = cButton:CreateTexture(nil, "BORDER")
-		iconTex:SetTexture('Interface/Icons/' .. bTex)
+		iconTex:SetTexture('Interface/Icons/' .. button_texture)
 		iconTex:SetAllPoints(cButton)

 		local pushedTexture = cButton:CreateTexture(nil, "ARTWORK")
@@ -1719,7 +1721,7 @@ do
 end	-- do

 MainPanel.menu_toggle_general = CreateFilterMenuButton("INV_Misc_Note_06", "general")
-MainPanel.menu_toggle_general:SetPoint("TOPRIGHT", MainPanel.filter_reset, "BOTTOMLEFT", -7, -23)
+MainPanel.menu_toggle_general:SetPoint("TOPRIGHT", MainPanel.filter_reset, "BOTTOMLEFT", -9, -18)

 MainPanel.menu_toggle_obtain = CreateFilterMenuButton("INV_Misc_Bag_07", "obtain")
 MainPanel.menu_toggle_obtain:SetPoint("TOPLEFT", MainPanel.menu_toggle_general, "BOTTOMLEFT", 0, -8)
@@ -1730,8 +1732,11 @@ MainPanel.menu_toggle_binding:SetPoint("TOPLEFT", MainPanel.menu_toggle_obtain,
 MainPanel.menu_toggle_item = CreateFilterMenuButton("INV_Misc_EngGizmos_19", "item")
 MainPanel.menu_toggle_item:SetPoint("TOPLEFT", MainPanel.menu_toggle_binding, "BOTTOMLEFT", -0, -8)

+MainPanel.menu_toggle_quality = CreateFilterMenuButton("INV_Enchant_VoidCrystal", "quality")
+MainPanel.menu_toggle_quality:SetPoint("TOPLEFT", MainPanel.menu_toggle_item, "BOTTOMLEFT", -0, -8)
+
 MainPanel.menu_toggle_player = CreateFilterMenuButton("INV_Misc_GroupLooking", "player")
-MainPanel.menu_toggle_player:SetPoint("TOPLEFT", MainPanel.menu_toggle_item, "BOTTOMLEFT", -0, -8)
+MainPanel.menu_toggle_player:SetPoint("TOPLEFT", MainPanel.menu_toggle_quality, "BOTTOMLEFT", -0, -8)

 MainPanel.menu_toggle_rep = CreateFilterMenuButton("Achievement_Reputation_01", "rep")
 MainPanel.menu_toggle_rep:SetPoint("TOPLEFT", MainPanel.menu_toggle_player, "BOTTOMLEFT", -0, -8)
@@ -2187,6 +2192,37 @@ InitializeCheckButton(MainPanel.filter_menu.item.gun, MainPanel.filter_menu.item
 MainPanel.filter_menu.item.gun.text:SetText(L["Gun"])

 -------------------------------------------------------------------------------
+-- Create MainPanel.filter_menu.quality, and set its scripts.
+-------------------------------------------------------------------------------
+MainPanel.filter_menu.quality = CreateFrame("Frame", nil, MainPanel.filter_menu)
+MainPanel.filter_menu.quality:SetWidth(FILTERMENU_SMALL)
+MainPanel.filter_menu.quality:SetHeight(280)
+MainPanel.filter_menu.quality:EnableMouse(true)
+MainPanel.filter_menu.quality:EnableKeyboard(true)
+MainPanel.filter_menu.quality:SetMovable(false)
+MainPanel.filter_menu.quality:SetPoint("TOPLEFT", MainPanel.filter_menu, "TOPLEFT", 17, -16)
+MainPanel.filter_menu.quality:Hide()
+
+-------------------------------------------------------------------------------
+-- Create the CheckButtons for MainPanel.filter_menu.quality
+-------------------------------------------------------------------------------
+MainPanel.filter_menu.quality.common = CreateFrame("CheckButton", nil, MainPanel.filter_menu.quality)
+InitializeCheckButton(MainPanel.filter_menu.quality.common, MainPanel.filter_menu.quality, string.format(L["QUALITY_GENERAL_DESC"], _G.ITEM_QUALITY1_DESC), "common", 1, 1, 0)
+MainPanel.filter_menu.quality.common.text:SetText(_G.ITEM_QUALITY1_DESC)
+
+MainPanel.filter_menu.quality.uncommon = CreateFrame("CheckButton", nil, MainPanel.filter_menu.quality)
+InitializeCheckButton(MainPanel.filter_menu.quality.uncommon, MainPanel.filter_menu.quality, string.format(L["QUALITY_GENERAL_DESC"], _G.ITEM_QUALITY2_DESC), "uncommon", 2, 1, 0)
+MainPanel.filter_menu.quality.uncommon.text:SetText(_G.ITEM_QUALITY2_DESC)
+
+MainPanel.filter_menu.quality.rare = CreateFrame("CheckButton", nil, MainPanel.filter_menu.quality)
+InitializeCheckButton(MainPanel.filter_menu.quality.rare, MainPanel.filter_menu.quality, string.format(L["QUALITY_GENERAL_DESC"], _G.ITEM_QUALITY3_DESC), "rare", 3, 1, 0)
+MainPanel.filter_menu.quality.rare.text:SetText(_G.ITEM_QUALITY3_DESC)
+
+MainPanel.filter_menu.quality.epic = CreateFrame("CheckButton", nil, MainPanel.filter_menu.quality)
+InitializeCheckButton(MainPanel.filter_menu.quality.epic, MainPanel.filter_menu.quality, string.format(L["QUALITY_GENERAL_DESC"], _G.ITEM_QUALITY4_DESC), "epic", 4, 1, 0)
+MainPanel.filter_menu.quality.epic.text:SetText(_G.ITEM_QUALITY4_DESC)
+
+-------------------------------------------------------------------------------
 -- Create MainPanel.filter_menu.player, and set its scripts.
 -------------------------------------------------------------------------------
 MainPanel.filter_menu.player = CreateFrame("Frame", nil, MainPanel.filter_menu)
@@ -4068,6 +4104,13 @@ function addon:InitializeFrame()
 		["ammo"]		= { cb = filter_menu.item.ammo,				svroot = filterdb.item.weapon },
 		["gun"]			= { cb = filter_menu.item.gun,				svroot = filterdb.item.weapon },
 		------------------------------------------------------------------------------------------------
+		-- Quality Options
+		------------------------------------------------------------------------------------------------
+		["common"]		= { cb = filter_menu.quality.common,			svroot = filterdb.quality },
+		["uncommon"]		= { cb = filter_menu.quality.uncommon,			svroot = filterdb.quality },
+		["rare"]		= { cb = filter_menu.quality.rare,			svroot = filterdb.quality },
+		["epic"]		= { cb = filter_menu.quality.epic,			svroot = filterdb.quality },
+		------------------------------------------------------------------------------------------------
 		-- Role Options
 		------------------------------------------------------------------------------------------------
 		["tank"]		= { cb = filter_menu.player.tank,			svroot = filterdb.player },
diff --git a/Locales/devel-enUS.lua b/Locales/devel-enUS.lua
index 2821246..d4dd88b 100644
--- a/Locales/devel-enUS.lua
+++ b/Locales/devel-enUS.lua
@@ -325,6 +325,10 @@ L["AMMO_DESC"]				= "Recipes that make ammunition should be included in the scan
 L["Gun"]					= true
 L["GUN_DESC"]				= "Recipes that make guns should be included in the scan."

+-- Item Quality Filtering UI Elements and their associated descriptions
+L["FILTERING_QUALITY_DESC"]		= "Configuration for which recipe quality types are included in the scan."
+L["QUALITY_GENERAL_DESC"]		= "Include %s quality recipe items in the scan."
+
 -- Player Type Filtering UI Elements and their associated descriptions
 L["MELEE_DPS_DESC"]			= "Recipes that are used by melee dps players should be included in the scan."
 L["TANKS_DESC"]				= "Recipes that are used by tank players should be included in the scan."