2012-01-01 04:01:18 +01:00
local GetTime = QuestHelper_GetTime
2010-11-08 14:28:59 +01:00
QuestHelper_File [ " textviewer.lua " ] = " 4.0.1.$svnversion$ "
2010-10-24 23:17:33 +02:00
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