vanilla-wow-addons – Rev 1
?pathlinks?
--===========================================================================--
---------------------------- LootTracker by PNB ----------------------------
--===========================================================================--
-- LootTrackerQueryUI.lua
--
-- Code behind the query UI
--===========================================================================--
------------------------------------------------------------------------------
-- DoQuery
------------------------------------------------------------------------------
LT_QueryResultData = {};
function LT_DoQuery(query)
LT_QueryResultData = {};
local queryLowercase = strlower(query);
if (queryLowercase == LT_QUERY_TARGETS or queryLowercase == LT_QUERY_LOOT) then
LT_WriteBuffer = "";
-- forward these on to the standard output handler
LT_OutputSummary(query, LT_BufferOut);
LT_QueryResultText:SetText(LT_WriteBuffer);
LT_QueryResult:AddMessage(LT_WriteBuffer);
LT_WriteBuffer = "";
else
-- Do a search through all the item/kill/player keys and list all the matches
local items = LT_GetItems();
local kills = LT_GetKills();
local players = LT_GetPlayers();
local itemMatches = {};
local killMatches = {};
local playerMatches = {};
if (queryLowercase == LT_QUERY_ITEMS) then
foreach(items, function(k,v)
tinsert(itemMatches, k);
end);
elseif (queryLowercase == LT_QUERY_KILLS) then
foreach(kills, function(k,v)
tinsert(killMatches, k);
end);
elseif (queryLowercase == LT_QUERY_PLAYERS) then
foreach(players, function(k,v)
tinsert(playerMatches, k);
end);
else
itemMatches = LT_GetMatchingKeys(items, query);
killMatches = LT_GetMatchingKeys(kills, query);
playerMatches = LT_GetMatchingKeys(players, query);
end
foreach(itemMatches, function(k,v)
local data = {};
data.Type = "Item";
data.Object = items[v];
data.Description = LT_GetItemSummary(data.Object);
LT_InsertSorted(LT_QueryResultData, data, LT_DataCmp);
end);
foreach(killMatches, function(k,v)
local data = {};
data.Type = "Kill";
data.Object = kills[v];
data.Description = LT_GetKillSummary(data.Object);
LT_InsertSorted(LT_QueryResultData, data, LT_DataCmp);
end);
foreach(playerMatches, function(k,v)
local data = {};
data.Type = "Player";
data.Object = players[v];
data.Description = LT_GetPlayerSummary(data.Object);
LT_InsertSorted(LT_QueryResultData, data, LT_DataCmp);
end);
LT_QueryResultText:SetText("");
LT_UpdateQueryScroll();
end
end
------------------------------------------------------------------------------
-- DataCmp
------------------------------------------------------------------------------
function LT_DataCmp(a, b)
if ((a == nil) or (b == nil)) then
return 1;
end
if (a.Type ~= b.Type) then
return LT_StrCmp(a.Type, b.Type);
else
if (a.Type == "Item") then
return LT_ItemCmp(a.Object, b.Object);
else
return LT_NameCmp(a.Object, b.Object);
end
end
end
------------------------------------------------------------------------------
-- ItemCmp
------------------------------------------------------------------------------
function LT_ItemCmp(a, b)
if ((a == nil) or (b == nil)) then
return 1;
end
local qualityDiff = b.Quality - a.Quality;
if (qualityDiff ~= 0) then
return qualityDiff;
end
return LT_NameCmp(a, b);
end
------------------------------------------------------------------------------
-- NameCmp
------------------------------------------------------------------------------
function LT_NameCmp(a, b)
return LT_StrCmp(a.Name, b.Name);
end
------------------------------------------------------------------------------
-- UpdateQueryScroll
------------------------------------------------------------------------------
LT_SCROLL_QUERYITEMHEIGHT = 14;
LT_SCROLL_QUERYVISIBLECOUNT = 25;
function LT_UpdateQueryScroll()
local offset = FauxScrollFrame_GetOffset(LT_QueryScrollFrame);
local numItems = getn(LT_QueryResultData);
FauxScrollFrame_Update(LT_QueryScrollFrame, numItems, LT_SCROLL_QUERYVISIBLECOUNT, LT_SCROLL_QUERYITEMHEIGHT, nil, nil, nil, nil, LT_QueryScrollFrame:GetWidth(), LT_QueryScrollFrame:GetHeight());
-- Fill in the buttons
for i=1, LT_SCROLL_QUERYVISIBLECOUNT, 1 do
local index = i + offset;
local button = getglobal("LT_QueryButton" .. i);
assert(button ~= nil);
local data = LT_QueryResultData[index];
if ((index <= numItems) and (data ~= nil)) then
local description = data.Description;
local text = getglobal("LT_QueryButton" .. i .. "Text");
assert(text ~= nil);
text:SetText(description);
button.Data = data;
button:Show();
else
button:Hide();
end
end
end
------------------------------------------------------------------------------
-- QueryButtonClicked
------------------------------------------------------------------------------
function LT_QueryButtonClicked(button)
local data = button.Data;
if (data.Type == "Item") then
LT_SetItem(data.Object);
elseif (data.Type == "Kill") then
LT_SetKill(data.Object);
elseif (data.Type == "Player") then
LT_SetPlayer(data.Object);
end
end