--[[------------------------------------------------------------------------- -- FrameOptionsPanel.lua -- -- This file contains the definitions of the frame blacklist options panel. -- -- Events registered: -- None -------------------------------------------------------------------------]]-- local addonName, addon = ... local L = addon.L local panel = CreateFrame("Frame") panel.name = "Frame Blacklist" panel.parent = addonName addon.optpanels["BLACKLIST"] = panel panel:SetScript("OnShow", function(self) if not panel.initialized then panel:CreateOptions() panel.refresh() end panel.refresh() end) local function make_label(name, template) local label = panel:CreateFontString("OVERLAY", "CliqueOptionsBlacklist" .. name, template) label:SetWidth(panel:GetWidth()) label:SetJustifyH("LEFT") label:SetJustifyV("TOP") label.type = "label" return label end local function make_checkbox(name, parent, label) local frame = CreateFrame("CheckButton", "CliqueOptionsBlacklist" .. name, parent, "UICheckButtonTemplate") frame.text = _G[frame:GetName() .. "Text"] frame.type = "checkbox" frame.text:SetText(label) return frame end local state = {} function panel:CreateOptions() panel.initialized = true self.intro = make_label("Intro", "GameFontHighlightSmall") self.intro:SetPoint("TOPLEFT", panel, 5, -5) self.intro:SetPoint("RIGHT", panel, -5, 0) self.intro:SetHeight(45) self.intro:SetText(L["This panel allows you to blacklist certain frames from being included for Clique bindings. Any frames that are selected in this list will not be registered, although you may have to reload your user interface to have them return to their original bindings."]) self.scrollframe = CreateFrame("ScrollFrame", "CliqueOptionsBlacklistScrollFrame", self, "FauxScrollFrameTemplate") self.scrollframe:SetPoint("TOPLEFT", self.intro, "BOTTOMLEFT", 0, -5) self.scrollframe:SetPoint("RIGHT", self, "RIGHT", -30, 0) self.scrollframe:SetHeight(320) self.scrollframe:Show() local function row_onclick(row) state[row.frameName] = not not row:GetChecked() end self.rows = {} -- Create and anchor some items for idx = 1, 10 do self.rows[idx] = make_checkbox("Item" .. idx, self.scrollframe, L["Frame name"]) self.rows[idx]:SetScript("OnClick", row_onclick) if idx == 1 then self.rows[idx]:SetPoint("TOPLEFT", self.scrollframe, "TOPLEFT", 0, 0) else self.rows[idx]:SetPoint("TOPLEFT", self.rows[idx-1], "BOTTOMLEFT", 0, 0) end end self.rowheight = self.rows[1]:GetHeight() -- Number of items? local function update() self:UpdateScrollFrame() end self.scrollframe:SetScript("OnVerticalScroll", function(frame, offset) FauxScrollFrame_OnVerticalScroll(frame, offset, self.rowheight, update) end) self.selectall = CreateFrame("Button", "CliqueOptionsBlacklistSelectAll", self, "UIPanelButtonTemplate") self.selectall:SetText(L["Select All"]) self.selectall:SetPoint("BOTTOMLEFT", 10, 10) self.selectall:SetWidth(100) self.selectall:SetScript("OnClick", function(button) for frame in pairs(addon.ccframes) do local name = frame:GetName() if name then state[name] = true end end for name, frame in pairs(addon.hccframes) do state[name] = true end self:UpdateScrollFrame() end) self.selectnone = CreateFrame("Button", "CliqueOptionsBlacklistSelectNone", self, "UIPanelButtonTemplate") self.selectnone:SetText(L["Select None"]) self.selectnone:SetPoint("BOTTOMLEFT", self.selectall, "BOTTOMRIGHT", 5, 0) self.selectnone:SetWidth(100) self.selectnone:SetScript("OnClick", function(button) for frame in pairs(addon.ccframes) do local name = frame:GetName() if name then state[name] = false end end for name, frame in pairs(addon.hccframes) do state[name] = false end self:UpdateScrollFrame() end) end function panel:UpdateScrollFrame() local sort = {} for frame in pairs(addon.ccframes) do local name = frame:GetName() if name then table.insert(sort, name) end end for name, frame in pairs(addon.hccframes) do table.insert(sort, name) end table.sort(sort) local offset = FauxScrollFrame_GetOffset(self.scrollframe) FauxScrollFrame_Update(self.scrollframe, #sort, 10, self.rowheight) for i=1, 10 do local idx = offset + i local row = self.rows[i] if idx <= #sort then row.frameName = sort[idx] row.text:SetText(sort[idx]) row:SetChecked(state[sort[idx]]) row:Show() else row:Hide() end end end function panel.okay() -- Clear the existing blacklist for frame, value in pairs(state) do if not not value then addon.settings.blacklist[frame] = true else addon.settings.blacklist[frame] = nil end end addon:FireMessage("BLACKLIST_CHANGED") end function panel.refresh() for frame in pairs(addon.ccframes) do local name = frame:GetName() if name then state[name] = false end end for name, frame in pairs(addon.hccframes) do state[name] = false end for frame, value in pairs(addon.settings.blacklist) do state[frame] = value end panel:UpdateScrollFrame() end InterfaceOptions_AddCategory(panel, addon.optpanels.ABOUT)