vanilla-wow-addons – Rev 1
?pathlinks?
local locals = KC_ITEMS_LOCALS.modules.linkview
local frame = AceGUI:new()
local config = {
name = "KC_LinkviewFrame",
type = ACEGUI_DIALOG,
title = locals.gui.title,
isSpecial = TRUE,
width = 375,
height = 500,
OnShow = "Build",
OnHide = "Cleanup",
elements = {
SortBox = {
type = ACEGUI_OPTIONSBOX,
title = locals.gui.sortopt,
width = 351,
height = 46,
anchors = {
topleft = {xOffset = 12, yOffset = -37}
},
elements = {
Tier1 = {
type = ACEGUI_DROPDOWN,
title = locals.gui.tier1,
width = 103,
height = 26,
anchors = {
topleft = {xOffset = 5, yOffset = -15}
},
fill = "FillSortDrops",
},
Tier2 = {
type = ACEGUI_DROPDOWN,
title = locals.gui.tier2,
width = 103,
height = 26,
anchors = {
left = {relTo = "$parentTier1", relPoint = "right", xOffset = 4, yOffset = 0}
},
fill = "FillSortDrops",
},
Tier3 = {
type = ACEGUI_DROPDOWN,
title = locals.gui.tier3,
width = 103,
height = 26,
anchors = {
left = {relTo = "$parentTier2", relPoint = "right", xOffset = 4, yOffset = 0}
},
fill = "FillSortDrops",
},
Order = {
type = ACEGUI_BUTTON,
title = "^",
width = 20,
height = 24,
anchors = {
left = {relTo = "$parentTier3", relPoint = "right", xOffset = 1, yOffset = 0}
},
disabled = FALSE,
OnClick = "Sort"
},
},
},
ItemsCount = {
type = ACEGUI_BUTTON,
title = "",
width = 320,
height = 16,
anchors = {
bottomright = {relTo = "$parentItems", relPoint = "topright", xOffset = -5, yOffset = -1}
},
disabled = TRUE,
},
Items = {
type = ACEGUI_LISTBOX,
title = locals.gui.items,
width = 351,
height = 320,
anchors = {
topleft = {relTo = "$parentSortBox", relPoint = "bottomleft", xOffset = 0, yOffset = -14}
},
fill = "FillItemsListBox",
OnItemEnter = "OnItemEnter",
OnItemLeave = "OnItemLeave",
OnSelect = "OnSelect",
},
SearchBox = {
type = ACEGUI_OPTIONSBOX,
title = locals.gui.searchopt,
width = 251,
height = 50,
anchors = {
bottomleft = {relPoint = "bottomleft", xOffset = 12, yOffset = 16}
},
elements = {
SearchText = {
type = ACEGUI_INPUTBOX,
title = locals.gui.searchtxt,
width = 165 ,
height = 26,
anchors = {
left = {relPoint = "left", xOffset = 12, yOffset = -5}
},
disabled = FALSE,
OnEnterPressed = "SimpleSearch"
},
SearchButton = {
type = ACEGUI_BUTTON,
title = locals.gui.search,
width = 68,
height = 22,
anchors = {
bottomleft = {relTo = "$parentSearchText", relPoint = "bottomright", xOffset = -3, yOffset = 2}
},
disabled = FALSE,
OnClick = "SimpleSearch"
},
},
},
AdvSearchButton = {
type = ACEGUI_BUTTON,
title = locals.gui.advsearch,
width = 98,
height = 22,
anchors = {
bottomleft = {relTo = "$parentClose", relPoint = "topleft", xOffset = 0, yOffset = -1}
},
disabled = FALSE,
OnClick = "AdvSearch"
},
}
}
frame:Initialize(KC_Linkview, config)
KC_Linkview.gui = frame
function frame:OnItemEnter()
if (not self.idTable) then return; end
GameTooltip:SetOwner(this, "ANCHOR_" .. strupper(self.app:GetOpt(self.app.optPath, "side") or "LEFT"));
GameTooltip:SetHyperlink(self.idTable[this.rowID])
local _,_,_,_,_,_,_,_,texture = GetItemInfo(self.idTable[this.rowID])
KC_LinkviewIconTexture:SetTexture(texture)
KC_LinkviewIcon:Show()
end
function frame:OnItemLeave()
KC_LinkviewIcon:Hide()
GameTooltip:Hide()
end
function frame:FillSortDrops()
return locals.gui.sortlist
end
function frame:FillItemsListBox()
return self.sortedTable or {locals.gui.please};
end
function frame:BuildSearchTable(pattern)
local id, name, matches
self.totalLinks = 0
self.goodLinks = 0
self.matchedLinks = 0
self.searchTable = {}
for id in KC_ItemsDB do
if (tonumber(id)) then
local info = self.app.common:GetItemInfo(tostring(id))
name = self.app.common:GetItemInfo(id)["cname"]
self.app.gui.totalLinks = self.app.gui.totalLinks + 1
self.app.gui.goodLinks = name and self.app.gui.goodLinks + 1 or self.app.gui.goodLinks
if ((name) and strfind(strlower(name or ""), strlower(pattern or ""))) then
self.searchTable[id] = name
self.matchedLinks = self.matchedLinks + 1
table.setn(self.searchTable, self.matchedLinks)
end
end
end
self:Build()
end
function frame:BuildSortedTable()
if (not self.searchTable or getn(self.searchTable) == 0) then self.sortedTable = {locals.gui.nothing}; self.idTable = nil; return; end
self.sortedTable = {}
self.idTable = {}
local crossTable, sortTable = {}, {}
local method1 = self.SortBox.Tier1:GetValue()
local method2 = self.SortBox.Tier2:GetValue()
local method3 = self.SortBox.Tier3:GetValue()
local method4 = (method1 and method2 and method3) and "" or locals.gui.name
local x = 1
for id in self.searchTable do
local data = self.app.common:GetItemInfo(id)
local key = (data[locals.gui.translist[method1]] or "") .. (data[locals.gui.translist[method2]] or "") .. (data[locals.gui.translist[method3]] or "") .. (data[locals.gui.translist[method4]] or "")
local orgkey = key
while (crossTable[key]) do
key = orgkey .. x
x = x + 1
end
tinsert(sortTable, key)
crossTable[key] = id
end
sort(sortTable)
for id, value in sortTable do
tinsert(self.sortedTable, self.searchTable[crossTable[value]])
tinsert(self.idTable, self.app.common:GetHyperlink(crossTable[value]))
end
end
function frame:SimpleSearch()
local pattern = self.SearchBox.SearchText:GetValue()
pattern = pattern and ace.trim(pattern) or nil
self:BuildSearchTable(pattern)
self:BuildSortedTable()
self.Items:ClearList()
self.Items:Update()
end
function frame:Sort()
self:BuildSortedTable()
self.Items:ClearList()
self.Items:Update()
end
function frame:AdvSearch()
if (KC_AdvSearchFrame:IsVisible()) then
self.app.advsearch:Hide()
self.SearchBox.SearchText:Enable()
self.SearchBox.SearchButton:Enable()
else
self.app.advsearch:Show()
self.SearchBox.SearchText:Disable()
self.SearchBox.SearchButton:Disable()
end
end
function frame:Build()
for i = 1, 18 do
self.Items["Row"..i]:RegisterForClicks("LeftButtonDown", "RightButtonDown")
end
self.ItemsCount:SetValue(format(locals.gui.stats, self.totalLinks or "0", self.goodLinks or "0", self.matchedLinks or "0") or "");
end
function frame:Cleanup()
self.totalLinks = 0
self.goodLinks = 0
self.matchedLinks = 0
self.searchTable = nil
self.idTable = nil
self.sortedTable = nil
self.Items:ClearList()
self.app.advsearch:Hide()
end
function frame:OnSelect()
if (not self.idTable) then return; end
local id = self.idTable[this.rowID]
if (arg1 ~= "LeftButton") then
elseif( IsShiftKeyDown() and ChatFrameEditBox:IsVisible() ) then
ChatFrameEditBox:Insert(self.app.common:GetTextLink(id))
elseif (IsControlKeyDown()) then
DressUpItemLink(id)
else
SetItemRef(id, self.app.common:GetTextLink(id), arg1)
end
end
Generated by GNU Enscript 1.6.5.90.