TradeSkillMaster/Core/UI/Elements/PlayerGoldText.lua

104 lines
3.8 KiB
Lua

-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster --
-- https://tradeskillmaster.com --
-- All Rights Reserved - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
--- PlayerGoldText UI Element Class.
-- A text element which contains player gold info which automatically updates when the player's gold amount changes. It
-- is a subclass of the @{Text} class.
-- @classmod PlayerGoldText
local _, TSM = ...
local PlayerGoldText = TSM.Include("LibTSMClass").DefineClass("PlayerGoldText", TSM.UI.Text)
local L = TSM.Include("Locale").GetTable()
local TempTable = TSM.Include("Util.TempTable")
local Event = TSM.Include("Util.Event")
local Money = TSM.Include("Util.Money")
local Settings = TSM.Include("Service.Settings")
local UIElements = TSM.Include("UI.UIElements")
UIElements.Register(PlayerGoldText)
TSM.UI.PlayerGoldText = PlayerGoldText
local private = {
registered = false,
elements = {},
}
-- ============================================================================
-- Meta Class Methods
-- ============================================================================
function PlayerGoldText.__init(self)
self.__super:__init()
self:_GetBaseFrame():EnableMouse(true)
if not private.registered then
Event.Register("PLAYER_MONEY", private.MoneyOnUpdate)
private.registered = true
end
self._justifyH = "RIGHT"
self._font = "TABLE_TABLE1"
end
function PlayerGoldText.Acquire(self)
private.elements[self] = true
self.__super:Acquire()
self:SetText(Money.ToString(TSM.db.global.appearanceOptions.showTotalMoney and private.GetTotalMoney() or GetMoney()))
self:SetTooltip(private.MoneyTooltipFunc)
end
function PlayerGoldText.Release(self)
private.elements[self] = nil
self.__super:Release()
self._justifyH = "RIGHT"
self._font = "TABLE_TABLE1"
end
-- ============================================================================
-- Private Helper Functions
-- ============================================================================
function private.MoneyOnUpdate()
for element in pairs(private.elements) do
element:SetText(Money.ToString(TSM.db.global.appearanceOptions.showTotalMoney and private.GetTotalMoney() or GetMoney()))
element:Draw()
end
end
function private.MoneyTooltipFunc()
local tooltipLines = TempTable.Acquire()
local playerMoney = TSM.db.sync.internalData.money
local total = playerMoney
tinsert(tooltipLines, strjoin(TSM.CONST.TOOLTIP_SEP, UnitName("player")..":", Money.ToString(playerMoney)))
local numPosted, numSold, postedGold, soldGold = TSM.MyAuctions.GetAuctionInfo()
if numPosted then
tinsert(tooltipLines, " "..strjoin(TSM.CONST.TOOLTIP_SEP, format(L["%s Sold Auctions"], numSold)..":", Money.ToString(soldGold)))
tinsert(tooltipLines, " "..strjoin(TSM.CONST.TOOLTIP_SEP, format(L["%s Posted Auctions"], numPosted)..":", Money.ToString(postedGold)))
end
for _, _, character, syncScopeKey in Settings.ConnectedFactionrealmAltCharacterIterator() do
local money = Settings.Get("sync", syncScopeKey, "internalData", "money")
if money > 0 then
tinsert(tooltipLines, strjoin(TSM.CONST.TOOLTIP_SEP, character..":", Money.ToString(money)))
total = total + money
end
end
tinsert(tooltipLines, 1, strjoin(TSM.CONST.TOOLTIP_SEP, L["Total Gold"]..":", Money.ToString(total)))
return strjoin("\n", TempTable.UnpackAndRelease(tooltipLines))
end
function private.GetTotalMoney()
local total = TSM.db.sync.internalData.money
for _, _, _, syncScopeKey in Settings.ConnectedFactionrealmAltCharacterIterator() do
local money = Settings.Get("sync", syncScopeKey, "internalData", "money")
if money > 0 then
total = total + money
end
end
return total
end