GUIController.java 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617
  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.PanMouseInputListener;
  10. import org.jxmapviewer.input.ZoomMouseWheelListenerCursor;
  11. import de.tu_darmstadt.informatik.tk.scopviz.main.Main;
  12. import de.tu_darmstadt.informatik.tk.scopviz.ui.handlers.KeyboardShortcuts;
  13. import de.tu_darmstadt.informatik.tk.scopviz.ui.handlers.ResizeListener;
  14. import de.tu_darmstadt.informatik.tk.scopviz.ui.mapView.MapViewFunctions;
  15. import de.tu_darmstadt.informatik.tk.scopviz.ui.mapView.WorldView;
  16. import javafx.application.Platform;
  17. import javafx.beans.value.ChangeListener;
  18. import javafx.beans.value.ObservableValue;
  19. import javafx.embed.swing.SwingNode;
  20. import javafx.fxml.FXML;
  21. import javafx.fxml.Initializable;
  22. import javafx.scene.control.Button;
  23. import javafx.scene.control.CheckBox;
  24. import javafx.scene.control.ComboBox;
  25. import javafx.scene.control.Label;
  26. import javafx.scene.control.MenuItem;
  27. import javafx.scene.control.ScrollPane;
  28. import javafx.scene.control.TableColumn;
  29. import javafx.scene.control.TableRow;
  30. import javafx.scene.control.TableView;
  31. import javafx.scene.control.Tooltip;
  32. import javafx.scene.control.cell.CheckBoxTableCell;
  33. import javafx.scene.control.cell.PropertyValueFactory;
  34. import javafx.scene.control.cell.TextFieldTableCell;
  35. import javafx.scene.layout.AnchorPane;
  36. import javafx.scene.layout.Pane;
  37. import javafx.scene.layout.StackPane;
  38. import javafx.scene.layout.VBox;
  39. import javafx.scene.text.TextFlow;
  40. import javafx.util.Pair;
  41. /**
  42. * Controller class for the various GUI elements, gets instanced and initialized
  43. * by the FXML loading process. Can access GUI elements specified in the FXML
  44. * file through matching variable name here and id attribute in the FXML,
  45. *
  46. * @author Dominik Renkel, Jan Enders
  47. * @version 1.1
  48. *
  49. */
  50. public class GUIController implements Initializable {
  51. // The SwingNode and its containing Pane that house the graph viewer
  52. @FXML
  53. public SwingNode swingNode;
  54. @FXML
  55. public SwingNode swingNodeWorldView;
  56. @FXML
  57. public Pane pane;
  58. @FXML
  59. public StackPane stackPane;
  60. // The buttons present in the UI
  61. @FXML
  62. public Button zoomIn;
  63. @FXML
  64. public Button zoomOut;
  65. @FXML
  66. public Button centerMap;
  67. @FXML
  68. public Button defaultMapView;
  69. @FXML
  70. public Button roadMapView;
  71. @FXML
  72. public Button satelliteMapView;
  73. @FXML
  74. public Button hybridMapView;
  75. @FXML
  76. public Button previousWaypoint;
  77. @FXML
  78. public Button nextWaypoint;
  79. @FXML
  80. public Button underlayButton;
  81. @FXML
  82. public Button operatorButton;
  83. @FXML
  84. public Button mappingButton;
  85. @FXML
  86. public Button symbolRepButton;
  87. // The Toolbar Items
  88. @FXML
  89. public MenuItem newItem;
  90. @FXML
  91. public MenuItem open;
  92. @FXML
  93. public MenuItem add;
  94. @FXML
  95. public MenuItem save;
  96. @FXML
  97. public MenuItem saveAs;
  98. @FXML
  99. public MenuItem preferences;
  100. @FXML
  101. public MenuItem quit;
  102. @FXML
  103. public MenuItem delete;
  104. @FXML
  105. public MenuItem undelete;
  106. @FXML
  107. public MenuItem operators;
  108. @FXML
  109. public MenuItem resetMapping;
  110. @FXML
  111. public MenuItem updateMetricMI;
  112. @FXML
  113. public MenuItem about;
  114. // The contents of the corresponding ScrollPanes
  115. @FXML
  116. public TableView<Pair<Object, String>> toolbox;
  117. @FXML
  118. public TableView<KeyValuePair> properties;
  119. @FXML
  120. public TableView<MetricRowData> metricbox;
  121. // The columns of the toolbox
  122. @FXML
  123. public TableColumn<Pair<Object, String>, String> toolboxStringColumn;
  124. @FXML
  125. public TableColumn<Pair<Object, String>, Object> toolboxObjectColumn;
  126. // The columns of the Properties pane
  127. // TODO: Fix Generic type arguments for propertiesObjectColumn
  128. @FXML
  129. public TableColumn<KeyValuePair, String> propertiesStringColumn;
  130. @FXML
  131. public TableColumn propertiesObjectColumn;
  132. @FXML
  133. public TableColumn<KeyValuePair, String> propertiesTypeColumn;
  134. // The columns of the metricbox
  135. @FXML
  136. public TableColumn<MetricRowData, String> metricBoxMetricColumn;
  137. @FXML
  138. public TableColumn<MetricRowData, String> metricBoxValueColumn;
  139. @FXML
  140. public TableColumn metricBoxUpdateColumn;
  141. @FXML
  142. public Button updateMetricButton;
  143. @FXML
  144. public Button resetMappingButton;
  145. // The items of the top left box in the symbol visualization layer
  146. @FXML
  147. public VBox symbolToolVBox;
  148. @FXML
  149. public CheckBox edgesVisibleCheckbox;
  150. @FXML
  151. public CheckBox nodeLabelCheckbox;
  152. @FXML
  153. public CheckBox edgeWeightCheckbox;
  154. @FXML
  155. public VBox leftSide;
  156. @FXML
  157. public VBox rightSide;
  158. @FXML
  159. public ComboBox<String> opGraphSelectionBox;
  160. // The elements needed for the console window
  161. @FXML
  162. public ScrollPane consoleScrollPane;
  163. @FXML
  164. public TextFlow consoleWindow;
  165. // The anchorpane of the top left box (toolbox, symbol visualization layer
  166. // box)
  167. @FXML
  168. public AnchorPane topLeftAPane;
  169. // The anchorpane of the metric update button
  170. @FXML
  171. public AnchorPane updateButtonAPane;
  172. // The anchorpane of the reset mapping button
  173. @FXML
  174. public AnchorPane resetMappingButtonAPane;
  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. // "Drag map around" Listener
  215. MouseInputListener mia = new PanMouseInputListener(mapViewer);
  216. mapViewer.addMouseListener(mia);
  217. mapViewer.addMouseMotionListener(mia);
  218. swingNodeWorldView.setContent(mapViewer);
  219. // add resize Listener to the stackPane
  220. stackPane.heightProperty().addListener(new ResizeListener(swingNode, stackPane));
  221. stackPane.widthProperty().addListener(new ResizeListener(swingNode, stackPane));
  222. swingNodeWorldView.setVisible(false);
  223. // bind a context menu to the swing node
  224. swingNodeWorldView.setOnContextMenuRequested((event) -> MapViewFunctions.contextMenuRequest(event));
  225. }
  226. /**
  227. * Initializes the Menu Bar with all its contents.
  228. */
  229. private void initializeMenuBar() {
  230. newItem.setOnAction((event) -> MenuBarManager.newAction(event));
  231. open.setOnAction((event) -> MenuBarManager.openAction(event));
  232. add.setOnAction((event) -> MenuBarManager.addAction(event));
  233. add.setDisable(true);
  234. save.setOnAction((event) -> MenuBarManager.saveAction(event));
  235. saveAs.setOnAction((event) -> MenuBarManager.saveAsAction(event));
  236. preferences.setOnAction((event) -> MenuBarManager.preferencesAction(event));
  237. quit.setOnAction((event) -> MenuBarManager.quitAction(event));
  238. delete.setOnAction((event) -> MenuBarManager.deleteAction(event));
  239. undelete.setOnAction((event) -> MenuBarManager.undeleteAction(event));
  240. operators.setOnAction((event) -> OperatorManager.openOperatorsDialog());
  241. resetMapping.setOnAction((event) -> GraphDisplayManager.initMappingLayer(true));
  242. updateMetricMI.setOnAction((event) -> MetricboxManager.updateMetrics());
  243. updateMetricMI.setDisable(true);
  244. about.setOnAction((event) -> MenuBarManager.aboutAction(event));
  245. resetMapping.setDisable(true);
  246. }
  247. /**
  248. * Sets the handlers for the zoomin and zoomout buttons.
  249. */
  250. private void initializeZoomButtons() {
  251. zoomIn.setOnAction((event) -> ButtonManager.zoomInAction(event));
  252. zoomOut.setOnAction((event) -> ButtonManager.zoomOutAction(event));
  253. }
  254. /**
  255. * Sets the handlers for the Button that are shown in the symbol layer
  256. */
  257. private void initializeSymbolLayerButtons() {
  258. centerMap.setOnAction((event) -> ButtonManager.centerMapAction(event));
  259. defaultMapView.setOnAction((event) -> MapViewFunctions.changeMapView("Default"));
  260. roadMapView.setOnAction((event) -> MapViewFunctions.changeMapView("Road"));
  261. satelliteMapView.setOnAction((event) -> MapViewFunctions.changeMapView("Satellite"));
  262. hybridMapView.setOnAction((event) -> MapViewFunctions.changeMapView("Hybrid"));
  263. previousWaypoint.setOnAction((event) -> MapViewFunctions.switchToPreviousWaypoint());
  264. nextWaypoint.setOnAction((event) -> MapViewFunctions.switchToNextWaypoint());
  265. centerMap.setVisible(false);
  266. defaultMapView.setVisible(false);
  267. roadMapView.setVisible(false);
  268. satelliteMapView.setVisible(false);
  269. hybridMapView.setVisible(false);
  270. previousWaypoint.setVisible(false);
  271. nextWaypoint.setVisible(false);
  272. }
  273. /**
  274. * Initializes the special Toolbox for the Symbol Representation Layer.
  275. */
  276. private void initializeSymbolRepToolbox() {
  277. // Hide SymbolRep Toolbox View
  278. topLeftAPane.getChildren().remove(symbolToolVBox);
  279. edgesVisibleCheckbox.selectedProperty()
  280. .addListener((ov, oldVal, newVal) -> ButtonManager.edgeVisibilitySwitcher(ov, oldVal, newVal));
  281. nodeLabelCheckbox.selectedProperty()
  282. .addListener((ov, oldVal, newVal) -> ButtonManager.labelVisibilitySwitcher(ov, oldVal, newVal));
  283. edgeWeightCheckbox.selectedProperty()
  284. .addListener((ov, oldVal, newVal) -> ButtonManager.edgeWeightVisibilitySwitcher(ov, oldVal, newVal));
  285. }
  286. /**
  287. * Set the Handlers for the Layer switch Buttons.
  288. */
  289. private void initializeLayerButton() {
  290. underlayButton.setOnAction((event) -> ButtonManager.underlayAction(event));
  291. operatorButton.setOnAction((event) -> ButtonManager.operatorAction(event));
  292. mappingButton.setOnAction((event) -> ButtonManager.mappingAction(event));
  293. symbolRepButton.setOnAction((event) -> ButtonManager.symbolRepAction(event));
  294. Tooltip tip = new Tooltip();
  295. tip.setText("Underlay");
  296. underlayButton.setTooltip(tip);
  297. tip = new Tooltip();
  298. tip.setText("Operator");
  299. operatorButton.setTooltip(tip);
  300. tip = new Tooltip();
  301. tip.setText("Mapping");
  302. mappingButton.setTooltip(tip);
  303. tip = new Tooltip();
  304. tip.setText("Geographical Visualization");
  305. symbolRepButton.setTooltip(tip);
  306. ArrayList<Button> layerButtons = new ArrayList<Button>();
  307. layerButtons.add(underlayButton);
  308. layerButtons.add(operatorButton);
  309. layerButtons.add(mappingButton);
  310. layerButtons.add(symbolRepButton);
  311. ButtonManager.initialize(layerButtons, this, underlayButton);
  312. }
  313. /**
  314. * Sets the minimum size and adds the handlers to the graph display.
  315. */
  316. private void initializeDisplayPane() {
  317. ResizeListener rLis = new ResizeListener(swingNode, pane);
  318. pane.heightProperty().addListener(rLis);
  319. pane.widthProperty().addListener(rLis);
  320. pane.setOnScroll(GraphDisplayManager.scrollHandler);
  321. swingNode.setContent(Main.getInstance().getGraphManager().getView());
  322. pane.setMinSize(200, 200);
  323. }
  324. /**
  325. * Initialize the Toolbox.
  326. */
  327. @SuppressWarnings("unchecked")
  328. private void initializeToolbox() {
  329. ToolboxManager.initialize(this);
  330. toolboxStringColumn.setCellValueFactory(new ToolboxManager.PairKeyFactory());
  331. toolboxObjectColumn.setCellValueFactory(new ToolboxManager.PairValueFactory());
  332. toolboxObjectColumn.setCellFactory((column) -> {
  333. return new ToolboxManager.PairValueCell();
  334. });
  335. toolbox.getColumns().setAll(toolboxObjectColumn, toolboxStringColumn);
  336. // TODO make this work!!!!!!!!!!!!
  337. toolbox.getSelectionModel().selectedItemProperty()
  338. .addListener((ov, oldVal, newVal) -> ToolboxManager.selectedItemChanged(ov, oldVal, newVal));
  339. // Click event for TableView row
  340. toolbox.setRowFactory(tv -> {
  341. TableRow<Pair<Object, String>> row = new TableRow<>();
  342. row.setOnMouseClicked((event) -> ToolboxManager.rowClickedHandler(event));
  343. row.setOnDragDetected((event) -> {
  344. });
  345. return row;
  346. });
  347. // nothing is selected at the start
  348. toolbox.getSelectionModel().clearSelection();
  349. }
  350. /**
  351. * Initialize the Properties Window.
  352. */
  353. @SuppressWarnings("unchecked")
  354. private void initializeProperties() {
  355. propertiesObjectColumn.setResizable(true);
  356. propertiesStringColumn.setResizable(true);
  357. propertiesStringColumn.setCellValueFactory(new PropertyValueFactory<KeyValuePair, String>("key"));
  358. propertiesObjectColumn.setCellValueFactory(new PropertyValueFactory<KeyValuePair, Object>("value"));
  359. propertiesObjectColumn.setCellFactory(TextFieldTableCell.forTableColumn());
  360. propertiesObjectColumn.setOnEditCommit(PropertiesManager.setOnEditCommitHandler);
  361. propertiesTypeColumn.setCellValueFactory(new PropertyValueFactory<KeyValuePair, String>("classTypeAsString"));
  362. properties.getColumns().setAll(propertiesStringColumn, propertiesObjectColumn, propertiesTypeColumn);
  363. properties.setRowFactory(PropertiesManager.rightClickCallback);
  364. properties.setPlaceholder(new Label("No graph element selected"));
  365. properties.getSelectionModel().clearSelection();
  366. }
  367. /**
  368. * Initialize the metric box
  369. */
  370. @SuppressWarnings("unchecked")
  371. private void initializeMetricbox() {
  372. // TODO Möglicherweise auslagern
  373. metricbox.setRowFactory(tv -> {
  374. TableRow<MetricRowData> row = new TableRow<>();
  375. row.setOnMouseClicked(event -> {
  376. if (event.getClickCount() == 2 && (!row.isEmpty())) {
  377. MetricRowData rowData = row.getItem();
  378. if (rowData.getMetric().isSetupRequired()) {
  379. rowData.getMetric().setup();
  380. }
  381. }
  382. });
  383. return row;
  384. });
  385. metricBoxMetricColumn.setResizable(true);
  386. metricBoxValueColumn.setResizable(true);
  387. metricBoxMetricColumn.setCellValueFactory(new PropertyValueFactory<MetricRowData, String>("metricName"));
  388. metricBoxValueColumn.setCellValueFactory(new PropertyValueFactory<MetricRowData, String>("value"));
  389. metricBoxUpdateColumn.setCellValueFactory(new PropertyValueFactory<>("checked"));
  390. metricBoxUpdateColumn.setCellFactory(CheckBoxTableCell.forTableColumn(metricBoxUpdateColumn));
  391. metricbox.getColumns().setAll(metricBoxMetricColumn, metricBoxValueColumn, metricBoxUpdateColumn);
  392. MetricboxManager.initialize(this);
  393. // Update button initialization
  394. updateMetricButton.setOnAction((event) -> MetricboxManager.updateMetrics());
  395. rightSide.getChildren().remove(updateButtonAPane);
  396. // reset mapping button initialization
  397. resetMappingButton.setOnAction((event) -> GraphDisplayManager.initMappingLayer(true));
  398. leftSide.getChildren().remove(resetMappingButtonAPane);
  399. }
  400. /**
  401. * Initialize the operator graph combo box
  402. */
  403. private void initializeOpGraphComboBox() {
  404. opGraphSelectionBox.setVisible(false);
  405. ButtonManager.setupOpGraphComboBox();
  406. // initialization of the values of the box
  407. Platform.runLater(() -> opGraphSelectionBox.setValue(opGraphSelectionBox.getItems().get(0)));
  408. opGraphSelectionBox.setOnAction((v) -> ButtonManager.opGraphSelectedAction(v));
  409. /*
  410. * opGraphSelectionBox.setOnAction((v) -> { if
  411. * (opGraphSelectionBox.getValue().equals("Add...")) { // add Dialog
  412. * erscheint, Operator Graph wird importiert und fügt // neuen Punkt in
  413. * ComboBox hinzu // per //
  414. * opGraphSelectionBox.getItems().add(opGraphSelectionBox.getItems().
  415. * size() // - 1, ""); Debug.out("add Operator"); Platform.runLater(()
  416. * -> opGraphSelectionBox.setValue(firstOpGraph)); } else {
  417. *
  418. * // wechselt auf Operatorgraph mit diesem Namen
  419. *
  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 leftSide != null : "fx:id=\"leftSide\" was not injected: check your FXML file 'MainWindow.fxml'.";
  485. assert rightSide != null : "fx:id=\"rightSide\" was not injected: check your FXML file 'MainWindow.fxml'.";
  486. assert opGraphSelectionBox != null : "fx:id=\"opGraphSelectionBox\" was not injected: check your FXML file 'MainWindow.fxml'.";
  487. assert consoleScrollPane != null : "fx:id=\"consoleScrollPane\" was not injected: check your FXML file 'MainWindow.fxml'.";
  488. assert consoleWindow != null : "fx:id=\"consoleWindow\" was not injected: check your FXML file 'MainWindow.fxml'.";
  489. assert metricBoxMetricColumn != null : "fx:id=\"metricBoxMetricColumn\" was not injected: check your FXML file 'MainWindow.fxml'.";
  490. assert metricBoxValueColumn != null : "fx:id=\"metricBoxValueColumn\" was not injected: check your FXML file 'MainWindow.fxml'.";
  491. assert metricBoxUpdateColumn != null : "fx:id=\"metricBoxUpdateColumn\" was not injected: check your FXML file 'MainWindow.fxml'.";
  492. assert updateMetricButton != null : "fx:id=\"updateMetricButton\" was not injected: check your FXML file 'MainWindow.fxml'.";
  493. assert resetMappingButton != null : "fx:id=\"resetMappingButton\" was not injected: check your FXML file 'MainWindow.fxml'.";
  494. assert topLeftAPane != null : "fx:id=\"topLeftAPane\" was not injected: check your FXML file 'MainWindow.fxml'.";
  495. assert updateButtonAPane != null : "fx:id=\"updateButton\" was not injected: check your FXML file 'MainWindow.fxml'.";
  496. assert resetMappingButtonAPane != null : "fx:id=\"resetMappingButtonAPane\" was not injected: check your FXML file 'MainWindow.fxml'.";
  497. assert symbolToolVBox != null : "fx:id=\"symbolToolVBox\" was not injected: check your FXML file 'MainWindow.fxml'.";
  498. assert edgesVisibleCheckbox != null : "fx:id=\"edgesVisibleCheckbox\" was not injected: check your FXML file 'MainWindow.fxml'.";
  499. assert nodeLabelCheckbox != null : "fx:id=\"nodeLabelCheckbox\" was not injected: check your FXML file 'MainWindow.fxml'.";
  500. assert edgeWeightCheckbox != null : "fx:id=\"egdeWeightCheckbox\" was not injected: check your FXML file 'MainWindow.fxml'.";
  501. assert stackPane != null : "fx:id=\"stackPane\" was not injected: check your FXML file 'MainWindow.fxml'.";
  502. assert swingNodeWorldView != null : "fx:id=\"swingNodeWorldView\" was not injected: check your FXML file 'MainWindow.fxml'.";
  503. }
  504. }