GUIController.java 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613
  1. package de.tu_darmstadt.informatik.tk.scopviz.ui;
  2. import java.net.URL;
  3. import java.util.ArrayList;
  4. import java.util.ResourceBundle;
  5. import javax.swing.JPanel;
  6. import javax.swing.event.MouseInputListener;
  7. import org.jxmapviewer.JXMapViewer;
  8. import org.jxmapviewer.input.CenterMapListener;
  9. import org.jxmapviewer.input.PanKeyListener;
  10. import org.jxmapviewer.input.PanMouseInputListener;
  11. import org.jxmapviewer.input.ZoomMouseWheelListenerCursor;
  12. import de.tu_darmstadt.informatik.tk.scopviz.debug.Debug;
  13. import de.tu_darmstadt.informatik.tk.scopviz.main.Layer;
  14. import de.tu_darmstadt.informatik.tk.scopviz.main.Main;
  15. import de.tu_darmstadt.informatik.tk.scopviz.ui.handlers.KeyboardShortcuts;
  16. import de.tu_darmstadt.informatik.tk.scopviz.ui.handlers.ResizeListener;
  17. import de.tu_darmstadt.informatik.tk.scopviz.ui.mapView.MapViewFunctions;
  18. import de.tu_darmstadt.informatik.tk.scopviz.ui.mapView.WorldView;
  19. import javafx.application.Platform;
  20. import javafx.beans.value.ChangeListener;
  21. import javafx.beans.value.ObservableValue;
  22. import javafx.collections.FXCollections;
  23. import javafx.embed.swing.SwingNode;
  24. import javafx.fxml.FXML;
  25. import javafx.fxml.Initializable;
  26. import javafx.scene.control.Button;
  27. import javafx.scene.control.CheckBox;
  28. import javafx.scene.control.ChoiceBox;
  29. import javafx.scene.control.ComboBox;
  30. import javafx.scene.control.Label;
  31. import javafx.scene.control.MenuItem;
  32. import javafx.scene.control.ScrollPane;
  33. import javafx.scene.control.TableColumn;
  34. import javafx.scene.control.TableRow;
  35. import javafx.scene.control.TableView;
  36. import javafx.scene.control.Tooltip;
  37. import javafx.scene.control.cell.CheckBoxTableCell;
  38. import javafx.scene.control.cell.PropertyValueFactory;
  39. import javafx.scene.control.cell.TextFieldTableCell;
  40. import javafx.scene.layout.AnchorPane;
  41. import javafx.scene.layout.Pane;
  42. import javafx.scene.layout.StackPane;
  43. import javafx.scene.layout.VBox;
  44. import javafx.scene.text.TextFlow;
  45. import javafx.util.Pair;
  46. /**
  47. * Controller class for the various GUI elements, gets instanced and initialized
  48. * by the FXML loading process. Can access GUI elements specified in the FXML
  49. * file through matching variable name here and id attribute in the FXML,
  50. *
  51. * @author Dominik Renkel, Jan Enders
  52. * @version 1.1
  53. *
  54. */
  55. public class GUIController implements Initializable {
  56. // The SwingNode and its containing Pane that house the graph viewer
  57. @FXML
  58. public SwingNode swingNode;
  59. @FXML
  60. public SwingNode swingNodeWorldView;
  61. @FXML
  62. public Pane pane;
  63. @FXML
  64. public StackPane stackPane;
  65. // The buttons present in the UI
  66. @FXML
  67. public Button zoomIn;
  68. @FXML
  69. public Button zoomOut;
  70. @FXML
  71. public Button centerMap;
  72. @FXML
  73. public Button defaultMapView;
  74. @FXML
  75. public Button roadMapView;
  76. @FXML
  77. public Button satelliteMapView;
  78. @FXML
  79. public Button hybridMapView;
  80. @FXML
  81. public Button previousWaypoint;
  82. @FXML
  83. public Button nextWaypoint;
  84. @FXML
  85. public Button underlayButton;
  86. @FXML
  87. public Button operatorButton;
  88. @FXML
  89. public Button mappingButton;
  90. @FXML
  91. public Button symbolRepButton;
  92. // The Toolbar Items
  93. @FXML
  94. public MenuItem newItem;
  95. @FXML
  96. public MenuItem open;
  97. @FXML
  98. public MenuItem add;
  99. @FXML
  100. public MenuItem save;
  101. @FXML
  102. public MenuItem saveAs;
  103. @FXML
  104. public MenuItem preferences;
  105. @FXML
  106. public MenuItem quit;
  107. @FXML
  108. public MenuItem delete;
  109. @FXML
  110. public MenuItem undelete;
  111. @FXML
  112. public MenuItem operators;
  113. @FXML
  114. public MenuItem resetMapping;
  115. @FXML
  116. public MenuItem updateMetricMI;
  117. @FXML
  118. public MenuItem about;
  119. // The contents of the corresponding ScrollPanes
  120. @FXML
  121. public TableView<Pair<Object, String>> toolbox;
  122. @FXML
  123. public TableView<KeyValuePair> properties;
  124. @FXML
  125. public TableView<MetricRowData> metricbox;
  126. // The columns of the toolbox
  127. @FXML
  128. public TableColumn<Pair<Object, String>, String> toolboxStringColumn;
  129. @FXML
  130. public TableColumn<Pair<Object, String>, Object> toolboxObjectColumn;
  131. // The columns of the Properties pane
  132. // TODO: Fix Generic type arguments for propertiesObjectColumn
  133. @FXML
  134. public TableColumn<KeyValuePair, String> propertiesStringColumn;
  135. @FXML
  136. public TableColumn propertiesObjectColumn;
  137. @FXML
  138. public TableColumn<KeyValuePair, String> propertiesTypeColumn;
  139. // The columns of the metricbox
  140. @FXML
  141. public TableColumn<MetricRowData, String> metricBoxMetricColumn;
  142. @FXML
  143. public TableColumn<MetricRowData, String> metricBoxValueColumn;
  144. @FXML
  145. public TableColumn metricBoxUpdateColumn;
  146. @FXML
  147. public Button updateMetricButton;
  148. // The items of the top left box in the symbol visualization layer
  149. @FXML
  150. public VBox symbolToolVBox;
  151. @FXML
  152. public CheckBox edgesVisibleCheckbox;
  153. @FXML
  154. public CheckBox nodeLabelCheckbox;
  155. @FXML
  156. public CheckBox edgeWeightCheckbox;
  157. @FXML
  158. public ChoiceBox<String> mapViewChoiceBox;
  159. @FXML
  160. public VBox rightSide;
  161. @FXML
  162. public ComboBox<String> opGraphSelectionBox;
  163. // The elements needed for the console window
  164. @FXML
  165. public ScrollPane consoleScrollPane;
  166. @FXML
  167. public TextFlow consoleWindow;
  168. // The anchorpane of the top left box (toolbox, symbol visualization layer
  169. // box)
  170. @FXML
  171. public AnchorPane topLeftAPane;
  172. // The anchorpane of the metric update button
  173. @FXML
  174. public AnchorPane updateButtonAPane;
  175. /**
  176. * Initializes all the references to the UI elements specified in the FXML
  177. * file. Gets called during FXML loading. Asserts the correct injection of
  178. * all referenced UI elements and initializes them.
  179. */
  180. @Override
  181. public void initialize(URL arg0, ResourceBundle arg1) {
  182. // Assert the correct injection of all references from FXML
  183. assertFXMLInjections();
  184. initializeToolbox();
  185. initializeProperties();
  186. initializeMetricbox();
  187. // Remove Header for the toolbox
  188. removeHeaderTableView(toolbox);
  189. // Initialize the Managers for the various for UI elements
  190. ToolboxManager.initializeItems();
  191. PropertiesManager.initializeItems(properties);
  192. ConsoleManager.initialize(this);
  193. OperatorManager.initialize(this);
  194. GraphDisplayManager.init(this);
  195. // Bind all the handlers to their corresponding UI elements
  196. initializeZoomButtons();
  197. initializeSymbolLayerButtons();
  198. initializeLayerButton();
  199. initializeOpGraphComboBox();
  200. initializeMenuBar();
  201. initializeSymbolRepToolbox();
  202. initializeDisplayPane();
  203. initializeWorldView();
  204. // Setup the Keyboard Shortcuts
  205. KeyboardShortcuts.initialize(Main.getInstance().getPrimaryStage(), this);
  206. }
  207. private void initializeWorldView() {
  208. JXMapViewer mapViewer = new JXMapViewer();
  209. WorldView.initAttributes(mapViewer, this);
  210. // center map if double clicked / middle clicked
  211. mapViewer.addMouseListener(new CenterMapListener(mapViewer));
  212. // zoom with mousewheel
  213. mapViewer.addMouseWheelListener(new ZoomMouseWheelListenerCursor(mapViewer));
  214. // TODO make this work
  215. mapViewer.addKeyListener(new PanKeyListener(mapViewer));
  216. // "Drag map around" Listener
  217. MouseInputListener mia = new PanMouseInputListener(mapViewer);
  218. mapViewer.addMouseListener(mia);
  219. mapViewer.addMouseMotionListener(mia);
  220. swingNodeWorldView.setContent(mapViewer);
  221. // add resize Listener to the stackPane
  222. stackPane.heightProperty().addListener(new ResizeListener(swingNode, stackPane));
  223. stackPane.widthProperty().addListener(new ResizeListener(swingNode, stackPane));
  224. swingNodeWorldView.setVisible(false);
  225. // bind a context menu to the swing node
  226. swingNodeWorldView.setOnContextMenuRequested((event) -> MapViewFunctions.contextMenuRequest(event));
  227. }
  228. /**
  229. * Initializes the Menu Bar with all its contents.
  230. */
  231. private void initializeMenuBar() {
  232. newItem.setOnAction((event) -> MenuBarManager.newAction(event));
  233. open.setOnAction((event) -> MenuBarManager.openAction(event));
  234. add.setOnAction((event) -> MenuBarManager.addAction(event));
  235. add.setDisable(true);
  236. save.setOnAction((event) -> MenuBarManager.saveAction(event));
  237. saveAs.setOnAction((event) -> MenuBarManager.saveAsAction(event));
  238. preferences.setOnAction((event) -> MenuBarManager.preferencesAction(event));
  239. quit.setOnAction((event) -> MenuBarManager.quitAction(event));
  240. delete.setOnAction((event) -> MenuBarManager.deleteAction(event));
  241. undelete.setOnAction((event) -> MenuBarManager.undeleteAction(event));
  242. operators.setOnAction((event) -> OperatorManager.openOperatorsDialog());
  243. resetMapping.setOnAction((event) -> GraphDisplayManager.initMappingLayer(true));
  244. updateMetricMI.setOnAction((event) -> MetricboxManager.updateMetrics());
  245. updateMetricMI.setDisable(true);
  246. about.setOnAction((event) -> MenuBarManager.aboutAction(event));
  247. }
  248. /**
  249. * Sets the handlers for the zoomin and zoomout buttons.
  250. */
  251. private void initializeZoomButtons() {
  252. zoomIn.setOnAction((event) -> ButtonManager.zoomInAction(event));
  253. zoomOut.setOnAction((event) -> ButtonManager.zoomOutAction(event));
  254. }
  255. /**
  256. * Sets the handlers for the Button that are shown in the symbol layer
  257. */
  258. private void initializeSymbolLayerButtons() {
  259. centerMap.setOnAction((event) -> ButtonManager.centerMapAction(event));
  260. defaultMapView.setOnAction((event) -> ButtonManager.switchToMap("Default"));
  261. roadMapView.setOnAction((event) -> ButtonManager.switchToMap("Road"));
  262. satelliteMapView.setOnAction((event) -> ButtonManager.switchToMap("Satellite"));
  263. hybridMapView.setOnAction((event) -> ButtonManager.switchToMap("Hybrid"));
  264. previousWaypoint.setOnAction((event) -> MapViewFunctions.switchToPreviousWaypoint());
  265. nextWaypoint.setOnAction((event) -> MapViewFunctions.switchToNextWaypoint());
  266. centerMap.setVisible(false);
  267. defaultMapView.setVisible(false);
  268. roadMapView.setVisible(false);
  269. satelliteMapView.setVisible(false);
  270. hybridMapView.setVisible(false);
  271. previousWaypoint.setVisible(false);
  272. nextWaypoint.setVisible(false);
  273. }
  274. /**
  275. * Initializes the special Toolbox for the Symbol Representation Layer.
  276. */
  277. private void initializeSymbolRepToolbox() {
  278. // Hide SymbolRep Toolbox View
  279. topLeftAPane.getChildren().remove(symbolToolVBox);
  280. edgesVisibleCheckbox.selectedProperty()
  281. .addListener((ov, oldVal, newVal) -> ButtonManager.edgeVisibilitySwitcher(ov, oldVal, newVal));
  282. nodeLabelCheckbox.selectedProperty()
  283. .addListener((ov, oldVal, newVal) -> ButtonManager.labelVisibilitySwitcher(ov, oldVal, newVal));
  284. edgeWeightCheckbox.selectedProperty()
  285. .addListener((ov, oldVal, newVal) -> ButtonManager.edgeWeightVisibilitySwitcher(ov, oldVal, newVal));
  286. mapViewChoiceBox.setItems(FXCollections.observableArrayList("Default", "Road", "Satellite", "Hybrid"));
  287. mapViewChoiceBox.getSelectionModel().selectFirst();
  288. mapViewChoiceBox.getSelectionModel().selectedItemProperty()
  289. .addListener((ov, oldVal, newVal) -> ButtonManager.mapViewChoiceChange(ov, oldVal, newVal));
  290. }
  291. /**
  292. * Set the Handlers for the Layer switch Buttons.
  293. */
  294. private void initializeLayerButton() {
  295. underlayButton.setOnAction((event) -> ButtonManager.underlayAction(event));
  296. operatorButton.setOnAction((event) -> ButtonManager.operatorAction(event));
  297. mappingButton.setOnAction((event) -> ButtonManager.mappingAction(event));
  298. symbolRepButton.setOnAction((event) -> ButtonManager.symbolRepAction(event));
  299. Tooltip tip = new Tooltip();
  300. tip.setText("Underlay");
  301. underlayButton.setTooltip(tip);
  302. tip = new Tooltip();
  303. tip.setText("Operator");
  304. operatorButton.setTooltip(tip);
  305. tip = new Tooltip();
  306. tip.setText("Mapping");
  307. mappingButton.setTooltip(tip);
  308. tip = new Tooltip();
  309. tip.setText("Geographical Visualization");
  310. symbolRepButton.setTooltip(tip);
  311. ArrayList<Button> layerButtons = new ArrayList<Button>();
  312. layerButtons.add(underlayButton);
  313. layerButtons.add(operatorButton);
  314. layerButtons.add(mappingButton);
  315. layerButtons.add(symbolRepButton);
  316. ButtonManager.initialize(layerButtons, this, underlayButton);
  317. }
  318. /**
  319. * Sets the minimum size and adds the handlers to the graph display.
  320. */
  321. private void initializeDisplayPane() {
  322. ResizeListener rLis = new ResizeListener(swingNode, pane);
  323. pane.heightProperty().addListener(rLis);
  324. pane.widthProperty().addListener(rLis);
  325. pane.setOnScroll(GraphDisplayManager.scrollHandler);
  326. swingNode.setContent((JPanel) Main.getInstance().getGraphManager().getView());
  327. pane.setMinSize(200, 200);
  328. }
  329. /**
  330. * Initialize the Toolbox.
  331. */
  332. @SuppressWarnings("unchecked")
  333. private void initializeToolbox() {
  334. ToolboxManager.initialize(this);
  335. toolboxStringColumn.setCellValueFactory(new ToolboxManager.PairKeyFactory());
  336. toolboxObjectColumn.setCellValueFactory(new ToolboxManager.PairValueFactory());
  337. toolboxObjectColumn.setCellFactory((column) -> {
  338. return new ToolboxManager.PairValueCell();
  339. });
  340. toolbox.getColumns().setAll(toolboxObjectColumn, toolboxStringColumn);
  341. toolbox.getSelectionModel().selectedItemProperty()
  342. .addListener((ov, oldVal, newVal) -> ToolboxManager.selectedItemChanged(ov, oldVal, newVal));
  343. // Click event for TableView row
  344. toolbox.setRowFactory(tv -> {
  345. TableRow<Pair<Object, String>> row = new TableRow<>();
  346. row.setOnMouseClicked((event) -> ToolboxManager.rowClickedHandler(event));
  347. return row;
  348. });
  349. // nothing is selected at the start
  350. toolbox.getSelectionModel().clearSelection();
  351. }
  352. /**
  353. * Initialize the Properties Window.
  354. */
  355. @SuppressWarnings("unchecked")
  356. private void initializeProperties() {
  357. propertiesObjectColumn.setResizable(true);
  358. propertiesStringColumn.setResizable(true);
  359. propertiesStringColumn.setCellValueFactory(new PropertyValueFactory<KeyValuePair, String>("key"));
  360. propertiesObjectColumn.setCellValueFactory(new PropertyValueFactory<KeyValuePair, Object>("value"));
  361. propertiesObjectColumn.setCellFactory(TextFieldTableCell.forTableColumn());
  362. propertiesObjectColumn.setOnEditCommit(PropertiesManager.setOnEditCommitHandler);
  363. propertiesTypeColumn.setCellValueFactory(new PropertyValueFactory<KeyValuePair, String>("classTypeAsString"));
  364. properties.getColumns().setAll(propertiesStringColumn, propertiesObjectColumn, propertiesTypeColumn);
  365. properties.setRowFactory(PropertiesManager.rightClickCallback);
  366. properties.setPlaceholder(new Label("No graph element selected"));
  367. properties.getSelectionModel().clearSelection();
  368. }
  369. /**
  370. * Initialize the metric box
  371. */
  372. @SuppressWarnings("unchecked")
  373. private void initializeMetricbox() {
  374. // TODO Möglicherweise auslagern
  375. metricbox.setRowFactory(tv -> {
  376. TableRow<MetricRowData> row = new TableRow<>();
  377. row.setOnMouseClicked(event -> {
  378. if (event.getClickCount() == 2 && (!row.isEmpty())) {
  379. MetricRowData rowData = row.getItem();
  380. if (rowData.getMetric().isSetupRequired()) {
  381. rowData.getMetric().setup();
  382. }
  383. }
  384. });
  385. return row;
  386. });
  387. metricBoxMetricColumn.setResizable(true);
  388. metricBoxValueColumn.setResizable(true);
  389. metricBoxMetricColumn.setCellValueFactory(new PropertyValueFactory<MetricRowData, String>("metricName"));
  390. metricBoxValueColumn.setCellValueFactory(new PropertyValueFactory<MetricRowData, String>("value"));
  391. metricBoxUpdateColumn.setCellValueFactory(new PropertyValueFactory<>("checked"));
  392. metricBoxUpdateColumn.setCellFactory(CheckBoxTableCell.forTableColumn(metricBoxUpdateColumn));
  393. metricbox.getColumns().setAll(metricBoxMetricColumn, metricBoxValueColumn, metricBoxUpdateColumn);
  394. MetricboxManager.initialize(this);
  395. // Update button initialization
  396. updateMetricButton.setOnAction((event) -> MetricboxManager.updateMetrics());
  397. rightSide.getChildren().remove(updateButtonAPane);
  398. }
  399. /**
  400. * Initialize the operator graph combo box
  401. */
  402. private void initializeOpGraphComboBox() {
  403. opGraphSelectionBox.setVisible(false);
  404. ButtonManager.setupOpGraphComboBox();
  405. // initialization of the values of the box
  406. Platform.runLater(() -> opGraphSelectionBox.setValue(opGraphSelectionBox.getItems().get(0)));
  407. opGraphSelectionBox.setOnAction((v) -> ButtonManager.opGraphSelectedAction(v));
  408. /*
  409. opGraphSelectionBox.setOnAction((v) -> {
  410. if (opGraphSelectionBox.getValue().equals("Add...")) {
  411. // add Dialog erscheint, Operator Graph wird importiert und fügt
  412. // neuen Punkt in ComboBox hinzu
  413. // per
  414. // opGraphSelectionBox.getItems().add(opGraphSelectionBox.getItems().size()
  415. // - 1, "");
  416. Debug.out("add Operator");
  417. Platform.runLater(() -> opGraphSelectionBox.setValue(firstOpGraph));
  418. } else {
  419. // wechselt auf Operatorgraph mit diesem Namen
  420. }
  421. });*/
  422. }
  423. /**
  424. * Removes the TableView Header for a given TableView
  425. *
  426. * @param tableView
  427. */
  428. private void removeHeaderTableView(TableView<?> tableView) {
  429. tableView.widthProperty().addListener(new ChangeListener<Number>() {
  430. @Override
  431. public void changed(ObservableValue<? extends Number> ov, Number t, Number t1) {
  432. // Get the table header
  433. Pane header = (Pane) tableView.lookup("TableHeaderRow");
  434. if (header != null && header.isVisible()) {
  435. header.setMaxHeight(0);
  436. header.setMinHeight(0);
  437. header.setPrefHeight(0);
  438. header.setVisible(false);
  439. header.setManaged(false);
  440. }
  441. }
  442. });
  443. }
  444. /**
  445. * Asserts the correct Injection of all Elements from the FXML File.
  446. */
  447. private void assertFXMLInjections() {
  448. assert swingNode != null : "fx:id=\"swingNode\" was not injected: check your FXML file 'MainWindow.fxml'.";
  449. assert pane != null : "fx:id=\"pane\" was not injected: check your FXML file 'MainWindow.fxml'.";
  450. assert zoomIn != null : "fx:id=\"zoomIn\" was not injected: check your FXML file 'MainWindow.fxml'.";
  451. assert zoomOut != null : "fx:id=\"zoomOut\" was not injected: check your FXML file 'MainWindow.fxml'.";
  452. assert centerMap != null : "fx:id=\"centerMap\" was not injected: check your FXML file 'MainWindow.fxml'.";
  453. assert defaultMapView != null : "fx:id=\"defaultMapView\" was not injected: check your FXML file 'MainWindow.fxml'.";
  454. assert roadMapView != null : "fx:id=\"roadMapView\" was not injected: check your FXML file 'MainWindow.fxml'.";
  455. assert satelliteMapView != null : "fx:id=\"satelliteMapView\" was not injected: check your FXML file 'MainWindow.fxml'.";
  456. assert hybridMapView != null : "fx:id=\"hybridMapView\" was not injected: check your FXML file 'MainWindow.fxml'.";
  457. assert previousWaypoint != null : "fx:id=\"previousWaypoint\" was not injected: check your FXML file 'MainWindow.fxml'.";
  458. assert nextWaypoint != null : "fx:id=\"nextWaypoint\" was not injected: check your FXML file 'MainWindow.fxml'.";
  459. assert underlayButton != null : "fx:id=\"underlayButton\" was not injected: check your FXML file 'MainWindow.fxml'.";
  460. assert operatorButton != null : "fx:id=\"operatorButton\" was not injected: check your FXML file 'MainWindow.fxml'.";
  461. assert mappingButton != null : "fx:id=\"mappingButton\" was not injected: check your FXML file 'MainWindow.fxml'.";
  462. assert symbolRepButton != null : "fx:id=\"symbolRepButton\" was not injected: check your FXML file 'MainWindow.fxml'.";
  463. assert newItem != null : "fx:id=\"newItem\" was not injected: check your FXML file 'MainWindow.fxml'.";
  464. assert open != null : "fx:id=\"open\" was not injected: check your FXML file 'MainWindow.fxml'.";
  465. assert add != null : "fx:id=\"add\" was not injected: check your FXML file 'MainWindow.fxml'.";
  466. assert save != null : "fx:id=\"save\" was not injected: check your FXML file 'MainWindow.fxml'.";
  467. assert saveAs != null : "fx:id=\"saveAs\" was not injected: check your FXML file 'MainWindow.fxml'.";
  468. assert preferences != null : "fx:id=\"preferences\" was not injected: check your FXML file 'MainWindow.fxml'.";
  469. assert quit != null : "fx:id=\"quit\" was not injected: check your FXML file 'MainWindow.fxml'.";
  470. assert delete != null : "fx:id=\"delete\" was not injected: check your FXML file 'MainWindow.fxml'.";
  471. assert undelete != null : "fx:id=\"undelete\" was not injected: check your FXML file 'MainWindow.fxml'.";
  472. assert operators != null : "fx:id=\"operators\" was not injected: check your FXML file 'MainWindow.fxml'.";
  473. assert resetMapping != null : "fx:id=\"resetMapping\" was not injected: check your FXML file 'MainWindow.fxml'.";
  474. assert updateMetricMI != null : "fx:id=\"updateMetricMI\" was not injected: check your FXML file 'MainWindow.fxml'.";
  475. assert about != null : "fx:id=\"about\" was not injected: check your FXML file 'MainWindow.fxml'.";
  476. assert toolbox != null : "fx:id=\"toolbox\" was not injected: check your FXML file 'MainWindow.fxml'.";
  477. assert properties != null : "fx:id=\"properties\" was not injected: check your FXML file 'MainWindow.fxml'.";
  478. assert metricbox != null : "fx:id=\"metricbox\" was not injected: check your FXML file 'MainWindow.fxml'.";
  479. assert toolboxStringColumn != null : "fx:id=\"toolboxString\" was not injected: check your FXML file 'MainWindow.fxml'.";
  480. assert toolboxObjectColumn != null : "fx:id=\"toolboxObject\" was not injected: check your FXML file 'MainWindow.fxml'.";
  481. assert propertiesStringColumn != null : "fx:id=\"propertiesString\" was not injected: check your FXML file 'MainWindow.fxml'.";
  482. assert propertiesObjectColumn != null : "fx:id=\"propertiesObject\" was not injected: check your FXML file 'MainWindow.fxml'.";
  483. assert propertiesTypeColumn != null : "fx:id=\"propertiesType\" was not injected: check your FXML file 'MainWindow.fxml'.";
  484. assert rightSide != null : "fx:id=\"rightSide\" was not injected: check your FXML file 'MainWindow.fxml'.";
  485. assert opGraphSelectionBox != null : "fx:id=\"opGraphSelectionBox\" was not injected: check your FXML file 'MainWindow.fxml'.";
  486. assert consoleScrollPane != null : "fx:id=\"consoleScrollPane\" was not injected: check your FXML file 'MainWindow.fxml'.";
  487. assert consoleWindow != null : "fx:id=\"consoleWindow\" was not injected: check your FXML file 'MainWindow.fxml'.";
  488. assert metricBoxMetricColumn != null : "fx:id=\"metricBoxMetricColumn\" was not injected: check your FXML file 'MainWindow.fxml'.";
  489. assert metricBoxValueColumn != null : "fx:id=\"metricBoxValueColumn\" was not injected: check your FXML file 'MainWindow.fxml'.";
  490. assert metricBoxUpdateColumn != null : "fx:id=\"metricBoxUpdateColumn\" was not injected: check your FXML file 'MainWindow.fxml'.";
  491. assert updateMetricButton != null : "fx:id=\"updateMetricButton\" was not injected: check your FXML file 'MainWindow.fxml'.";
  492. assert topLeftAPane != null : "fx:id=\"topLeftAPane\" was not injected: check your FXML file 'MainWindow.fxml'.";
  493. assert updateButtonAPane != null : "fx:id=\"updateButton\" was not injected: check your FXML file 'MainWindow.fxml'.";
  494. assert symbolToolVBox != null : "fx:id=\"symbolToolVBox\" was not injected: check your FXML file 'MainWindow.fxml'.";
  495. assert edgesVisibleCheckbox != null : "fx:id=\"edgesVisibleCheckbox\" was not injected: check your FXML file 'MainWindow.fxml'.";
  496. assert nodeLabelCheckbox != null : "fx:id=\"nodeLabelCheckbox\" was not injected: check your FXML file 'MainWindow.fxml'.";
  497. assert edgeWeightCheckbox != null : "fx:id=\"egdeWeightCheckbox\" was not injected: check your FXML file 'MainWindow.fxml'.";
  498. assert mapViewChoiceBox != null : "fx:id=\"mapViewChoiceBox\" was not injected: check your FXML file 'MainWindow.fxml'.";
  499. assert stackPane != null : "fx:id=\"stackPane\" was not injected: check your FXML file 'MainWindow.fxml'.";
  500. assert swingNodeWorldView != null : "fx:id=\"swingNodeWorldView\" was not injected: check your FXML file 'MainWindow.fxml'.";
  501. }
  502. }