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
38c8db7d
Commit
38c8db7d
authored
Apr 08, 2025
by
Riegel
Browse files
Refactor: Generalize FeatureTab-node implementation
parent
ac5a3aa7
Changes
5
Hide whitespace changes
Inline
Side-by-side
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/MainWindow.java
View file @
38c8db7d
...
@@ -6,7 +6,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.BoundingBox;
...
@@ -6,7 +6,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.BoundingBox;
import
de.hft.stuttgart.citydoctor2.datastructure.CityObject
;
import
de.hft.stuttgart.citydoctor2.datastructure.CityObject
;
import
de.hft.stuttgart.citydoctor2.datastructure.FeatureType
;
import
de.hft.stuttgart.citydoctor2.datastructure.FeatureType
;
import
de.hft.stuttgart.citydoctor2.gui.logger.GuiLogger
;
import
de.hft.stuttgart.citydoctor2.gui.logger.GuiLogger
;
import
de.hft.stuttgart.citydoctor2.gui.tree.FeatureNode
;
import
de.hft.stuttgart.citydoctor2.gui.tree.Renderable
;
import
de.hft.stuttgart.citydoctor2.gui.tree.Renderable
;
import
de.hft.stuttgart.citydoctor2.gui.tree.RenderableTreeCell
;
import
de.hft.stuttgart.citydoctor2.gui.tree.RenderableTreeCell
;
import
de.hft.stuttgart.citydoctor2.parameter.ArgumentParser
;
import
de.hft.stuttgart.citydoctor2.parameter.ArgumentParser
;
...
@@ -45,7 +44,6 @@ import java.io.FileNotFoundException;
...
@@ -45,7 +44,6 @@ import java.io.FileNotFoundException;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.util.*
;
import
java.util.*
;
import
static
javafx
.
scene
.
input
.
Clipboard
.
getSystemClipboard
;
public
class
MainWindow
extends
Application
{
public
class
MainWindow
extends
Application
{
...
@@ -789,46 +787,35 @@ public class MainWindow extends Application {
...
@@ -789,46 +787,35 @@ public class MainWindow extends Application {
private
void
setupFeatureTabContextMenu
(
TreeView
<
Renderable
>
featureView
)
{
private
void
setupFeatureTabContextMenu
(
TreeView
<
Renderable
>
featureView
)
{
ContextMenu
menu
=
new
ContextMenu
();
ContextMenu
menu
=
new
ContextMenu
();
MenuItem
mi
=
new
MenuItem
(
Localization
.
getText
(
"MainWindow.export"
));
MenuItem
exportOption
=
new
MenuItem
(
Localization
.
getText
(
"MainWindow.export"
));
mi
.
setOnAction
(
ea
->
{
exportOption
.
setOnAction
(
ea
->
{
Renderable
render
=
featureView
.
getSelectionModel
().
getSelectedItem
().
getValue
();
Renderable
node
=
featureView
.
getSelectionModel
().
getSelectedItem
().
getValue
();
if
(
render
instanceof
FeatureNode
node
)
{
fetchExportAction
(
node
);
try
{
controller
.
export
(
node
.
getFeature
());
logger
.
info
(
Localization
.
getText
(
"CityDoctorController.exportSuccess"
));
}
catch
(
Exception
e
)
{
logger
.
error
(
"Export failed: Unexpected error occurred"
);
logger
.
error
(
e
);
}
}
else
{
logger
.
info
(
Localization
.
getText
(
"MainWindow.infoTopLevelExport"
));
}
});
});
menu
.
getItems
().
add
(
mi
);
menu
.
getItems
().
add
(
exportOption
);
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"
));
}
MenuItem
copyToClipboardOption
=
new
MenuItem
(
Localization
.
getText
(
"MainWindow.copyId"
));
copyToClipboardOption
.
setOnAction
(
ea
->
{
Renderable
node
=
featureView
.
getSelectionModel
().
getSelectedItem
().
getValue
();
fetchCopyAction
(
node
);
});
});
menu
.
getItems
().
add
(
c
lipMi
);
menu
.
getItems
().
add
(
c
opyToClipboardOption
);
MenuItem
delete
Mi
=
new
MenuItem
(
Localization
.
getText
(
"MainWindow.delete"
));
MenuItem
delete
Option
=
new
MenuItem
(
Localization
.
getText
(
"MainWindow.delete"
));
delete
Mi
.
setOnAction
(
ae
->
controller
.
delete
(
featureView
.
getSelectionModel
().
getSelectedItem
()));
delete
Option
.
setOnAction
(
ae
->
controller
.
delete
(
featureView
.
getSelectionModel
().
getSelectedItem
()));
menu
.
getItems
().
add
(
delete
Mi
);
menu
.
getItems
().
add
(
delete
Option
);
featureView
.
setContextMenu
(
menu
);
featureView
.
setContextMenu
(
menu
);
}
}
public
void
fetchCopyAction
(
Renderable
node
)
{
node
.
getClipboardAction
(
this
);
}
public
void
fetchExportAction
(
Renderable
node
)
{
node
.
getFeatureExportAction
(
this
);
}
private
void
setupSelectListener
(
TreeView
<
Renderable
>
view
)
{
private
void
setupSelectListener
(
TreeView
<
Renderable
>
view
)
{
view
.
getSelectionModel
().
selectedItemProperty
().
addListener
((
obs
,
oldI
,
newI
)
->
{
view
.
getSelectionModel
().
selectedItemProperty
().
addListener
((
obs
,
oldI
,
newI
)
->
{
if
(
newI
!=
null
)
{
if
(
newI
!=
null
)
{
...
...
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/CityObjectGroupNode.java
0 → 100644
View file @
38c8db7d
package
de.hft.stuttgart.citydoctor2.gui.tree
;
import
de.hft.stuttgart.citydoctor2.datastructure.CityObject
;
import
de.hft.stuttgart.citydoctor2.gui.Renderer
;
import
javafx.scene.paint.Color
;
import
java.util.List
;
public
class
CityObjectGroupNode
extends
Renderable
{
private
final
List
<?
extends
CityObject
>
cityObjects
;
private
final
Color
renderColor
;
private
final
String
nodeText
;
public
CityObjectGroupNode
(
List
<?
extends
CityObject
>
cityObjects
,
String
nodeText
,
Color
renderColor
)
{
this
.
cityObjects
=
cityObjects
;
this
.
nodeText
=
nodeText
;
this
.
renderColor
=
renderColor
;
}
@Override
public
void
refreshTextColor
()
{
// no color changes
}
@Override
public
String
getText
()
{
return
nodeText
;
}
@Override
public
void
visit
(
Renderer
renderer
)
{
renderer
.
renderCityObjects
(
cityObjects
,
renderColor
);
}
}
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/CityObjectNode.java
View file @
38c8db7d
...
@@ -3,9 +3,13 @@ package de.hft.stuttgart.citydoctor2.gui.tree;
...
@@ -3,9 +3,13 @@ package de.hft.stuttgart.citydoctor2.gui.tree;
import
de.hft.stuttgart.citydoctor2.datastructure.CityObject
;
import
de.hft.stuttgart.citydoctor2.datastructure.CityObject
;
import
de.hft.stuttgart.citydoctor2.gui.CheckStatus
;
import
de.hft.stuttgart.citydoctor2.gui.CheckStatus
;
import
de.hft.stuttgart.citydoctor2.gui.Renderer
;
import
de.hft.stuttgart.citydoctor2.gui.Renderer
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
public
class
CityObjectNode
extends
Renderable
implements
FeatureNode
{
public
class
CityObjectNode
extends
Renderable
implements
FeatureNode
{
private
static
final
Logger
logger
=
LogManager
.
getLogger
(
CityObjectNode
.
class
);
private
final
CityObject
co
;
private
final
CityObject
co
;
public
CityObjectNode
(
CityObject
co
)
{
public
CityObjectNode
(
CityObject
co
)
{
...
@@ -38,4 +42,5 @@ public class CityObjectNode extends Renderable implements FeatureNode{
...
@@ -38,4 +42,5 @@ public class CityObjectNode extends Renderable implements FeatureNode{
return
co
;
return
co
;
}
}
}
}
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/Renderable.java
View file @
38c8db7d
package
de.hft.stuttgart.citydoctor2.gui.tree
;
package
de.hft.stuttgart.citydoctor2.gui.tree
;
import
de.hft.stuttgart.citydoctor2.gui.CheckStatus
;
import
de.hft.stuttgart.citydoctor2.gui.CheckStatus
;
import
de.hft.stuttgart.citydoctor2.gui.MainWindow
;
import
de.hft.stuttgart.citydoctor2.gui.Renderer
;
import
de.hft.stuttgart.citydoctor2.gui.Renderer
;
import
de.hft.stuttgart.citydoctor2.utils.Localization
;
import
javafx.beans.property.ObjectProperty
;
import
javafx.beans.property.ObjectProperty
;
import
javafx.beans.property.SimpleObjectProperty
;
import
javafx.beans.property.SimpleObjectProperty
;
import
javafx.scene.input.Clipboard
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
static
javafx
.
scene
.
input
.
Clipboard
.
getSystemClipboard
;
public
abstract
class
Renderable
{
public
abstract
class
Renderable
{
private
final
ObjectProperty
<
CheckStatus
>
statusProperty
=
new
SimpleObjectProperty
<>();
private
final
ObjectProperty
<
CheckStatus
>
statusProperty
=
new
SimpleObjectProperty
<>();
private
static
Logger
logger
=
LogManager
.
getLogger
(
Renderable
.
class
);
/**
/**
* @return the status
* @return the status
*/
*/
...
@@ -31,4 +40,18 @@ public abstract class Renderable {
...
@@ -31,4 +40,18 @@ public abstract class Renderable {
public
abstract
String
getText
();
public
abstract
String
getText
();
public
abstract
void
visit
(
Renderer
renderer
);
public
abstract
void
visit
(
Renderer
renderer
);
public
void
getClipboardAction
(
MainWindow
mainWindow
)
{
Clipboard
clipboard
=
getSystemClipboard
();
clipboard
.
clear
();
if
(
logger
.
isInfoEnabled
())
{
logger
.
info
(
Localization
.
getText
(
"MainWindow.infoTopLevelCopyID"
));
}
}
public
void
getFeatureExportAction
(
MainWindow
mainWindow
)
{
if
(
logger
.
isInfoEnabled
())
{
logger
.
info
(
Localization
.
getText
(
"MainWindow.infoTopLevelExport"
));
}
}
}
}
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/TopLevelCityObjectNode.java
0 → 100644
View file @
38c8db7d
package
de.hft.stuttgart.citydoctor2.gui.tree
;
import
de.hft.stuttgart.citydoctor2.datastructure.CityObject
;
import
de.hft.stuttgart.citydoctor2.gui.MainWindow
;
import
de.hft.stuttgart.citydoctor2.utils.Localization
;
import
javafx.scene.input.Clipboard
;
import
javafx.scene.input.ClipboardContent
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
static
javafx
.
scene
.
input
.
Clipboard
.
getSystemClipboard
;
public
class
TopLevelCityObjectNode
extends
CityObjectNode
{
private
static
final
Logger
logger
=
LogManager
.
getLogger
(
TopLevelCityObjectNode
.
class
);
public
TopLevelCityObjectNode
(
CityObject
co
)
{
super
(
co
);
}
@Override
public
void
getClipboardAction
(
MainWindow
mainWindow
)
{
Clipboard
clipboard
=
getSystemClipboard
();
ClipboardContent
content
=
new
ClipboardContent
();
content
.
putString
(
this
.
getFeature
().
getGmlId
().
toString
());
if
(!
clipboard
.
setContent
(
content
))
{
if
(
logger
.
isWarnEnabled
())
{
logger
.
warn
(
Localization
.
getText
(
"MainWindow.warnCopyIdFailed"
));
}
}
}
@Override
public
void
getFeatureExportAction
(
MainWindow
mainWindow
)
{
try
{
mainWindow
.
getController
().
export
(
this
.
getFeature
());
if
(
logger
.
isWarnEnabled
())
{
logger
.
info
(
Localization
.
getText
(
"CityDoctorController.exportSuccess"
));
}
}
catch
(
Exception
e
)
{
logger
.
error
(
"Export failed: Unexpected error occurred"
);
logger
.
error
(
e
);
}
}
}
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