815 lines
37 KiB
Lua
815 lines
37 KiB
Lua
--[[
|
|
Auctioneer Addon for World of Warcraft(tm).
|
|
Version: 5.9.4961 (WhackyWallaby)
|
|
Revision: $Id: BeanCounterFrames.lua 4880 2010-09-15 20:02:11Z Nechckn $
|
|
URL: http://auctioneeraddon.com/
|
|
|
|
BeanCounterFrames - AuctionHouse UI for Beancounter
|
|
|
|
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 it's designated purpose as per:
|
|
http://www.fsf.org/licensing/licenses/gpl-faq.html#InterpreterIncompat
|
|
]]
|
|
LibStub("LibRevision"):Set("$URL: http://svn.norganna.org/auctioneer/branches/5.9/BeanCounter/BeanCounterFrames.lua $","$Rev: 4880 $","5.1.DEV.", 'auctioneer', 'libs')
|
|
|
|
local lib = BeanCounter
|
|
local private, print, get, set, _BC = lib.getLocals()
|
|
|
|
local function debugPrint(...)
|
|
if get("util.beancounter.debugFrames") then
|
|
private.debugPrint("BeanCounterFrames",...)
|
|
end
|
|
end
|
|
|
|
local frame
|
|
local auctionUICreated
|
|
function private.AuctionUI()
|
|
if auctionUICreated then return end
|
|
frame = private.frame
|
|
|
|
--Create the TAB
|
|
frame.ScanTab = CreateFrame("Button", "AuctionFrameTabUtilBeanCounter", AuctionFrame, "AuctionTabTemplate")
|
|
frame.ScanTab:SetText("BeanCounter")
|
|
frame.ScanTab:SetScript("OnEnter", function() private.buttonTooltips( frame.ScanTab, _BC('TT_BeanCounterAHTab')) end) -- Right click to display BeanCounter in a external window.
|
|
frame.ScanTab:SetScript("OnLeave", function() GameTooltip:Hide() end)
|
|
frame.ScanTab:RegisterForClicks("LeftButtonUp" , "RightButtonUp")
|
|
frame.ScanTab:Show()
|
|
PanelTemplates_DeselectTab(frame.ScanTab)
|
|
|
|
if AucAdvanced then
|
|
AucAdvanced.AddTab(frame.ScanTab, frame)
|
|
else
|
|
private.AddTab(frame.ScanTab, frame)
|
|
end
|
|
local last = 1
|
|
function frame.ScanTab.OnClick(self, button, index)
|
|
if not index then index = self:GetID() end
|
|
local tab = _G["AuctionFrameTab"..index]
|
|
|
|
if button == "RightButton" and tab and tab:GetName() == "AuctionFrameTabUtilBeanCounter" then
|
|
local tab = _G["AuctionFrameTab"..last]
|
|
tab:Click() --use this so we stay on users currently selected tab
|
|
private.displayGUI( )
|
|
return
|
|
end
|
|
last = index
|
|
|
|
if (tab and tab:GetName() == "AuctionFrameTabUtilBeanCounter") then
|
|
--Modified Textures
|
|
AuctionFrameTopLeft:SetTexture("Interface\\AddOns\\BeanCounter\\Textures\\BC-TopLeft")
|
|
AuctionFrameTop:SetTexture("Interface\\AddOns\\BeanCounter\\Textures\\BC-Top")
|
|
AuctionFrameTopRight:SetTexture("Interface\\AddOns\\BeanCounter\\Textures\\BC-TopRight")
|
|
--Default AH textures
|
|
AuctionFrameBotLeft:SetTexture("Interface\\AuctionFrame\\UI-AuctionFrame-Bid-BotLeft")
|
|
AuctionFrameBot:SetTexture("Interface\\AuctionFrame\\UI-AuctionFrame-Bid-Bot")
|
|
AuctionFrameBotRight:SetTexture("Interface\\AuctionFrame\\UI-AuctionFrame-Bid-BotRight")
|
|
|
|
if (AuctionDressUpFrame:IsVisible()) then
|
|
AuctionDressUpFrame:Hide()
|
|
AuctionDressUpFrame.reshow = true
|
|
end
|
|
private.displayGUI("ShowAHGUI")
|
|
else
|
|
if (AuctionDressUpFrame.reshow) then
|
|
AuctionDressUpFrame:Show()
|
|
AuctionDressUpFrame.reshow = nil
|
|
end
|
|
AuctionFrameMoneyFrame:Show()
|
|
private.displayGUI("HideAHGUI")
|
|
end
|
|
end
|
|
auctionUICreated = true
|
|
hooksecurefunc("AuctionFrameTab_OnClick", frame.ScanTab.OnClick)
|
|
end
|
|
|
|
--function handles showing the standalone or intergrated UI
|
|
function private.displayGUI( action )
|
|
frame = private.frame
|
|
|
|
if action == "HideAHGUI" then --hide unless is on the external GUI
|
|
if not BeanCounterBaseFrame:IsVisible() then
|
|
frame:Hide()
|
|
else --when tab is created frame parent is set to AH, we dont want this
|
|
frame:SetParent("BeanCounterBaseFrame")
|
|
frame:SetAllPoints(BeanCounterBaseFrame)
|
|
end
|
|
elseif action == "ShowAHGUI" then
|
|
frame:SetParent(AuctionFrame)
|
|
frame:SetAllPoints("AuctionFrame")
|
|
private.relevelFrame(frame)--make sure our frame stays in proper order
|
|
BeanCounterBaseFrame:Hide()
|
|
frame:Show()
|
|
elseif BeanCounterBaseFrame:IsVisible() then
|
|
BeanCounterBaseFrame:Hide()
|
|
frame:Hide()
|
|
else
|
|
frame:SetParent("BeanCounterBaseFrame")
|
|
frame:SetAllPoints(BeanCounterBaseFrame)
|
|
private.relevelFrame(frame)--make sure our frame stays in proper order
|
|
BeanCounterBaseFrame:Show()
|
|
frame:Show()
|
|
end
|
|
--show the last postponed query if one was sent while frame was hidden
|
|
if private.storedQuery and frame:IsVisible() then
|
|
private.searchByItemID(private.storedQuery)
|
|
private.storedQuery = nil
|
|
end
|
|
end
|
|
--Change parent to our GUI base frame/ Also used to display our Config frame
|
|
function private.GUI(_, button)
|
|
if (button == "LeftButton") then
|
|
private.displayGUI()
|
|
else
|
|
if not lib.Gui:IsVisible() then
|
|
lib.Gui:Show()
|
|
else
|
|
lib.Gui:Hide()
|
|
end
|
|
end
|
|
end
|
|
|
|
--Seperated frame items from frame creation, this should allow the same code to be reused for AH UI and Standalone UI
|
|
function private.CreateFrames()
|
|
|
|
--Create the base frame for external GUI
|
|
local base = CreateFrame("Frame", "BeanCounterBaseFrame", UIParent)
|
|
base:SetFrameStrata("HIGH")
|
|
base:SetBackdrop({
|
|
bgFile = "Interface/Tooltips/ChatBubble-Background",
|
|
edgeFile = "Interface/Tooltips/ChatBubble-BackDrop",
|
|
tile = true, tileSize = 32, edgeSize = 32,
|
|
insets = { left = 32, right = 32, top = 32, bottom = 32 }
|
|
})
|
|
base:SetBackdropColor(0,0,0, 1)
|
|
base:Hide()
|
|
|
|
base:SetPoint("CENTER", UIParent, "CENTER")
|
|
base:SetWidth(834.5)
|
|
base:SetHeight(450)
|
|
|
|
|
|
base:SetMovable(true)
|
|
base:EnableMouse(true)
|
|
base:SetToplevel(true)
|
|
base:SetResizable(true)
|
|
base:SetMinResize(834, 450)
|
|
base:SetMaxResize(1500, 450)
|
|
|
|
--resize button for base GUI
|
|
base.Resizer = CreateFrame("Button", nil, base)
|
|
base.Resizer:SetPoint("BOTTOMRIGHT", base, "BOTTOMRIGHT", -8, 8)
|
|
base.Resizer:SetHeight(32)
|
|
base.Resizer:SetWidth(32)
|
|
base.Resizer:SetHighlightTexture("Interface\\Buttons\\UI-Common-MouseHilight")
|
|
base.Resizer:SetNormalTexture("Interface\\Buttons\\UI-SpellbookIcon-NextPage-Up")
|
|
base.Resizer:SetScript("OnMouseDown", function() base:StartSizing() end)
|
|
base.Resizer:SetScript("OnMouseUp", function() base:StopMovingOrSizing() end)
|
|
base.Resizer:SetScript("OnEnter", function() private.buttonTooltips( base.Resizer, _BC('Click and drag to resize window')) end)
|
|
base.Resizer:SetScript("OnLeave", function() GameTooltip:Hide() end)
|
|
|
|
|
|
base.Drag = CreateFrame("Button", nil, base)
|
|
base.Drag:SetPoint("TOPLEFT", base, "TOPLEFT", 10,-5)
|
|
base.Drag:SetPoint("TOPRIGHT", base, "TOPRIGHT", -10,-5)
|
|
base.Drag:SetHeight(6)
|
|
base.Drag:SetHighlightTexture("Interface\\FriendsFrame\\UI-FriendsFrame-HighlightBar")
|
|
|
|
base.Drag:SetScript("OnMouseDown", function() base:StartMoving() end)
|
|
base.Drag:SetScript("OnMouseUp", function() base:StopMovingOrSizing() private.setter("configator.left", base:GetLeft()) private.setter("configator.top", base:GetTop()) end)
|
|
|
|
base.DragBottom = CreateFrame("Button",nil, base)
|
|
base.DragBottom:SetPoint("BOTTOMLEFT", base, "BOTTOMLEFT", 10,5)
|
|
base.DragBottom:SetPoint("BOTTOMRIGHT", base, "BOTTOMRIGHT", -10,5)
|
|
base.DragBottom:SetHeight(6)
|
|
base.DragBottom:SetHighlightTexture("Interface\\FriendsFrame\\UI-FriendsFrame-HighlightBar")
|
|
|
|
base.DragBottom:SetScript("OnMouseDown", function() base:StartMoving() end)
|
|
base.DragBottom:SetScript("OnMouseUp", function() base:StopMovingOrSizing() private.setter("configator.left", base:GetLeft()) private.setter("configator.top", base:GetTop()) end)
|
|
|
|
--Close BeanCounter GUI Config frame
|
|
base.Done = CreateFrame("Button", nil, base, "OptionsButtonTemplate")
|
|
base.Done:SetPoint("BOTTOMRIGHT", base, "BOTTOMRIGHT", -50, 10)
|
|
base.Done:SetScript("OnClick", function() base:Hide() end)
|
|
base.Done:SetText(_BC('UiDone'))
|
|
|
|
--Create the Actual Usable Frame
|
|
local frame = CreateFrame("Frame", "BeanCounterUiFrame", base)
|
|
private.frame = frame
|
|
frame:Hide()
|
|
|
|
private.frame:SetPoint("TOPLEFT", base, "TOPLEFT")
|
|
private.frame:SetWidth(828)
|
|
private.frame:SetHeight(450)
|
|
|
|
--Add Title to the Top
|
|
local title = frame:CreateFontString(nil, "OVERLAY", "GameFontNormalLarge")
|
|
title:SetPoint("TOPLEFT", frame, "TOPLEFT", 80, -17)
|
|
title:SetText(_BC("UiAddonTitle"))
|
|
|
|
local SelectBox = LibStub:GetLibrary("SelectBox")
|
|
local ScrollSheet = LibStub:GetLibrary("ScrollSheet")
|
|
|
|
--Beginner Tooltips script display for all UI elements
|
|
function private.buttonTooltips(self, text)
|
|
if get("util.beancounter.displaybeginerTooltips") and text and self then
|
|
GameTooltip:SetOwner(self, "ANCHOR_BOTTOMRIGHT")
|
|
GameTooltip:SetText(text)
|
|
end
|
|
end
|
|
|
|
--Add Configuration Button for those who dont use sidebar.
|
|
frame.Config = CreateFrame("Button", nil, frame, "OptionsButtonTemplate")
|
|
frame.Config:SetPoint("TOPRIGHT", frame, "TOPRIGHT", -139, -13)
|
|
frame.Config:SetScript("OnClick", function() private.GUI() end)
|
|
frame.Config:SetText("Configure")
|
|
frame.Config:SetScript("OnEnter", function() private.buttonTooltips( frame.Config, _BC('TTOpenconfig')) end)--"Opens the BeanCounter configuration window"
|
|
frame.Config:SetScript("OnLeave", function() GameTooltip:Hide() end)
|
|
|
|
|
|
|
|
--ICON box, used to drag item and display ICo for item being searched. Based Appraiser Code
|
|
function frame.IconClicked()
|
|
local objtype, _, link = GetCursorInfo()
|
|
ClearCursor()
|
|
if objtype == "item" then
|
|
local itemID = lib.API.decodeLink(link)
|
|
local _, itemName = lib.API.getItemString(link)
|
|
local itemTexture = select(2, private.getItemInfo(link, "name"))
|
|
frame.searchBox:SetText(itemName)
|
|
private.searchByItemID(itemID, private.getCheckboxSettings(), nil, 150, itemTexture, itemName)
|
|
end
|
|
end
|
|
|
|
frame.slot = frame:CreateTexture(nil, "BORDER")
|
|
frame.slot:SetPoint("TOPLEFT", frame, "TOPLEFT", 23, -125)
|
|
frame.slot:SetWidth(45)
|
|
frame.slot:SetHeight(45)
|
|
frame.slot:SetTexCoord(0.15, 0.85, 0.15, 0.85)
|
|
frame.slot:SetTexture("Interface\\Buttons\\UI-EmptySlot")
|
|
|
|
frame.icon = CreateFrame("Button", nil, frame)
|
|
frame.icon:SetPoint("TOPLEFT", frame.slot, "TOPLEFT", 3, -3)
|
|
frame.icon:SetWidth(38)
|
|
frame.icon:SetHeight(38)
|
|
frame.icon:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square.blp")
|
|
frame.icon:SetScript("OnClick", frame.IconClicked)
|
|
frame.icon:SetScript("OnReceiveDrag", frame.IconClicked)
|
|
frame.icon:SetScript("OnEnter", function() private.buttonTooltips( frame.icon, _BC('TT_ItemIconBox')) end) --"Drop an item here to start a search for it.\nDisplays current search's icon if possible"
|
|
frame.icon:SetScript("OnLeave", function() GameTooltip:Hide() end)
|
|
|
|
--help text
|
|
frame.slot.help = frame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
|
frame.slot.help:SetPoint("LEFT", frame.slot, "RIGHT", 2, 7)
|
|
frame.slot.help:SetText(_BC('HelpGuiItemBox')) --"Drop item into box to search."
|
|
frame.slot.help:SetWidth(100)
|
|
|
|
--Select box, used to chooose where the stats comefrom we show server/faction/player/all
|
|
frame.SelectBoxSetting = {"1","server"}
|
|
function private.ChangeControls(obj, arg1,arg2,...)
|
|
frame.SelectBoxSetting = {arg1, arg2}
|
|
end
|
|
--Default Server wide
|
|
--Used GLOBALSTRINGS for the horde alliance translations
|
|
local vals = {{"server", private.realmName.." ".._BC('UiData')},{"alliance", FACTION_ALLIANCE.." ".._BC('UiData')},{"horde", FACTION_HORDE.." ".._BC('UiData')}, {"neutral", _BC('MailNeutralAuctionHouse')}}
|
|
for name,data in pairs(private.serverData) do
|
|
table.insert(vals,{name, name.." ".._BC('UiData')})
|
|
end
|
|
|
|
frame.selectbox = CreateFrame("Frame", "BeanCounterSelectBox", frame)
|
|
frame.selectbox.box = SelectBox:Create("BeanCounterSelectBox", frame.selectbox, 140, private.ChangeControls, vals, "default")
|
|
frame.selectbox.box:SetPoint("TOPLEFT", frame, "TOPLEFT", 4,-80)
|
|
frame.selectbox.box.element = "selectBox"
|
|
frame.selectbox.box:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
|
|
frame.selectbox.box:SetPoint("BOTTOMLEFT", frame, "TOPLEFT", 0,-90)
|
|
frame.selectbox.box:SetText(private.realmName.." ".._BC('UiData'))
|
|
frame.selectbox.box.button:SetScript("OnEnter", function() private.buttonTooltips( frame.selectbox.box.button, _BC('TT_BeanCounterSelectBox')) end)--"Filter search results by server, player, faction"
|
|
frame.selectbox.box.button:SetScript("OnLeave", function() GameTooltip:Hide() end)
|
|
|
|
--Search box
|
|
frame.searchBox = CreateFrame("EditBox", "BeancountersearchBox", frame, "InputBoxTemplate")
|
|
frame.searchBox:SetPoint("TOPLEFT", frame, "TOPLEFT", 29, -180)
|
|
frame.searchBox:SetAutoFocus(false)
|
|
frame.searchBox:SetHeight(15)
|
|
frame.searchBox:SetWidth(150)
|
|
frame.searchBox:SetScript("OnEnterPressed", function()
|
|
local itemName = frame.searchBox:GetText()
|
|
-- Allow beancounter searches to add the text to the AH frame
|
|
if AuctionFrame and get("sendSearchBrowseFrame") then
|
|
BrowseName:SetText(itemName)
|
|
end
|
|
private.startSearch(itemName, private.getCheckboxSettings())
|
|
end)
|
|
frame.searchBox:SetScript("OnEnter", function() private.buttonTooltips( frame.searchBox, _BC("TT_SearchBox")) end) --"Enter search query's here or leave blank to search all"
|
|
frame.searchBox:SetScript("OnLeave", function() GameTooltip:Hide() end)
|
|
|
|
|
|
--Search Button
|
|
frame.searchButton = CreateFrame("Button", nil, frame, "OptionsButtonTemplate")
|
|
frame.searchButton:SetPoint("TOPLEFT", frame.searchBox, "BOTTOMLEFT", -6, -1)
|
|
frame.searchButton:SetText(_BC('UiSearch'))
|
|
frame.searchButton:SetScript("OnClick", function()
|
|
local itemName = frame.searchBox:GetText()
|
|
-- Allow beancounter searches to add the text to the AH frame
|
|
if AuctionFrame and get("sendSearchBrowseFrame") then
|
|
BrowseName:SetText(itemName)
|
|
end
|
|
private.startSearch(itemName, private.getCheckboxSettings())
|
|
end)
|
|
--Clicking for BC search --Thanks for the code Rockslice
|
|
function private.ClickBagHook(_, _, self, button)
|
|
if (frame.searchBox and frame.searchBox:IsVisible()) then
|
|
local bag = self:GetParent():GetID()
|
|
local slot = self:GetID()
|
|
local link = GetContainerItemLink(bag, slot)
|
|
if link then
|
|
local itemID = lib.API.decodeLink(link)
|
|
local _, itemName = lib.API.getItemString(link)
|
|
local _, itemTexture = private.getItemInfo(link, "name")
|
|
if (button == "LeftButton") and (IsAltKeyDown()) and itemName then
|
|
debugPrint(itemName, itemID,itemTexture, link)
|
|
frame.searchBox:SetText(itemName)
|
|
private.searchByItemID(itemID, private.getCheckboxSettings(), nil, 150, itemTexture, itemName)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
Stubby.RegisterFunctionHook("ContainerFrameItemButton_OnModifiedClick", -50, private.ClickBagHook)
|
|
|
|
function private.ClickLinkHook(self, itemString, link, button)
|
|
if (frame.searchBox and frame.searchBox:IsVisible()) then
|
|
if link then
|
|
local itemID = lib.API.decodeLink(link)
|
|
local _, itemName = lib.API.getItemString(link)
|
|
local _, itemTexture = private.getItemInfo(link, "name")
|
|
if (button == "LeftButton") and (IsAltKeyDown()) and itemName then
|
|
--debugPrint(itemName, itemID,itemTexture, link)
|
|
frame.searchBox:SetText(itemName)
|
|
private.searchByItemID(itemID, private.getCheckboxSettings(), nil, 150, itemTexture, itemName)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
hooksecurefunc("ChatFrame_OnHyperlinkShow", private.ClickLinkHook)
|
|
|
|
--Check boxes to narrow our search
|
|
frame.exactCheck = CreateFrame("CheckButton", "BeancounterexactCheck", frame, "OptionsCheckButtonTemplate")
|
|
frame.exactCheck:SetChecked(get("util.beancounter.ButtonExactCheck")) --get the last used checked/unchecked value Then use below script to store state changes
|
|
frame.exactCheck:SetPoint("TOPLEFT", frame, "TOPLEFT", 19, -217)
|
|
frame.exactCheck:SetScript("OnClick", function() local on if frame.exactCheck:GetChecked() then on = true end set("util.beancounter.ButtonExactCheck", on) private.wipeSearchCache() end)
|
|
_G["BeancounterexactCheckText"]:SetText(_BC('UiExactNameSearch'))
|
|
frame.exactCheck:SetScript("OnEnter", function() private.buttonTooltips( frame.exactCheck, _BC('TT_ExactCheck')) end) --"Only match the Exact text in the search box"
|
|
frame.exactCheck:SetScript("OnLeave", function() GameTooltip:Hide() end)
|
|
|
|
--search classic data
|
|
frame.neutralCheck = CreateFrame("CheckButton", "BeancounterneutralCheck", frame, "OptionsCheckButtonTemplate")
|
|
frame.neutralCheck:SetChecked(false) --Set this to false We only want this to be true/searchabe if there is a classic DB to search
|
|
frame.neutralCheck:SetScript("OnClick", function() local on if frame.neutralCheck:GetChecked() then on = true end set("util.beancounter.ButtonneutralCheck", on) private.wipeSearchCache() end)
|
|
_G["BeancounterneutralCheckText"]:SetText(_BC('UiNeutralCheckBox'))
|
|
frame.neutralCheck:SetPoint("TOPLEFT", frame, "TOPLEFT", 19, -242)
|
|
frame.neutralCheck:SetScript("OnEnter", function() private.buttonTooltips( frame.neutralCheck, _BC('TT_neutralCheck')) end) --"Display results from BeanCounter Classic Database"
|
|
frame.neutralCheck:SetScript("OnLeave", function() GameTooltip:Hide() end)
|
|
|
|
|
|
|
|
--search bids
|
|
frame.bidCheck = CreateFrame("CheckButton", "BeancounterbidCheck", frame, "OptionsCheckButtonTemplate")
|
|
frame.bidCheck:SetChecked(get("util.beancounter.ButtonBidCheck"))
|
|
frame.bidCheck:SetScript("OnClick", function() local on if frame.bidCheck:GetChecked() then on = true end set("util.beancounter.ButtonBidCheck", on) private.wipeSearchCache() end)
|
|
_G["BeancounterbidCheckText"]:SetText(_BC('UiBids'))
|
|
frame.bidCheck:SetScale(0.85)
|
|
frame.bidCheck:SetPoint("TOPLEFT", frame, "TOPLEFT", 25, -335)
|
|
frame.bidCheck:SetScript("OnEnter", function() private.buttonTooltips( frame.bidCheck, _BC('TT_BidCheck')) end) --"Display items bought from the Auction House"
|
|
frame.bidCheck:SetScript("OnLeave", function() GameTooltip:Hide() end)
|
|
|
|
|
|
|
|
frame.bidFailedCheck = CreateFrame("CheckButton", "BeancounterbidFailedCheck", frame, "OptionsCheckButtonTemplate")
|
|
frame.bidFailedCheck:SetChecked(get("util.beancounter.ButtonBidFailedCheck"))
|
|
frame.bidFailedCheck:SetScript("OnClick", function() local on if frame.bidFailedCheck:GetChecked() then on = true end set("util.beancounter.ButtonBidFailedCheck", on) private.wipeSearchCache() end)
|
|
frame.bidFailedCheck:SetScale(0.85)
|
|
_G["BeancounterbidFailedCheckText"]:SetText(_BC('UiOutbids'))
|
|
frame.bidFailedCheck:SetPoint("TOPLEFT", frame, "TOPLEFT", 25, -435)
|
|
frame.bidFailedCheck:SetScript("OnEnter", function() private.buttonTooltips( frame.bidFailedCheck, _BC('TT_BidFailedCheck')) end) --"Display items you were outbided on."
|
|
frame.bidFailedCheck:SetScript("OnLeave", function() GameTooltip:Hide() end)
|
|
|
|
--search Auctions
|
|
frame.auctionCheck = CreateFrame("CheckButton", "BeancounterauctionCheck", frame, "OptionsCheckButtonTemplate")
|
|
frame.auctionCheck:SetChecked(get("util.beancounter.ButtonAuctionCheck"))
|
|
frame.auctionCheck:SetScript("OnClick", function() local on if frame.auctionCheck:GetChecked() then on = true end set("util.beancounter.ButtonAuctionCheck", on) private.wipeSearchCache() end)
|
|
_G["BeancounterauctionCheckText"]:SetText(_BC('UiAuctions'))
|
|
frame.auctionCheck:SetScale(0.85)
|
|
frame.auctionCheck:SetPoint("TOPLEFT", frame, "TOPLEFT", 25, -360)
|
|
frame.auctionCheck:SetScript("OnEnter", function() private.buttonTooltips( frame.auctionCheck, _BC('TT_AuctionCheck')) end) --"Display items sold at the Auction House"
|
|
frame.auctionCheck:SetScript("OnLeave", function() GameTooltip:Hide() end)
|
|
|
|
|
|
|
|
frame.auctionFailedCheck = CreateFrame("CheckButton", "BeancounterauctionFailedCheck", frame, "OptionsCheckButtonTemplate")
|
|
frame.auctionFailedCheck:SetChecked(get("util.beancounter.ButtonAuctionFailedCheck"))
|
|
frame.auctionFailedCheck:SetScript("OnClick", function() local on if frame.auctionFailedCheck:GetChecked() then on = true end set("util.beancounter.ButtonAuctionFailedCheck", on) private.wipeSearchCache() end)
|
|
frame.auctionFailedCheck:SetScale(0.85)
|
|
_G["BeancounterauctionFailedCheckText"]:SetText(_BC('UiFailedAuctions'))
|
|
frame.auctionFailedCheck:SetPoint("TOPLEFT", frame, "TOPLEFT", 25, -460)
|
|
frame.auctionFailedCheck:SetScript("OnEnter", function() private.buttonTooltips( frame.auctionFailedCheck, _BC('TT_AuctionFailedCheck')) end) --Display items you failed to sell.
|
|
frame.auctionFailedCheck:SetScript("OnLeave", function() GameTooltip:Hide() end)
|
|
|
|
--[[search Purchases (vendor/trade)
|
|
frame.buyCheck = CreateFrame("CheckButton", "BeancounterbuyCheck", frame, "OptionsCheckButtonTemplate")
|
|
frame.buyCheck:SetChecked(true)
|
|
_G[BeancounterbuyCheck:GetName().."Text"]:SetText("Buys")
|
|
frame.buyCheck:SetPoint("TOPLEFT", frame, "TOPLEFT", 19, -255)
|
|
--search Sold (vendor/trade)
|
|
frame.sellCheck = CreateFrame("CheckButton", "BeancountersellCheck", frame, "OptionsCheckButtonTemplate")
|
|
frame.sellCheck:SetChecked(true)
|
|
_G[BeancountersellCheck:GetName().."Text"]:SetText("Sold")
|
|
frame.sellCheck:SetPoint("TOPLEFT", frame, "TOPLEFT", 19, -330)]]
|
|
--creates teh report text that tells info on # of entries
|
|
frame.DBCount = frame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
|
frame.DBCount:SetPoint("TOPLEFT", frame, "TOPLEFT", 70, -40)
|
|
frame.DBCount:SetText("Items: "..private.DBSumEntry)
|
|
|
|
frame.DBItems = frame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
|
frame.DBItems:SetPoint("TOPLEFT", frame, "TOPLEFT", 70, -55)
|
|
frame.DBItems:SetText("Entries: "..private.DBSumItems)
|
|
private.sumDatabase() --Sums database Done on first Start and Search of the session
|
|
|
|
--Edit box for changing UI reason codes
|
|
frame.reasonEditBox = CreateFrame("EditBox", nil, frame, "InputBoxTemplate")
|
|
frame.reasonEditBox:SetPoint("TOPLEFT", frame, "TOPLEFT", 0, 0)
|
|
frame.reasonEditBox:SetAutoFocus(true)
|
|
frame.reasonEditBox:Hide()
|
|
frame.reasonEditBox:SetHeight(15)
|
|
frame.reasonEditBox:SetFrameStrata("DIALOG")
|
|
frame.reasonEditBox:SetWidth(30)
|
|
frame.reasonEditBox:SetScript("OnEscapePressed", function() frame.reasonEditBox:Hide() end)
|
|
frame.reasonEditBox:SetScript("OnEnterPressed", function()
|
|
local self = frame.resultlist.sheet
|
|
self.selected = self.selectedForEdit[1] --pass stored selection back to frame
|
|
|
|
local data = frame.resultlist.sheet:GetSelection()
|
|
local newReason = frame.reasonEditBox:GetText()
|
|
if data then
|
|
local itemLink, bid, buy, net, quanity, seller, deposit, fee, currentReason, date = data[1], data[3], data[4], data[5], data[6], data[8], data[9], data[10], data[11], data[12]
|
|
lib.API.updatedReason(nil, newReason, itemLink, bid, buy, net, quanity, seller, deposit, fee, currentReason, date)
|
|
end
|
|
|
|
--update the current display data to reflect change
|
|
local rows = self.rows
|
|
local data = self.data
|
|
local sort = self.sort
|
|
|
|
local vPos = math.floor(self.panel.vPos)
|
|
local hSize = self.hSize
|
|
local rowNum = sort[vPos + self.selectedForEdit[2]]
|
|
local rowPos = (rowNum-1)*hSize --
|
|
local pos = rowPos + self.selectedForEdit[3]
|
|
|
|
self.data[pos] = newReason
|
|
self:Render()
|
|
|
|
frame.reasonEditBox:Hide()
|
|
end)
|
|
|
|
|
|
--Create the results window
|
|
frame.resultlist = CreateFrame("Frame", nil, frame)
|
|
frame.resultlist:SetBackdrop({
|
|
bgFile = "Interface/Tooltips/UI-Tooltip-Background",
|
|
edgeFile = "Interface/Tooltips/UI-Tooltip-Border",
|
|
tile = true, tileSize = 32, edgeSize = 16,
|
|
insets = { left = 5, right = 5, top = 5, bottom = 5 }
|
|
})
|
|
|
|
frame.resultlist:SetBackdropColor(0, 0, 0.0, 0.5)
|
|
frame.resultlist:SetPoint("TOPLEFT", frame, "TOPLEFT", 187, -32.5) --change anchors to allow for vert resize
|
|
frame.resultlist:SetPoint("TOPRIGHT", frame, "TOPRIGHT", -3, 0)
|
|
frame.resultlist:SetPoint("BOTTOM", frame, "BOTTOM", 0, 35)
|
|
|
|
--Scripts that are executed when we mouse over a TOOLTIP frame
|
|
function private.scrollSheetOnEnter(button, row, index)
|
|
local link, name, _
|
|
link = frame.resultlist.sheet.rows[row][index]:GetText() or "FAILED LINK"
|
|
if link:match("^(|c%x+|H.+|h%[.+%])") then
|
|
_, name = lib.API.getItemString(link)
|
|
end
|
|
GameTooltip:SetOwner(button, "ANCHOR_RIGHT")
|
|
if frame.resultlist.sheet.rows[row][index]:IsShown()then --Hide tooltip for hidden cells
|
|
if link and name then
|
|
GameTooltip:SetHyperlink(link)
|
|
--private.tooltip:ShowItemLink(GameTooltip, link, 1)
|
|
end
|
|
end
|
|
end
|
|
--records the column width changes
|
|
--store width by header name, that way if column reorginizing is added we apply size to proper column
|
|
function private.onResize(self, column, width)
|
|
if not width then
|
|
set("columnwidth."..self.labels[column]:GetText(), "default") --reset column if no width is passed. We use CTRL+rightclick to reset column
|
|
self.labels[column].button:SetWidth(get("columnwidth."..self.labels[column]:GetText()))
|
|
else
|
|
set("columnwidth."..self.labels[column]:GetText(), width)
|
|
end
|
|
end
|
|
--Allows user to shift click on itemlinks in beacounter to Chat or BeanCounters select box
|
|
function private.scrollSheetOnClick(button, row, column)
|
|
local self = frame.resultlist.sheet
|
|
local clickedFrame = self.rows[row][column]
|
|
if not clickedFrame:IsVisible() then return end --Old data is still in the frames, just hidden
|
|
|
|
local text = clickedFrame:GetText()
|
|
if not text then text = "" end
|
|
|
|
local columnName = self.labels[column]:GetText()
|
|
if columnName == _BC('UiNameHeader') then
|
|
if IsShiftKeyDown() then
|
|
ChatEdit_InsertLink(text)--sends to chat or auction house
|
|
elseif IsAltKeyDown() then -- Search for the item in BeanCounter
|
|
private.wipeSearchCache()
|
|
local _, text = lib.API.getItemString(text) --convert itemlink to plain text
|
|
frame.searchBox:SetText(text)
|
|
private.startSearch(text, private.getCheckboxSettings())
|
|
end
|
|
elseif columnName == _BC('UiReason') then
|
|
frame.reasonEditBox:ClearAllPoints()
|
|
frame.reasonEditBox:SetAllPoints(clickedFrame)
|
|
frame.reasonEditBox:ClearFocus() --clear focus then set so we highlight current text
|
|
frame.reasonEditBox:SetText(text)
|
|
frame.reasonEditBox:Show()
|
|
frame.reasonEditBox:SetFocus()
|
|
self.selectedForEdit = {self.sort[row + math.floor(self.panel.vPos)], row, column}
|
|
|
|
end
|
|
end
|
|
|
|
local Buyer, Seller = string.match(_BC('UiBuyerSellerHeader'), "(.*)/(.*)")
|
|
frame.resultlist.sheet = ScrollSheet:Create(frame.resultlist, {
|
|
{ _BC('UiNameHeader'), "TOOLTIP", get("columnwidth.".._BC('UiNameHeader')) },
|
|
{ _BC('UiTransactions'), "TEXT", get("columnwidth.".._BC('UiTransactions')) },
|
|
|
|
{_BC('UiBidTransaction') , "COIN", get("columnwidth.".._BC('UiBidTransaction')) },
|
|
{ _BC('UiBuyTransaction') , "COIN", get("columnwidth.".._BC('UiBuyTransaction')) },
|
|
{ _BC('UiNetHeader'), "COIN", get("columnwidth.".._BC('UiNetHeader')) },
|
|
{ _BC('UiQuantityHeader'), "TEXT", get("columnwidth.".._BC('UiQuantityHeader')) },
|
|
{ _BC('UiPriceper'), "COIN", get("columnwidth.".._BC('UiPriceper')) },
|
|
|
|
{ "|CFFFFFF00"..Seller.."/|CFF4CE5CC"..Buyer, "TEXT", get("columnwidth.".."|CFFFFFF00"..Seller.."/|CFF4CE5CC"..Buyer) },
|
|
|
|
{ _BC('UiDepositTransaction'), "COIN", get("columnwidth.".._BC('UiDepositTransaction')) },
|
|
{ _BC("UiFee"), "COIN", get("columnwidth.".._BC("UiFee")) },
|
|
{ _BC('UiReason'), "TEXT", get("columnwidth.".._BC('UiReason')) },
|
|
{ _BC('UiDateHeader'), "TEXT", get("columnwidth.".._BC('UiDateHeader')) },
|
|
{ _BC('Profit'), "COIN", get("columnwidth.".._BC('UiProfit')) },
|
|
{"", "TEXT", 0.001 }, --metadata thats not used in visual display
|
|
} )
|
|
|
|
--Add tooltip help to the scrollframe headers
|
|
for i = 1, #frame.resultlist.sheet.labels do
|
|
local self = frame.resultlist.sheet.labels[i].button
|
|
self:SetScript("OnEnter", function() private.buttonTooltips( self, _BC('TT_ScrollHeader') ) end) --Rightclick+Drag to move\nALT++RightClick to resize\nCTRL+RightClick to reset
|
|
self:SetScript("OnLeave", function() GameTooltip:Hide() end)
|
|
end
|
|
--If we have a saved order reapply
|
|
if get("columnorder") then
|
|
--print("saved order applied")
|
|
frame.resultlist.sheet:SetOrder(get("columnorder") )
|
|
end
|
|
--Apply last column sort used
|
|
if get("columnsortcurSort") then
|
|
frame.resultlist.sheet.curSort = get("columnsortcurSort") or 1
|
|
frame.resultlist.sheet.curDir = get("columnsortcurDir") or 1
|
|
frame.resultlist.sheet:PerformSort()
|
|
end
|
|
--After we have finished creating the scrollsheet and all saved settings have been applyed set our event processor
|
|
function frame.resultlist.sheet.Processor(callback, self, button, column, row, order, curDir, ...)
|
|
if (callback == "ColumnOrder") then
|
|
set("columnorder", order)
|
|
elseif (callback == "ColumnWidthSet") then
|
|
private.onResize(self, column, button:GetWidth() )
|
|
elseif (callback == "ColumnWidthReset") then
|
|
private.onResize(self, column, nil)
|
|
elseif (callback == "OnEnterCell") then
|
|
private.scrollSheetOnEnter(button, row, column)
|
|
elseif (callback == "OnLeaveCell") then
|
|
GameTooltip:Hide()
|
|
elseif (callback == "OnClickCell") then
|
|
private.scrollSheetOnClick(button, row, column)
|
|
elseif (callback == "ColumnSort") then
|
|
set("columnsortcurDir", curDir)
|
|
set("columnsortcurSort", column)
|
|
end
|
|
end
|
|
|
|
--All the UI settings are stored here. We then split it to get the appropriate search settings
|
|
function private.getCheckboxSettings()
|
|
return {["selectbox"] = frame.SelectBoxSetting , ["exact"] = frame.exactCheck:GetChecked(), ["neutral"] = frame.neutralCheck:GetChecked(),
|
|
["bid"] = frame.bidCheck:GetChecked(), ["failedbid"] = frame.bidFailedCheck:GetChecked(), ["auction"] = frame.auctionCheck:GetChecked(),
|
|
["failedauction"] = frame.auctionFailedCheck:GetChecked()
|
|
}
|
|
end
|
|
--set parent of the Reason edit box to the created scrollframe. This prevents overlaping.
|
|
frame.reasonEditBox:SetParent(frame.resultlist.sheet.content)
|
|
private.CreateMailFrames()
|
|
|
|
end
|
|
|
|
function private.CreateMailFrames()
|
|
local frame = CreateFrame("Frame", "BeanCounterMail", MailFrame)
|
|
frame:Hide()
|
|
private.MailGUI = frame
|
|
local count, total = 0,0
|
|
|
|
frame:SetPoint("TOPLEFT", MailFrame, "TOPLEFT", 19,-71)
|
|
frame:SetPoint("BOTTOMRIGHT", MailFrame, "BOTTOMRIGHT", -39,115)
|
|
--Add Title to the Top
|
|
local title = frame:CreateFontString(nil, "OVERLAY", "GameFontNormalLarge")
|
|
title:SetPoint("CENTER", frame, "CENTER", 0,60)
|
|
title:SetText(_BC('UiMailFrameRecording')) --BeanCounter is recording your mail
|
|
|
|
local body = frame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
|
body:SetPoint("CENTER", frame, "CENTER", 0, 30)
|
|
body:SetText(_BC('UiMailFrameWait1')) --Please do not close the mail frame or
|
|
local body1 = frame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
|
body1:SetPoint("CENTER", frame, "CENTER", 0,0)
|
|
body1:SetText(_BC('UiMailFrameWait2')) --"Auction Items will not be recorded"
|
|
|
|
local countdown = frame:CreateFontString("BeanCounterMailCount", "OVERLAY", "GameFontNormalLarge")
|
|
private.CountGUI = countdown
|
|
countdown:SetPoint("CENTER", frame, "CENTER", 0, -60)
|
|
countdown:SetText("Recording: "..count.." of "..total.." items")
|
|
end
|
|
|
|
|
|
function private.createDeleteItemPrompt()
|
|
--Create the base frame for external GUI
|
|
local frame = CreateFrame("Frame", nil, UIParent)
|
|
frame:SetFrameStrata("DIALOG")
|
|
frame:SetBackdrop({
|
|
bgFile = "Interface/Tooltips/ChatBubble-Background",
|
|
edgeFile = "Interface/Tooltips/ChatBubble-BackDrop",
|
|
tile = true, tileSize = 32, edgeSize = 32,
|
|
insets = { left = 32, right = 32, top = 32, bottom = 32 }
|
|
})
|
|
frame:SetBackdropColor(0,0,0, 1)
|
|
frame:Hide()
|
|
|
|
frame:SetPoint("CENTER", UIParent, "CENTER")
|
|
frame:SetWidth(500)
|
|
frame:SetHeight(200)
|
|
|
|
frame.title = frame:CreateFontString(nil, "OVERLAY", "GameFontNormalLarge")
|
|
frame.title:SetPoint("CENTER", frame, "CENTER", 0,30)
|
|
frame.title:SetText(_BC('Do you want to delete this item from the database?'))
|
|
|
|
frame.item = frame:CreateFontString(nil, "OVERLAY", "GameFontNormalLarge")
|
|
frame.item:SetPoint("CENTER", frame, "CENTER", 0,0)
|
|
|
|
frame.yes = CreateFrame("Button", nil, frame, "OptionsButtonTemplate")
|
|
frame.yes:SetPoint("CENTER", frame, "CENTER", -120, -60)
|
|
frame.yes:SetText(_BC('Yes'))
|
|
frame.yes:SetScript("OnClick", function() private.deleteExactItem( frame.item:GetText() )
|
|
frame:Hide()
|
|
frame.item:SetText("")
|
|
end)
|
|
|
|
frame.no = CreateFrame("Button", nil, frame, "OptionsButtonTemplate")
|
|
frame.no:SetPoint("LEFT", frame.yes, "RIGHT", 50, 0)
|
|
frame.no:SetText(_BC('No'))
|
|
frame.no:SetScale(1.8)
|
|
frame.no:SetScript("OnClick", function() frame:Hide() frame.item:SetText("") end)
|
|
|
|
private.deletePromptFrame = frame
|
|
end
|
|
|
|
--ONLOAD Error frame, used to show missmatched DB versus client errors that stop BC load NEEDS LOCALIZATION
|
|
function private.CreateErrorFrames(error, expectedVersion, playerVersion)
|
|
frame = private.scriptframe
|
|
frame.loadError = CreateFrame("Frame", nil, UIParent)
|
|
frame.loadError:SetFrameStrata("HIGH")
|
|
frame.loadError:SetBackdrop({
|
|
bgFile = "Interface/Tooltips/ChatBubble-Background",
|
|
edgeFile = "Interface/Tooltips/ChatBubble-BackDrop",
|
|
tile = true, tileSize = 32, edgeSize = 32,
|
|
insets = { left = 32, right = 32, top = 32, bottom = 32 }
|
|
})
|
|
frame.loadError:SetBackdropColor(0,0,0, 1)
|
|
frame.loadError:Show()
|
|
|
|
frame.loadError:SetPoint("CENTER", UIParent, "CENTER")
|
|
frame.loadError:SetWidth(300)
|
|
frame.loadError:SetHeight(200)
|
|
|
|
frame.loadError.close = CreateFrame("Button", nil, frame.loadError, "OptionsButtonTemplate")
|
|
frame.loadError.close:SetPoint("BOTTOMRIGHT", frame.loadError, "BOTTOMRIGHT", -10, 10)
|
|
frame.loadError.close:SetScript("OnClick", function() frame.loadError:Hide() end)
|
|
frame.loadError.close:SetText( _BC('Ok') )
|
|
|
|
frame.loadError.text = frame.loadError:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
|
frame.loadError.text:SetPoint("LEFT", frame.loadError, "LEFT", 25, 30)
|
|
frame.loadError.text:SetWidth(250)
|
|
if error == "bean older" then
|
|
print ("Your database has been created with a newer version of BeanCounter than the one you are currently using. BeanCounter will not load to prevent possibly corrupting the saved data. Please go to http://auctioneeraddon.com and update to the latest version")
|
|
frame.loadError.text:SetText("Your database has been created with a newer version of BeanCounter "..playerVersion.." than the one you are currently using. "..expectedVersion.." BeanCounter will not load to prevent possibly corrupting the saved data. Please go to http://auctioneeraddon.com and update to the latest version")
|
|
elseif error == "failed update" then
|
|
print ("Your database has failed to update. BeanCounter expects "..private.version.."BeanCounter will not load to prevent possibly corrupting the saved data. Please go to the forums at http://auctioneeraddon.com")
|
|
frame.loadError.text:SetText("Your database has failed to update. BeanCounter expects "..expectedVersion.." But the player's version is still "..playerVersion.." BeanCounter will not load to prevent possibly corrupting the saved data. Please go to the forums at http://auctioneeraddon.com")
|
|
else
|
|
frame.loadError.text:SetText("Unknow Error on loading. BeanCounter will not load to prevent possibly corrupting the saved data. Please go to the forums at http://auctioneeraddon.com")
|
|
end
|
|
frame.loadError.title = frame.loadError:CreateFontString(nil, "OVERLAY", "GameFontNormalLarge")
|
|
frame.loadError.title:SetPoint("CENTER", frame.loadError, "TOP", 0,-15)
|
|
frame.loadError.title:SetText("|CFFFF0000 BEANCOUNTER WARNING")
|
|
end
|
|
|
|
--Taken from AucCore to make beancounter Standalone, Need to remove Redudundant stuff
|
|
function private.AddTab(tabButton, tabFrame)
|
|
-- Count the number of auction house tabs (including the tab we are going
|
|
-- to insert).
|
|
local tabCount = 1;
|
|
while (_G["AuctionFrameTab"..(tabCount)]) do
|
|
tabCount = tabCount + 1
|
|
end
|
|
|
|
-- Find the correct location to insert our tab
|
|
local tabIndex = 1
|
|
while _G["AuctionFrameTab"..(tabIndex)] do
|
|
tabIndex = tabIndex + 1
|
|
end
|
|
|
|
-- Make room for the tab, if needed.
|
|
for index = tabCount, tabIndex + 1, -1 do
|
|
_G["AuctionFrameTab"..(index)] = _G["AuctionFrameTab"..(index - 1)]
|
|
_G["AuctionFrameTab"..(index)]:SetID(index)
|
|
end
|
|
|
|
-- Configure the frame.
|
|
tabFrame:SetParent("AuctionFrame")
|
|
tabFrame:SetPoint("TOPLEFT", "AuctionFrame", "TOPLEFT", 0, 0)
|
|
private.relevelFrame(tabFrame);
|
|
|
|
-- Configure the tab button.
|
|
_G["AuctionFrameTab"..tabIndex] = tabButton
|
|
tabButton:SetParent("AuctionFrame");
|
|
tabButton:SetPoint("TOPLEFT", _G["AuctionFrameTab"..(tabIndex - 1)]:GetName(), "TOPRIGHT", -8, 0);
|
|
tabButton:SetID(tabIndex);
|
|
tabButton:Show();
|
|
|
|
-- Update the tab count.
|
|
PanelTemplates_SetNumTabs(AuctionFrame, tabCount)
|
|
end
|
|
|
|
function private.relevelFrame(frame)
|
|
return private.relevelFrames(frame:GetFrameLevel() + 2, frame:GetChildren())
|
|
end
|
|
|
|
function private.relevelFrames(myLevel, ...)
|
|
for i = 1, select("#", ...) do
|
|
local child = select(i, ...)
|
|
child:SetFrameLevel(myLevel)
|
|
private.relevelFrame(child)
|
|
end
|
|
end
|
|
--Created SearchUI reason code data into tooltips
|
|
function private.processTooltip(tip, itemLink, quantity)
|
|
if not itemLink then return end
|
|
if get("ModTTShow") and not IsAltKeyDown() then
|
|
return
|
|
end
|
|
|
|
if not get("util.beancounter.displayReasonCodeTooltip") then return end
|
|
|
|
private.tooltip:SetFrame(tip)
|
|
local reason, Time, bid, player = lib.API.getBidReason(itemLink, quantity)
|
|
|
|
--debugPrint("Add to Tooltip", itemLink, reason)
|
|
if reason then
|
|
if reason == "0" then reason = "Unknown" end
|
|
Time = SecondsToTime((time() - Time))
|
|
local text = ""
|
|
if player then
|
|
text = ("Last won by {{%s}} for {{%s}} { {{%s}} } ago}"):format(player or "", reason, Time)
|
|
else
|
|
text = ("Last won for {{%s}} { {{%s}} } ago}"):format(reason, Time)
|
|
end
|
|
local cost = tonumber(bid)
|
|
private.tooltip:AddLine(text, cost, 0.9,0.6,0.2)
|
|
end
|
|
private.tooltip:ClearFrame(tip)
|
|
end
|