ESOUI SVN TaosGroupTools

[/] [trunk/] [TaosGroupTools/] [libs/] [LibMsgWin-1.0/] [LibMsgWin-1.0.lua] - Rev 47

Compare with Previous | Blame | View Log

--Register LAM with LibStub
local MAJOR, MINOR = "LibMsgWin-1.0", 8
local libmw, oldminor = LibStub:NewLibrary(MAJOR, MINOR)
if not libmw then return end    --the same or newer version of this lib is already loaded into memory 


local function AdjustSlider(self)               
        local numHistoryLines = self:GetNamedChild("Buffer"):GetNumHistoryLines()
        local numVisHistoryLines = self:GetNamedChild("Buffer"):GetNumVisibleLines()
        local bufferScrollPos = self:GetNamedChild("Buffer"):GetScrollPosition()
        local sliderMin, sliderMax = self:GetNamedChild("Slider"):GetMinMax()
        local sliderValue = self:GetNamedChild("Slider"):GetValue()
        
        self:GetNamedChild("Slider"):SetMinMax(0, numHistoryLines)
        
        -- If the sliders at the bottom, stay at the bottom to show new text
        if sliderValue == sliderMax then
                self:GetNamedChild("Slider"):SetValue(numHistoryLines)
        -- If the buffer is full start moving the slider up
        elseif numHistoryLines == self:GetNamedChild("Buffer"):GetMaxHistoryLines() then
                self:GetNamedChild("Slider"):SetValue(sliderValue-1)
        end -- Else the slider does not move
        
        -- If there are more history lines than visible lines show the slider
        if numHistoryLines > numVisHistoryLines then
                self:GetNamedChild("Slider"):SetHidden(false)
        else
                -- else hide the slider
                self:GetNamedChild("Slider"):SetHidden(true)
        end
end
        
