905 lines
35 KiB
Lua
905 lines
35 KiB
Lua
--[[
|
|
Auctioneer - Price Level Utility module
|
|
Version: 5.9.4961 (WhackyWallaby)
|
|
Revision: $Id: CompactUI.lua 4933 2010-10-13 17:16:14Z Nechckn $
|
|
URL: http://auctioneeraddon.com/
|
|
|
|
This is an addon for World of Warcraft that adds a price level indicator
|
|
to auctions when browsing the Auction House, so that you may readily see
|
|
which items are bargains or overpriced at a glance.
|
|
|
|
License:
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program(see GPL.txt); if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
Note:
|
|
This AddOn's source code is specifically designed to work with
|
|
World of Warcraft's interpreted AddOn system.
|
|
You have an implicit license to use this AddOn with these facilities
|
|
since that is its designated purpose as per:
|
|
http://www.fsf.org/licensing/licenses/gpl-faq.html#InterpreterIncompat
|
|
--]]
|
|
if not AucAdvanced then return end
|
|
|
|
local libType, libName = "Util", "CompactUI"
|
|
local lib,parent,private = AucAdvanced.NewModule(libType, libName)
|
|
if not lib then return end
|
|
local print,decode,_,_,replicate,empty,get,set,default,debugPrint,fill,_TRANS = AucAdvanced.GetModuleLocals()
|
|
|
|
local data
|
|
private.cache = {}
|
|
|
|
local searchname, searchminLevel, searchmaxLevel, searchinvTypeIndex, searchclassIndex, searchsubclassIndex, searchpage, searchisUsable, searchqualityIndex, searchGetAll
|
|
|
|
function lib.Processor(callbackType, ...)
|
|
if (callbackType == "config") then
|
|
private.SetupConfigGui(...)
|
|
elseif (callbackType == "auctionui") then
|
|
private.HookAH(...)
|
|
elseif callbackType == "configchanged"
|
|
or callbackType == "blockupdate" then
|
|
if (private.Active) then
|
|
private.MyAuctionFrameUpdate()
|
|
end
|
|
elseif (callbackType == "scanstats") then
|
|
private.cache = {}
|
|
end
|
|
end
|
|
|
|
lib.Processors = {}
|
|
function lib.Processors.config(callbackType, ...)
|
|
private.SetupConfigGui(...)
|
|
end
|
|
|
|
function lib.Processors.auctionui(callbackType, ...)
|
|
private.HookAH(...)
|
|
end
|
|
|
|
function lib.Processors.configchanged(callbackType, ...)
|
|
if (private.Active) then
|
|
private.MyAuctionFrameUpdate()
|
|
end
|
|
end
|
|
|
|
lib.Processors.blockupdate = lib.Processors.configchanged
|
|
|
|
function lib.Processors.scanstats(callbackType, ...)
|
|
private.cache = {}
|
|
end
|
|
|
|
|
|
local OldSortAuctionApplySort
|
|
|
|
function lib.OnLoad()
|
|
--print("AucAdvanced: {{"..libType..":"..libName.."}} loaded!")
|
|
if SortAuctionApplySort then
|
|
OldSortAuctionApplySort = SortAuctionApplySort
|
|
SortAuctionApplySort=private.QueryCurrent
|
|
end
|
|
hooksecurefunc("QueryAuctionItems", private.CopyQuery)
|
|
AucAdvanced.Settings.SetDefault("util.compactui.activated", true)
|
|
AucAdvanced.Settings.SetDefault("util.compactui.tooltiphelp", true)
|
|
AucAdvanced.Settings.SetDefault("util.compactui.collapse", false)
|
|
AucAdvanced.Settings.SetDefault("util.compactui.bidrequired", true)
|
|
AucAdvanced.Settings.SetDefault("util.browseoverride.activated", false)
|
|
end
|
|
|
|
--[[ Local functions ]]--
|
|
private.candy = {}
|
|
private.buttons = {}
|
|
function private.CopyQuery(...)
|
|
searchname, searchminLevel, searchmaxLevel, searchinvTypeIndex, searchclassIndex, searchsubclassIndex, searchpage, searchisUsable, searchqualityIndex, searchGetAll = ...
|
|
end
|
|
|
|
function private.QueryCurrent(SortTable, SortColumn, reverse)
|
|
if SortTable == "bidder" or SortTable == "owner" then
|
|
OldSortAuctionApplySort(SortTable, SortColumn, reverse)
|
|
else
|
|
QueryAuctionItems(searchname, searchminLevel, searchmaxLevel, searchinvTypeIndex, searchclassIndex, searchsubclassIndex, searchpage, searchisUsable, searchqualityIndex, searchGetAll)
|
|
end
|
|
end
|
|
|
|
--Beginner Tooltips script display for all UI elements
|
|
function private.buttonTooltips(self, text)
|
|
if get("util.compactui.tooltiphelp") and text and self then
|
|
GameTooltip:SetOwner(self, "ANCHOR_BOTTOMRIGHT")
|
|
GameTooltip:SetText(text)
|
|
end
|
|
end
|
|
|
|
function private.HookAH()
|
|
lib.inUse = true
|
|
private.switchUI:SetParent(AuctionFrameBrowse)
|
|
private.switchUI:SetPoint("TOPRIGHT", AuctionFrameBrowse, "TOPRIGHT", -157, -17)
|
|
|
|
|
|
if (not AucAdvanced.Settings.GetSetting("util.compactui.activated")) then
|
|
private.MyAuctionFrameUpdate = function() end
|
|
return
|
|
end
|
|
|
|
AuctionFrameBrowse_Update = private.MyAuctionFrameUpdate
|
|
local button, lastButton, origButton
|
|
local line
|
|
|
|
BrowseQualitySort:Hide()
|
|
BrowseLevelSort:Hide()
|
|
BrowseDurationSort:Hide()
|
|
BrowseHighBidderSort:Hide()
|
|
BrowseCurrentBidSort:Hide()
|
|
|
|
local NEW_NUM_BROWSE = 14
|
|
for i = 1, NEW_NUM_BROWSE do
|
|
if (i <= NUM_BROWSE_TO_DISPLAY) then
|
|
origButton = _G["BrowseButton"..i]
|
|
origButton:Hide()
|
|
_G["BrowseButton"..i] = nil
|
|
else
|
|
origButton = nil
|
|
end
|
|
button = CreateFrame("Button", "BrowseButton"..i, AuctionFrameBrowse)
|
|
button.Orig = origButton
|
|
button.pos = i
|
|
private.buttons[i] = button
|
|
if (i == 1) then
|
|
button:SetPoint("TOPLEFT", 188, -103)
|
|
else
|
|
button:SetPoint("TOPLEFT", lastButton, "BOTTOMLEFT")
|
|
end
|
|
button:SetWidth(610)
|
|
button:SetHeight(19)
|
|
button:EnableMouse(true)
|
|
button.LineTexture = button:CreateTexture()
|
|
button.LineTexture:SetPoint("TOPLEFT", 0,-1)
|
|
button.LineTexture:SetPoint("BOTTOMRIGHT")
|
|
button.AddTexture = button:CreateTexture()
|
|
button.AddTexture:SetPoint("TOPLEFT", 0,-1)
|
|
button.AddTexture:SetPoint("BOTTOMRIGHT")
|
|
|
|
button.Count = button:CreateFontString(nil,nil,"GameFontHighlight")
|
|
button.Count:SetPoint("TOPLEFT", button, "TOPLEFT", 0, 0)
|
|
button.Count:SetWidth(28)
|
|
button.Count:SetHeight(19)
|
|
button.Count:SetJustifyH("RIGHT")
|
|
button.Count:SetFont(STANDARD_TEXT_FONT, 11)
|
|
button.IconButton = CreateFrame("Button", "AppraiserIconButton"..i, button)
|
|
button.IconButton:SetPoint("TOPLEFT", button, "TOPLEFT", 30, 0)
|
|
button.IconButton:SetWidth(16)
|
|
button.IconButton:SetHeight(19)
|
|
button.IconButton:SetScript("OnEnter", private.IconEnter)
|
|
button.IconButton:SetScript("OnLeave", private.IconLeave)
|
|
button.IconButton:SetFrameLevel(button.IconButton:GetFrameLevel() + 5)
|
|
button.Icon = button.IconButton:CreateTexture()
|
|
button.Icon:SetPoint("TOPLEFT", button.IconButton, "TOPLEFT", 0,-2)
|
|
button.Icon:SetPoint("BOTTOMRIGHT", button.IconButton, "BOTTOMRIGHT" , 0, 1)
|
|
button.Name = button:CreateFontString(nil,nil,"GameFontHighlight")
|
|
button.Name:SetPoint("TOPLEFT", button, "TOPLEFT", 50, 0)
|
|
button.Name:SetWidth(220)
|
|
button.Name:SetHeight(19)
|
|
button.Name:SetJustifyH("LEFT")
|
|
button.Name:SetFont(STANDARD_TEXT_FONT, 10)
|
|
button.rLevel = button:CreateFontString(nil,nil,"GameFontHighlight")
|
|
button.rLevel:SetPoint("TOPLEFT", button.Name, "TOPRIGHT", 2, 0)
|
|
button.rLevel:SetWidth(30)
|
|
button.rLevel:SetHeight(19)
|
|
button.rLevel:SetJustifyH("RIGHT")
|
|
button.rLevel:SetFont(STANDARD_TEXT_FONT, 11)
|
|
button.iLevel = button:CreateFontString(nil,nil,"GameFontHighlight")
|
|
button.iLevel:SetPoint("TOPLEFT", button.rLevel, "TOPRIGHT", 2, 0)
|
|
button.iLevel:SetWidth(30)
|
|
button.iLevel:SetHeight(19)
|
|
button.iLevel:SetJustifyH("RIGHT")
|
|
button.iLevel:SetFont(STANDARD_TEXT_FONT, 11)
|
|
button.tLeft = button:CreateFontString(nil,nil,"GameFontHighlight")
|
|
button.tLeft:SetPoint("TOPLEFT", button.iLevel, "TOPRIGHT", 2, 0)
|
|
button.tLeft:SetWidth(35)
|
|
button.tLeft:SetHeight(19)
|
|
button.tLeft:SetJustifyH("CENTER")
|
|
button.tLeft:SetFont(STANDARD_TEXT_FONT, 11)
|
|
button.Owner = button:CreateFontString(nil,nil,"GameFontHighlight")
|
|
button.Owner:SetPoint("TOPLEFT", button.tLeft, "TOPRIGHT", 2, 0)
|
|
button.Owner:SetWidth(80)
|
|
button.Owner:SetHeight(19)
|
|
button.Owner:SetJustifyH("LEFT")
|
|
button.Owner:SetFont(STANDARD_TEXT_FONT, 10)
|
|
button.Bid = AucAdvanced.CreateMoney(10,110)
|
|
button.Bid:SetParent(button)
|
|
button.Bid.SetMoney = private.SetMoney
|
|
button.Bid:SetPoint("TOPRIGHT", button.Owner, "TOPRIGHT", 112, 0)
|
|
-- button.Bid:SetFrameStrata("PARENT")
|
|
button.Bid:SetDrawLayer("OVERLAY")
|
|
button.Buy = AucAdvanced.CreateMoney(10,110)
|
|
button.Buy:SetParent(button)
|
|
button.Buy.SetMoney = private.SetMoney
|
|
button.Buy:SetColor(1,0.82,0)
|
|
button.Buy:SetPoint("TOPRIGHT", button.Bid, "BOTTOMRIGHT", 0, 1)
|
|
-- button.Buy:SetFrameStrata("PARENT")
|
|
button.Buy:SetDrawLayer("OVERLAY")
|
|
button.Value = button:CreateFontString(nil,nil,"GameFontHighlight")
|
|
button.Value:SetPoint("TOPLEFT", button.Bid, "TOPRIGHT", 2, 0)
|
|
button.Value:SetWidth(45)
|
|
button.Value:SetHeight(19)
|
|
button.Value:SetJustifyH("RIGHT")
|
|
button.Value:SetFont(STANDARD_TEXT_FONT, 11)
|
|
|
|
button.SetAuction = private.SetAuction
|
|
button:SetScript("OnClick", private.ButtonClick)
|
|
|
|
lastButton = button
|
|
end
|
|
NUM_BROWSE_TO_DISPLAY = NEW_NUM_BROWSE
|
|
|
|
local function selectHeader(self, ...)
|
|
local id = self.id
|
|
private.headers.sort = 0
|
|
private.headers.dir = 0
|
|
private.headers.pos = 0
|
|
for i=1, #private.headers do
|
|
local header = private.headers[i]
|
|
if i == id then
|
|
if header.dir ~= 0 then
|
|
header.dir = header.dir * -1
|
|
if header.dir == header.defaultdir then
|
|
header.pos = header.pos + 1
|
|
end
|
|
else
|
|
header.pos = 1
|
|
header.dir = header.defaultdir
|
|
end
|
|
if header.dir > 0 then
|
|
header.Back:SetVertexColor(0.6,1,1, 1)
|
|
else
|
|
header.Back:SetVertexColor(1,0.6,1, 1)
|
|
end
|
|
if header.cycle then
|
|
local headPos = ((header.pos-1) % #header.cycle)+1
|
|
header.Text:SetText(header.cycle[headPos])
|
|
private.headers.pos = headPos
|
|
end
|
|
private.headers.sort = id
|
|
private.headers.dir = header.dir
|
|
else
|
|
header.dir = 0
|
|
header.Back:SetVertexColor(1,1,1, 0.8)
|
|
header.Text:SetText(header.Text.default)
|
|
end
|
|
end
|
|
if SortAuctionSetSort then
|
|
local sort = private.headers.sort
|
|
local dir = private.headers.dir
|
|
local col = ""
|
|
if sort then
|
|
if sort == 1 then col = "quantity" -- Count
|
|
elseif sort == 2 then --
|
|
local pos = private.headers.pos --
|
|
if pos == 1 then col = "name" -- Name
|
|
elseif pos == 2 then col = "quality" -- Quality
|
|
end --
|
|
elseif sort == 3 then col = "level" -- MinLevel
|
|
--elseif sort == 4 then col = 9 -- ItemLevel
|
|
elseif sort == 5 then col = "duration" -- TimeLeft
|
|
elseif sort == 6 then col = "seller" -- Owner
|
|
elseif sort == 7 then --
|
|
local pos = private.headers.pos --
|
|
if pos == 1 then col = "buyoutthenbid" -- Buy
|
|
elseif pos == 2 then col = "bid" -- Bid
|
|
--elseif pos == 3 then col = 18 -- BuyEach
|
|
--elseif pos == 4 then col = 17 -- BidEach
|
|
end --
|
|
--elseif sort == 8 then col = 21 -- PriceLevel
|
|
end
|
|
end
|
|
if dir > 0 then
|
|
dir = false
|
|
else
|
|
dir = true
|
|
end
|
|
if (col ~= "") then
|
|
SortAuctionSetSort("list", col, dir)
|
|
local pagesize=GetNumAuctionItems("list")
|
|
if pagesize <= 50 then
|
|
SortAuctionApplySort("list")
|
|
elseif pagesize > 50 then
|
|
pagesize = 0
|
|
end
|
|
end
|
|
end
|
|
private.MyAuctionFrameUpdate()
|
|
end
|
|
|
|
|
|
local function createHeader(id, dir, text, parentLeft, parentRight, lOfs, rOfs, cycle)
|
|
if not parentRight then parentRight = parentLeft end
|
|
|
|
local header = CreateFrame("Button", nil, private.headers)
|
|
header:SetHighlightTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight")
|
|
header:SetPoint("BOTTOMLEFT", parentLeft, "TOPLEFT", lOfs or 0, 2)
|
|
header:SetPoint("BOTTOMRIGHT", parentRight, "TOPRIGHT", rOfs or 0, 2)
|
|
header:SetHeight(16)
|
|
header.Text = header:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
|
header.Text:SetPoint("TOPLEFT", header, "TOPLEFT", 2, 0)
|
|
header.Text:SetPoint("BOTTOMRIGHT", header, "BOTTOMRIGHT")
|
|
header.Text:SetJustifyH("LEFT")
|
|
header.Text:SetJustifyV("CENTER")
|
|
header.Text:SetText(text)
|
|
header.Text.default = text
|
|
header.Back = header:CreateTexture(nil, "ARTWORK")
|
|
header.Back:SetPoint("TOPLEFT", header, "TOPLEFT")
|
|
header.Back:SetPoint("BOTTOMRIGHT", header, "BOTTOMRIGHT")
|
|
header.Back:SetTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight")
|
|
header.Back:SetTexCoord(0.1, 0.8, 0, 1)
|
|
header.Back:SetVertexColor(1,1,1, 0.8)
|
|
header:SetScript("OnClick", selectHeader)
|
|
header.defaultdir = dir
|
|
header.cycle = cycle
|
|
header.pos = 1
|
|
header.dir = 0
|
|
header.id = id
|
|
private.headers[id] = header
|
|
end
|
|
|
|
private.headers = CreateFrame("Frame", nil, AuctionFrameBrowse)
|
|
table.insert(private.candy, private.headers)
|
|
|
|
local bOne = private.buttons[1]
|
|
createHeader(1, 1, "#", bOne.Count)
|
|
createHeader(2, 1, "Auction Item", bOne.IconButton, bOne.Name, 0, 0, { "Name", "Quality" })
|
|
createHeader(3, -1, "Min", bOne.rLevel)
|
|
createHeader(4, -1, "iLvl", bOne.iLevel)
|
|
createHeader(5, 1, "Left", bOne.tLeft)
|
|
createHeader(6, 1, "Owner", bOne.Owner)
|
|
createHeader(7, -1, "Price", bOne.Value, bOne.Bid, -110, 0, {"Buy total", "Bid total", "Buy each", "Bid each"})
|
|
createHeader(8, 1, "Pct", bOne.Value, nil, 0, -2)
|
|
|
|
local tex
|
|
tex = AuctionFrameBrowse:CreateTexture()
|
|
tex:SetTexture(1,1,1, 0.05)
|
|
tex:SetPoint("TOPLEFT", private.buttons[1].rLevel, "TOPLEFT")
|
|
tex:SetPoint("BOTTOMRIGHT", private.buttons[NEW_NUM_BROWSE].rLevel, "BOTTOMRIGHT")
|
|
table.insert(private.candy, tex)
|
|
|
|
tex = AuctionFrameBrowse:CreateTexture()
|
|
tex:SetTexture(1,1,1, 0.05)
|
|
tex:SetPoint("TOPLEFT", private.buttons[1].tLeft, "TOPLEFT")
|
|
tex:SetPoint("BOTTOMRIGHT", private.buttons[NEW_NUM_BROWSE].tLeft, "BOTTOMRIGHT")
|
|
table.insert(private.candy, tex)
|
|
|
|
tex = AuctionFrameBrowse:CreateTexture()
|
|
tex:SetTexture(1,1,1, 0.05)
|
|
tex:SetPoint("TOPLEFT", private.buttons[1].Owner, "TOPRIGHT", 2, 0)
|
|
tex:SetPoint("BOTTOM", private.buttons[NEW_NUM_BROWSE].Buy, "BOTTOM", 0, 0)
|
|
tex:SetPoint("RIGHT", private.buttons[1].Bid, "RIGHT", -10, 0)
|
|
table.insert(private.candy, tex)
|
|
|
|
tex = AuctionFrameBrowse:CreateTexture()
|
|
tex:SetTexture(1,1,0.5, 0.1)
|
|
tex:SetPoint("TOPLEFT", private.buttons[NEW_NUM_BROWSE].Count, "BOTTOMLEFT", 0, -1)
|
|
tex:SetWidth(610)
|
|
tex:SetHeight(38)
|
|
table.insert(private.candy, tex)
|
|
|
|
BrowsePrevPageButton:ClearAllPoints()
|
|
BrowsePrevPageButton:SetPoint("BOTTOMRIGHT", tex, "BOTTOMRIGHT", -170, -5)
|
|
BrowseNextPageButton:ClearAllPoints()
|
|
BrowseNextPageButton:SetPoint("BOTTOMRIGHT", tex, "BOTTOMRIGHT", -5, -5)
|
|
BrowseSearchCountText:ClearAllPoints()
|
|
BrowseSearchCountText:SetPoint("BOTTOMRIGHT", tex, "BOTTOMRIGHT", -10, 27)
|
|
|
|
local check = CreateFrame("CheckButton", nil, AuctionFrameBrowse, "OptionsCheckButtonTemplate")
|
|
private.PerItem = check
|
|
check:SetChecked(false)
|
|
check:SetPoint("TOPLEFT", tex, "TOPLEFT", 5, -5)
|
|
check:SetScript("OnClick", AuctionFrameBrowse_Update)
|
|
table.insert(private.candy, check)
|
|
|
|
local text = AuctionFrameBrowse:CreateFontString(nil,nil,"GameFontNormal")
|
|
text:SetPoint("LEFT", check, "LEFT", 30, 0)
|
|
text:SetText("Show stacks as price per unit")
|
|
table.insert(private.candy, text)
|
|
|
|
text = AuctionFrameBrowse:CreateFontString(nil,nil,"GameFontNormal")
|
|
private.PageNum = text
|
|
text:SetPoint("TOPLEFT", BrowsePrevPageButton, "TOPLEFT")
|
|
text:SetPoint("BOTTOMRIGHT", BrowseNextPageButton, "BOTTOMRIGHT")
|
|
text:SetFont(STANDARD_TEXT_FONT, 12)
|
|
text:SetShadowOffset(2,2)
|
|
table.insert(private.candy, text)
|
|
|
|
private.Active = true
|
|
|
|
-- Select our PCT column
|
|
selectHeader(private.headers[8])
|
|
end
|
|
|
|
function private.SetMoney(me, value, hasBid, highBidder)
|
|
value = tonumber (value)
|
|
if not value then me:Hide() return end
|
|
value = math.floor (value)
|
|
local r,g,b
|
|
if (hasBid == true) then r,g,b = 1,1,1
|
|
elseif (hasBid == false) then r,g,b = 0.7,0.7,0.7 end
|
|
if (highBidder) then r,g,b = 0.4,1,0.2 end
|
|
me:SetValue(value, r,g,b)
|
|
me:Show()
|
|
end
|
|
|
|
function private.ButtonClick(me, mouseButton)
|
|
if ( IsControlKeyDown() ) then
|
|
DressUpItemLink(GetAuctionItemLink("list", me.id))
|
|
elseif ( IsShiftKeyDown() ) then
|
|
ChatEdit_InsertLink(GetAuctionItemLink("list", me.id))
|
|
--Display the ignore player UI
|
|
elseif (IsAltKeyDown() ) and me.Owner:GetText() then
|
|
if not AucAdvanced.Modules.Filter.Basic or not AucAdvanced.Modules.Filter.Basic.IsPlayerIgnored then private.sellerIgnore:Hide() return end
|
|
|
|
private.sellerIgnore:ClearAllPoints() private.sellerIgnore:SetPoint("TOPLEFT", me.Owner,"TOPRIGHT") private.sellerIgnore:Show()
|
|
--if toon not ignored the ignore
|
|
local seller = me.Owner:GetText()
|
|
if not AucAdvanced.Modules.Filter.Basic.IsPlayerIgnored(seller) then
|
|
private.sellerIgnore.yes:SetScript("OnClick", function() BF_IgnoreList_Add( seller ) private.sellerIgnore:Hide() end)
|
|
private.sellerIgnore.help:SetText("Add player to ignore list\n\n|CFFFFFFFF"..(seller))
|
|
else
|
|
private.sellerIgnore.yes:SetScript("OnClick", function() BF_IgnoreList_Remove( seller ) private.sellerIgnore:Hide() end)
|
|
private.sellerIgnore.help:SetText("Remove player from ignore list\n\n|CFFFFFFFF"..(seller))
|
|
end
|
|
else
|
|
if GetCVarBool("auctionDisplayOnCharacter") then
|
|
DressUpItemLink(GetAuctionItemLink("list", me.id))
|
|
end
|
|
SetSelectedAuctionItem("list", me.id)
|
|
-- Close any auction related popups
|
|
CloseAuctionStaticPopups()
|
|
AuctionFrameBrowse_Update()
|
|
end
|
|
end
|
|
|
|
function private.IconEnter(this)
|
|
local button = this:GetParent()
|
|
button.Icon:ClearAllPoints()
|
|
button.Icon:SetPoint("RIGHT", this, "LEFT")
|
|
button.Icon:SetWidth(64)
|
|
button.Icon:SetHeight(64)
|
|
AuctionFrameItem_OnEnter(this, "list", button.id)
|
|
end
|
|
|
|
function private.IconLeave(this)
|
|
local button = this:GetParent()
|
|
button.Icon:ClearAllPoints()
|
|
button.Icon:SetPoint("TOPLEFT", this, "TOPLEFT")
|
|
button.Icon:SetWidth(16)
|
|
button.Icon:SetHeight(16)
|
|
GameTooltip:Hide()
|
|
ResetCursor()
|
|
end
|
|
|
|
function private.BrowseSort(a, b)
|
|
local sort = private.headers.sort
|
|
local dir = private.headers.dir
|
|
|
|
if sort then
|
|
if sort == 1 then col = 3 -- Count
|
|
elseif sort == 2 then --
|
|
local pos = private.headers.pos --
|
|
if pos == 1 then col = 6 -- Name
|
|
elseif pos == 2 then col = 5 -- Quality
|
|
end --
|
|
elseif sort == 3 then col = 8 -- MinLevel
|
|
elseif sort == 4 then col = 9 -- ItemLevel
|
|
elseif sort == 5 then col = 10 -- TimeLeft
|
|
elseif sort == 6 then col = 11 -- Owner
|
|
elseif sort == 7 then --
|
|
local pos = private.headers.pos --
|
|
if pos == 1 then col = 16 -- Buy
|
|
elseif pos == 2 then col = 15 -- Bid
|
|
elseif pos == 3 then col = 18 -- BuyEach
|
|
elseif pos == 4 then col = 17 -- BidEach
|
|
end --
|
|
elseif sort == 8 then col = 21 -- PriceLevel
|
|
end
|
|
end
|
|
|
|
if a[col] ~= b[col] then
|
|
if dir > 0 then return (a[col] < b[col])
|
|
else return (a[col] > b[col])
|
|
end
|
|
end
|
|
if a[5] ~= b[5] then return a[5] < b[5] end
|
|
if a[6] ~= b[6] then return a[6] < b[6] end
|
|
if a[3] ~= b[3] then return a[3] < b[3] end
|
|
end
|
|
|
|
private.pageContents = {}
|
|
private.pageElements = {}
|
|
function private.RetrievePage()
|
|
for i = 1, #private.pageContents do
|
|
private.pageContents[i] = nil
|
|
end
|
|
|
|
local selected = GetSelectedAuctionItem("list") or 0
|
|
local pagesize = GetNumAuctionItems("list")
|
|
if pagesize < 50 then
|
|
pagesize = 50
|
|
elseif pagesize > 50 then --If doing a GetAll, don't show anything
|
|
pagesize = 0
|
|
end
|
|
for i = 1, pagesize do
|
|
if not private.pageElements[i] then private.pageElements[i] = {} end
|
|
|
|
local link = GetAuctionItemLink("list", i)
|
|
if link then
|
|
local item = private.pageElements[i]
|
|
|
|
item[1] = i
|
|
if (selected == i) then
|
|
item[2] = true
|
|
else
|
|
item[2] = false
|
|
end
|
|
|
|
local name, texture, count, quality, canUse, level,
|
|
minBid, minIncrement, buyoutPrice, bidAmount,
|
|
highBidder, owner = GetAuctionItemInfo("list", i)
|
|
local itemName, itemLink, itemRarity, itemLevel,
|
|
itemMinLevel, itemType, itemSubType, itemStackCount,
|
|
itemEquipLoc, itemTexture = GetItemInfo(link)
|
|
|
|
if not itemLevel then itemLevel = level end
|
|
if not itemMinLevel then itemMinLevel = level end
|
|
local timeLeft = GetAuctionItemTimeLeft("list", i)
|
|
if (timeLeft == 4) then timeLeftText = "48h"
|
|
elseif (timeLeft == 3) then timeLeftText = "12h"
|
|
elseif (timeLeft == 2) then timeLeftText = "2h"
|
|
else timeLeftText = "30m" end
|
|
if (not count or count < 1) then count = 1 end
|
|
|
|
local requiredBid
|
|
if bidAmount > 0 then
|
|
requiredBid = bidAmount + minIncrement
|
|
if buyoutPrice > 0 and requiredBid > buyoutPrice then
|
|
requiredBid = buyoutPrice
|
|
end
|
|
elseif minBid > 0 then
|
|
requiredBid = minBid
|
|
else
|
|
requiredBid = 1
|
|
end
|
|
|
|
if ( requiredBid >= MAXIMUM_BID_PRICE ) then
|
|
-- Lie about our buyout price
|
|
buyoutPrice = requiredBid
|
|
end
|
|
|
|
local priceLevel, perItem, r,g,b
|
|
local cacheSig = strjoin(":", link, count, requiredBid, buyoutPrice)
|
|
if private.cache[cacheSig] then
|
|
priceLevel, perItem, r,g,b = unpack(private.cache[cacheSig])
|
|
elseif AucAdvanced.Modules.Util.PriceLevel then
|
|
priceLevel, perItem, r,g,b = AucAdvanced.Modules.Util.PriceLevel.CalcLevel(link, count, requiredBid, buyoutPrice)
|
|
private.cache[cacheSig] = { priceLevel, perItem, r,g,b }
|
|
end
|
|
|
|
item[3] = count
|
|
item[4] = texture
|
|
item[5] = itemRarity
|
|
item[6] = name
|
|
item[7] = link
|
|
item[8] = itemMinLevel
|
|
item[9] = itemLevel
|
|
item[10] = timeLeft
|
|
item[11] = owner or ""
|
|
item[12] = minBid
|
|
item[13] = bidAmount
|
|
item[14] = minIncrement
|
|
item[15] = requiredBid
|
|
item[16] = buyoutPrice
|
|
item[17] = requiredBid / count
|
|
item[18] = buyoutPrice / count
|
|
item[19] = timeLeftText
|
|
item[20] = highBidder
|
|
item[21] = priceLevel or 0
|
|
item[22] = perItem
|
|
item[23] = r
|
|
item[24] = g
|
|
item[25] = b
|
|
|
|
table.insert(private.pageContents, item)
|
|
end
|
|
end
|
|
|
|
table.sort(private.pageContents, private.BrowseSort)
|
|
end
|
|
|
|
function lib.GetContents(pos)
|
|
if private.pageContents[pos] then
|
|
return unpack(private.pageContents[pos])
|
|
end
|
|
-- id, selected, count, texture, itemRarity, name, link, itemMinLevel, itemLevel, timeLeft, owner, minBid, bidAmount, minIncrement, requiredBid, buyoutPrice, requiredBidEach, buyoutPriceEach, timeLeftText, highBidder, priceLevel, perItem, r, g, b
|
|
end
|
|
|
|
function private.SetAuction(button, pos)
|
|
local id, selected, count, texture, itemRarity, name, link, itemMinLevel, itemLevel, timeLeft, owner, minBid, bidAmount, minIncrement, requiredBid, buyoutPrice, requiredBidEach, buyoutPriceEach, timeLeftText, highBidder, priceLevel, perItem, r, g, b = lib.GetContents(pos)
|
|
|
|
if not id then
|
|
button:Hide()
|
|
return
|
|
end
|
|
|
|
if (selected) then
|
|
button.LineTexture:SetTexture(1,1,0.3, 0.2)
|
|
elseif (pos % 2 == 0) then
|
|
button.LineTexture:SetTexture(0.3,0.3,0.4, 0.1)
|
|
else
|
|
button.LineTexture:SetTexture(0,0,0.1, 0.1)
|
|
end
|
|
button.id = id
|
|
|
|
local showBid
|
|
if (AucAdvanced.Settings.GetSetting("util.compactui.bidrequired")) then
|
|
showBid = requiredBid
|
|
else
|
|
showBid = max (bidAmount, minBid)
|
|
end
|
|
|
|
if (selected) then
|
|
if (buyoutPrice > 0 and buyoutPrice >= minBid) then
|
|
local canBuyout = 1
|
|
if (GetMoney() < buyoutPrice) then
|
|
if (not highBidder or GetMoney()+bidAmount < buyoutPrice) then
|
|
canBuyout = nil
|
|
end
|
|
end
|
|
if (canBuyout) then
|
|
BrowseBuyoutButton:Enable()
|
|
AuctionFrame.buyoutPrice = buyoutPrice
|
|
end
|
|
else
|
|
AuctionFrame.buyoutPrice = nil
|
|
end
|
|
-- Set bid
|
|
MoneyInputFrame_SetCopper(BrowseBidPrice, requiredBid)
|
|
|
|
-- See if the user can bid on this
|
|
if (not highBidder and owner ~= UnitName("player")) then
|
|
if (GetMoney() >= MoneyInputFrame_GetCopper(BrowseBidPrice)) then
|
|
if (MoneyInputFrame_GetCopper(BrowseBidPrice) <= MAXIMUM_BID_PRICE) then
|
|
BrowseBidButton:Enable()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
--if player is ignored then color name red otherwise set normal
|
|
if owner and AucAdvanced.Modules.Filter.Basic and AucAdvanced.Modules.Filter.Basic.IsPlayerIgnored and AucAdvanced.Modules.Filter.Basic.IsPlayerIgnored(owner) then
|
|
button.Owner:SetTextColor(1,0,0)
|
|
else
|
|
button.Owner:SetTextColor(1,1,1)
|
|
end
|
|
|
|
local perUnit = 1
|
|
if (private.PerItem:GetChecked()) then
|
|
perUnit = count
|
|
end
|
|
|
|
if itemLevel == 0 then itemLevel = "" end
|
|
if itemMinLevel == 0 then itemMinLevel = "" end
|
|
|
|
button.Count:SetText(count)
|
|
button.Icon:SetTexture(texture)
|
|
button.Name:SetText(link)
|
|
button.rLevel:SetText(itemMinLevel)
|
|
button.iLevel:SetText(itemLevel)
|
|
button.tLeft:SetText(timeLeftText)
|
|
button.Owner:SetText(owner)
|
|
button.Bid:SetMoney(showBid/perUnit, (bidAmount > 0), highBidder)
|
|
button.Buy:SetMoney((buyoutPrice > 0) and buyoutPrice/perUnit)
|
|
button:Show()
|
|
end
|
|
|
|
function private.MyAuctionFrameUpdate()
|
|
if not BrowseScrollFrame then return end
|
|
|
|
if WOWEcon_AH_PerItem_Enable
|
|
and WOWEcon_AH_PerItem_Enable:IsVisible() then
|
|
WOWEcon_AH_PerItem_Enable:Hide()
|
|
end
|
|
|
|
if AucAdvanced.API.IsBlocked() then
|
|
for pos, candy in ipairs(private.candy) do candy:Hide() end
|
|
BrowsePrevPageButton:Hide()
|
|
BrowseNextPageButton:Hide()
|
|
BrowseSearchCountText:Hide()
|
|
return
|
|
end
|
|
|
|
local numBatchAuctions, totalAuctions = GetNumAuctionItems("list")
|
|
local offset = FauxScrollFrame_GetOffset(BrowseScrollFrame)
|
|
local index, button
|
|
BrowseBidButton:Disable()
|
|
BrowseBuyoutButton:Disable()
|
|
if (numBatchAuctions > 50) then
|
|
numBatchAuctions = 0
|
|
totalAuctions = 0
|
|
end
|
|
|
|
if ( numBatchAuctions == 0 ) then
|
|
BrowseNoResultsText:Show()
|
|
else
|
|
BrowseNoResultsText:Hide()
|
|
end
|
|
|
|
private.RetrievePage()
|
|
local pagesize = GetNumAuctionItems("list")
|
|
if pagesize < 50 then
|
|
pagesize = 50
|
|
elseif pagesize > 50 then
|
|
pagesize = 0
|
|
end
|
|
for i=1, NUM_BROWSE_TO_DISPLAY do
|
|
index = offset + i + (pagesize * AuctionFrameBrowse.page)
|
|
button = private.buttons[i]
|
|
if ( index > (numBatchAuctions + (pagesize * AuctionFrameBrowse.page)) ) then
|
|
button:SetAuction()
|
|
-- If the last button is empty then set isLastSlotEmpty var
|
|
if ( i == NUM_BROWSE_TO_DISPLAY ) then
|
|
isLastSlotEmpty = 1
|
|
end
|
|
else
|
|
button:SetAuction(offset+i)
|
|
end
|
|
end
|
|
|
|
if (totalAuctions > 0) then
|
|
for pos, candy in ipairs(private.candy) do candy:Show() end
|
|
BrowsePrevPageButton:Show()
|
|
BrowseNextPageButton:Show()
|
|
BrowseSearchCountText:Show()
|
|
local itemsMin = AuctionFrameBrowse.page * pagesize + 1
|
|
local itemsMax = itemsMin + numBatchAuctions - 1
|
|
BrowseSearchCountText:SetText(format(NUMBER_OF_RESULTS_TEMPLATE, itemsMin, itemsMax, totalAuctions ))
|
|
if ( isLastSlotEmpty ) then
|
|
if ( AuctionFrameBrowse.page == 0 ) then
|
|
BrowsePrevPageButton.isEnabled = nil
|
|
else
|
|
BrowsePrevPageButton.isEnabled = 1
|
|
end
|
|
if ( AuctionFrameBrowse.page == (ceil(totalAuctions/pagesize) - 1) ) then
|
|
BrowseNextPageButton.isEnabled = nil
|
|
else
|
|
BrowseNextPageButton.isEnabled = 1
|
|
end
|
|
else
|
|
BrowsePrevPageButton.isEnabled = nil
|
|
BrowseNextPageButton.isEnabled = nil
|
|
end
|
|
else
|
|
for pos, candy in ipairs(private.candy) do candy:Hide() end
|
|
BrowsePrevPageButton:Hide()
|
|
BrowseNextPageButton:Hide()
|
|
BrowseSearchCountText:Hide()
|
|
end
|
|
|
|
private.PageNum:SetText(("%d/%d"):format(AuctionFrameBrowse.page+1, ceil(totalAuctions/pagesize)))
|
|
FauxScrollFrame_Update(BrowseScrollFrame, numBatchAuctions, NUM_BROWSE_TO_DISPLAY, AUCTIONS_BUTTON_HEIGHT)
|
|
BrowseScrollFrame:Show()
|
|
AucAdvanced.API.ListUpdate()
|
|
end
|
|
|
|
--create the configure UI button.
|
|
private.switchUI = CreateFrame("Button", nil, UIParent, "OptionsButtonTemplate")
|
|
private.switchUI:SetWidth(100)
|
|
private.switchUI:SetHeight(15)
|
|
private.switchUI:SetText("Configure")
|
|
private.switchUI:SetScript("OnClick", function()
|
|
if private.gui and private.gui:IsShown() then
|
|
AucAdvanced.Settings.Hide()
|
|
else
|
|
AucAdvanced.Settings.Show()
|
|
private.gui:ActivateTab(private.guiID)
|
|
end
|
|
end)
|
|
private.switchUI:SetScript("OnEnter", function() private.buttonTooltips(private.switchUI, "Open the configuration options for the CompactUI window.") end)
|
|
private.switchUI:SetScript("OnLeave", function() GameTooltip:Hide() end)
|
|
|
|
--ignore/unignore seller GUI
|
|
private.sellerIgnore = CreateFrame("Frame", nil, UiParent)
|
|
private.sellerIgnore:Hide()
|
|
private.sellerIgnore:SetBackdrop({
|
|
bgFile = "Interface/Tooltips/ChatBubble-Background",
|
|
edgeFile = "Interface/Minimap/TooltipBackdrop",
|
|
tile = true, tileSize = 32, edgeSize = 10,
|
|
insets = { left = 2, right = 2, top = 2, bottom = 2 }
|
|
})
|
|
private.sellerIgnore:SetBackdropColor(0,0,0, 1)
|
|
private.sellerIgnore:SetWidth(100)
|
|
private.sellerIgnore:SetHeight(70)
|
|
private.sellerIgnore:SetPoint("CENTER", UIParent, "CENTER")
|
|
private.sellerIgnore:SetFrameStrata("TOOLTIP")
|
|
private.sellerIgnore:SetScale(0.7)
|
|
|
|
private.sellerIgnore.help = private.sellerIgnore:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall" )
|
|
private.sellerIgnore.help:SetParent(private.sellerIgnore)
|
|
private.sellerIgnore.help:SetPoint("CENTER", private.sellerIgnore, "TOP", 0, -25)
|
|
private.sellerIgnore.help:SetWidth(100)
|
|
|
|
private.sellerIgnore.yes = CreateFrame("Button", nil, private.sellerIgnore, "UIPanelButtonTemplate")
|
|
private.sellerIgnore.yes:SetNormalFontObject(GameFontNormalSmall)
|
|
private.sellerIgnore.yes:SetPoint("BOTTOMLEFT", private.sellerIgnore, "BOTTOMLEFT", 5, 10)
|
|
private.sellerIgnore.yes:SetScript("OnClick", function() BF_IgnoreList_Add( name ) end)
|
|
private.sellerIgnore.yes:SetText("Yes")
|
|
private.sellerIgnore.yes:SetWidth(30)
|
|
private.sellerIgnore.yes:SetHeight(10)
|
|
local font = private.sellerIgnore.yes:GetFontString()
|
|
font:SetFontObject("GameFontNormalSmall" )
|
|
font:SetTextHeight(10)
|
|
|
|
private.sellerIgnore.no = CreateFrame("Button", nil, private.sellerIgnore, "UIPanelButtonTemplate")
|
|
private.sellerIgnore.no:SetNormalFontObject(GameFontNormalSmall)
|
|
private.sellerIgnore.no:SetPoint("BOTTOMRIGHT", private.sellerIgnore, "BOTTOMRIGHT", -5, 10)
|
|
private.sellerIgnore.no:SetScript("OnClick", function() private.sellerIgnore:Hide() end)
|
|
private.sellerIgnore.no:SetText("No")
|
|
private.sellerIgnore.no:SetWidth(30)
|
|
private.sellerIgnore.no:SetHeight(10)
|
|
local font = private.sellerIgnore.no:GetFontString()
|
|
font:SetFontObject("GameFontNormalSmall" )
|
|
font:SetTextHeight(10)
|
|
|
|
function private.SetupConfigGui(gui)
|
|
-- The defaults for the following settings are set in the lib.OnLoad function
|
|
local id = gui:AddTab(libName, libType.." Modules")
|
|
private.gui = gui --stores our ID id we use this to open the config button to correct frame
|
|
private.guiID = id
|
|
|
|
gui:AddHelp(id, "what compactui",
|
|
_TRANS('COMP_Help_WhatCompactUI'), -- "What is CompactUI?"
|
|
_TRANS('COMP_Help_WhatCompactUIAnswer')) --"CompactUI is a space optimized browse interface to replace the default Blizzard auction browse interface. \nDue to the fact that it heavily modifies your auction frames, it may cause it to be incompatible with other addons that also modify the auction frames. If this is the case you will have to make a choice between CompactUI and the other addons. You may disable CompactUI easily by unticking the \"Enable use of CompactUI (requires logout)\" option in the settings window."
|
|
|
|
gui:AddControl(id, "Header", 0, libName.." options")
|
|
gui:AddControl(id, "Checkbox", 0, 1, "util.compactui.activated", _TRANS('COMP_Interface_CompActivated')) --"Enable use of CompactUI (requires logout)"
|
|
gui:AddTip(id, _TRANS('COMP_HelpTooltip_CompActivated')) --"Ticking this box will enable CompactUI to take over your auction browse window after your next reload.")
|
|
gui:AddControl(id, "Note", 0, 2, 600, 70, _TRANS('COMP_Interface_CompWarning')) --"Note: This module heavily modifies your standard auction browser window, and may not play well with other auction house addons. Should you enable this module and notice any incompatabilities, please turn this module off again by unticking the above box and reloading your interface."
|
|
|
|
gui:AddControl(id, "Checkbox", 0, 1, "util.compactui.tooltiphelp", _TRANS('COMP_Interface_CompTooltipHelp')) --"Displays the pop up help tooltips"
|
|
gui:AddTip(id, _TRANS('COMP_HelpTooltip_CompTooltipHelp')) --"This option will display popup help tooltips on the CompactUI display"
|
|
gui:AddControl(id, "Checkbox", 0, 1, "util.compactui.collapse", _TRANS('COMP_Interface_CompCollapse')) --"Remove smaller denomination coins when it's zero"
|
|
gui:AddTip(id, _TRANS('COMP_HelpTooltip_CompCollapse')) --"This option will cause lower value coins to be hidden when the hiding would not change the value of the displayed price."
|
|
gui:AddControl(id, "Checkbox", 0, 1, "util.compactui.bidrequired", _TRANS('COMP_Interface_CompBidRequired')) --"Show the required bid instead of the current bid value"
|
|
gui:AddTip(id, _TRANS('COMP_HelpTooltip_CompBidRequired')) --"Toggling this option changes CompactUI's behaviour to show the required bid."
|
|
gui:AddControl(id, "Checkbox", 0, 1, "util.browseoverride.activated", _TRANS('COMP_Interface_BrowserOverRide')) --"Prevent other modules from changing the display of the browse tab while scanning"
|
|
gui:AddTip(id, _TRANS('COMP_HelpTooltip_BrowseOverRide')) --"Enabling this option will allow CompactUI to continue displaying the auction data, even when another module is installed to hide the display of auctions while scanning."
|
|
|
|
gui:AddHelp(id, "what is popup",
|
|
_TRANS('COMP_Help_WhatPopup'), --"What does enabling the popup help do?"
|
|
_TRANS('COMP_Help_WhatPopupAnswer')) --"Displays a little popup tooltip over various parts of the CompactUI."
|
|
|
|
gui:AddHelp(id, "what is collapse",
|
|
_TRANS('COMP_Help_WhatCollapse'), --"What does removing smaller denomination coins do?",
|
|
_TRANS('COMP_Help_WhatCollapseAnswer')) --"Removing smaller denomination coins removes coins from the lowest order when the coins are zero and their removal would not affect the accuracy of the price display. \nThis has the effect of shortening the length of the displayed prices, however it can cause additional confusion over similar length prices that are of a different order (ie: 1s 55c looks like 1g 55s) and if you're not careful, you may spend more than you meant to."
|
|
|
|
gui:AddHelp(id, "what is required",
|
|
_TRANS('COMP_Help_WhatRequied'), --"What is the required bid?",
|
|
_TRANS('COMP_Help_WhatRequiedAnswered')) --"The stock standard interface shows you the current bid. In the case where the current bid is not the minimum (or starting) bid, your actual amount when you bid on this item will be the current bid, plus the minimum increment. Therefore what you pay will be more than what is displayed in the window when you are not the first bidder. By ticking this option, you change CompactUI's behaviour to instead show the required bid that you will need to bid, so that no matter if there is a bid or not, what you see is what you will pay."
|
|
|
|
gui:AddHelp(id, "what is browseoverride",
|
|
_TRANS('COMP_Help_WhatBrowseOverride'), --"Why do I want to prevent other modules from changing the Browse window?"
|
|
_TRANS('COMP_Help_WhatBrowseOverrideAnswer')) --"If you have a module such as ScanProgress installed and activated, it will change the browse interface so that you cannot see the items as you are scanning. This option will revert the display so that you can see the items while scanning instead."
|
|
|
|
gui:AddHelp(id, "what is playerignore",
|
|
_TRANS('COMP_Help_HowToIgnore'), --"How do I ignore a seller's auctions?"
|
|
_TRANS('COMP_Help_HowToIgnoreAnswer')) --"ALT click on the seller you wish to ignore and select yes in the pop up window. The seller's name will be marked in red and placed in the BASIC FILTER module's ignored list."
|
|
gui:AddHelp(id, "what is playerunignore",
|
|
_TRANS('COMP_Help_HowToUnignore'), --"How do I un-ignore a seller's auctions?"
|
|
_TRANS('COMP_Help_HowToUnignoreAnswer')) --"ALT click on the seller you wish to remove from ignore and select yes in the pop up window. The seller's name will be removed from the BASIC FILTER module's ignored list."
|
|
|
|
end
|
|
|
|
AucAdvanced.RegisterRevision("$URL: http://svn.norganna.org/auctioneer/branches/5.9/Auc-Util-CompactUI/CompactUI.lua $", "$Rev: 4933 $")
|