diff --git a/sierra-previewer/build.gradle b/sierra-previewer/build.gradle index 66b3321..3c813e0 100644 --- a/sierra-previewer/build.gradle +++ b/sierra-previewer/build.gradle @@ -13,6 +13,7 @@ */ plugins { + id 'java' id 'application' } @@ -24,6 +25,14 @@ dependencies { implementation 'com.fifesoft:rsyntaxtextarea:3.6.0' implementation 'com.fifesoft:autocomplete:3.3.2' + + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.1' + testImplementation 'org.junit.jupiter:junit-jupiter-params:5.10.1' + testImplementation 'org.mockito:mockito-core:5.9.0' + testImplementation 'org.mockito:mockito-junit-jupiter:5.9.0' + + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.10.1' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } tasks.withType(JavaCompile) { @@ -31,3 +40,11 @@ tasks.withType(JavaCompile) { '-parameters' ] } + +tasks.named('test', Test) { + useJUnitPlatform() +} + +application { + mainClass = 'org.httprpc.sierra.previewer.SierraPreviewerApp' +} diff --git a/sierra-previewer/gradle.properties b/sierra-previewer/gradle.properties new file mode 100644 index 0000000..9569323 --- /dev/null +++ b/sierra-previewer/gradle.properties @@ -0,0 +1,2 @@ +action.custom-1=run +action.custom-1.args=-w run diff --git a/sierra-previewer/src/main/java/org/httprpc/sierra/previewer/MainFrame.java b/sierra-previewer/src/main/java/org/httprpc/sierra/previewer/MainFrame.java index bc4ca31..806d606 100644 --- a/sierra-previewer/src/main/java/org/httprpc/sierra/previewer/MainFrame.java +++ b/sierra-previewer/src/main/java/org/httprpc/sierra/previewer/MainFrame.java @@ -11,9 +11,519 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.httprpc.sierra.previewer; -public class MainFrame { - // TODO +import org.httprpc.sierra.previewer.engine.RenderingEngine; +import org.httprpc.sierra.previewer.model.RenderError; +import org.httprpc.sierra.previewer.model.RenderResult; +import java.awt.*; +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardOpenOption; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.function.Consumer; +import javax.swing.*; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.filechooser.FileNameExtensionFilter; + +import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; +import org.fife.ui.rsyntaxtextarea.SyntaxConstants; + +import org.fife.ui.autocomplete.AutoCompletion; +import org.fife.ui.autocomplete.CompletionProvider; + +import org.httprpc.sierra.UILoader; +import org.httprpc.sierra.Outlet; + +/** + * 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 { + + // --- Subsystems --- + private final RenderingEngine renderingEngine; + private final Timer debounceTimer; + private final RecentFilesManager recentFilesManager; // NEW: Manager instance + + // --- File Handling State --- + private final JFileChooser fileChooser; + private Path currentFilePath = null; + // --- UI Components (Injected by Sierra) --- + // Stores the path of the currently loaded file + + @Outlet + private JMenuBar menuBar; + + @Outlet + private JMenuItem openItem; + + @Outlet + private JMenuItem saveItem; + + @Outlet + private JMenu recentMenu; + + @Outlet + private JMenuItem exitItem; + + @Outlet + private JMenuItem aboutItem; + + @Outlet + private JScrollPane editorScrollPane; // The placeholder + + @Outlet + private JPanel previewPanel; // The + + @Outlet + private JLabel statusBar; + + @Outlet + private JLabel filePathLabel; // The