local _, addon = ... local EncounterFrame = CreateFrame("Frame", nil) EncounterFrame:Hide() addon.EncounterFrame = EncounterFrame EncounterFrame.headers = {} local NEXT_HEADER_ID = 0 function EncounterFrame:Init() local frame = self if not EncounterJournal or not EncounterJournal.encounter or not EncounterJournal.encounter.info then return end local scrollFrame = CreateFrame("ScrollFrame", "$parentOverviewScrollFrame", EncounterJournal.encounter.info, "ScrollFrameTemplate") scrollFrame:SetSize(330, 370) scrollFrame:SetPoint("TOPLEFT", EncounterJournal.encounter.info.overviewScroll, "TOPLEFT", 0, -7) scrollFrame.scrollBarX = -25 scrollFrame.scrollBarTopY = -6 scrollFrame.scrollBarBottomY = 6 frame:SetParent(scrollFrame) frame:SetSize(scrollFrame:GetWidth() - 10, 1) frame:Show() scrollFrame:SetScrollChild(frame) frame.summary = addon.API.CreateCzechFont( frame, CzechQuestsAddon_Store.config.ENCOUNTER_TEXT_FONT_NAME, CzechQuestsAddon_Store.config.ENCOUNTER_TEXT_FONT_SIZE ) frame.summary:SetTextColor(0.251, 0.145, 0.012) frame.summary:SetPoint("TOPLEFT", frame, "TOPLEFT", 2, 0) frame.summary:SetWidth(scrollFrame:GetWidth() - 10) frame:UpdateSettings() frame:InitTab() end function EncounterFrame:UpdateSettings() local frame = self addon.API.UpdateCzechFont( frame.summary, CzechQuestsAddon_Store.config.ENCOUNTER_TEXT_FONT_NAME, CzechQuestsAddon_Store.config.ENCOUNTER_TEXT_FONT_SIZE ) for _, header in ipairs(self.headers) do addon.API.UpdateCzechFont( header.description, CzechQuestsAddon_Store.config.ENCOUNTER_TEXT_FONT_NAME, CzechQuestsAddon_Store.config.ENCOUNTER_TEXT_FONT_SIZE ) end end function EncounterFrame:InitTab() local frame = self local tab = CreateFrame("Button", "EncounterJournalCustomTab", EncounterJournal.encounter.info, "EncounterTabTemplate") tab:SetPoint("TOP", EncounterJournal.encounter.info.modelTab, "BOTTOM", -3, -12) tab:SetSize(50, 40) tab.tooltip = "Taktika" local selected = tab:CreateTexture(nil, "BACKGROUND") selected:SetTexture("Interface\\EncounterJournal\\UI-EncounterJournalTextures") selected:SetAllPoints(tab) selected:SetBlendMode("ADD") selected:SetDrawLayer("OVERLAY") selected:SetTexCoord(0, 0.126953125, 0.90234375, 0.9599609375) selected:Hide() tab.selected = selected function tab:SetActive(enable) self:SetEnabled(enable); self:GetDisabledTexture():SetDesaturated(not enable); end function tab:SetHighlight(enable) if not enable then self.selected:Hide(); else self.selected:Show(); end end frame.tab = tab end function EncounterFrame:CreateHeader() local frame = self local id = NEXT_HEADER_ID + 1 NEXT_HEADER_ID = id local HeaderFrame = CreateFrame("FRAME", "CzechQuestsEncounterHeader" .. id, frame, "EncounterInfoTemplate") HeaderFrame:SetSize(self:GetParent():GetWidth() - 10, 30) addon.API.UpdateCzechFont( HeaderFrame.description, CzechQuestsAddon_Store.config.ENCOUNTER_TEXT_FONT_NAME, CzechQuestsAddon_Store.config.ENCOUNTER_TEXT_FONT_SIZE ) HeaderFrame.button.abilityIcon:Hide() HeaderFrame.button.portrait:Hide() HeaderFrame.button.icon2:Hide() HeaderFrame.button.icon3:Hide() HeaderFrame.button.icon4:Hide() HeaderFrame.button.expandedIcon:SetText("+") HeaderFrame.expanded = false HeaderFrame.empty = false HeaderFrame.button.title:SetPoint("TOPLEFT", HeaderFrame, "TOPLEFT", 30, -7); HeaderFrame.button.title:SetWidth(self:GetParent():GetWidth() - 110) for i = 1, #HeaderFrame.Bullets do HeaderFrame.Bullets[i]:Hide() end wipe(HeaderFrame.Bullets) for _, icon in ipairs(HeaderFrame.button.icons) do icon:Hide() end HeaderFrame.description:SetWidth(HeaderFrame:GetWidth() - 20) HeaderFrame.description:Hide() HeaderFrame.overviewDescription:Hide() HeaderFrame.descriptionBG:Hide() HeaderFrame.descriptionBGBottom:Hide() function HeaderFrame:Open() local header = self header.button.expandedIcon:SetText("-") if (header.empty == false) then header.description:Show() header.descriptionBG:Show() header.descriptionBGBottom:Show() end end function HeaderFrame:Close() local header = self header.button.expandedIcon:SetText("+") header.description:Hide() header.descriptionBG:Hide() header.descriptionBGBottom:Hide() end HeaderFrame.button:SetScript("OnClick", function(self) local header = self:GetParent() header.expanded = not header.expanded EncounterJournal_UpdateButtonState(header.button) if header.expanded then header:Open() else header:Close() end frame:ToggleHeader(header) end) return HeaderFrame end function EncounterFrame:UpdateHeaderPositions() local yOffset = -40 local function updatePosition(headers) for _, header in ipairs(headers) do header:SetPoint("BOTTOMRIGHT", self.summary, "BOTTOMRIGHT", 0, yOffset) if header.expanded then yOffset = yOffset - header.description:GetHeight() if header.empty == false then yOffset = yOffset - 50 else yOffset = yOffset - 30 end if header.children and #header.children > 0 then yOffset = updatePosition(header.children) end else yOffset = yOffset - 30 end end return yOffset end updatePosition(self.headers) end function EncounterFrame:ToggleHeader(header) if header.expanded and header.children then for _, child in ipairs(header.children) do child:Show() end end if not header.expanded and header.children then local function hideChildren(children) for _, child in ipairs(children) do child.expanded = false child:Close() child:Hide() if child.children then hideChildren(child.children) end end end hideChildren(header.children) end self:UpdateHeaderPositions() end function EncounterFrame:ClearHeaders() local function clear(headers) for _, header in ipairs(headers) do header:Hide() header:SetParent(nil) if header.children and #header.children > 0 then clear(header.children) end header = nil end wipe(headers) end clear(self.headers) end