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.

546 lines
19 KiB

local _, Cell = ...
local L = Cell.L
local F = Cell.funcs
local P = Cell.pixelPerfectFuncs
local aboutTab = Cell:CreateFrame("CellOptionsFrame_AboutTab", Cell.frames.optionsFrame, nil, nil, true)
Cell.frames.aboutTab = aboutTab
aboutTab:SetAllPoints(Cell.frames.optionsFrame)
aboutTab:Hide()
local authorText, specialThanksText, supportersText1, supportersText2
local translatorsTextCN, translatorsTextKR, translatorsTextPT, translatorsTextDE, translatorsTextRU
local UpdateFont
-------------------------------------------------
-- description
-------------------------------------------------
local descriptionPane
local function CreateDescriptionPane()
descriptionPane = Cell:CreateTitledPane(aboutTab, "Cell", 422, 140)
descriptionPane:SetPoint("TOPLEFT", aboutTab, "TOPLEFT", 5, -5)
local changelogsBtn = Cell:CreateButton(descriptionPane, L["Changelogs"], "accent", {100, 17})
changelogsBtn:SetPoint("TOPRIGHT")
changelogsBtn:SetScript("OnClick", function()
F:CheckWhatsNew(true)
end)
local snippetsBtn = Cell:CreateButton(descriptionPane, L["Code Snippets"], "accent", {120, 17})
snippetsBtn:SetPoint("TOPRIGHT", changelogsBtn, "TOPLEFT", 1, 0)
snippetsBtn:SetScript("OnClick", function()
F:ShowCodeSnippets()
end)
local descText = descriptionPane:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
descText:SetPoint("TOPLEFT", 5, -27)
descText:SetPoint("RIGHT", -10, 0)
descText:SetJustifyH("LEFT")
descText:SetSpacing(5)
descText:SetText(L["ABOUT"])
end
-------------------------------------------------
-- author
-------------------------------------------------
local function CreateAuthorPane()
local authorPane = Cell:CreateTitledPane(aboutTab, L["Author"], 205, 50)
authorPane:SetPoint("TOPLEFT", aboutTab, "TOPLEFT", 5, -165)
authorText = authorPane:CreateFontString(nil, "OVERLAY")
authorText:SetPoint("TOPLEFT", 5, -27)
authorText.font = "Interface\\AddOns\\Cell\\Media\\Fonts\\font.ttf"
authorText.size = 12
UpdateFont(authorText)
authorText:SetText("篠崎-影之哀伤 (CN)")
end
-------------------------------------------------
-- slash
-------------------------------------------------
local function CreateSlashPane()
local slashPane = Cell:CreateTitledPane(aboutTab, L["Slash Commands"], 205, 50)
slashPane:SetPoint("TOPLEFT", aboutTab, "TOPLEFT", 5, -230)
local commandText = slashPane:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
commandText:SetPoint("TOPLEFT", 5, -27)
commandText:SetText("/cell")
end
-------------------------------------------------
-- translators
-------------------------------------------------
local function CreateTranslatorsPane()
local translatorsPane = Cell:CreateTitledPane(aboutTab, L["Translators"], 205, 120)
translatorsPane:SetPoint("TOPLEFT", aboutTab, "TOPLEFT", 222, -165)
-- zhTW
translatorsTextCN = translatorsPane:CreateFontString(nil, "OVERLAY")
translatorsTextCN.font = UNIT_NAME_FONT_CHINESE
translatorsTextCN.size = 13
UpdateFont(translatorsTextCN)
translatorsTextCN:SetPoint("TOPLEFT", 5, -27)
translatorsTextCN:SetPoint("TOPRIGHT", -5, -27)
translatorsTextCN:SetSpacing(5)
translatorsTextCN:SetJustifyH("LEFT")
translatorsTextCN:SetText("zhTW: RainbowUI, BNS333, Mili")
-- koKR
translatorsTextKR = translatorsPane:CreateFontString(nil, "OVERLAY")
translatorsTextKR.font = UNIT_NAME_FONT_KOREAN
translatorsTextKR.size = 12
UpdateFont(translatorsTextKR)
translatorsTextKR:SetPoint("LEFT", 5, 0)
translatorsTextKR:SetPoint("RIGHT", -5, 0)
translatorsTextKR:SetPoint("TOP", translatorsTextCN, "BOTTOM", 0, -5)
translatorsTextKR:SetSpacing(5)
translatorsTextKR:SetJustifyH("LEFT")
translatorsTextKR:SetText("koKR: naragok79, netaras, 부패질")
-- ptBR
translatorsTextPT = translatorsPane:CreateFontString(nil, "OVERLAY")
translatorsTextPT.font = UNIT_NAME_FONT_ROMAN
translatorsTextPT.size = 12
UpdateFont(translatorsTextPT)
translatorsTextPT:SetPoint("LEFT", 5, 0)
translatorsTextPT:SetPoint("RIGHT", -5, 0)
translatorsTextPT:SetPoint("TOP", translatorsTextKR, "BOTTOM", 0, -5)
translatorsTextPT:SetSpacing(5)
translatorsTextPT:SetJustifyH("LEFT")
translatorsTextPT:SetText("ptBR: cathtail")
-- deDE
translatorsTextDE = translatorsPane:CreateFontString(nil, "OVERLAY")
translatorsTextDE.font = UNIT_NAME_FONT_ROMAN
translatorsTextDE.size = 12
UpdateFont(translatorsTextDE)
translatorsTextDE:SetPoint("LEFT", 5, 0)
translatorsTextDE:SetPoint("RIGHT", -5, 0)
translatorsTextDE:SetPoint("TOP", translatorsTextPT, "BOTTOM", 0, -5)
translatorsTextDE:SetSpacing(5)
translatorsTextDE:SetJustifyH("LEFT")
translatorsTextDE:SetText("deDE: CheersItsJulian")
-- ruRU
translatorsTextRU = translatorsPane:CreateFontString(nil, "OVERLAY")
translatorsTextRU.font = UNIT_NAME_FONT_ROMAN
translatorsTextRU.size = 12
UpdateFont(translatorsTextRU)
translatorsTextRU:SetPoint("LEFT", 5, 0)
translatorsTextRU:SetPoint("RIGHT", -5, 0)
translatorsTextRU:SetPoint("TOP", translatorsTextDE, "BOTTOM", 0, -5)
translatorsTextRU:SetSpacing(5)
translatorsTextRU:SetJustifyH("LEFT")
translatorsTextRU:SetText("ruRU: SkywardenSylvanas")
end
-------------------------------------------------
-- special thanks
-------------------------------------------------
local function CreateSpecialThanksPane()
local specialThanksPane = Cell:CreateTitledPane(aboutTab, L["Special Thanks"], 422, 120)
specialThanksPane:SetPoint("TOPLEFT", aboutTab, "TOPLEFT", 5, -300)
specialThanksText = specialThanksPane:CreateFontString(nil, "OVERLAY")
specialThanksText.font = UNIT_NAME_FONT_CHINESE
specialThanksText.size = 13
UpdateFont(specialThanksText)
specialThanksText:SetPoint("TOPLEFT", 5, -27)
specialThanksText:SetPoint("RIGHT", -5, 0)
specialThanksText:SetSpacing(5)
specialThanksText:SetJustifyH("LEFT")
specialThanksText:SetText(
"|cffffff00Reat TV(YouTube), 钛锬(NGA), warbaby(爱不易)|r\n"..
"|cffff0000YouTube:|r AutomaticJak, JFunkGaming, yumytv\n"..
"|cff5662f6Discord:|r aba, BinarySunshine, Bruds, clankz., DreadMesh, Gharr, honeyhoney, leaKsi, Missgunst, Serghei, Vollmerino, Xepheris"
)
end
-------------------------------------------------
-- supporters
-------------------------------------------------
local function GetSupporters(t)
local str = ""
local n = #t
for i = 1, n do
for _, name in pairs(t[i]) do
name = name:gsub("%(.+%)", function(s)
return "|cff777777"..s.."|r"
end)
str = str .. name
if i ~= n then
str = str .. "\n"
end
end
end
return str
end
local function Getsupporters2(t)
local str = ""
local n = #t
for i = 1, n do
local name = t[i][1] .. " |cff777777("..t[i][2]..")|r"
str = str .. name
if i ~= n then
str = str .. "\n"
end
end
return str
end
local function CreateAnimation(frame)
local fadeOut = frame:CreateAnimationGroup()
frame.fadeOut = fadeOut
fadeOut.alpha = fadeOut:CreateAnimation("Alpha")
fadeOut.alpha:SetFromAlpha(1)
fadeOut.alpha:SetToAlpha(0)
fadeOut.alpha:SetDuration(0.3)
fadeOut:SetScript("OnFinished", function()
frame:Hide()
end)
local fadeIn = frame:CreateAnimationGroup()
frame.fadeIn = fadeIn
fadeIn.alpha = fadeIn:CreateAnimation("Alpha")
fadeIn.alpha:SetFromAlpha(0)
fadeIn.alpha:SetToAlpha(1)
fadeIn.alpha:SetDuration(0.3)
fadeIn:SetScript("OnPlay", function()
frame:Show()
end)
end
local function CreateButton(w, h, tex)
local supportersBtn = Cell:CreateButton(aboutTab, L["Supporters"], "accent", {w, h})
supportersBtn:SetToplevel(true)
supportersBtn:SetPushedTextOffset(0, 0)
supportersBtn:SetScript("OnHide", function()
supportersBtn:SetBackdropColor(unpack(supportersBtn.color))
end)
supportersBtn:HookScript("OnEnter", function()
F:HideUtilityList()
end)
Cell:StartRainbowText(supportersBtn:GetFontString())
local iconSize = min(w, h) - 2
local icon1 = supportersBtn:CreateTexture(nil, "ARTWORK")
supportersBtn.icon1 = icon1
P:Point(supportersBtn.icon1, "TOPLEFT", 1, -1)
P:Size(icon1, iconSize, iconSize)
icon1:SetTexture(tex)
icon1:SetVertexColor(0.5, 0.5, 0.5)
local icon2 = supportersBtn:CreateTexture(nil, "ARTWORK")
supportersBtn.icon2 = icon2
P:Point(supportersBtn.icon2, "BOTTOMRIGHT", -1, 1)
P:Size(icon2, iconSize, iconSize)
icon2:SetTexture(tex)
icon2:SetVertexColor(0.5, 0.5, 0.5)
CreateAnimation(supportersBtn)
return supportersBtn
end
local function CreateSupportersPane()
-- pane
local supportersPane = Cell:CreateTitledPane(aboutTab, "", 100, 100)
supportersPane:SetPoint("TOPLEFT", aboutTab, "TOPRIGHT", 6, -5)
supportersPane:SetPoint("BOTTOMLEFT", aboutTab, "BOTTOMRIGHT", 6, 5)
supportersPane:Hide()
CreateAnimation(supportersPane)
local heartIcon = supportersPane:CreateTexture(nil, "OVERLAY")
heartIcon:SetPoint("TOPRIGHT")
heartIcon:SetSize(16, 16)
heartIcon:SetTexture("Interface\\AddOns\\Cell\\Media\\Icons\\sparkling_heart")
local bgTex = supportersPane:CreateTexture(nil, "BACKGROUND", nil, 0)
bgTex:SetPoint("TOPLEFT", -5, 5)
bgTex:SetPoint("BOTTOMRIGHT", 5, -5)
bgTex:SetTexture(Cell.vars.whiteTexture)
bgTex:SetGradient("HORIZONTAL", CreateColor(0.1, 0.1, 0.1, 1), CreateColor(0.1, 0.1, 0.1, 0.7))
local supportersFrame1 = CreateFrame("Frame", nil, supportersPane)
supportersFrame1:SetPoint("TOPLEFT", 0, -27)
supportersFrame1:SetPoint("BOTTOMLEFT")
supportersFrame1.scroll = Cell:CreateScrollFrame(supportersFrame1)
supportersFrame1.scroll:SetScrollStep(50)
supportersText1 = supportersFrame1.scroll.content:CreateFontString(nil, "OVERLAY")
supportersText1.font = UNIT_NAME_FONT_CHINESE
supportersText1.size = 13
UpdateFont(supportersText1)
supportersText1:SetPoint("TOPLEFT")
supportersText1:SetSpacing(5)
supportersText1:SetJustifyH("LEFT")
supportersText1:SetText(GetSupporters(Cell.supporters1))
local supportersFrame2 = CreateFrame("Frame", nil, supportersPane)
supportersFrame2:SetPoint("TOPLEFT", supportersFrame1, "TOPRIGHT", 10, 0)
supportersFrame2:SetPoint("BOTTOMLEFT", supportersFrame1, "BOTTOMRIGHT")
supportersFrame2.scroll = Cell:CreateScrollFrame(supportersFrame2)
supportersFrame2.scroll:SetScrollStep(50)
supportersText2 = supportersFrame2.scroll.content:CreateFontString(nil, "OVERLAY")
supportersText2.font = UNIT_NAME_FONT_CHINESE
supportersText2.size = 13
UpdateFont(supportersText2)
supportersText2:SetPoint("TOPLEFT")
supportersText2:SetSpacing(5)
supportersText2:SetJustifyH("LEFT")
supportersText2:SetText(Getsupporters2(Cell.supporters2))
-- update width
local elapsedTime = 0
local function updateFunc(self, elapsed)
elapsedTime = elapsedTime + elapsed
supportersFrame1:SetWidth(supportersText1:GetWidth() + 10)
supportersFrame1.scroll:SetContentHeight(supportersText1:GetHeight() + 5)
supportersFrame2:SetWidth(supportersText2:GetWidth() + 10)
supportersFrame2.scroll:SetContentHeight(supportersText2:GetHeight() + 5)
supportersPane:SetWidth(supportersFrame1:GetWidth() + supportersFrame2:GetWidth() + 10)
if elapsedTime >= 0.5 then
supportersPane:SetScript("OnUpdate", nil)
end
end
supportersPane:SetScript("OnShow", function()
elapsedTime = 0
supportersPane:SetScript("OnUpdate", updateFunc)
end)
-- button
local supportersBtn1 = CreateButton(17, 157, [[Interface\AddOns\Cell\Media\Icons\right]])
supportersBtn1:SetPoint("TOPLEFT", aboutTab, "TOPRIGHT", 1, -5)
local label = supportersBtn1:GetFontString()
-- if Cell.isRetail then
label:ClearAllPoints()
label:SetPoint("CENTER", 6, -5)
label:SetRotation(-math.pi/2)
-- else
-- Cell:StopRainbowText(label)
-- label:SetWordWrap(true)
-- label:SetSpacing(0)
-- label:ClearAllPoints()
-- label:SetPoint("CENTER")
-- label:SetText("P\na\nt\nr\no\nn\ns")
-- Cell:StartRainbowText(label)
-- end
local supportersBtn2 = CreateButton(17, 17, [[Interface\AddOns\Cell\Media\Icons\left]])
-- supportersBtn2:SetPoint("TOPLEFT", aboutTab, "TOPRIGHT", 6, -5)
supportersBtn2:SetPoint("TOPLEFT", supportersPane)
supportersBtn2:SetPoint("TOPRIGHT", supportersPane, P:Scale(-20), 0)
supportersBtn2:Hide()
supportersBtn1:SetScript("OnClick", function()
if supportersBtn1.fadeOut:IsPlaying() or supportersBtn1.fadeIn:IsPlaying() then return end
supportersBtn1.fadeOut:Play()
supportersBtn2.fadeIn:Play()
supportersPane.fadeIn:Play()
end)
supportersBtn2:SetScript("OnClick", function()
if supportersBtn2.fadeOut:IsPlaying() or supportersBtn2.fadeIn:IsPlaying() then return end
supportersBtn1.fadeIn:Play()
supportersBtn2.fadeOut:Play()
supportersPane.fadeOut:Play()
end)
end
-------------------------------------------------
-- links
-------------------------------------------------
local links = {}
local function CreateLink(parent, id, icon, onEnter)
local f = CreateFrame("Frame", nil, parent, "BackdropTemplate")
P:Size(f, 34, 34)
f:SetBackdrop({bgFile = Cell.vars.whiteTexture})
f:SetBackdropColor(0, 0, 0, 1)
links[id] = f
f.icon = f:CreateTexture(nil, "ARTWORK")
P:Point(f.icon, "TOPLEFT", 1, -1)
P:Point(f.icon, "BOTTOMRIGHT", -1, 1)
f.icon:SetTexture(icon)
f:SetScript("OnEnter", function()
f:SetBackdropColor(Cell:GetAccentColorRGB())
for _id, _f in pairs(links) do
if _id ~= id then
_f:SetBackdropColor(0, 0, 0, 1)
end
end
if onEnter then onEnter() end
end)
f:SetScript("OnHide", function()
f:SetBackdropColor(0, 0, 0, 1)
end)
return f
end
local function CreateLinksPane()
local linksPane = Cell:CreateTitledPane(aboutTab, L["Links"], 422, 100)
linksPane:SetPoint("TOPLEFT", aboutTab, "TOPLEFT", 5, -430)
local current
local linksEB = Cell:CreateEditBox(linksPane, 412, 20)
linksEB:SetPoint("TOPLEFT", 5, -27)
linksEB:SetText("https://github.com/enderneko/Cell")
linksEB:SetScript("OnTextChanged", function(self, userChanged)
if userChanged then
linksEB:SetText(current)
linksEB:HighlightText()
end
linksEB:SetCursorPosition(0)
end)
linksEB:SetScript("OnMouseUp", function(self)
linksEB:HighlightText()
end)
--! github
local github = CreateLink(linksPane, "github", "Interface\\AddOns\\Cell\\Media\\Links\\github.tga", function()
current = "https://github.com/enderneko/Cell"
linksEB:SetText(current)
linksEB:ClearFocus()
end)
github:SetPoint("TOPLEFT", linksEB, "BOTTOMLEFT", 0, -7)
linksEB:SetScript("OnShow", function()
github:GetScript("OnEnter")()
end)
--! curseforge
local curseforge = CreateLink(linksPane, "curseforge", "Interface\\AddOns\\Cell\\Media\\Links\\curseforge.tga", function()
current = "https://www.curseforge.com/wow/addons/cell"
linksEB:SetText(current)
linksEB:ClearFocus()
end)
curseforge:SetPoint("TOPLEFT", github, "TOPRIGHT", 7, 0)
--! discord
local discord = CreateLink(linksPane, "discord", "Interface\\AddOns\\Cell\\Media\\Links\\discord.tga", function()
current = "https://discord.gg/9PSe3fKQGJ"
linksEB:SetText(current)
linksEB:ClearFocus()
end)
discord:SetPoint("TOPLEFT", curseforge, "TOPRIGHT", 7, 0)
--! kook
local kook = CreateLink(linksPane, "kook", "Interface\\AddOns\\Cell\\Media\\Links\\kook.tga", function()
current = "https://kook.top/q4T7yp"
linksEB:SetText(current)
linksEB:ClearFocus()
end)
kook:SetPoint("TOPLEFT", discord, "TOPRIGHT", 7, 0)
--! nga
local nga = CreateLink(linksPane, "nga", "Interface\\AddOns\\Cell\\Media\\Links\\nga.tga", function()
current = "https://bbs.nga.cn/read.php?tid=23488341"
linksEB:SetText(current)
linksEB:ClearFocus()
end)
nga:SetPoint("TOPLEFT", kook, "TOPRIGHT", 7, 0)
--! afdian
local afdian = CreateLink(linksPane, "afdian", "Interface\\AddOns\\Cell\\Media\\Links\\afdian.tga", function()
current = "https://afdian.net/a/enderneko"
linksEB:SetText(current)
linksEB:ClearFocus()
end)
afdian:SetPoint("TOPRIGHT", linksEB, "BOTTOMRIGHT", 0, -7)
--! ko-fi
local kofi = CreateLink(linksPane, "kofi", "Interface\\AddOns\\Cell\\Media\\Links\\ko-fi.tga", function()
current = "https://ko-fi.com/enderneko"
linksEB:SetText(current)
linksEB:ClearFocus()
end)
kofi:SetPoint("TOPRIGHT", afdian, "TOPLEFT", -7, 0)
end
-------------------------------------------------
-- import & export
-------------------------------------------------
local function CreateImportExportPane()
local iePane = Cell:CreateTitledPane(aboutTab, L["Import & Export All Settings"], 422, 50)
iePane:SetPoint("TOPLEFT", 5, -545)
local importBtn = Cell:CreateButton(iePane, L["Import"], "accent-hover", {200, 20})
importBtn:SetPoint("TOPLEFT", 5, -27)
importBtn:SetScript("OnClick", F.ShowImportFrame)
local exportBtn = Cell:CreateButton(iePane, L["Export"], "accent-hover", {200, 20})
exportBtn:SetPoint("TOPRIGHT", -5, -27)
exportBtn:SetScript("OnClick", F.ShowExportFrame)
end
-------------------------------------------------
-- functions
-------------------------------------------------
local init
local function ShowTab(tab)
if tab == "about" then
if not init then
init = true
CreateDescriptionPane()
CreateAuthorPane()
CreateSlashPane()
CreateSpecialThanksPane()
CreateTranslatorsPane()
CreateLinksPane()
CreateImportExportPane()
CreateSupportersPane()
end
aboutTab:Show()
descriptionPane:SetTitle("Cell "..Cell.version)
else
aboutTab:Hide()
end
end
Cell:RegisterCallback("ShowOptionsTab", "AboutTab_ShowTab", ShowTab)
UpdateFont = function(fs)
if not fs then return end
fs:SetFont(fs.font, fs.size + CellDB["appearance"]["optionsFontSizeOffset"], "")
fs:SetTextColor(1, 1, 1, 1)
fs:SetShadowColor(0, 0, 0)
fs:SetShadowOffset(1, -1)
end
function Cell:UpdateAboutFont()
UpdateFont(authorText)
UpdateFont(translatorsTextCN)
UpdateFont(translatorsTextKR)
UpdateFont(translatorsTextPT)
UpdateFont(translatorsTextDE)
UpdateFont(translatorsTextRU)
UpdateFont(specialThanksText)
UpdateFont(supportersText1)
UpdateFont(supportersText2)
end