annotate ReagentMaker.lua @ 7:28d5f1fbd33f

Disable the reagent's reagent tooltip, as no add-on like Datastore can hook it right now
author contrebasse
date Sat, 02 Apr 2011 21:45:14 +0200
parents 43e21c6513e0
children 17844b0b88c1
rev   line source
contrebasse@0 1 local addonName, A = ...
contrebasse@0 2
contrebasse@0 3 -- @todo clean the A table
contrebasse@0 4 -- @todo check local copy of globals functions
contrebasse@0 5 -- @todo add support for sub-recipes (like ink plus milling)
contrebasse@0 6 -- @todo show a tooltip
contrebasse@0 7 -- @todo show number of craftable items
contrebasse@0 8 -- @todo show owned items
contrebasse@0 9 -- @todo add support for dez ?
contrebasse@0 10 -- @todo add support for cross tradeskill, like mining + forge/ingé
contrebasse@0 11 -- @todo icon on reagent's button
contrebasse@0 12
contrebasse@0 13 ---------------------------------------------------
contrebasse@0 14 -- Variables
contrebasse@0 15 ---------------------------------------------------
contrebasse@0 16 -- Used by findglobals
contrebasse@0 17 -- GLOBALS: _G, CreateFrame, DEFAULT_CHAT_FRAME
contrebasse@0 18
contrebasse@0 19 -- Lua functions
contrebasse@0 20
contrebasse@0 21 -- Wow functions
contrebasse@0 22
contrebasse@0 23 -- constant vars
contrebasse@0 24
contrebasse@0 25 ---------------------------------------------------
contrebasse@0 26 -- Manage events
contrebasse@0 27 ---------------------------------------------------
contrebasse@0 28 A.EventsFrame = CreateFrame("Frame")
contrebasse@0 29
contrebasse@3 30 A.EventsFrame:SetScript("OnEvent", function(self, event, ...)
contrebasse@3 31 if event == "TRADE_SKILL_UPDATE" then
contrebasse@3 32 -- Scan availabe recipes
contrebasse@3 33 A:ScanSimpleRecipes()
contrebasse@3 34
contrebasse@3 35 -- Close the external window if the tradeskill changed
contrebasse@3 36 if A.currentTradeSkill ~= GetTradeSkillLine() then
contrebasse@3 37 A.MenuFrame:Hide()
contrebasse@3 38 end
contrebasse@3 39 elseif event == "TRADE_SKILL_SHOW" then
contrebasse@0 40 A:Initialize()
contrebasse@0 41 end -- if
contrebasse@3 42 end) -- function
contrebasse@0 43 A.EventsFrame:RegisterEvent("TRADE_SKILL_SHOW")
contrebasse@3 44 A.EventsFrame:RegisterEvent("TRADE_SKILL_UPDATE")
contrebasse@0 45
contrebasse@0 46 ---------------------------------------------------
contrebasse@0 47 -- Initialize
contrebasse@0 48 ---------------------------------------------------
contrebasse@1 49 local toInitialize = true
contrebasse@0 50 function A:Initialize()
contrebasse@3 51 A.EventsFrame:UnregisterEvent("TRADE_SKILL_SHOW")
contrebasse@0 52
contrebasse@3 53 -- Register clics on reagent's buttons
contrebasse@3 54 for i=1,7 do
contrebasse@3 55 local btn = _G["TradeSkillReagent"..i];
contrebasse@3 56 btn:HookScript("OnDoubleClick", A.ProcessReagent);
contrebasse@3 57 btn:HookScript("OnEnter", A.btnEntered)
contrebasse@3 58 btn:HookScript("OnLeave", A.btnLeft)
contrebasse@3 59 btn.SplitStack = A.SplitStack
contrebasse@1 60
contrebasse@3 61 local textureHighlight = btn:CreateTexture()
contrebasse@3 62 textureHighlight:Hide()
contrebasse@3 63 textureHighlight:SetTexture("Interface\\BUTTONS\\CheckButtonHilight")
contrebasse@3 64 textureHighlight:SetBlendMode("ADD")
contrebasse@3 65 --textureHighlight:SetPoint("TOPLEFT")
contrebasse@3 66 --textureHighlight:SetSize(btn:GetHeight(),btn:GetHeight())
contrebasse@3 67 textureHighlight:SetAllPoints("TradeSkillReagent"..i.."IconTexture")
contrebasse@3 68 btn.textureHighlight = textureHighlight
contrebasse@3 69
contrebasse@3 70 local label = btn:CreateFontString(nil,"ARTWORK","GameFontHighlight")
contrebasse@3 71 label:SetSize(100,20)
contrebasse@3 72 label:SetPoint("TOPLEFT",btn,"TOPLEFT",4,-4)
contrebasse@3 73 label:SetJustifyH("LEFT")
contrebasse@3 74 label:SetJustifyV("TOP")
contrebasse@3 75 label:SetFont("Fonts\\FRIZQT__.TTF", 10, "OUTLINE")
contrebasse@3 76 btn.label = label
contrebasse@3 77 end -- for
contrebasse@3 78
contrebasse@3 79 A.tooltipRecipe = CreateFrame("GameTooltip", "ReagentMaker_tooltipRecipe",UIParent, "GameTooltipTemplate")
contrebasse@3 80 A.tooltipRecipe:SetFrameStrata("TOOLTIP")
contrebasse@3 81 A.tooltipRecipe:Hide()
contrebasse@7 82 --[[
contrebasse@3 83 A.tooltipReagent = CreateFrame("GameTooltip", "ReagentMaker_tooltipReagent",UIParent, "GameTooltipTemplate")
contrebasse@3 84 A.tooltipReagent:SetFrameStrata("TOOLTIP")
contrebasse@3 85 A.tooltipReagent:Hide()
contrebasse@7 86 --]]
contrebasse@3 87 end -- function
contrebasse@3 88
contrebasse@3 89
contrebasse@3 90 -- Function run avter selecting a item in the tradeskill window
contrebasse@3 91 function A.ProcessReagent(btn, ...)
contrebasse@3 92 -- We want no modifiers, or shift to choose the number of reagent to craft
contrebasse@3 93 if IsModifierKeyDown() and not IsShiftKeyDown() then return end
contrebasse@3 94 local chooseNumberToCraft = IsShiftKeyDown()
contrebasse@3 95
contrebasse@3 96 -- Index of the reagent in the recipe, taken from the button name
contrebasse@3 97 local reagentRecipeIndex = A.buttonNumber(btn)
contrebasse@3 98
contrebasse@3 99 -- ID of the reagent we want to craft
contrebasse@3 100 local reagentID = A.link2ID(GetTradeSkillReagentItemLink(GetTradeSkillSelectionIndex(), reagentRecipeIndex))
contrebasse@3 101
contrebasse@3 102 -- Continue only if the reagent is known
contrebasse@3 103 if not reagentID or not A.data[reagentID] then return end
contrebasse@3 104
contrebasse@3 105 -- If only one recipe is known for the reagent, use it
contrebasse@3 106 if #(A.data[reagentID]) == 1 and not A.data[reagentID].spell then
contrebasse@3 107 local numMakable, reagentIndex = A.numMakable(reagentID)
contrebasse@3 108 if numMakable>0 then
contrebasse@3 109 A.craft(reagentID,reagentRecipeIndex,reagentIndex,numMakable,chooseNumberToCraft)
contrebasse@3 110 return
contrebasse@3 111 end
contrebasse@3 112 -- If we can make the item needed to make the reagent, open a window to make it
contrebasse@3 113 -- one step recursion, enables to mill to create an ink
contrebasse@3 114 if A.data[A.data[reagentID][1][1]] then
contrebasse@3 115 A.externalCraftWindow(A.data[reagentID][1][1])
contrebasse@3 116 else
contrebasse@3 117 print("Sorry, can not make reagent...")
contrebasse@3 118 end
contrebasse@3 119 else
contrebasse@3 120 A.externalCraftWindow(reagentID)
contrebasse@0 121 end -- if
contrebasse@0 122 end -- function
contrebasse@0 123
contrebasse@0 124
contrebasse@0 125 ---------------------------------------------------
contrebasse@0 126 -- Craft items
contrebasse@0 127 ---------------------------------------------------
contrebasse@3 128 -- function used after choosing the number of reagent to craft
contrebasse@3 129 function A.SplitStack(owner,split)
contrebasse@3 130 DoTradeSkill(owner.ReagentMaker_reagentIndex,tonumber(split))
contrebasse@3 131 owner.ReagentMaker_reagentIndex = nil
contrebasse@0 132 end
contrebasse@0 133
contrebasse@3 134 -- Craft the reagent of an item, given it's position in the recipe
contrebasse@3 135 function A.craft(reagentID,reagentRecipeIndex,reagentIndex,numReagentMakable,chooseNumber)
contrebasse@3 136 -- Look at how many we need to make one item for the selected recipe
contrebasse@3 137 local numToMake = 1
contrebasse@3 138 local selectedIndex = GetTradeSkillSelectionIndex()
contrebasse@3 139 local skillName, skillType, numAvailable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(selectedIndex)
contrebasse@3 140 if numAvailable==0 then
contrebasse@3 141 local reagentName, reagentTexture, reagentCount, playerReagentCount = GetTradeSkillReagentInfo(selectedIndex, reagentRecipeIndex)
contrebasse@3 142 numToMake = math.min(reagentCount - playerReagentCount,numReagentMakable)
contrebasse@3 143 end -- if
contrebasse@0 144
contrebasse@3 145 -- Choose number or craft directly
contrebasse@3 146 if chooseNumber and numReagentMakable>1 then
contrebasse@3 147 -- the dialog window is linked to the reagent button
contrebasse@3 148 local btn = _G["TradeSkillReagent"..reagentRecipeIndex]
contrebasse@3 149
contrebasse@3 150 -- Store info to be able to run the function later
contrebasse@3 151 btn.ReagentMaker_reagentIndex = reagentIndex
contrebasse@3 152
contrebasse@3 153 -- Open dialog
contrebasse@3 154 OpenStackSplitFrame(numReagentMakable, btn, "TOP", "BOTTOM")
contrebasse@3 155
contrebasse@3 156 -- Fill in the number to make
contrebasse@3 157 numToMake = tostring(numToMake)
contrebasse@3 158 for i = 1,numToMake:len() do
contrebasse@3 159 StackSplitFrame_OnChar(StackSplitFrame,numToMake:gsub(i,i))
contrebasse@3 160 end
contrebasse@3 161 StackSplitFrame.typing = 0 -- reinit the frame so tha the entered value will be erased on text entry
contrebasse@3 162 else
contrebasse@3 163 DoTradeSkill(reagentIndex,numToMake)
contrebasse@3 164 end -- if
contrebasse@3 165 end -- function
contrebasse@3 166
contrebasse@3 167
contrebasse@3 168 -- Button hovering
contrebasse@3 169 function A.btnEntered(btn)
contrebasse@3 170 -- Index of the reagent in the recipe, taken from the button name
contrebasse@3 171 local reagentRecipeIndex = A.buttonNumber(btn)
contrebasse@3 172
contrebasse@3 173 -- ID of the reagent we want to craft
contrebasse@3 174 local reagentLink = GetTradeSkillReagentItemLink(GetTradeSkillSelectionIndex(), reagentRecipeIndex)
contrebasse@3 175 local reagentID = A.link2ID(reagentLink)
contrebasse@3 176
contrebasse@3 177 -- Continue only if the reagent is known
contrebasse@3 178 if not reagentID or not A.data[reagentID] then return end
contrebasse@3 179
contrebasse@3 180 btn.textureHighlight:Show()
contrebasse@3 181
contrebasse@3 182 if #(A.data[reagentID]) == 1 and not A.data[reagentID].spell then
contrebasse@3 183 local numMakable = A.numMakable(reagentID)
contrebasse@3 184 btn.label:SetText(numMakable)
contrebasse@3 185 if numMakable==0 then
contrebasse@3 186 btn.label:SetTextColor(1, 0, 0, 1)
contrebasse@3 187 else
contrebasse@3 188 btn.label:SetTextColor(0, 5, 0, 1)
contrebasse@3 189 end
contrebasse@3 190 btn.label:Show()
contrebasse@0 191 end
contrebasse@0 192
contrebasse@5 193 -- Tooltips
contrebasse@3 194 A.tooltipRecipe:SetOwner(btn)
contrebasse@6 195 if A.data[reagentID].spell then
contrebasse@6 196 A.tooltipRecipe:SetHyperlink(GetSpellLink(A.data[reagentID].spellID))
contrebasse@6 197 else
contrebasse@6 198 A.tooltipRecipe:SetHyperlink(GetTradeSkillRecipeLink(A.findSkillIndex(reagentID)))
contrebasse@6 199 end
contrebasse@5 200 A.tooltipRecipe:Show()
contrebasse@3 201 A.tooltipRecipe:ClearAllPoints()
contrebasse@5 202 --A.tooltipRecipe:SetPoint("TOPLEFT",btn,"TOPRIGHT")
contrebasse@5 203 A.tooltipRecipe:SetPoint("BOTTOMLEFT",GameTooltip,"BOTTOMRIGHT")
contrebasse@5 204
contrebasse@7 205 --[[
contrebasse@6 206 if #(A.data[reagentID]) == 1 then
contrebasse@6 207 A.tooltipReagent:SetOwner(A.tooltipRecipe)
contrebasse@6 208 local name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo(A.data[reagentID][1][1])
contrebasse@6 209 A.tooltipReagent:SetHyperlink(link)
contrebasse@6 210 A.tooltipReagent:Show()
contrebasse@6 211 A.tooltipReagent:ClearAllPoints()
contrebasse@6 212 A.tooltipReagent:SetPoint("BOTTOMLEFT",A.tooltipRecipe,"BOTTOMRIGHT")
contrebasse@6 213 end
contrebasse@7 214 --]]
contrebasse@0 215 end
contrebasse@0 216
contrebasse@3 217 function A.btnLeft(btn)
contrebasse@3 218 btn.textureHighlight:Hide()
contrebasse@3 219 btn.label:Hide()
contrebasse@3 220 A.tooltipRecipe:Hide()
contrebasse@3 221 A.tooltipReagent:Hide()
contrebasse@0 222 end