function libmw:CreateMsgWindow(_UniqueName, _LabelText, _FadeDelay, _FadeTime)
        -- Dimension Constraits
        local minWidth = 200
        local minHeight = 150
        
        local tlw = WINDOW_MANAGER:CreateTopLevelWindow(_UniqueName)
        tlw:SetMouseEnabled(true)
        tlw:SetMovable(true)
        tlw:SetHidden(false)
        tlw:SetClampedToScreen(true)
        tlw:SetDimensions(350, 400)
        tlw:SetClampedToScreenInsets(-24)
        tlw:SetAnchor(TOPLEFT, GuiRoot, TOPLEFT, 50,50)
        tlw:SetDimensionConstraints(minWidth, minHeight)
        tlw:SetResizeHandleSize(16)
        
        -- Set Fade Delay/Times
        tlw.fadeDelayWindow             = _FadeDelay or 0
        tlw.fadeTimeWindow              = _FadeTime or 0
        tlw.fadeDelayTextLines  = tlw.fadeDelayWindow/1000
        tlw.fadeTimeTextLines   = tlw.fadeTimeWindow/1000
        
        -- Create window fade timeline/animation
        tlw.timeline = ANIMATION_MANAGER:CreateTimeline()
        tlw.animation = tlw.timeline:InsertAnimation(ANIMATION_ALPHA, tlw, tlw.fadeDelayWindow)
        tlw.animation:SetAlphaValues(1, 0)
        tlw.animation:SetDuration(tlw.fadeTimeWindow)
        tlw.timeline:PlayFromStart()
        
        
        function tlw:AddText(_Message, _Red, _Green, _Blue)
                local Red       = _Red or 1
                local Green = _Green or 1
                local Blue      = _Blue or 1
                
                if not _Message then return end
                -- Add message first
                self:GetNamedChild("Buffer"):AddMessage(_Message, Red, Green, Blue)
                -- Set new slider value & check visibility
                AdjustSlider(self)
                -- Reset Fade Timers
                tlw:SetAlpha(1)
                tlw.timeline:PlayFromStart()
        end
        function tlw:ChangeWinFade(_FadeDelay, _FadeTime)
                if not (type(_FadeDelay) == "number" and type(_FadeTime) == "number") then return end 
                tlw.fadeDelayWindow             = _FadeDelay
                tlw.fadeTimeWindow              = _FadeTime
                
                tlw.timeline:SetAnimationOffset(tlw.animation, _FadeDelay)
                tlw.animation:SetDuration(_FadeTime)
        end
        function tlw:ChangeTextFade(_FadeDelay, _FadeTime)
                if not (type(_FadeDelay) == "number" and type(_FadeTime) == "number") then return end 
                tlw.fadeDelayTextLines  = _FadeDelay/1000
                tlw.fadeTimeTextLines   = _FadeTime/1000
                self:GetNamedChild("Buffer"):SetLineFade(_FadeDelay/1000, _FadeTime/1000)
        end
        function tlw:ClearText()
                self:GetNamedChild("Buffer"):Clear()
        end
        
        local bg = WINDOW_MANAGER:CreateControl(_UniqueName.."Bg", tlw, CT_BACKDROP)
        bg:SetAnchor(TOPLEFT, tlw, TOPLEFT, -8, -6)
        bg:SetAnchor(BOTTOMRIGHT, tlw, BOTTOMRIGHT, 4, 4)
        bg:SetEdgeTexture("EsoUI/Art/ChatWindow/chat_BG_edge.dds", 256, 256, 32)
        bg:SetCenterTexture("EsoUI/Art/ChatWindow/chat_BG_center.dds")
        bg:SetInsets(32, 32, -32, -32)
        bg:SetDimensionConstraints(minWidth, minHeight)

        
        local divider = WINDOW_MANAGER:CreateControl(_UniqueName.."Divider", tlw, CT_TEXTURE)
        divider:SetDimensions(4, 8)
        divider:SetAnchor(TOPLEFT, tlw, TOPLEFT, 20, 40)
        divider:SetAnchor(TOPRIGHT, tlw, TOPRIGHT, -20, 40)
        divider:SetTexture("EsoUI/Art/Miscellaneous/horizontalDivider.dds")
        divider:SetTextureCoords(0.181640625, 0.818359375, 0, 1)

        
        local buffer = WINDOW_MANAGER:CreateControl(_UniqueName.."Buffer", tlw, CT_TEXTBUFFER)
        buffer:SetFont("ZoFontChat")
        buffer:SetMaxHistoryLines(200)
        buffer:SetMouseEnabled(true)
        buffer:SetLinkEnabled(true)
        buffer:SetAnchor(TOPLEFT, tlw, TOPLEFT, 20, 42)
        buffer:SetAnchor(BOTTOMRIGHT, tlw, BOTTOMRIGHT, -35, -20)
        buffer:SetLineFade(tlw.fadeDelayTextLines, tlw.fadeTimeTextLines)
        buffer:SetHandler("OnLinkMouseUp", function(self, linkText, link, button)
              --  ZO_PopupTooltip_SetLink(link)
                ZO_LinkHandler_OnLinkMouseUp(link, button, self) 
        end)
        buffer:SetDimensionConstraints(minWidth-55, minHeight-62)
                
        buffer:SetHandler("OnMouseWheel", function(self, delta, ctrl, alt, shift) 
                local offset = delta
                local slider = buffer:GetParent():GetNamedChild("Slider")
                if shift then
                        offset = offset * buffer:GetNumVisibleLines()
                elseif ctrl then
                        offset = offset * buffer:GetNumHistoryLines()
                end
                buffer:SetScrollPosition(buffer:GetScrollPosition() + offset)
                slider:SetValue(slider:GetValue() - offset)
        end)    
        
        buffer:SetHandler("OnMouseEnter", function(...)
                tlw.timeline:Stop()
                buffer:SetLineFade(0, 0)
                buffer:ShowFadedLines()
                tlw:SetAlpha(1)
        end)
        buffer:SetHandler("OnMouseExit", function(...)
                buffer:SetLineFade(tlw.fadeDelayTextLines, tlw.fadeTimeTextLines)
                tlw.timeline:PlayFromStart()
        end)
        
        local slider = WINDOW_MANAGER:CreateControl(_UniqueName.."Slider", tlw, CT_SLIDER)
        slider:SetDimensions(15, 32)
        slider:SetAnchor(TOPRIGHT, tlw, TOPRIGHT, -25, 60)
        slider:SetAnchor(BOTTOMRIGHT, tlw, BOTTOMRIGHT, -15, -80)
        slider:SetMinMax(1, 1)
        slider:SetMouseEnabled(true)
        slider:SetValueStep(1)
        slider:SetValue(1)
        slider:SetHidden(true)
        slider:SetThumbTexture("EsoUI/Art/ChatWindow/chat_thumb.dds", "EsoUI/Art/ChatWindow/chat_thumb_disabled.dds", nil, 8, 22, nil, nil, 0.6875, nil)
        slider:SetBackgroundMiddleTexture("EsoUI/Art/ChatWindow/chat_scrollbar_track.dds")
        
        slider:SetHandler("OnValueChanged", function(self,value, eventReason)
                local numHistoryLines = self:GetParent():GetNamedChild("Buffer"):GetNumHistoryLines()
                local sliderValue = slider:GetValue()
                
                if eventReason == EVENT_REASON_HARDWARE then
                        buffer:SetScrollPosition(numHistoryLines-sliderValue)
                end
        end)
        
        
        local scrollUp = WINDOW_MANAGER:CreateControlFromVirtual(_UniqueName.."SliderScrollUp", slider, "ZO_ScrollUpButton")
        scrollUp:SetAnchor(BOTTOM, slider, TOP, -1, 0)
        scrollUp:SetNormalTexture("EsoUI/Art/ChatWindow/chat_scrollbar_upArrow_up.dds")
        scrollUp:SetPressedTexture("EsoUI/Art/ChatWindow/chat_scrollbar_upArrow_down.dds")
        scrollUp:SetMouseOverTexture("EsoUI/Art/ChatWindow/chat_scrollbar_upArrow_over.dds")
        scrollUp:SetDisabledTexture("EsoUI/Art/ChatWindow/chat_scrollbar_upArrow_disabled.dds")
        scrollUp:SetHandler("OnMouseDown", function(...)
                buffer:SetScrollPosition(buffer:GetScrollPosition()+1)
                slider:SetValue(slider:GetValue()-1)
        end)
        
        
        local scrollDown = WINDOW_MANAGER:CreateControlFromVirtual(_UniqueName.."SliderScrollDown", slider, "ZO_ScrollDownButton")
        scrollDown:SetAnchor(TOP, slider, BOTTOM, -1, 0)
        scrollDown:SetNormalTexture("EsoUI/Art/ChatWindow/chat_scrollbar_downArrow_up.dds")
        scrollDown:SetPressedTexture("EsoUI/Art/ChatWindow/chat_scrollbar_downArrow_down.dds")
        scrollDown:SetMouseOverTexture("EsoUI/Art/ChatWindow/chat_scrollbar_downArrow_over.dds")
        scrollDown:SetDisabledTexture("EsoUI/Art/ChatWindow/chat_scrollbar_downArrow_disabled.dds")
        scrollDown:SetHandler("OnMouseDown", function(...)
                buffer:SetScrollPosition(buffer:GetScrollPosition()-1)
                slider:SetValue(slider:GetValue()+1)
        end)
        
        
        local scrollEnd = WINDOW_MANAGER:CreateControlFromVirtual(_UniqueName.."SliderScrollEnd", slider, "ZO_ScrollEndButton")
        scrollEnd:SetDimensions(16, 16)
        scrollEnd:SetAnchor(TOP, scrollDown, BOTTOM, 0, 0)
        scrollEnd:SetHandler("OnMouseDown", function(...)
                buffer:SetScrollPosition(0)
                slider:SetValue(buffer:GetNumHistoryLines())
        end)
        
        if _LabelText and _LabelText ~= "" then
                local label = WINDOW_MANAGER:CreateControl(_UniqueName.."Label", tlw, CT_LABEL)
                label:SetText(_LabelText)
                label:SetFont("$(ANTIQUE_FONT)|24")
                label:SetWrapMode(TEXT_WRAP_MODE_ELLIPSIS)
                local textHeight = label:GetTextHeight()
                label:SetDimensionConstraints(minWidth-60, textHeight, nil, textHeight)
                label:ClearAnchors()
                label:SetAnchor(TOPLEFT, tlw, TOPLEFT, 30, (40-textHeight)/2+5)
                label:SetAnchor(TOPRIGHT, tlw, TOPRIGHT, -30, (40-textHeight)/2+5)
        end
        return tlw
end





Compare with Previous | Blame