-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_AuctionDB --
-- http://www.curse.com/addons/wow/tradeskillmaster_auctiondb --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
-- load the parent file (TSM) into a local variable and register this file as a module
local TSM = select ( 2 , ... )
local GUI = TSM : NewModule ( " GUI " )
local L = LibStub ( " AceLocale-3.0 " ) : GetLocale ( " TradeSkillMaster_AuctionDB " ) -- loads the localization table
local private = { }
function GUI : Show ( frame )
private.statusBar = private.statusBar or private : CreateStatusBar ( frame.content )
private.statusBar : Show ( )
GUI : UpdateStatus ( " " , 0 , 0 )
private.startScanContent = private.startScanContent or private : CreateStartScanContent ( frame )
private.startScanContent : Show ( )
if TSM.Scan . isScanning and not TSMAPI.AuctionScan : IsScanning ( ) then
TSM.Scan : DoneScanning ( )
end
if TSM.Scan . isScanning then
GUI : SetPauseEnabled ( true )
GUI : SetPaused ( TSMAPI.AuctionScan : IsPaused ( ) )
else
GUI : SetPauseEnabled ( false )
GUI : SetPaused ( false )
end
end
function GUI : Hide ( )
private.statusBar : Hide ( )
private.startScanContent : Hide ( )
if TSM.Scan . isScanning and not TSMAPI.AuctionScan : IsScanning ( ) then
TSM.Scan : DoneScanning ( )
end
if TSM.Scan . isScanning then
TSM.Scan : PauseScan ( )
else
TSM.Scan : DoneScanning ( )
TSMAPI.AuctionScan : StopScan ( )
GUI : SetPauseEnabled ( false )
GUI : SetPaused ( false )
end
end
function GUI : UpdateStatus ( text , major , minor )
if text then
private.statusBar : SetStatusText ( text )
end
if major or minor then
private.statusBar : UpdateStatus ( major , minor )
end
end
function GUI : SetPauseEnabled ( enabled )
if not private.startScanContent or not private.startScanContent . pauseFullScanButton then return end
if enabled then
private.startScanContent . pauseFullScanButton : Enable ( )
else
private.startScanContent . pauseFullScanButton : Disable ( )
end
end
function GUI : SetPaused ( isPaused )
if not private.startScanContent or not private.startScanContent . pauseFullScanButton then return end
private.startScanContent . pauseFullScanButton : SetText ( isPaused and L [ " Resume " ] or L [ " Pause " ] )
end
function private : CreateStatusBar ( parent )
local frame = TSMAPI.GUI : CreateStatusBar ( parent , " TSMAuctionDBStatusBar " )
TSMAPI.GUI : CreateHorizontalLine ( frame , - 30 , parent )
return frame
end
function private : CreateStartScanContent ( parent )
local frame = CreateFrame ( " Frame " , nil , parent )
frame : SetAllPoints ( parent )
frame : Hide ( )
frame.Enable = function ( self )
self.startFullScanButton : Enable ( )
self.pauseFullScanButton : Disable ( )
self.cancelScanButton : Disable ( )
self.startGroupScanButton : Enable ( )
self.startInventoryScanButton : Enable ( )
self.startBagScanButton : Enable ( )
self.startBankScanButton : Enable ( )
end
frame.Disable = function ( self )
self.startFullScanButton : Disable ( )
if TSM.Scan . isScanning then
self.pauseFullScanButton : Enable ( )
self.cancelScanButton : Enable ( )
else
self.pauseFullScanButton : Disable ( )
self.cancelScanButton : Disable ( )
end
self.startGroupScanButton : Disable ( )
self.startInventoryScanButton : Disable ( )
self.startBagScanButton : Disable ( )
self.startBankScanButton : Disable ( )
end
-- Top row: Auto updater.
local text = TSMAPI.GUI : CreateLabel ( frame )
text : SetFont ( TSMAPI.Design : GetContentFont ( ) , 24 )
text : SetPoint ( " TOP " , 0 , - 24 )
text : SetHeight ( 24 )
text : SetJustifyH ( " CENTER " )
text : SetJustifyV ( " CENTER " )
text : SetText ( TSMAPI.Design : GetInlineColor ( " link " ) .. " TSM_AuctionDB " )
local ag = text : CreateAnimationGroup ( )
local a1 = ag : CreateAnimation ( " Alpha " )
a1 : SetChange ( - .5 )
a1 : SetDuration ( .5 )
ag : SetLooping ( " BOUNCE " )
ag : Play ( )
local content = CreateFrame ( " Frame " , nil , frame )
content : SetAllPoints ( parent.content )
TSMAPI.Design : SetFrameBackdropColor ( content )
-- Group tree.
local container = CreateFrame ( " Frame " , nil , content )
container : SetPoint ( " TOPLEFT " , 5 , - 35 )
container : SetPoint ( " BOTTOMRIGHT " , - 205 , 5 )
TSMAPI.Design : SetFrameColor ( container )
frame.groupTree = TSMAPI : CreateGroupTree ( container , nil , " AuctionDB " )
local bar = TSMAPI.GUI : CreateVerticalLine ( content , 0 )
bar : ClearAllPoints ( )
bar : SetPoint ( " TOPRIGHT " , - 200 , - 30 )
bar : SetPoint ( " BOTTOMRIGHT " , - 200 , 0 )
local buttonFrame = CreateFrame ( " Frame " , nil , content )
buttonFrame : SetPoint ( " TOPLEFT " , content , " TOPRIGHT " , - 200 , 0 )
buttonFrame : SetPoint ( " BOTTOMRIGHT " )
-- Row: Full Scan.
local yOffset = - 50
-- Row: Full Scan.
local btn = TSMAPI.GUI : CreateButton ( buttonFrame , 18 )
btn : SetPoint ( " TOPLEFT " , 6 , yOffset )
btn : SetPoint ( " TOPRIGHT " , - 6 , yOffset )
btn : SetHeight ( 22 )
btn : SetScript ( " OnClick " , TSM.Scan . StartFullScan )
btn : SetText ( L [ " Run Full Scan " ] )
btn.tooltip = L [ " A full auction house scan will scan every item on the auction house. Expect this scan to take several minutes or longer. " ]
frame.startFullScanButton = btn
yOffset = yOffset - 40
TSMAPI.GUI : CreateHorizontalLine ( buttonFrame , yOffset )
yOffset = yOffset - 20
-- Row: Group Scan.
local btn = TSMAPI.GUI : CreateButton ( buttonFrame , 18 )
btn : SetPoint ( " TOPLEFT " , 6 , yOffset )
btn : SetPoint ( " TOPRIGHT " , - 6 , yOffset )
btn : SetHeight ( 22 )
btn : SetScript ( " OnClick " , GUI.StartGroupScan )
btn : SetText ( L [ " Scan Selected Groups " ] )
btn.tooltip = L [ " This will do a slow auction house scan of every item in the selected groups and update their AuctionDB prices. This may take several minutes. " ]
frame.startGroupScanButton = btn
yOffset = yOffset - 40
TSMAPI.GUI : CreateHorizontalLine ( buttonFrame , yOffset )
yOffset = yOffset - 20
-- Row: Inventory Scan.
local btn = TSMAPI.GUI : CreateButton ( buttonFrame , 18 )
btn : SetPoint ( " TOPLEFT " , 6 , yOffset )
btn : SetPoint ( " TOPRIGHT " , - 6 , yOffset )
btn : SetHeight ( 22 )
btn : SetScript ( " OnClick " , GUI.StartInventoryScan )
btn : SetText ( L [ " Scan Inventory " ] )
btn.tooltip = L [ " Scans bags and bank for all characters. " ]
frame.startInventoryScanButton = btn
yOffset = yOffset - 30
-- Row: Bag Scan.
local btn = TSMAPI.GUI : CreateButton ( buttonFrame , 18 )
btn : SetPoint ( " TOPLEFT " , 6 , yOffset )
btn : SetPoint ( " TOPRIGHT " , - 6 , yOffset )
btn : SetHeight ( 22 )
btn : SetScript ( " OnClick " , GUI.StartBagScan )
btn : SetText ( L [ " Scan Bags " ] )
btn.tooltip = L [ " Scan bag items. " ]
frame.startBagScanButton = btn
yOffset = yOffset - 30
-- Row: Bank Scan.
local btn = TSMAPI.GUI : CreateButton ( buttonFrame , 18 )
btn : SetPoint ( " TOPLEFT " , 6 , yOffset )
btn : SetPoint ( " TOPRIGHT " , - 6 , yOffset )
btn : SetHeight ( 22 )
btn : SetScript ( " OnClick " , GUI.StartBankScan )
btn : SetText ( L [ " Scan Bank " ] )
btn.tooltip = L [ " Scan bank items. " ]
frame.startBankScanButton = btn
yOffset = yOffset - 40
TSMAPI.GUI : CreateHorizontalLine ( buttonFrame , yOffset )
yOffset = yOffset - 20
local pauseBtn = TSMAPI.GUI : CreateButton ( buttonFrame , 16 )
pauseBtn : SetPoint ( " TOPLEFT " , 6 , yOffset )
pauseBtn : SetPoint ( " TOPRIGHT " , - 6 , yOffset )
pauseBtn : SetHeight ( 18 )
pauseBtn : SetScript ( " OnClick " , TSM.Scan . TogglePause )
pauseBtn : SetText ( L [ " Pause " ] )
pauseBtn : Disable ( )
frame.pauseFullScanButton = pauseBtn
yOffset = yOffset - 24
local cancelBtn = TSMAPI.GUI : CreateButton ( buttonFrame , 16 )
cancelBtn : SetPoint ( " TOPLEFT " , 6 , yOffset )
cancelBtn : SetPoint ( " TOPRIGHT " , - 6 , yOffset )
cancelBtn : SetHeight ( 18 )
cancelBtn : SetScript ( " OnClick " , GUI.CancelScan )
cancelBtn : SetText ( L [ " Cancel Scan " ] )
cancelBtn : Disable ( )
frame.cancelScanButton = cancelBtn
return frame
end
function GUI : StartGroupScan ( )
local items = { }
for groupName , data in pairs ( private.startScanContent . groupTree : GetSelectedGroupInfo ( ) ) do
groupName = TSMAPI : FormatGroupPath ( groupName , true )
for itemString in pairs ( data.items ) do
tinsert ( items , itemString )
end
end
TSM.Scan : StartGroupScan ( items )
end
function GUI : StartInventoryScan ( )
local players = TSMAPI : ModuleAPI ( " ItemTracker " , " playerlist " )
if not players then
TSM : Print ( L [ " ItemTracker data unavailable. " ] )
return
end
local specificItems , baseCandidates , hasSpecific = { } , { } , { }
for _ , player in ipairs ( players ) do
local bags = TSMAPI : ModuleAPI ( " ItemTracker " , " playerbags " , player )
local bank = TSMAPI : ModuleAPI ( " ItemTracker " , " playerbank " , player )
if bags then
private : CollectItemStrings ( bags , specificItems , baseCandidates , hasSpecific )
end
if bank then
private : CollectItemStrings ( bank , specificItems , baseCandidates , hasSpecific )
end
end
for baseItemString in pairs ( baseCandidates ) do
if not hasSpecific [ baseItemString ] then
specificItems [ baseItemString ] = true
end
end
local items = { }
for itemString in pairs ( specificItems ) do
tinsert ( items , itemString )
end
if # items == 0 then
TSM : Print ( L [ " No inventory items found. " ] )
return
end
TSM.Scan : StartGroupScan ( items )
end
function private : CollectItemStrings ( data , specificItems , baseCandidates , hasSpecific )
for itemString in pairs ( data ) do
if type ( itemString ) == " string " then
local baseItemString = TSMAPI : GetBaseItemString ( itemString ) or itemString
if itemString ~= baseItemString then
specificItems [ itemString ] = true
hasSpecific [ baseItemString ] = true
else
baseCandidates [ baseItemString ] = true
end
end
end
end
function private : GetItemTrackerItems ( key )
local data = TSMAPI : ModuleAPI ( " ItemTracker " , key )
if not data then
TSM : Print ( L [ " ItemTracker data unavailable. " ] )
return
end
local specificItems , baseCandidates , hasSpecific = { } , { } , { }
private : CollectItemStrings ( data , specificItems , baseCandidates , hasSpecific )
for baseItemString in pairs ( baseCandidates ) do
if not hasSpecific [ baseItemString ] then
specificItems [ baseItemString ] = true
end
end
local items = { }
for itemString in pairs ( specificItems ) do
tinsert ( items , itemString )
end
return items
end
function GUI : StartBagScan ( )
local items = private : GetItemTrackerItems ( " playerbags " )
if not items then
return
end
if # items == 0 then
TSM : Print ( L [ " No bag items found. " ] )
return
end
TSM.Scan : StartGroupScan ( items )
end
function GUI : StartBankScan ( )
local items = private : GetItemTrackerItems ( " playerbank " )
if not items then
return
end
if # items == 0 then
TSM : Print ( L [ " No bank items found. " ] )
return
end
TSM.Scan : StartGroupScan ( items )
end
function GUI : CancelScan ( )
TSMAPI.AuctionScan : StopScan ( true )
TSM.Scan : DoneScanning ( )
end