OptionsManager.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. package de.tu_darmstadt.informatik.tk.scopviz.ui;
  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import org.graphstream.ui.graphicGraph.GraphicEdge.EdgeGroup;
  5. import com.sun.prism.paint.Color;
  6. import de.tu_darmstadt.informatik.tk.scopviz.ui.mapView.CustomWaypointRenderer;
  7. import de.tu_darmstadt.informatik.tk.scopviz.ui.mapView.EdgePainter;
  8. import de.tu_darmstadt.informatik.tk.scopviz.ui.mapView.MapViewFunctions;
  9. import de.tu_darmstadt.informatik.tk.scopviz.ui.mapView.WorldView;
  10. import javafx.application.Platform;
  11. import javafx.collections.FXCollections;
  12. import javafx.collections.ObservableList;
  13. import javafx.geometry.Insets;
  14. import javafx.scene.control.Button;
  15. import javafx.scene.control.ButtonBar.ButtonData;
  16. import javafx.scene.control.ButtonType;
  17. import javafx.scene.control.ChoiceBox;
  18. import javafx.scene.control.Dialog;
  19. import javafx.scene.control.Label;
  20. import javafx.scene.control.RadioButton;
  21. import javafx.scene.control.TextField;
  22. import javafx.scene.layout.GridPane;
  23. /**
  24. * manages the settings of the program also stores the constants
  25. *
  26. * @author Jascha Bohne
  27. * @version 1.0.0.0
  28. */
  29. public final class OptionsManager {
  30. // SETTINGS
  31. /** The Default Weight for all new Edges. */
  32. private static int defaultWeight = 0;
  33. /** Flag whether to show the weight labels on Edges. */
  34. private static boolean showWeight = true;
  35. /** The default latitude of nodes (defaults to Piloty Building) */
  36. private static double defaultLat = 49.877559;
  37. /** The default longitude of nodes (defaults to Piloty Building) */
  38. private static double defaultLong = 8.654546;
  39. /** If the default coordinates have been changed */
  40. private static boolean coordinatesChanged = false;
  41. /**
  42. * the default device size
  43. */
  44. private static int defaultDeviceSize = 50;
  45. /**
  46. * the default thickness of edges
  47. */
  48. private static int defaultEdgeThickness = 2;
  49. /**
  50. * default Color theme in symbol layer
  51. */
  52. private static String defaultStandardEdgeColor = "Black";
  53. private static String defaultClickedEdgeColor = "Red";
  54. private static String defaultPlacementColor = "Blue";
  55. private static String defaultStandardDeviceColor = "Black";
  56. private static String defaultClickedDeviceColor = "Red";
  57. /**
  58. * Private Constructor to prevent Instantiation.
  59. */
  60. private OptionsManager() {
  61. }
  62. /**
  63. * opens a dialog that can be used to edit options
  64. */
  65. public static void openOptionsDialog() {
  66. // Create new Dialog
  67. Dialog<ArrayList<String>> addPropDialog = new Dialog<>();
  68. addPropDialog.setTitle("Preferences");
  69. ButtonType addButtonType = new ButtonType("save & exit", ButtonData.OK_DONE);
  70. addPropDialog.getDialogPane().getButtonTypes().addAll(addButtonType, ButtonType.CANCEL);
  71. // create grid
  72. GridPane grid = new GridPane();
  73. grid.setHgap(10);
  74. grid.setVgap(10);
  75. grid.setPadding(new Insets(20, 150, 10, 10));
  76. // create dialog elements
  77. TextField defaultWeightField = new TextField(Integer.toString(defaultWeight));
  78. RadioButton showWeightButton = new RadioButton();
  79. showWeightButton.setSelected(showWeight);
  80. ChoiceBox<String> nodeGraphicsSelector = new ChoiceBox<String>();
  81. if (StylesheetManager.getAllNodeGraphics() != null) {
  82. ObservableList<String> styles = FXCollections
  83. .observableArrayList(Arrays.asList(StylesheetManager.getAllNodeGraphics()));
  84. nodeGraphicsSelector.setItems(FXCollections.observableArrayList(styles));
  85. nodeGraphicsSelector.getSelectionModel().select(StylesheetManager.getNodeGraphics());
  86. }
  87. TextField defaultLatitudeField = new TextField(Double.toString(defaultLat));
  88. TextField defaultLongitudeField = new TextField(Double.toString(defaultLong));
  89. // Symbol Layer options
  90. ChoiceBox<String> edgeSelectedColorSymbolLayer = new ChoiceBox<String>();
  91. edgeSelectedColorSymbolLayer.setItems(FXCollections.observableArrayList("Red", "Black", "Blue", "Green", "Yellow", "Orange", "Gray"));
  92. edgeSelectedColorSymbolLayer.getSelectionModel().select(EdgePainter.getClickedColor());
  93. ChoiceBox<String> edgePlacementColorSymbolLayer = new ChoiceBox<String>();
  94. edgePlacementColorSymbolLayer.setItems(FXCollections.observableArrayList("Blue", "Black", "Red", "Green", "Yellow", "Orange", "Gray"));
  95. edgePlacementColorSymbolLayer.getSelectionModel().select(EdgePainter.getPlacementColor());
  96. ChoiceBox<String> edgeStandardColorSymbolLayer = new ChoiceBox<String>();
  97. edgeStandardColorSymbolLayer.setItems(FXCollections.observableArrayList("Black", "Red", "Blue", "Green", "Yellow", "Orange", "Gray"));
  98. edgeStandardColorSymbolLayer.getSelectionModel().select(EdgePainter.getStandardColor());
  99. ChoiceBox<String> waypointStandardColorSymbolLayer = new ChoiceBox<String>();
  100. waypointStandardColorSymbolLayer.setItems(FXCollections.observableArrayList("Black", "Red", "Blue", "Green", "Yellow", "Orange", "Gray"));
  101. waypointStandardColorSymbolLayer.getSelectionModel().select(CustomWaypointRenderer.getStandardColor());
  102. ChoiceBox<String> waypointSelectedColorSymbolLayer = new ChoiceBox<String>();
  103. waypointSelectedColorSymbolLayer.setItems(FXCollections.observableArrayList("Red", "Black", "Blue", "Green", "Yellow", "Orange", "Gray"));
  104. waypointSelectedColorSymbolLayer.getSelectionModel().select(CustomWaypointRenderer.getClickedColor());
  105. TextField edgeThickness = new TextField(Integer.toString(EdgePainter.getThickness()));
  106. TextField deviceSize = new TextField(Integer.toString(CustomWaypointRenderer.getDeviceSize()));
  107. Button resetButton = new Button("Reset");
  108. resetButton.setOnAction((event) -> {
  109. edgeThickness.setText(Integer.toString(defaultEdgeThickness));
  110. deviceSize.setText(Integer.toString(defaultDeviceSize));
  111. edgeStandardColorSymbolLayer.getSelectionModel().select(defaultStandardEdgeColor);
  112. edgePlacementColorSymbolLayer.getSelectionModel().select(defaultPlacementColor);
  113. edgeSelectedColorSymbolLayer.getSelectionModel().select(defaultClickedEdgeColor);
  114. waypointStandardColorSymbolLayer.getSelectionModel().select(defaultStandardDeviceColor);
  115. waypointSelectedColorSymbolLayer.getSelectionModel().select(defaultClickedDeviceColor);
  116. });
  117. // position elements on grid
  118. int row = 0;
  119. grid.add(new Label("Default weight of edges:"), 0, row);
  120. grid.add(defaultWeightField, 1, row);
  121. row++;
  122. grid.add(new Label("Show weight of edges in the graph viewer"), 0, row);
  123. grid.add(showWeightButton, 1, row);
  124. row++;
  125. if (StylesheetManager.getAllNodeGraphics().length > 1) {
  126. grid.add(new Label("Node display:"), 0, row);
  127. grid.add(nodeGraphicsSelector, 1, row);
  128. row++;
  129. }
  130. grid.add(new Label("Default Coordinates of Nodes without Coordinates" + (coordinatesChanged ? ":" : ".")), 0,
  131. row);
  132. grid.add(new Label(coordinatesChanged ? "" : "At the Moment set to Piloty building TU Darmstadt:"), 1, row);
  133. row++;
  134. grid.add(new Label("Latitude:"), 0, row);
  135. grid.add(defaultLatitudeField, 1, row);
  136. row++;
  137. grid.add(new Label("Longitude:"), 0, row);
  138. grid.add(defaultLongitudeField, 1, row);
  139. row++;
  140. // symbol layer stuff
  141. grid.add(new Label(""), 1, row); row++;
  142. grid.add(new Label("Symbol-Layer Options"), 1, row); row++;
  143. grid.add(new Label("Device Size (int):"), 0, row);
  144. grid.add(deviceSize, 1, row); row++;
  145. grid.add(new Label("Edge thickness (int):"), 0, row);
  146. grid.add(edgeThickness, 1, row); row++;
  147. grid.add(new Label(""), 1, row); row++;
  148. grid.add(new Label("Edge Colors"), 1, row); row++;
  149. grid.add(new Label("Standard Edge Color"), 0, row);
  150. grid.add(edgeStandardColorSymbolLayer, 1, row); row++;
  151. grid.add(new Label("Clicked Edge Color"), 0, row);
  152. grid.add(edgeSelectedColorSymbolLayer, 1, row); row++;
  153. grid.add(new Label("Placement Edge Color"), 0, row);
  154. grid.add(edgePlacementColorSymbolLayer, 1, row); row++;
  155. grid.add(new Label("Device Colors"), 1, row); row++;
  156. grid.add(new Label("Standard Device Color"), 0, row);
  157. grid.add(waypointStandardColorSymbolLayer, 1, row); row++;
  158. grid.add(new Label("Clicked Device Color"), 0, row);
  159. grid.add(waypointSelectedColorSymbolLayer, 1, row); row++;
  160. grid.add(new Label(""), 1, row); row++;
  161. grid.add(resetButton, 1, row);
  162. // set dialog
  163. addPropDialog.getDialogPane().setContent(grid);
  164. Platform.runLater(() -> defaultWeightField.requestFocus());
  165. // get new property values
  166. addPropDialog.setResultConverter(dialogButton -> {
  167. if (dialogButton == addButtonType) {
  168. try {
  169. defaultWeight = Integer.parseInt(defaultWeightField.getText());
  170. if (defaultLat != Double.parseDouble(defaultLatitudeField.getText())
  171. || defaultLong != Double.parseDouble(defaultLongitudeField.getText())) {
  172. coordinatesChanged = true;
  173. defaultLat = Double.parseDouble(defaultLatitudeField.getText());
  174. defaultLong = Double.parseDouble(defaultLongitudeField.getText());
  175. }
  176. // symbol layer edge thickness
  177. if(Integer.parseInt(edgeThickness.getText()) != EdgePainter.getThickness()) {
  178. EdgePainter.setEdgeThickness(Integer.parseInt(edgeThickness.getText()));
  179. }
  180. // symbol layer waypoint size
  181. if(Integer.parseInt(deviceSize.getText()) != CustomWaypointRenderer.getDeviceSize()) {
  182. CustomWaypointRenderer.setScaleSize(Integer.parseInt(deviceSize.getText()));
  183. MapViewFunctions.resetImageMap();
  184. MapViewFunctions.initializeWaypointImages();
  185. }
  186. } catch (NumberFormatException e) {
  187. }
  188. showWeight = showWeightButton.isSelected();
  189. StylesheetManager.adjustNodeGraphics(nodeGraphicsSelector.getValue());
  190. // color types of waypoints and edges
  191. EdgePainter.setColor(edgeStandardColorSymbolLayer.getValue(), edgePlacementColorSymbolLayer.getValue(), edgeSelectedColorSymbolLayer.getValue());
  192. CustomWaypointRenderer.setColor(waypointStandardColorSymbolLayer.getValue(), waypointSelectedColorSymbolLayer.getValue());
  193. WorldView.internMapViewer.repaint();
  194. return null;
  195. } else
  196. return null;
  197. });
  198. addPropDialog.showAndWait();
  199. }
  200. /**
  201. * @return the defaultLat
  202. */
  203. public static double getDefaultLat() {
  204. return defaultLat;
  205. }
  206. /**
  207. * @return the defaultLong
  208. */
  209. public static double getDefaultLong() {
  210. return defaultLong;
  211. }
  212. /**
  213. * Returns the default weight for new Edges.
  214. *
  215. * @return the default weight
  216. */
  217. public static int getDefaultWeight() {
  218. return defaultWeight;
  219. }
  220. /**
  221. * Sets the default weight for new Edges.
  222. *
  223. * @param defaultWeight
  224. * the defaultWeight to set
  225. */
  226. public static void setDefaultWeight(int defaultWeight) {
  227. OptionsManager.defaultWeight = defaultWeight;
  228. }
  229. /**
  230. * Returns whether Edge weight should be displayed as labels.
  231. *
  232. * @return true if weight should be shown, false otherwise
  233. */
  234. public static boolean isWeightShown() {
  235. return showWeight;
  236. }
  237. /**
  238. * Sets the Flag whether Edge weight should be displayed as labels.
  239. *
  240. * @param showWeight
  241. * the showWeight to set
  242. */
  243. public static void setShowWeight(boolean showWeight) {
  244. OptionsManager.showWeight = showWeight;
  245. }
  246. }