From 10d9d99be343c9ab0db75a3e98b6aade1b8386c4 Mon Sep 17 00:00:00 2001 From: NoM0Re Date: Wed, 4 Jun 2025 21:21:45 +0200 Subject: [PATCH] (feat/TextEditor): Rollout the WaybackMachine as Buttons, as we do not have the SetScript handler OnKeyDown/OnKeyUp (#50) --- WeakAuras/Media/Textures/undo-highlight.blp | Bin 0 -> 4244 bytes WeakAuras/Media/Textures/undo.blp | Bin 0 -> 4244 bytes WeakAurasOptions/OptionsFrames/TextEditor.lua | 73 ++++++++++++++---- 3 files changed, 56 insertions(+), 17 deletions(-) create mode 100644 WeakAuras/Media/Textures/undo-highlight.blp create mode 100644 WeakAuras/Media/Textures/undo.blp diff --git a/WeakAuras/Media/Textures/undo-highlight.blp b/WeakAuras/Media/Textures/undo-highlight.blp new file mode 100644 index 0000000000000000000000000000000000000000..e674650ee1d2d7cf45e5a39dfcf5175fdaf8e150 GIT binary patch literal 4244 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 D5-<(J literal 0 HcmV?d00001 diff --git a/WeakAuras/Media/Textures/undo.blp b/WeakAuras/Media/Textures/undo.blp new file mode 100644 index 0000000000000000000000000000000000000000..26a412e1133fd57d5b130174a3defd05e68284eb GIT binary patch literal 4244 zcmeHKQD|FL82;}~?{XUzG9)N6A?Uqxof}q}4?~p8){LeO7bJHpMKqu(TNIgsx(CG) zYvu$o9d4)(qsW%J6j2902*ScPTM7deHuYikVQcKHR@h4K@WJ!@{WnRQMqL&<#D`rH z!k2S$&iDQQ_y6Z))7HcT8WHJcP;>Ap@At0q#!&Moj4A*2ZvJb`i0`-XlBq>JH*jn5 zuq*Lvvppi$bt4Qsb*Ym^6mUc%rin?(`9)v@pZv!CL5X#S`@OT-Vv)bq1A=$)h;pg; zDL*voV;Oe`Fi!F8Mr!kapTs;_-`c8g$ocyv@J(xcmpgyP-|x_>n7@C-0G~^mPBadE zqLaD8XAQ4mz&dO)v+FL71Mg_S2;h?Of5JZyb|dQHg4%Q+mZZnBt4n%H_D>=lA)jB? zs_=6Wvex2*d>t|;^5HQRH4VeIq3^tv(%7#cH`t(WDK>eFhXTv+ zyTYC}ntb;pT;XzBVE$AEv&*0RSTlJu#zSXo@i2L>LU|rt#O9Lt_OQucNWAFLtWAN^ z2=bF~94ywV{`k=C6GLs~dC_kewf#DHOnt*VU&BEjSEER14V%D7ugfn8e~M14r^`g8 z-5|N*;jQ~Eo1O6R&OSFz-G09jbqUOG!?H}Z6h3PK;wCIm*$B&;y{!UnX^wo$yC6fs_9%|zKGgL! z)(>^q2WtC|tC$z6^T)I*C?)wJN8eD=qu^sY*Wia|q5qlqhnBdrUVlLyp49`IR@<+D z^(7NEJf?E+C%?{b%eS;<7yP}pIP(-EeVsqfSwDksB9+d9K=S@FaDS1?LVpjq6=+EccVa_LaKi!;Ki)ixfX5emixI zerx3OT%}*PP08>5`_)8VH;8PkZy@1+(_8JwIhFP>U;1CbN@efqLVc!Ey}ga=FBdoJ z<%8lvxgSi;uD`c9it|{P`&&QwCJ=p@Z@s2Favr&^L%;d@?rLxIv0E9xLKG7mk@6aIzUSas<>MeqA7h16NH~247 z(Ho|;hyJJs)-Upjc|5{{mdB!{fkD)?w&da^9p>OwI5sE{7yK zE7qmGk4{5wFH`Ta+Wo;vB$utXS-hA!@=qYXo6AvCGa~RC9wUFNrAnRXI}7)Pm^X-y zLrdZVd3E`VRs6b;&nljm1t}Wy_RA4DJBnLk(cpIqp`ztj$F;eJg>xF0XzQ?tO-EqM4l;I8VpqTV^tC+Cec>}LDl O7)P-1LbR^w|NLJ>WPL>d literal 0 HcmV?d00001 diff --git a/WeakAurasOptions/OptionsFrames/TextEditor.lua b/WeakAurasOptions/OptionsFrames/TextEditor.lua index df257e5..32e8a58 100644 --- a/WeakAurasOptions/OptionsFrames/TextEditor.lua +++ b/WeakAurasOptions/OptionsFrames/TextEditor.lua @@ -505,23 +505,24 @@ local function ConstructTextEditor(frame) editor.editBox.timeMachine = {} editor.editBox.timeMachinePos = 1 local TimeMachineMaximumRollback = 10 - --[[ Doesn't exist, we need a workaround for that - editor.editBox:HookScript( + + -- We do not have those events in the editbox, so we created buttons for undo/redo below... + --[[editor.editBox:HookScript( "OnKeyDown", function(self, key) -- CTRL + S saves and closes if IsControlKeyDown() and key == "S" then group:Close() - elseif IsControlKeyDown() and key == "Z" then - self.ignoreNextKeyPress = true + elseif key == "Z" and IsControlKeyDown() then + self:SetPropagateKeyboardInput(false) if self.timeMachine[self.timeMachinePos + 1] then self.timeMachinePos = self.timeMachinePos + 1 self.skipOnTextChanged = true originalSetText(self, self.timeMachine[self.timeMachinePos][1]) self:SetCursorPosition(self.timeMachine[self.timeMachinePos][2]) end - elseif IsControlKeyDown() and key == "Y" then - self.ignoreNextKeyPress = true + elseif key == "Y" and IsControlKeyDown() then + self:SetPropagateKeyboardInput(false) if self.timeMachine[self.timeMachinePos - 1] then self.timeMachinePos = self.timeMachinePos - 1 self.skipOnTextChanged = true @@ -530,17 +531,7 @@ local function ConstructTextEditor(frame) end end end - ) - - editor.editBox:HookScript( - "OnKeyUp", - function(self, key) - if self.ignoreNextKeyPress then - self.ignoreNextKeyPress = false -- Reset - end - end - ) - ]] + )]] editor.editBox:HookScript( "OnTextChanged", @@ -641,6 +632,54 @@ local function ConstructTextEditor(frame) editorLineText:SetText(L["Line"]) editorLineText:SetPoint("RIGHT", editorLine, "LEFT", -8, 0) + local redoButton = CreateFrame("Button", nil, editorLine) + redoButton:SetPoint("RIGHT", editorLineText, "LEFT", -10, 0) + redoButton:SetSize(20, 20) + redoButton:SetNormalTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\undo") + local redoNormal = redoButton:GetNormalTexture() + redoNormal:SetAllPoints() + redoNormal:SetTexCoord(1, 0, 0, 1) + redoNormal:SetBlendMode("BLEND") + redoButton:SetHighlightTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\undo-highlight") + local redoHighlight = redoButton:GetHighlightTexture() + redoHighlight:SetAllPoints() + redoHighlight:SetTexCoord(1, 0, 0, 1) + redoHighlight:SetBlendMode("BLEND") + + local undoButton = CreateFrame("Button", nil, redoButton) + undoButton:SetPoint("RIGHT", redoButton, "LEFT", -10, 0) + undoButton:SetSize(20, 20) + undoButton:SetNormalTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\undo") + local undoNormal = undoButton:GetNormalTexture() + undoNormal:SetAllPoints() + undoNormal:SetTexCoord(0, 1, 0, 1) + undoNormal:SetBlendMode("BLEND") + undoButton:SetHighlightTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\undo-highlight") + local undoHighlight = undoButton:GetHighlightTexture() + undoHighlight:SetAllPoints() + undoHighlight:SetTexCoord(0, 1, 0, 1) + undoHighlight:SetBlendMode("BLEND") + + redoButton:SetScript("OnClick", function() + local self = editor.editBox + if self.timeMachine[self.timeMachinePos - 1] then + self.timeMachinePos = self.timeMachinePos - 1 + self.skipOnTextChanged = true + originalSetText(self, self.timeMachine[self.timeMachinePos][1]) + self:SetCursorPosition(self.timeMachine[self.timeMachinePos][2]) + end + end) + + undoButton:SetScript("OnClick", function() + local self = editor.editBox + if self.timeMachine[self.timeMachinePos + 1] then + self.timeMachinePos = self.timeMachinePos + 1 + self.skipOnTextChanged = true + originalSetText(self, self.timeMachine[self.timeMachinePos][1]) + self:SetCursorPosition(self.timeMachine[self.timeMachinePos][2]) + end + end) + helpButton:SetScript("OnClick", function() OptionsPrivate.ToggleTip(helpButton, group.url, L["Help"], "") end)