Thread: Chat Panels
View Single Post
12-09-12, 04:31 AM   #3
Blazingstorm
A Deviate Faerie Dragon
 
Blazingstorm's Avatar
Join Date: Jan 2007
Posts: 16
Chat Panels

Thanks for the quick response Phanx, your help is greatly appreciated. I tried entering your suggested code, and the end results are always incorrect. The General tab on the left and the Loot tab on right do not want to resize, but any other tab such as the Combat Log and Whisper tab will resize. As long as you undock them from the main chat frame.

My knowledge of .lua is sucky at best. I can make adjustments here and there, that's about it. So I have included the code of the mod I use, minus your suggested code. If you'd still like to help, that would be great. If not I understand.

As far as the EditBox goes, I figured that one out and adjusted it to my liking's.

Thanks, and keep up the great work with your own projects, and that of others.

Code:
local N, C, DB = unpack(select(2, ...)) -- Import:  N - function; C - config; DB - database

if C['nChat'].enable ~= true then return end

local _G = _G
local type = type
local select = select
local unpack = unpack

local gsub = string.gsub
local format = string.format

_G.CHAT_FRAME_TAB_SELECTED_MOUSEOVER_ALPHA = 1
_G.CHAT_FRAME_TAB_SELECTED_NOMOUSE_ALPHA = 1

_G.CHAT_FRAME_TAB_NORMAL_MOUSEOVER_ALPHA = 1
_G.CHAT_FRAME_TAB_NORMAL_NOMOUSE_ALPHA = 1

_G.CHAT_FRAME_FADE_OUT_TIME = 0.25
_G.CHAT_FRAME_FADE_TIME = 0.1

--[[
_G.CHAT_SAY_GET = '%s:\32'
_G.CHAT_YELL_GET = '%s:\32'

_G.CHAT_WHISPER_GET = '[from] %s:\32'
_G.CHAT_WHISPER_INFORM_GET = '[to] %s:\32'

_G.CHAT_BN_WHISPER_GET = '[from] %s:\32'
_G.CHAT_BN_WHISPER_INFORM_GET = '[to] %s:\32'
--]]

_G.CHAT_FLAG_AFK = '[AFK] '
_G.CHAT_FLAG_DND = '[DND] '
_G.CHAT_FLAG_GM = '[GM] '

_G.CHAT_GUILD_GET = '(|Hchannel:Guild|hG|h) %s:\32'
_G.CHAT_OFFICER_GET = '(|Hchannel:o|hO|h) %s:\32'

_G.CHAT_PARTY_GET = '(|Hchannel:party|hP|h) %s:\32'
_G.CHAT_PARTY_LEADER_GET = '(|Hchannel:party|hPL|h) %s:\32'
_G.CHAT_PARTY_GUIDE_GET = '(|Hchannel:party|hDG|h) %s:\32'
_G.CHAT_MONSTER_PARTY_GET = '(|Hchannel:raid|hR|h) %s:\32'

_G.CHAT_RAID_GET = '(|Hchannel:raid|hR|h) %s:\32'
_G.CHAT_RAID_WARNING_GET = '(RW!) %s:\32'
_G.CHAT_RAID_LEADER_GET = '(|Hchannel:raid|hL|h) %s:\32'

_G.CHAT_BATTLEGROUND_GET = '(|Hchannel:Battleground|hBG|h) %s:\32'
_G.CHAT_BATTLEGROUND_LEADER_GET = '(|Hchannel:Battleground|hBL|h) %s:\32'

    -- Blizzard introduced a bug in 4.3 that always enables
    -- the profanity filter

BNSetMatureLanguageFilter(false)

    -- Disable the profanity filter interface option

InterfaceOptionsSocialPanelProfanityFilter:SetAlpha(0.35)
InterfaceOptionsSocialPanelProfanityFilter:Disable()
InterfaceOptionsSocialPanelProfanityFilter:EnableMouse(false)

