From 4099ae293872d1c652c4405a4a6b296ba9906906 Mon Sep 17 00:00:00 2001 From: Ackis Date: Tue, 25 Nov 2008 20:12:33 +0000 Subject: [PATCH] Move tooltip function stuff --- ARLFrame.lua | 2276 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 1138 insertions(+), 1138 deletions(-) diff --git a/ARLFrame.lua b/ARLFrame.lua index b221b3b..50909fc 100644 --- a/ARLFrame.lua +++ b/ARLFrame.lua @@ -410,390 +410,382 @@ end -- Expected result: -- Input: -- Output: --- This sets the tooltip on the button during a recipelist update -local function SetRecipeButtonTooltip(bIndex) +local function GenerateTooltipContent(owner, rIndex, playerFaction, exclude) - local pButton = addon.PlusListButton[bIndex] - local rButton = addon.RecipeListButton[bIndex] - local dStringIndex = rButton.sI - local rIndex = DisplayStrings[dStringIndex].sID - local playerFaction = playerData.playerFaction - local exclude = addon.db.profile.exclusionlist + local clr1, clr2 = "", "" - pButton:SetScript("OnEnter", - function (pButton) - GenerateTooltipContent(pButton, rIndex, playerFaction, exclude) - end - ) + arlTooltip:ClearLines() + arlTooltip:SetOwner(owner, "ANCHOR_RIGHT") + gttAdd(0, 1, 0, 0, recipeDB[rIndex]["Name"], addon:hexcolor("HIGH")) - pButton:SetScript("OnLeave", - function() - arlTooltip:Hide() - arlTooltip2:Hide() - end - ) + -- check if the recipe is excluded + if (exclude[rIndex] == true) then - rButton:SetScript("OnEnter", - function (rButton) - GenerateTooltipContent(rButton, rIndex, playerFaction, exclude) - end - ) + clr1 = addon:hexcolor("RED") + gttAdd(0, -1, 1, 0, L["RECIPE_EXCLUDED"], clr1) - rButton:SetScript("OnLeave", - function() - arlTooltip:Hide() - arlTooltip2:Hide() - end - ) + end -end + -- Add in skill level requirement, colored correctly + clr1 = addon:hexcolor("NORMAL") + local recipeSkill = recipeDB[rIndex]["Level"] + local playerSkill = playerData.playerProfessionLevel --- Description: --- Expected result: --- Input: --- Output: + if (recipeSkill > playerSkill) then -local function CheckDisplayFaction(filterDB, faction) + clr2 = addon:hexcolor("RED") - if (filterDB.general.faction ~= true) then + elseif ((playerSkill - recipeSkill) < 20) then - if ((faction == BFAC[myFaction]) or (faction == BFAC["Neutral"]) or (faction == nil)) then + clr2 = addon:hexcolor("ORANGE") - return true - else + elseif ((playerSkill - recipeSkill) < 30) then - return false + clr2 = addon:hexcolor("YELLOW") - end + elseif ((playerSkill - recipeSkill) < 40) then + + clr2 = addon:hexcolor("GREEN") else - return true + clr2 = addon:hexcolor("MIDGREY") end -end + gttAdd(0, -1, 0, 0, L["Required Skill"] .. " :", clr1, recipeDB[rIndex]["Level"], clr2) --- Description: --- Expected result: --- Input: --- Output: --- Scrollframe update stuff + -- spacer + gttAdd(0, 0, 0, 0, ".", addon:hexcolor("BLACK")) -local function RecipeList_Update() + -- Binding info + clr1 = addon:hexcolor("NORMAL") - -- Clear out the current buttons - for i = 1, maxVisibleRecipes do + if (recipeDB[rIndex]["Flags"][36]) then - addon.RecipeListButton[i]:SetText("") - addon.RecipeListButton[i].sI = 0 - addon.PlusListButton[i]:Hide() - ClearRecipeButtonTooltip(i) + gttAdd(0, -1, 1, 0, L["BOEFilter"], clr1) end - local entries = #DisplayStrings + if (recipeDB[rIndex]["Flags"][37]) then - FauxScrollFrame_Update(ARL_RecipeScrollFrame, entries, maxVisibleRecipes, 16) + gttAdd(0, -1, 1, 0, L["BOPFilter"], clr1) - if (entries > 0) then + end - -- now fill in our buttons - local listOffset = FauxScrollFrame_GetOffset(ARL_RecipeScrollFrame) - local buttonIndex = 1 - local stringsIndex = buttonIndex + listOffset + if (recipeDB[rIndex]["Flags"][38]) then - local stayInLoop = true + gttAdd(0, -1, 1, 0, L["BOAFilter"], clr1) - while (stayInLoop == true) do + end - if (DisplayStrings[stringsIndex].IsRecipe) then + if (recipeDB[rIndex]["Flags"][40]) then - -- display the + symbol - addon.PlusListButton[buttonIndex]:Show() + gttAdd(0, -1, 1, 0, L["RecipeBOEFilter"], clr1) - -- Is it expanded or not? - if (DisplayStrings[stringsIndex].IsExpanded) then + end - addon.PlusListButton[buttonIndex]:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-Up") - addon.PlusListButton[buttonIndex]:SetPushedTexture("Interface\\Buttons\\UI-MinusButton-Down") - addon.PlusListButton[buttonIndex]:SetHighlightTexture("Interface\\Buttons\\UI-PlusButton-Hilight") - addon.PlusListButton[buttonIndex]:SetDisabledTexture("Interface\\Buttons\\UI-MinusButton-Disabled") + if (recipeDB[rIndex]["Flags"][41]) then - else + gttAdd(0, -1, 1, 0, L["RecipeBOPFilter"], clr1) - addon.PlusListButton[buttonIndex]:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-Up") - addon.PlusListButton[buttonIndex]:SetPushedTexture("Interface\\Buttons\\UI-PlusButton-Down") - addon.PlusListButton[buttonIndex]:SetHighlightTexture("Interface\\Buttons\\UI-PlusButton-Hilight") - addon.PlusListButton[buttonIndex]:SetDisabledTexture("Interface\\Buttons\\UI-PlusButton-Disabled") + end - end + if (recipeDB[rIndex]["Flags"][42]) then - else + gttAdd(0, -1, 1, 0, L["RecipeBOAFilter"], clr1) - addon.PlusListButton[buttonIndex]:Hide() + end - end + -- spacer + gttAdd(0, 0, 0, 0, ".", addon:hexcolor("BLACK")) - addon.RecipeListButton[buttonIndex]:SetText(DisplayStrings[stringsIndex].String) - addon.RecipeListButton[buttonIndex].sI = stringsIndex + -- obtain info + gttAdd(0, -1, 0, 0, L["Obtained From"] .. " : ", addon:hexcolor("NORMAL")) - -- Set the tooltip on the button - SetRecipeButtonTooltip(buttonIndex) + -- loop through acquire methods, display each + for k, v in pairs(recipeDB[rIndex]["Acquire"]) do - buttonIndex = buttonIndex + 1 - stringsIndex = stringsIndex + 1 + -- Trainer + if (v["Type"] == 1) then - if ((buttonIndex > maxVisibleRecipes) or (stringsIndex > entries)) then + -- Trainer: TrainerName + -- TrainerZone TrainerCoords + local trnr = trainerDB[v["ID"]] + local cStr = "" + -- Do we want to display this trainer? + local displaytt = false - stayInLoop = false + clr1 = addon:hexcolor("TRAINER") - end + if (trnr["Faction"] == BFAC["Horde"]) then - end + clr2 = addon:hexcolor("HORDE") - -- Entries are 0 here, so we have 0 to display - else + if (playerFaction == BFAC["Horde"]) then - -- If the recipe total is at 0, it means we have not scanned the profession yet - if (playerData.recipes_total == 0) then + displaytt = true - StaticPopup_Show("ARL_NOTSCANNED") + end - -- We know all the recipes - elseif (playerData.recipes_known == playerData.recipes_total) then + elseif (trnr["Faction"] == BFAC["Alliance"]) then - StaticPopup_Show("ARL_ALLKNOWN") + clr2 = addon:hexcolor("ALLIANCE") - -- Our filters are actually filtering something - elseif ((playerData.recipes_total_filtered - playerData.recipes_known_filtered) ~= 0) then + if (playerFaction == BFAC["Alliance"]) then - StaticPopup_Show("ARL_ALLFILTERED") + displaytt = true - -- Our exclusion list is preventing something from being displayed - elseif (playerData.excluded_recipes_unknown ~= 0) then + end - StaticPopup_Show("ARL_ALLEXCLUDED") + else - else + clr2 = addon:hexcolor("NEUTRAL") - addon:Print(L["NO_DISPLAY"]) + end - end + if (displaytt) then - end + -- Add the trainer information to the tooltip + gttAdd(0, -2, 0, 0, L["Trainer"], clr1, trnr["Name"], clr2) - -- Make sure our apply button gets disabled - ApplyFilterState = nil - ARL_ApplyButton:SetNormalFontObject("GameFontDisableSmall") - ARL_ApplyButton:Disable() - -end + -- If we have a coordinate, add the coordinates to the tooltop + if (trnr["Coordx"] ~= 0) and (trnr["Coordy"] ~= 0) then --- Under various conditions, I'm going to have to redisplay my recipe list --- This could happen because a filter changes, a new profession is chosen, or --- a new search occurred. Use this function to do all the dirty work + cStr = "(" .. trnr["Coordx"] .. ", " .. trnr["Coordy"] .. ")" --- Description: --- Expected result: --- Input: --- Output: + end -local function ReDisplay() + clr1 = addon:hexcolor("NORMAL") + clr2 = addon:hexcolor("HIGH") + gttAdd(1, -2, 1, 0, trnr["Location"], clr1, cStr, clr2) - addon:UpdateFilters(recipeDB, allSpecTable, playerData) - sortedRecipeIndex = addon:SortMissingRecipes(recipeDB) + end - if (not addon.db.profile.ignoreexclusionlist) then + -- Vendor + elseif (v["Type"] == 2) then - addon:GetExclusions(recipeDB) + -- Vendor: VendorName + -- VendorZone VendorCoords + local vndr = vendorDB[v["ID"]] + local cStr = "" - end + if (vndr["Coordx"] ~= 0) and (vndr["Coordy"] ~= 0) then - initDisplayStrings() + cStr = "(" .. vndr["Coordx"] .. ", " .. vndr["Coordy"] .. ")" - SetProgressBar(playerData) + end - -- Make sure our expand all button is set to expandall - ARL_ExpandButton:SetText(L["EXPANDALL"]) - addon:TooltipDisplay(ARL_ExpandButton, L["EXPANDALL_DESC"]) + clr1 = addon:hexcolor("VENDOR") - -- And update our scrollframe - RecipeList_Update() + if (vndr["Faction"] == BFAC["Horde"]) then + clr2 = addon:hexcolor("HORDE") + elseif (vndr["Faction"] == BFAC["Alliance"]) then + clr2 = addon:hexcolor("ALLIANCE") + else + clr2 = addon:hexcolor("NEUTRAL") + end -end + gttAdd(0, -1, 0, 0, L["Vendor"], clr1, vndr["Name"], clr2) + clr1 = addon:hexcolor("NORMAL") + clr2 = addon:hexcolor("HIGH") + gttAdd(1, -2, 1, 0, vndr["Location"], clr1, cStr, clr2) --- Description: --- Expected result: --- Input: --- Output: + -- Mob Drop + elseif (v["Type"] == 3) then -function addon:CreateScanButton() + -- Mob Drop: Mob Name + -- MobZone MobCoords + local mob = mobDB[v["ID"]] + local cStr = "" - -- Create the scan button - if (not addon.ScanButton) then - - addon.ScanButton = CreateFrame("Button","addon.ScanButton",UIParent,"UIPanelButtonTemplate") + if (mob["Coordx"] ~= 0) and (mob["Coordy"] ~= 0) then - end + cStr = "(" .. mob["Coordx"] .. ", " .. mob["Coordy"] .. ")" - -- Add to Skillet interface - if (Skillet and Skillet:IsActive()) then + end - addon.ScanButton:SetParent(SkilletFrame) - addon.ScanButton:Show() - Skillet:AddButtonToTradeskillWindow(addon.ScanButton) - addon.ScanButton:SetWidth(80) + clr1 = addon:hexcolor("MOBDROP") + clr2 = addon:hexcolor("HORDE") + gttAdd(0, -1, 0, 0, L["Mob Drop"], clr1, mob["Name"], clr2) + clr1 = addon:hexcolor("NORMAL") + clr2 = addon:hexcolor("HIGH") + gttAdd(1, -2, 1, 0, mob["Location"], clr1, cStr, clr2) - end + -- Quest + elseif (v["Type"] == 4) then - -- Set some of the common button properties - addon.ScanButton:SetHeight(20) - addon.ScanButton:RegisterForClicks("LeftButtonUp") - addon.ScanButton:SetScript("OnClick", - function() - addon:ToggleFrame() - end - ) + -- Quest: QuestName + -- QuestZone QuestCoords + local qst = questDB[v["ID"]] - addon.ScanButton:SetScript("OnEnter", - function(this) - GameTooltip_SetDefaultAnchor(GameTooltip, this) - GameTooltip:SetText(L["SCAN_RECIPES_DESC"]) - GameTooltip:Show() - end - ) + if (qst ~= nil) then - addon.ScanButton:SetScript("OnLeave", - function() - GameTooltip:Hide() - end - ) + local cStr = "" - addon.ScanButton:SetText(L["Scan"]) + if (qst["Coordx"] ~= 0) and (qst["Coordy"] ~= 0) then - local buttonparent = addon.ScanButton:GetParent() - local framelevel = buttonparent:GetFrameLevel() - local framestrata = buttonparent:GetFrameStrata() + cStr = "(" .. qst["Coordx"] .. ", " .. qst["Coordy"] .. ")" - -- Set the frame level of the button to be 1 deeper than its parent - addon.ScanButton:SetFrameLevel(framelevel + 1) - addon.ScanButton:SetFrameStrata(framestrata) + end - addon.ScanButton:Enable() + clr1 = addon:hexcolor("QUEST") -end + if (qst["Faction"] == BFAC["Horde"]) then + clr2 = addon:hexcolor("HORDE") + elseif (qst["Faction"] == BFAC["Alliance"]) then + clr2 = addon:hexcolor("ALLIANCE") + else + clr2 = addon:hexcolor("NEUTRAL") + end --- Description: --- Expected result: --- Input: --- Output: + gttAdd(0, -1, 0, 0, L["Quest"], clr1, qst["Name"], clr2) + clr1 = addon:hexcolor("NORMAL") + clr2 = addon:hexcolor("HIGH") + gttAdd(1, -2, 1, 0, qst["Location"], clr1, cStr, clr2) -function addon:ShowScanButton() + end - -- Anchor to ATSW - if (ATSWFrame) then + -- Seasonal + elseif (v["Type"] == 5) then - addon.ScanButton:SetParent(ATSWFrame) - addon.ScanButton:ClearAllPoints() - addon.ScanButton:SetPoint("RIGHT", ATSWOptionsButton, "LEFT", 0, 0) - addon.ScanButton:SetHeight(ATSWOptionsButton:GetHeight()) - addon.ScanButton:SetWidth(90) + -- Seasonal: SeasonEventName + local ssnname = seasonDB[v["ID"]]["Name"] - -- Anchor to trade window - else + clr1 = addon:hexcolor("SEASON") + gttAdd(0, -1, 0, 0, L["Seasonal"], clr1, ssnname, clr1) - addon.ScanButton:SetParent(TradeSkillFrame) - addon.ScanButton:ClearAllPoints() - addon.ScanButton:SetPoint("RIGHT",TradeSkillFrameCloseButton,"LEFT",4,0) - addon.ScanButton:SetWidth(addon.ScanButton:GetTextWidth() + 10) + -- Reputation + elseif (v["Type"] == 6) then - end + -- Reputation: Faction + -- FactionLevel RepVendor + -- RepVendorZone RepVendorCoords - addon.ScanButton:Show() + local repfac = repDB[v["ID"]] + local repname = repfac["Name"] -- name + local rplvl = v["RepLevel"] + local repvndr = vendorDB[v["RepVendor"]] + local cStr = "" -end + if (repvndr["Coordx"] ~= 0) and (repvndr["Coordy"] ~= 0) then --- Description: --- Expected result: --- Input: --- Output: + cStr = "(" .. repvndr["Coordx"] .. ", " .. repvndr["Coordy"] .. ")" -function addon:TooltipDisplay(this, textLabel) + end + + clr1 = addon:hexcolor("REP") + clr2 = addon:hexcolor("NORMAL") + gttAdd(0, -1, 0, 0, L["Reputation"], clr1, repname, clr2) - this:SetScript("OnEnter", - function (this) - GameTooltip_SetDefaultAnchor(GameTooltip, this) - GameTooltip:SetText(textLabel, HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b) - GameTooltip:Show() + local rStr = "" + if (rplvl == 0) then + rStr = BFAC["Neutral"] + clr1 = addon:hexcolor("NEUTRAL") + elseif (rplvl == 1) then + rStr = BFAC["Neutral"] + clr1 = addon:hexcolor("FRIENDLY") + elseif (rplvl == 2) then + rStr = BFAC["Honored"] + clr1 = addon:hexcolor("HONORED") + elseif (rplvl == 3) then + rStr = BFAC["Revered"] + clr1 = addon:hexcolor("REVERED") + else + rStr = BFAC["Exalted"] + clr1 = addon:hexcolor("EXALTED") end - ) - this:SetScript("OnLeave", - function(this) - GameTooltip:Hide() + if (repvndr["Faction"] == BFAC["Horde"]) then + clr2 = addon:hexcolor("HORDE") + elseif (repvndr["Faction"] == BFAC["Alliance"]) then + clr2 = addon:hexcolor("ALLIANCE") + else + clr2 = addon:hexcolor("NEUTRAL") end - ) -end + gttAdd(1, -2, 0, 0, rStr, clr1, repvndr["Name"], clr2) + clr1 = addon:hexcolor("NORMAL") + clr2 = addon:hexcolor("HIGH") + gttAdd(2, -2, 1, 0, repvndr["Location"], clr1, cStr, clr2) --- Description: --- Expected result: --- Input: --- Output: + -- World Drop + elseif (v["Type"] == 7) then -function addon.numFilters() + -- World Drop RarityLevel + if (v["ID"] == 1) then - -- IMPORTANT: If the number of filters we're maintaining changes, you'll need to change the FilterValueMap - -- at the end (of CreateFrame), as well as the following index value: - local MaxFilters = 87 + clr1 = addon:hexcolor("COMMON") - local total = 0 - local active = 0 + elseif (v["ID"] == 2) then - for i = 1, MaxFilters do - if ((FilterValueMap[i].svroot == "disabled") or - (FilterValueMap[i].svroot == "special case")) then - -- ignore these filters in the totals - elseif (FilterValueMap[i].svroot[ FilterValueMap[i].svval ] == true) then - active = active + 1 - total = total + 1 + clr1 = addon:hexcolor("UNCOMMON") + + elseif (v["ID"] == 3) then + + clr1 = addon:hexcolor("RARE") + + elseif (v["ID"] == 4) then + + clr1 = addon:hexcolor("EPIC") + + else + + clr1 = addon:hexcolor("NORMAL") + + end + + gttAdd(0, -1, 0, 0, L["World Drop"], clr1) + + -- Custom entry + elseif (v["Type"] == 8) then + + -- Seasonal: SeasonEventName + local customname = customDB[v["ID"]]["Name"] + + clr1 = addon:hexcolor("NORMAL") + gttAdd(0, -1, 0, 0, customname, clr1) + + -- Unhandled else - total = total + 1 + + clr1 = addon:hexcolor("NORMAL") + gttAdd(0, -1, 0, 0, L["Unhandled Recipe"], clr1) + end - end - return active, total -end + end --- Description: --- Expected result: --- Input: --- Output: + -- Spacer + gttAdd(0, 0, 0, 0, ".", addon:hexcolor("BLACK")) -function addon.resetTitle() + clr1 = addon:hexcolor("NORMAL") - -- reset the frame title line - local myTitle = "" - local addonversion = GetAddOnMetadata("AckisRecipeList", "Version") + gttAdd(0, -1, 0, 0, L["ALT_CLICK"], clr1) + gttAdd(0, -1, 0, 1, L["CTRL_CLICK"], clr1) + gttAdd(0, -1, 0, 1, L["SHIFT_CLICK"], clr1) - if (addon.Frame._Expanded == true) then + local spelllink = recipeDB[rIndex]["RecipeLink"] - local aFil, tFil = addon.numFilters() + if (spelllink) then - myTitle = "ARL (v." .. addonversion .. ") - " .. currentProfession .. - " (" .. aFil .. "/" .. tFil .. " " .. L["Filters"] .. ")" + arlTooltip2:SetOwner(arlTooltip, "ANCHOR_NONE") +-- arlTooltip2:ClearAllPoints() + --arlTooltip2:SetPoint("TOPLEFT", arlTooltip, "TOPRIGHT") + arlTooltip2:SetPoint("TOPRIGHT", arlTooltip, "TOPLEFT") + arlTooltip2:SetHyperlink(spelllink) + arlTooltip2:Show() else - myTitle = "ARL (v." .. addonversion .. ") - " .. currentProfession + arlTooltip2:Hide() end - addon.Frame.HeadingText:SetText(addon:Normal(myTitle)) + arlTooltip:Show() end @@ -801,210 +793,68 @@ end -- Expected result: -- Input: -- Output: +-- This sets the tooltip on the button during a recipelist update -function addon.filterSwitch(val) - - -- This function is the all-encompassing checkbox handler for the ZJGUI - local armordb = addon.db.profile.filters.item.armor - local weapondb = addon.db.profile.filters.item.weapon +local function SetRecipeButtonTooltip(bIndex) - -- Special cases first, then general case - if (val == 19) then - -- Armor "All" checkbox - if (ARL_ArmorAllCB:GetChecked()) then - armordb.cloth = true - armordb.leather = true - armordb.mail = true - armordb.plate = true - armordb.cloak = true - armordb.necklace = true - armordb.ring = true - armordb.trinket = true - armordb.shield = true - ARL_ArmorClothCB:SetChecked(true) - ARL_ArmorLeatherCB:SetChecked(true) - ARL_ArmorMailCB:SetChecked(true) - ARL_ArmorPlateCB:SetChecked(true) - ARL_ArmorCloakCB:SetChecked(true) - ARL_ArmorNecklaceCB:SetChecked(true) - ARL_ArmorRingCB:SetChecked(true) - ARL_ArmorTrinketCB:SetChecked(true) - ARL_ArmorShieldCB:SetChecked(true) - ARL_ArmorNoneCB:SetChecked(false) - end - elseif (val == 20) then - -- Armor "None" checkbox - if (ARL_ArmorNoneCB:GetChecked()) then - armordb.cloth = false - armordb.leather = false - armordb.mail = false - armordb.plate = false - armordb.cloak = false - armordb.necklace = false - armordb.ring = false - armordb.trinket = false - armordb.shield = false - ARL_ArmorClothCB:SetChecked(false) - ARL_ArmorLeatherCB:SetChecked(false) - ARL_ArmorMailCB:SetChecked(false) - ARL_ArmorPlateCB:SetChecked(false) - ARL_ArmorCloakCB:SetChecked(false) - ARL_ArmorNecklaceCB:SetChecked(false) - ARL_ArmorRingCB:SetChecked(false) - ARL_ArmorTrinketCB:SetChecked(false) - ARL_ArmorShieldCB:SetChecked(false) - ARL_ArmorAllCB:SetChecked(false) - end - elseif ((val == 21) or (val == 22) or (val == 23) or (val == 24) or - (val == 64) or (val == 65) or (val == 66) or (val == 67) or (val == 85)) then - -- in this case, we need to check if the checkbox we just hit either - -- makes everthing checked, or everything empty. If so, we check the All/None - -- checkboxes - if (FilterValueMap[val].cb:GetChecked()) then - FilterValueMap[val].svroot[ FilterValueMap[val].svval ] = true - if ((armordb.cloth == true) and (armordb.leather == true) and - (armordb.mail == true) and (armordb.plate == true) and - (armordb.cloak == true) and (armordb.necklace == true) and - (armordb.ring == true) and (armordb.trinket == true) and - (armordb.shield == true)) then - ARL_ArmorAllCB:SetChecked(true) - end - ARL_ArmorNoneCB:SetChecked(false) - else - FilterValueMap[val].svroot[ FilterValueMap[val].svval ] = false - if ((armordb.cloth == false) and (armordb.leather == false) and - (armordb.mail == false) and (armordb.plate == false) and - (armordb.cloak == false) and (armordb.necklace == false) and - (armordb.ring == false) and (armordb.trinket == false) and - (armordb.shield == false)) then - ARL_ArmorNoneCB:SetChecked(true) - end - ARL_ArmorAllCB:SetChecked(false) - end - elseif (val == 25) then - -- Weapon "All" special case - if (ARL_WeaponAllCB:GetChecked()) then - weapondb.onehand = true - weapondb.twohand = true - weapondb.dagger = true - weapondb.axe = true - weapondb.mace = true - weapondb.sword = true - weapondb.polearm = true - weapondb.wand = true - weapondb.thrown = true - weapondb.ammo = true - weapondb.fist = true - ARL_Weapon1HCB:SetChecked(true) - ARL_Weapon2HCB:SetChecked(true) - ARL_WeaponDaggerCB:SetChecked(true) - ARL_WeaponAxeCB:SetChecked(true) - ARL_WeaponMaceCB:SetChecked(true) - ARL_WeaponSwordCB:SetChecked(true) - ARL_WeaponPolearmCB:SetChecked(true) - ARL_WeaponWandCB:SetChecked(true) - ARL_WeaponThrownCB:SetChecked(true) - ARL_WeaponAmmoCB:SetChecked(true) - ARL_WeaponFistCB:SetChecked(true) - ARL_WeaponNoneCB:SetChecked(false) - end - elseif (val == 26) then - -- Weapon "None" special case - if (ARL_WeaponNoneCB:GetChecked()) then - weapondb.onehand = false - weapondb.twohand = false - weapondb.dagger = false - weapondb.axe = false - weapondb.mace = false - weapondb.sword = false - weapondb.polearm = false - weapondb.wand = false - weapondb.thrown = false - weapondb.ammo = false - weapondb.fist = false - ARL_Weapon1HCB:SetChecked(false) - ARL_Weapon2HCB:SetChecked(false) - ARL_WeaponDaggerCB:SetChecked(false) - ARL_WeaponAxeCB:SetChecked(false) - ARL_WeaponMaceCB:SetChecked(false) - ARL_WeaponSwordCB:SetChecked(false) - ARL_WeaponPolearmCB:SetChecked(false) - ARL_WeaponWandCB:SetChecked(false) - ARL_WeaponThrownCB:SetChecked(false) - ARL_WeaponAmmoCB:SetChecked(false) - ARL_WeaponFistCB:SetChecked(false) - ARL_WeaponAllCB:SetChecked(false) - end - elseif ((val == 34) or (val == 36) or (val == 37)) then - -- Weapon disable case ... there's really no way to reach this code - elseif ((val == 27) or (val == 28) or (val == 29) or (val == 30) or (val == 31) or - (val == 32) or (val == 33) or (val == 68) or (val == 35) or (val == 38) or (val == 84)) then - -- we've clicked on a weapon thinger. If all of them are either checked or unchecked, - -- we should automagically check the "All" or "None" checkbox - if (FilterValueMap[val].cb:GetChecked()) then - FilterValueMap[val].svroot[ FilterValueMap[val].svval ] = true - if ((weapondb.onehand == true) and (weapondb.twohand == true) and - (weapondb.dagger == true) and (weapondb.axe == true) and - (weapondb.mace == true) and (weapondb.sword == true) and - (weapondb.polearm == true) and (weapondb.wand == true) and - (weapondb.thrown == true) and (weapondb.ammo == true) and - (weapondb.fist == true)) then - ARL_WeaponAllCB:SetChecked(true) + local pButton = addon.PlusListButton[bIndex] + local rButton = addon.RecipeListButton[bIndex] + local dStringIndex = rButton.sI + local rIndex = DisplayStrings[dStringIndex].sID + local playerFaction = playerData.playerFaction + local exclude = addon.db.profile.exclusionlist + + pButton:SetScript("OnEnter", + function (pButton) + GenerateTooltipContent(pButton, rIndex, playerFaction, exclude) end - ARL_WeaponNoneCB:SetChecked(false) - else - FilterValueMap[val].svroot[ FilterValueMap[val].svval ] = false - if ((weapondb.onehand == false) and (weapondb.twohand == false) and - (weapondb.dagger == false) and (weapondb.axe == false) and - (weapondb.mace == false) and (weapondb.sword == false) and - (weapondb.polearm == false) and (weapondb.wand == false) and - (weapondb.thrown == false) and (weapondb.ammo == false) and - (weapondb.fist == false)) then - ARL_WeaponNoneCB:SetChecked(true) + ) + + pButton:SetScript("OnLeave", + function() + arlTooltip:Hide() + arlTooltip2:Hide() end - ARL_WeaponAllCB:SetChecked(false) - end - else - -- General case - if (FilterValueMap[val].cb:GetChecked()) then - FilterValueMap[val].svroot[ FilterValueMap[val].svval ] = true - else - FilterValueMap[val].svroot[ FilterValueMap[val].svval ] = false - end - end + ) - addon.resetTitle() + rButton:SetScript("OnEnter", + function (rButton) + GenerateTooltipContent(rButton, rIndex, playerFaction, exclude) + end + ) - if (not ApplyFilterState) then + rButton:SetScript("OnLeave", + function() + arlTooltip:Hide() + arlTooltip2:Hide() + end + ) - ApplyFilterState = {} +end - end - -- We have this toggled one way - if (ApplyFilterState[val]) then +-- Description: +-- Expected result: +-- Input: +-- Output: - ApplyFilterState[val] = not ApplyFilterState[val] +local function CheckDisplayFaction(filterDB, faction) - -- Hasn't been toggled - else + if (filterDB.general.faction ~= true) then - ApplyFilterState[val] = true + if ((faction == BFAC[myFaction]) or (faction == BFAC["Neutral"]) or (faction == nil)) then - end + return true - ARL_ApplyButton:SetNormalFontObject("GameFontDisableSmall") - ARL_ApplyButton:Disable() + else - for i,j in pairs(ApplyFilterState) do + return false - if (j == true) then + end - ARL_ApplyButton:SetNormalFontObject("GameFontNormalSmall") - ARL_ApplyButton:Enable() - break + else - end + return true end @@ -1014,321 +864,209 @@ end -- Expected result: -- Input: -- Output: +-- Scrollframe update stuff -local function HideARL_ExpOptCB(ignorevalue) - - ARL_ExpGeneralOptCB.text:SetText(addon:Yellow(ExpButtonText[1])) - ARL_ExpObtainOptCB.text:SetText(addon:Yellow(ExpButtonText[2])) - ARL_ExpBindingOptCB.text:SetText(addon:Yellow(ExpButtonText[3])) - ARL_ExpItemOptCB.text:SetText(addon:Yellow(ExpButtonText[4])) - ARL_ExpPlayerOptCB.text:SetText(addon:Yellow(ExpButtonText[5])) - ARL_ExpRepOptCB.text:SetText(addon:White(ExpButtonText[6])) - - if (ignorevalue ~= "general") then - - ARL_ExpGeneralOptCB:SetChecked(false) - ARL_ExpGeneralOptCB.text:SetText(addon:Yellow(ExpButtonText[1])) +local function RecipeList_Update() - else + -- Clear out the current buttons + for i = 1, maxVisibleRecipes do - ARL_ExpGeneralOptCB.text:SetText(addon:White(ExpButtonText[1])) + addon.RecipeListButton[i]:SetText("") + addon.RecipeListButton[i].sI = 0 + addon.PlusListButton[i]:Hide() + ClearRecipeButtonTooltip(i) end - if (ignorevalue ~= "obtain") then - - ARL_ExpObtainOptCB:SetChecked(false) - ARL_ExpObtainOptCB.text:SetText(addon:Yellow(ExpButtonText[2])) - - else - - ARL_ExpObtainOptCB.text:SetText(addon:White(ExpButtonText[2])) - - end + local entries = #DisplayStrings - if (ignorevalue ~= "binding") then + FauxScrollFrame_Update(ARL_RecipeScrollFrame, entries, maxVisibleRecipes, 16) - ARL_ExpBindingOptCB:SetChecked(false) - ARL_ExpBindingOptCB.text:SetText(addon:Yellow(ExpButtonText[3])) + if (entries > 0) then - else + -- now fill in our buttons + local listOffset = FauxScrollFrame_GetOffset(ARL_RecipeScrollFrame) + local buttonIndex = 1 + local stringsIndex = buttonIndex + listOffset - ARL_ExpBindingOptCB.text:SetText(addon:White(ExpButtonText[3])) + local stayInLoop = true - end + while (stayInLoop == true) do - if (ignorevalue ~= "item") then + if (DisplayStrings[stringsIndex].IsRecipe) then - ARL_ExpItemOptCB:SetChecked(false) - ARL_ExpItemOptCB.text:SetText(addon:Yellow(ExpButtonText[4])) + -- display the + symbol + addon.PlusListButton[buttonIndex]:Show() - else + -- Is it expanded or not? + if (DisplayStrings[stringsIndex].IsExpanded) then - ARL_ExpItemOptCB.text:SetText(addon:White(ExpButtonText[4])) + addon.PlusListButton[buttonIndex]:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-Up") + addon.PlusListButton[buttonIndex]:SetPushedTexture("Interface\\Buttons\\UI-MinusButton-Down") + addon.PlusListButton[buttonIndex]:SetHighlightTexture("Interface\\Buttons\\UI-PlusButton-Hilight") + addon.PlusListButton[buttonIndex]:SetDisabledTexture("Interface\\Buttons\\UI-MinusButton-Disabled") - end + else - if (ignorevalue ~= "player") then + addon.PlusListButton[buttonIndex]:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-Up") + addon.PlusListButton[buttonIndex]:SetPushedTexture("Interface\\Buttons\\UI-PlusButton-Down") + addon.PlusListButton[buttonIndex]:SetHighlightTexture("Interface\\Buttons\\UI-PlusButton-Hilight") + addon.PlusListButton[buttonIndex]:SetDisabledTexture("Interface\\Buttons\\UI-PlusButton-Disabled") - ARL_ExpPlayerOptCB:SetChecked(false) - ARL_ExpPlayerOptCB.text:SetText(addon:Yellow(ExpButtonText[5])) + end - else + else - ARL_ExpPlayerOptCB.text:SetText(addon:White(ExpButtonText[5])) + addon.PlusListButton[buttonIndex]:Hide() - end + end - if (ignorevalue ~= "rep") then + addon.RecipeListButton[buttonIndex]:SetText(DisplayStrings[stringsIndex].String) + addon.RecipeListButton[buttonIndex].sI = stringsIndex - ARL_ExpRepOptCB:SetChecked(false) - ARL_ExpRepOptCB.text:SetText(addon:Yellow(ExpButtonText[6])) + -- Set the tooltip on the button + SetRecipeButtonTooltip(buttonIndex) - else + buttonIndex = buttonIndex + 1 + stringsIndex = stringsIndex + 1 - ARL_ExpRepOptCB.text:SetText(addon:White(ExpButtonText[6])) + if ((buttonIndex > maxVisibleRecipes) or (stringsIndex > entries)) then - end + stayInLoop = false -end + end --- Description: --- Expected result: --- Input: --- Output: + end -function addon.ToggleFilters() + -- Entries are 0 here, so we have 0 to display + else - local xPos = addon.Frame:GetLeft() - local yPos = addon.Frame:GetBottom() + -- If the recipe total is at 0, it means we have not scanned the profession yet + if (playerData.recipes_total == 0) then - if (addon.Frame._Expanded == true) then - -- Adjust the frame size and texture --- addon.Frame:Hide() - addon.Frame:ClearAllPoints() - addon.Frame:SetWidth(293) - addon.Frame:SetHeight(447) - addon.bgTexture:SetTexture([[Interface\Addons\AckisRecipeList\img\main]]) - addon.bgTexture:SetAllPoints(addon.Frame) - addon.bgTexture:SetTexCoord(0, (293/512), 0, (447/512)) - addon.Frame._Expanded = false - addon.Frame:SetPoint("BOTTOMLEFT", UIParent, "BOTTOMLEFT", xPos, yPos) - -- Change the text and tooltip for the filter button - ARL_FilterButton:SetText(L["FILTER_OPEN"]) - addon:TooltipDisplay(ARL_FilterButton, L["FILTER_OPEN_DESC"]) + StaticPopup_Show("ARL_NOTSCANNED") - -- Hide my 5 buttons - ARL_ExpGeneralOptCB:Hide() - ARL_ExpObtainOptCB:Hide() - ARL_ExpBindingOptCB:Hide() - ARL_ExpItemOptCB:Hide() - ARL_ExpPlayerOptCB:Hide() - ARL_ExpRepOptCB:Hide() + -- We know all the recipes + elseif (playerData.recipes_known == playerData.recipes_total) then - -- Uncheck the five buttons - HideARL_ExpOptCB() + StaticPopup_Show("ARL_ALLKNOWN") - -- Hide the flyaway panel - addon.Flyaway:Hide() + -- Our filters are actually filtering something + elseif ((playerData.recipes_total_filtered - playerData.recipes_known_filtered) ~= 0) then - ARL_ResetButton:Hide() - ARL_ApplyButton:Hide() + StaticPopup_Show("ARL_ALLFILTERED") - -- and finally, show our frame --- addon.Frame:Show() - else + -- Our exclusion list is preventing something from being displayed + elseif (playerData.excluded_recipes_unknown ~= 0) then - -- Adjust the frame size and texture --- addon.Frame:Hide() - addon.Frame:ClearAllPoints() - addon.Frame:SetWidth(444) - addon.Frame:SetHeight(447) - addon.bgTexture:SetTexture([[Interface\Addons\AckisRecipeList\img\expanded]]) - addon.bgTexture:SetAllPoints(addon.Frame) - addon.bgTexture:SetTexCoord(0, (444/512), 0, (447/512)) - addon.Frame._Expanded = true - addon.Frame:SetPoint("BOTTOMLEFT", UIParent, "BOTTOMLEFT", xPos, yPos) + StaticPopup_Show("ARL_ALLEXCLUDED") - -- Change the text and tooltip for the filter button - ARL_FilterButton:SetText(L["FILTER_CLOSE"]) - addon:TooltipDisplay(ARL_FilterButton, L["FILTER_CLOSE_DESC"]) + else - -- Show my 5 buttons - ARL_ExpGeneralOptCB:Show() - ARL_ExpObtainOptCB:Show() - ARL_ExpBindingOptCB:Show() - ARL_ExpItemOptCB:Show() - ARL_ExpPlayerOptCB:Show() - ARL_ExpRepOptCB:Show() + addon:Print(L["NO_DISPLAY"]) - ARL_ResetButton:Show() - ARL_ApplyButton:Show() + end - -- and finally, show our frame --- addon.Frame:Show() end - -- Reset our title - addon.resetTitle() - + -- Make sure our apply button gets disabled + ApplyFilterState = nil + ARL_ApplyButton:SetNormalFontObject("GameFontDisableSmall") + ARL_ApplyButton:Disable() + end +-- Under various conditions, I'm going to have to redisplay my recipe list +-- This could happen because a filter changes, a new profession is chosen, or +-- a new search occurred. Use this function to do all the dirty work + -- Description: -- Expected result: -- Input: -- Output: -function addon:GenericMakeCB(cButton, anchorFrame, ttText, scriptVal, row, col, logo) - - local pushdown = { - [64] = 1, [65] = 1, [66] = 1, [67] = 1, [25] = 1, [26] = 1, [27] = 1, [28] = 1, [29] = 1, - [30] = 1, [31] = 1, [32] = 1, [33] = 1, [34] = 1, [68] = 1, [35] = 1, [36] = 1, [37] = 1, - [38] = 1, [84] = 1, [85] = 1, - } - -- set the position of the new checkbox - local xPos = 2 + ((col - 1) * 100) - local yPos = -3 - ((row - 1) * 17) - if (pushdown[scriptVal]) then yPos = yPos - 5 end - cButton:SetPoint("TOPLEFT", anchorFrame, "TOPLEFT", xPos, yPos) - - -- depending if we're on the rep logo thingers or not, set the height and an OnClick method - if (logo == 0) then - cButton:SetHeight(24) - cButton:SetWidth(24) - cButton:SetScript("OnClick", function() addon.filterSwitch(scriptVal) end) - else - cButton:SetHeight(46) - cButton:SetWidth(100) - cButton:SetScript("OnClick", function() addon.filterSwitch(scriptVal) end) - end - - addon:TooltipDisplay(cButton, ttText, 1) - -end +local function ReDisplay() --- Description: --- Expected result: --- Input: --- Output: + addon:UpdateFilters(recipeDB, allSpecTable, playerData) + sortedRecipeIndex = addon:SortMissingRecipes(recipeDB) -function addon:GenericCreateButton( - bName, parentFrame, bHeight, bWidth, - anchorFrom, anchorFrame, anchorTo, xOffset, yOffset, - bNormFont, bHighFont, initText, tAlign, tooltipText, noTextures) + if (not addon.db.profile.ignoreexclusionlist) then - -- I hate stretchy buttons. Thanks very much to ckknight for this code - -- (found in RockConfig) + addon:GetExclusions(recipeDB) - -- when pressed, the button should look pressed - local function button_OnMouseDown(this) - if this:IsEnabled() == 1 then - this.left:SetTexture([[Interface\Buttons\UI-Panel-Button-Down]]) - this.middle:SetTexture([[Interface\Buttons\UI-Panel-Button-Down]]) - this.right:SetTexture([[Interface\Buttons\UI-Panel-Button-Down]]) - end - end - -- when depressed, return to normal - local function button_OnMouseUp(this) - if this:IsEnabled() == 1 then - this.left:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) - this.middle:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) - this.right:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) - end end - local function button_Disable(this) - this.left:SetTexture([[Interface\Buttons\UI-Panel-Button-Disabled]]) - this.middle:SetTexture([[Interface\Buttons\UI-Panel-Button-Disabled]]) - this.right:SetTexture([[Interface\Buttons\UI-Panel-Button-Disabled]]) - this:__Disable() - this:EnableMouse(false) - end + initDisplayStrings() - local function button_Enable(this) - this.left:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) - this.middle:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) - this.right:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) - this:__Enable() - this:EnableMouse(true) - end + SetProgressBar(playerData) + + -- Make sure our expand all button is set to expandall + ARL_ExpandButton:SetText(L["EXPANDALL"]) + addon:TooltipDisplay(ARL_ExpandButton, L["EXPANDALL_DESC"]) - local button = CreateFrame("Button", bName, parentFrame) + -- And update our scrollframe + RecipeList_Update() - button:SetWidth(bWidth) - button:SetHeight(bHeight) +end - if (noTextures == 1) then - local left = button:CreateTexture(button:GetName() .. "_LeftTexture", "BACKGROUND") - button.left = left - local middle = button:CreateTexture(button:GetName() .. "_MiddleTexture", "BACKGROUND") - button.middle = middle - local right = button:CreateTexture(button:GetName() .. "_RightTexture", "BACKGROUND") - button.right = right +-- Description: +-- Expected result: +-- Input: +-- Output: - left:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) - middle:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) - right:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) +function addon:CreateScanButton() - left:SetPoint("TOPLEFT") - left:SetPoint("BOTTOMLEFT") - left:SetWidth(12) - left:SetTexCoord(0, 0.09375, 0, 0.6875) + -- Create the scan button + if (not addon.ScanButton) then - right:SetPoint("TOPRIGHT") - right:SetPoint("BOTTOMRIGHT") - right:SetWidth(12) - right:SetTexCoord(0.53125, 0.625, 0, 0.6875) + addon.ScanButton = CreateFrame("Button","addon.ScanButton",UIParent,"UIPanelButtonTemplate") - middle:SetPoint("TOPLEFT", left, "TOPRIGHT") - middle:SetPoint("BOTTOMRIGHT", right, "BOTTOMLEFT") - middle:SetTexCoord(0.09375, 0.53125, 0, 0.6875) + end - button:SetScript("OnMouseDown", button_OnMouseDown) - button:SetScript("OnMouseUp", button_OnMouseUp) - button:SetScript("OnEnter", SubControl_OnEnter) - button:SetScript("OnLeave", SubControl_OnLeave) + -- Add to Skillet interface + if (Skillet and Skillet:IsActive()) then - button.__Enable = button.Enable - button.__Disable = button.Disable - button.Enable = button_Enable - button.Disable = button_Disable + addon.ScanButton:SetParent(SkilletFrame) + addon.ScanButton:Show() + Skillet:AddButtonToTradeskillWindow(addon.ScanButton) + addon.ScanButton:SetWidth(80) - local highlight = button:CreateTexture(button:GetName() .. "_Highlight", "OVERLAY", "UIPanelButtonHighlightTexture") - button:SetHighlightTexture(highlight) - elseif (noTextures == 2) then - button:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-Up") - button:SetPushedTexture("Interface\\Buttons\\UI-PlusButton-Down") - button:SetHighlightTexture("Interface\\Buttons\\UI-PlusButton-Hilight") - button:SetDisabledTexture("Interface\\Buttons\\UI-PlusButton-Disabled") - elseif (noTextures == 3) then - button:SetNormalTexture("Interface\\Buttons\\UI-Panel-MinimizeButton-Up") - button:SetPushedTexture("Interface\\Buttons\\UI-Panel-MinimizeButton-Down") - button:SetHighlightTexture("Interface\\Buttons\\UI-Panel-MinimizeButton-Hilight") - button:SetDisabledTexture("Interface\\Buttons\\UI-Panel-MinimizeButton-Disable") end - local text = button:CreateFontString(button:GetName() .. "_FontString", "ARTWORK") - button:SetFontString(text) - button.text = text - text:SetPoint("LEFT", button, "LEFT", 7, 0) - text:SetPoint("RIGHT", button, "RIGHT", -7, 0) - text:SetJustifyH(tAlign) - - text:SetFontObject(bNormFont) --- text:SetHighlightFontObject(bHighFont) --- text:SetDisabledFontObject(GameFontDisableSmall) + -- Set some of the common button properties + addon.ScanButton:SetHeight(20) + addon.ScanButton:RegisterForClicks("LeftButtonUp") + addon.ScanButton:SetScript("OnClick", + function() + addon:ToggleFrame() + end + ) - text:SetText(initText) + addon.ScanButton:SetScript("OnEnter", + function(this) + GameTooltip_SetDefaultAnchor(GameTooltip, this) + GameTooltip:SetText(L["SCAN_RECIPES_DESC"]) + GameTooltip:Show() + end + ) - button:SetPoint(anchorFrom, anchorFrame, anchorTo, xOffset, yOffset) + addon.ScanButton:SetScript("OnLeave", + function() + GameTooltip:Hide() + end + ) - if (tooltipText ~= "") then + addon.ScanButton:SetText(L["Scan"]) - addon:TooltipDisplay(button, tooltipText) + local buttonparent = addon.ScanButton:GetParent() + local framelevel = buttonparent:GetFrameLevel() + local framestrata = buttonparent:GetFrameStrata() - end + -- Set the frame level of the button to be 1 deeper than its parent + addon.ScanButton:SetFrameLevel(framelevel + 1) + addon.ScanButton:SetFrameStrata(framestrata) - return button + addon.ScanButton:Enable() end @@ -1336,99 +1074,30 @@ end -- Expected result: -- Input: -- Output: --- Generic function for creating my expanded panel buttons - -function addon:CreateExpCB(bName, bTex, panelIndex) - local ExpTextureSize = 34 - - if ((bName == "ARL_RepOldWorldCB") or (bName == "ARL_RepBCCB") or (bName == "ARL_RepLKCB")) then - local cButton = CreateFrame("CheckButton", bName, addon.Fly_Rep) -- , "UICheckButtonTemplate") - cButton:SetWidth(100) - cButton:SetHeight(46) - cButton:SetChecked(false) - - local iconTex = cButton:CreateTexture(cButton:GetName() .. "buttonTex", "BORDER") - if (bName == "ARL_RepLKCB") then - iconTex:SetTexture("Interface\\Addons\\AckisRecipeList\\img\\" .. bTex) - else - iconTex:SetTexture('Interface/Glues/Common/' .. bTex) - end - iconTex:SetWidth(100) - iconTex:SetHeight(46) - iconTex:SetAllPoints(cButton) - local pushedTexture = cButton:CreateTexture(cButton:GetName() .. "pTex", "ARTWORK") - pushedTexture:SetTexture('Interface/Buttons/UI-Quickslot-Depress') - pushedTexture:SetAllPoints(cButton) - cButton:SetPushedTexture(pushedTexture) - local highlightTexture = cButton:CreateTexture() - highlightTexture:SetTexture('Interface/Buttons/ButtonHilight-Square') - highlightTexture:SetAllPoints(cButton) - highlightTexture:SetBlendMode('ADD') - cButton:SetHighlightTexture(highlightTexture) - local checkedTexture = cButton:CreateTexture() - checkedTexture:SetTexture('Interface/Buttons/CheckButtonHilight') - checkedTexture:SetAllPoints(cButton) - checkedTexture:SetBlendMode('ADD') - cButton:SetCheckedTexture(checkedTexture) +function addon:ShowScanButton() - -- And throw up a tooltip - if (bName == "ARL_RepOldWorldCB") then - addon:TooltipDisplay(cButton, L["FILTERING_OLDWORLD_DESC"]) - elseif (bName == "ARL_RepBCCB") then - addon:TooltipDisplay(cButton, L["FILTERING_BC_DESC"]) - else - addon:TooltipDisplay(cButton, L["FILTERING_WOTLK_DESC"]) - end + -- Anchor to ATSW + if (ATSWFrame) then - return cButton - else - local cButton = CreateFrame("CheckButton", bName, addon.Frame) -- , "UICheckButtonTemplate") - cButton:SetWidth(ExpTextureSize) - cButton:SetHeight(ExpTextureSize) - cButton:SetScript("OnClick", function() - addon.DoFlyaway(panelIndex) - end) + addon.ScanButton:SetParent(ATSWFrame) + addon.ScanButton:ClearAllPoints() + addon.ScanButton:SetPoint("RIGHT", ATSWOptionsButton, "LEFT", 0, 0) + addon.ScanButton:SetHeight(ATSWOptionsButton:GetHeight()) + addon.ScanButton:SetWidth(90) - local bgTex = cButton:CreateTexture(cButton:GetName() .. "bgTex", "BACKGROUND") - bgTex:SetTexture('Interface/SpellBook/UI-Spellbook-SpellBackground') - bgTex:SetHeight(ExpTextureSize + 6) - bgTex:SetWidth(ExpTextureSize + 4) - bgTex:SetTexCoord(0, (43/64), 0, (43/64)) - bgTex:SetPoint("CENTER", cButton, "CENTER", 0, 0) - local iconTex = cButton:CreateTexture(cButton:GetName() .. "iconTex", "BORDER") - iconTex:SetTexture('Interface/Icons/' .. bTex) - iconTex:SetAllPoints(cButton) - local pushedTexture = cButton:CreateTexture(cButton:GetName() .. "pTex", "ARTWORK") - pushedTexture:SetTexture('Interface/Buttons/UI-Quickslot-Depress') - pushedTexture:SetAllPoints(cButton) - cButton:SetPushedTexture(pushedTexture) - local highlightTexture = cButton:CreateTexture() - highlightTexture:SetTexture('Interface/Buttons/ButtonHilight-Square') - highlightTexture:SetAllPoints(cButton) - highlightTexture:SetBlendMode('ADD') - cButton:SetHighlightTexture(highlightTexture) - local checkedTexture = cButton:CreateTexture() - checkedTexture:SetTexture('Interface/Buttons/CheckButtonHilight') - checkedTexture:SetAllPoints(cButton) - checkedTexture:SetBlendMode('ADD') - cButton:SetCheckedTexture(checkedTexture) - -- Create the text object to go along with it - local cbText = cButton:CreateFontString("cbText", "OVERLAY", "GameFontHighlight") - cbText:SetText(addon:Yellow(ExpButtonText[panelIndex])) - cbText:SetPoint("LEFT", cButton, "RIGHT", 5, 0) - cbText:SetHeight(14) - cbText:SetWidth(100) - cbText:SetJustifyH("LEFT") - cButton.text = cbText + -- Anchor to trade window + else - -- And throw up a tooltip - addon:TooltipDisplay(cButton, ExpButtonTT[panelIndex]) - cButton:Hide() - return cButton + addon.ScanButton:SetParent(TradeSkillFrame) + addon.ScanButton:ClearAllPoints() + addon.ScanButton:SetPoint("RIGHT",TradeSkillFrameCloseButton,"LEFT",4,0) + addon.ScanButton:SetWidth(addon.ScanButton:GetTextWidth() + 10) end + addon.ScanButton:Show() + end -- Description: @@ -1436,17 +1105,21 @@ end -- Input: -- Output: -function addon:ToggleFrame() - - if (addon.Frame and addon.Frame:IsVisible()) then - - addon.Frame:Hide() - - else +function addon:TooltipDisplay(this, textLabel) - addon:AckisRecipeList_Command() + this:SetScript("OnEnter", + function (this) + GameTooltip_SetDefaultAnchor(GameTooltip, this) + GameTooltip:SetText(textLabel, HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b) + GameTooltip:Show() + end + ) - end + this:SetScript("OnLeave", + function(this) + GameTooltip:Hide() + end + ) end @@ -1454,29 +1127,28 @@ end -- Expected result: -- Input: -- Output: --- Set the texture on the switcher button. -local function SetSwitcherTexture(tex) --- This is really only called the first time its displayed. It should reflect the first --- profession the user has selected, or that shows up in his lists. +function addon.numFilters() --- For now, just display the first texture - local ARL_S_NTexture = ARL_SwitcherButton:CreateTexture("ARL_S_NTexture", "BACKGROUND") - ARL_S_NTexture:SetTexture([[Interface\Addons\AckisRecipeList\img\]] .. tex .. [[_up]]) - ARL_S_NTexture:SetTexCoord(0, 1, 0, 1) - ARL_S_NTexture:SetAllPoints(ARL_SwitcherButton) - local ARL_S_PTexture = ARL_SwitcherButton:CreateTexture("ARL_S_PTexture", "BACKGROUND") - ARL_S_PTexture:SetTexture([[Interface\Addons\AckisRecipeList\img\]] .. tex .. [[_down]]) - ARL_S_PTexture:SetTexCoord(0, 1, 0, 1) - ARL_S_PTexture:SetAllPoints(ARL_SwitcherButton) - local ARL_S_DTexture = ARL_SwitcherButton:CreateTexture("ARL_S_DTexture", "BACKGROUND") - ARL_S_DTexture:SetTexture([[Interface\Addons\AckisRecipeList\img\]] .. tex .. [[_up]]) - ARL_S_DTexture:SetTexCoord(0, 1, 0, 1) - ARL_S_DTexture:SetAllPoints(ARL_SwitcherButton) + -- IMPORTANT: If the number of filters we're maintaining changes, you'll need to change the FilterValueMap + -- at the end (of CreateFrame), as well as the following index value: + local MaxFilters = 87 - ARL_SwitcherButton:SetNormalTexture(ARL_S_NTexture) - ARL_SwitcherButton:SetPushedTexture(ARL_S_PTexture) - ARL_SwitcherButton:SetDisabledTexture(ARL_S_DTexture) + local total = 0 + local active = 0 + + for i = 1, MaxFilters do + if ((FilterValueMap[i].svroot == "disabled") or + (FilterValueMap[i].svroot == "special case")) then + -- ignore these filters in the totals + elseif (FilterValueMap[i].svroot[ FilterValueMap[i].svval ] == true) then + active = active + 1 + total = total + 1 + else + total = total + 1 + end + end + return active, total end @@ -1484,13 +1156,27 @@ end -- Expected result: -- Input: -- Output: --- converting from hex to rgb (Thanks Maldivia) -local function toRGB(hex) +function addon.resetTitle() - local r, g, b = hex:match("(..)(..)(..)") + -- reset the frame title line + local myTitle = "" + local addonversion = GetAddOnMetadata("AckisRecipeList", "Version") - return (tonumber(r,16) / 256) , (tonumber(g,16) / 256) , (tonumber(b,16) / 256) + if (addon.Frame._Expanded == true) then + + local aFil, tFil = addon.numFilters() + + myTitle = "ARL (v." .. addonversion .. ") - " .. currentProfession .. + " (" .. aFil .. "/" .. tFil .. " " .. L["Filters"] .. ")" + + else + + myTitle = "ARL (v." .. addonversion .. ") - " .. currentProfession + + end + + addon.Frame.HeadingText:SetText(addon:Normal(myTitle)) end @@ -1498,82 +1184,210 @@ end -- Expected result: -- Input: -- Output: --- I want to do a bit more comprehensive tooltip processing. Things like changing font sizes, --- adding padding to the left hand side, and using better color handling. So... this function --- will do that for me. - -local function gttAdd( - leftPad, -- number of times to pad two spaces on left side - textSize, -- negative number. subtract from 12 to get fontsize - narrow, -- if 1, use ARIALN instead of FRITZQ - wraptext, -- wraptext for AddLine (0 or 1) - str1, -- left hand string - hexcolor1, -- hex color code for left hand side - str2, -- if present, this is a double line, and this is the right hand string - hexcolor2) -- if present, hex color code for right hand side - - -- convert hex colors to r g b components. tooltips are dumb that way - - local a, b, c = toRGB(hexcolor1) - local d, e, f = 0, 0, 0 - if (hexcolor2) then +function addon.filterSwitch(val) - d, e, f = toRGB(hexcolor2) + -- This function is the all-encompassing checkbox handler for the ZJGUI + local armordb = addon.db.profile.filters.item.armor + local weapondb = addon.db.profile.filters.item.weapon + -- Special cases first, then general case + if (val == 19) then + -- Armor "All" checkbox + if (ARL_ArmorAllCB:GetChecked()) then + armordb.cloth = true + armordb.leather = true + armordb.mail = true + armordb.plate = true + armordb.cloak = true + armordb.necklace = true + armordb.ring = true + armordb.trinket = true + armordb.shield = true + ARL_ArmorClothCB:SetChecked(true) + ARL_ArmorLeatherCB:SetChecked(true) + ARL_ArmorMailCB:SetChecked(true) + ARL_ArmorPlateCB:SetChecked(true) + ARL_ArmorCloakCB:SetChecked(true) + ARL_ArmorNecklaceCB:SetChecked(true) + ARL_ArmorRingCB:SetChecked(true) + ARL_ArmorTrinketCB:SetChecked(true) + ARL_ArmorShieldCB:SetChecked(true) + ARL_ArmorNoneCB:SetChecked(false) + end + elseif (val == 20) then + -- Armor "None" checkbox + if (ARL_ArmorNoneCB:GetChecked()) then + armordb.cloth = false + armordb.leather = false + armordb.mail = false + armordb.plate = false + armordb.cloak = false + armordb.necklace = false + armordb.ring = false + armordb.trinket = false + armordb.shield = false + ARL_ArmorClothCB:SetChecked(false) + ARL_ArmorLeatherCB:SetChecked(false) + ARL_ArmorMailCB:SetChecked(false) + ARL_ArmorPlateCB:SetChecked(false) + ARL_ArmorCloakCB:SetChecked(false) + ARL_ArmorNecklaceCB:SetChecked(false) + ARL_ArmorRingCB:SetChecked(false) + ARL_ArmorTrinketCB:SetChecked(false) + ARL_ArmorShieldCB:SetChecked(false) + ARL_ArmorAllCB:SetChecked(false) + end + elseif ((val == 21) or (val == 22) or (val == 23) or (val == 24) or + (val == 64) or (val == 65) or (val == 66) or (val == 67) or (val == 85)) then + -- in this case, we need to check if the checkbox we just hit either + -- makes everthing checked, or everything empty. If so, we check the All/None + -- checkboxes + if (FilterValueMap[val].cb:GetChecked()) then + FilterValueMap[val].svroot[ FilterValueMap[val].svval ] = true + if ((armordb.cloth == true) and (armordb.leather == true) and + (armordb.mail == true) and (armordb.plate == true) and + (armordb.cloak == true) and (armordb.necklace == true) and + (armordb.ring == true) and (armordb.trinket == true) and + (armordb.shield == true)) then + ARL_ArmorAllCB:SetChecked(true) + end + ARL_ArmorNoneCB:SetChecked(false) + else + FilterValueMap[val].svroot[ FilterValueMap[val].svval ] = false + if ((armordb.cloth == false) and (armordb.leather == false) and + (armordb.mail == false) and (armordb.plate == false) and + (armordb.cloak == false) and (armordb.necklace == false) and + (armordb.ring == false) and (armordb.trinket == false) and + (armordb.shield == false)) then + ARL_ArmorNoneCB:SetChecked(true) + end + ARL_ArmorAllCB:SetChecked(false) + end + elseif (val == 25) then + -- Weapon "All" special case + if (ARL_WeaponAllCB:GetChecked()) then + weapondb.onehand = true + weapondb.twohand = true + weapondb.dagger = true + weapondb.axe = true + weapondb.mace = true + weapondb.sword = true + weapondb.polearm = true + weapondb.wand = true + weapondb.thrown = true + weapondb.ammo = true + weapondb.fist = true + ARL_Weapon1HCB:SetChecked(true) + ARL_Weapon2HCB:SetChecked(true) + ARL_WeaponDaggerCB:SetChecked(true) + ARL_WeaponAxeCB:SetChecked(true) + ARL_WeaponMaceCB:SetChecked(true) + ARL_WeaponSwordCB:SetChecked(true) + ARL_WeaponPolearmCB:SetChecked(true) + ARL_WeaponWandCB:SetChecked(true) + ARL_WeaponThrownCB:SetChecked(true) + ARL_WeaponAmmoCB:SetChecked(true) + ARL_WeaponFistCB:SetChecked(true) + ARL_WeaponNoneCB:SetChecked(false) + end + elseif (val == 26) then + -- Weapon "None" special case + if (ARL_WeaponNoneCB:GetChecked()) then + weapondb.onehand = false + weapondb.twohand = false + weapondb.dagger = false + weapondb.axe = false + weapondb.mace = false + weapondb.sword = false + weapondb.polearm = false + weapondb.wand = false + weapondb.thrown = false + weapondb.ammo = false + weapondb.fist = false + ARL_Weapon1HCB:SetChecked(false) + ARL_Weapon2HCB:SetChecked(false) + ARL_WeaponDaggerCB:SetChecked(false) + ARL_WeaponAxeCB:SetChecked(false) + ARL_WeaponMaceCB:SetChecked(false) + ARL_WeaponSwordCB:SetChecked(false) + ARL_WeaponPolearmCB:SetChecked(false) + ARL_WeaponWandCB:SetChecked(false) + ARL_WeaponThrownCB:SetChecked(false) + ARL_WeaponAmmoCB:SetChecked(false) + ARL_WeaponFistCB:SetChecked(false) + ARL_WeaponAllCB:SetChecked(false) + end + elseif ((val == 34) or (val == 36) or (val == 37)) then + -- Weapon disable case ... there's really no way to reach this code + elseif ((val == 27) or (val == 28) or (val == 29) or (val == 30) or (val == 31) or + (val == 32) or (val == 33) or (val == 68) or (val == 35) or (val == 38) or (val == 84)) then + -- we've clicked on a weapon thinger. If all of them are either checked or unchecked, + -- we should automagically check the "All" or "None" checkbox + if (FilterValueMap[val].cb:GetChecked()) then + FilterValueMap[val].svroot[ FilterValueMap[val].svval ] = true + if ((weapondb.onehand == true) and (weapondb.twohand == true) and + (weapondb.dagger == true) and (weapondb.axe == true) and + (weapondb.mace == true) and (weapondb.sword == true) and + (weapondb.polearm == true) and (weapondb.wand == true) and + (weapondb.thrown == true) and (weapondb.ammo == true) and + (weapondb.fist == true)) then + ARL_WeaponAllCB:SetChecked(true) + end + ARL_WeaponNoneCB:SetChecked(false) + else + FilterValueMap[val].svroot[ FilterValueMap[val].svval ] = false + if ((weapondb.onehand == false) and (weapondb.twohand == false) and + (weapondb.dagger == false) and (weapondb.axe == false) and + (weapondb.mace == false) and (weapondb.sword == false) and + (weapondb.polearm == false) and (weapondb.wand == false) and + (weapondb.thrown == false) and (weapondb.ammo == false) and + (weapondb.fist == false)) then + ARL_WeaponNoneCB:SetChecked(true) + end + ARL_WeaponAllCB:SetChecked(false) + end + else + -- General case + if (FilterValueMap[val].cb:GetChecked()) then + FilterValueMap[val].svroot[ FilterValueMap[val].svval ] = true + else + FilterValueMap[val].svroot[ FilterValueMap[val].svval ] = false + end end - -- Add in our left hand padding - local looppad = leftPad - local leftStr = str1 + addon.resetTitle() - while (looppad > 0) do + if (not ApplyFilterState) then - leftStr = " " .. leftStr - looppad = looppad - 1 + ApplyFilterState = {} end - -- Are we adding a single or double line? - local double = false - - if (str2) then + -- We have this toggled one way + if (ApplyFilterState[val]) then - arlTooltip:AddDoubleLine(leftStr, str2, a, b, c, d, e, f) - double = true + ApplyFilterState[val] = not ApplyFilterState[val] + -- Hasn't been toggled else - arlTooltip:AddLine(leftStr, a, b, c, wraptext) + ApplyFilterState[val] = true end - -- are we changing fontsize or narrow? - if ((narrow == 1) or (textSize ~= 0)) then - - local font = normalFont - - if (narrow == 1) then - - font = narrowFont - - end + ARL_ApplyButton:SetNormalFontObject("GameFontDisableSmall") + ARL_ApplyButton:Disable() - local fontsize = 11 + for i,j in pairs(ApplyFilterState) do - if (textSize ~= 0) then + if (j == true) then - fontsize = fontsize + textSize + ARL_ApplyButton:SetNormalFontObject("GameFontNormalSmall") + ARL_ApplyButton:Enable() + break end - - local numlines = arlTooltip:NumLines() - local mytext1 = _G["arlTooltipTextLeft" .. numlines] - mytext1:SetFont(font, fontsize) - if (double == true) then - local mytext2 = _G["arlTooltipTextRight" .. numlines] - mytext2:SetFont(font, fontsize) - end end @@ -1583,433 +1397,619 @@ end -- Expected result: -- Input: -- Output: --- Switch the displayed profession in the main panel -function addon.SwitchProfs() - -- Known professions should be in playerData["Professions"] +local function HideARL_ExpOptCB(ignorevalue) - -- This loop is gonna be weird. The reason is because we need to - -- ensure that we cycle through all the known professions, but also - -- that we do so in order. That means that if the currently displayed - -- profession is the last one in the list, we're actually going to - -- iterate completely once to get to the currently displayed profession - -- and then iterate again to make sure we display the next one in line. - -- Further, there is the nuance that the person may not know any - -- professions yet at all. User are so annoying. - local startLoop = 0 - local endLoop = 0 - local displayProf = 0 + ARL_ExpGeneralOptCB.text:SetText(addon:Yellow(ExpButtonText[1])) + ARL_ExpObtainOptCB.text:SetText(addon:Yellow(ExpButtonText[2])) + ARL_ExpBindingOptCB.text:SetText(addon:Yellow(ExpButtonText[3])) + ARL_ExpItemOptCB.text:SetText(addon:Yellow(ExpButtonText[4])) + ARL_ExpPlayerOptCB.text:SetText(addon:Yellow(ExpButtonText[5])) + ARL_ExpRepOptCB.text:SetText(addon:White(ExpButtonText[6])) + + if (ignorevalue ~= "general") then + + ARL_ExpGeneralOptCB:SetChecked(false) + ARL_ExpGeneralOptCB.text:SetText(addon:Yellow(ExpButtonText[1])) - -- ok, so first off, if we've never done this before, there is no "current" - -- and a single iteration will do nicely, thank you - if (currentProfIndex == 0) then - startLoop = 1 - endLoop = addon.MaxProfessions + 1 else - startLoop = currentProfIndex + 1 - endLoop = currentProfIndex - end - local index = startLoop - while (index ~= endLoop) do - if (index > MaxProfessions) then - index = 1 - else - if (playerData["Professions"][SortedProfessions[index].name] == true) then - displayProf = index - currentProfIndex = index - break - else - index = index + 1 - end - end - end - -- Redisplay the button with the new skill - SetSwitcherTexture(SortedProfessions[currentProfIndex].texture) - playerData.playerProfession = SortedProfessions[currentProfIndex].name - ReDisplay() -end --- Description: --- Expected result: --- Input: --- Output: + ARL_ExpGeneralOptCB.text:SetText(addon:White(ExpButtonText[1])) -local function GenerateTooltipContent(owner, rIndex, playerFaction, exclude) + end - local clr1, clr2 = "", "" + if (ignorevalue ~= "obtain") then - arlTooltip:ClearLines() - arlTooltip:SetOwner(owner, "ANCHOR_RIGHT") - gttAdd(0, 1, 0, 0, recipeDB[rIndex]["Name"], addon:hexcolor("HIGH")) + ARL_ExpObtainOptCB:SetChecked(false) + ARL_ExpObtainOptCB.text:SetText(addon:Yellow(ExpButtonText[2])) - -- check if the recipe is excluded - if (exclude[rIndex] == true) then + else - clr1 = addon:hexcolor("RED") - gttAdd(0, -1, 1, 0, L["RECIPE_EXCLUDED"], clr1) + ARL_ExpObtainOptCB.text:SetText(addon:White(ExpButtonText[2])) end - -- Add in skill level requirement, colored correctly - clr1 = addon:hexcolor("NORMAL") + if (ignorevalue ~= "binding") then - local recipeSkill = recipeDB[rIndex]["Level"] - local playerSkill = playerData.playerProfessionLevel + ARL_ExpBindingOptCB:SetChecked(false) + ARL_ExpBindingOptCB.text:SetText(addon:Yellow(ExpButtonText[3])) - if (recipeSkill > playerSkill) then + else - clr2 = addon:hexcolor("RED") + ARL_ExpBindingOptCB.text:SetText(addon:White(ExpButtonText[3])) - elseif ((playerSkill - recipeSkill) < 20) then + end - clr2 = addon:hexcolor("ORANGE") + if (ignorevalue ~= "item") then + ARL_ExpItemOptCB:SetChecked(false) + ARL_ExpItemOptCB.text:SetText(addon:Yellow(ExpButtonText[4])) - elseif ((playerSkill - recipeSkill) < 30) then + else - clr2 = addon:hexcolor("YELLOW") + ARL_ExpItemOptCB.text:SetText(addon:White(ExpButtonText[4])) - elseif ((playerSkill - recipeSkill) < 40) then + end - clr2 = addon:hexcolor("GREEN") + if (ignorevalue ~= "player") then + + ARL_ExpPlayerOptCB:SetChecked(false) + ARL_ExpPlayerOptCB.text:SetText(addon:Yellow(ExpButtonText[5])) else - clr2 = addon:hexcolor("MIDGREY") + ARL_ExpPlayerOptCB.text:SetText(addon:White(ExpButtonText[5])) end - gttAdd(0, -1, 0, 0, L["Required Skill"] .. " :", clr1, recipeDB[rIndex]["Level"], clr2) - - -- spacer - gttAdd(0, 0, 0, 0, ".", addon:hexcolor("BLACK")) + if (ignorevalue ~= "rep") then - -- Binding info - clr1 = addon:hexcolor("NORMAL") + ARL_ExpRepOptCB:SetChecked(false) + ARL_ExpRepOptCB.text:SetText(addon:Yellow(ExpButtonText[6])) - if (recipeDB[rIndex]["Flags"][36]) then + else - gttAdd(0, -1, 1, 0, L["BOEFilter"], clr1) + ARL_ExpRepOptCB.text:SetText(addon:White(ExpButtonText[6])) end - if (recipeDB[rIndex]["Flags"][37]) then +end - gttAdd(0, -1, 1, 0, L["BOPFilter"], clr1) +-- Description: +-- Expected result: +-- Input: +-- Output: - end +function addon.ToggleFilters() - if (recipeDB[rIndex]["Flags"][38]) then + local xPos = addon.Frame:GetLeft() + local yPos = addon.Frame:GetBottom() - gttAdd(0, -1, 1, 0, L["BOAFilter"], clr1) + if (addon.Frame._Expanded == true) then + -- Adjust the frame size and texture +-- addon.Frame:Hide() + addon.Frame:ClearAllPoints() + addon.Frame:SetWidth(293) + addon.Frame:SetHeight(447) + addon.bgTexture:SetTexture([[Interface\Addons\AckisRecipeList\img\main]]) + addon.bgTexture:SetAllPoints(addon.Frame) + addon.bgTexture:SetTexCoord(0, (293/512), 0, (447/512)) + addon.Frame._Expanded = false + addon.Frame:SetPoint("BOTTOMLEFT", UIParent, "BOTTOMLEFT", xPos, yPos) + -- Change the text and tooltip for the filter button + ARL_FilterButton:SetText(L["FILTER_OPEN"]) + addon:TooltipDisplay(ARL_FilterButton, L["FILTER_OPEN_DESC"]) - end + -- Hide my 5 buttons + ARL_ExpGeneralOptCB:Hide() + ARL_ExpObtainOptCB:Hide() + ARL_ExpBindingOptCB:Hide() + ARL_ExpItemOptCB:Hide() + ARL_ExpPlayerOptCB:Hide() + ARL_ExpRepOptCB:Hide() - if (recipeDB[rIndex]["Flags"][40]) then + -- Uncheck the five buttons + HideARL_ExpOptCB() - gttAdd(0, -1, 1, 0, L["RecipeBOEFilter"], clr1) + -- Hide the flyaway panel + addon.Flyaway:Hide() - end + ARL_ResetButton:Hide() + ARL_ApplyButton:Hide() - if (recipeDB[rIndex]["Flags"][41]) then + -- and finally, show our frame +-- addon.Frame:Show() + else - gttAdd(0, -1, 1, 0, L["RecipeBOPFilter"], clr1) + -- Adjust the frame size and texture +-- addon.Frame:Hide() + addon.Frame:ClearAllPoints() + addon.Frame:SetWidth(444) + addon.Frame:SetHeight(447) + addon.bgTexture:SetTexture([[Interface\Addons\AckisRecipeList\img\expanded]]) + addon.bgTexture:SetAllPoints(addon.Frame) + addon.bgTexture:SetTexCoord(0, (444/512), 0, (447/512)) + addon.Frame._Expanded = true + addon.Frame:SetPoint("BOTTOMLEFT", UIParent, "BOTTOMLEFT", xPos, yPos) - end + -- Change the text and tooltip for the filter button + ARL_FilterButton:SetText(L["FILTER_CLOSE"]) + addon:TooltipDisplay(ARL_FilterButton, L["FILTER_CLOSE_DESC"]) - if (recipeDB[rIndex]["Flags"][42]) then + -- Show my 5 buttons + ARL_ExpGeneralOptCB:Show() + ARL_ExpObtainOptCB:Show() + ARL_ExpBindingOptCB:Show() + ARL_ExpItemOptCB:Show() + ARL_ExpPlayerOptCB:Show() + ARL_ExpRepOptCB:Show() - gttAdd(0, -1, 1, 0, L["RecipeBOAFilter"], clr1) + ARL_ResetButton:Show() + ARL_ApplyButton:Show() + -- and finally, show our frame +-- addon.Frame:Show() end - -- spacer - gttAdd(0, 0, 0, 0, ".", addon:hexcolor("BLACK")) + -- Reset our title + addon.resetTitle() - -- obtain info - gttAdd(0, -1, 0, 0, L["Obtained From"] .. " : ", addon:hexcolor("NORMAL")) +end - -- loop through acquire methods, display each - for k, v in pairs(recipeDB[rIndex]["Acquire"]) do +-- Description: +-- Expected result: +-- Input: +-- Output: - -- Trainer - if (v["Type"] == 1) then +function addon:GenericMakeCB(cButton, anchorFrame, ttText, scriptVal, row, col, logo) - -- Trainer: TrainerName - -- TrainerZone TrainerCoords - local trnr = trainerDB[v["ID"]] - local cStr = "" - -- Do we want to display this trainer? - local displaytt = false + local pushdown = { + [64] = 1, [65] = 1, [66] = 1, [67] = 1, [25] = 1, [26] = 1, [27] = 1, [28] = 1, [29] = 1, + [30] = 1, [31] = 1, [32] = 1, [33] = 1, [34] = 1, [68] = 1, [35] = 1, [36] = 1, [37] = 1, + [38] = 1, [84] = 1, [85] = 1, + } + -- set the position of the new checkbox + local xPos = 2 + ((col - 1) * 100) + local yPos = -3 - ((row - 1) * 17) + if (pushdown[scriptVal]) then yPos = yPos - 5 end + cButton:SetPoint("TOPLEFT", anchorFrame, "TOPLEFT", xPos, yPos) - clr1 = addon:hexcolor("TRAINER") + -- depending if we're on the rep logo thingers or not, set the height and an OnClick method + if (logo == 0) then + cButton:SetHeight(24) + cButton:SetWidth(24) + cButton:SetScript("OnClick", function() addon.filterSwitch(scriptVal) end) + else + cButton:SetHeight(46) + cButton:SetWidth(100) + cButton:SetScript("OnClick", function() addon.filterSwitch(scriptVal) end) + end + + addon:TooltipDisplay(cButton, ttText, 1) + +end + +-- Description: +-- Expected result: +-- Input: +-- Output: - if (trnr["Faction"] == BFAC["Horde"]) then +function addon:GenericCreateButton( + bName, parentFrame, bHeight, bWidth, + anchorFrom, anchorFrame, anchorTo, xOffset, yOffset, + bNormFont, bHighFont, initText, tAlign, tooltipText, noTextures) - clr2 = addon:hexcolor("HORDE") + -- I hate stretchy buttons. Thanks very much to ckknight for this code + -- (found in RockConfig) - if (playerFaction == BFAC["Horde"]) then + -- when pressed, the button should look pressed + local function button_OnMouseDown(this) + if this:IsEnabled() == 1 then + this.left:SetTexture([[Interface\Buttons\UI-Panel-Button-Down]]) + this.middle:SetTexture([[Interface\Buttons\UI-Panel-Button-Down]]) + this.right:SetTexture([[Interface\Buttons\UI-Panel-Button-Down]]) + end + end + -- when depressed, return to normal + local function button_OnMouseUp(this) + if this:IsEnabled() == 1 then + this.left:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) + this.middle:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) + this.right:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) + end + end - displaytt = true + local function button_Disable(this) + this.left:SetTexture([[Interface\Buttons\UI-Panel-Button-Disabled]]) + this.middle:SetTexture([[Interface\Buttons\UI-Panel-Button-Disabled]]) + this.right:SetTexture([[Interface\Buttons\UI-Panel-Button-Disabled]]) + this:__Disable() + this:EnableMouse(false) + end - end + local function button_Enable(this) + this.left:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) + this.middle:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) + this.right:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) + this:__Enable() + this:EnableMouse(true) + end - elseif (trnr["Faction"] == BFAC["Alliance"]) then + local button = CreateFrame("Button", bName, parentFrame) - clr2 = addon:hexcolor("ALLIANCE") + button:SetWidth(bWidth) + button:SetHeight(bHeight) - if (playerFaction == BFAC["Alliance"]) then + if (noTextures == 1) then + local left = button:CreateTexture(button:GetName() .. "_LeftTexture", "BACKGROUND") + button.left = left + local middle = button:CreateTexture(button:GetName() .. "_MiddleTexture", "BACKGROUND") + button.middle = middle + local right = button:CreateTexture(button:GetName() .. "_RightTexture", "BACKGROUND") + button.right = right - displaytt = true + left:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) + middle:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) + right:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) - end + left:SetPoint("TOPLEFT") + left:SetPoint("BOTTOMLEFT") + left:SetWidth(12) + left:SetTexCoord(0, 0.09375, 0, 0.6875) - else + right:SetPoint("TOPRIGHT") + right:SetPoint("BOTTOMRIGHT") + right:SetWidth(12) + right:SetTexCoord(0.53125, 0.625, 0, 0.6875) - clr2 = addon:hexcolor("NEUTRAL") + middle:SetPoint("TOPLEFT", left, "TOPRIGHT") + middle:SetPoint("BOTTOMRIGHT", right, "BOTTOMLEFT") + middle:SetTexCoord(0.09375, 0.53125, 0, 0.6875) - end + button:SetScript("OnMouseDown", button_OnMouseDown) + button:SetScript("OnMouseUp", button_OnMouseUp) + button:SetScript("OnEnter", SubControl_OnEnter) + button:SetScript("OnLeave", SubControl_OnLeave) - if (displaytt) then + button.__Enable = button.Enable + button.__Disable = button.Disable + button.Enable = button_Enable + button.Disable = button_Disable - -- Add the trainer information to the tooltip - gttAdd(0, -2, 0, 0, L["Trainer"], clr1, trnr["Name"], clr2) + local highlight = button:CreateTexture(button:GetName() .. "_Highlight", "OVERLAY", "UIPanelButtonHighlightTexture") + button:SetHighlightTexture(highlight) + elseif (noTextures == 2) then + button:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-Up") + button:SetPushedTexture("Interface\\Buttons\\UI-PlusButton-Down") + button:SetHighlightTexture("Interface\\Buttons\\UI-PlusButton-Hilight") + button:SetDisabledTexture("Interface\\Buttons\\UI-PlusButton-Disabled") + elseif (noTextures == 3) then + button:SetNormalTexture("Interface\\Buttons\\UI-Panel-MinimizeButton-Up") + button:SetPushedTexture("Interface\\Buttons\\UI-Panel-MinimizeButton-Down") + button:SetHighlightTexture("Interface\\Buttons\\UI-Panel-MinimizeButton-Hilight") + button:SetDisabledTexture("Interface\\Buttons\\UI-Panel-MinimizeButton-Disable") + end - -- If we have a coordinate, add the coordinates to the tooltop - if (trnr["Coordx"] ~= 0) and (trnr["Coordy"] ~= 0) then + local text = button:CreateFontString(button:GetName() .. "_FontString", "ARTWORK") + button:SetFontString(text) + button.text = text + text:SetPoint("LEFT", button, "LEFT", 7, 0) + text:SetPoint("RIGHT", button, "RIGHT", -7, 0) + text:SetJustifyH(tAlign) - cStr = "(" .. trnr["Coordx"] .. ", " .. trnr["Coordy"] .. ")" + text:SetFontObject(bNormFont) +-- text:SetHighlightFontObject(bHighFont) +-- text:SetDisabledFontObject(GameFontDisableSmall) - end + text:SetText(initText) - clr1 = addon:hexcolor("NORMAL") - clr2 = addon:hexcolor("HIGH") - gttAdd(1, -2, 1, 0, trnr["Location"], clr1, cStr, clr2) + button:SetPoint(anchorFrom, anchorFrame, anchorTo, xOffset, yOffset) - end + if (tooltipText ~= "") then - -- Vendor - elseif (v["Type"] == 2) then + addon:TooltipDisplay(button, tooltipText) - -- Vendor: VendorName - -- VendorZone VendorCoords - local vndr = vendorDB[v["ID"]] - local cStr = "" + end - if (vndr["Coordx"] ~= 0) and (vndr["Coordy"] ~= 0) then + return button - cStr = "(" .. vndr["Coordx"] .. ", " .. vndr["Coordy"] .. ")" +end - end +-- Description: +-- Expected result: +-- Input: +-- Output: +-- Generic function for creating my expanded panel buttons - clr1 = addon:hexcolor("VENDOR") +function addon:CreateExpCB(bName, bTex, panelIndex) + local ExpTextureSize = 34 - if (vndr["Faction"] == BFAC["Horde"]) then - clr2 = addon:hexcolor("HORDE") - elseif (vndr["Faction"] == BFAC["Alliance"]) then - clr2 = addon:hexcolor("ALLIANCE") + if ((bName == "ARL_RepOldWorldCB") or (bName == "ARL_RepBCCB") or (bName == "ARL_RepLKCB")) then + local cButton = CreateFrame("CheckButton", bName, addon.Fly_Rep) -- , "UICheckButtonTemplate") + cButton:SetWidth(100) + cButton:SetHeight(46) + cButton:SetChecked(false) + + local iconTex = cButton:CreateTexture(cButton:GetName() .. "buttonTex", "BORDER") + if (bName == "ARL_RepLKCB") then + iconTex:SetTexture("Interface\\Addons\\AckisRecipeList\\img\\" .. bTex) else - clr2 = addon:hexcolor("NEUTRAL") + iconTex:SetTexture('Interface/Glues/Common/' .. bTex) end + iconTex:SetWidth(100) + iconTex:SetHeight(46) + iconTex:SetAllPoints(cButton) - gttAdd(0, -1, 0, 0, L["Vendor"], clr1, vndr["Name"], clr2) - clr1 = addon:hexcolor("NORMAL") - clr2 = addon:hexcolor("HIGH") - gttAdd(1, -2, 1, 0, vndr["Location"], clr1, cStr, clr2) - - -- Mob Drop - elseif (v["Type"] == 3) then - - -- Mob Drop: Mob Name - -- MobZone MobCoords - local mob = mobDB[v["ID"]] - local cStr = "" - - if (mob["Coordx"] ~= 0) and (mob["Coordy"] ~= 0) then + local pushedTexture = cButton:CreateTexture(cButton:GetName() .. "pTex", "ARTWORK") + pushedTexture:SetTexture('Interface/Buttons/UI-Quickslot-Depress') + pushedTexture:SetAllPoints(cButton) + cButton:SetPushedTexture(pushedTexture) + local highlightTexture = cButton:CreateTexture() + highlightTexture:SetTexture('Interface/Buttons/ButtonHilight-Square') + highlightTexture:SetAllPoints(cButton) + highlightTexture:SetBlendMode('ADD') + cButton:SetHighlightTexture(highlightTexture) + local checkedTexture = cButton:CreateTexture() + checkedTexture:SetTexture('Interface/Buttons/CheckButtonHilight') + checkedTexture:SetAllPoints(cButton) + checkedTexture:SetBlendMode('ADD') + cButton:SetCheckedTexture(checkedTexture) - cStr = "(" .. mob["Coordx"] .. ", " .. mob["Coordy"] .. ")" + -- And throw up a tooltip + if (bName == "ARL_RepOldWorldCB") then + addon:TooltipDisplay(cButton, L["FILTERING_OLDWORLD_DESC"]) + elseif (bName == "ARL_RepBCCB") then + addon:TooltipDisplay(cButton, L["FILTERING_BC_DESC"]) + else + addon:TooltipDisplay(cButton, L["FILTERING_WOTLK_DESC"]) + end - end + return cButton + else + local cButton = CreateFrame("CheckButton", bName, addon.Frame) -- , "UICheckButtonTemplate") + cButton:SetWidth(ExpTextureSize) + cButton:SetHeight(ExpTextureSize) + cButton:SetScript("OnClick", function() + addon.DoFlyaway(panelIndex) + end) - clr1 = addon:hexcolor("MOBDROP") - clr2 = addon:hexcolor("HORDE") - gttAdd(0, -1, 0, 0, L["Mob Drop"], clr1, mob["Name"], clr2) - clr1 = addon:hexcolor("NORMAL") - clr2 = addon:hexcolor("HIGH") - gttAdd(1, -2, 1, 0, mob["Location"], clr1, cStr, clr2) + local bgTex = cButton:CreateTexture(cButton:GetName() .. "bgTex", "BACKGROUND") + bgTex:SetTexture('Interface/SpellBook/UI-Spellbook-SpellBackground') + bgTex:SetHeight(ExpTextureSize + 6) + bgTex:SetWidth(ExpTextureSize + 4) + bgTex:SetTexCoord(0, (43/64), 0, (43/64)) + bgTex:SetPoint("CENTER", cButton, "CENTER", 0, 0) + local iconTex = cButton:CreateTexture(cButton:GetName() .. "iconTex", "BORDER") + iconTex:SetTexture('Interface/Icons/' .. bTex) + iconTex:SetAllPoints(cButton) + local pushedTexture = cButton:CreateTexture(cButton:GetName() .. "pTex", "ARTWORK") + pushedTexture:SetTexture('Interface/Buttons/UI-Quickslot-Depress') + pushedTexture:SetAllPoints(cButton) + cButton:SetPushedTexture(pushedTexture) + local highlightTexture = cButton:CreateTexture() + highlightTexture:SetTexture('Interface/Buttons/ButtonHilight-Square') + highlightTexture:SetAllPoints(cButton) + highlightTexture:SetBlendMode('ADD') + cButton:SetHighlightTexture(highlightTexture) + local checkedTexture = cButton:CreateTexture() + checkedTexture:SetTexture('Interface/Buttons/CheckButtonHilight') + checkedTexture:SetAllPoints(cButton) + checkedTexture:SetBlendMode('ADD') + cButton:SetCheckedTexture(checkedTexture) + -- Create the text object to go along with it + local cbText = cButton:CreateFontString("cbText", "OVERLAY", "GameFontHighlight") + cbText:SetText(addon:Yellow(ExpButtonText[panelIndex])) + cbText:SetPoint("LEFT", cButton, "RIGHT", 5, 0) + cbText:SetHeight(14) + cbText:SetWidth(100) + cbText:SetJustifyH("LEFT") + cButton.text = cbText - -- Quest - elseif (v["Type"] == 4) then + -- And throw up a tooltip + addon:TooltipDisplay(cButton, ExpButtonTT[panelIndex]) + cButton:Hide() + return cButton - -- Quest: QuestName - -- QuestZone QuestCoords - local qst = questDB[v["ID"]] + end - if (qst ~= nil) then +end - local cStr = "" +-- Description: +-- Expected result: +-- Input: +-- Output: - if (qst["Coordx"] ~= 0) and (qst["Coordy"] ~= 0) then +function addon:ToggleFrame() - cStr = "(" .. qst["Coordx"] .. ", " .. qst["Coordy"] .. ")" + if (addon.Frame and addon.Frame:IsVisible()) then - end + addon.Frame:Hide() + + else - clr1 = addon:hexcolor("QUEST") + addon:AckisRecipeList_Command() - if (qst["Faction"] == BFAC["Horde"]) then - clr2 = addon:hexcolor("HORDE") - elseif (qst["Faction"] == BFAC["Alliance"]) then - clr2 = addon:hexcolor("ALLIANCE") - else - clr2 = addon:hexcolor("NEUTRAL") - end + end - gttAdd(0, -1, 0, 0, L["Quest"], clr1, qst["Name"], clr2) - clr1 = addon:hexcolor("NORMAL") - clr2 = addon:hexcolor("HIGH") - gttAdd(1, -2, 1, 0, qst["Location"], clr1, cStr, clr2) +end - end +-- Description: +-- Expected result: +-- Input: +-- Output: +-- Set the texture on the switcher button. - -- Seasonal - elseif (v["Type"] == 5) then +local function SetSwitcherTexture(tex) +-- This is really only called the first time its displayed. It should reflect the first +-- profession the user has selected, or that shows up in his lists. - -- Seasonal: SeasonEventName - local ssnname = seasonDB[v["ID"]]["Name"] +-- For now, just display the first texture + local ARL_S_NTexture = ARL_SwitcherButton:CreateTexture("ARL_S_NTexture", "BACKGROUND") + ARL_S_NTexture:SetTexture([[Interface\Addons\AckisRecipeList\img\]] .. tex .. [[_up]]) + ARL_S_NTexture:SetTexCoord(0, 1, 0, 1) + ARL_S_NTexture:SetAllPoints(ARL_SwitcherButton) + local ARL_S_PTexture = ARL_SwitcherButton:CreateTexture("ARL_S_PTexture", "BACKGROUND") + ARL_S_PTexture:SetTexture([[Interface\Addons\AckisRecipeList\img\]] .. tex .. [[_down]]) + ARL_S_PTexture:SetTexCoord(0, 1, 0, 1) + ARL_S_PTexture:SetAllPoints(ARL_SwitcherButton) + local ARL_S_DTexture = ARL_SwitcherButton:CreateTexture("ARL_S_DTexture", "BACKGROUND") + ARL_S_DTexture:SetTexture([[Interface\Addons\AckisRecipeList\img\]] .. tex .. [[_up]]) + ARL_S_DTexture:SetTexCoord(0, 1, 0, 1) + ARL_S_DTexture:SetAllPoints(ARL_SwitcherButton) - clr1 = addon:hexcolor("SEASON") - gttAdd(0, -1, 0, 0, L["Seasonal"], clr1, ssnname, clr1) + ARL_SwitcherButton:SetNormalTexture(ARL_S_NTexture) + ARL_SwitcherButton:SetPushedTexture(ARL_S_PTexture) + ARL_SwitcherButton:SetDisabledTexture(ARL_S_DTexture) - -- Reputation - elseif (v["Type"] == 6) then +end - -- Reputation: Faction - -- FactionLevel RepVendor - -- RepVendorZone RepVendorCoords +-- Description: +-- Expected result: +-- Input: +-- Output: +-- converting from hex to rgb (Thanks Maldivia) - local repfac = repDB[v["ID"]] - local repname = repfac["Name"] -- name - local rplvl = v["RepLevel"] - local repvndr = vendorDB[v["RepVendor"]] - local cStr = "" +local function toRGB(hex) - if (repvndr["Coordx"] ~= 0) and (repvndr["Coordy"] ~= 0) then + local r, g, b = hex:match("(..)(..)(..)") - cStr = "(" .. repvndr["Coordx"] .. ", " .. repvndr["Coordy"] .. ")" + return (tonumber(r,16) / 256) , (tonumber(g,16) / 256) , (tonumber(b,16) / 256) - end - - clr1 = addon:hexcolor("REP") - clr2 = addon:hexcolor("NORMAL") - gttAdd(0, -1, 0, 0, L["Reputation"], clr1, repname, clr2) +end - local rStr = "" - if (rplvl == 0) then - rStr = BFAC["Neutral"] - clr1 = addon:hexcolor("NEUTRAL") - elseif (rplvl == 1) then - rStr = BFAC["Neutral"] - clr1 = addon:hexcolor("FRIENDLY") - elseif (rplvl == 2) then - rStr = BFAC["Honored"] - clr1 = addon:hexcolor("HONORED") - elseif (rplvl == 3) then - rStr = BFAC["Revered"] - clr1 = addon:hexcolor("REVERED") - else - rStr = BFAC["Exalted"] - clr1 = addon:hexcolor("EXALTED") - end +-- Description: +-- Expected result: +-- Input: +-- Output: +-- I want to do a bit more comprehensive tooltip processing. Things like changing font sizes, +-- adding padding to the left hand side, and using better color handling. So... this function +-- will do that for me. - if (repvndr["Faction"] == BFAC["Horde"]) then - clr2 = addon:hexcolor("HORDE") - elseif (repvndr["Faction"] == BFAC["Alliance"]) then - clr2 = addon:hexcolor("ALLIANCE") - else - clr2 = addon:hexcolor("NEUTRAL") - end +local function gttAdd( + leftPad, -- number of times to pad two spaces on left side + textSize, -- negative number. subtract from 12 to get fontsize + narrow, -- if 1, use ARIALN instead of FRITZQ + wraptext, -- wraptext for AddLine (0 or 1) + str1, -- left hand string + hexcolor1, -- hex color code for left hand side + str2, -- if present, this is a double line, and this is the right hand string + hexcolor2) -- if present, hex color code for right hand side - gttAdd(1, -2, 0, 0, rStr, clr1, repvndr["Name"], clr2) - clr1 = addon:hexcolor("NORMAL") - clr2 = addon:hexcolor("HIGH") - gttAdd(2, -2, 1, 0, repvndr["Location"], clr1, cStr, clr2) + -- convert hex colors to r g b components. tooltips are dumb that way - -- World Drop - elseif (v["Type"] == 7) then + local a, b, c = toRGB(hexcolor1) + local d, e, f = 0, 0, 0 - -- World Drop RarityLevel - if (v["ID"] == 1) then + if (hexcolor2) then - clr1 = addon:hexcolor("COMMON") + d, e, f = toRGB(hexcolor2) - elseif (v["ID"] == 2) then + end - clr1 = addon:hexcolor("UNCOMMON") + -- Add in our left hand padding + local looppad = leftPad + local leftStr = str1 - elseif (v["ID"] == 3) then + while (looppad > 0) do - clr1 = addon:hexcolor("RARE") + leftStr = " " .. leftStr + looppad = looppad - 1 - elseif (v["ID"] == 4) then + end - clr1 = addon:hexcolor("EPIC") + -- Are we adding a single or double line? + local double = false - else + if (str2) then - clr1 = addon:hexcolor("NORMAL") + arlTooltip:AddDoubleLine(leftStr, str2, a, b, c, d, e, f) + double = true - end + else - gttAdd(0, -1, 0, 0, L["World Drop"], clr1) + arlTooltip:AddLine(leftStr, a, b, c, wraptext) - -- Custom entry - elseif (v["Type"] == 8) then + end - -- Seasonal: SeasonEventName - local customname = customDB[v["ID"]]["Name"] + -- are we changing fontsize or narrow? + if ((narrow == 1) or (textSize ~= 0)) then - clr1 = addon:hexcolor("NORMAL") - gttAdd(0, -1, 0, 0, customname, clr1) + local font = normalFont - -- Unhandled - else + if (narrow == 1) then - clr1 = addon:hexcolor("NORMAL") - gttAdd(0, -1, 0, 0, L["Unhandled Recipe"], clr1) + font = narrowFont end - end + local fontsize = 11 - -- Spacer - gttAdd(0, 0, 0, 0, ".", addon:hexcolor("BLACK")) + if (textSize ~= 0) then - clr1 = addon:hexcolor("NORMAL") + fontsize = fontsize + textSize - gttAdd(0, -1, 0, 0, L["ALT_CLICK"], clr1) - gttAdd(0, -1, 0, 1, L["CTRL_CLICK"], clr1) - gttAdd(0, -1, 0, 1, L["SHIFT_CLICK"], clr1) + end + + local numlines = arlTooltip:NumLines() + local mytext1 = _G["arlTooltipTextLeft" .. numlines] + mytext1:SetFont(font, fontsize) + if (double == true) then + local mytext2 = _G["arlTooltipTextRight" .. numlines] + mytext2:SetFont(font, fontsize) + end - local spelllink = recipeDB[rIndex]["RecipeLink"] + end - if (spelllink) then +end - arlTooltip2:SetOwner(arlTooltip, "ANCHOR_NONE") --- arlTooltip2:ClearAllPoints() - --arlTooltip2:SetPoint("TOPLEFT", arlTooltip, "TOPRIGHT") - arlTooltip2:SetPoint("TOPRIGHT", arlTooltip, "TOPLEFT") - arlTooltip2:SetHyperlink(spelllink) - arlTooltip2:Show() +-- Description: +-- Expected result: +-- Input: +-- Output: +-- Switch the displayed profession in the main panel - else +function addon.SwitchProfs() + -- Known professions should be in playerData["Professions"] - arlTooltip2:Hide() + -- This loop is gonna be weird. The reason is because we need to + -- ensure that we cycle through all the known professions, but also + -- that we do so in order. That means that if the currently displayed + -- profession is the last one in the list, we're actually going to + -- iterate completely once to get to the currently displayed profession + -- and then iterate again to make sure we display the next one in line. + -- Further, there is the nuance that the person may not know any + -- professions yet at all. User are so annoying. + local startLoop = 0 + local endLoop = 0 + local displayProf = 0 + -- ok, so first off, if we've never done this before, there is no "current" + -- and a single iteration will do nicely, thank you + if (currentProfIndex == 0) then + startLoop = 1 + endLoop = addon.MaxProfessions + 1 + else + startLoop = currentProfIndex + 1 + endLoop = currentProfIndex end - - arlTooltip:Show() - + local index = startLoop + while (index ~= endLoop) do + if (index > MaxProfessions) then + index = 1 + else + if (playerData["Professions"][SortedProfessions[index].name] == true) then + displayProf = index + currentProfIndex = index + break + else + index = index + 1 + end + end + end + -- Redisplay the button with the new skill + SetSwitcherTexture(SortedProfessions[currentProfIndex].texture) + playerData.playerProfession = SortedProfessions[currentProfIndex].name + ReDisplay() end -- Description: -- 1.7.9.5