WoWInterface SVN QualityID

[/] [trunk/] [QualityID/] [QualityID.lua] - Rev 27

Compare with Previous | Blame | View Log

--######################
-- Interface: 32000
-- Title: QualityID
-- Notes: Displays an items basic info in the color of the item's quality, in the tooltip.
-- License: GNUv2GPL
-- Author: Anaral
-- Version: 3.20
--#######################

QualityID = {}

QIDDB = {
enabled = true;
showid = true;
showitemLvl = true;
showStackCount = true;
showIcon = true;
showType = true;
addTopLine = true;
addBotLine = true;
QualityIDVersion = "3.2";
};

QIDDB.enabled   = true
QIDDB.showid = true
QIDDB.showitemLvl = true
QIDDB.showStackCount = true
QIDDB.showIcon = true
QIDDB.showitemType = true
QIDDB.addTopLine = true
QIDDB.addBotLine = true
QIDDB.QualityIDVersion = "3.11"


--Run once when first loaded.

QID = CreateFrame("Frame", "QID")
QID:RegisterEvent("ADDON_LOADED")

DEFAULT_CHAT_FRAME:AddMessage("|cff00dd88" .. "QualityID: v."..QIDDB.QualityIDVersion.." enabled! For options type /qid.");

        
function QualityID:InitializeDB()
        if (not (QIDDB)) then DEFAULT_CHAT_FRAME:AddMessage("Setting up QIDDB.") end
        if (not (QIDDB)) then QIDDB = {} end
        if (not (QIDDB.enabled))        then QIDDB.enabled = self.enabled       end
        if (not (QIDDB.showId)) then QIDDB.showId = self.showId end
        if (not (QIDDB.showitemLvl)) then QIDDB.showitemLvl = self.showitemLvl end
        if (not (QIDDB.showStackCount)) then QIDDB.showStackCount = self.showStackCount end
        if (not (QIDDB.showIcon)) then QIDDB.showIcon = self.showIcon end
        if (not (QIDDB.showitemType)) then QIDDB.showitemType = self.showitemType end
        if (not (QIDDB.addTopLine)) then QIDDB.addTopLine = self.addTopLine end
        if (not (QIDDB.addBotLine)) then QIDDB.addBotLine = self.addBotLine end
        if (not (QIDDB.QualityIDVersion)) then QIDDB.QualityIDVersion = self.QualityIDVersion end
end

function QualityID:OnEvent(event, arg1)
        if event == 'ADDON_LOADED' and arg1 == 'QualityID' then
                QualityID:InitializeDB();
        end
end

function chat(text)
        if(type(text) == "boolean") then
        if(text) then
            text = "True";
        else
            text = "False";
        end
    end
        if(text ~= nil) then
                DEFAULT_CHAT_FRAME:AddMessage("|cff00dd88" .. text .. "|r");
        end
end
SLASH_QUALITYID1 = "/qualityid"
SLASH_QUALITYID2 = "/qid"
--      SlashCmdList["SLASHCMD"] = function (msg, editBox) end;  <--- blizz function for 3.0
SlashCmdList["QUALITYID"] = function(msg)
        QualityID_SlashCommandHandler(msg);
end
--slashcommand functions
function QualityID_SlashCommandHandler(msg)
   if(msg ~= "") or (msg~= "help") then
        chat("QualityID: " .. msg .. " toggled.");
   end
    if(msg:lower() == "toggle") then
        QIDDB.enabled = not QIDDB.enabled;
    elseif(msg:lower() == "on") then
        QIDDB.enabled = true;
    elseif(msg:lower() == "off") then
        QIDDB.enabled = false;
        elseif(msg:lower() == "id") then
                QIDDB.showid = not QIDDB.showid;
        elseif(msg:lower() == "ilvl") then
                QIDDB.showitemLvl = not QIDDB.showitemLvl;      
        elseif(msg:lower() == "stack") then
                QIDDB.showStackCount = not QIDDB.showStackCount;
        elseif(msg:lower() == "itemtype") then
                QIDDB.showitemType = not QIDDB.showitemType;
        elseif(msg:lower() == "icon") then
                QIDDB.showIcon = not QIDDB.showIcon;
        elseif(msg:lower()== "topline") then
                QIDDB.addTopLine = not QIDDB.addTopLine;
        elseif(msg:lower()== "botline") then
                QIDDB.addBotLine = not QIDDB.addBotLine;
        elseif(msg == "") or (msg == "help") then
        chat("QualityID options:  /qid {toggle | on | off}");
                chat("/qid id  {toggle} ");
                chat("/qid ilvl {toggle} ");
                chat("/qid stack {toggle}");
                chat("/qid itemtype {toggle}");
                chat("/qid icon {toggle}");
                chat("/qid topline {toggle}");
                chat("/qid botline {toggle}");
    end
