You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
3.2 KiB
107 lines
3.2 KiB
local WIT, core = ...
|
|
|
|
local AceGUI = LibStub("AceGUI-3.0")
|
|
|
|
local GridColumns = core.GridColumns
|
|
|
|
function GridColumns.ItemNameColumn(options)
|
|
options = options or {}
|
|
options.Name = options.Name or 'Name'
|
|
|
|
local self = GridColumns.GridColumn(options)
|
|
|
|
self.ItemIdProperty = options.ItemIdProperty or "ItemId"
|
|
|
|
function self.GetSortValue(row)
|
|
local key = self.Name .. "_Order"
|
|
if not row[key] then
|
|
if row.Data.PetId then
|
|
row[key] = core.TSMHelper.GetItemName('p:'.. row.Data.PetId)
|
|
elseif row.Data[self.ItemIdProperty] then
|
|
row[key] = core.TSMHelper.GetItemName(row.Data[self.ItemIdProperty])
|
|
elseif row.Data.NameMapId then
|
|
row[key] = core.LocationHelper.GetMapName(row.Data.NameMapId)
|
|
else
|
|
row[key] = row.Data.Name
|
|
end
|
|
end
|
|
|
|
if row.Data.NameSuffix then
|
|
row[key] = row[key] .. " " .. core.GetString(row.Data.NameSuffix)
|
|
end
|
|
|
|
return row[key] or ''
|
|
end
|
|
|
|
function self.GetFilterValue(row)
|
|
return strlower(self.GetSortValue(row))
|
|
end
|
|
|
|
function self.Value(data)
|
|
if data.ItemLink then return data.ItemLink end
|
|
if data[self.ItemIdProperty] then
|
|
return core.TSMHelper.GetItemLink(data[self.ItemIdProperty])
|
|
end
|
|
|
|
return data.NameMapId and core.LocationHelper.GetMapName(data.NameMapId) or data.Name
|
|
end
|
|
|
|
local baseGetRowText = self.GetRowText
|
|
function self.GetRowText(row)
|
|
local text = baseGetRowText(row)
|
|
|
|
if row.Data.Quantity then
|
|
text = text .. " x" .. row.Data.Quantity
|
|
end
|
|
|
|
if row.Data.NameSuffix then
|
|
text = text .. " " .. core.GetString(row.Data.NameSuffix)
|
|
end
|
|
|
|
return text
|
|
end
|
|
|
|
local baseGetCell = self.GetCell
|
|
function self.GetCell(row)
|
|
if row.Data[self.ItemIdProperty] then
|
|
local cell = AceGUI:Create("SimpleGroup")
|
|
local link = AceGUI:Create("InteractiveLabel")
|
|
local itemLink = self.Value(row.Data)
|
|
|
|
link:SetText(self.GetRowText(row))
|
|
link:SetWidth(link.label:GetStringWidth() + 5)
|
|
|
|
link:SetCallback("OnEnter", function()
|
|
GameTooltip:SetOwner(link.frame, "ANCHOR_PRESERVE")
|
|
GameTooltip:ClearAllPoints()
|
|
GameTooltip:SetPoint("LEFT", link.frame, "RIGHT")
|
|
if row.Data.PetId then
|
|
BattlePetToolTip_ShowLink(row.Data.ItemLink)
|
|
else
|
|
GameTooltip:SetHyperlink("item:" .. row.Data[self.ItemIdProperty])
|
|
GameTooltip:Show()
|
|
end
|
|
end)
|
|
link:SetCallback("OnLeave", function()
|
|
if row.Data.PetId then
|
|
BattlePetTooltip:Hide()
|
|
else
|
|
GameTooltip:Hide()
|
|
end
|
|
end)
|
|
link:SetCallback("OnClick", function()
|
|
if IsShiftKeyDown() then
|
|
ChatEdit_InsertLink(itemLink)
|
|
end
|
|
end)
|
|
|
|
cell:AddChild(link)
|
|
|
|
return cell
|
|
end
|
|
|
|
return baseGetCell(row)
|
|
end
|
|
|
|
return self
|
|
end
|