From 0124ad4fd4553f0f5258834bf7406f65b94f48dc Mon Sep 17 00:00:00 2001 From: bigguy345 Date: Sat, 20 Dec 2025 20:30:04 +0200 Subject: [PATCH] Opening search bar now sets highlighted word as currentMatch --- .../client/gui/util/GuiScriptTextArea.java | 10 +++++ .../gui/util/script/SearchReplaceBar.java | 39 ++++++++++++++++++- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/main/java/noppes/npcs/client/gui/util/GuiScriptTextArea.java b/src/main/java/noppes/npcs/client/gui/util/GuiScriptTextArea.java index b4280fecb..54b8c3de2 100644 --- a/src/main/java/noppes/npcs/client/gui/util/GuiScriptTextArea.java +++ b/src/main/java/noppes/npcs/client/gui/util/GuiScriptTextArea.java @@ -94,6 +94,16 @@ public class GuiScriptTextArea extends GuiNpcTextField { return GuiScriptTextArea.this.highlightedWord; } + @Override + public int getSelectionStart() { + return GuiScriptTextArea.this.selection.getStartSelection(); + } + + @Override + public int getSelectionEnd() { + return GuiScriptTextArea.this.selection.getEndSelection(); + } + @Override public void setText(String newText) { GuiScriptTextArea.this.setText(newText); diff --git a/src/main/java/noppes/npcs/client/gui/util/script/SearchReplaceBar.java b/src/main/java/noppes/npcs/client/gui/util/script/SearchReplaceBar.java index 43a87b12f..24de5f316 100644 --- a/src/main/java/noppes/npcs/client/gui/util/script/SearchReplaceBar.java +++ b/src/main/java/noppes/npcs/client/gui/util/script/SearchReplaceBar.java @@ -110,6 +110,11 @@ public class SearchReplaceBar { String getText(); String getHighlightedWord(); + + // Return current selection bounds in the main editor (start inclusive, end exclusive) + int getSelectionStart(); + + int getSelectionEnd(); void setText(String text); void scrollToPosition(int position); void setSelection(int start, int end); @@ -147,19 +152,28 @@ public class SearchReplaceBar { showReplace = false; searchFieldFocused = true; replaceFieldFocused = false; + boolean matchHighlight = false; if (callback != null) { if (!oldVisible) //if wasnt open before, do it once. callback.resizeEditor(true); callback.unfocusMainEditor(); + String highlight = callback.getHighlightedWord(); - if (highlight != null) + if (highlight != null) { searchText = highlight; + matchHighlight = true; + } } searchSelectionStart = 0; searchSelectionEnd = searchText.length(); searchCursor = searchText.length(); markActivity(); updateMatches(); + if (matchHighlight) { + setCurrentMatchToHighlight(); + navigateToCurrentMatch(); + } + } /** @@ -1205,6 +1219,29 @@ public class SearchReplaceBar { currentMatchIndex = ValueUtil.clamp(currentMatchIndex, 0, matches.size() - 1); callback.onMatchesUpdated(); } + + /** + * If the editor currently has a selection, prefer the match that contains that selection + * and navigate to it. + */ + private void setCurrentMatchToHighlight() { + if (callback == null || matches.isEmpty()) + return; + try { + int selStart = callback.getSelectionStart(); + int selEnd = callback.getSelectionEnd(); + if (selStart >= 0 && selEnd > selStart) { + for (int i = 0; i < matches.size(); i++) { + int[] m = matches.get(i); + if (m[0] <= selStart && m[1] >= selEnd) { + currentMatchIndex = i; + return; + } + } + } + } catch (Exception ignored) { + } + } /** * Navigate to next match