end

local origs = {}
--Thanks to jnwhiteh for the code that finally removed the double info in recipe tooltips
local lineAdded = false
--calls id, ilvl, stkct, and type for our tooltip.
local function OnTooltipSetItem(frame, ...)
        local name, link = frame:GetItem()
        if not link then return end
        if QIDDB.enabled and link then
                local _, _, id, id2 = strfind(link, "item:(%d+).+:(.+:.+)%[")
                --While not all returns will be called, all are listed for personal reference.
                local name,link,quality,ilvl,reqLevel,type,subType,stackCount = GetItemInfo(link)
                local rarity = select(3,GetItemInfo(id))
                if not rarity then return end
                --Tooltip info
                if link and GetItemInfo(link) and (rarity) then
                local r, g , b, hex = GetItemQualityColor(rarity)
                        if not lineAdded then
                                if QIDDB.addTopLine then
                                        frame:AddLine(" ")
                                end
                                if QIDDB.showid then
                                        frame:AddLine( "Item ID: "..hex..id)
                                end
                                if QIDDB.showitemLvl then 
                                        frame:AddLine( "Item Lvl: "..hex..ilvl)
                                end
                                if QIDDB.showitemType then
                                        frame:AddLine( ""..type..": "..hex..subType)
                                end
                                if QIDDB.showStackCount and stackCount ~= 1 then
                                        frame:AddLine( "Stacks in lots of "..hex..stackCount)
                                end
                                if QIDDB.addBotLine then
                                        frame:AddLine(" ")
                                end
                                lineAdded = true
                        end
                end
        end

        if origs[frame] then
                return origs[frame](frame, ...)
        end
        
end
--Add item icon to the tooltip.
        --Tooltip code yanked from Tuller's Tipachu. 
local function hookTip(frame, ...)
        local _G = getfenv(0)
        local set = frame:GetScript('OnTooltipSetItem')
        frame:SetScript('OnTooltipSetItem', function(self, ...)
                local link = select(2, self:GetItem())
                if  link and GetItemInfo(link) then
                        --make sure the icon does not display twice on recipies, which fire OnTooltipSetItem twice
                        local text = _G[self:GetName() .. 'TextLeft1']
                        if QIDDB.showIcon and text and text:GetText():sub(1, 2) ~= '|T' then 
                                text:SetFormattedText('|T%s:%d|t%s', GetItemIcon(link), 36, text:GetText())
                        end
                end

                if set then
                        return set(self, ...)
                end
        end)
end
hookTip(GameTooltip)
hookTip(ItemRefTooltip)
hookTip(ShoppingTooltip1)
hookTip(ShoppingTooltip2)       

local function OnTooltipCleared(frame, ...)
   lineAdded = false
end
--Hookers of the standard GameTooltip variety.
for _,frame in pairs{GameTooltip, ItemRefTooltip, ShoppingTooltip1, ShoppingTooltip2} do
        origs[frame] = frame:GetScript("OnTooltipSetItem")
        GameTooltip:HookScript("OnTooltipSetItem", OnTooltipSetItem)
        GameTooltip:HookScript("OnTooltipCleared", OnTooltipCleared)
        frame:SetScript("OnTooltipSetItem", OnTooltipSetItem)
end
-- AtlasLootTooltip flavored Hookers, if that's what you're into ;)! 
--AtlasLootTooltip:HookScript("OnTooltipSetItem", OnTooltipSetItem)
--AtlasLootTooltip:HookScript("OnTooltipCleared", OnTooltipCleared)



Compare with Previous | Blame