Files
coa-clique/Clique/CliqueOptions.lua
T
2023-04-07 03:25:56 -07:00

1957 lines
65 KiB
Lua

local genv = getfenv(0)
local Clique = genv.Clique
local L = Clique.Locals
local StaticPopupDialogs = genv.StaticPopupDialogs
local TEXT = genv.TEXT
local OKAY = genv.OKAY
local CANCEL = genv.CANCEL
local GameTooltip = genv.GameTooltip
local NUM_ENTRIES = 10
local ENTRY_SIZE = 35
local work = {}
function Clique:OptionsOnLoad()
-- Create a set of buttons to hook the AscensionSpellbookFrame
self.spellbuttons = {}
local onclick = function(frame, button) Clique:SpellBookButtonPressed(frame, button) end
local onleave = function(button)
button.updateTooltip = nil
GameTooltip:Hide()
end
for i=1,12 do
local parent = getglobal("AscensionSpellbookFrameContentSpellsSpellButton"..i)
local button = CreateFrame("Button", "SpellButtonCliqueCover"..i, parent)
button:SetID(parent:GetID())
button:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square")
button:RegisterForClicks("AnyUp")
button:SetAllPoints(parent)
button:SetScript("OnClick", onclick)
button:SetScript("OnEnter", function(self)
local parent = self:GetParent()
if parent:IsEnabled() == 1 then
SpellButton_OnEnter(parent)
else
button:GetHighlightTexture():Hide()
end
end)
button:SetScript("OnLeave", onleave)
button:Hide()
self.spellbuttons[i] = button
end
CreateFrame("CheckButton", "CliquePulloutTab", getglobal("AscensionSpellbookFrameContentSpellsSpellButton1"), "SpellBookSkillLineTabTemplate")
CliquePulloutTab:SetNormalTexture("Interface\\AddOns\\Clique\\Images\\CliqueIcon")
CliquePulloutTab:SetScript("OnClick", function() Clique:Toggle() end)
CliquePulloutTab:SetScript("OnEnter", function() local i = 1 end)
CliquePulloutTab:SetScript("OnShow", function()
Clique.inuse = nil
for k,v in pairs(self.clicksets) do
if next(v) then
Clique.inuse = true
end
end
if not Clique.inuse then
CliqueFlashFrame.texture:Show()
CliqueFlashFrame.texture:SetAlpha(1.0)
local counter, loops, fading = 0, 0, true
CliqueFlashFrame:SetScript("OnUpdate", function(self, elapsed)
counter = counter + elapsed
if counter > 0.5 then
loops = loops + 0.5
fading = not fading
counter = counter - 0.5
end
if loops > 30 then
self.texture:Hide()
self:SetScript("OnUpdate", nil)
return
end
local texture = self.texture
if fading then
texture:SetAlpha(1.0 - (counter / 0.5))
else
texture:SetAlpha(counter / 0.5)
end
end)
end
end)
CliquePulloutTab:SetScript("OnEnter", function(self)
GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT")
GameTooltip:SetText("Clique configuration")
GameTooltip:Show()
end)
local frame = CreateFrame("Frame", "CliqueFlashFrame", CliquePulloutTab)
frame:SetWidth(10) frame:SetHeight(10)
frame:SetPoint("CENTER", 0, 0)
local texture = frame:CreateTexture(nil, "OVERLAY")
texture:SetTexture("Interface\\Buttons\\CheckButtonGlow")
texture:SetHeight(64) texture:SetWidth(64)
texture:SetPoint("CENTER", 0, 0)
texture:Hide()
CliqueFlashFrame.texture = texture
CliquePulloutTab:Show()
-- Hook the container buttons
local containerFunc = function(button)
if IsShiftKeyDown() and CliqueCustomArg1 then
if CliqueCustomArg1:HasFocus() then
CliqueCustomArg1:Insert(GetContainerItemLink(button:GetParent():GetID(), button:GetID()))
elseif CliqueCustomArg2:HasFocus() then
CliqueCustomArg2:Insert(GetContainerItemLink(button:GetParent():GetID(), button:GetID()))
elseif CliqueCustomArg3:HasFocus() then
CliqueCustomArg3:Insert(GetContainerItemLink(button:GetParent():GetID(), button:GetID()))
elseif CliqueCustomArg4:HasFocus() then
CliqueCustomArg4:Insert(GetContainerItemLink(button:GetParent():GetID(), button:GetID()))
elseif CliqueCustomArg5:HasFocus() then
CliqueCustomArg5:Insert(GetContainerItemLink(button:GetParent():GetID(), button:GetID()))
end
end
end
hooksecurefunc("ContainerFrameItemButton_OnModifiedClick", containerFunc)
-- Hook the bank buttons
local bankFunc = function(button)
if IsShiftKeyDown() and CliqueCustomArg1 then
if CliqueCustomArg1:HasFocus() then
CliqueCustomArg1:Insert(GetContainerItemLink(BANK_CONTAINER, button:GetID()))
elseif CliqueCustomArg2:HasFocus() then
CliqueCustomArg2:Insert(GetContainerItemLink(BANK_CONTAINER, button:GetID()))
elseif CliqueCustomArg3:HasFocus() then
CliqueCustomArg3:Insert(GetContainerItemLink(BANK_CONTAINER, button:GetID()))
elseif CliqueCustomArg4:HasFocus() then
CliqueCustomArg4:Insert(GetContainerItemLink(BANK_CONTAINER, button:GetID()))
elseif CliqueCustomArg5:HasFocus() then
CliqueCustomArg5:Insert(GetContainerItemLink(BANK_CONTAINER, button:GetID()))
end
end
end
hooksecurefunc("BankFrameItemButtonGeneric_OnModifiedClick", bankFunc)
-- Hook the paper doll frame buttons
local dollFunc = function(button)
if IsShiftKeyDown() and CliqueCustomArg1 then
if CliqueCustomArg1:HasFocus() then
CliqueCustomArg1:Insert(GetInventoryItemLink("player", button:GetID()))
elseif CliqueCustomArg2:HasFocus() then
CliqueCustomArg2:Insert(GetInventoryItemLink("player", button:GetID()))
elseif CliqueCustomArg3:HasFocus() then
CliqueCustomArg3:Insert(GetInventoryItemLink("player", button:GetID()))
elseif CliqueCustomArg4:HasFocus() then
CliqueCustomArg4:Insert(GetInventoryItemLink("player", button:GetID()))
elseif CliqueCustomArg5:HasFocus() then
CliqueCustomArg5:Insert(GetInventoryItemLink("player", button:GetID()))
end
end
end
hooksecurefunc("PaperDollItemSlotButton_OnModifiedClick", dollFunc)
end
function Clique:LEARNED_SPELL_IN_TAB()
local num = GetNumSpellTabs()
CliquePulloutTab:ClearAllPoints()
CliquePulloutTab:SetPoint("BOTTOMLEFT", AscensionSpellbookFrameSideBarTab1,"TOPLEFT",0,10)
end
function Clique:ToggleSpellBookButtons()
local method = CliqueFrame:IsVisible() and "Show" or "Hide"
local buttons = self.spellbuttons
for i=1,12 do
buttons[i][method](buttons[i])
end
end
function Clique:Toggle()
if not CliqueFrame then
Clique:CreateOptionsFrame()
CliqueFrame:Hide()
CliqueFrame:Show()
else
if CliqueFrame:IsVisible() then
CliqueFrame:Hide()
CliquePulloutTab:SetChecked(nil)
else
CliqueFrame:Show()
CliquePulloutTab:SetChecked(true)
end
end
Clique:ToggleSpellBookButtons()
self:ListScrollUpdate()
end
-- This code is contributed with permission from Beladona
local ondragstart = function(self)
self:GetParent():StartMoving()
end
local ondragstop = function(self)
self:GetParent():StopMovingOrSizing()
self:GetParent():SetUserPlaced()
end
function Clique:SkinFrame(frame)
frame:SetBackdrop({
bgFile = "Interface\\AddOns\\Clique\\images\\backdrop.tga",
edgeFile = "Interface\\AddOns\\Clique\\images\\borders.tga", tile = true,
tileSize = 32, edgeSize = 16,
insets = {left = 16, right = 16, top = 16, bottom = 16}
});
frame:EnableMouse()
frame:SetClampedToScreen(true)
frame.titleBar = CreateFrame("Button", nil, frame)
frame.titleBar:SetHeight(32)
frame.titleBar:SetPoint("TOPLEFT", frame, "TOPLEFT", 2, -2)
frame.titleBar:SetPoint("TOPRIGHT", frame, "TOPRIGHT", -2, -2)
frame:SetMovable(true)
frame:SetFrameStrata("MEDIUM")
frame.titleBar:RegisterForDrag("LeftButton")
frame.titleBar:SetScript("OnDragStart", ondragstart)
frame.titleBar:SetScript("OnDragStop", ondragstop)
frame.headerLeft = frame.titleBar:CreateTexture(nil, "ARTWORK");
frame.headerLeft:SetTexture("Interface\\AddOns\\Clique\\images\\headCorner.tga");
frame.headerLeft:SetWidth(32); frame.headerLeft:SetHeight(32);
frame.headerLeft:SetPoint("TOPLEFT", 0, 0);
frame.headerRight = frame.titleBar:CreateTexture(nil, "ARTWORK");
frame.headerRight:SetTexture("Interface\\AddOns\\Clique\\images\\headCorner.tga");
frame.headerRight:SetTexCoord(1,0,0,1);
frame.headerRight:SetWidth(32); frame.headerRight:SetHeight(32);
frame.headerRight:SetPoint("TOPRIGHT", 0, 0);
frame.header = frame.titleBar:CreateTexture(nil, "ARTWORK");
frame.header:SetTexture("Interface\\AddOns\\Clique\\images\\header.tga");
frame.header:SetPoint("TOPLEFT", frame.headerLeft, "TOPRIGHT");
frame.header:SetPoint("BOTTOMRIGHT", frame.headerRight, "BOTTOMLEFT");
frame.title = frame.titleBar:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall");
frame.title:SetWidth(200); frame.title:SetHeight(16);
frame.title:SetPoint("TOP", 0, -2);
frame.footerLeft = frame:CreateTexture(nil, "ARTWORK");
frame.footerLeft:SetTexture("Interface\\AddOns\\Clique\\images\\footCorner.tga");
frame.footerLeft:SetWidth(48); frame.footerLeft:SetHeight(48);
frame.footerLeft:SetPoint("BOTTOMLEFT", frame, "BOTTOMLEFT", 2, 2);
frame.footerRight = frame:CreateTexture(nil, "ARTWORK");
frame.footerRight:SetTexture("Interface\\AddOns\\Clique\\images\\footCorner.tga");
frame.footerRight:SetTexCoord(1,0,0,1);
frame.footerRight:SetWidth(48); frame.footerRight:SetHeight(48);
frame.footerRight:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -2, 2);
frame.footer = frame:CreateTexture(nil, "ARTWORK");
frame.footer:SetTexture("Interface\\AddOns\\Clique\\images\\footer.tga");
frame.footer:SetPoint("TOPLEFT", frame.footerLeft, "TOPRIGHT");
frame.footer:SetPoint("BOTTOMRIGHT", frame.footerRight, "BOTTOMLEFT");
end
function Clique:CreateOptionsFrame()
local frames = {}
self.frames = frames
local frame = CreateFrame("Frame", "CliqueFrame", CliquePulloutTab)
frame:SetHeight(415)
frame:SetWidth(400)
frame:SetPoint("LEFT", AscensionSpellbookFrame, "RIGHT", 45, 30)
self:SkinFrame(frame)
frame:SetToplevel(true)
frame.title:SetText("Clique v. " .. Clique.version .. " - " .. tostring(Clique.db.keys.profile));
frame:SetScript("OnShow", function()
frame.title:SetText("Clique v. " .. Clique.version .. " - " .. tostring(Clique.db.keys.profile));
if Clique.inuse then
CliqueHelpText:Hide()
else
CliqueHelpText:Show()
end
end)
CliqueFrame:SetScript("OnShow", function(self)
if InCombatLockdown() then
Clique:Toggle()
return
end
local parent = self:GetParent()
self:SetFrameLevel(parent:GetFrameLevel() + 5)
Clique:ToggleSpellBookButtons()
end)
CliqueFrame:SetScript("OnHide", function() Clique:ToggleSpellBookButtons() end)
CliqueFrame:RegisterEvent("PLAYER_REGEN_DISABLED")
CliqueFrame:SetScript("OnEvent", function(self, event, ...)
if self:IsVisible() then
Clique:Toggle()
end
end)
local frame = CreateFrame("Frame", "CliqueListFrame", CliqueFrame)
frame:SetAllPoints()
local onclick = function(button)
local offset = FauxScrollFrame_GetOffset(CliqueListScroll)
self.listSelected = offset + button.id
Clique:ListScrollUpdate()
end
local ondoubleclick = function(button)
onclick(button)
CliqueButtonEdit:Click()
end
local onenter = function(button) button:SetBackdropBorderColor(1, 1, 1) end
local onleave = function(button)
local selected = FauxScrollFrame_GetOffset(CliqueListScroll) + button.id
if selected == self.listSelected then
button:SetBackdropBorderColor(1, 1, 0)
else
button:SetBackdropBorderColor(0.3, 0.3, 0.3)
end
end
for i=1,NUM_ENTRIES do
local entry = CreateFrame("Button", "CliqueList"..i, frame)
entry.id = i
entry:SetHeight(ENTRY_SIZE)
entry:SetWidth(390)
entry:SetBackdrop({
bgFile="Interface\\Tooltips\\UI-Tooltip-Background",
edgeFile = "Interface/Tooltips/UI-Tooltip-Border",
tile = true, tileSize = 8, edgeSize = 16,
insets = {left = 2, right = 2, top = 2, bottom = 2}})
entry:SetBackdropBorderColor(0.3, 0.3, 0.3)
entry:SetBackdropColor(0.1, 0.1, 0.1, 0.3)
entry:SetScript("OnClick", onclick)
entry:SetScript("OnEnter", onenter)
entry:SetScript("OnLeave", onleave)
entry:SetScript("OnDoubleClick", ondoubleclick)
entry.icon = entry:CreateTexture(nil, "ARTWORK")
entry.icon:SetHeight(24)
entry.icon:SetWidth(24)
entry.icon:SetPoint("LEFT", 5, 0)
entry.name = entry:CreateFontString(nil, "ARTWORK", "GameFontHighlight")
entry.name:SetPoint("LEFT", entry.icon, "RIGHT", 5, 0)
entry.binding = entry:CreateFontString(nil, "ARTWORK", "GameFontHighlight")
entry.binding:SetPoint("RIGHT", entry, "RIGHT", -5, 0)
frames[i] = entry
end
frames[1]:SetPoint("TOPLEFT", 5, -55)
for i=2,NUM_ENTRIES do
frames[i]:SetPoint("TOP", frames[i-1], "BOTTOM", 0, 2)
end
local endButton = getglobal("CliqueList"..NUM_ENTRIES)
CreateFrame("ScrollFrame", "CliqueListScroll", CliqueListFrame, "FauxScrollFrameTemplate")
CliqueListScroll:SetPoint("TOPLEFT", CliqueList1, "TOPLEFT", 0, 0)
CliqueListScroll:SetPoint("BOTTOMRIGHT", endButton, "BOTTOMRIGHT", 0, 0)
local texture = CliqueListScroll:CreateTexture(nil, "BACKGROUND")
texture:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
texture:SetPoint("TOPLEFT", CliqueListScroll, "TOPRIGHT", 14, 0)
texture:SetPoint("BOTTOMRIGHT", CliqueListScroll, "BOTTOMRIGHT", 23, 0)
texture:SetGradientAlpha("HORIZONTAL", 0.5, 0.25, 0.05, 0, 0.15, 0.15, 0.15, 1)
local texture = CliqueListScroll:CreateTexture(nil, "BACKGROUND")
texture:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
texture:SetPoint("TOPLEFT", CliqueListScroll, "TOPRIGHT", 4, 0)
texture:SetPoint("BOTTOMRIGHT", CliqueListScroll, "BOTTOMRIGHT", 14, 0)
texture:SetGradientAlpha("HORIZONTAL", 0.15, 0.15, 0.15, 0.15, 1, 0.5, 0.25, 0.05, 0)
local update = function() Clique:ListScrollUpdate() end
CliqueListScroll:SetScript("OnVerticalScroll", update, function(self, offset)
FauxScrollFrame_OnVerticalScroll(self, offset, ENTRY_SIZE, update)
end)
CliqueListScroll:SetScript("OnShow", update)
local frame = CreateFrame("Frame", "CliqueTextListFrame", CliqueFrame)
frame:SetHeight(300)
frame:SetWidth(250)
frame:SetPoint("BOTTOMLEFT", CliqueFrame, "BOTTOMRIGHT", 0, 0)
self:SkinFrame(frame)
frame:SetFrameStrata("HIGH")
frame:SetScript("OnShow", function(self)
local parent = self:GetParent()
self:SetFrameLevel(parent:GetFrameLevel() + 5)
end)
local onclick = function(button)
local offset = FauxScrollFrame_GetOffset(CliqueTextListScroll)
if self.textlistSelected == offset + button.id then
self.textlistSelected = nil
else
self.textlistSelected = offset + button.id
end
if self.textlist == "FRAMES" then
local name = button.name:GetText()
local frame = getglobal(name)
if button:GetChecked() then
self.profile.blacklist[name] = nil
self:RegisterFrame(getglobal(name))
else
self:UnregisterFrame(frame)
self.profile.blacklist[name] = true
end
end
Clique:TextListScrollUpdate()
end
local onenter = function(button) button:SetBackdropBorderColor(1, 1, 1) end
local onleave = function(button)
local selected = FauxScrollFrame_GetOffset(CliqueTextListScroll) + button.id
button:SetBackdropBorderColor(0.3, 0.3, 0.3)
end
local frames = {}
for i=1,12 do
local entry = CreateFrame("CheckButton", "CliqueTextList"..i, frame)
entry.id = i
entry:SetHeight(22)
entry:SetWidth(240)
entry:SetBackdrop({
-- bgFile="Interface\\Tooltips\\UI-Tooltip-Background",
-- edgeFile = "Interface/Tooltips/UI-Tooltip-Border",
-- tile = true, tileSize = 8, edgeSize = 16,
insets = {left = 2, right = 2, top = 2, bottom = 2}})
entry:SetBackdropBorderColor(0.3, 0.3, 0.3)
entry:SetBackdropColor(0.1, 0.1, 0.1, 0.3)
entry:SetScript("OnClick", onclick)
entry:SetScript("OnEnter", onenter)
entry:SetScript("OnLeave", onleave)
local texture = entry:CreateTexture("ARTWORK")
texture:SetTexture("Interface\\Buttons\\UI-CheckBox-Up")
texture:SetPoint("LEFT", 0, 0)
texture:SetHeight(26)
texture:SetWidth(26)
entry:SetNormalTexture(texture)
local texture = entry:CreateTexture("ARTWORK")
texture:SetTexture("Interface\\Buttons\\UI-CheckBox-Highlight")
texture:SetPoint("LEFT", 0, 0)
texture:SetHeight(26)
texture:SetWidth(26)
texture:SetBlendMode("ADD")
entry:SetHighlightTexture(texture)
local texture = entry:CreateTexture("ARTWORK")
texture:SetTexture("Interface\\Buttons\\UI-CheckBox-Check")
texture:SetPoint("LEFT", 0, 0)
texture:SetHeight(26)
texture:SetWidth(26)
entry:SetCheckedTexture(texture)
entry.name = entry:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall")
entry.name:SetPoint("LEFT", 25, 0)
entry.name:SetJustifyH("LEFT")
entry.name:SetText("Profile Name")
frames[i] = entry
end
frames[1]:SetPoint("TOPLEFT", 5, -25)
for i=2,12 do
frames[i]:SetPoint("TOP", frames[i-1], "BOTTOM", 0, 2)
end
local endButton = CliqueTextList12
CreateFrame("ScrollFrame", "CliqueTextListScroll", CliqueTextListFrame, "FauxScrollFrameTemplate")
CliqueTextListScroll:SetPoint("TOPLEFT", CliqueTextList1, "TOPLEFT", 0, 0)
CliqueTextListScroll:SetPoint("BOTTOMRIGHT", endButton, "BOTTOMRIGHT", 0, 0)
local texture = CliqueTextListScroll:CreateTexture(nil, "BACKGROUND")
texture:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
texture:SetPoint("TOPLEFT", CliqueTextListScroll, "TOPRIGHT", 14, 0)
texture:SetPoint("BOTTOMRIGHT", CliqueTextListScroll, "BOTTOMRIGHT", 23, 0)
texture:SetGradientAlpha("HORIZONTAL", 0.5, 0.25, 0.05, 0, 0.15, 0.15, 0.15, 1)
local texture = CliqueTextListScroll:CreateTexture(nil, "BACKGROUND")
texture:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
texture:SetPoint("TOPLEFT", CliqueTextListScroll, "TOPRIGHT", 4, 0)
texture:SetPoint("BOTTOMRIGHT", CliqueTextListScroll, "BOTTOMRIGHT", 14, 0)
texture:SetGradientAlpha("HORIZONTAL", 0.15, 0.15, 0.15, 0.15, 1, 0.5, 0.25, 0.05, 0)
local update = function()
Clique:TextListScrollUpdate()
end
CliqueTextListScroll:SetScript("OnVerticalScroll", function(self, offset)
FauxScrollFrame_OnVerticalScroll(self, offset, 22, update)
end)
CliqueTextListFrame:SetScript("OnShow", update)
CliqueTextListFrame:Hide()
-- Dropdown Frame
CreateFrame("Frame", "CliqueDropDown", CliqueFrame, "UIDropDownMenuTemplate")
CliqueDropDown:SetID(1)
CliqueDropDown:SetPoint("TOPRIGHT", -115, -25)
CliqueDropDown:SetScript("OnShow", function(self) Clique:DropDown_OnShow(self) end)
CliqueDropDownButton:SetScript("OnEnter", function(self)
GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT")
GameTooltip:SetText("Select a click-set to edit")
GameTooltip:Show()
end)
CliqueDropDownButton:SetScript("OnLeave", function(self)
GameTooltip:Hide()
end)
local font = CliqueDropDown:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall")
font:SetText("Click Set:")
font:SetPoint("RIGHT", CliqueDropDown, "LEFT", 5, 3)
-- Button Creations
local buttonFunc = function(self) Clique:ButtonOnClick(self) end
local button = CreateFrame("Button", "CliqueButtonClose", CliqueFrame.titleBar, "UIPanelCloseButton")
button:SetHeight(25)
button:SetWidth(25)
button:SetPoint("TOPRIGHT", -5, 3)
button:SetScript("OnClick", buttonFunc)
local button = CreateFrame("Button", "CliqueButtonCustom", CliqueFrame, "UIPanelButtonGrayTemplate")
button:SetHeight(24)
button:SetWidth(60)
button:SetText("Custom")
button:SetPoint("BOTTOMLEFT", CliqueFrame, "BOTTOMLEFT", 10, 5)
button:SetScript("OnClick", buttonFunc)
local button = CreateFrame("Button", "CliqueButtonFrames", CliqueFrame, "UIPanelButtonGrayTemplate")
button:SetHeight(24)
button:SetWidth(60)
button:SetText("Frames")
button:SetPoint("LEFT", CliqueButtonCustom, "RIGHT", 3, 0)
button:SetScript("OnClick", buttonFunc)
local button = CreateFrame("Button", "CliqueButtonProfiles", CliqueFrame, "UIPanelButtonGrayTemplate")
button:SetHeight(24)
button:SetWidth(60)
button:SetText("Profiles")
button:SetPoint("LEFT", CliqueButtonFrames, "RIGHT", 3, 0)
button:SetScript("OnClick", buttonFunc)
local button = CreateFrame("Button", "CliqueButtonOptions", CliqueFrame, "UIPanelButtonGrayTemplate")
button:SetHeight(24)
button:SetWidth(60)
button:SetText("Options")
button:SetPoint("LEFT", CliqueButtonProfiles, "RIGHT", 3, 0)
button:SetScript("OnClick", buttonFunc)
local button = CreateFrame("Button", "CliqueButtonDelete", CliqueFrame, "UIPanelButtonGrayTemplate")
button:SetHeight(24)
button:SetWidth(60)
button:SetText("Delete")
button:SetPoint("LEFT", CliqueButtonOptions, "RIGHT", 3, 0)
button:SetScript("OnClick", buttonFunc)
local button = CreateFrame("Button", "CliqueButtonEdit", CliqueFrame, "UIPanelButtonGrayTemplate")
button:SetHeight(24)
button:SetWidth(60)
button:SetText("Edit")
button:SetPoint("LEFT", CliqueButtonDelete, "RIGHT", 3, 0)
button:SetScript("OnClick", buttonFunc)
-- Buttons for text list scroll frame
local button = CreateFrame("Button", "CliqueTextButtonClose", CliqueTextListFrame.titleBar, "UIPanelCloseButton")
button:SetHeight(25)
button:SetWidth(25)
button:SetPoint("TOPRIGHT", -5, 3)
button:SetScript("OnClick", buttonFunc)
local button = CreateFrame("Button", "CliqueButtonDeleteProfile", CliqueTextListFrame, "UIPanelButtonGrayTemplate")
button:SetHeight(24)
button:SetWidth(60)
button:SetText("Delete")
button:SetPoint("BOTTOMLEFT", CliqueTextListFrame, "BOTTOMLEFT", 30, 5)
button:SetScript("OnClick", buttonFunc)
local button = CreateFrame("Button", "CliqueButtonSetProfile", CliqueTextListFrame, "UIPanelButtonGrayTemplate")
button:SetHeight(24)
button:SetWidth(60)
button:SetText("Set")
button:SetPoint("LEFT", CliqueButtonDeleteProfile, "RIGHT", 3, 0)
button:SetScript("OnClick", buttonFunc)
local button = CreateFrame("Button", "CliqueButtonNewProfile", CliqueTextListFrame, "UIPanelButtonGrayTemplate")
button:SetHeight(24)
button:SetWidth(60)
button:SetText("New")
button:SetPoint("LEFT", CliqueButtonSetProfile, "RIGHT", 3, 0)
button:SetScript("OnClick", buttonFunc)
local frame = CreateFrame("Frame", "CliqueOptionsFrame", CliqueFrame)
frame:SetHeight(500)
frame:SetWidth(300)
frame:SetPoint("CENTER", 0, 0)
self:SkinFrame(frame)
frame:SetFrameStrata("DIALOG")
frame.title:SetText(L["Clique Options"])
frame:Hide()
self:CreateOptionsWidgets(frame)
self.customEntry = {}
local frame = CreateFrame("Frame", "CliqueCustomFrame", CliqueFrame)
frame:SetHeight(400)
frame:SetWidth(450)
frame:SetPoint("CENTER", 70, -50)
self:SkinFrame(frame)
frame:SetFrameStrata("DIALOG")
frame.title:SetText("Clique Custom Editor");
frame:Hide()
frame:SetScript("OnShow", function(self)
local parent = self:GetParent()
self:SetFrameLevel(parent:GetFrameLevel() + 5)
end)
-- Help text for Custom screen
local font = frame:CreateFontString("CliqueCustomHelpText", "OVERLAY", "GameFontHighlight")
font:SetWidth(260) font:SetHeight(100)
font:SetPoint("TOPRIGHT", -10, -25)
font:SetText(L.CUSTOM_HELP)
local checkFunc = function(self) Clique:CustomRadio(self) end
self.radio = {}
local buttons = {
{type = "actionbar", name = L.ACTION_ACTIONBAR},
{type = "action", name = L.ACTION_ACTION},
{type = "pet", name = L.ACTION_PET},
{type = "spell", name = L.ACTION_SPELL},
{type = "item", name = L.ACTION_ITEM},
{type = "macro", name = L.ACTION_MACRO},
{type = "stop", name = L.ACTION_STOP},
{type = "target", name = L.ACTION_TARGET},
{type = "focus", name = L.ACTION_FOCUS},
{type = "assist", name = L.ACTION_ASSIST},
{type = "click", name = L.ACTION_CLICK},
{type = "menu", name = L.ACTION_MENU},
}
for i=1,#buttons do
local entry = buttons[i]
local name = "CliqueRadioButton"..entry.type
local button = CreateFrame("CheckButton", name, CliqueCustomFrame)
button:SetHeight(20)
button:SetWidth(150)
local texture = button:CreateTexture("ARTWORK")
texture:SetTexture("Interface\\AddOns\\Clique\\images\\RadioEmpty")
texture:SetPoint("LEFT", 0, 0)
texture:SetHeight(26)
texture:SetWidth(26)
button:SetNormalTexture(texture)
local texture = button:CreateTexture("ARTWORK")
texture:SetTexture("Interface\\AddOns\\Clique\\images\\RadioChecked")
texture:SetPoint("LEFT", 0, 0)
texture:SetHeight(26)
texture:SetWidth(26)
texture:SetBlendMode("ADD")
button:SetHighlightTexture(texture)
local texture = button:CreateTexture("ARTWORK")
texture:SetTexture("Interface\\AddOns\\Clique\\images\\RadioChecked")
texture:SetPoint("LEFT", 0, 0)
texture:SetHeight(26)
texture:SetWidth(26)
button:SetCheckedTexture(texture)
button.name = button:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall")
button.name:SetPoint("LEFT", 25, 0)
button.name:SetJustifyH("LEFT")
local entry = buttons[1]
local name = "CliqueRadioButton"..entry.type
local button = CreateFrame("CheckButton", name, CliqueCustomFrame)
button:SetHeight(22)
button:SetWidth(150)
end
local entry = buttons[1]
local button = getglobal("CliqueRadioButton"..entry.type)
button.type = entry.type
button.name:SetText(entry.name)
button:SetPoint("TOPLEFT", 5, -30)
button:SetScript("OnClick", checkFunc)
self.radio[button] = true
local prev = button
for i=2,#buttons do
local entry = buttons[i]
local name = "CliqueRadioButton"..entry.type
local button = getglobal(name)
button.type = entry.type
button.name:SetText(entry.name)
button:SetPoint("TOPLEFT", prev, "BOTTOMLEFT", 0, 0)
button:SetScript("OnClick", checkFunc)
self.radio[button] = true
prev = button
end
-- Button to set the binding
local button = CreateFrame("Button", "CliqueCustomButtonBinding", CliqueCustomFrame, "UIPanelButtonGrayTemplate")
button:SetHeight(30)
button:SetWidth(175)
button:SetText("Set Click Binding")
button:SetPoint("TOP", CliqueCustomHelpText, "BOTTOM", 40, -10)
button:SetScript("OnClick", function(self) Clique:CustomBinding_OnClick(self) end )
button:RegisterForClicks("AnyUp")
-- Button for icon selection
local button = CreateFrame("Button", "CliqueCustomButtonIcon", CliqueCustomFrame)
button.icon = button:CreateTexture(nil, "BORDER")
button.icon:SetAllPoints()
button.icon:SetTexture("Interface\\Icons\\INV_Misc_QuestionMark")
button:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square")
button:GetHighlightTexture():SetBlendMode("ADD")
button:SetHeight(30)
button:SetWidth(30)
button:SetPoint("RIGHT", CliqueCustomButtonBinding, "LEFT", -15, 0)
local func = function()
GameTooltip:SetOwner(button, "ANCHOR_TOPLEFT")
GameTooltip:SetText("Click here to set icon")
GameTooltip:Show()
end
button:SetScript("OnEnter", func)
button:SetScript("OnLeave", function() GameTooltip:Hide() end)
button:SetScript("OnClick", function() CliqueIconSelectFrame:Show() end)
-- Create the editboxes for action arguments
local edit = CreateFrame("EditBox", "CliqueCustomArg1", CliqueCustomFrame, "InputBoxTemplate")
edit:SetHeight(30)
edit:SetWidth(200)
edit:SetPoint("TOPRIGHT", CliqueCustomFrame, "TOPRIGHT", -10, -190)
edit:SetAutoFocus(nil)
edit:SetScript("OnTabPressed", function()
if CliqueCustomArg2:IsVisible() then
CliqueCustomArg2:SetFocus()
end
end)
edit:SetScript("OnEnterPressed", function() end)
edit.label = edit:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall")
edit.label:SetText("Spell Name:")
edit.label:SetPoint("RIGHT", edit, "LEFT", -10, 0)
edit.label:SetJustifyH("RIGHT")
edit:Hide()
-- Argument 2
local edit = CreateFrame("EditBox", "CliqueCustomArg2", CliqueCustomFrame, "InputBoxTemplate")
edit:SetHeight(30)
edit:SetWidth(200)
edit:SetPoint("TOPRIGHT", CliqueCustomArg1, "BOTTOMRIGHT", 0, 0)
edit:SetAutoFocus(nil)
edit:SetScript("OnTabPressed", function()
if CliqueCustomArg3:IsVisible() then
CliqueCustomArg3:SetFocus()
end
end)
edit:SetScript("OnEnterPressed", function() end)
edit.label = edit:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall")
edit.label:SetText("Spell Name:")
edit.label:SetPoint("RIGHT", edit, "LEFT", -10, 0)
edit.label:SetJustifyH("RIGHT")
edit:Hide()
-- Multi line edit box
local edit = CreateFrame("ScrollFrame", "CliqueMulti", CliqueCustomFrame, "CliqueEditTemplate")
edit:SetPoint("TOPRIGHT", CliqueCustomArg1, "BOTTOMRIGHT", -10, -27)
local name = edit:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall")
name:SetText("Macro Text:")
name:SetJustifyH("RIGHT")
name:SetPoint("RIGHT", CliqueCustomArg2.label)
local grabber = CreateFrame("Button", "CliqueFocusGrabber", edit)
grabber:SetPoint("TOPLEFT", 8, -8)
grabber:SetPoint("BOTTOMRIGHT", -8, 8)
grabber:SetScript("OnClick", function() CliqueMultiScrollFrameEditBox:SetFocus() end)
-- Argument 3
local edit = CreateFrame("EditBox", "CliqueCustomArg3", CliqueCustomFrame, "InputBoxTemplate")
edit:SetHeight(30)
edit:SetWidth(200)
edit:SetPoint("TOPRIGHT", CliqueCustomArg2, "BOTTOMRIGHT", 0, 0)
edit:SetAutoFocus(nil)
edit:SetScript("OnTabPressed", function()
if CliqueCustomArg4:IsVisible() then
CliqueCustomArg4:SetFocus()
end
end)
edit:SetScript("OnEnterPressed", function() end)
edit.label = edit:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall")
edit.label:SetText("Spell Name:")
edit.label:SetPoint("RIGHT", edit, "LEFT", -10, 0)
edit.label:SetJustifyH("RIGHT")
edit:Hide()
-- Argument 4
local edit = CreateFrame("EditBox", "CliqueCustomArg4", CliqueCustomFrame, "InputBoxTemplate")
edit:SetHeight(30)
edit:SetWidth(200)
edit:SetPoint("TOPRIGHT", CliqueCustomArg3, "BOTTOMRIGHT", 0, 0)
edit:SetAutoFocus(nil)
edit:SetScript("OnTabPressed", function()
if CliqueCustomArg5:IsVisible() then
CliqueCustomArg5:SetFocus()
end
end)
edit:SetScript("OnEnterPressed", function() end)
edit.label = edit:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall")
edit.label:SetText("Spell Name:")
edit.label:SetPoint("RIGHT", edit, "LEFT", -10, 0)
edit.label:SetJustifyH("RIGHT")
edit:Hide()
-- Argument 5
local edit = CreateFrame("EditBox", "CliqueCustomArg5", CliqueCustomFrame, "InputBoxTemplate")
edit:SetHeight(30)
edit:SetWidth(200)
edit:SetPoint("TOPRIGHT", CliqueCustomArg4, "BOTTOMRIGHT", 0, 0)
edit:SetAutoFocus(nil)
edit:SetScript("OnTabPressed", function()
if CliqueCustomArg1:IsVisible() then
CliqueCustomArg1:SetFocus()
end
end)
edit:SetScript("OnEnterPressed", function() end)
edit.label = edit:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall")
edit.label:SetText("Spell Name:")
edit.label:SetPoint("RIGHT", edit, "LEFT", -10, 0)
edit.label:SetJustifyH("RIGHT")
edit:Hide()
-- Bottom buttons
local button = CreateFrame("Button", "CliqueCustomButtonCancel", CliqueCustomFrame, "UIPanelButtonGrayTemplate")
button:SetHeight(24)
button:SetWidth(70)
button:SetText("Cancel")
button:SetPoint("BOTTOM", 65, 4)
button:SetScript("OnClick", buttonFunc)
local button = CreateFrame("Button", "CliqueCustomButtonSave", CliqueCustomFrame, "UIPanelButtonGrayTemplate")
button:SetHeight(24)
button:SetWidth(70)
button:SetText("Save")
button:SetPoint("LEFT", CliqueCustomButtonCancel, "RIGHT", 6, 0)
button:SetScript("OnClick", buttonFunc)
-- Create the macro icon frame
CreateFrame("Frame", "CliqueIconSelectFrame", CliqueCustomFrame)
CliqueIconSelectFrame:SetWidth(296)
CliqueIconSelectFrame:SetHeight(250)
CliqueIconSelectFrame:SetPoint("CENTER",0,0)
self:SkinFrame(CliqueIconSelectFrame)
CliqueIconSelectFrame:SetFrameStrata("DIALOG")
CliqueIconSelectFrame.title:SetText("Select an icon")
CliqueIconSelectFrame:Hide()
CreateFrame("CheckButton", "CliqueIcon1", CliqueIconSelectFrame, "CliqueIconTemplate")
CliqueIcon1:SetID(1)
CliqueIcon1:SetPoint("TOPLEFT", 25, -35)
CreateFrame("CheckButton", "CliqueIcon2", CliqueIconSelectFrame, "CliqueIconTemplate")
CliqueIcon2:SetID(2)
CliqueIcon2:SetPoint("LEFT", CliqueIcon1, "RIGHT", 10, 0)
CreateFrame("CheckButton", "CliqueIcon3", CliqueIconSelectFrame, "CliqueIconTemplate")
CliqueIcon3:SetID(3)
CliqueIcon3:SetPoint("LEFT", CliqueIcon2, "RIGHT", 10, 0)
CreateFrame("CheckButton", "CliqueIcon4", CliqueIconSelectFrame, "CliqueIconTemplate")
CliqueIcon4:SetID(4)
CliqueIcon4:SetPoint("LEFT", CliqueIcon3, "RIGHT", 10, 0)
CreateFrame("CheckButton", "CliqueIcon5", CliqueIconSelectFrame, "CliqueIconTemplate")
CliqueIcon5:SetID(5)
CliqueIcon5:SetPoint("LEFT", CliqueIcon4, "RIGHT", 10, 0)
CreateFrame("CheckButton", "CliqueIcon6", CliqueIconSelectFrame, "CliqueIconTemplate")
CliqueIcon6:SetID(6)
CliqueIcon6:SetPoint("TOPLEFT", CliqueIcon1, "BOTTOMLEFT", 0, -10)
CreateFrame("CheckButton", "CliqueIcon7", CliqueIconSelectFrame, "CliqueIconTemplate")
CliqueIcon7:SetID(7)
CliqueIcon7:SetPoint("LEFT", CliqueIcon6, "RIGHT", 10, 0)
CreateFrame("CheckButton", "CliqueIcon8", CliqueIconSelectFrame, "CliqueIconTemplate")
CliqueIcon8:SetID(8)
CliqueIcon8:SetPoint("LEFT", CliqueIcon7, "RIGHT", 10, 0)
CreateFrame("CheckButton", "CliqueIcon9", CliqueIconSelectFrame, "CliqueIconTemplate")
CliqueIcon9:SetID(9)
CliqueIcon9:SetPoint("LEFT", CliqueIcon8, "RIGHT", 10, 0)
CreateFrame("CheckButton", "CliqueIcon10", CliqueIconSelectFrame, "CliqueIconTemplate")
CliqueIcon10:SetID(10)
CliqueIcon10:SetPoint("LEFT", CliqueIcon9, "RIGHT", 10, 0)
CreateFrame("CheckButton", "CliqueIcon11", CliqueIconSelectFrame, "CliqueIconTemplate")
CliqueIcon11:SetID(11)
CliqueIcon11:SetPoint("TOPLEFT", CliqueIcon6, "BOTTOMLEFT", 0, -10)
CreateFrame("CheckButton", "CliqueIcon12", CliqueIconSelectFrame, "CliqueIconTemplate")
CliqueIcon12:SetID(12)
CliqueIcon12:SetPoint("LEFT", CliqueIcon11, "RIGHT", 10, 0)
CreateFrame("CheckButton", "CliqueIcon13", CliqueIconSelectFrame, "CliqueIconTemplate")
CliqueIcon13:SetID(13)
CliqueIcon13:SetPoint("LEFT", CliqueIcon12, "RIGHT", 10, 0)
CreateFrame("CheckButton", "CliqueIcon14", CliqueIconSelectFrame, "CliqueIconTemplate")
CliqueIcon14:SetID(14)
CliqueIcon14:SetPoint("LEFT", CliqueIcon13, "RIGHT", 10, 0)
CreateFrame("CheckButton", "CliqueIcon15", CliqueIconSelectFrame, "CliqueIconTemplate")
CliqueIcon15:SetID(15)
CliqueIcon15:SetPoint("LEFT", CliqueIcon14, "RIGHT", 10, 0)
CreateFrame("CheckButton", "CliqueIcon16", CliqueIconSelectFrame, "CliqueIconTemplate")
CliqueIcon16:SetID(16)
CliqueIcon16:SetPoint("TOPLEFT", CliqueIcon11, "BOTTOMLEFT", 0, -10)
CreateFrame("CheckButton", "CliqueIcon17", CliqueIconSelectFrame, "CliqueIconTemplate")
CliqueIcon17:SetID(17)
CliqueIcon17:SetPoint("LEFT", CliqueIcon16, "RIGHT", 10, 0)
CreateFrame("CheckButton", "CliqueIcon18", CliqueIconSelectFrame, "CliqueIconTemplate")
CliqueIcon18:SetID(18)
CliqueIcon18:SetPoint("LEFT", CliqueIcon17, "RIGHT", 10, 0)
CreateFrame("CheckButton", "CliqueIcon19", CliqueIconSelectFrame, "CliqueIconTemplate")
CliqueIcon19:SetID(19)
CliqueIcon19:SetPoint("LEFT", CliqueIcon18, "RIGHT", 10, 0)
CreateFrame("CheckButton", "CliqueIcon20", CliqueIconSelectFrame, "CliqueIconTemplate")
CliqueIcon20:SetID(20)
CliqueIcon20:SetPoint("LEFT", CliqueIcon19, "RIGHT", 10, 0)
CreateFrame("ScrollFrame", "CliqueIconScrollFrame", CliqueIconSelectFrame, "FauxScrollFrameTemplate")
CliqueIconScrollFrame:SetPoint("TOPLEFT", CliqueIcon1, "TOPLEFT", 0, 0)
CliqueIconScrollFrame:SetPoint("BOTTOMRIGHT", CliqueIcon20, "BOTTOMRIGHT", 10, 0)
local texture = CliqueIconScrollFrame:CreateTexture(nil, "BACKGROUND")
texture:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
texture:SetPoint("TOPLEFT", CliqueIconScrollFrame, "TOPRIGHT", 14, 0)
texture:SetPoint("BOTTOMRIGHT", 23, 0)
texture:SetVertexColor(0.3, 0.3, 0.3)
local texture = CliqueIconScrollFrame:CreateTexture(nil, "BACKGROUND")
texture:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
texture:SetPoint("TOPLEFT", CliqueIconScrollFrame, "TOPRIGHT", 4, 0)
texture:SetPoint("BOTTOMRIGHT", 14,0)
texture:SetVertexColor(0.3, 0.3, 0.3)
local function updateicons()
Clique:UpdateIconFrame()
end
CliqueIconScrollFrame:SetScript("OnVerticalScroll", function(self, offset)
local MACRO_ICON_ROW_HEIGHT = 36
FauxScrollFrame_OnVerticalScroll(self, offset, MACRO_ICON_ROW_HEIGHT, updateicons)
end)
CliqueIconSelectFrame:SetScript("OnShow", function(self)
local parent = self:GetParent()
self:SetFrameLevel(parent:GetFrameLevel() + 5)
Clique:UpdateIconFrame()
end)
-- Create the CliqueHelpText
CliqueFrame:CreateFontString("CliqueHelpText", "OVERLAY", "GameFontHighlight")
CliqueHelpText:SetText(L.HELP_TEXT)
CliqueHelpText:SetPoint("TOPLEFT", 10, -10)
CliqueHelpText:SetPoint("BOTTOMRIGHT", -10, 10)
CliqueHelpText:SetJustifyH("CENTER")
CliqueHelpText:SetJustifyV("CENTER")
CliqueHelpText:SetPoint("CENTER", 0, 0)
self.sortList = {}
self.listSelected = 0
end
function Clique:ListScrollUpdate()
if not CliqueListScroll then return end
local idx,button
Clique:SortList()
local clickCasts = self.sortList
local offset = FauxScrollFrame_GetOffset(CliqueListScroll)
FauxScrollFrame_Update(CliqueListScroll, table.getn(clickCasts), NUM_ENTRIES, ENTRY_SIZE)
if not CliqueListScroll:IsShown() then
CliqueFrame:SetWidth(400)
else
CliqueFrame:SetWidth(425)
end
for i=1,NUM_ENTRIES do
idx = offset + i
button = getglobal("CliqueList"..i)
if idx <= table.getn(clickCasts) then
Clique:FillListEntry(button,idx)
button:Show()
if idx == self.listSelected then
button:SetBackdropBorderColor(1,1,0)
else
button:SetBackdropBorderColor(0.3, 0.3, 0.3)
end
else
button:Hide()
end
end
Clique:ValidateButtons()
end
local sortFunc = function(a,b)
local numA = tonumber(a.button) or 0
local numB = tonumber(b.button) or 0
if numA == numB then
return a.modifier < b.modifier
else
return numA < numB
end
end
function Clique:SortList()
self.sortList = {}
for k,v in pairs(self.editSet) do
table.insert(self.sortList, v)
end
table.sort(self.sortList, sortFunc)
end
function Clique:ValidateButtons()
local entry = self.sortList[self.listSelected]
if entry then
CliqueButtonDelete:Enable()
CliqueButtonEdit:Enable()
else
CliqueButtonDelete:Disable()
CliqueButtonEdit:Disable()
end
-- This should always be enabled
CliqueButtonCustom:Enable()
CliqueButtonOptions:Enable()
-- Disable the help text
Clique.inuse = nil
for k,v in pairs(self.clicksets) do
if next(v) then
Clique.inuse = true
end
end
if Clique.inuse then
CliqueHelpText:Hide()
else
CliqueHelpText:Show()
end
end
function Clique:FillListEntry(frame, idx)
local entry = self.sortList[idx]
if tonumber(entry.arg2) then
rank = string.format("Rank %d", entry.arg2)
elseif entry.arg2 then
rank = entry.arg2
end
local type = string.format("%s%s", string.upper(string.sub(entry.type, 1, 1)), string.sub(entry.type, 2))
local button = entry.button
frame.icon:SetTexture(entry.texture or "Interface\\Icons\\INV_Misc_QuestionMark")
frame.binding:SetText(entry.modifier..self:GetButtonText(button))
local arg1 = tostring(entry.arg1)
local arg2 = tostring(entry.arg2)
local arg3 = tostring(entry.arg3)
local arg4 = tostring(entry.arg4)
local arg5 = tostring(entry.arg5)
if entry.type == "action" then
frame.name:SetText(string.format("Action Button %d%s", arg1, entry.arg2 and (" on " .. arg2) or ""))
elseif entry.type == "actionbar" then
frame.name:SetText(string.format("Action Bar: %s", arg1))
elseif entry.type == "pet" then
local target = ""
if entry.arg2 then
target = " on " .. arg2
end
frame.name:SetText(string.format("Pet Action %d%s", arg1, target))
elseif entry.type == "spell" then
if entry.arg2 then
frame.name:SetText(string.format("%s (%s)%s", arg1, rank,
entry.arg5 and (" on " .. arg5) or ""))
else
frame.name:SetText(string.format("%s%s", arg1, entry.arg5 and " on " .. arg5 or ""))
end
elseif entry.type == "menu" then
frame.name:SetText("Show Menu")
elseif entry.type == "stop" then
frame.name:SetText("Cancel Pending Spell")
elseif entry.type == "target" then
frame.name:SetText(string.format("Target Unit: %s", arg1 and entry.arg1 or ""))
elseif entry.type == "focus" then
frame.name:SetText(string.format("Set Focus Unit: %s", arg1 and entry.arg1 or ""))
elseif entry.type == "assist" then
frame.name:SetText(string.format("Assist Unit: %s", arg1 and entry.arg1 or ""))
elseif entry.type == "item" then
if entry.arg1 then
frame.name:SetText(string.format("Item: %d,%d", arg1, arg2))
elseif entry.arg3 then
frame.name:SetText(string.format("Item: %s", arg3))
end
elseif entry.type == "macro" then
frame.name:SetText(string.format("Macro: %s", arg1 and entry.arg1 or string.sub(arg2, 1, 20)))
end
frame:Show()
end
function Clique:ButtonOnClick(button)
local entry = self.sortList[self.listSelected]
if button == CliqueButtonDelete then
if InCombatLockdown() then
StaticPopup_Show("CLIQUE_COMBAT_LOCKDOWN")
return
end
self.editSet[entry.modifier..entry.button] = nil
local len = table.getn(self.sortList) - 1
if self.listSelected > len then
self.listSelected = len
end
self:DeleteAction(entry)
self:UpdateClicks()
self:PLAYER_REGEN_ENABLED()
entry = nil
self:ListScrollUpdate()
elseif button == CliqueButtonClose then
self:Toggle()
elseif button == CliqueTextButtonClose then
CliqueTextListFrame:Hide()
elseif button == CliqueOptionsButtonClose then
CliqueOptionsFrame:Hide()
elseif button == CliqueButtonOptions then
if CliqueOptionsFrame:IsVisible() then
CliqueOptionsFrame:Hide()
else
CliqueOptionsFrame:Show()
end
elseif button == CliqueButtonCustom then
if CliqueCustomFrame:IsVisible() then
CliqueCustomFrame:Hide()
else
CliqueCustomFrame:Show()
end
elseif button == CliqueButtonFrames then
if CliqueTextListFrame:IsVisible() and self.textlist == "FRAMES" then
CliqueTextListFrame:Hide()
else
CliqueTextListFrame:Show()
end
self.textlist = "FRAMES"
CliqueButtonDeleteProfile:Hide()
CliqueButtonSetProfile:Hide()
CliqueButtonNewProfile:Hide()
self:TextListScrollUpdate()
CliqueTextListFrame.title:SetText("Clique Frame Editor")
self.textlistSelected = nil
elseif button == CliqueButtonProfiles then
if CliqueTextListFrame:IsVisible() and self.textlist == "PROFILES" then
CliqueTextListFrame:Hide()
else
CliqueTextListFrame:Show()
end
self.textlist = "PROFILES"
self:TextListScrollUpdate()
CliqueButtonDeleteProfile:Show()
CliqueButtonSetProfile:Show()
CliqueButtonNewProfile:Show()
--CliqueTextListFrame.title:SetText("Profile: " .. self.db.char.profileKey)
self.textlistSelected = nil
elseif button == CliqueButtonSetProfile then
local offset = FauxScrollFrame_GetOffset(CliqueTextListScroll)
local selected = self.textlistSelected - offset
local button = getglobal("CliqueTextList"..selected)
self.db:SetProfile(button.name:GetText())
if CliqueFrame then
CliqueFrame.title:SetText("Clique v. " .. self.version .. " - " .. tostring(self.db.keys.profile));
end
elseif button == CliqueButtonNewProfile then
StaticPopup_Show("CLIQUE_NEW_PROFILE")
elseif button == CliqueButtonDeleteProfile then
local offset = FauxScrollFrame_GetOffset(CliqueTextListScroll)
local selected = self.textlistSelected - offset
local button = getglobal("CliqueTextList"..selected)
self.db:DeleteProfile(button.name:GetText())
elseif button == CliqueButtonEdit then
-- Make a copy of the entry
self.customEntry = {}
for k,v in pairs(entry) do
self.customEntry[k] = v
end
CliqueCustomFrame:Show()
-- Select the right radio button
for k,v in pairs(self.radio) do
if entry.type == k.type then
self:CustomRadio(k)
k:SetChecked(true)
end
end
self.customEntry.type = entry.type
CliqueCustomArg1:SetText(entry.arg1 or "")
CliqueCustomArg2:SetText(entry.arg2 or "")
CliqueCustomArg3:SetText(entry.arg3 or "")
CliqueCustomArg4:SetText(entry.arg4 or "")
CliqueCustomArg5:SetText(entry.arg5 or "")
CliqueMultiScrollFrameEditBox:SetText(entry.arg2 or "")
CliqueCustomButtonIcon.icon:SetTexture(entry.texture or "Interface\\Icons\\INV_Misc_QuestionMark")
CliqueCustomButtonBinding.modifier = entry.modifier
CliqueCustomButtonBinding.button = self:GetButtonNumber(entry.button)
CliqueCustomButtonBinding:SetText(string.format("%s%s", entry.modifier, self:GetButtonText(entry.button)))
self.editEntry = entry
elseif button == CliqueCustomButtonCancel then
CliqueCustomFrame:Hide()
CliqueCustomButtonIcon.icon:SetTexture("Interface\\Icons\\INV_Misc_QuestionMark")
CliqueCustomButtonBinding:SetText("Set Click Binding")
self.customEntry = {}
self.editEntry = nil
self:CustomRadio()
elseif button == CliqueCustomButtonSave then
-- Add custom save logic in here
local entry = self.customEntry
entry.arg1 = CliqueCustomArg1:GetText()
entry.arg2 = CliqueCustomArg2:GetText()
entry.arg3 = CliqueCustomArg3:GetText()
entry.arg4 = CliqueCustomArg4:GetText()
entry.arg5 = CliqueCustomArg5:GetText()
if entry.arg1 == "" then entry.arg1 = nil end
if entry.arg2 == "" then entry.arg2 = nil end
if entry.arg3 == "" then entry.arg3 = nil end
if entry.arg4 == "" then entry.arg4 = nil end
if entry.arg5 == "" then entry.arg5 = nil end
if tonumber(entry.arg1) then entry.arg1 = tonumber(entry.arg1) end
if tonumber(entry.arg2) then entry.arg2 = tonumber(entry.arg2) end
if tonumber(entry.arg3) then entry.arg3 = tonumber(entry.arg3) end
if tonumber(entry.arg4) then entry.arg4 = tonumber(entry.arg4) end
if tonumber(entry.arg5) then entry.arg5 = tonumber(entry.arg5) end
if entry.type == "macro" then
local text = CliqueMultiScrollFrameEditBox:GetText()
if text ~= "" then
entry.arg2 = text
end
end
local pattern = "Hitem.+|h%[(.+)%]|h"
if entry.arg1 and string.find(entry.arg1, pattern) then
entry.arg1 = select(3, string.find(entry.arg1, pattern))
end
if entry.arg2 and string.find(entry.arg2, pattern) then
entry.arg2 = select(3, string.find(entry.arg2, pattern))
end
if entry.arg3 and string.find(entry.arg3, pattern) then
entry.arg3 = select(3, string.find(entry.arg3, pattern))
end
if entry.arg4 and string.find(entry.arg4, pattern) then
entry.arg4 = select(3, string.find(entry.arg4, pattern))
end
if entry.arg5 and string.find(entry.arg5, pattern) then
entry.arg5 = select(3, string.find(entry.arg5, pattern))
end
local issue
local arg1 = entry.arg1 and tostring(entry.arg1)
local arg2 = entry.arg2 and tostring(entry.arg2)
if not entry.type then
issue = "You must select an action type."
elseif not entry.button then
issue = "You must set a click-binding."
elseif entry.type == "action" and not entry.arg1 then
issue = "You must supply an action button number when creating a custom \"action\"."
elseif entry.type == "pet" and not entry.arg1 then
issue = "You must supply a pet action button number when creating a custom action \"pet\"."
elseif entry.type == "spell" and not (entry.arg1 or (entry.arg2 and entry.arg3) or entry.arg4) then
issue = "You must supply either a spell name and optionally an item slot/bag or name to consume when creating a \"spell\" action."
elseif entry.type == "item" and not ((entry.arg1 and entry.arg2) or entry.arg3) then
issue = "You must supply either a bag/slot, or an item name to use."
elseif entry.type == "macro" and arg1 and arg2 then
issue = "You must specify EITHER a macro index, or macro text, not both."
elseif entry.type == "macro" and not arg1 and not arg2 then
issue = "You must supply either a macro index, or macro text"
elseif entry.type == "actionbar" and not arg1 then
issue = "You must supply an action bar to change to."
end
if issue then
StaticPopupDialogs["CLIQUE_CANT_SAVE"].text = issue
StaticPopup_Show("CLIQUE_CANT_SAVE")
return
end
-- Delete the one we're editing, if that's the case
if self.editEntry then
local key = self.editEntry.modifier..self.editEntry.button
self.editSet[key] = nil
self:DeleteAction(self.editEntry)
self:UpdateClicks()
self.editEntry = nil
end
local key = entry.modifier..entry.button
self.editSet[key] = entry
self:UpdateClicks()
self:PLAYER_REGEN_ENABLED()
self:ButtonOnClick(CliqueCustomButtonCancel)
end
Clique:ValidateButtons()
Clique:ListScrollUpdate()
end
local click_func = function(self) Clique:DropDown_OnClick(self) end
function Clique:DropDown_Initialize()
local info = {}
for k,v in pairs(work) do
info = {}
info.text = v
info.value = self.clicksets[v]
info.func = click_func
UIDropDownMenu_AddButton(info)
end
end
function Clique:DropDown_OnClick(frame)
UIDropDownMenu_SetSelectedValue(CliqueDropDown, frame.value)
Clique.editSet = frame.value
self.listSelected = 0
Clique:ListScrollUpdate()
end
function Clique:DropDown_OnShow(frame)
work = {}
for k,v in pairs(self.clicksets) do
table.insert(work, k)
end
table.sort(work)
UIDropDownMenu_Initialize(frame, function() Clique:DropDown_Initialize() end);
UIDropDownMenu_SetSelectedValue(CliqueDropDown, self.editSet)
Clique:ListScrollUpdate()
end
function Clique:CustomBinding_OnClick(frame)
-- This handles the binding click
local mod = self:GetModifierText()
local button = arg1
if self.editSet == self.clicksets[L.CLICKSET_HARMFUL] then
button = string.format("%s%d", "harmbutton", self:GetButtonNumber(button))
elseif self.editSet == self.clicksets[L.CLICKSET_HELPFUL] then
button = string.format("%s%d", "helpbutton", self:GetButtonNumber(button))
else
button = self:GetButtonNumber(button)
end
self.customEntry.modifier = mod
self.customEntry.button = button
frame:SetText(string.format("%s%s", mod, arg1))
end
local buttonSetup = {
actionbar = {
help = L["BS_ACTIONBAR_HELP"],
arg1 = L["BS_ACTIONBAR_ARG1_LABEL"],
},
action = {
help = L["BS_ACTION_HELP"],
arg1 = L["BS_ACTION_ARG1_LABEL"],
arg2 = L["BS_ACTION_ARG2_LABEL"],
},
pet = {
help = L["BS_PET_HELP"],
arg1 = L["BS_PET_ARG1_LABEL"],
arg2 = L["BS_PET_ARG2_LABEL"],
},
spell = {
help = L["BS_SPELL_HELP"],
arg1 = L["BS_SPELL_ARG1_LABEL"],
arg2 = L["BS_SPELL_ARG2_LABEL"],
arg3 = L["BS_SPELL_ARG3_LABEL"],
arg4 = L["BS_SPELL_ARG4_LABEL"],
arg5 = L["BS_SPELL_ARG5_LABEL"],
},
item = {
help = L["BS_ITEM_HELP"],
arg1 = L["BS_ITEM_ARG1_LABEL"],
arg2 = L["BS_ITEM_ARG2_LABEL"],
arg3 = L["BS_ITEM_ARG3_LABEL"],
arg4 = L["BS_ITEM_ARG4_LABEL"],
},
macro = {
help = L["BS_MACRO_HELP"],
arg1 = L["BS_MACRO_ARG1_LABEL"],
arg2 = L["BS_MACRO_ARG2_LABEL"],
},
stop = {
help = L["BS_STOP_HELP"],
},
target = {
help = L["BS_TARGET_HELP"],
arg1 = L["BS_TARGET_ARG1_LABEL"],
},
focus = {
help = L["BS_FOCUS_HELP"],
arg1 = L["BS_FOCUS_ARG1_LABEL"],
},
assist = {
help = L["BS_ASSIST_HELP"],
arg1 = L["BS_ASSIST_ARG1_LABEL"],
},
click = {
help = L["BS_CLICK_HELP"],
arg1 = L["BS_CLICK_ARG1_LABEL"],
},
menu = {
help = L["BS_MENU_HELP"],
},
}
function Clique:CustomRadio(button)
local anySelected
for k,v in pairs(self.radio) do
if k ~= button then
k:SetChecked(nil)
end
end
if not button or not buttonSetup[button.type] then
CliqueCustomHelpText:SetText(L.CUSTOM_HELP)
CliqueCustomArg1:Hide()
CliqueCustomArg2:Hide()
CliqueCustomArg3:Hide()
CliqueCustomArg4:Hide()
CliqueCustomArg5:Hide()
CliqueCustomButtonBinding:SetText("Set Click Binding")
return
end
local entry = buttonSetup[button.type]
self.customEntry.type = button.type
if button and button.type then
if not button:GetChecked() then
self.customEntry.type = nil
end
end
-- Clear any open arguments
CliqueCustomArg1:SetText("")
CliqueCustomArg2:SetText("")
CliqueCustomArg3:SetText("")
CliqueCustomArg4:SetText("")
CliqueCustomArg5:SetText("")
CliqueCustomHelpText:SetText(entry.help)
CliqueCustomArg1.label:SetText(entry.arg1)
CliqueCustomArg2.label:SetText(entry.arg2)
CliqueCustomArg3.label:SetText(entry.arg3)
CliqueCustomArg4.label:SetText(entry.arg4)
CliqueCustomArg5.label:SetText(entry.arg5)
if entry.arg1 then CliqueCustomArg1:Show() else CliqueCustomArg1:Hide() end
if entry.arg2 then CliqueCustomArg2:Show() else CliqueCustomArg2:Hide() end
if entry.arg3 then CliqueCustomArg3:Show() else CliqueCustomArg3:Hide() end
if entry.arg4 then CliqueCustomArg4:Show() else CliqueCustomArg4:Hide() end
if entry.arg5 then CliqueCustomArg5:Show() else CliqueCustomArg5:Hide() end
-- Handle MacroText
if button.type == "macro" then
CliqueCustomArg2:Hide()
CliqueMulti:Show()
CliqueMultiScrollFrameEditBox:SetText("")
else
CliqueMulti:Hide()
end
end
function Clique:UpdateIconFrame()
local MAX_MACROS = 18;
local NUM_MACRO_ICONS_SHOWN = 20;
local NUM_ICONS_PER_ROW = 5;
local NUM_ICON_ROWS = 4;
local MACRO_ICON_ROW_HEIGHT = 36;
local macroPopupOffset = FauxScrollFrame_GetOffset(CliqueIconScrollFrame);
local numMacroIcons = GetNumMacroIcons();
local macroPopupIcon,macroPopupButton
-- Icon list
for i=1, NUM_MACRO_ICONS_SHOWN do
macroPopupIcon = getglobal("CliqueIcon"..i.."Icon");
macroPopupButton = getglobal("CliqueIcon"..i);
if not macroPopupButton.icon then
macroPopupButton.icon = macroPopupIcon
end
local index = (macroPopupOffset * NUM_ICONS_PER_ROW) + i;
if ( index <= numMacroIcons ) then
macroPopupIcon:SetTexture(GetMacroIconInfo(index));
macroPopupButton:Show();
else
macroPopupIcon:SetTexture("");
macroPopupButton:Hide();
end
macroPopupButton:SetChecked(nil);
end
FauxScrollFrame_Update(CliqueIconScrollFrame, ceil(numMacroIcons / NUM_ICONS_PER_ROW) , NUM_ICON_ROWS, MACRO_ICON_ROW_HEIGHT );
end
function Clique:SetSpellIcon(button)
local texture = button.icon:GetTexture()
self.customEntry.texture = texture
CliqueCustomButtonIcon.icon:SetTexture(texture)
CliqueIconSelectFrame:Hide()
end
StaticPopupDialogs["CLIQUE_PASSIVE_SKILL"] = {
text = "You can't bind a passive skill.",
button1 = TEXT(OKAY),
OnAccept = function()
end,
timeout = 0,
hideOnEscape = 1
}
StaticPopupDialogs["CLIQUE_CANT_SAVE"] = {
text = "",
button1 = TEXT(OKAY),
OnAccept = function()
end,
timeout = 0,
hideOnEscape = 1
}
StaticPopupDialogs["CLIQUE_BINDING_PROBLEM"] = {
text = "That combination is already bound. Delete the old one before trying to re-bind.",
button1 = TEXT(OKAY),
OnAccept = function()
end,
timeout = 0,
hideOnEscape = 1
}
StaticPopupDialogs["CLIQUE_COMBAT_LOCKDOWN"] = {
text = "You are currently in combat. You cannot make changes to your click casting while in combat..",
button1 = TEXT(OKAY),
OnAccept = function()
end,
timeout = 0,
hideOnEscape = 1
}
StaticPopupDialogs["CLIQUE_NEW_PROFILE"] = {
text = TEXT("Enter the name of a new profile you'd like to create"),
button1 = TEXT(OKAY),
button2 = TEXT(CANCEL),
OnAccept = function(self)
local base = self:GetName()
local editbox = getglobal(base .. "EditBox")
Clique.db:SetProfile(editbox:GetText())
end,
timeout = 0,
whileDead = 1,
exclusive = 1,
showAlert = 1,
hideOnEscape = 1,
hasEditBox = 1,
maxLetters = 32,
OnShow = function(self)
getglobal(self:GetName().."Button1"):Disable();
getglobal(self:GetName().."EditBox"):SetFocus();
end,
OnHide = function(self)
if ( ChatFrameEditBox:IsVisible() ) then
ChatFrameEditBox:SetFocus();
end
getglobal(self:GetName().."EditBox"):SetText("");
end,
EditBoxOnEnterPressed = function(self)
if ( getglobal(self:GetParent():GetName().."Button1"):IsEnabled() == 1 ) then
Clique.db:SetProfile(self:GetText())
self:GetParent():Hide();
end
end,
EditBoxOnTextChanged = function (self)
local editBox = getglobal(self:GetParent():GetName().."EditBox");
local txt = editBox:GetText()
if #txt > 0 then
getglobal(self:GetParent():GetName().."Button1"):Enable();
else
getglobal(self:GetParent():GetName().."Button1"):Disable();
end
end,
EditBoxOnEscapePressed = function(self)
self:GetParent():Hide();
ClearCursor();
end
}
StaticPopupDialogs["CLIQUE_DELETE_PROFILE"] = {
text = TEXT("Enter the name of a profile you'd like to delete"),
button1 = TEXT(OKAY),
button2 = TEXT(CANCEL),
OnAccept = function(self)
Clique.db:DeleteProfile(getglobal(self:GetName().."EditBox"):GetText())
Clique:DropDownProfile_OnShow()
end,
timeout = 0,
whileDead = 1,
exclusive = 1,
showAlert = 1,
hideOnEscape = 1,
hasEditBox = 1,
maxLetters = 32,
OnShow = function(self)
getglobal(self:GetName().."Button1"):Disable();
getglobal(self:GetName().."EditBox"):SetFocus();
end,
OnHide = function(self)
if ( ChatFrameEditBox:IsVisible() ) then
ChatFrameEditBox:SetFocus();
end
getglobal(self:GetName().."EditBox"):SetText("");
end,
EditBoxOnEnterPressed = function(self)
if ( getglobal(self:GetParent():GetName().."Button1"):IsEnabled() == 1 ) then
Clique.db:DeleteProfile(self:GetText())
Clique:DropDownProfile_OnShow()
self:GetParent():Hide();
end
end,
EditBoxOnTextChanged = function (self)
local editBox = getglobal(self:GetParent():GetName().."EditBox");
local txt = editBox:GetText()
if Clique.db.profiles[txt] then
getglobal(self:GetParent():GetName().."Button1"):Enable();
else
getglobal(self:GetParent():GetName().."Button1"):Disable();
end
end,
EditBoxOnEscapePressed = function(self)
self:GetParent():Hide();
ClearCursor();
end
}
local work = {}
function Clique:TextListScrollUpdate()
if not CliqueTextListScroll then return end
local idx,button
for k,v in pairs(work) do work[k] = nil end
if not self.textlist then self.textlist = "FRAMES" end
if self.textlist == "PROFILES" then
for k,v in pairs(self.db.profiles) do table.insert(work, k) end
table.sort(work)
CliqueTextListFrame.title:SetText("Profile: " .. self.db.keys.profile)
elseif self.textlist == "FRAMES" then
for k,v in pairs(self.ccframes) do
local name = k:GetName()
if name then
table.insert(work, name)
end
end
table.sort(work)
end
local offset = FauxScrollFrame_GetOffset(CliqueTextListScroll)
FauxScrollFrame_Update(CliqueTextListScroll, #work, 12, 22)
if not CliqueTextListScroll:IsShown() then
CliqueTextListFrame:SetWidth(250)
else
CliqueTextListFrame:SetWidth(275)
end
for i=1,12 do
idx = offset + i
button = getglobal("CliqueTextList"..i)
if idx <= #work then
button.name:SetText(work[idx])
button:Show()
-- Change texture
if self.textlist == "PROFILES" then
button:SetNormalTexture("Interface\\AddOns\\Clique\\images\\RadioEmpty")
button:SetCheckedTexture("Interface\\AddOns\\Clique\\images\\RadioChecked")
button:SetHighlightTexture("Interface\\AddOns\\Clique\\images\\RadioChecked")
else
button:SetNormalTexture("Interface\\Buttons\\UI-CheckBox-Up")
button:SetCheckedTexture("Interface\\Buttons\\UI-CheckBox-Check")
button:SetHighlightTexture("Interface\\Buttons\\UI-CheckBox-Highlight")
end
if self.textlistSelected == nil and self.textlist == "PROFILES" then
if work[idx] == self.db.keys.profile then
button:SetChecked(true)
CliqueButtonSetProfile:Disable()
CliqueButtonDeleteProfile:Disable()
else
button:SetChecked(nil)
end
elseif idx == self.textlistSelected and self.textlist == "PROFILES" then
if work[idx] == self.db.keys.profile then
CliqueButtonSetProfile:Disable()
CliqueButtonDeleteProfile:Disable()
else
CliqueButtonSetProfile:Enable()
CliqueButtonDeleteProfile:Enable()
end
button:SetChecked(true)
elseif self.textlist == "FRAMES" then
local name = work[idx]
local frame = getglobal(name)
if not self.profile.blacklist then
self.profile.blacklist = {}
end
local bl = self.profile.blacklist
if bl[name] then
button:SetChecked(nil)
else
button:SetChecked(true)
end
else
button:SetBackdropBorderColor(0.3, 0.3, 0.3)
button:SetChecked(nil)
end
else
button:Hide()
end
end
end
local function makeCheckbox(parent, name, text, width)
local entry = CreateFrame("CheckButton", name, parent)
entry:SetHeight(22)
entry:SetWidth(width)
entry:SetBackdrop({insets = {left = 2, right = 2, top = 2, bottom = 2}})
entry:SetBackdropBorderColor(0.3, 0.3, 0.3)
entry:SetBackdropColor(0.1, 0.1, 0.1, 0.3)
entry:SetScript("OnEnter", function(self)
if self.tooltip then
GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT")
GameTooltip:SetText(self.tooltip)
end
end)
entry:SetScript("OnLeave", function(self)
GameTooltip:Hide()
end)
local texture = entry:CreateTexture("ARTWORK")
texture:SetTexture("Interface\\Buttons\\UI-CheckBox-Up")
texture:SetPoint("LEFT", 0, 0)
texture:SetHeight(26)
texture:SetWidth(26)
entry:SetNormalTexture(texture)
local texture = entry:CreateTexture("ARTWORK")
texture:SetTexture("Interface\\Buttons\\UI-CheckBox-Highlight")
texture:SetPoint("LEFT", 0, 0)
texture:SetHeight(26)
texture:SetWidth(26)
texture:SetBlendMode("ADD")
entry:SetHighlightTexture(texture)
local texture = entry:CreateTexture("ARTWORK")
texture:SetTexture("Interface\\Buttons\\UI-CheckBox-Check")
texture:SetPoint("LEFT", 0, 0)
texture:SetHeight(26)
texture:SetWidth(26)
entry:SetCheckedTexture(texture)
entry.name = entry:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall")
entry.name:SetPoint("LEFT", 25, 0)
entry.name:SetJustifyH("LEFT")
entry.name:SetText(text)
return entry
end
function Clique:CreateOptionsWidgets(parent)
local button = CreateFrame("Button", "CliqueOptionsButtonClose", parent.titleBar, "UIPanelCloseButton")
button:SetHeight(25)
button:SetWidth(25)
button:SetPoint("TOPRIGHT", -5, 3)
button:SetScript("OnClick", function(self) Clique:ButtonOnClick(self) end)
local downClick = makeCheckbox(parent, "CliqueOptionsAnyDown", L.DOWNCLICK_LABEL, 300)
downClick:SetPoint("TOPLEFT", 5, -25)
local switchSpec = makeCheckbox(parent, "CliqueOptionsSpecSwitch", L.SPECSWITCH_LABEL, 300)
switchSpec:SetPoint("TOPLEFT", 5, -45)
-- Define the DropDown object we will create all the DropDown within
local DD = {}
-- Create the 12 buttons using a loop, since its an identical process for all of them
for i=1,12 do
DD["Spec"..i.."DropDown"] = CreateFrame("Frame", "CliqueSpec"..i.."DropDown", parent, "UIDropDownMenuTemplate")
DD["Spec"..i.."DropDown"]:ClearAllPoints()
if i == 1 then
DD["Spec"..i.."DropDown"]:SetPoint("TOPLEFT", switchSpec, "BOTTOMLEFT", 65, 0)
else
DD["Spec"..i.."DropDown"]:SetPoint("TOPLEFT", DD["Spec"..(i-1).."DropDown"], "BOTTOMLEFT", 65, 0)
end
DD["Spec"..i.."DropDown"]:Show()
DD["Spec"..i.."DropDown"].label = DD["Spec"..i.."DropDown"]:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall")
DD["Spec"..i.."DropDown"].label:SetText(L["Spec "..i..":"])
DD["Spec"..i.."DropDown"].label:SetPoint("RIGHT", DD["Spec"..i.."DropDown"], "LEFT", 0, 0)
DD["Spec"..i.."DropDown"].label:SetHeight(16)
local function initialize(self, level)
local function OnClick(self)
UIDropDownMenu_SetSelectedID(DD["Spec"..i.."DropDown"], self:GetID())
Clique.db.char["spec"..i.."Profile"] = self.value
Clique:UpdateClicks()
end
local work = {}
for k,v in pairs(Clique.db.profiles) do
table.insert(work, k)
end
table.sort(work)
for idx,profile in ipairs(work) do
local info = UIDropDownMenu_CreateInfo()
info.text = profile
info.func = OnClick
info.value = profile
UIDropDownMenu_AddButton(info, level)
end
end
UIDropDownMenu_Initialize(DD["Spec"..i.."DropDown"], initialize)
UIDropDownMenu_SetWidth(DD["Spec"..i.."DropDown"], 175);
UIDropDownMenu_SetButtonWidth(DD["Spec"..i.."DropDown"], 199)
UIDropDownMenu_JustifyText(DD["Spec"..i.."DropDown"], "LEFT")
if Clique.db.char["spec"..i.."Profile"] then
UIDropDownMenu_SetSelectedValue(DD["Spec"..i.."DropDown"], Clique.db.char["spec"..i.."Profile"])
else
UIDropDownMenu_SetSelectedValue(DD["Spec"..i.."DropDown"], Clique.db.keys.profile)
end
end
local function refreshOptions(self)
-- Hide the dropdowns if the spec switch option isn't selected
local switchSpec = Clique.db.char.switchSpec
local downClick = Clique.db.char.downClick
CliqueOptionsSpecSwitch:SetChecked(switchSpec)
CliqueOptionsAnyDown:SetChecked(downClick)
if switchSpec then
for i=1,12 do
_G["CliqueSpec"..i.."DropDown"]:Show()
if not Clique.db.char["spec"..i.."Profile"] then
Clique.db.char["spec"..i.."Profile"] = Clique.db.keys.profile
end
end
else
for i=1,12 do
_G["CliqueSpec"..i.."DropDown"]:Hide()
end
end
end
parent:SetScript("OnShow", refreshOptions)
switchSpec:SetScript("OnClick", function(self)
if Clique.db.char.switchSpec then
Clique.db.char.switchSpec = false
else
Clique.db.char.switchSpec = true
end
refreshOptions(parent)
Clique:UpdateClicks()
end)
downClick:SetScript("OnClick", function(self)
if Clique.db.char.downClick then
Clique.db.char.downClick = false
else
Clique.db.char.downClick = true
end
refreshOptions(parent)
Clique:SetClickType()
end)
end