From 7fb54715b82768d5a3f7c4652e3be25bcba78f8a Mon Sep 17 00:00:00 2001 From: Julien Cochuyt Date: Wed, 26 Mar 2025 14:57:17 +0100 Subject: [PATCH] =?UTF-8?q?Quick=20navigation=20within=20the=20multiple=20?= =?UTF-8?q?results=20of=20rules=C2=A0(#47)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `control+shift+pageUp/pageDown` moves to the previous/next result of the last rule moved to by a dedicated gesture or using the other `pageUp/pageDown` quick nav gestures. Does not cycle, respects zones, does not honour "skip". --- addon/globalPlugins/webAccess/overlay.py | 24 ++++++++++++ .../webAccess/ruleHandler/__init__.py | 39 ++++++++++++++++++- 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/addon/globalPlugins/webAccess/overlay.py b/addon/globalPlugins/webAccess/overlay.py index 77fd0423..8d18e581 100644 --- a/addon/globalPlugins/webAccess/overlay.py +++ b/addon/globalPlugins/webAccess/overlay.py @@ -1104,6 +1104,30 @@ def script_quickNavToPreviousResultLevel3(self, gesture): script_quickNavToPreviousResultLevel3.ignoreTreeInterceptorPassThrough = True script_quickNavToPreviousResultLevel3.passThroughIfNoWebModule = True + @script( + # Translators: The description for the quickNavToNextResultSameRule script + description=_("Move to next result of the same rule."), + category=SCRCAT_WEBACCESS, + gesture="kb:control+shift+pagedown" + ) + def script_quickNavToNextResultSameRule(self, gesture): + self.webAccess.ruleManager.quickNavToNextSame() + + + script_quickNavToNextResultSameRule.ignoreTreeInterceptorPassThrough = True + script_quickNavToNextResultSameRule.passThroughIfNoWebModule = True + + @script( + # Translators: The description for the quickNavToPreviousResultSameRule script + description=_("Move to previous result of the same rule."), + category=SCRCAT_WEBACCESS, + gesture="kb:control+shift+pageup" + ) + def script_quickNavToPreviousResultSameRule(self, gesture): + self.webAccess.ruleManager.quickNavToPreviousSame() + + script_quickNavToPreviousResultSameRule.ignoreTreeInterceptorPassThrough = True + script_quickNavToPreviousResultSameRule.passThroughIfNoWebModule = True @script( # Translators: The description for the refreshResults script diff --git a/addon/globalPlugins/webAccess/ruleHandler/__init__.py b/addon/globalPlugins/webAccess/ruleHandler/__init__.py index 577b8b89..97e8be90 100644 --- a/addon/globalPlugins/webAccess/ruleHandler/__init__.py +++ b/addon/globalPlugins/webAccess/ruleHandler/__init__.py @@ -138,6 +138,7 @@ def __init__(self, webModule): self.triggeredIdentifiers = {} self.lastAutoMoveto = None self.lastAutoMovetoTime = 0 + self.lastMoveto = None self.defaultScripts = DefaultScripts("Aucun marqueur associé à cette touche") self.timerCheckAutoAction = None self._zone: Zone = None @@ -828,7 +829,17 @@ def quickNav( # Translator: Error message in quickNav (page up/down) ui.message(_("No zone")) return False - if cycle: + if name: + if cycle: + # Translator: Error message in quickNav (page up/down) + msg = _("No other result") + elif previous: + # Translator: Error message in quickNav (page up/down) + msg = _("No previous result") + else: + # Translator: Error message in quickNav (page up/down) + msg = _("No next result") + elif cycle: # Translator: Error message in quickNav (page up/down) msg = _("No marker") elif previous: @@ -878,6 +889,30 @@ def quickNavToPreviousLevel3(self): cycle=False ) + def quickNavToNextSame(self): + name = self.lastMoveto + if not name: + wx.Bell() + return + self.quickNav( + name=name, + respectZone=True, + honourSkip=False, + cycle=False + ) + + def quickNavToPreviousSame(self): + name = self.lastMoveto + if not name: + wx.Bell() + return + self.quickNav( + previous=True, + name=name, + respectZone=True, + honourSkip=False, + cycle=False + ) class SubModules(AutoPropertyObject): @@ -1293,6 +1328,8 @@ def mouseMove(self): mouseHandler.executeMouseMoveEvent(x, y) def moveto(self): + rule = self.rule + rule.ruleManager.lastMoveto = rule.name info = self.getTextInfo() info.collapse() self.ti.selection = info