You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

228 lines
7.9 KiB

-- ========================================================================= --
-- SylingTracker --
-- https://www.curseforge.com/wow/addons/sylingtracker --
-- --
-- Repository: --
-- https://github.com/Skamer/SylingTracker --
-- --
-- ========================================================================= --
Syling "SylingTracker.UI.HelperWindow" ""
-- ========================================================================= --
namespace "SLT"
-- ========================================================================= --
export {
FetchFontObject = Fonts.FetchFontObject
}
-- ========================================================================= --
local DESCRIPTION_TEXT_FORMAT = "Wowhead may help you to find your way for completing this %s"
local ACHIEVEMENT_TEXT = "achievement"
local QUEST_TEXT = "quest"
local WOWHEAD_LINK_FORMAT = "https://www.wowhead.com/%s=%i"
-- ========================================================================= --
-- @TODO: Move "SLTEditBox" in a its own file or a better place.
-- ========================================================================= --
class "SLTEditBox" (function(_ENV)
inherit "EditBox"
-----------------------------------------------------------------------------
-- Methods --
-----------------------------------------------------------------------------
function SetSharedMediaFont(self, font)
local _, fontHeight, flags = self:GetFont()
if font.outline then
if font.outline == "NORMAL" then
flags = "OUTLINE"
elseif font.outline == "THICK" then
flags = "THICKOUTLINE"
end
end
if font.monochrome then
if flags then
flags = flags..",MONOCHROME"
else
flags = "MONOCHROME"
end
end
if font.height then
fontHeight = font.height
end
local ft = _LibSharedMedia:Fetch("font", font.font)
return self:SetFontObject(FetchFontObject(ft, fontHeight or 10, flags))
end
-----------------------------------------------------------------------------
-- Properties --
-----------------------------------------------------------------------------
property "SharedMediaFont" {
type = FontType,
handler = function(self, font) self:SetSharedMediaFont(font) end
}
end)
-- ========================================================================= --
class "HelperWindow" (function(_ENV)
inherit "Frame"
-----------------------------------------------------------------------------
-- Handlers --
-----------------------------------------------------------------------------
local function OnFocusGain(self)
self:HighlightText()
end
-----------------------------------------------------------------------------
-- Methods --
-----------------------------------------------------------------------------
__Arguments__ { Number }
function SetID(self, id)
self.ID = id
end
__Arguments__ { String }
function SetType(self, type)
self.Type = type
end
function UpdateText(self)
if self.Type == "quest" then
Style[self].Description.text = DESCRIPTION_TEXT_FORMAT:format(QUEST_TEXT)
Style[self].LinkBox.text = WOWHEAD_LINK_FORMAT:format("quest", self.ID)
elseif self.Type == "achievement" then
Style[self].Description.text = DESCRIPTION_TEXT_FORMAT:format(ACHIEVEMENT_TEXT)
Style[self].LinkBox.text = WOWHEAD_LINK_FORMAT:format("achievement", self.ID)
end
end
-----------------------------------------------------------------------------
-- Methods --
-----------------------------------------------------------------------------
property "ID " {
type = Number
}
property "Type" {
type = String
}
-----------------------------------------------------------------------------
-- Constructors --
-----------------------------------------------------------------------------
__Template__{
CloseButton = Button,
HeaderText = SLTFontString,
Description = SLTFontString,
CopyHelpText = SLTFontString,
LinkBox = SLTEditBox
}
function __ctor(self)
HelperFrameInstance = self
local linkBox = self:GetChild("LinkBox")
linkBox.OnEditFocusGained = OnFocusGain
local closeButton = self:GetChild("CloseButton")
closeButton.OnClick = function() self:Hide() end
end
end)
-- ========================================================================= --
-- Styles --
-- ========================================================================= --
Style.UpdateSkin("Default", {
[HelperWindow] = {
width = 600,
height = 175,
backdrop = {
bgFile = [[Interface\AddOns\SylingTracker\Media\Textures\Window-Background.blp]]
},
CloseButton = {
width = 24,
height = 24,
registerForClicks = { "LeftButtonDown" },
NormalTexture = {
file = [[Interface\AddOns\SylingTracker\Media\Textures\Icons\close]],
vertexColor = { r = 1, g = 0, b = 0, a = 0.5},
setAllPoints = true,
},
HighlightTexture = {
file = [[Interface\AddOns\SylingTracker\Media\Textures\Icons\close]],
vertexColor = { r = 1, g = 0, b = 0, a = 0.15},
setAllPoints = true,
},
location = {
Anchor("TOPRIGHT", -5, -5)
}
},
HeaderText = {
height = 24,
text = "Need Help ?",
sharedMediaFont = FontType("PT Sans Narrow Bold", 16),
textColor = Color(0, 0.9, 0.9, 0.9),
justifyH = "CENTER",
location = {
Anchor("TOP", 0, -10),
}
},
Description = {
height = 24,
sharedMediaFont = FontType("PT Sans Narrow Bold", 14),
textColor = Color(0.75, 0.75, 0.75, 0.9),
justifyH = "CENTER",
location = {
Anchor("TOP", 0, -50),
}
},
CopyHelpText = {
height = 24,
text = "Ctrl + C to copy",
sharedMediaFont = FontType("PT Sans Narrow Bold", 13),
textColor = Color(0.9, 0.37, 0, 0.9),
justifyH = "CENTER",
location = {
Anchor("BOTTOM", 0, 5, "LinkBox", "TOP"),
}
},
LinkBox = {
height = 36,
backdrop = {
bgFile = [[Interface\Buttons\WHITE8X8]]
},
backdropColor = { r = 255/255, g = 255/255, b = 255/255, a = 0.07 },
sharedMediaFont = FontType("PT Sans Narrow Bold", 15),
textColor = Color(0.9, 195/255, 0, 0.9),
textInsets = Inset(10, 0, 5, 5),
autoFocus = false,
location = {
Anchor("LEFT", 20),
Anchor("RIGHT", -20),
Anchor("BOTTOM", 0, 20)
}
}
}
})
-- ========================================================================= --
local HelperWindowObj = HelperWindow("SylingTracker_HelperWindow", UIParent)
HelperWindowObj:Hide()
HelperWindowObj:SetPoint("CENTER")
-- ========================================================================= --
-- Enchance the API
-- ========================================================================= --
class "API" (function(_ENV)
__Arguments__{ String, Number }
__Static__() function ShowHelperWindow(type, id)
HelperWindowObj:SetType(type)
HelperWindowObj:SetID(id)
HelperWindowObj:UpdateText()
HelperWindowObj:Show()
end
__Static__() function HideHelperWindow()
HelperWindowObj:Hide()
end
end)