--[[
local channelFormat 
do
    local a, b = '.*%[(.*)%].*', '%%[%1%%]'
    channelFormat = {
        [1] = {gsub(CHAT_BATTLEGROUND_GET, a, b), '[BG]'},
        [2] = {gsub(CHAT_BATTLEGROUND_LEADER_GET, a, b), '[BGL]'},

        [3] = {gsub(CHAT_GUILD_GET, a, b), '[G]'},
        [4] = {gsub(CHAT_OFFICER_GET, a, b), '[O]'},
        
        [5] = {gsub(CHAT_PARTY_GET, a, b), '[P]'},
        [6] = {gsub(CHAT_PARTY_LEADER_GET, a, b), '[PL]'},
        [7] = {gsub(CHAT_PARTY_GUIDE_GET, a, b), '[PL]'},

        [8] = {gsub(CHAT_RAID_GET, a, b), '[R]'},
        [9] = {gsub(CHAT_RAID_LEADER_GET, a, b), '[RL]'},
        [10] = {gsub(CHAT_RAID_WARNING_GET, a, b), '[RW]'},

        [11] = {gsub(CHAT_FLAG_AFK, a, b), '[AFK] '},
        [12] = {gsub(CHAT_FLAG_DND, a, b), '[DND] '},
        [13] = {gsub(CHAT_FLAG_GM, a, b), '[GM] '},
    }
end
]]

local AddMessage = ChatFrame1.AddMessage
local function FCF_AddMessage(self, text, ...)
    if (type(text) == 'string') then
        text = gsub(text, '(|HBNplayer.-|h)%[(.-)%]|h', '%1%2|h')
        text = gsub(text, '(|Hplayer.-|h)%[(.-)%]|h', '%1%2|h')
        text = gsub(text, '%[(%d0?)%. (.-)%]', '(%1)') 
        
        --[[
        for i = 1, #channelFormat  do
            text = gsub(text, channelFormat[i][1], channelFormat[i][2])
        end
        --]]
    end

    return AddMessage(self, text, ...)
end

    -- Modify the editbox
    
for k = 6, 11 do
   select(k, ChatFrame1EditBox:GetRegions()):SetTexture(nil)
end

ChatFrame1EditBox:SetAltArrowKeyMode(false)
ChatFrame1EditBox:ClearAllPoints()
ChatFrame1EditBox:SetPoint('BOTTOMLEFT', ChatFrame1, 'BOTTOMLEFT', 2, -43)
ChatFrame1EditBox:SetPoint('BOTTOMRIGHT', ChatFrame1, 'TOPRIGHT', 0, 33)
ChatFrame1EditBox:SetBackdrop({
    bgFile = 'Interface\\Buttons\\WHITE8x8',
    insets = { 
        left = 3, right = 3, top = 2, bottom = 2 
    },
})

ChatFrame1EditBox:SetBackdropColor(0, 0, 0, 0.5)
ChatFrame1EditBox:CreateBeautyBorder(12)
ChatFrame1EditBox:SetBeautyBorderPadding(-2, -1, -2, -1, -2, -1, -2, -1)

if (C['nChat'].enableBorderColoring) then
    ChatFrame1EditBox:SetBeautyBorderTexture('white')

    hooksecurefunc('ChatEdit_UpdateHeader', function(editBox)
        local type = editBox:GetAttribute('chatType')
        if (not type) then
            return
        end

        local info = ChatTypeInfo[type]
        ChatFrame1EditBox:SetBeautyBorderColor(info.r, info.g, info.b)
    end)
end

if C['nChat'].chatBorder == true then	
	do	
		for i = 1, NUM_CHAT_WINDOWS do
			local cf = _G['ChatFrame'..i]
			if cf then
				cf:CreateBeautyBorder(12)
				cf:SetBeautyBorderPadding( 5, 5, 5, 5, 5, 8, 5, 8)
				cf:SetBeautyBorderTexture('white')
				if C['nMedia'].border == "Default" then
					cf:SetBeautyBorderColor(0.38, 0.38, 0.38)		
				elseif C['nMedia'].border == "Classcolor" then
					cf:SetBeautyBorderColor(N.ccolor.r, N.ccolor.g, N.ccolor.b)
				elseif C['nMedia'].border == "Custom" then
					cf:SetBeautyBorderColor(C['nMedia'].color.r, C['nMedia'].color.g, C['nMedia'].color.b)		
				end	
			end
		end
		
		local ct = _G['ChatFrame2']
		if ct then
			ct:CreateBeautyBorder(12)
			ct:SetBeautyBorderPadding(5, 29, 5, 29, 5, 8, 5, 8)
			ct:SetBeautyBorderTexture('white')
			if C['nMedia'].border == "Default" then
				ct:SetBeautyBorderColor(0.38, 0.38, 0.38)		
			elseif C['nMedia'].border == "Classcolor" then
				ct:SetBeautyBorderColor(N.ccolor.r, N.ccolor.g, N.ccolor.b)
			elseif C['nMedia'].border == "Custom" then
				ct:SetBeautyBorderColor(C['nMedia'].color.r, C['nMedia'].color.g, C['nMedia'].color.b)		
			end			
		end
	end
