TradeSkillMaster/Core/UI/UI.lua

99 lines
3.1 KiB
Lua

-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster --
-- https://tradeskillmaster.com --
-- All Rights Reserved - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
--- UI Functions
-- @module UI
local _, TSM = ...
local UI = TSM:NewPackage("UI")
local Analytics = TSM.Include("Util.Analytics")
local Theme = TSM.Include("Util.Theme")
local ItemInfo = TSM.Include("Service.ItemInfo")
local private = {
analyticsPath = {
auction = "",
banking = "",
crafting = "",
destroying = "",
mailing = "",
main = "",
task_list = "",
vendoring = "",
},
}
local TIME_LEFT_STRINGS = {}
do
-- generate the TIME_LEFT_STRINGS values
local colors = {
Theme.GetFeedbackColor("RED"),
Theme.GetFeedbackColor("RED"),
Theme.GetFeedbackColor("YELLOW"),
Theme.GetFeedbackColor("GREEN"),
}
local strs = TSM.IsWowClassic() and { "30m", "2h", "8h", "24h" } or { "1h", "2h", "24h", "48h" }
assert(#colors == #strs)
for i = 1, #colors do
TIME_LEFT_STRINGS[i] = colors[i]:ColorText(strs[i])
end
end
-- ============================================================================
-- Module Functions
-- ============================================================================
--- Colors an item name based on its quality.
-- @tparam string item The item to retrieve the name and quality of
-- @tparam[opt=0] number tintPct The tintPct to apply to the quality color
-- @treturn string The colored name
function UI.GetColoredItemName(item, tintPct)
local name = ItemInfo.GetName(item)
local quality = ItemInfo.GetQuality(item)
return UI.GetQualityColoredText(name, quality, tintPct)
end
--- Colors an item name based on its quality.
-- @tparam string name The name of the item
-- @tparam number quality The quality of the item
-- @tparam[opt=0] number tintPct The tintPct to apply to the quality color
-- @treturn string The colored name
function UI.GetQualityColoredText(name, quality, tintPct)
if not name or not quality then
return
end
local color = Theme.GetItemQualityColor(quality)
return color:GetTint(tintPct or 0):ColorText(name)
end
--- Gets the string representation of an auction time left.
-- @tparam number timeLeft The time left index (i.e. from WoW APIs)
-- @treturn string The localized string representation
function UI.GetTimeLeftString(timeLeft)
local str = TIME_LEFT_STRINGS[timeLeft]
assert(str, "Invalid timeLeft: "..tostring(timeLeft))
return str
end
function UI.AnalyticsRecordPathChange(uiName, ...)
assert(private.analyticsPath[uiName])
local path = strjoin("/", uiName, ...)
if path == private.analyticsPath[uiName] then
return
end
Analytics.Action("UI_NAVIGATION", private.analyticsPath[uiName], path)
private.analyticsPath[uiName] = path
end
function UI.AnalyticsRecordClose(uiName)
assert(private.analyticsPath[uiName])
if private.analyticsPath[uiName] == "" then
return
end
Analytics.Action("UI_NAVIGATION", private.analyticsPath[uiName], "")
private.analyticsPath[uiName] = ""
end