-- ------------------------------------------------------------------------------ -- -- TradeSkillMaster -- -- http://www.curse.com/addons/wow/tradeskill-master -- -- -- -- A TradeSkillMaster Addon (http://tradeskillmaster.com) -- -- All Rights Reserved* - Detailed license information included with addon. -- -- ------------------------------------------------------------------------------ -- -- This file contains all the code for the new tooltip options local TSM = select(2, ...) local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster") -- loads the localization table local AceGUI = LibStub("AceGUI-3.0") -- load the AceGUI libraries local lib = TSMAPI local tooltipLib = LibStub("LibExtraTip-1") local moduleObjects = TSM.moduleObjects local moduleNames = TSM.moduleNames local private = {} TSMAPI:RegisterForTracing(private, "TradeSkillMaster.Tooltips_private") private.tooltipInfo = {} -- ************************************************************************** -- LibExtraTip Functions -- ************************************************************************** function TSM:SetupTooltips() -- tooltipLib:AddCallback({type = "battlepet", callback = private.LoadTooltip}) tooltipLib:AddCallback({type = "item", callback = private.LoadTooltip}) tooltipLib:RegisterTooltip(GameTooltip) tooltipLib:RegisterTooltip(ItemRefTooltip) -- tooltipLib:RegisterTooltip(BattlePetTooltip) local orig = OpenMailAttachment_OnEnter OpenMailAttachment_OnEnter = function(self, index) private.lastMailTooltipUpdate = private.lastMailTooltipUpdate or 0 if private.lastMailTooltipIndex ~= index or private.lastMailTooltipUpdate + 0.1 < GetTime() then private.lastMailTooltipUpdate = GetTime() private.lastMailTooltipIndex = index orig(self, index) end end end local tooltipLines = {lastUpdate = 0, modifier=0} local function GetTooltipLines(itemString, quantity) local modifier = (IsShiftKeyDown() and 4 or 0) + (IsAltKeyDown() and 2 or 0) + (IsControlKeyDown() and 1 or 0) if modifier ~= tooltipLines.modifier then tooltipLines.modifier = modifier tooltipLines.lastUpdate = 0 end if tooltipLines.itemString ~= itemString or tooltipLines.quantity ~= quantity or (tooltipLines.lastUpdate + 0.5) < GetTime() then wipe(tooltipLines) for _, moduleName in ipairs(moduleNames) do if moduleObjects[moduleName].GetTooltip then local moduleLines = moduleObjects[moduleName]:GetTooltip(itemString, quantity) if type(moduleLines) ~= "table" then moduleLines = {} end for _, line in ipairs(moduleLines) do tinsert(tooltipLines, line) end end end tooltipLines.itemString = itemString tooltipLines.quantity = quantity tooltipLines.lastUpdate = GetTime() end return tooltipLines end function private.LoadTooltip(tipFrame, link, quantity) local itemString = TSMAPI:GetItemString(link) if not itemString then return end local lines = GetTooltipLines(itemString, quantity) if #lines > 0 then tooltipLib:AddLine(tipFrame, " ", 1, 1, 0, TSM.db.profile.embeddedTooltip) local r, g, b = unpack(TSM.db.profile.design.inlineColors.tooltip or { 130, 130, 250 }) for i = 1, #lines do if type(lines[i]) == "table" then tooltipLib:AddDoubleLine(tipFrame, lines[i].left, lines[i].right, r / 255, g / 255, b / 255, r / 255, g / 255, b / 255, TSM.db.profile.embeddedTooltip) else tooltipLib:AddLine(tipFrame, lines[i], r / 255, g / 255, b / 255, TSM.db.profile.embeddedTooltip) end end tooltipLib:AddLine(tipFrame, " ", 1, 1, 0, TSM.db.profile.embeddedTooltip) end end -- ************************************************************************** -- TSM Tooltip Options -- ************************************************************************** function TSM:RegisterTooltipInfo(module, info) info = CopyTable(info) info.module = module tinsert(private.tooltipInfo, info) end function TSMAPI:GetMoneyCoinsTooltip() return TSM.db.profile.moneyCoinsTooltip end local loadTooltipOptionsTab function TSM:LoadTooltipOptions(parent) local tabs = {} local next = next for _, info in ipairs(private.tooltipInfo) do tinsert(tabs, { text = info.module, value = info.module }) end if next(tabs) then sort(tabs, function(a, b) return a.text < b.text end) end tinsert(tabs, 1, { text = L["General"], value = "Help" }) local tabGroup = AceGUI:Create("TSMTabGroup") tabGroup:SetLayout("Fill") tabGroup:SetTabs(tabs) tabGroup:SetCallback("OnGroupSelected", function(_, _, value) tabGroup:ReleaseChildren() if value == "Help" then private:DrawTooltipHelp(tabGroup) else for _, info in ipairs(private.tooltipInfo) do if info.module == value then info.callback(tabGroup, loadTooltipOptionsTab and loadTooltipOptionsTab.tooltip) end end end end) parent:AddChild(tabGroup) tabGroup:SelectTab(loadTooltipOptionsTab and loadTooltipOptionsTab.module or "Help") end function private:DrawTooltipHelp(container) local priceSources = TSMAPI:GetPriceSources() priceSources["Crafting"] = nil priceSources["VendorBuy"] = nil priceSources["VendorSell"] = nil priceSources["Disenchant"] = nil local page = { { -- scroll frame to contain everything type = "ScrollFrame", layout = "List", children = { { type = "InlineGroup", layout = "flow", title = L["General Options"], children = { { type = "Label", text = L["Display prices in tooltips as:"], relativeWidth = 0.25, }, { type = "CheckBox", label = L["Coins:"], relativeWidth = 0.09, settingInfo = {TSM.db.profile, "moneyCoinsTooltip"}, callback = function(_, _, value) if value == true then TSM.db.profile.moneyTextTooltip = false end container:ReloadTab() end, }, { type = "Label", relativeWidth = 0.22, text = TSMAPI:FormatTextMoneyIcon(3451267, "|cffffffff", false, true), }, { type = "CheckBox", label = L["Text:"], relativeWidth = 0.09, settingInfo = {TSM.db.profile, "moneyTextTooltip"}, callback = function(_, _, value) if value == true then TSM.db.profile.moneyCoinsTooltip = false end container:ReloadTab() end, }, { type = "Label", text = TSMAPI:FormatTextMoney(3451267, "|cffffffff", false, true), }, { type = "HeadingLine", }, { type = "CheckBox", label = L["Embed TSM Tooltips"], settingInfo = {TSM.db.profile, "embeddedTooltip"}, tooltip = L["If checked, TSM's tooltip lines will be embedded in the item tooltip. Otherwise, it will show as a separate box below the item's tooltip."], }, { type = "CheckBox", label = L["Display Group / Operation Info in Tooltips"], settingInfo = {TSM.db.profile, "tooltip"}, }, { type = "CheckBox", label = L["Display vendor buy price in tooltip."], settingInfo = { TSM.db.profile, "vendorBuyTooltip" }, tooltip = L["If checked, the price of buying the item from a vendor is displayed."], }, { type = "CheckBox", label = L["Display vendor sell price in tooltip."], settingInfo = { TSM.db.profile, "vendorSellTooltip" }, tooltip = L["If checked, the price of selling the item to a vendor displayed."], }, }, }, { type = "InlineGroup", layout = "flow", title = L["Destroy Values"], children = { { type = "Dropdown", label = L["Destroy Value Source:"], settingInfo = {TSM.db.profile, "destroyValueSource"}, list = priceSources, relativeWidth = 0.5, tooltip = L["Select the price source for calculating destroy values."], }, { type = "CheckBox", label = L["Display Detailed Destroy Tooltips"], settingInfo = { TSM.db.profile, "detailedDestroyTooltip" }, relativeWidth = 0.49, tooltip = L["If checked, a detailed list of items which an item destroys into will be displayed below the destroy value in the tooltip."], }, { type = "HeadingLine", }, { type = "CheckBox", label = L["Display mill value in tooltip."], settingInfo = { TSM.db.profile, "millTooltip" }, relativeWidth = 0.5, tooltip = L["If checked, the mill value of the item will be shown. This value is calculated using the average market value of materials the item will mill into."], }, { type = "CheckBox", label = L["Display prospect value in tooltip."], settingInfo = { TSM.db.profile, "prospectTooltip" }, relativeWidth = 0.5, tooltip = L["If checked, the prospect value of the item will be shown. This value is calculated using the average market value of materials the item will prospect into."], }, { type = "CheckBox", label = L["Display disenchant value in tooltip."], settingInfo = { TSM.db.profile, "deTooltip" }, relativeWidth = 0.5, tooltip = L["If checked, the disenchant value of the item will be shown. This value is calculated using the average market value of materials the item will disenchant into."], }, }, }, }, }, } if next(TSM.db.global.customPriceSources) then local inlineGroup = { type = "InlineGroup", layout = "flow", title = L["Custom Price Sources"], children = { { type = "Label", text = L["Custom price sources to display in item tooltips:"], relativeWidth = 1, }, }, } for name in pairs(TSM.db.global.customPriceSources) do local checkbox = { type = "CheckBox", label = name, relativeWidth = 0.5, settingInfo = { TSM.db.global.customPriceTooltips, name }, tooltip = L["If checked, this custom price will be displayed in item tooltips."], } tinsert(inlineGroup.children, checkbox) end tinsert(page[1].children, inlineGroup) end TSMAPI:BuildPage(container, page) end