diff --git a/img/proxy.tga b/img/proxy.tga index a7380b22..5e676244 100644 Binary files a/img/proxy.tga and b/img/proxy.tga differ diff --git a/modules/chat.lua b/modules/chat.lua index adfc3749..da7aa7f2 100644 --- a/modules/chat.lua +++ b/modules/chat.lua @@ -177,139 +177,6 @@ pfUI:RegisterModule("chat", function () pfUI.chat.urlcopy.SetItemRef(link, text, button) end - -- whisper forwarding - pfUI.chat.left.panelTop.proxy = CreateFrame("Button", "leftChatWhisperProxy", pfUI.chat.left.panelTop) - pfUI.chat.left.panelTop.proxy:RegisterEvent("CHAT_MSG_WHISPER") - pfUI.chat.left.panelTop.proxy:SetPoint("TOPRIGHT", pfUI.chat.left, "TOPRIGHT", -20, -6) - pfUI.chat.left.panelTop.proxy:SetWidth(12) - pfUI.chat.left.panelTop.proxy:SetHeight(12) - pfUI.chat.left.panelTop.proxy:SetNormalTexture("Interface\\AddOns\\pfUI\\img\\proxy") - pfUI.chat.left.panelTop.proxy:SetAlpha(0.25) - for i,v in ipairs({pfUI.chat.left.panelTop.proxy:GetRegions()}) do - if v.SetVertexColor then v:SetVertexColor(1,1,1,1) end - end - - pfUI.chat.left.panelTop.proxy.enabled = false - pfUI.chat.left.panelTop.proxy.forwardto = "" - - function pfUI.chat.left.panelTop.proxy.toggle() - if pfUI.chat.left.panelTop.proxy.enabled == true then - -- redirect inactive - pfUI.chat.left.panelTop.proxy.enabled = false - pfUI.chat.left.panelTop.proxy:SetAlpha(0.25) - for i,v in ipairs({pfUI.chat.left.panelTop.proxy:GetRegions()}) do - if v.SetVertexColor then v:SetVertexColor(1,1,1,1) end - end - DEFAULT_CHAT_FRAME:AddMessage("Forwarding to |cff33ffcc" .. pfUI.chat.left.panelTop.proxy.forwardto .. "|r has been disabled") - elseif pfUI.chat.left.panelTop.proxy.forwardto ~= "" then - -- redirect active - pfUI.chat.left.panelTop.proxy.enabled = true - pfUI.chat.left.panelTop.proxy:SetAlpha(1) - for i,v in ipairs({pfUI.chat.left.panelTop.proxy:GetRegions()}) do - if v.SetVertexColor then v:SetVertexColor(1,.25,.25,1) end - end - DEFAULT_CHAT_FRAME:AddMessage("All messages will be forwarded to |cff33ffcc" .. pfUI.chat.left.panelTop.proxy.forwardto) - end - end - - pfUI.chat.left.panelTop.proxy:RegisterForClicks("LeftButtonUp", "RightButtonUp") - pfUI.chat.left.panelTop.proxy:SetScript("OnClick", function() - if arg1 == "RightButton" then - if pfUI.chat.left.panelTop.proxyName:IsShown() then - pfUI.chat.left.panelTop.proxyName:Hide() - else - pfUI.chat.left.panelTop.proxyName:Show() - end - else - pfUI.chat.left.panelTop.proxy.toggle() - end - end) - - pfUI.chat.left.panelTop.proxy:SetScript("OnEvent", function() - local forwardto = pfUI.chat.left.panelTop.proxy.forwardto - if pfUI.chat.left.panelTop.proxy.enabled == false then return end - - if arg2 ~= UnitName("player") and arg2 ~= forwardto and forwardto ~= UnitName("player") then - SendChatMessage("[" .. arg2 .. "]: " .. arg1, "WHISPER", nil, forwardto) - end - - if arg2 == forwardto then - local isForward, _, name, message = string.find(arg1, "(.*): (.*)") - if isForward then - SendChatMessage(message, "WHISPER", nil, name) - SendChatMessage("-> " .. name, "WHISPER", nil, forwardto) - end - end - end) - - pfUI.chat.left.panelTop.proxyName = CreateFrame("Frame", "leftChatWhisperProxyName", UIParent) - pfUI.chat.left.panelTop.proxyName:SetPoint("CENTER", 0, 0) - pfUI.chat.left.panelTop.proxyName:SetHeight(90) - pfUI.chat.left.panelTop.proxyName:SetWidth(200) - CreateBackdrop(pfUI.chat.left.panelTop.proxyName, default_border) - pfUI.chat.left.panelTop.proxyName:SetScript("OnShow", function() - pfUI.chat.left.panelTop.proxyName.input:SetText(pfUI.chat.left.panelTop.proxy.forwardto) - end) - - pfUI.chat.left.panelTop.proxyName.caption = pfUI.chat.left.panelTop.proxyName:CreateFontString("Status", "LOW", "GameFontNormal") - pfUI.chat.left.panelTop.proxyName.caption:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE") - pfUI.chat.left.panelTop.proxyName.caption:SetPoint("TOP", 0, -10) - pfUI.chat.left.panelTop.proxyName.caption:SetFontObject(GameFontWhite) - pfUI.chat.left.panelTop.proxyName.caption:SetJustifyH("CENTER") - pfUI.chat.left.panelTop.proxyName.caption:SetText(T["Forward all whispers to:"]) - - pfUI.chat.left.panelTop.proxyName.input = CreateFrame("EditBox", nil, pfUI.chat.left.panelTop.proxyName) - pfUI.chat.left.panelTop.proxyName.input:SetTextColor(.2,1.1,1) - pfUI.chat.left.panelTop.proxyName.input:SetJustifyH("CENTER") - CreateBackdrop(pfUI.chat.left.panelTop.proxyName.input, default_border) - pfUI.chat.left.panelTop.proxyName.input:SetPoint("TOPLEFT" , pfUI.chat.left.panelTop.proxyName, "TOPLEFT", 10, -30) - pfUI.chat.left.panelTop.proxyName.input:SetPoint("BOTTOMRIGHT" , pfUI.chat.left.panelTop.proxyName, "BOTTOMRIGHT", -10, 40) - pfUI.chat.left.panelTop.proxyName.input:SetFontObject(GameFontWhite) - pfUI.chat.left.panelTop.proxyName.input:SetAutoFocus(false) - pfUI.chat.left.panelTop.proxyName.input:SetText(pfUI.chat.left.panelTop.proxy.forwardto) - pfUI.chat.left.panelTop.proxyName.input:SetScript("OnEscapePressed", function(self) - pfUI.chat.left.panelTop.proxyName:Hide() - end) - - pfUI.chat.left.panelTop.proxyName.okay = CreateFrame("Button", nil, pfUI.chat.left.panelTop.proxyName) - pfUI.chat.left.panelTop.proxyName.okay:SetWidth(80) - pfUI.chat.left.panelTop.proxyName.okay:SetHeight(20) - pfUI.chat.left.panelTop.proxyName.okay:SetPoint("BOTTOMRIGHT", -10, 10) - CreateBackdrop(pfUI.chat.left.panelTop.proxyName.okay, default_border) - pfUI.chat.left.panelTop.proxyName.okay.text = pfUI.chat.left.panelTop.proxyName.okay:CreateFontString("Status", "LOW", "GameFontNormal") - pfUI.chat.left.panelTop.proxyName.okay.text:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE") - pfUI.chat.left.panelTop.proxyName.okay.text:ClearAllPoints() - pfUI.chat.left.panelTop.proxyName.okay.text:SetAllPoints(pfUI.chat.left.panelTop.proxyName.okay) - pfUI.chat.left.panelTop.proxyName.okay.text:SetPoint("CENTER", 0, 0) - pfUI.chat.left.panelTop.proxyName.okay.text:SetFontObject(GameFontWhite) - pfUI.chat.left.panelTop.proxyName.okay.text:SetText(T["Save"]) - pfUI.chat.left.panelTop.proxyName.okay:SetScript("OnClick", function() - pfUI.chat.left.panelTop.proxy.forwardto = pfUI.chat.left.panelTop.proxyName.input:GetText() - if pfUI.chat.left.panelTop.proxy.enabled == true then - DEFAULT_CHAT_FRAME:AddMessage("All messages will now be forwarded to |cff33ffcc" .. pfUI.chat.left.panelTop.proxy.forwardto) - end - pfUI.chat.left.panelTop.proxyName:Hide() - end) - - pfUI.chat.left.panelTop.proxyName.abort = CreateFrame("Button", nil, pfUI.chat.left.panelTop.proxyName) - pfUI.chat.left.panelTop.proxyName.abort:SetWidth(80) - pfUI.chat.left.panelTop.proxyName.abort:SetHeight(20) - pfUI.chat.left.panelTop.proxyName.abort:SetPoint("BOTTOMLEFT", 10, 10) - CreateBackdrop(pfUI.chat.left.panelTop.proxyName.abort, default_border) - pfUI.chat.left.panelTop.proxyName.abort.text = pfUI.chat.left.panelTop.proxyName.abort:CreateFontString("Status", "LOW", "GameFontNormal") - pfUI.chat.left.panelTop.proxyName.abort.text:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE") - pfUI.chat.left.panelTop.proxyName.abort.text:ClearAllPoints() - pfUI.chat.left.panelTop.proxyName.abort.text:SetAllPoints(pfUI.chat.left.panelTop.proxyName.abort) - pfUI.chat.left.panelTop.proxyName.abort.text:SetPoint("CENTER", 0, 0) - pfUI.chat.left.panelTop.proxyName.abort.text:SetFontObject(GameFontWhite) - pfUI.chat.left.panelTop.proxyName.abort.text:SetText(T["Abort"]) - pfUI.chat.left.panelTop.proxyName.abort:SetScript("OnClick", function() - pfUI.chat.left.panelTop.proxyName:Hide() - end) - - pfUI.chat.left.panelTop.proxyName:Hide() - - pfUI.chat.right = CreateFrame("Frame", "pfChatRight", UIParent) pfUI.chat.right:SetFrameStrata("BACKGROUND") pfUI.chat.right:SetWidth(C.chat.right.width) @@ -368,12 +235,12 @@ pfUI:RegisterModule("chat", function () ChatTypeInfo.CHANNEL.sticky = 1 end - for i,v in ipairs({ChatFrameMenuButton:GetRegions()}) do - v:SetAllPoints(ChatFrameMenuButton) - local _, class = UnitClass("player") - v:SetTexture(.5,.5,.5, 1) - v:SetVertexColor(RAID_CLASS_COLORS[class].r + .3 * .5, RAID_CLASS_COLORS[class].g +.3 * .5, RAID_CLASS_COLORS[class].b +.3 * .5,1) - end + ChatFrameMenuButton:Hide() + ChatMenu:SetClampedToScreen(true) + CreateBackdrop(ChatMenu) + CreateBackdrop(EmoteMenu) + CreateBackdrop(LanguageMenu) + CreateBackdrop(VoiceMacroMenu) for i=1, NUM_CHAT_WINDOWS do local frame = _G["ChatFrame"..i] @@ -645,13 +512,6 @@ pfUI:RegisterModule("chat", function () end end - ChatFrameMenuButton:SetNormalTexture("foo") - ChatFrameMenuButton:ClearAllPoints() - ChatFrameMenuButton:SetParent(pfUI.chat.left.panelTop) - ChatFrameMenuButton:SetPoint("TOPRIGHT",-6,-6) - ChatFrameMenuButton:SetHeight(6) - ChatFrameMenuButton:SetWidth(6) - pfUI.chat.editbox = CreateFrame("Frame", "pfChatInputBox", UIParent) if C.chat.text.input_height == "0" then pfUI.chat.editbox:SetHeight(22) diff --git a/modules/chatcopy.lua b/modules/chatcopy.lua new file mode 100644 index 00000000..cf025601 --- /dev/null +++ b/modules/chatcopy.lua @@ -0,0 +1,198 @@ +pfUI:RegisterModule("chatcopy", function () + -- temporary till the new API is merged + local function CreateScrollFrame(name, parent) + local f = CreateFrame("ScrollFrame", name, parent) + SetAllPointsOffset(f, parent, 2) + + -- create slider + f.slider = CreateFrame("Slider", nil, f) + f.slider:SetOrientation('VERTICAL') + f.slider:SetPoint("TOPLEFT", f, "TOPRIGHT", -7, 0) + f.slider:SetPoint("BOTTOMRIGHT", 0, 0) + f.slider:SetThumbTexture("Interface\\AddOns\\pfUI\\img\\col") + f.slider.thumb = f.slider:GetThumbTexture() + f.slider.thumb:SetHeight(50) + f.slider.thumb:SetTexture(.3,1,.8,.5) + + f.slider:SetScript("OnValueChanged", function() + f:SetVerticalScroll(this:GetValue()) + f.UpdateScrollState() + end) + + f.UpdateScrollState = function() + f.slider:SetMinMaxValues(0, f:GetVerticalScrollRange()) + f.slider:SetValue(f:GetVerticalScroll()) + + local m = f:GetHeight()+f:GetVerticalScrollRange() + local v = f:GetHeight() + local ratio = v / m + + if ratio < 1 then + local size = math.floor(v * ratio) + f.slider.thumb:SetHeight(size) + f.slider:Show() + else + f.slider:Hide() + end + end + + f.Scroll = function(self, step) + local step = step or 0 + + local current = f:GetVerticalScroll() + local max = f:GetVerticalScrollRange() + local new = current - step + + if new >= max then + f:SetVerticalScroll(max) + elseif new <= 0 then + f:SetVerticalScroll(0) + else + f:SetVerticalScroll(new) + end + + f:UpdateScrollState() + end + + f:EnableMouseWheel(1) + f:SetScript("OnMouseWheel", function() + this:Scroll(arg1*10) + end) + + return f + end + + local f = CreateFrame("Frame") + f:RegisterEvent("PLAYER_ENTERING_WORLD") + f:SetScript("OnEvent", function() + local combat = {} + + for i=1, _G.NUM_CHAT_WINDOWS do + local frame = _G["ChatFrame"..i] + local name = frame:GetName() + + local combat = 0 + for i, msg in pairs(frame.messageTypeList) do + if strfind(msg, "SPELL", 1) or strfind(msg, "COMBAT", 1) then + combat = combat + 1 + end + end + + if combat < 5 then + -- initialize message cache + local history = {} + local AddMessage = frame.AddMessage + frame.AddMessage = function(self,msg,r,g,b) + if r and g and b then + local col = string.format("|cff%02x%02x%02x", r*255, g*255, b*255) + table.insert(history, 1, col..string.gsub(msg, "|r", col)) + else + table.insert(history, 1, "|cffffffff"..msg) + end + + if history[50] then + table.remove(history, 50) + end + AddMessage(self,msg,r,g,b) + end + + -- read chat defaults + local font, size, flags = frame:GetFont() + + -- build the frames + local scroll = CreateScrollFrame(nil, frame) + scroll:SetAllPoints(frame) + scroll.tex = scroll:CreateTexture(nil, "BACKGROUND") + scroll.tex:SetTexture(0,0,0,.95) + scroll.tex:SetPoint("TOPLEFT", -3, 3) + scroll.tex:SetPoint("BOTTOMRIGHT", 3, -3) + scroll:Hide() + + local editbox = CreateFrame("EditBox", "pfChatCopyBox" .. i, scroll) + editbox:SetHeight(frame:GetHeight()) + editbox:SetWidth(frame:GetWidth()) + editbox:SetAllPoints(scroll) + editbox:SetTextColor(1,1,1,1) + editbox:SetFontObject(ChatFontNormal) + editbox:SetFont(font, size, flags) + editbox:SetMaxLetters(99999) + editbox:SetAutoFocus(true) + editbox:SetMultiLine(true) + + editbox:SetScript("OnEscapePressed", function () + this:ClearFocus() + this:GetParent():Hide() + end) + + scroll:SetScrollChild(editbox) + scroll:SetScript("OnShow", function() + editbox:SetText("") + for i=50,0,-1 do + if history[i] then + editbox:Insert("\n" .. history[i]) + end + end + + editbox:SetScript("OnUpdate", function() + if not this.count then this.count = 0 end + + scroll:UpdateScrollChildRect() + scroll:SetVerticalScroll(scroll:GetVerticalScrollRange()) + scroll:Scroll() + this.count = this.count + 1 + + -- the scroll frame takes a while to update + if this.count >= 3 then + this:SetScript("OnUpdate", nil) + this.count = 0 + end + end) + end) + + local button = CreateFrame("Button", nil, frame) + button:RegisterForClicks("LeftButtonUp", "RightButtonUp") + if pfUI.chat then + button:SetPoint("TOPRIGHT", 0, 24) + else + button:SetPoint("TOPRIGHT", -3, -3) + end + + button:SetFrameStrata("TOOLTIP") + button:SetWidth(16) + button:SetHeight(16) + button:SetAlpha(.25) + button.icon = button:CreateTexture(nil,"BACKGROUND") + button.icon:SetTexture("Interface\\Buttons\\UI-GuildButton-PublicNote-Disabled") + button.icon:SetAllPoints() + + button:SetScript("OnClick", function() + if arg1 == "LeftButton" then + if scroll:IsShown() then + scroll:Hide() + button.icon:SetTexture("Interface\\Buttons\\UI-GuildButton-PublicNote-Disabled") + else + scroll:Show() + button.icon:SetTexture("Interface\\Buttons\\UI-GuildButton-PublicNote-Up") + end + elseif arg1 == "RightButton" then + if ChatMenu:IsShown() then + ChatMenu:Hide() + else + ChatMenu:Show() + ChatMenu:ClearAllPoints() + ChatMenu:SetPoint("BOTTOMLEFT", this, "TOPRIGHT", 0, 0) + end + end + end) + + button:SetScript("OnEnter", function() + this:SetAlpha(1) + end) + + button:SetScript("OnLeave", function() + this:SetAlpha(.4) + end) + end + end + end) +end) \ No newline at end of file diff --git a/modules/whisperproxy.lua b/modules/whisperproxy.lua new file mode 100644 index 00000000..892fffa8 --- /dev/null +++ b/modules/whisperproxy.lua @@ -0,0 +1,75 @@ +pfUI:RegisterModule("whisperproxy", function () + if not pfUI.chat then return end + + local proxy = CreateFrame("Button", "pfWhisperProxy", pfUI.chat.left.panelTop) + proxy:SetPoint("TOPRIGHT", pfUI.chat.left, "TOPRIGHT", -22, -5) + proxy:SetWidth(12) + proxy:SetHeight(12) + proxy.tex = proxy:CreateTexture(nil, "OVERLAY") + proxy.tex:SetAllPoints() + proxy.tex:SetTexture("Interface\\AddOns\\pfUI\\img\\proxy") + proxy.tex:SetVertexColor(.5,.5,.5,1) + proxy:SetAlpha(0.4) + + proxy.enabled = false + proxy.forwardto = "" + + proxy:SetScript("OnEnter", function() + this:SetAlpha(1) + end) + + proxy:SetScript("OnLeave", function() + this:SetAlpha(.4) + end) + + local function ToggleProxy() + if proxy.enabled == true then + -- redirect inactive + proxy.enabled = false + proxy.tex:SetVertexColor(.5,.5,.5,1) + DEFAULT_CHAT_FRAME:AddMessage(T["Messages are no longer forwarded to:"] .. " |cff33ffcc" .. proxy.forwardto) + elseif proxy.forwardto ~= "" then + -- redirect active + proxy.enabled = true + proxy.tex:SetVertexColor(1,.8,0,1) + DEFAULT_CHAT_FRAME:AddMessage(T["All messages will be forwarded to:"] .. " |cff33ffcc" .. proxy.forwardto) + end + end + + proxy:RegisterForClicks("LeftButtonUp", "RightButtonUp") + proxy:SetScript("OnClick", function() + if proxy.forwardto == "" or arg1 == "RightButton" then + CreateQuestionDialog(T["Please enter a name of a character who should receive your whispers:"], + function() + pfUI.chat.whisperproxy.forwardto = this:GetParent().input:GetText() + ToggleProxy() + end, + function() + pfUI.chat.whisperproxy.forwardto = "" + end, true) + else + ToggleProxy() + end + end) + + proxy:RegisterEvent("CHAT_MSG_WHISPER") + proxy:SetScript("OnEvent", function() + local forwardto = proxy.forwardto + if proxy.enabled == false then return end + + if arg2 ~= UnitName("player") and arg2 ~= forwardto and forwardto ~= UnitName("player") then + SendChatMessage("[" .. arg2 .. "]: " .. arg1, "WHISPER", nil, forwardto) + end + + if arg2 == forwardto then + local isForward, _, name, message = string.find(arg1, "(.*): (.*)") + if isForward then + SendChatMessage(message, "WHISPER", nil, name) + SendChatMessage("-> " .. name, "WHISPER", nil, forwardto) + end + end + end) + + -- attach module to the pfUI tree + pfUI.chat.whisperproxy = proxy +end) \ No newline at end of file diff --git a/pfUI.toc b/pfUI.toc index 642877e2..4f4bac4a 100644 --- a/pfUI.toc +++ b/pfUI.toc @@ -65,6 +65,8 @@ modules\updatenotify.lua modules\actionbar.lua modules\hunterbar.lua modules\chat.lua +modules\whisperproxy.lua +modules\chatcopy.lua modules\bubbles.lua modules\addons.lua modules\minimap.lua