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.
217 lines
7.4 KiB
217 lines
7.4 KiB
local _, Cell = ...
|
|
local L = Cell.L
|
|
local F = Cell.funcs
|
|
local P = Cell.pixelPerfectFuncs
|
|
|
|
local textureSelector, scrollFrame, confirmBtn, currentTexturePath
|
|
local LoadTextures
|
|
local buttons = {}
|
|
local selectedPath, textureNum
|
|
|
|
local function CreateTextureSelector()
|
|
if not Cell.frames.indicatorsTab.mask then
|
|
Cell:CreateMask(Cell.frames.indicatorsTab, nil, {1, -1, -1, 1})
|
|
Cell.frames.indicatorsTab.mask:Hide()
|
|
end
|
|
|
|
textureSelector = CreateFrame("Frame", "CellOptionsFrame_TextureSelector", Cell.frames.indicatorsTab, "BackdropTemplate")
|
|
Cell:StylizeFrame(textureSelector, nil, Cell:GetAccentColorTable())
|
|
textureSelector:SetFrameLevel(Cell.frames.indicatorsTab:GetFrameLevel() + 50)
|
|
textureSelector:SetPoint("TOPLEFT", P:Scale(1), -100)
|
|
textureSelector:SetPoint("TOPRIGHT", P:Scale(-1), -100)
|
|
textureSelector:SetHeight(235)
|
|
|
|
-- add
|
|
local addEB = Cell:CreateEditBox(textureSelector, 355, 20)
|
|
addEB:SetPoint("TOPLEFT", 5, -5)
|
|
addEB.tip = addEB:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
|
|
addEB.tip:SetTextColor(0.4, 0.4, 0.4, 1)
|
|
addEB.tip:SetText("Interface\\... (tga|blp|jpg)")
|
|
addEB.tip:SetPoint("LEFT", 5, 0)
|
|
addEB:SetScript("OnEditFocusGained", function()
|
|
addEB:HighlightText()
|
|
addEB.tip:Hide()
|
|
end)
|
|
addEB:SetScript("OnEditFocusLost", function()
|
|
addEB:HighlightText(0, 0)
|
|
if addEB:GetText() == "" then
|
|
addEB.tip:Show()
|
|
end
|
|
end)
|
|
|
|
local addBtn = Cell:CreateButton(textureSelector, L["Add"], "accent", {66, 20})
|
|
addBtn:SetPoint("TOPLEFT", addEB, "TOPRIGHT", -1, 0)
|
|
addBtn:SetScript("OnClick", function()
|
|
local path = strtrim(addEB:GetText())
|
|
-- check whether exists
|
|
if path ~= "" and not F:TContains(CellDB["customTextures"], path) then
|
|
-- update db
|
|
tinsert(CellDB["customTextures"], path)
|
|
-- reload
|
|
LoadTextures()
|
|
end
|
|
end)
|
|
|
|
-- cancel
|
|
local cancelBtn = Cell:CreateButton(textureSelector, L["Cancel"], "red", {70, 20})
|
|
cancelBtn:SetPoint("BOTTOMRIGHT")
|
|
cancelBtn:SetBackdropBorderColor(unpack(Cell:GetAccentColorTable()))
|
|
cancelBtn:SetScript("OnClick", function()
|
|
textureSelector:Hide()
|
|
end)
|
|
|
|
-- OK
|
|
confirmBtn = Cell:CreateButton(textureSelector, L["Confirm"], "green", {70, 20})
|
|
confirmBtn:SetPoint("BOTTOMRIGHT", cancelBtn, "BOTTOMLEFT", P:Scale(1), 0)
|
|
confirmBtn:SetBackdropBorderColor(unpack(Cell:GetAccentColorTable()))
|
|
|
|
-- textures
|
|
local texFrame = Cell:CreateFrame(nil, textureSelector)
|
|
texFrame:Show()
|
|
texFrame:SetPoint("TOPLEFT", addEB, "BOTTOMLEFT", 0, -10)
|
|
texFrame:SetPoint("BOTTOMRIGHT", -5, 30)
|
|
scrollFrame = Cell:CreateScrollFrame(texFrame, -5, 5)
|
|
scrollFrame:SetScrollStep(55)
|
|
|
|
-- current path
|
|
currentTexturePath = textureSelector:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
|
|
currentTexturePath:SetPoint("BOTTOMLEFT", 5, 5)
|
|
currentTexturePath:SetPoint("RIGHT", confirmBtn, "LEFT", -5, 0)
|
|
currentTexturePath:SetJustifyH("LEFT")
|
|
currentTexturePath:SetWordWrap(false)
|
|
|
|
-- OnHide
|
|
textureSelector:SetScript("OnHide", function()
|
|
Cell.frames.indicatorsTab.mask:Hide()
|
|
textureSelector:Hide()
|
|
addEB.tip:Show()
|
|
end)
|
|
end
|
|
|
|
-------------------------------------------------
|
|
-- load
|
|
-------------------------------------------------
|
|
LoadTextures = function()
|
|
scrollFrame:Reset()
|
|
|
|
local builtIns, textures = F:GetTextures()
|
|
textureNum = #textures
|
|
|
|
-- create buttons
|
|
for i, path in pairs(textures) do
|
|
local b = buttons[i]
|
|
if not b then
|
|
b = CreateFrame("Button", nil, scrollFrame.content, "BackdropTemplate")
|
|
buttons[i] = b
|
|
P:Size(b, 50, 50)
|
|
b:SetBackdrop({bgFile = Cell.vars.whiteTexture, edgeFile = Cell.vars.whiteTexture, edgeSize = P:Scale(1)})
|
|
b:SetBackdropColor(0.115, 0.115, 0.115, 1)
|
|
b:SetBackdropBorderColor(0, 0, 0, 1)
|
|
b:SetScript("OnEnter", function()
|
|
b:SetBackdropBorderColor(unpack(Cell:GetAccentColorTable()))
|
|
b.delBtn:SetBackdropBorderColor(unpack(Cell:GetAccentColorTable()))
|
|
|
|
F:FitWidth(currentTexturePath, path, "right")
|
|
end)
|
|
b:SetScript("OnLeave", function()
|
|
currentTexturePath:SetText("")
|
|
if selectedPath ~= path then
|
|
b:SetBackdropBorderColor(0, 0, 0, 1)
|
|
b.delBtn:SetBackdropBorderColor(0, 0, 0, 1)
|
|
end
|
|
end)
|
|
|
|
b.tex = b:CreateTexture(nil, "ARTWORK")
|
|
b.tex:SetPoint("TOPLEFT", 5, -5)
|
|
b.tex:SetPoint("BOTTOMRIGHT", -5, 5)
|
|
|
|
b.delBtn = Cell:CreateButton(b, "×", "red", {13, 13})
|
|
b.delBtn:GetFontString():SetFont("Interface\\AddOns\\Cell\\Media\\Fonts\\font.ttf", 10, "")
|
|
b.delBtn:SetPoint("TOPRIGHT")
|
|
b.delBtn:HookScript("OnEnter", function()
|
|
b:GetScript("OnEnter")(b)
|
|
end)
|
|
b.delBtn:HookScript("OnLeave", function()
|
|
b:GetScript("OnLeave")(b)
|
|
end)
|
|
b.delBtn:SetScript("OnClick", function()
|
|
-- update db
|
|
F:TRemove(CellDB["customTextures"], path)
|
|
-- reload
|
|
LoadTextures()
|
|
end)
|
|
end
|
|
|
|
-- point
|
|
b:ClearAllPoints()
|
|
b:SetParent(scrollFrame.content)
|
|
b:Show()
|
|
if i == 1 then
|
|
b:SetPoint("TOPLEFT", 5, 0)
|
|
elseif i % 7 == 1 then
|
|
b:SetPoint("TOPLEFT", buttons[i-7], "BOTTOMLEFT", 0, -5)
|
|
else
|
|
b:SetPoint("TOPLEFT", buttons[i-1], "TOPRIGHT", 5, 0)
|
|
end
|
|
|
|
-- texture
|
|
if strfind(strlower(path), "^interface") then
|
|
b.tex:SetTexture(path)
|
|
else
|
|
b.tex:SetAtlas(path)
|
|
end
|
|
|
|
-- onclick
|
|
b:SetScript("OnClick", function(self, button)
|
|
selectedPath = path
|
|
for j, bb in pairs(buttons) do
|
|
if i ~= j then
|
|
bb:SetBackdropBorderColor(0, 0, 0, 1)
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- delete
|
|
if i > builtIns then
|
|
b.delBtn:Show()
|
|
else
|
|
b.delBtn:Hide()
|
|
end
|
|
|
|
-- highlight selected
|
|
if selectedPath == path then
|
|
b:SetBackdropBorderColor(unpack(Cell:GetAccentColorTable()))
|
|
else
|
|
b:SetBackdropBorderColor(0, 0, 0, 1)
|
|
end
|
|
end
|
|
|
|
-- hide others
|
|
for i = textureNum+1, #buttons do
|
|
buttons[i]:SetParent(nil)
|
|
buttons[i]:ClearAllPoints()
|
|
buttons[i]:Hide()
|
|
end
|
|
|
|
-- update height
|
|
scrollFrame:SetContentHeight(50, math.ceil(textureNum/7), 5)
|
|
end
|
|
|
|
-------------------------------------------------
|
|
-- functions
|
|
-------------------------------------------------
|
|
function F:ShowTextureSelector(selected, callback)
|
|
if not textureSelector then
|
|
CreateTextureSelector()
|
|
end
|
|
|
|
Cell.frames.indicatorsTab.mask:Show()
|
|
textureSelector:Show()
|
|
|
|
selectedPath = selected
|
|
LoadTextures()
|
|
confirmBtn:SetScript("OnClick", function()
|
|
textureSelector:Hide()
|
|
if callback then callback(selectedPath) end
|
|
end)
|
|
end
|