end	
    -- Hide the menu and friend button

FriendsMicroButton:SetAlpha(0)
FriendsMicroButton:EnableMouse(false)
FriendsMicroButton:UnregisterAllEvents()

ChatFrameMenuButton:SetAlpha(0)
ChatFrameMenuButton:EnableMouse(false)

    -- Tab text colors for the tabs

hooksecurefunc('FCFTab_UpdateColors', function(self, selected)
    if (selected) then
        self:GetFontString():SetTextColor(0, 0.75, 1)
    else
        self:GetFontString():SetTextColor(1, 1, 1)
    end
end)

    -- Tab text fadeout

local origFCF_FadeOutChatFrame = _G.FCF_FadeOutChatFrame
local function FCF_FadeOutChatFrameHook(chatFrame)
    origFCF_FadeOutChatFrame(chatFrame)

    local frameName = chatFrame:GetName()
    local chatTab = _G[frameName..'Tab']
    local tabGlow = _G[frameName..'TabGlow']

    if (not tabGlow:IsShown()) then
        if (frameName.isDocked) then
            securecall('UIFrameFadeOut', chatTab, CHAT_FRAME_FADE_OUT_TIME, chatTab:GetAlpha(), CHAT_FRAME_TAB_NORMAL_NOMOUSE_ALPHA)
        else
            securecall('UIFrameFadeOut', chatTab, CHAT_FRAME_FADE_OUT_TIME, chatTab:GetAlpha(), CHAT_FRAME_TAB_NORMAL_NOMOUSE_ALPHA)
        end
    end
end
FCF_FadeOutChatFrame = FCF_FadeOutChatFrameHook

    -- Improve mousewheel scrolling

hooksecurefunc('FloatingChatFrame_OnMouseScroll', function(self, direction)
    if (direction > 0) then
        if (IsShiftKeyDown()) then
            self:ScrollToTop()
        else
            self:ScrollUp()
            self:ScrollUp()
        end
    elseif (direction < 0)  then
        if (IsShiftKeyDown()) then
            self:ScrollToBottom()
        else
            self:ScrollDown()
            self:ScrollDown()
        end
    end

    if (C['nChat'].enableBottomButton) then
        local buttonBottom = _G[self:GetName() .. 'ButtonFrameBottomButton']
        if (self:AtBottom()) then
            buttonBottom:Hide()
        else
            buttonBottom:Show()
            buttonBottom:SetAlpha(0.7)
        end
    end
end)

    -- Reposit toast frame

BNToastFrame:HookScript('OnShow', function(self)
    BNToastFrame:ClearAllPoints()
    BNToastFrame:SetPoint('BOTTOMLEFT', ChatFrame1EditBox, 'TOPLEFT', 0, 15)
end)

    -- Modify the chat tabs

