Adds maven wrapper ; rework internal a bit ; Adds all tests for core

This commit is contained in:
Guillaume Tâche
2024-12-25 22:40:01 +01:00
parent 38056c43f7
commit 58fbbff7cb
99 changed files with 5028 additions and 1649 deletions

View File

@@ -1,5 +1,5 @@
/**
* XML parsing module for FXML compiler (not implemented yet)
* XML parsing module for FXML compiler
*/
module com.github.gtache.fxml.compiler.xml {
requires transitive com.github.gtache.fxml.compiler.core;

View File

@@ -19,6 +19,7 @@ import java.util.Map;
import java.util.SequencedMap;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
class TestDOMFXMLParser {
@@ -76,6 +77,7 @@ class TestDOMFXMLParser {
List.of(new ParsedObjectImpl(VBox.class.getName(), newLinkedHashMap("fx:id", new ParsedPropertyImpl("fx:id", null, "vbox")), newLinkedHashMap(), List.of()))
), List.of());
try (final var in = getClass().getResourceAsStream("loadView.fxml")) {
assertNotNull(in);
final var content = new String(in.readAllBytes(), StandardCharsets.UTF_8);
final var actual = parser.parse(content);
assertEquals(expected, actual);

View File

@@ -1,144 +0,0 @@
package com.github.gtache.fxml.compiler.parsing.xml;
import com.github.gtache.fxml.compiler.ControllerFieldInfo;
import com.github.gtache.fxml.compiler.GenerationException;
import com.github.gtache.fxml.compiler.GenerationRequest;
import com.github.gtache.fxml.compiler.Generator;
import com.github.gtache.fxml.compiler.compatibility.impl.GenerationCompatibilityImpl;
import com.github.gtache.fxml.compiler.impl.*;
import com.github.gtache.fxml.compiler.parsing.ParseException;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
class TestGeneratorImpl {
private static final Map<String, ControllerFieldInfo> FIELD_INFO_MAP;
static {
FIELD_INFO_MAP = new HashMap<>();
FIELD_INFO_MAP.put("button", new ControllerFieldInfoImpl("button", List.of()));
FIELD_INFO_MAP.put("checkBox", new ControllerFieldInfoImpl("checkBox", List.of()));
FIELD_INFO_MAP.put("colorPicker", new ControllerFieldInfoImpl("colorPicker", List.of()));
FIELD_INFO_MAP.put("color", new ControllerFieldInfoImpl("color", List.of()));
FIELD_INFO_MAP.put("comboBox", new ControllerFieldInfoImpl("comboBox", List.of()));
FIELD_INFO_MAP.put("listView", new ControllerFieldInfoImpl("listView", List.of("javafx.scene.control.Label")));
FIELD_INFO_MAP.put("spinner", new ControllerFieldInfoImpl("spinner", List.of("Double")));
FIELD_INFO_MAP.put("tableView", new ControllerFieldInfoImpl("tableView", List.of("javafx.scene.control.TextArea")));
FIELD_INFO_MAP.put("treeView", new ControllerFieldInfoImpl("treeView", List.of("String")));
FIELD_INFO_MAP.put("treeTableView", new ControllerFieldInfoImpl("treeTableView", List.of("javafx.scene.control.TreeItem<String>")));
FIELD_INFO_MAP.put("treeTableColumn1", new ControllerFieldInfoImpl("treeTableColumn1", List.of("javafx.scene.control.TreeItem<String>", "String")));
FIELD_INFO_MAP.put("treeTableColumn2", new ControllerFieldInfoImpl("treeTableColumn2", List.of("javafx.scene.control.TreeItem<String>", "Integer")));
FIELD_INFO_MAP.put("tableColumn1", new ControllerFieldInfoImpl("tableColumn1", List.of("javafx.scene.control.TextArea", "Float")));
FIELD_INFO_MAP.put("tableColumn2", new ControllerFieldInfoImpl("tableColumn2", List.of("javafx.scene.control.TextArea", "String")));
}
private final Generator generator;
TestGeneratorImpl() {
this.generator = new GeneratorImpl();
}
@ParameterizedTest
@MethodSource("providesGenerationTestCases")
void testGenerate(final String file, final ControllerInjectionTypes controller, final ControllerFieldInjectionTypes field, final ControllerMethodsInjectionType method, final ResourceBundleInjectionTypes bundle) throws Exception {
final var request = getRequest(file, controller, field, method, bundle);
final var path = Paths.get(getPath(file, controller, field, method, bundle));
try (final var in = getClass().getResourceAsStream("/com/github/gtache/fxml/compiler/parsing/xml/" + path)) {
assertNotNull(in);
final var expected = new String(in.readAllBytes(), StandardCharsets.UTF_8);
final var actual = generator.generate(request);
assertEquals(expected, actual);
} catch (final IOException | GenerationException e) {
throw new RuntimeException(e);
}
}
public static void main(final String[] args) throws GenerationException, IOException, ParseException {
final var generator = new GeneratorImpl();
final var files = List.of("Controls", "Includes");
for (final var file : files) {
for (final var controller : ControllerInjectionTypes.values()) {
for (final var field : ControllerFieldInjectionTypes.values()) {
for (final var method : ControllerMethodsInjectionType.values()) {
for (final var bundle : ResourceBundleInjectionTypes.values()) {
final var request = getRequest(file, controller, field, method, bundle);
final var content = generator.generate(request);
final var path = Paths.get(getPath(file, controller, field, method, bundle));
Files.writeString(path, content);
}
}
}
}
}
}
private static String getPath(final String file, final ControllerInjectionTypes controller, final ControllerFieldInjectionTypes field, final ControllerMethodsInjectionType method, final ResourceBundleInjectionTypes bundle) {
return "expected-" + file.toLowerCase() + "-" + controller.name().toLowerCase() + "-" + field.name().toLowerCase() + "-" + method.name().toLowerCase() + "-" + bundle.name().replace("_", "").toLowerCase() + ".txt";
}
private static GenerationRequest getRequest(final String file, final ControllerInjectionTypes controller, final ControllerFieldInjectionTypes field,
final ControllerMethodsInjectionType method, final ResourceBundleInjectionTypes resource) throws IOException, ParseException {
final var controllerClass = "com.github.gtache.fxml.compiler.parsing.xml." + file + "Controller";
final var controlsControllerInfo = new ControllerInfoImpl(controllerClass, Map.of("keyPressed", false, "mouseClicked", false),
FIELD_INFO_MAP, true);
final var includesControllerInfo = new ControllerInfoImpl(controllerClass, Map.of(), Map.of(), true);
final var controllerInfo = file.equals("Controls") ? controlsControllerInfo : includesControllerInfo;
final var resourceBundlePath = "com.github.gtache.fxml.compiler.parsing.xml." + file + "Bundle";
final var viewPath = "/com/github/gtache/fxml/compiler/parsing/xml/" + file.toLowerCase() + "View.fxml";
final var controlsSourceInfo = new SourceInfoImpl("com.github.gtache.fxml.compiler.parsing.xml.ControlsController",
controllerClass, Paths.get(viewPath), List.of(), Map.of(), true);
final var includesSourceInfo = new SourceInfoImpl("com.github.gtache.fxml.compiler.parsing.xml.IncludesController",
controllerClass, Paths.get(viewPath), List.of(controlsSourceInfo), Map.of("controlsView.fxml", controlsSourceInfo), true);
final var sourceInfo = file.equals("Controls") ? controlsSourceInfo : includesSourceInfo;
final var parser = new DOMFXMLParser();
try (final var in = TestGeneratorImpl.class.getResourceAsStream(viewPath)) {
assertNotNull(in);
final var content = new String(in.readAllBytes(), StandardCharsets.UTF_8);
final var root = parser.parse(content);
return new GenerationRequestImpl(
new GenerationParametersImpl(new GenerationCompatibilityImpl(21), false,
Map.of(controllerInfo.className(), resourceBundlePath),
controller,
field,
method,
resource
),
controllerInfo,
sourceInfo,
root,
"com.github.gtache.fxml.compiler.parsing.xml." + file + "View"
);
}
}
private static Stream<Arguments> providesGenerationTestCases() {
final var files = List.of("Controls", "Includes");
final var list = new ArrayList<Arguments>();
for (final var file : files) {
for (final var controller : ControllerInjectionTypes.values()) {
for (final var field : ControllerFieldInjectionTypes.values()) {
for (final var method : ControllerMethodsInjectionType.values()) {
for (final var bundle : ResourceBundleInjectionTypes.values()) {
list.add(Arguments.of(file, controller, field, method, bundle));
}
}
}
}
}
return list.stream();
}
}

View File

@@ -1,239 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.collections.FXCollections?>
<?import javafx.geometry.Insets?>
<?import javafx.geometry.Point3D?>
<?import javafx.scene.control.*?>
<?import javafx.scene.Cursor?>
<?import javafx.scene.effect.Bloom?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.media.MediaView?>
<?import javafx.scene.paint.Color?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.web.HTMLEditor?>
<?import javafx.scene.web.WebView?>
<?import java.lang.String?>
<GridPane fx:id="gridPane" onInputMethodTextChanged="#inputMethodTextChanged" onKeyPressed="#keyPressed"
onKeyReleased="#keyReleased"
onKeyTyped="#keyTyped" xmlns="http://javafx.com/javafx/22" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="com.github.gtache.fxml.compiler.parsing.xml.ControlsController">
<fx:define>
<FXCollections fx:id="list" fx:factory="observableArrayList">
<String>text1</String>
<String fx:value="text2"/>
<String value="text3"/>
</FXCollections>
<FXCollections fx:id="emptyMap" fx:factory="emptyObservableMap"/>
</fx:define>
<rowConstraints>
<RowConstraints/>
<RowConstraints/>
<RowConstraints/>
<RowConstraints/>
<RowConstraints/>
<RowConstraints/>
<RowConstraints/>
<RowConstraints/>
<RowConstraints/>
<RowConstraints/>
<RowConstraints/>
<RowConstraints/>
<RowConstraints/>
<RowConstraints/>
<RowConstraints/>
<RowConstraints/>
<RowConstraints/>
<RowConstraints/>
</rowConstraints>
<columnConstraints>
<ColumnConstraints/>
<ColumnConstraints/>
<ColumnConstraints minWidth="10.0" prefWidth="100.0"/>
</columnConstraints>
<children>
<fx:define>
<String fx:id="str">text</String>
</fx:define>
<Button fx:id="button">
<mnemonicParsing>false</mnemonicParsing>
Button
</Button>
<CheckBox fx:id="checkBox">
<indeterminate>true</indeterminate>
<mnemonicParsing>false</mnemonicParsing>
CheckBox
<GridPane.columnIndex>1</GridPane.columnIndex>
</CheckBox>
<ChoiceBox fx:id="choiceBox" cacheShape="false" centerShape="false" disable="true" focusTraversable="false"
prefWidth="150.0"
scaleShape="false" visible="false" GridPane.rowIndex="1" accessibleText="$str"/>
<ColorPicker fx:id="colorPicker" nodeOrientation="LEFT_TO_RIGHT" opacity="0.5" GridPane.columnIndex="1"
GridPane.rowIndex="1">
<value>
<Color fx:id="color" red="0.7894737124443054" green="0.08771929889917374" blue="0.08771929889917374"/>
</value>
<opaqueInsets>
<Insets bottom="3.0" left="2.0" right="4.0" top="5.0"/>
</opaqueInsets>
</ColorPicker>
<ComboBox fx:id="comboBox" editable="true" prefWidth="150.0" promptText="Text" visibleRowCount="5"
GridPane.rowIndex="2">
<cursor>
<Cursor fx:constant="CLOSED_HAND"/>
</cursor>
<effect>
<Bloom/>
</effect>
</ComboBox>
<DatePicker fx:id="datePicker" showWeekNumbers="true" style="-fx-background-color: #ffffff;"
GridPane.columnIndex="1"
GridPane.rowIndex="2"/>
<HTMLEditor fx:id="htmlEditor"
htmlText="&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body contenteditable=&quot;true&quot;&gt;&lt;/body&gt;&lt;/html&gt;"
prefHeight="200.0" prefWidth="506.0" styleClass="clazz" stylesheets="@style.css"
GridPane.rowIndex="3"/>
<Hyperlink fx:id="hyperlink" text="Hyperlink" GridPane.columnIndex="1" GridPane.rowIndex="3"/>
<ImageView fx:id="imageView" fitHeight="150.0" fitWidth="200.0" pickOnBounds="true" preserveRatio="true"
GridPane.rowIndex="4">
<Image url="https://github.com/gtache" backgroundLoading="true" fx:id="image" preserveRatio="true"
requestedWidth="200">
<smooth>true</smooth>
<requestedHeight>100</requestedHeight>
</Image>
</ImageView>
<ImageView>
<image>
<Image url="@image.png"/>
</image>
</ImageView>
<fx:define>
<Image fx:id="definedImage" url="/url"/>
</fx:define>
<ImageView>
<fx:reference source="definedImage"/>
</ImageView>
<Label fx:id="label" accessibleHelp="TTTTT" blendMode="ADD" cache="true"
cacheHint="QUALITY"
depthTest="ENABLE" mnemonicParsing="true" mouseTransparent="true" text="%include.label"
GridPane.columnIndex="1"
GridPane.rowIndex="4">
<accessibleText>
<fx:copy source="str"/>
</accessibleText>
</Label>
<ListView fx:id="listView" fixedCellSize="20.0" nodeOrientation="RIGHT_TO_LEFT" orientation="HORIZONTAL"
prefHeight="200.0"
prefWidth="200.0" GridPane.rowIndex="5"/>
<MediaView fx:id="mediaView" fitHeight="200.0" fitWidth="200.0" GridPane.columnIndex="1" GridPane.columnSpan="2"
GridPane.rowIndex="5" GridPane.rowSpan="2"/>
<MenuBar fx:id="menuBar" GridPane.halignment="RIGHT" GridPane.hgrow="ALWAYS" GridPane.rowIndex="7"
GridPane.valignment="BASELINE" GridPane.vgrow="SOMETIMES">
<Menu fx:id="menu1" mnemonicParsing="false">
<text>File</text>
<MenuItem fx:id="menuItem1" mnemonicParsing="false" text="Close"/>
<MenuItem fx:id="menuItem2" mnemonicParsing="false" text="Open"/>
</Menu>
<Menu mnemonicParsing="false" text="Edit">
<items>
<MenuItem mnemonicParsing="false" text="Delete"/>
</items>
</Menu>
<Menu mnemonicParsing="false" text="Help">
<items>
<MenuItem mnemonicParsing="false" text="About"/>
</items>
</Menu>
</MenuBar>
<MenuButton fx:id="menuButton" mnemonicParsing="false" text="MenuButton" GridPane.columnIndex="1"
GridPane.rowIndex="7">
<items>
<MenuItem mnemonicParsing="false" text="Action 1"/>
<MenuItem mnemonicParsing="false" text="Action 2"/>
</items>
<GridPane.margin>
<Insets bottom="3.0" left="2.0" right="4.0">
<top>5.0</top>
</Insets>
</GridPane.margin>
</MenuButton>
<Pagination fx:id="pagination" prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="8">
<padding>
<Insets bottom="3.0" left="2.0" right="4.0" top="5.0"/>
</padding>
</Pagination>
<PasswordField fx:id="passwordField" maxHeight="Infinity" maxWidth="5.0" minHeight="-Infinity" minWidth="1.0"
prefColumnCount="7"
prefHeight="4.0" prefWidth="3.0" GridPane.columnIndex="1" GridPane.rowIndex="8"/>
<ProgressBar fx:id="progressBar" layoutX="10.0" layoutY="20.0" prefWidth="200.0" progress="0.0"
GridPane.rowIndex="9"/>
<ProgressIndicator fx:id="progressIndicator" progress="0.0" rotate="2.0" GridPane.columnIndex="1"
GridPane.rowIndex="9">
<rotationAxis>
<Point3D x="4.0" y="5.0" z="6.0"/>
</rotationAxis>
</ProgressIndicator>
<RadioButton fx:id="radioButton" mnemonicParsing="false" scaleX="7.0" scaleY="2.0" scaleZ="3.0"
text="RadioButton" translateX="4.0"
translateY="5.0" translateZ="6.0" GridPane.rowIndex="10"/>
<ScrollBar fx:id="scrollBarH" GridPane.columnIndex="1" GridPane.rowIndex="10"/>
<ScrollBar fx:id="scrollBarV" orientation="VERTICAL" GridPane.rowIndex="11"/>
<Separator fx:id="separatorH" onDragDetected="#dragDetected" onDragDone="#dragDone" onDragDropped="#dragDropped"
onDragEntered="#dragEntered" onDragExited="#dragExited" onDragOver="#dragOver"
onMouseDragEntered="#mouseDragEntered" onMouseDragExited="#mouseDragExited"
onMouseDragOver="#mouseDragOver" onMouseDragReleased="#mouseDragReleased" prefWidth="200.0"
GridPane.columnIndex="1" GridPane.rowIndex="11"/>
<Separator fx:id="separatorV" orientation="VERTICAL" prefHeight="200.0" GridPane.rowIndex="12"/>
<Slider fx:id="sliderH" onContextMenuRequested="#contextMenuRequested" onMouseClicked="#mouseClicked"
onMouseDragged="#mouseDragged" onMouseEntered="#mouseEntered" onMouseExited="#mouseExited"
onMouseMoved="#mouseMoved" onMousePressed="#mousePressed" onMouseReleased="#mouseReleased"
onScroll="#onScroll" onScrollFinished="#onScrollFinished" onScrollStarted="#onScrollStarted"
GridPane.columnIndex="1" GridPane.rowIndex="12"/>
<Slider fx:id="sliderV" onZoom="#onZoom" onZoomFinished="#onZoomFinished" onZoomStarted="#onZoomStarted"
orientation="VERTICAL"
GridPane.rowIndex="13"/>
<Spinner fx:id="spinner" GridPane.columnIndex="1" GridPane.rowIndex="13"/>
<SplitMenuButton fx:id="splitMenuButton" mnemonicParsing="false" text="SplitMenuButton" GridPane.rowIndex="14">
<items>
<MenuItem fx:id="item1" mnemonicParsing="false" text="Action 1"/>
<MenuItem fx:id="item2" mnemonicParsing="false" text="Action 2"/>
</items>
</SplitMenuButton>
<TableView fx:id="tableView" prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1"
GridPane.rowIndex="14">
<columns>
<TableColumn fx:id="tableColumn1" prefWidth="75.0" text="C1"/>
<TableColumn fx:id="tableColumn2" prefWidth="75.0" text="C2"/>
</columns>
</TableView>
<TextArea fx:id="textArea" prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="15">
<font>
<Font fx:id="font" name="Arial" size="12.0"/>
</font>
</TextArea>
<TextField fx:id="textField" GridPane.columnIndex="1" GridPane.rowIndex="15"/>
<ToggleButton mnemonicParsing="false" onAction="#onAction" onRotate="#onRotate"
onRotationFinished="#onRotationFinished" onRotationStarted="#onRotationStarted"
text="ToggleButton" GridPane.rowIndex="16"/>
<TreeTableView fx:id="treeTableView" prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1"
GridPane.rowIndex="16">
<columns>
<TreeTableColumn fx:id="treeTableColumn1" onEditCancel="#onEditCancel" onEditCommit="#onEditCommit"
onEditStart="#onEditStart"
prefWidth="75.0" text="C1"/>
<TreeTableColumn fx:id="treeTableColumn2" prefWidth="75.0" sortType="DESCENDING" text="C2"/>
</columns>
</TreeTableView>
<TreeView fx:id="treeView" onSwipeDown="#onSwipeDown" onSwipeLeft="#onSwipeLeft" onSwipeRight="#onSwipeRight"
onSwipeUp="#onSwipeUp" prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="17"/>
<WebView fx:id="webView" onTouchMoved="#onTouchMoved" onTouchPressed="#onTouchPressed"
onTouchReleased="#onTouchReleased"
onTouchStationary="#onTouchStationary" prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1"
location="https://github.com/gtache" confirmHandler="$controller.confirmHandler"
createPopupHandler="#createPopupHandler"
onAlert="$controller.onAlert" onResized="#onResized"
GridPane.rowIndex="17"/>
</children>
</GridPane>

View File

@@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.HBox?>
<HBox xmlns="http://javafx.com/javafx/22" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="com.github.gtache.fxml.compiler.parsing.xml.IncludesController">
<fx:include source="include1.fxml"/>
<fx:include source="include2.fxml"/>
<fx:include source="include3.fxml"/>
<fx:include resources="com/github/gtache/fxml/compiler/parsing/xml/includes/IncludedBundle" source="include1.fxml"/>
</HBox>

View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.HBox?>
<HBox xmlns="http://javafx.com/javafx/22" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="com.github.gtache.fxml.compiler.parsing.xml.IncludesController">
<fx:include source="include21.fxml"/>
</HBox>

View File

@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.HBox?>
<HBox xmlns="http://javafx.com/javafx/22" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="com.github.gtache.fxml.compiler.parsing.xml.IncludesController">
<Label text="%text"/>
</HBox>

View File

@@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.HBox?>
<HBox xmlns="http://javafx.com/javafx/22" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="com.github.gtache.fxml.compiler.parsing.xml.IncludesController">
<fx:include source="include1.fxml"/>
<fx:include source="include2.fxml"/>
<fx:include source="include3.fxml"/>
<fx:include resources="com/github/gtache/fxml/compiler/parsing/xml/includes/IncludedBundle" source="include1.fxml"/>
</HBox>

View File

@@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.HBox?>
<HBox xmlns="http://javafx.com/javafx/22" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="com.github.gtache.fxml.compiler.parsing.xml.IncludesController">
<fx:include source="include1.fxml"/>
<fx:include source="include2.fxml"/>
<fx:include source="include3.fxml"/>
<fx:include resources="com/github/gtache/fxml/compiler/parsing/xml/includes/IncludedBundle" source="include1.fxml"/>
</HBox>

View File

@@ -1,141 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.*?>
<?import javafx.scene.Group?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.TextFlow?>
<BorderPane xmlns="http://javafx.com/javafx/22" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="com.github.gtache.fxml.compiler.parsing.xml.IncludesController">
<bottom>
<VBox BorderPane.alignment="CENTER">
<children>
<HBox alignment="CENTER" spacing="10.0">
<children>
<Slider fx:id="playSlider" HBox.hgrow="ALWAYS">
<padding>
<Insets left="10.0"/>
</padding>
</Slider>
<Label fx:id="playLabel" text="Label">
<padding>
<Insets right="10.0"/>
</padding>
</Label>
</children>
<padding>
<Insets top="10.0"/>
</padding>
</HBox>
<HBox alignment="CENTER" spacing="10.0">
<children>
<Button fx:id="playButton" mnemonicParsing="false" onAction="#playPressed">
<HBox.margin>
<Insets right="20.0"/>
</HBox.margin>
</Button>
<Label text="%media.volume.label"/>
<Slider fx:id="volumeSlider" value="100"/>
<Label fx:id="volumeValueLabel" text="Label"/>
<fx:include fx:id="controls" source="controlsView.fxml"
resources="com/github/gtache/fxml/compiler/parsing/xml/ControlsBundle"/>
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0"/>
</padding>
</HBox>
</children>
</VBox>
</bottom>
<center>
<VBox fx:id="vbox">
<children>
<ToolBar fx:id="toolBar">
<items>
<TitledPane fx:id="titledPane">
<content>
<TilePane fx:id="tilePane">
<children>
<TextFlow fx:id="textFlow">
<children>
<TabPane fx:id="tabPane">
<tabs>
<Tab fx:id="tab">
<content>
<StackPane fx:id="stackPane">
<children>
<SplitPane fx:id="splitPane">
<items>
<ScrollPane fx:id="scrollPane">
<content>
<Pane fx:id="pane">
<children>
<HBox fx:id="hbox">
<children>
<Group fx:id="group">
<children>
<GridPane
fx:id="gridPane">
<columnConstraints>
<ColumnConstraints
fx:id="columnConstraints"
hgrow="SOMETIMES"
minWidth="10.0"/>
</columnConstraints>
<rowConstraints>
<RowConstraints
minHeight="10.0"
vgrow="SOMETIMES"/>
</rowConstraints>
<children>
<FlowPane
fx:id="flowPane">
<children>
<DialogPane
fx:id="dialogPane">
<content>
<ButtonBar
fx:id="buttonBar">
<buttons>
<AnchorPane
fx:id="anchorPane">
<children>
<Label managed="false"/>
</children>
</AnchorPane>
</buttons>
</ButtonBar>
</content>
</DialogPane>
</children>
</FlowPane>
</children>
</GridPane>
</children>
</Group>
</children>
</HBox>
</children>
</Pane>
</content>
</ScrollPane>
</items>
</SplitPane>
</children>
</StackPane>
</content>
</Tab>
</tabs>
</TabPane>
</children>
</TextFlow>
</children>
</TilePane>
</content>
</TitledPane>
</items>
</ToolBar>
</children>
</VBox>
</center>
</BorderPane>

View File

@@ -1,3 +0,0 @@
.clazz {
-fx-font-weight: bold;
}