diff --git a/sierra-tools/previewer/build.gradle b/sierra-tools/previewer/build.gradle index 00efef57..0f0236f7 100644 --- a/sierra-tools/previewer/build.gradle +++ b/sierra-tools/previewer/build.gradle @@ -22,6 +22,7 @@ dependencies { implementation "com.formdev:flatlaf-extras:${flatLafVersion}" implementation 'com.fifesoft:rsyntaxtextarea:3.6.0' implementation 'com.fifesoft:autocomplete:3.3.2' + implementation 'com.fifesoft:rstaui:3.3.1' testImplementation "org.junit.jupiter:junit-jupiter:${junitVersion}" testImplementation 'org.mockito:mockito-core:5.20.0' diff --git a/sierra-tools/previewer/src/main/java/org/httprpc/sierra/tools/previewer/MainFrame.java b/sierra-tools/previewer/src/main/java/org/httprpc/sierra/tools/previewer/MainFrame.java index 33f8dd83..7dc79ba7 100644 --- a/sierra-tools/previewer/src/main/java/org/httprpc/sierra/tools/previewer/MainFrame.java +++ b/sierra-tools/previewer/src/main/java/org/httprpc/sierra/tools/previewer/MainFrame.java @@ -13,16 +13,16 @@ */ package org.httprpc.sierra.tools.previewer; -import org.fife.ui.autocomplete.AutoCompletion; -import org.fife.ui.autocomplete.CompletionProvider; -import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; -import org.fife.ui.rsyntaxtextarea.SyntaxConstants; -import org.httprpc.sierra.Outlet; -import org.httprpc.sierra.UILoader; -import org.httprpc.sierra.tools.previewer.engine.RenderingEngine; -import org.httprpc.sierra.tools.previewer.model.RenderError; -import org.httprpc.sierra.tools.previewer.model.RenderResult; - +import java.awt.BorderLayout; +import java.awt.Toolkit; +import java.awt.event.KeyEvent; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardOpenOption; +import java.util.concurrent.ExecutionException; +import java.util.function.Consumer; import javax.swing.ImageIcon; import javax.swing.JFileChooser; import javax.swing.JFrame; @@ -34,26 +34,36 @@ import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; +import javax.swing.KeyStroke; import javax.swing.SwingWorker; import javax.swing.Timer; +import javax.swing.UIManager; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.filechooser.FileNameExtensionFilter; -import java.awt.BorderLayout; -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.StandardOpenOption; -import java.util.concurrent.ExecutionException; -import java.util.function.Consumer; +import org.fife.rsta.ui.search.FindDialog; +import org.fife.rsta.ui.search.ReplaceDialog; +import org.fife.rsta.ui.search.SearchEvent; +import org.fife.rsta.ui.search.SearchListener; +import org.fife.ui.autocomplete.AutoCompletion; +import org.fife.ui.autocomplete.CompletionProvider; +import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; +import org.fife.ui.rsyntaxtextarea.SyntaxConstants; +import org.fife.ui.rtextarea.SearchContext; +import org.fife.ui.rtextarea.SearchEngine; +import org.fife.ui.rtextarea.SearchResult; +import org.httprpc.sierra.Outlet; +import org.httprpc.sierra.UILoader; +import org.httprpc.sierra.tools.previewer.engine.RenderingEngine; +import org.httprpc.sierra.tools.previewer.model.RenderError; +import org.httprpc.sierra.tools.previewer.model.RenderResult; /** * The main application window for the Sierra UI Previewer. UI is defined in * MainFrame.xml and loaded by UILoader. This class contains the wiring and * business logic. */ -public class MainFrame extends JFrame { +public class MainFrame extends JFrame implements SearchListener { // --- Subsystems --- private final RenderingEngine renderingEngine; private final RecentFilesManager recentFilesManager; // NEW: Manager instance @@ -69,6 +79,9 @@ public class MainFrame extends JFrame { private @Outlet JMenuBar menuBar = null; private @Outlet JMenuItem openItem = null; private @Outlet JMenuItem saveItem = null; + private @Outlet JMenu searchMenu = null; + private @Outlet JMenuItem findItem = null; + private @Outlet JMenuItem replaceItem = null; private @Outlet JMenu recentMenu = null; private @Outlet JMenuItem exitItem = null; private @Outlet JMenuItem aboutItem = null; @@ -79,6 +92,8 @@ public class MainFrame extends JFrame { private @Outlet JLabel filePathLabel = null; // The