function SkinTab(self)
    local chat = _G[self]

    local tab = _G[self..'Tab']
    for i = 1, select('#', tab:GetRegions()) do
        local texture = select(i, tab:GetRegions())
        if (texture and texture:GetObjectType() == 'Texture') then
            texture:SetTexture(nil)
        end
    end

    local tabText = _G[self..'TabText']
    tabText:SetJustifyH('CENTER')
    tabText:SetWidth(60)
    if (C['nChat'].tab.fontOutline) then
        tabText:SetFont(C['nMedia'].font, C['nChat'].tab.fontSize, 'THINOUTLINE')
        tabText:SetShadowOffset(0, 0)
    else
        tabText:SetFont(C['nMedia'].font, C['nChat'].tab.fontSize)
        tabText:SetShadowOffset(1, -1)
    end

    local a1, a2, a3, a4, a5 = tabText:GetPoint()
    tabText:SetPoint(a1, a2, a3, a4, 1)

    local s1, s2, s3 = C['nChat'].tab.specialColor.r, C['nChat'].tab.specialColor.g, C['nChat'].tab.specialColor.b
    local e1, e2, e3 = C['nChat'].tab.selectedColor.r, C['nChat'].tab.selectedColor.g, C['nChat'].tab.selectedColor.b
    local n1, n2, n3 = C['nChat'].tab.normalColor.r, C['nChat'].tab.normalColor.g, C['nChat'].tab.normalColor.b

    local tabGlow = _G[self..'TabGlow']
    hooksecurefunc(tabGlow, 'Show', function()
        tabText:SetTextColor(s1, s2, s3, CHAT_FRAME_TAB_NORMAL_MOUSEOVER_ALPHA)
    end)

    hooksecurefunc(tabGlow, 'Hide', function()
        tabText:SetTextColor(n1, n2, n3)
    end)

    tab:SetScript('OnEnter', function()
        tabText:SetTextColor(s1, s2, s3, tabText:GetAlpha())
    end)

    tab:SetScript('OnLeave', function()
        local hasNofication = tabGlow:IsShown()

        local r, g, b
        if (_G[self] == SELECTED_CHAT_FRAME and chat.isDocked) then
            r, g, b = e1, e2, e3
        elseif (hasNofication) then
            r, g, b = s1, s2, s3
        else
            r, g, b = n1, n2, n3
        end

        tabText:SetTextColor(r, g, b)
    end)

    hooksecurefunc(tab, 'Show', function()
        if (not tab.wasShown) then
            local hasNofication = tabGlow:IsShown()
            
            if (chat:IsMouseOver()) then
                tab:SetAlpha(CHAT_FRAME_TAB_NORMAL_MOUSEOVER_ALPHA)
            else
                tab:SetAlpha(CHAT_FRAME_TAB_NORMAL_NOMOUSE_ALPHA)
            end

            local r, g, b
            if (_G[self] == SELECTED_CHAT_FRAME and chat.isDocked) then
                r, g, b = e1, e2, e3
            elseif (hasNofication) then
                r, g, b = s1, s2, s3
            else
                r, g, b = n1, n2, n3
            end

            tabText:SetTextColor(r, g, b)

            tab.wasShown = true
        end
    end)
end

local function ModChat(self)
    local chat = _G[self]

    if (not C['nChat'].chatOutline) then
        chat:SetShadowOffset(1, -1)
    end

    if (C['nChat'].disableFade) then
        chat:SetFading(false)
    end

    SkinTab(self)

    local font, fontsize, fontflags = chat:GetFont()
    chat:SetFont(C['nMedia'].font, fontsize, C['nChat'].chatOutline and 'THINOUTLINE' or fontflags)
    chat:SetClampedToScreen(true)

    chat:SetClampRectInsets(0, 0, 0, 0)
    chat:SetMaxResize(UIParent:GetWidth(), UIParent:GetHeight())
    chat:SetMinResize(150, 25)
    
    if (self ~= 'ChatFrame2') then
        chat.AddMessage = FCF_AddMessage
    end

    local buttonUp = _G[self..'ButtonFrameUpButton']
    buttonUp:SetAlpha(0)
    buttonUp:EnableMouse(false)

    local buttonDown = _G[self..'ButtonFrameDownButton']
    buttonDown:SetAlpha(0)
    buttonDown:EnableMouse(false)

    local buttonBottom = _G[self..'ButtonFrameBottomButton']
    if (C['nChat'].enableBottomButton) then
        buttonBottom:Hide()
        buttonBottom:ClearAllPoints()
        buttonBottom:SetPoint('BOTTOMRIGHT', chat, 1, 3)
        buttonBottom:HookScript('OnClick', function(self)
            self:Hide()
        end)
    else
        buttonBottom:SetAlpha(0)
        buttonBottom:EnableMouse(false)
    end

    for _, texture in pairs({
        'ButtonFrameBackground',
        'ButtonFrameTopLeftTexture',
        'ButtonFrameBottomLeftTexture',
        'ButtonFrameTopRightTexture',
        'ButtonFrameBottomRightTexture',
        'ButtonFrameLeftTexture',
        'ButtonFrameRightTexture',
        'ButtonFrameBottomTexture',
        'ButtonFrameTopTexture',
    }) do
        _G[self..texture]:SetTexture(nil)
    end
end

