Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
CityDoctor
CityDoctor2
Commits
a5a82382
Commit
a5a82382
authored
Jul 31, 2024
by
Riegel
Browse files
Open Source release of CityDoctor-GUI
parent
7a22ca9c
Pipeline
#10028
failed with stage
in 7 seconds
Changes
126
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
CityDoctorParent/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TextNode.java
0 → 100644
View file @
a5a82382
package
de.hft.stuttgart.citydoctor2.gui.tree
;
import
de.hft.stuttgart.citydoctor2.gui.Renderer
;
public
class
TextNode
extends
Renderable
{
private
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
}
}
CityDoctorParent/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TinNode.java
0 → 100644
View file @
a5a82382
/*-
* 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
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
);
}
}
CityDoctorParent/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TreeRequirement.java
0 → 100644
View file @
a5a82382
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
ObservableValue
<
String
>
name
;
private
SimpleStringProperty
value
;
private
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
();
}
}
CityDoctorParent/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/VegetationNode.java
0 → 100644
View file @
a5a82382
/*-
* 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
Vegetation
veg
;
private
String
text
;
public
VegetationNode
(
Vegetation
veg
)
{
this
.
veg
=
veg
;
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
"["
);
sb
.
append
(
veg
.
getVegetationType
());
sb
.
append
(
"] "
);
sb
.
append
(
veg
.
getGmlId
().
getGmlString
());
text
=
sb
.
toString
();
}
@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
);
}
}
CityDoctorParent/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/VertexNode.java
0 → 100644
View file @
a5a82382
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
DecimalFormat
nf
;
static
{
DecimalFormatSymbols
dfs
=
DecimalFormatSymbols
.
getInstance
();
dfs
.
setDecimalSeparator
(
'.'
);
nf
=
new
DecimalFormat
(
"#.########"
,
dfs
);
}
private
static
final
String
SEPERATOR
=
", "
;
private
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
)
{
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
"Vertex ["
);
sb
.
append
(
nf
.
format
(
v
.
getX
()));
sb
.
append
(
SEPERATOR
);
sb
.
append
(
nf
.
format
(
v
.
getY
()));
sb
.
append
(
SEPERATOR
);
sb
.
append
(
nf
.
format
(
v
.
getZ
()));
sb
.
append
(
"]"
);
text
=
sb
.
toString
();
}
return
text
;
}
@Override
public
void
visit
(
Renderer
renderer
)
{
renderer
.
highlight
(
v
);
}
}
CityDoctorParent/CityDoctorGUI/src/main/resources/citydoctor_logo.ico
0 → 100644
View file @
a5a82382
4.19 KB
CityDoctorParent/CityDoctorGUI/src/main/resources/de/hft/stuttgart/citydoctor2/gui/AboutDialog.fxml
0 → 100644
View file @
a5a82382
<?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>
CityDoctorParent/CityDoctorGUI/src/main/resources/de/hft/stuttgart/citydoctor2/gui/CheckDialog.fxml
0 → 100644
View file @
a5a82382
<?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>
CityDoctorParent/CityDoctorGUI/src/main/resources/de/hft/stuttgart/citydoctor2/gui/CreateRenderDataDialog.fxml
0 → 100644
View file @
a5a82382
<?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>
CityDoctorParent/CityDoctorGUI/src/main/resources/de/hft/stuttgart/citydoctor2/gui/FilterPane.fxml
0 → 100644
View file @
a5a82382
<?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>
CityDoctorParent/CityDoctorGUI/src/main/resources/de/hft/stuttgart/citydoctor2/gui/MainToolBar.fxml
0 → 100644
View file @
a5a82382
<?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>
CityDoctorParent/CityDoctorGUI/src/main/resources/de/hft/stuttgart/citydoctor2/gui/MainWindow.fxml
0 → 100644
View file @
a5a82382
<?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>
CityDoctorParent/CityDoctorGUI/src/main/resources/de/hft/stuttgart/citydoctor2/gui/OpenFileDialog.fxml
0 → 100644
View file @
a5a82382
<?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>
CityDoctorParent/CityDoctorGUI/src/main/resources/de/hft/stuttgart/citydoctor2/gui/WriteReportDialog.fxml
0 → 100644
View file @
a5a82382
<?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>
CityDoctorParent/CityDoctorGUI/src/main/resources/de/hft/stuttgart/citydoctor2/gui/icons/Add.png
0 → 100644
View file @
a5a82382
1.31 KB
CityDoctorParent/CityDoctorGUI/src/main/resources/de/hft/stuttgart/citydoctor2/gui/icons/BMBF_Logo.png
0 → 100644
View file @
a5a82382
9.6 KB
CityDoctorParent/CityDoctorGUI/src/main/resources/de/hft/stuttgart/citydoctor2/gui/icons/Beuth-Logo_basis.png
0 → 100644
View file @
a5a82382
37.7 KB
CityDoctorParent/CityDoctorGUI/src/main/resources/de/hft/stuttgart/citydoctor2/gui/icons/CityDoctor-Logo-rot_klein.jpg
0 → 100644
View file @
a5a82382
41.6 KB
CityDoctorParent/CityDoctorGUI/src/main/resources/de/hft/stuttgart/citydoctor2/gui/icons/CityDoctor-Logo-rot_klein.png
0 → 100644
View file @
a5a82382
119 KB
CityDoctorParent/CityDoctorGUI/src/main/resources/de/hft/stuttgart/citydoctor2/gui/icons/Culling.png
0 → 100644
View file @
a5a82382
1.4 KB
Prev
1
2
3
4
5
6
7
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment