OptionsManager.java 13 KB

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