From 89e12e310a0c5a6f406ef83569b724ea89f04823 Mon Sep 17 00:00:00 2001 From: Xruptor Date: Fri, 11 Nov 2016 09:41:59 -0500 Subject: [PATCH] Updated Edit Box Chat History -Extended the Edit Box History feature. It will now store up to 40 previous history chat history lines. This persists with each login on a per character basis. This means if you logout and login again your history has been saved and loaded. You can access it immediately by using the UP and DOWN arrow keys. -You can now use the UP and DOWN arrow keys on the EditBox to go forward and back in the history without using the ALT key. -Updated the order in which the history is saved and processed. -Added a few error checks just in case the EditBox is not available on the first chat window. --- XanChat.lua | 121 +++++++++++++++++++++++++++++++++++++++++++++-------------- XanChat.toc | 4 +- 2 files changed, 95 insertions(+), 30 deletions(-) diff --git a/XanChat.lua b/XanChat.lua index e10e750..4784d41 100644 --- a/XanChat.lua +++ b/XanChat.lua @@ -198,6 +198,7 @@ ChatFrame_AddMessageEventFilter("CHAT_MSG_CHANNEL", urlFilter) local dummy = function(self) self:Hide() end local msgHooks = {} +local HistoryDB StaticPopupDialogs["XANCHAT_APPLYCHANGES"] = { text = "xanChat: Would you like to apply the changes now?", @@ -397,6 +398,46 @@ FCF_ToggleLock = function() end --[[------------------------ + Edit Box History +--------------------------]] + +local function OnArrowPressed(self, key) + if #self.historyLines == 0 then + return + end + if key == "DOWN" then + self.historyIndex = self.historyIndex - 1 + if self.historyIndex < 1 then + self.historyIndex = #self.historyLines + end + elseif key == "UP" then + self.historyIndex = self.historyIndex + 1 + if self.historyIndex > #self.historyLines then + self.historyIndex = 1 + end + else + return + end + self:SetText(self.historyLines[self.historyIndex]) +end + +local function AddEditBoxHistoryLine(editBox, line) + if not HistoryDB then return end + + if ( strlen(line) > 0 ) then + for i, text in pairs(HistoryDB) do + if text == line then + return + end + end + tinsert(HistoryDB, #HistoryDB + 1, line) + if #HistoryDB > 40 then --max number of lines we want 40 seems like a good number + tremove(HistoryDB, 1) + end + end +end + +--[[------------------------ PLAYER_LOGIN --------------------------]] @@ -411,6 +452,9 @@ end function eFrame:PLAYER_LOGIN() + local currentPlayer = UnitName("player") + local currentRealm = select(2, UnitFullName("player")) --get shortend realm name with no spaces and dashes + --do the DB stuff if not XCHT_DB then XCHT_DB = {} end if XCHT_DB.hideSocial == nil then XCHT_DB.hideSocial = false end @@ -420,6 +464,12 @@ function eFrame:PLAYER_LOGIN() if XCHT_DB.editBoxTop == nil then XCHT_DB.editBoxTop = false end if XCHT_DB.hideTabs == nil then XCHT_DB.hideTabs = false end + --setup the history DB + if not XCHT_HISTORY then XCHT_HISTORY = {} end + XCHT_HISTORY[currentRealm] = XCHT_HISTORY[currentRealm] or {} + XCHT_HISTORY[currentRealm][currentPlayer] = XCHT_HISTORY[currentRealm][currentPlayer] or {} + HistoryDB = XCHT_HISTORY[currentRealm][currentPlayer] + --turn off profanity filter SetCVar("profanityFilter", 0) @@ -467,37 +517,52 @@ function eFrame:PLAYER_LOGIN() f:SetClampRectInsets(0,0,0,0) local editBox = _G[n.."EditBox"] - - if not editBox.left then - editBox.left = _G[n.."EditBoxLeft"] - editBox.right = _G[n.."EditBoxRight"] - editBox.mid = _G[n.."EditBoxMid"] - end - --remove alt keypress from the EditBox (no longer need alt to move around) - editBox:SetAltArrowKeyMode(false) - - editBox.left:SetAlpha(0) - editBox.right:SetAlpha(0) - editBox.mid:SetAlpha(0) - - editBox.focusLeft:SetTexture([[Interface\ChatFrame\UI-ChatInputBorder-Left2]]) - editBox.focusRight:SetTexture([[Interface\ChatFrame\UI-ChatInputBorder-Right2]]) - editBox.focusMid:SetTexture([[Interface\ChatFrame\UI-ChatInputBorder-Mid2]]) + if editBox then - --do editbox positioning - if XCHT_DB.editBoxTop then - setEditBox(true) - else - setEditBox() + --do the editbox history stuff + --------------------------------- + editBox.historyLines = HistoryDB or {} + editBox.historyIndex = 0 + editBox:HookScript("OnArrowPressed", OnArrowPressed) + + hooksecurefunc(editBox, "AddHistoryLine", AddEditBoxHistoryLine) + + for i, text in pairs(HistoryDB) do + editBox:AddHistoryLine(text) + end + --------------------------------- + + if not editBox.left then + editBox.left = _G[n.."EditBoxLeft"] + editBox.right = _G[n.."EditBoxRight"] + editBox.mid = _G[n.."EditBoxMid"] + end + + --remove alt keypress from the EditBox (no longer need alt to move around) + editBox:SetAltArrowKeyMode(false) + + editBox.left:SetAlpha(0) + editBox.right:SetAlpha(0) + editBox.mid:SetAlpha(0) + + editBox.focusLeft:SetTexture([[Interface\ChatFrame\UI-ChatInputBorder-Left2]]) + editBox.focusRight:SetTexture([[Interface\ChatFrame\UI-ChatInputBorder-Right2]]) + editBox.focusMid:SetTexture([[Interface\ChatFrame\UI-ChatInputBorder-Mid2]]) + + --do editbox positioning + if XCHT_DB.editBoxTop then + setEditBox(true) + else + setEditBox() + end + + --when the editbox is on the top, complications occur because sometimes you are not allowed to click on the tabs. + --to fix this we'll just make the tab close the editbox + --also force the editbox to hide itself when it loses focus + _G[n.."Tab"]:HookScript("OnClick", function() editBox:Hide() end) + editBox:HookScript("OnEditFocusLost", function(self) self:Hide() end) end - - --when the editbox is on the top, complications occur because sometimes you are not allowed to click on the tabs. - --to fix this we'll just make the tab close the editbox - --also force the editbox to hide itself when it loses focus - _G[n.."Tab"]:HookScript("OnClick", function() editBox:Hide() end) - editBox:HookScript("OnEditFocusLost", function(self) self:Hide() end) - --hide the scroll bars if XCHT_DB.hideScroll then _G[n.."ButtonFrameUpButton"]:Hide() diff --git a/XanChat.toc b/XanChat.toc index f04ba4d..d2c373f 100644 --- a/XanChat.toc +++ b/XanChat.toc @@ -2,8 +2,8 @@ ## Title: xanChat ## Notes: A very minimalistic chat modification addon. ## Author: Xruptor -## Version: 4.3 +## Version: 4.4 ## OptionalDeps: tekDebug -## SavedVariables: XCHT_DB +## SavedVariables: XCHT_DB, XCHT_HISTORY xanChat.lua -- 1.7.9.5