Commit 81be0b1d authored by Riegel's avatar Riegel
Browse files

Merge branch 'dev_GUI' into 'dev'

Open source release of CityDoctorGUI and other extensions.

See merge request !6
parents 12d96d95 5a4d0a74
Pipeline #10056 passed with stage
in 1 minute and 6 seconds
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.gui.CheckStatus;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
public class PolygonNode extends Renderable {
private final Polygon p;
private String text;
public PolygonNode(Polygon p, CheckStatus cs) {
this.p = p;
setStatus(cs);
}
@Override
public void refreshTextColor() {
if (!p.isValidated()) {
setStatus(CheckStatus.NOT_CHECKED);
} else if (p.containsAnyError()) {
setStatus(CheckStatus.ERROR);
} else {
setStatus(CheckStatus.OK);
}
}
@Override
public String getText() {
if (text == null) {
text = "Polygon " + p.getGmlId().getGmlString();
}
return text;
}
@Override
public void visit(Renderer renderer) {
renderer.highlight(p);
}
}
/*-
* Copyright 2022 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart
*
* This file is part of CityDoctor2.
*
* CityDoctor2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* CityDoctor2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with CityDoctor2. If not, see <https://www.gnu.org/licenses/>.
*/
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.datastructure.ReliefObject;
import de.hft.stuttgart.citydoctor2.gui.CheckStatus;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
public class ReliefNode extends Renderable {
private final ReliefObject relief;
public ReliefNode(ReliefObject relief) {
this.relief = relief;
}
@Override
public void refreshTextColor() {
if (!relief.isValidated()) {
setStatus(CheckStatus.NOT_CHECKED);
} else if (relief.containsAnyError()) {
setStatus(CheckStatus.ERROR);
} else {
setStatus(CheckStatus.OK);
}
}
@Override
public String getText() {
return "[ReliefFeature] " + relief.getGmlId().getGmlString();
}
@Override
public void visit(Renderer renderer) {
renderer.render(relief);
}
}
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.gui.CheckStatus;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
public abstract class Renderable {
private final ObjectProperty<CheckStatus> statusProperty = new SimpleObjectProperty<>();
/**
* @return the status
*/
public CheckStatus getStatus() {
return statusProperty.getValue();
}
/**
* @param status the status to set
*/
public void setStatus(CheckStatus status) {
statusProperty.set(status);
}
public ObjectProperty<CheckStatus> getStatusProperty() {
return statusProperty;
}
public abstract void refreshTextColor();
public abstract String getText();
public abstract void visit(Renderer renderer);
}
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.gui.CheckStatus;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.scene.control.Button;
import javafx.scene.control.TreeCell;
import javafx.scene.paint.Color;
public class RenderableTreeCell extends TreeCell<Renderable> {
private Renderable currentCheckable = null;
private ChangeListener<CheckStatus> listener;
@Override
protected void updateItem(Renderable item, boolean empty) {
super.updateItem(item, empty);
if (!empty && item != null) {
if (item instanceof ButtonRenderable renderable) {
Button b = new Button("More ...");
b.setMaxWidth(Double.MAX_VALUE);
setText(null);
setGraphic(b);
b.setOnAction(ae -> renderable.run());
return;
}
updateColor(item.getStatus());
setText(item.getText());
setGraphic(null);
if (currentCheckable != item) {
if (listener != null) {
// remove old Listener
item.getStatusProperty().removeListener(listener);
}
// only add listener to the status property once
listener = (obs, oldV, newV) -> Platform.runLater(() -> updateColor(newV));
item.getStatusProperty().addListener(listener);
currentCheckable = item;
}
} else {
setTextFill(Color.BLACK);
setText(null);
setGraphic(null);
}
}
private void updateColor(CheckStatus status) {
if (status == CheckStatus.OK) {
setTextFill(Color.GREEN);
} else if (status == CheckStatus.ERROR) {
setTextFill(Color.RED);
} else {
setTextFill(Color.BLACK);
}
}
}
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
public class TextNode extends Renderable {
private final String text;
public TextNode(String text) {
this.text = text;
}
@Override
public void refreshTextColor() {
// don't refresh anything
}
@Override
public String getText() {
return text;
}
@Override
public void visit(Renderer renderer) {
// not used
}
}
/*-
* Copyright 2022 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart
*
* This file is part of CityDoctor2.
*
* CityDoctor2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* CityDoctor2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with CityDoctor2. If not, see <https://www.gnu.org/licenses/>.
*/
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.datastructure.TinObject;
import de.hft.stuttgart.citydoctor2.gui.CheckStatus;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
public class TinNode extends Renderable {
private final TinObject tin;
public TinNode(TinObject tin) {
this.tin = tin;
}
@Override
public void refreshTextColor() {
if (!tin.isValidated()) {
setStatus(CheckStatus.NOT_CHECKED);
} else if (tin.containsAnyError()) {
setStatus(CheckStatus.ERROR);
} else {
setStatus(CheckStatus.OK);
}
}
@Override
public String getText() {
return "[TINRelief] " + tin.getGmlId().getGmlString();
}
@Override
public void visit(Renderer renderer) {
renderer.render(tin);
}
}
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.check.DefaultParameter;
import de.hft.stuttgart.citydoctor2.check.Requirement;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableValue;
public class TreeRequirement {
private BooleanProperty enabled;
private final ObservableValue<String> name;
private SimpleStringProperty value;
private final ObservableValue<String> unit;
private Requirement r;
public TreeRequirement(Requirement r) {
this.r = r;
enabled = new SimpleBooleanProperty(true);
name = new SimpleStringProperty(r.getId());
unit = new SimpleStringProperty();
}
public TreeRequirement(DefaultParameter dp) {
name = new SimpleStringProperty(dp.getName());
value = new SimpleStringProperty(dp.getValue());
unit = new SimpleStringProperty(dp.getUnitType().getRepresentation());
}
public void setEnabled(boolean enabled) {
this.enabled.set(enabled);
}
public ObservableValue<String> getUnitProperty() {
return unit;
}
/**
* @return the enabled
*/
public BooleanProperty getEnabledProperty() {
return enabled;
}
public ObservableValue<String> getNameProperty() {
return name;
}
public ObservableValue<String> getValueProperty() {
return value;
}
public void setValue(String value) {
this.value.setValue(value);
}
public Requirement getRequirement() {
return r;
}
public boolean isEnabled() {
return enabled.get();
}
}
/*-
* Copyright 2022 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart
*
* This file is part of CityDoctor2.
*
* CityDoctor2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* CityDoctor2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with CityDoctor2. If not, see <https://www.gnu.org/licenses/>.
*/
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.datastructure.Vegetation;
import de.hft.stuttgart.citydoctor2.gui.CheckStatus;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
public class VegetationNode extends Renderable {
private final Vegetation veg;
private final String text;
public VegetationNode(Vegetation veg) {
this.veg = veg;
text = "[" + veg.getVegetationType() + "] " + veg.getGmlId().getGmlString();
}
@Override
public void refreshTextColor() {
if (!veg.isValidated()) {
setStatus(CheckStatus.NOT_CHECKED);
} else if (veg.containsAnyError()) {
setStatus(CheckStatus.ERROR);
} else {
setStatus(CheckStatus.OK);
}
}
@Override
public String getText() {
return text;
}
@Override
public void visit(Renderer renderer) {
renderer.render(veg);
}
}
package de.hft.stuttgart.citydoctor2.gui.tree;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
public class VertexNode extends Renderable {
private static final DecimalFormat nf;
static {
DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance();
dfs.setDecimalSeparator('.');
nf = new DecimalFormat("#.########", dfs);
}
private static final String SEPERATOR = ", ";
private final Vertex v;
private String text;
public VertexNode(Vertex v) {
this.v = v;
}
@Override
public void refreshTextColor() {
// not used
}
@Override
public String getText() {
if (text == null) {
text = "Vertex [" + nf.format(v.getX()) + SEPERATOR +
nf.format(v.getY()) + SEPERATOR + nf.format(v.getZ()) + "]";
}
return text;
}
@Override
public void visit(Renderer renderer) {
renderer.highlight(v);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<VBox alignment="CENTER" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" spacing="50.0" xmlns="http://javafx.com/javafx/8.0.221" xmlns:fx="http://javafx.com/fxml/1">
<children>
<ImageView fx:id="logoView" fitWidth="233.0" pickOnBounds="true" preserveRatio="true" />
<Label fx:id="cdLabel" alignment="CENTER">
<font>
<Font size="14.0" />
</font>
</Label>
<HBox alignment="CENTER" fillHeight="false" spacing="30">
<children>
<ImageView fx:id="beuthView" fitHeight="75.0" pickOnBounds="true" preserveRatio="true" />
<ImageView fx:id="minisView" fitHeight="75.0" pickOnBounds="true" preserveRatio="true" />
<ImageView fx:id="hftView" fitHeight="75.0" pickOnBounds="true" preserveRatio="true" />
</children>
</HBox>
<Button fx:id="closeBtn" alignment="CENTER" contentDisplay="CENTER" mnemonicParsing="false" text="Close">
<font>
<Font size="14.0" />
</font>
</Button>
</children>
<padding>
<Insets bottom="10.0" left="20.0" right="20.0" top="20.0" />
</padding>
</VBox>
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ProgressBar?>
<?import javafx.scene.control.Tab?>
<?import javafx.scene.control.TabPane?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.TreeTableView?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<VBox prefHeight="800.0" spacing="15.0" xmlns="http://javafx.com/javafx/8.0.221" xmlns:fx="http://javafx.com/fxml/1">
<children>
<TabPane fx:id="tabPane" VBox.vgrow="ALWAYS">
<tabs>
<Tab fx:id="checksTab" closable="false" text="Checks">
<content>
<VBox maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" spacing="5.0">
<children>
<HBox spacing="5.0">
<children>
<Label fx:id="globalParametersLabel" maxHeight="1.7976931348623157E308" text="Global Parameters:">
<font>
<Font size="16.0" />
</font>
</Label>
<Pane maxWidth="1.7976931348623157E308" HBox.hgrow="ALWAYS" />
<Button fx:id="loadBtn" mnemonicParsing="false" prefHeight="32.0" prefWidth="32.0">
<graphic>
<ImageView fx:id="loadView" fitHeight="25.0" fitWidth="25.0" pickOnBounds="true" preserveRatio="true" />
</graphic>
</Button>
<Button fx:id="saveBtn" mnemonicParsing="false" prefHeight="32.0" prefWidth="32.0">
<graphic>
<ImageView fx:id="saveView" fitHeight="25.0" fitWidth="25.0" pickOnBounds="true" preserveRatio="true" />
</graphic>
</Button>
</children>
</HBox>
<HBox VBox.vgrow="ALWAYS">
<children>
<TableView fx:id="globalParametersTable" editable="true" minHeight="100.0" prefHeight="100.0">
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
</TableView>
</children>
</HBox>
<HBox spacing="5.0" VBox.vgrow="NEVER">
<children>
<Label fx:id="availableChecksLabel" text="Available Checks:" HBox.hgrow="NEVER">
<font>
<Font size="16.0" />
</font>
</Label>
</children>
</HBox>
<HBox spacing="5.0" VBox.vgrow="ALWAYS">
<children>
<VBox alignment="CENTER_LEFT" maxHeight="1.7976931348623157E308" HBox.hgrow="ALWAYS">
<children>
<Label fx:id="geometricChecksLabel" text="Geometric Checks:">
<font>
<Font size="16.0" />
</font>
</Label>
<TreeTableView fx:id="geometricTable" editable="true" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="400.0" minWidth="400.0" prefWidth="600.0" showRoot="false" VBox.vgrow="ALWAYS" />
</children>
</VBox>
<VBox maxHeight="1.7976931348623157E308" HBox.hgrow="ALWAYS">
<children>
<Label fx:id="semanticChecksLabel" text="Semantic Checks:">
<font>
<Font size="16.0" />
</font>
</Label>
<TreeTableView fx:id="semanticTable" editable="true" maxHeight="1.7976931348623157E308" minWidth="400.0" prefWidth="600.0" showRoot="false" VBox.vgrow="ALWAYS" />
</children>
</VBox>
</children>
</HBox>
<HBox spacing="5.0">
<children>
<Label fx:id="schematronFileLabel" maxHeight="1.7976931348623157E308" text="Schematron File:" />
<TextField fx:id="schematronField" HBox.hgrow="ALWAYS" />
<Button fx:id="selectBtn" mnemonicParsing="false" text="Select" />
</children>
</HBox>
</children>
<padding>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</padding>
</VBox>
</content>
</Tab>
<Tab fx:id="filterTab" closable="false" text="Filter">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
</content>
</Tab>
</tabs>
</TabPane>
<HBox maxWidth="1.7976931348623157E308" spacing="5.0" VBox.vgrow="NEVER">
<children>
<ProgressBar fx:id="progress" maxWidth="1.7976931348623157E308" prefHeight="30.0" progress="0.0" HBox.hgrow="ALWAYS" />
<Button fx:id="checkBtn" alignment="CENTER" contentDisplay="TOP" mnemonicParsing="false" text="Check">
<font>
<Font size="14.0" />
</font>
</Button>
<Button fx:id="cancelBtn" alignment="CENTER" mnemonicParsing="false" text="Cancel">
<font>
<Font size="14.0" />
</font>
</Button>
</children>
<padding>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</padding>
</HBox>
</children>
</VBox>
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ProgressBar?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<VBox alignment="CENTER" maxHeight="-Infinity" maxWidth="-Infinity" spacing="10.0" xmlns="http://javafx.com/javafx/8.0.201" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Label text="Creating 3D render data, please wait...">
<font>
<Font size="14.0" />
</font>
</Label>
<ProgressBar prefHeight="20.0" prefWidth="230.0" VBox.vgrow="ALWAYS" />
</children>
<padding>
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
</padding>
</VBox>
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<ScrollPane fitToWidth="true" prefWidth="500.0" xmlns="http://javafx.com/javafx/8.0.221" xmlns:fx="http://javafx.com/fxml/1">
<content>
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" spacing="5.0">
<children>
<Label text="Inclusion Filter">
<font>
<Font size="14.0" />
</font>
</Label>
<VBox spacing="10.0">
<VBox.margin>
<Insets left="20.0" />
</VBox.margin>
<children>
<Label text="By Feature Type" underline="true">
<font>
<Font size="14.0" />
</font>
</Label>
<VBox fx:id="inclFeatureBox" spacing="3.0" />
<Button fx:id="addInclFeatureBtn" mnemonicParsing="false" prefWidth="400.0" text="Add" VBox.vgrow="ALWAYS">
<graphic>
<ImageView fx:id="addInclFeatureView" fitHeight="25.0" fitWidth="25.0" pickOnBounds="true" preserveRatio="true" />
</graphic>
</Button>
<Label text="By GML-ID" underline="true">
<font>
<Font size="14.0" />
</font>
</Label>
<VBox fx:id="inclMatchBox" spacing="5.0" />
<Button fx:id="addInclMatchBtn" mnemonicParsing="false" prefWidth="400.0" text="Add">
<graphic>
<ImageView fx:id="addInclMatchView" fitHeight="25.0" fitWidth="25.0" pickOnBounds="true" preserveRatio="true" />
</graphic>
</Button>
</children>
</VBox>
<Label text="Exclusion Filter">
<font>
<Font size="14.0" />
</font>
</Label>
<VBox spacing="10.0">
<children>
<Label text="By Feature Type" underline="true">
<font>
<Font size="14.0" />
</font>
</Label>
<VBox fx:id="exclFeatureBox" spacing="3.0" />
<Button fx:id="addExclFeatureBtn" mnemonicParsing="false" prefWidth="400.0" text="Add">
<graphic>
<ImageView fx:id="addExclFeatureView" fitHeight="25.0" fitWidth="25.0" pickOnBounds="true" preserveRatio="true" />
</graphic>
</Button>
<Label text="By GML-ID" underline="true">
<font>
<Font size="14.0" />
</font>
</Label>
<VBox fx:id="exclMatchBox" spacing="5.0" />
<Button fx:id="addExclMatchBtn" mnemonicParsing="false" prefWidth="400.0" text="Add">
<graphic>
<ImageView fx:id="addExclMatchView" fitHeight="25.0" fitWidth="25.0" pickOnBounds="true" preserveRatio="true" />
</graphic>
</Button>
</children>
<VBox.margin>
<Insets left="20.0" />
</VBox.margin>
</VBox>
</children>
<padding>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</padding>
</VBox>
</content>
</ScrollPane>
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Separator?>
<?import javafx.scene.control.ToggleButton?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.HBox?>
<HBox maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" spacing="5.0" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml">
<children>
<HBox spacing="5.0" HBox.hgrow="NEVER">
<children>
<Button id="loadBtn" fx:id="openBtn" mnemonicParsing="false">
<graphic>
<ImageView fx:id="openImageView" fitHeight="32.0" fitWidth="32.0" pickOnBounds="true" preserveRatio="true" />
</graphic>
</Button>
<Button fx:id="checkBtn" mnemonicParsing="false">
<graphic>
<ImageView fx:id="checkImageView" fitHeight="32.0" fitWidth="32.0" pickOnBounds="true" preserveRatio="true" />
</graphic>
</Button>
<Button fx:id="reportBtn" mnemonicParsing="false">
<graphic>
<ImageView fx:id="reportImageView" disable="true" fitHeight="32.0" fitWidth="32.0" pickOnBounds="true" preserveRatio="true" />
</graphic>
</Button>
<ToggleButton fx:id="gridButton" disable="true" mnemonicParsing="false">
<graphic>
<ImageView fx:id="gridImageView" fitHeight="32.0" fitWidth="32.0" pickOnBounds="true" preserveRatio="true" />
</graphic>
</ToggleButton>
<ToggleButton fx:id="cullingButton" disable="true" mnemonicParsing="false" selected="true">
<graphic>
<ImageView fx:id="cullingImageView" fitHeight="32.0" fitWidth="32.0" pickOnBounds="true" preserveRatio="true" />
</graphic>
</ToggleButton>
<Separator orientation="VERTICAL" />
<Button id="loadBtn" fx:id="showWorldBtn" disable="true" mnemonicParsing="false">
<graphic>
<ImageView fx:id="showWorldImageView" fitHeight="32.0" fitWidth="32.0" pickOnBounds="true" preserveRatio="true" />
</graphic>
</Button>
<Separator orientation="VERTICAL" />
<ToggleButton fx:id="lod1Btn" disable="true" focusTraversable="false" mnemonicParsing="false" selected="true">
<graphic>
<ImageView fx:id="lod1View" fitHeight="32.0" fitWidth="32.0" pickOnBounds="true" preserveRatio="true" />
</graphic>
</ToggleButton>
<ToggleButton fx:id="lod2Btn" disable="true" focusTraversable="false" mnemonicParsing="false" selected="true">
<graphic>
<ImageView fx:id="lod2View" fitHeight="32.0" fitWidth="32.0" pickOnBounds="true" preserveRatio="true" />
</graphic>
</ToggleButton>
<ToggleButton fx:id="lod3Btn" disable="true" focusTraversable="false" mnemonicParsing="false" selected="true">
<graphic>
<ImageView fx:id="lod3View" fitHeight="32.0" fitWidth="32.0" pickOnBounds="true" preserveRatio="true" />
</graphic>
</ToggleButton>
<ToggleButton fx:id="lod4Btn" disable="true" focusTraversable="false" mnemonicParsing="false" selected="true">
<graphic>
<ImageView fx:id="lod4View" fitHeight="32.0" fitWidth="32.0" pickOnBounds="true" preserveRatio="true" />
</graphic>
</ToggleButton>
</children>
</HBox>
<HBox fx:id="spacer" alignment="TOP_RIGHT" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" spacing="5.0" HBox.hgrow="ALWAYS">
<children>
<Button id="loadBtn" fx:id="saveBtn" disable="true" mnemonicParsing="false">
<graphic>
<ImageView fx:id="saveView" fitHeight="32.0" fitWidth="32.0" pickOnBounds="true" preserveRatio="true" />
</graphic>
</Button>
<Button id="loadBtn" fx:id="aboutBtn" focusTraversable="false" mnemonicParsing="false">
<graphic>
<ImageView fx:id="aboutImgView" fitHeight="32.0" fitWidth="32.0" pickOnBounds="true" preserveRatio="true" />
</graphic>
</Button>
</children></HBox>
</children>
<padding>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</padding>
</HBox>
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.ProgressBar?>
<?import javafx.scene.control.Separator?>
<?import javafx.scene.control.SplitPane?>
<?import javafx.scene.control.Tab?>
<?import javafx.scene.control.TabPane?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.TreeView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.VBox?>
<BorderPane fx:id="mainPane" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="400.0" minWidth="400.0" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml">
<center>
<SplitPane fx:id="mainContainer" dividerPositions="0.47069431920649235" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minWidth="300.0" prefHeight="600.0" prefWidth="1100.0">
<items>
<SplitPane dividerPositions="0.5" orientation="VERTICAL" prefHeight="200.0" prefWidth="160.0" SplitPane.resizableWithParent="false">
<items>
<VBox>
<children>
<HBox>
<children>
<HBox alignment="CENTER_LEFT" spacing="5.0">
<children>
<Label fx:id="showLabel" maxHeight="1.7976931348623157E308" text="Show:" />
<ComboBox fx:id="showCityObjectsCombo" />
</children>
<padding>
<Insets left="5.0" />
</padding>
</HBox>
<HBox alignment="CENTER_RIGHT" spacing="10.0" HBox.hgrow="ALWAYS">
<children>
<Label fx:id="searchLabel" alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="Search:" />
<TextField fx:id="searchField" />
<Button fx:id="searchBtn" mnemonicParsing="false" text="Search" />
<Button fx:id="clearBtn" mnemonicParsing="false" text="Clear" />
</children>
<padding>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</padding>
</HBox>
</children>
</HBox>
<TabPane fx:id="featurePane" maxWidth="1.7976931348623157E308" tabClosingPolicy="UNAVAILABLE" VBox.vgrow="ALWAYS">
<tabs>
<Tab fx:id="buildingsTab" text="Buildings">
<content>
<TreeView id="buildingsTree" fx:id="buildingsView" prefHeight="200.0" prefWidth="200.0" showRoot="false" />
</content>
</Tab>
<Tab fx:id="vegetationTab" text="Vegetation">
<content>
<TreeView id="vegTree" fx:id="vegetationView" prefHeight="200.0" prefWidth="200.0" showRoot="false">
<opaqueInsets>
<Insets />
</opaqueInsets>
</TreeView>
</content>
</Tab>
<Tab fx:id="transportationTab" text="Transportation">
<content>
<TreeView id="transTree" fx:id="transView" prefHeight="200.0" prefWidth="200.0" showRoot="false" />
</content>
</Tab>
<Tab fx:id="bridgeTab" text="Bridges">
<content>
<TreeView id="bridgesTree" fx:id="bridgeView" prefHeight="200.0" prefWidth="200.0" showRoot="false" />
</content>
</Tab>
<Tab fx:id="waterTab" text="Water">
<content>
<TreeView id="waterTree" fx:id="waterView" prefHeight="200.0" prefWidth="200.0" showRoot="false" />
</content>
</Tab>
<Tab fx:id="terrainTab" text="Terrain">
<content>
<TreeView id="terrainTree" fx:id="terrainView" prefHeight="200.0" prefWidth="200.0" showRoot="false" />
</content>
</Tab>
</tabs>
</TabPane>
</children>
</VBox>
<TabPane fx:id="detailsTabPane" prefWidth="200.0" tabClosingPolicy="UNAVAILABLE">
<tabs>
<Tab fx:id="errorsTab" closable="false" text="Errors">
<content>
<TreeView fx:id="errorView" prefHeight="200.0" prefWidth="200.0" showRoot="false" />
</content>
</Tab>
<Tab fx:id="polygonsTab" text="Polygons">
<content>
<TreeView fx:id="polygonView" prefHeight="200.0" prefWidth="200.0" showRoot="false" />
</content>
</Tab>
<Tab fx:id="edgesTab" text="Edges">
<content>
<TreeView fx:id="edgeView" prefHeight="200.0" prefWidth="200.0" showRoot="false" />
</content>
</Tab>
<Tab fx:id="verticesTab" text="Vertices">
<content>
<TreeView fx:id="vertexView" prefHeight="200.0" prefWidth="200.0" showRoot="false" />
</content>
</Tab>
</tabs>
</TabPane>
</items>
</SplitPane>
<SplitPane dividerPositions="0.7169069462647444" minWidth="200.0" orientation="VERTICAL" prefHeight="200.0" prefWidth="160.0">
<items>
<Pane fx:id="meshView" minWidth="200.0" prefHeight="200.0" prefWidth="200.0" />
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0">
<children>
<TabPane AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<tabs>
<Tab fx:id="logTab" closable="false" text="Log">
<content>
<TextArea id="logArea" fx:id="logArea" editable="false" />
</content>
</Tab>
<Tab fx:id="globalErrorsTab" closable="false" text="Global Errors">
<content>
<ListView fx:id="globalErrorsView" prefHeight="200.0" prefWidth="200.0" />
</content>
</Tab>
</tabs>
</TabPane>
</children>
</AnchorPane>
</items>
</SplitPane>
</items>
</SplitPane>
</center>
<bottom>
<HBox alignment="CENTER_RIGHT" spacing="5.0" BorderPane.alignment="CENTER">
<children>
<Label fx:id="memoryLabel" text="Memory:" />
<Label fx:id="memoryConsumptionLabel" />
<ProgressBar fx:id="memoryBar" prefWidth="200.0" progress="0.0" />
<Label fx:id="availableLabel" text="Available: " />
</children>
<BorderPane.margin>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</BorderPane.margin>
</HBox>
</bottom>
<top>
<HBox maxWidth="1.7976931348623157E308" spacing="5.0" BorderPane.alignment="CENTER">
<children>
<HBox fx:id="viewPane" maxWidth="1.7976931348623157E308" HBox.hgrow="ALWAYS" />
<HBox spacing="5.0">
<children>
<Separator orientation="VERTICAL" />
<Label fx:id="viewLabel" maxHeight="1.7976931348623157E308" minWidth="-Infinity" text="View:" />
<HBox fx:id="viewButtonBox" />
<Separator orientation="VERTICAL" />
<ComboBox fx:id="languageSelector" prefHeight="32.0" />
</children>
<padding>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</padding>
</HBox>
</children>
</HBox>
</top>
</BorderPane>
<?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.Label?>
<?import javafx.scene.control.ProgressBar?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.TitledPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<VBox xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml">
<children>
<Label fx:id="fileLabel" text="File:">
<padding>
<Insets left="5.0" right="5.0" top="5.0" />
</padding>
<font>
<Font size="16.0" />
</font>
</Label>
<HBox>
<children>
<TextField fx:id="pathField" prefColumnCount="25" HBox.hgrow="ALWAYS">
<HBox.margin>
<Insets right="5.0" />
</HBox.margin>
<font>
<Font size="14.0" />
</font>
</TextField>
<Button fx:id="selectBtn" maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="Select" HBox.hgrow="SOMETIMES">
<font>
<Font size="14.0" />
</font>
</Button>
</children>
<padding>
<Insets bottom="5.0" left="5.0" right="5.0" />
</padding>
<VBox.margin>
<Insets />
</VBox.margin>
</HBox>
<TitledPane fx:id="settingsPane" collapsible="false" text="Parser Preferences">
<VBox.margin>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</VBox.margin>
<content>
<GridPane hgap="10.0" vgap="5.0">
<columnConstraints>
<ColumnConstraints hgrow="NEVER" maxWidth="1.7976931348623157E308" minWidth="202.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="275.0" minWidth="10.0" prefWidth="229.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Label fx:id="roundingPlacesLabel" text="NumberOfRoundingPlaces:">
<font>
<Font size="14.0" />
</font></Label>
<TextField fx:id="precisionField" text="8" GridPane.columnIndex="1">
<font>
<Font size="14.0" />
</font>
<GridPane.margin>
<Insets top="5.0" />
</GridPane.margin>
</TextField>
<Label text="Use XML Validation:" GridPane.rowIndex="1" fx:id="xmlValidationLabel">
<font>
<Font size="14.0" />
</font></Label>
<CheckBox fx:id="useValidationBox" mnemonicParsing="false" GridPane.columnIndex="1" GridPane.rowIndex="1" />
<Label fx:id="lowMemoryLabel" text="Low Memory Consumption Mode" GridPane.rowIndex="2">
<font>
<Font size="14.0" />
</font></Label>
<CheckBox fx:id="lowMemoryBox" mnemonicParsing="false" selected="true" GridPane.columnIndex="1" GridPane.rowIndex="2" />
</children>
</GridPane>
</content>
<font>
<Font size="14.0" />
</font>
</TitledPane>
<HBox spacing="5.0">
<children>
<ProgressBar fx:id="progress" maxWidth="1.7976931348623157E308" minHeight="40.0" prefHeight="40.0" progress="0.0" HBox.hgrow="ALWAYS">
<padding>
<Insets bottom="5.0" right="5.0" top="5.0" />
</padding>
</ProgressBar>
<Button fx:id="loadBtn" alignment="CENTER" mnemonicParsing="false" text="Load">
<font>
<Font size="14.0" />
</font>
<HBox.margin>
<Insets top="4.0" />
</HBox.margin>
</Button>
<Button fx:id="cancelBtn" alignment="CENTER" mnemonicParsing="false" text="Cancel">
<font>
<Font size="14.0" />
</font>
<HBox.margin>
<Insets top="4.0" />
</HBox.margin>
</Button>
</children>
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</HBox>
</children>
</VBox>
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.chart.BarChart?>
<?import javafx.scene.chart.CategoryAxis?>
<?import javafx.scene.chart.NumberAxis?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<VBox maxHeight="600.0" maxWidth="800.0" minHeight="-Infinity" minWidth="-Infinity" spacing="10.0" xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1">
<children>
<HBox>
<children>
<Label fx:id="errorStatisticsLabel" maxHeight="1.7976931348623157E308" text="Error Statistics" />
<Pane maxWidth="1.7976931348623157E308" HBox.hgrow="ALWAYS" />
<Button fx:id="saveImageBtn" alignment="CENTER" mnemonicParsing="false" text="Save Image.." />
</children>
</HBox>
<BarChart fx:id="barChart" legendVisible="false" maxHeight="400.0" maxWidth="1.7976931348623157E308" VBox.vgrow="ALWAYS">
<xAxis>
<CategoryAxis label="Error" side="BOTTOM" />
</xAxis>
<yAxis>
<NumberAxis label="Count" side="LEFT" />
</yAxis>
</BarChart>
<CheckBox fx:id="pdfCheckBox" mnemonicParsing="false" text="PDF-Report">
<font>
<Font size="14.0" />
</font>
</CheckBox>
<HBox spacing="10.0">
<children>
<TextField fx:id="pdfFileField" disable="true" HBox.hgrow="ALWAYS">
<font>
<Font size="14.0" />
</font>
</TextField>
<Button fx:id="selectPdfBtn" disable="true" mnemonicParsing="false" text="Select">
<font>
<Font size="14.0" />
</font>
</Button>
</children>
</HBox>
<CheckBox layoutX="20.0" layoutY="20.0" mnemonicParsing="false" text="XML-Report" fx:id="xmlCheckBox">
<font>
<Font size="14.0" />
</font>
</CheckBox>
<HBox layoutX="20.0" layoutY="50.0" spacing="10.0">
<children>
<TextField disable="true" HBox.hgrow="ALWAYS" fx:id="xmlFileField">
<font>
<Font size="14.0" />
</font>
</TextField>
<Button fx:id="selectXmlFile" disable="true" mnemonicParsing="false" text="Select">
<font>
<Font size="14.0" />
</font>
</Button>
</children>
</HBox>
<HBox alignment="CENTER_RIGHT" spacing="5.0">
<children>
<Button fx:id="writeBtn" mnemonicParsing="false" text="Write">
<font>
<Font size="14.0" />
</font>
</Button>
<Button fx:id="cancelBtn" mnemonicParsing="false" text="Cancel">
<font>
<Font size="14.0" />
</font>
</Button>
</children>
</HBox>
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</VBox>
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment