app.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.CheckMenuItem?>
<?import javafx.scene.control.ColorPicker?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.Pagination?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.SeparatorMenuItem?>
<?import javafx.scene.control.SplitPane?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.input.KeyCodeCombination?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.paint.Color?>
<?import javafx.scene.text.Font?>

<VBox fx:id="view" prefHeight="600.0" prefWidth="1360.0" stylesheets="@app.css" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="engineer.mathsoftware.blog.slides.ui.AppController">
    <children>
        <MenuBar VBox.vgrow="NEVER">
            <menus>
                <Menu mnemonicParsing="false" text="File">
                    <items>
                        <MenuItem mnemonicParsing="false" onAction="#onAddMenuItemAction" text="Add" />
                  <CheckMenuItem fx:id="autoSaveCheckMenuItem" mnemonicParsing="false" selected="true" text="AutoSave (experimental)" />
                  <MenuItem mnemonicParsing="false" onAction="#onSaveCurrentSlideItemAction" text="Save Current Slide">
                     <accelerator>
                        <KeyCodeCombination alt="UP" code="S" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
                     </accelerator>
                  </MenuItem>
                        <MenuItem mnemonicParsing="false" onAction="#onOpenWDMenuItemAction" text="Open Working Directory">
                     <accelerator>
                        <KeyCodeCombination alt="UP" code="E" control="DOWN" meta="UP" shift="DOWN" shortcut="UP" />
                     </accelerator></MenuItem>
                  <MenuItem mnemonicParsing="false" onAction="#onOpenPDMenuItemAction" text="Open Presentation Directory">
                     <accelerator>
                        <KeyCodeCombination alt="DOWN" code="E" control="DOWN" meta="UP" shift="DOWN" shortcut="UP" />
                     </accelerator>
                  </MenuItem>
                        <SeparatorMenuItem mnemonicParsing="false" />
                        <MenuItem mnemonicParsing="false" onAction="#onClearMenuItemAction" text="Clear" />
                        <SeparatorMenuItem mnemonicParsing="false" />
                        <MenuItem mnemonicParsing="false" onAction="#onQuitMenuItemAction" text="Quit" />
                    </items>
                </Menu>
                <Menu mnemonicParsing="false" text="Help">
                    <items>
                        <MenuItem mnemonicParsing="false" onAction="#onAboutMenuItemAction" text="About Slides EP" />
                    </items>
                </Menu>
            </menus>
        </MenuBar>
        <SplitPane dividerPositions="0.3, 0.8" focusTraversable="true" prefHeight="-1.0" prefWidth="-1.0" VBox.vgrow="ALWAYS">
            <items>
                <VBox spacing="16.0">
                    <children>
                        <VBox alignment="CENTER">
                            <children>
                                <Label alignment="CENTER" minWidth="60.0" style="&#10;" text="Screenshots" textAlignment="CENTER" wrapText="false">
                                    <font>
                                        <Font size="18.0" fx:id="x1" />
                                    </font>
                                    <textFill>
                                        <Color red="0.624" green="0.624" blue="0.624" fx:id="x2" />
                                    </textFill>
                                </Label>
                                <HBox alignment="CENTER_LEFT" prefHeight="36.0" prefWidth="190.0" spacing="16.0">
                                    <children>
                                        <Button fx:id="addButton" mnemonicParsing="false" onAction="#onAddButtonAction" text="ADD" />
                              <Button fx:id="newButton" mnemonicParsing="false" onAction="#onNewButtonAction" text="NEW" />
                                        <HBox alignment="CENTER_RIGHT" HBox.hgrow="ALWAYS">
                                            <children>
                                                <Button mnemonicParsing="false" onAction="#onClearButtonAction" text="CLEAR" textFill="#b00020" />
                                            </children>
                                        </HBox>
                                    </children>
                                </HBox>
                            </children>
                        </VBox>
                        <ListView fx:id="imageList" onDragDropped="#onDragDropped" onDragExited="#onDragExited" onDragOver="#onDragOver" prefHeight="200.0" prefWidth="200.0" VBox.vgrow="ALWAYS" />
                    </children>
                    <padding>
                        <Insets bottom="16.0" left="16.0" right="16.0" top="16.0" />
                    </padding>
                </VBox>
                <VBox fx:id="viewPaneBox" alignment="TOP_CENTER" prefHeight="200.0" prefWidth="100.0">
                    <children>
                        <Label alignment="CENTER" font="$x1" style="&#10;" text="Slides" textAlignment="CENTER" textFill="$x2" wrapText="false" />

                        <ScrollPane fx:id="scrollPane" fitToHeight="true" fitToWidth="true" pannable="true" prefHeight="-1.0" prefWidth="-1.0" VBox.vgrow="ALWAYS">
                            <VBox.margin>
                                <Insets top="16.0" />
                            </VBox.margin>
                            <HBox fx:id="slideBox" alignment="CENTER">
                        <opaqueInsets>
                           <Insets />
                        </opaqueInsets></HBox>
                        </ScrollPane>
                        <Pagination fx:id="pagination" />
                    </children>
                    <padding>
                        <Insets bottom="16.0" top="16.0" />
                    </padding>
                </VBox>
                <AnchorPane>
                    <children>
                        <Label alignment="CENTER" font="$x1" layoutX="14.0" layoutY="14.0" style="&#10;" text="Details" textAlignment="CENTER" textFill="$x2" wrapText="false" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" />
                  <ScrollPane fitToWidth="true" layoutX="16.0" layoutY="56.0" AnchorPane.bottomAnchor="16.0" AnchorPane.leftAnchor="16.0" AnchorPane.rightAnchor="16.0" AnchorPane.topAnchor="56.0">
                     <content>
                        <VBox alignment="TOP_CENTER" spacing="8.0">
                           <children>
                              <Label styleClass="title" text="Slide" />
                              <ComboBox fx:id="slideComboBox" prefWidth="150.0" promptText="Slide" />
                              <ComboBox fx:id="languageComboBox" prefWidth="150.0" promptText="Language" />
                              <Label styleClass="title" text="Config" />
                              <ComboBox fx:id="sizeComboBox" prefWidth="150.0" />
                              <TextField fx:id="saveField" editable="false" />
                              <VBox fx:id="screenshotBox" alignment="TOP_CENTER" spacing="8.0">
                                 <children>
                                    <Label styleClass="title" text="Background" />
                                    <ColorPicker fx:id="backgroundPicker" />
                                 </children>
                              </VBox>
                              <VBox fx:id="codeSnippetBox" alignment="TOP_CENTER" spacing="8.0">
                                 <children>
                                    <Label styleClass="title" text="Code" />
                                    <TextArea fx:id="codeTextArea" VBox.vgrow="ALWAYS" />
                                 </children>
                              </VBox>
                              <Label styleClass="title" text="Caption" />
                              <CheckBox fx:id="captionCheckBox" mnemonicParsing="false" text="Caption" />
                              <VBox fx:id="captionBox" spacing="16.0">
                                 <children>
                                    <TextArea fx:id="captionTitleArea" prefHeight="64.0" promptText="Title" />
                                    <TextArea fx:id="captionSubTitleArea" prefHeight="64.0" promptText="SubTitle/Description" />
                                 </children>
                              </VBox>
                              <Label styleClass="title" text="Shapes" />
                              <HBox alignment="CENTER_LEFT" spacing="16.0">
                                 <children>
                                    <ComboBox fx:id="shapeComboBox" />
                                    <HBox alignment="CENTER_RIGHT" HBox.hgrow="ALWAYS">
                                       <children>
                                          <Button fx:id="shapeBackButton" mnemonicParsing="false" />
                                       </children>
                                    </HBox>
                                 </children>
                              </HBox>
                              <ComboBox fx:id="shapePaletteComboBox" prefWidth="150.0" />
                              <Label styleClass="title" text="AI" />
                              <Label styleClass="opaque-text" text="Hold F1 for OCR detection." wrapText="true" />
                           </children>
                        </VBox>
                     </content>
                     <padding>
                        <Insets bottom="16.0" left="16.0" right="16.0" />
                     </padding>
                  </ScrollPane>
                    </children>
                </AnchorPane>
            </items>
        </SplitPane>
        <HBox id="HBox" alignment="CENTER_LEFT" spacing="5.0" VBox.vgrow="NEVER">
            <children>
                <HBox prefWidth="200.0">
                    <children>
                        <Label fx:id="statusLabel" maxHeight="1.7976931348623157E308" maxWidth="-1.0" text="Slides App">
                            <font>
                                <Font size="11.0" fx:id="x3" />
                            </font>
                            <textFill>
                                <Color red="0.625" green="0.625" blue="0.625" fx:id="x4" />
                            </textFill>
                        </Label>
                    </children>
                </HBox>
                <HBox alignment="CENTER" prefWidth="200.0" HBox.hgrow="ALWAYS">
                    <children>
                        <Label text="Build a presentation from screenshots and source code" />
                    </children>
                </HBox>
                <HBox alignment="TOP_RIGHT" prefWidth="200.0">
               <children>
                  <Label fx:id="secondaryStatusLabel" maxHeight="1.7976931348623157E308" maxWidth="-1.0">
                     <font>
                        <Font size="11.0" fx:id="x31" />
                     </font>
                     <textFill>
                        <Color red="0.625" green="0.625" blue="0.625" fx:id="x41" />
                     </textFill>
                  </Label>
               </children></HBox>
            </children>
            <padding>
                <Insets bottom="4.0" left="16.0" right="16.0" top="4.0" />
            </padding>
        </HBox>
    </children>
</VBox>