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
89c2a845
Commit
89c2a845
authored
4 months ago
by
Riegel
Browse files
Options
Download
Email Patches
Plain Diff
Expand ContextMenu functionality for FeatureTabs
parent
14f49201
Pipeline
#10335
passed with stage
in 1 minute and 17 seconds
Changes
5
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CompositeCollection.java
+1
-0
...ttgart/citydoctor2/datastructure/CompositeCollection.java
CityDoctorParent/CityDoctorModel/src/main/resources/CityDoctorLocalization.properties
+7
-1
...odel/src/main/resources/CityDoctorLocalization.properties
CityDoctorParent/CityDoctorModel/src/main/resources/CityDoctorLocalization_de.properties
+7
-1
...l/src/main/resources/CityDoctorLocalization_de.properties
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CityDoctorController.java
+3
-3
...e/hft/stuttgart/citydoctor2/gui/CityDoctorController.java
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/MainWindow.java
+151
-6
...ain/java/de/hft/stuttgart/citydoctor2/gui/MainWindow.java
with
169 additions
and
11 deletions
+169
-11
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CompositeCollection.java
+
1
-
0
View file @
89c2a845
...
...
@@ -32,6 +32,7 @@ public final class CompositeCollection implements Serializable {
return
childComposites
;
}
//TODO stream
public
List
<
ConcretePolygon
>
getCompositeMembers
()
{
List
<
ConcretePolygon
>
copy
=
new
ArrayList
<>(
compositeMembers
);
for
(
CompositeCollection
c
:
childComposites
)
{
...
...
This diff is collapsed.
Click to expand it.
CityDoctorParent/CityDoctorModel/src/main/resources/CityDoctorLocalization.properties
+
7
-
1
View file @
89c2a845
...
...
@@ -18,6 +18,7 @@ CheckDialog.parameterValue=Value
CheckDialog.parameterUnit
=
Unit
CityDoctorController.noDatamodel
=
Datamodel is null, no checks could be done
CityDoctorController.noSourceFile
=
Source file is null, no checks could be done
CityDoctorController.exportSuccess
=
Successfully exported feature
ExceptionDialog.stacktrace
=
The exception stacktrace was:
FilterPane.buildings
=
Buildings
FilterPane.bridges
=
Bridges
...
...
@@ -43,7 +44,12 @@ MainWindow.finishedPdf=Finished pdf report
MainWindow.loadFailed
=
Failed to load given gml file: {}
MainWindow.all
=
All
MainWindow.withErrors
=
With errors
MainWindow.export
=
Export
MainWindow.export
=
Export feature
MainWindow.copyId
=
Copy GML-ID
MainWindow.delete
=
Delete feature
MainWindow.infoTopLevelExport
=
Only top-level object can be exported!
MainWindow.infoTopLevelCopyID
=
GML-ID can only be copied from top-level object!
mainWindow.warnCopyIdFailed
=
Could not copy GML-ID!
OpenFileDialog.select
=
Select CityGML file
MainWindow.languageChange
=
For the change in language to apply, restart CityDoctor2.
MainWindow.buildingsTab
=
Buildings
...
...
This diff is collapsed.
Click to expand it.
CityDoctorParent/CityDoctorModel/src/main/resources/CityDoctorLocalization_de.properties
+
7
-
1
View file @
89c2a845
...
...
@@ -16,6 +16,7 @@ CheckDialog.parameterValue=Wert
CheckDialog.parameterUnit
=
Einheit
CityDoctorController.noDatamodel
=
Datenmodell ist null, keine Pr
\u
00fcfungen konnten ausgef
\u
00fchrt werden
CityDoctorController.noSourceFile
=
Quelldatei ist null, keine Pr
\u
00fcfungen konnten ausgef
\u
00fchrt werden
CityDoctorController.exportSuccess
=
Feature export erfolgreich abgeschlossen
ExceptionDialog.stacktrace
=
Der Stacktrace des Fehlers war:
FilterPane.buildings
=
Geb
\u
00e4ude
FilterPane.bridges
=
Br
\u
00fccken
...
...
@@ -41,7 +42,12 @@ MainWindow.finishedPdf=Pdf Report abgeschlossen
MainWindow.loadFailed
=
Konnte GML-Datei nicht laden: {}
MainWindow.all
=
Alle
MainWindow.withErrors
=
Mit Fehlern
MainWindow.export
=
Exportieren
MainWindow.export
=
Feature Exportieren
MainWindow.copyId
=
GML-ID kopieren
MainWindow.delete
=
Feature L
\u
00f6schen
MainWindow.infoTopLevelExport
=
Export ist nur f
\u
00fcr Featureobjekt basis m
\u
00f6glich!
MainWindow.infoTopLevelCopyID
=
GML-ID kann nur von Featureobjekt basis kopiert werden!
mainWindow.warnCopyIdFailed
=
Kopieren der ID fehlgeschlagen!
OpenFileDialog.select
=
W
\u
00e4hle CityGML Datei aus
MainWindow.languageChange
=
Um die Spracheinstellung zu
\u
00fcbernehmen muss CityDoctor2 neugestartet werden.
MainWindow.buildingsTab
=
Geb
\u
00e4ude
...
...
This diff is collapsed.
Click to expand it.
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CityDoctorController.java
+
3
-
3
View file @
89c2a845
...
...
@@ -798,13 +798,14 @@ public class CityDoctorController {
}
}
public
void
export
(
Building
b
)
{
public
void
export
(
CityObject
co
)
{
if
(
model
==
null
)
{
return
;
}
CityDoctorModel
newModel
=
new
CityDoctorModel
(
model
.
getParserConfig
(),
model
.
getFile
());
newModel
.
setCityModel
(
new
CityModel
());
newModel
.
addBuilding
(
b
);
newModel
.
addCityObject
(
co
);
newModel
.
setParsedCityGMLVersion
(
model
.
getCityGMLVersion
());
FileChooser
fc
=
new
FileChooser
();
fc
.
getExtensionFilters
().
add
(
new
ExtensionFilter
(
"CityGML"
,
"*.gml"
));
...
...
@@ -819,7 +820,6 @@ public class CityDoctorController {
if
(
f
!=
null
)
{
Settings
.
set
(
Settings
.
LAST_OPEN_FOLDER
,
f
.
getParent
());
try
{
newModel
.
saveAs
(
f
.
getAbsolutePath
(),
true
);
}
catch
(
CityDoctorWriteException
e
)
{
logger
.
error
(
e
);
...
...
This diff is collapsed.
Click to expand it.
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/MainWindow.java
+
151
-
6
View file @
89c2a845
...
...
@@ -5,7 +5,7 @@ import de.hft.stuttgart.citydoctor2.check.ValidationConfiguration;
import
de.hft.stuttgart.citydoctor2.datastructure.BoundingBox
;
import
de.hft.stuttgart.citydoctor2.datastructure.FeatureType
;
import
de.hft.stuttgart.citydoctor2.gui.logger.GuiLogger
;
import
de.hft.stuttgart.citydoctor2.gui.tree.
Building
Node
;
import
de.hft.stuttgart.citydoctor2.gui.tree.
Feature
Node
;
import
de.hft.stuttgart.citydoctor2.gui.tree.Renderable
;
import
de.hft.stuttgart.citydoctor2.gui.tree.RenderableTreeCell
;
import
de.hft.stuttgart.citydoctor2.parameter.ArgumentParser
;
...
...
@@ -25,10 +25,7 @@ import javafx.scene.control.Alert.AlertType;
import
javafx.scene.image.Image
;
import
javafx.scene.image.ImageView
;
import
javafx.scene.image.WritableImage
;
import
javafx.scene.input.Dragboard
;
import
javafx.scene.input.MouseButton
;
import
javafx.scene.input.MouseEvent
;
import
javafx.scene.input.TransferMode
;
import
javafx.scene.input.*
;
import
javafx.scene.layout.BorderPane
;
import
javafx.scene.layout.HBox
;
import
javafx.scene.layout.Pane
;
...
...
@@ -46,6 +43,8 @@ import java.io.FileNotFoundException;
import
java.io.IOException
;
import
java.util.*
;
import
static
javafx
.
scene
.
input
.
Clipboard
.
getSystemClipboard
;
public
class
MainWindow
extends
Application
{
private
static
final
Logger
logger
=
LogManager
.
getLogger
(
MainWindow
.
class
);
...
...
@@ -734,6 +733,8 @@ public class MainWindow extends Application {
buildingsView
.
setShowRoot
(
true
);
setupSelectListener
(
buildingsView
);
buildingsView
.
setCellFactory
(
param
->
new
RenderableTreeCell
());
setupBuildingTabContextMenu
();
/*
ContextMenu cMenu = new ContextMenu();
MenuItem mi = new MenuItem(Localization.getText("MainWindow.export"));
mi.setOnAction(ea -> {
...
...
@@ -743,29 +744,44 @@ public class MainWindow extends Application {
}
});
cMenu.getItems().add(mi);
MenuItem clipMi = new MenuItem(Localization.getText("MainWindow.copyId"));
clipMi.setOnAction(ea -> {
Renderable render = buildingsView.getSelectionModel().getSelectedItem().getValue();
if (render instanceof BuildingNode node) {
Clipboard clipboard = getSystemClipboard();
ClipboardContent content = new ClipboardContent();
content.putString(node.getBuilding().getGmlId().toString());
clipboard.setContent(content);
}
});
cMenu.getItems().add(clipMi);
MenuItem deleteMi = new MenuItem("Delete");
deleteMi.setOnAction(ae -> controller.delete(buildingsView.getSelectionModel().getSelectedItem()));
cMenu.getItems().add(deleteMi);
buildingsView.setContextMenu(cMenu);
*/
vegetationView
.
setShowRoot
(
true
);
setupSelectListener
(
vegetationView
);
vegetationView
.
setCellFactory
(
param
->
new
RenderableTreeCell
());
v
egetation
View
.
set
ContextMenu
(
cMenu
);
setupV
egetation
Tab
ContextMenu
();
transView
.
setShowRoot
(
true
);
setupSelectListener
(
transView
);
transView
.
setCellFactory
(
param
->
new
RenderableTreeCell
());
tunnelView
.
setShowRoot
(
true
);
setupSelectListener
(
tunnelView
);
tunnelView
.
setCellFactory
(
param
->
new
RenderableTreeCell
());
setupFeatureTabContextMenu
(
tunnelView
);
bridgeView
.
setShowRoot
(
true
);
setupSelectListener
(
bridgeView
);
bridgeView
.
setCellFactory
(
param
->
new
RenderableTreeCell
());
setupFeatureTabContextMenu
(
bridgeView
);
waterView
.
setShowRoot
(
true
);
setupSelectListener
(
waterView
);
...
...
@@ -778,10 +794,12 @@ public class MainWindow extends Application {
cityFurnitureView
.
setShowRoot
(
true
);
setupSelectListener
(
cityFurnitureView
);
cityFurnitureView
.
setCellFactory
(
param
->
new
RenderableTreeCell
());
setupFeatureTabContextMenu
(
cityFurnitureView
);
otherObjectsView
.
setShowRoot
(
true
);
setupSelectListener
(
otherObjectsView
);
otherObjectsView
.
setCellFactory
(
param
->
new
RenderableTreeCell
());
setupFeatureTabContextMenu
(
otherObjectsView
);
setupSelectListener
(
vertexView
);
vertexView
.
setRoot
(
new
TreeItem
<>());
...
...
@@ -798,6 +816,133 @@ public class MainWindow extends Application {
setupSelectListener
(
attributeView
);
attributeView
.
setRoot
(
new
TreeItem
<>());
attributeView
.
setCellFactory
(
param
->
new
RenderableTreeCell
());
}
private
void
setupBuildingTabContextMenu
()
{
ContextMenu
menu
=
new
ContextMenu
();
MenuItem
mi
=
new
MenuItem
(
Localization
.
getText
(
"MainWindow.export"
));
mi
.
setOnAction
(
ea
->
{
Renderable
render
=
buildingsView
.
getSelectionModel
().
getSelectedItem
().
getValue
();
if
(
render
instanceof
FeatureNode
node
)
{
try
{
controller
.
export
(
node
.
getFeature
());
logger
.
info
(
Localization
.
getText
(
"CityDoctorController.export"
));
}
catch
(
Exception
e
)
{
logger
.
error
(
"Export failed: Unexpected error occurred"
);
logger
.
error
(
e
);
}
}
else
{
logger
.
info
(
Localization
.
getText
(
"MainWindow.infoTopLevelExport"
));
}
});
menu
.
getItems
().
add
(
mi
);
MenuItem
clipMi
=
new
MenuItem
(
Localization
.
getText
(
"MainWindow.copyId"
));
clipMi
.
setOnAction
(
ea
->
{
Renderable
render
=
buildingsView
.
getSelectionModel
().
getSelectedItem
().
getValue
();
if
(
render
instanceof
FeatureNode
node
)
{
Clipboard
clipboard
=
getSystemClipboard
();
ClipboardContent
content
=
new
ClipboardContent
();
content
.
putString
(
node
.
getFeature
().
getGmlId
().
toString
());
if
(!
clipboard
.
setContent
(
content
))
{
logger
.
warn
(
Localization
.
getText
(
"MainWindow.warnCopyIdFailed"
));
}
}
else
{
logger
.
info
(
Localization
.
getText
(
"MainWindow.infoTopLevelCopyID"
));
}
});
menu
.
getItems
().
add
(
clipMi
);
MenuItem
deleteMi
=
new
MenuItem
(
Localization
.
getText
(
"MainWindow.delete"
));
deleteMi
.
setOnAction
(
ae
->
controller
.
delete
(
buildingsView
.
getSelectionModel
().
getSelectedItem
()));
menu
.
getItems
().
add
(
deleteMi
);
buildingsView
.
setContextMenu
(
menu
);
}
private
void
setupVegetationTabContextMenu
()
{
ContextMenu
menu
=
new
ContextMenu
();
MenuItem
mi
=
new
MenuItem
(
Localization
.
getText
(
"MainWindow.export"
));
mi
.
setOnAction
(
ea
->
{
Renderable
render
=
vegetationView
.
getSelectionModel
().
getSelectedItem
().
getValue
();
if
(
render
instanceof
FeatureNode
node
)
{
try
{
controller
.
export
(
node
.
getFeature
());
logger
.
info
(
Localization
.
getText
(
"CityDoctorController.export"
));
}
catch
(
Exception
e
)
{
logger
.
error
(
"Export failed: Unexpected error occurred"
);
logger
.
error
(
e
);
}
}
else
{
logger
.
info
(
Localization
.
getText
(
"MainWindow.infoTopLevelExport"
));
}
});
menu
.
getItems
().
add
(
mi
);
MenuItem
clipMi
=
new
MenuItem
(
Localization
.
getText
(
"MainWindow.copyId"
));
clipMi
.
setOnAction
(
ea
->
{
Renderable
render
=
vegetationView
.
getSelectionModel
().
getSelectedItem
().
getValue
();
if
(
render
instanceof
FeatureNode
node
)
{
Clipboard
clipboard
=
getSystemClipboard
();
ClipboardContent
content
=
new
ClipboardContent
();
content
.
putString
(
node
.
getFeature
().
getGmlId
().
toString
());
if
(!
clipboard
.
setContent
(
content
))
{
logger
.
warn
(
Localization
.
getText
(
"MainWindow.warnCopyIdFailed"
));
}
}
else
{
logger
.
info
(
Localization
.
getText
(
"MainWindow.infoTopLevelCopyID"
));
}
});
menu
.
getItems
().
add
(
clipMi
);
MenuItem
deleteMi
=
new
MenuItem
(
Localization
.
getText
(
"MainWindow.delete"
));
deleteMi
.
setOnAction
(
ae
->
controller
.
delete
(
vegetationView
.
getSelectionModel
().
getSelectedItem
()));
menu
.
getItems
().
add
(
deleteMi
);
vegetationView
.
setContextMenu
(
menu
);
}
private
void
setupFeatureTabContextMenu
(
TreeView
<
Renderable
>
featureView
)
{
ContextMenu
menu
=
new
ContextMenu
();
MenuItem
mi
=
new
MenuItem
(
Localization
.
getText
(
"MainWindow.export"
));
mi
.
setOnAction
(
ea
->
{
Renderable
render
=
featureView
.
getSelectionModel
().
getSelectedItem
().
getValue
();
if
(
render
instanceof
FeatureNode
node
)
{
try
{
controller
.
export
(
node
.
getFeature
());
logger
.
info
(
Localization
.
getText
(
"CityDoctorController.export"
));
}
catch
(
Exception
e
)
{
logger
.
error
(
"Export failed: Unexpected error occurred"
);
logger
.
error
(
e
);
}
}
else
{
logger
.
info
(
Localization
.
getText
(
"MainWindow.infoTopLevelExport"
));
}
});
menu
.
getItems
().
add
(
mi
);
MenuItem
clipMi
=
new
MenuItem
(
Localization
.
getText
(
"MainWindow.copyId"
));
clipMi
.
setOnAction
(
ea
->
{
Renderable
render
=
featureView
.
getSelectionModel
().
getSelectedItem
().
getValue
();
if
(
render
instanceof
FeatureNode
node
)
{
Clipboard
clipboard
=
getSystemClipboard
();
ClipboardContent
content
=
new
ClipboardContent
();
content
.
putString
(
node
.
getFeature
().
getGmlId
().
toString
());
if
(!
clipboard
.
setContent
(
content
))
{
logger
.
warn
(
Localization
.
getText
(
"MainWindow.warnCopyIdFailed"
));
}
}
else
{
logger
.
info
(
Localization
.
getText
(
"MainWindow.infoTopLevelCopyID"
));
}
});
menu
.
getItems
().
add
(
clipMi
);
MenuItem
deleteMi
=
new
MenuItem
(
Localization
.
getText
(
"MainWindow.delete"
));
deleteMi
.
setOnAction
(
ae
->
controller
.
delete
(
featureView
.
getSelectionModel
().
getSelectedItem
()));
menu
.
getItems
().
add
(
deleteMi
);
featureView
.
setContextMenu
(
menu
);
}
private
void
setupSelectListener
(
TreeView
<
Renderable
>
view
)
{
...
...
This diff is collapsed.
Click to expand it.
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