local function SetChatStyle()
    for _, v in pairs(CHAT_FRAMES) do
        local chat = _G[v]
        if (chat and not chat.hasModification) then
            ModChat(chat:GetName())

            local convButton = _G[chat:GetName()..'ConversationButton']
            if (convButton) then
                convButton:SetAlpha(0)
                convButton:EnableMouse(false)
            end

            local chatMinimize = _G[chat:GetName()..'ButtonFrameMinimizeButton']
            if (chatMinimize) then
                chatMinimize:SetAlpha(0)
                chatMinimize:EnableMouse(0)
            end

            chat.hasModification = true
        end
    end	
	
end
hooksecurefunc('FCF_OpenTemporaryWindow', SetChatStyle)
SetChatStyle()

    -- Chat menu, just a middle click on the chatframe 1 tab

hooksecurefunc('ChatFrameMenu_UpdateAnchorPoint', function()
    if (FCF_GetButtonSide(DEFAULT_CHAT_FRAME) == 'right') then
        ChatMenu:ClearAllPoints()
        ChatMenu:SetPoint('BOTTOMRIGHT', ChatFrame1Tab, 'TOPLEFT')
    else
        ChatMenu:ClearAllPoints()
        ChatMenu:SetPoint('BOTTOMLEFT', ChatFrame1Tab, 'TOPRIGHT')
    end
end)

ChatFrame1Tab:RegisterForClicks('AnyUp')
ChatFrame1Tab:HookScript('OnClick', function(self, button)
    if (button == 'MiddleButton' or button == 'Button4' or button == 'Button5') then
        if (ChatMenu:IsShown()) then
            ChatMenu:Hide()
        else
            ChatMenu:Show()
        end
    else
        ChatMenu:Hide()
    end
end)

    -- Modify the gm chatframe and add a sound notification on incoming whispers

local f = CreateFrame('Frame')
f:RegisterEvent('ADDON_LOADED')
f:RegisterEvent('CHAT_MSG_WHISPER')
f:RegisterEvent('CHAT_MSG_BN_WHISPER')
f:SetScript('OnEvent', function(_, event)
    if (event == 'ADDON_LOADED' and arg1 == 'Blizzard_GMChatUI') then
        GMChatFrame:EnableMouseWheel(true)
        GMChatFrame:SetScript('OnMouseWheel', ChatFrame1:GetScript('OnMouseWheel'))
        GMChatFrame:SetHeight(200)

        GMChatFrameUpButton:SetAlpha(0)
        GMChatFrameUpButton:EnableMouse(false)

        GMChatFrameDownButton:SetAlpha(0)
        GMChatFrameDownButton:EnableMouse(false)

        GMChatFrameBottomButton:SetAlpha(0)
        GMChatFrameBottomButton:EnableMouse(false)
    end

    if (event == 'CHAT_MSG_WHISPER' or event == 'CHAT_MSG_BN_WHISPER') then
        PlaySoundFile('Sound\\Spells\\Simongame_visual_gametick.wav')
    end
end)

local combatLog = {
    text = 'CombatLog',
    colorCode = '|cffFFD100',
    isNotRadio = true,

    func = function() 
        if (not LoggingCombat()) then
            LoggingCombat(true) 
            DEFAULT_CHAT_FRAME:AddMessage(COMBATLOGENABLED, 1, 1, 0)
        else
            LoggingCombat(false)
            DEFAULT_CHAT_FRAME:AddMessage(COMBATLOGDISABLED, 1, 1, 0)
        end
    end,

    checked = function()
        if (LoggingCombat()) then
            return true
        else
            return false
        end
    end
}

local chatLog = {
    text = 'ChatLog',
    colorCode = '|cffFFD100',
    isNotRadio = true,

    func = function() 
        if (not LoggingChat()) then
            LoggingChat(true) 
            DEFAULT_CHAT_FRAME:AddMessage(CHATLOGENABLED, 1, 1, 0)
        else
            LoggingChat(false)
            DEFAULT_CHAT_FRAME:AddMessage(CHATLOGDISABLED, 1, 1, 0)
        end
    end,

    checked = function()
        if (LoggingChat()) then
            return true
        else
            return false
        end
    end
}

local origFCF_Tab_OnClick = _G.FCF_Tab_OnClick
local function FCF_Tab_OnClickHook(chatTab, ...)
    origFCF_Tab_OnClick(chatTab, ...)

    combatLog.arg1 = chatTab
    UIDropDownMenu_AddButton(combatLog)

    chatLog.arg1 = chatTab
    UIDropDownMenu_AddButton(chatLog)
end
FCF_Tab_OnClick = FCF_Tab_OnClickHook
  Reply With Quote