local GetTime = QuestHelper_GetTime QuestHelper_File["textviewer.lua"] = "4.0.1.$svnversion$" QuestHelper_Loadtime["textviewer.lua"] = GetTime() local viewer local function viewer_cancelmove(self) if self.isMoving then self:StopMovingOrSizing() self.isMoving = false end end local function viewer_mousedown(self, button) if button == "LeftButton" then self:StartMoving() self.isMoving = true end end local function viewer_closebutton(self) for i = 1, #viewer.text do viewer.text[i]:SetText("") end viewer:Hide() end local frammis = {} function QuestHelper:ShowText(text, title, width, border, divide) local border = border or 8 local divide = divide or 4 if type(text) == "string" then text = {text} end if not frammis[border] then frammis[border] = {} end viewer = frammis[border][divide] local suffix = string.format("_%d_%d", border, divide) if not viewer then viewer = CreateFrame("Frame", "QuestHelperTextViewer", nil) -- With no parent, this will always be visible. viewer:SetFrameStrata("FULLSCREEN_DIALOG") viewer:SetPoint("CENTER", UIParent) viewer:EnableMouse(true) viewer:SetMovable(true) QH_Hook(viewer, "OnMouseDown", viewer_mousedown) QH_Hook(viewer, "OnMouseUp", viewer_cancelmove) QH_Hook(viewer, "OnHide", viewer_cancelmove) -- This will cause it to be hidden if Esc is pressed. table.insert(UISpecialFrames, viewer:GetName()) viewer.title = viewer:CreateFontString() viewer.title:SetFont(self.font.serif, 14) viewer.title:SetPoint("TOPLEFT", viewer, border, -border) viewer.title:SetPoint("RIGHT", viewer, -border, 0) viewer:SetBackdrop({ bgFile = "Interface/Tooltips/UI-Tooltip-Background", edgeFile = "Interface/Tooltips/UI-Tooltip-Border", edgeSize = 16, tile = true, tileSize = 16, insets = { left = 4, right = 4, top = 4, bottom = 4 }}) viewer:SetBackdropColor(0, 0, 0, 0.8) viewer:SetBackdropBorderColor(1, 1, 1, 0.7) viewer.scrollframe = CreateFrame("ScrollFrame", "QuestHelperTextViewer_ScrollFrame" .. suffix, viewer, "UIPanelScrollFrameTemplate") viewer.scrollframe:SetPoint("LEFT", viewer, "LEFT", border, 0) viewer.scrollframe:SetPoint("TOP", viewer.title, "BOTTOM", 0, -divide) viewer.scrollbar = _G["QuestHelperTextViewer_ScrollFrame" .. suffix .. "ScrollBar"] --QuestHelperTextViewer_ScrollFrameThumbTexture = self:CreateIconTexture(viewer.scrollbar, 26) -- Use the snazzy blue thumb viewer.scrollbar:SetBackdrop({ -- Note: These settings are coppied from UIPanelScrollBarTemplateLightBorder in UIPanelTemplates.xml edgeFile = "Interface/Tooltips/UI-Tooltip-Border", edgeSize = 12, tileSize = 16, insets = { left = 0, right = 0, top = 5, bottom = 5 }}) viewer.closebutton = CreateFrame("Button", "QuestHelperTextViewer_CloseButton" .. suffix, viewer, "UIPanelCloseButton") viewer.closebutton:SetPoint("TOPRIGHT", viewer) QH_Hook(viewer.closebutton, "OnClick", viewer_closebutton) viewer.frame = CreateFrame("Frame", "QuestHelperTextViewer_Frame" .. suffix, viewer.scrollframe) viewer.scrollframe:SetScrollChild(viewer.frame) viewer.text = {} end local maxw = 0 for i = 1, #text do if not viewer.text[i] then viewer.text[i] = viewer.frame:CreateFontString() viewer.text[i]:SetFont(self.font.sans, 12) viewer.text[i]:SetJustifyH("LEFT") if i > 1 then viewer.text[i]:SetPoint("TOPLEFT", viewer.text[i - 1], "BOTTOMLEFT") else viewer.text[i]:SetPoint("TOPLEFT", viewer.frame) end end viewer.text[i]:Show() viewer.text[i]:SetText(text[i] or "No text.") maxw = math.max(maxw, viewer.text[i]:GetStringWidth()) end for i = #text + 1, #viewer.text do viewer.text[i]:Hide() end viewer:Show() viewer.title:SetText(title or "QuestHelper") viewer.scrollframe:SetVerticalScroll(0) local w = width or math.min(600, math.max(100, maxw)) for i = 1, #viewer.text do viewer.text[i]:SetWidth(w) end viewer:SetWidth(w+border * 2) viewer.scrollframe:SetWidth(w) viewer.frame:SetWidth(w) local toth = 0 for i = 1, #text do toth = toth + viewer.text[i]:GetHeight() end local h = math.max(10, toth) local title_h = viewer.title:GetHeight() if h > 400 then viewer.frame:SetHeight(400) viewer.scrollframe:SetHeight(400) viewer:SetHeight(420+title_h+border * 2+divide) viewer:SetWidth(w+border * 2 + 22) viewer.scrollbar:Show() else viewer.frame:SetHeight(h) viewer.scrollframe:SetHeight(h) viewer:SetHeight(h+border * 2 + divide+title_h) viewer.scrollbar:Hide() --[[ WoW Bug: For some reason, setting the thumb texture on the scrollbar causes the following scenario: 1. Display the viewer with scrollable text (eg /qh) 2. Display the viewer with smaller text (eg /qh help filter) The second time the viewer is displayed, the close button doesn't show its normal state. When you hover over it, the glow appears. If you press the left button over it, the depressed state appears. If you drag off of it, then release, the normal state appears, and the button is fine until you repeat 1 & 2. ]] viewer.closebutton:SetButtonState("PUSHED") -- Workaround: there's a wierd quirk that's causing it to not show sometimes... viewer.closebutton:SetButtonState("NORMAL") -- Workaround, part 2 end frammis[border][divide] = viewer end