GUIController.java 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626
  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. @FXML
  149. public Button resetMappingButton;
  150. // The items of the top left box in the symbol visualization layer
  151. @FXML
  152. public VBox symbolToolVBox;
  153. @FXML
  154. public CheckBox edgesVisibleCheckbox;
  155. @FXML
  156. public CheckBox nodeLabelCheckbox;
  157. @FXML
  158. public CheckBox edgeWeightCheckbox;
  159. @FXML
  160. public ChoiceBox<String> mapViewChoiceBox;
  161. @FXML
  162. public VBox leftSide;
  163. @FXML
  164. public VBox rightSide;
  165. @FXML
  166. public ComboBox<String> opGraphSelectionBox;
  167. // The elements needed for the console window
  168. @FXML
  169. public ScrollPane consoleScrollPane;
  170. @FXML
  171. public TextFlow consoleWindow;
  172. // The anchorpane of the top left box (toolbox, symbol visualization layer
  173. // box)
  174. @FXML
  175. public AnchorPane topLeftAPane;
  176. // The anchorpane of the metric update button
  177. @FXML
  178. public AnchorPane updateButtonAPane;
  179. // The anchorpane of the reset mapping button
  180. @FXML
  181. public AnchorPane resetMappingButtonAPane;
  182. /**
  183. * Initializes all the references to the UI elements specified in the FXML
  184. * file. Gets called during FXML loading. Asserts the correct injection of
  185. * all referenced UI elements and initializes them.
  186. */
  187. @Override
  188. public void initialize(URL arg0, ResourceBundle arg1) {
  189. // Assert the correct injection of all references from FXML
  190. assertFXMLInjections();
  191. initializeToolbox();
  192. initializeProperties();
  193. initializeMetricbox();
  194. // Remove Header for the toolbox
  195. removeHeaderTableView(toolbox);
  196. // Initialize the Managers for the various for UI elements
  197. ToolboxManager.initializeItems();
  198. PropertiesManager.initializeItems(properties);
  199. ConsoleManager.initialize(this);
  200. OperatorManager.initialize(this);
  201. GraphDisplayManager.init(this);
  202. // Bind all the handlers to their corresponding UI elements
  203. initializeZoomButtons();
  204. initializeSymbolLayerButtons();
  205. initializeLayerButton();
  206. initializeOpGraphComboBox();
  207. initializeMenuBar();
  208. initializeSymbolRepToolbox();
  209. initializeDisplayPane();
  210. initializeWorldView();
  211. // Setup the Keyboard Shortcuts
  212. KeyboardShortcuts.initialize(Main.getInstance().getPrimaryStage(), this);
  213. }
  214. private void initializeWorldView() {
  215. JXMapViewer mapViewer = new JXMapViewer();
  216. WorldView.initAttributes(mapViewer, this);
  217. // center map if double clicked / middle clicked
  218. mapViewer.addMouseListener(new CenterMapListener(mapViewer));
  219. // zoom with mousewheel
  220. mapViewer.addMouseWheelListener(new ZoomMouseWheelListenerCursor(mapViewer));
  221. // TODO make this work
  222. mapViewer.addKeyListener(new PanKeyListener(mapViewer));
  223. // "Drag map around" Listener
  224. MouseInputListener mia = new PanMouseInputListener(mapViewer);
  225. mapViewer.addMouseListener(mia);
  226. mapViewer.addMouseMotionListener(mia);
  227. swingNodeWorldView.setContent(mapViewer);
  228. // add resize Listener to the stackPane
  229. stackPane.heightProperty().addListener(new ResizeListener(swingNode, stackPane));
  230. stackPane.widthProperty().addListener(new ResizeListener(swingNode, stackPane));
  231. swingNodeWorldView.setVisible(false);
  232. // bind a context menu to the swing node
  233. swingNodeWorldView.setOnContextMenuRequested((event) -> MapViewFunctions.contextMenuRequest(event));
  234. }
  235. /**
  236. * Initializes the Menu Bar with all its contents.
  237. */
  238. private void initializeMenuBar() {
  239. newItem.setOnAction((event) -> MenuBarManager.newAction(event));
  240. open.setOnAction((event) -> MenuBarManager.openAction(event));
  241. add.setOnAction((event) -> MenuBarManager.addAction(event));
  242. add.setDisable(true);
  243. save.setOnAction((event) -> MenuBarManager.saveAction(event));
  244. saveAs.setOnAction((event) -> MenuBarManager.saveAsAction(event));
  245. preferences.setOnAction((event) -> MenuBarManager.preferencesAction(event));
  246. quit.setOnAction((event) -> MenuBarManager.quitAction(event));
  247. delete.setOnAction((event) -> MenuBarManager.deleteAction(event));
  248. undelete.setOnAction((event) -> MenuBarManager.undeleteAction(event));
  249. operators.setOnAction((event) -> OperatorManager.openOperatorsDialog());
  250. resetMapping.setOnAction((event) -> GraphDisplayManager.initMappingLayer(true));
  251. updateMetricMI.setOnAction((event) -> MetricboxManager.updateMetrics());
  252. updateMetricMI.setDisable(true);
  253. about.setOnAction((event) -> MenuBarManager.aboutAction(event));
  254. }
  255. /**
  256. * Sets the handlers for the zoomin and zoomout buttons.
  257. */
  258. private void initializeZoomButtons() {
  259. zoomIn.setOnAction((event) -> ButtonManager.zoomInAction(event));
  260. zoomOut.setOnAction((event) -> ButtonManager.zoomOutAction(event));
  261. }
  262. /**
  263. * Sets the handlers for the Button that are shown in the symbol layer
  264. */
  265. private void initializeSymbolLayerButtons() {
  266. centerMap.setOnAction((event) -> ButtonManager.centerMapAction(event));
  267. defaultMapView.setOnAction((event) -> ButtonManager.switchToMap("Default"));
  268. roadMapView.setOnAction((event) -> ButtonManager.switchToMap("Road"));
  269. satelliteMapView.setOnAction((event) -> ButtonManager.switchToMap("Satellite"));
  270. hybridMapView.setOnAction((event) -> ButtonManager.switchToMap("Hybrid"));
  271. previousWaypoint.setOnAction((event) -> MapViewFunctions.switchToPreviousWaypoint());
  272. nextWaypoint.setOnAction((event) -> MapViewFunctions.switchToNextWaypoint());
  273. centerMap.setVisible(false);
  274. defaultMapView.setVisible(false);
  275. roadMapView.setVisible(false);
  276. satelliteMapView.setVisible(false);
  277. hybridMapView.setVisible(false);
  278. previousWaypoint.setVisible(false);
  279. nextWaypoint.setVisible(false);
  280. }
  281. /**
  282. * Initializes the special Toolbox for the Symbol Representation Layer.
  283. */
  284. private void initializeSymbolRepToolbox() {
  285. // Hide SymbolRep Toolbox View
  286. topLeftAPane.getChildren().remove(symbolToolVBox);
  287. edgesVisibleCheckbox.selectedProperty()
  288. .addListener((ov, oldVal, newVal) -> ButtonManager.edgeVisibilitySwitcher(ov, oldVal, newVal));
  289. nodeLabelCheckbox.selectedProperty()
  290. .addListener((ov, oldVal, newVal) -> ButtonManager.labelVisibilitySwitcher(ov, oldVal, newVal));
  291. edgeWeightCheckbox.selectedProperty()
  292. .addListener((ov, oldVal, newVal) -> ButtonManager.edgeWeightVisibilitySwitcher(ov, oldVal, newVal));
  293. mapViewChoiceBox.setItems(FXCollections.observableArrayList("Default", "Road", "Satellite", "Hybrid"));
  294. mapViewChoiceBox.getSelectionModel().selectFirst();
  295. mapViewChoiceBox.getSelectionModel().selectedItemProperty()
  296. .addListener((ov, oldVal, newVal) -> ButtonManager.mapViewChoiceChange(ov, oldVal, newVal));
  297. }
  298. /**
  299. * Set the Handlers for the Layer switch Buttons.
  300. */
  301. private void initializeLayerButton() {
  302. underlayButton.setOnAction((event) -> ButtonManager.underlayAction(event));
  303. operatorButton.setOnAction((event) -> ButtonManager.operatorAction(event));
  304. mappingButton.setOnAction((event) -> ButtonManager.mappingAction(event));
  305. symbolRepButton.setOnAction((event) -> ButtonManager.symbolRepAction(event));
  306. Tooltip tip = new Tooltip();
  307. tip.setText("Underlay");
  308. underlayButton.setTooltip(tip);
  309. tip = new Tooltip();
  310. tip.setText("Operator");
  311. operatorButton.setTooltip(tip);
  312. tip = new Tooltip();
  313. tip.setText("Mapping");
  314. mappingButton.setTooltip(tip);
  315. tip = new Tooltip();
  316. tip.setText("Geographical Visualization");
  317. symbolRepButton.setTooltip(tip);
  318. ArrayList<Button> layerButtons = new ArrayList<Button>();
  319. layerButtons.add(underlayButton);
  320. layerButtons.add(operatorButton);
  321. layerButtons.add(mappingButton);
  322. layerButtons.add(symbolRepButton);
  323. ButtonManager.initialize(layerButtons, this, underlayButton);
  324. }
  325. /**
  326. * Sets the minimum size and adds the handlers to the graph display.
  327. */
  328. private void initializeDisplayPane() {
  329. ResizeListener rLis = new ResizeListener(swingNode, pane);
  330. pane.heightProperty().addListener(rLis);
  331. pane.widthProperty().addListener(rLis);
  332. pane.setOnScroll(GraphDisplayManager.scrollHandler);
  333. swingNode.setContent((JPanel) Main.getInstance().getGraphManager().getView());
  334. pane.setMinSize(200, 200);
  335. }
  336. /**
  337. * Initialize the Toolbox.
  338. */
  339. @SuppressWarnings("unchecked")
  340. private void initializeToolbox() {
  341. ToolboxManager.initialize(this);
  342. toolboxStringColumn.setCellValueFactory(new ToolboxManager.PairKeyFactory());
  343. toolboxObjectColumn.setCellValueFactory(new ToolboxManager.PairValueFactory());
  344. toolboxObjectColumn.setCellFactory((column) -> {
  345. return new ToolboxManager.PairValueCell();
  346. });
  347. toolbox.getColumns().setAll(toolboxObjectColumn, toolboxStringColumn);
  348. toolbox.getSelectionModel().selectedItemProperty()
  349. .addListener((ov, oldVal, newVal) -> ToolboxManager.selectedItemChanged(ov, oldVal, newVal));
  350. // Click event for TableView row
  351. toolbox.setRowFactory(tv -> {
  352. TableRow<Pair<Object, String>> row = new TableRow<>();
  353. row.setOnMouseClicked((event) -> ToolboxManager.rowClickedHandler(event));
  354. return row;
  355. });
  356. // nothing is selected at the start
  357. toolbox.getSelectionModel().clearSelection();
  358. }
  359. /**
  360. * Initialize the Properties Window.
  361. */
  362. @SuppressWarnings("unchecked")
  363. private void initializeProperties() {
  364. propertiesObjectColumn.setResizable(true);
  365. propertiesStringColumn.setResizable(true);
  366. propertiesStringColumn.setCellValueFactory(new PropertyValueFactory<KeyValuePair, String>("key"));
  367. propertiesObjectColumn.setCellValueFactory(new PropertyValueFactory<KeyValuePair, Object>("value"));
  368. propertiesObjectColumn.setCellFactory(TextFieldTableCell.forTableColumn());
  369. propertiesObjectColumn.setOnEditCommit(PropertiesManager.setOnEditCommitHandler);
  370. propertiesTypeColumn.setCellValueFactory(new PropertyValueFactory<KeyValuePair, String>("classTypeAsString"));
  371. properties.getColumns().setAll(propertiesStringColumn, propertiesObjectColumn, propertiesTypeColumn);
  372. properties.setRowFactory(PropertiesManager.rightClickCallback);
  373. properties.setPlaceholder(new Label("No graph element selected"));
  374. properties.getSelectionModel().clearSelection();
  375. }
  376. /**
  377. * Initialize the metric box
  378. */
  379. @SuppressWarnings("unchecked")
  380. private void initializeMetricbox() {
  381. // TODO Möglicherweise auslagern
  382. metricbox.setRowFactory(tv -> {
  383. TableRow<MetricRowData> row = new TableRow<>();
  384. row.setOnMouseClicked(event -> {
  385. if (event.getClickCount() == 2 && (!row.isEmpty())) {
  386. MetricRowData rowData = row.getItem();
  387. if (rowData.getMetric().isSetupRequired()) {
  388. rowData.getMetric().setup();
  389. }
  390. }
  391. });
  392. return row;
  393. });
  394. metricBoxMetricColumn.setResizable(true);
  395. metricBoxValueColumn.setResizable(true);
  396. metricBoxMetricColumn.setCellValueFactory(new PropertyValueFactory<MetricRowData, String>("metricName"));
  397. metricBoxValueColumn.setCellValueFactory(new PropertyValueFactory<MetricRowData, String>("value"));
  398. metricBoxUpdateColumn.setCellValueFactory(new PropertyValueFactory<>("checked"));
  399. metricBoxUpdateColumn.setCellFactory(CheckBoxTableCell.forTableColumn(metricBoxUpdateColumn));
  400. metricbox.getColumns().setAll(metricBoxMetricColumn, metricBoxValueColumn, metricBoxUpdateColumn);
  401. MetricboxManager.initialize(this);
  402. // Update button initialization
  403. updateMetricButton.setOnAction((event) -> MetricboxManager.updateMetrics());
  404. rightSide.getChildren().remove(updateButtonAPane);
  405. // reset mapping button initialization
  406. resetMappingButton.setOnAction((event) -> GraphDisplayManager.initMappingLayer(true));
  407. leftSide.getChildren().remove(resetMappingButtonAPane);
  408. }
  409. /**
  410. * Initialize the operator graph combo box
  411. */
  412. private void initializeOpGraphComboBox() {
  413. opGraphSelectionBox.setVisible(false);
  414. // initialization of the values of the box
  415. String firstOpGraph = GraphDisplayManager.getGraphManager(Layer.OPERATOR).getGraph().getId();
  416. opGraphSelectionBox.getItems().addAll(firstOpGraph, "Add...");
  417. Platform.runLater(() -> opGraphSelectionBox.setValue(firstOpGraph));
  418. opGraphSelectionBox.setOnAction((v) -> {
  419. if (opGraphSelectionBox.getValue().equals("Add...")) {
  420. // add Dialog erscheint, Operator Graph wird importiert und fügt
  421. // neuen Punkt in ComboBox hinzu
  422. // per
  423. // opGraphSelectionBox.getItems().add(opGraphSelectionBox.getItems().size()
  424. // - 1, "");
  425. Debug.out("add Operator");
  426. Platform.runLater(() -> opGraphSelectionBox.setValue(firstOpGraph));
  427. } else {
  428. // wechselt auf Operatorgraph mit diesem Namen
  429. }
  430. });
  431. }
  432. /**
  433. * Removes the TableView Header for a given TableView
  434. *
  435. * @param tableView
  436. */
  437. private void removeHeaderTableView(TableView<?> tableView) {
  438. tableView.widthProperty().addListener(new ChangeListener<Number>() {
  439. @Override
  440. public void changed(ObservableValue<? extends Number> ov, Number t, Number t1) {
  441. // Get the table header
  442. Pane header = (Pane) tableView.lookup("TableHeaderRow");
  443. if (header != null && header.isVisible()) {
  444. header.setMaxHeight(0);
  445. header.setMinHeight(0);
  446. header.setPrefHeight(0);
  447. header.setVisible(false);
  448. header.setManaged(false);
  449. }
  450. }
  451. });
  452. }
  453. /**
  454. * Asserts the correct Injection of all Elements from the FXML File.
  455. */
  456. private void assertFXMLInjections() {
  457. assert swingNode != null : "fx:id=\"swingNode\" was not injected: check your FXML file 'MainWindow.fxml'.";
  458. assert pane != null : "fx:id=\"pane\" was not injected: check your FXML file 'MainWindow.fxml'.";
  459. assert zoomIn != null : "fx:id=\"zoomIn\" was not injected: check your FXML file 'MainWindow.fxml'.";
  460. assert zoomOut != null : "fx:id=\"zoomOut\" was not injected: check your FXML file 'MainWindow.fxml'.";
  461. assert centerMap != null : "fx:id=\"centerMap\" was not injected: check your FXML file 'MainWindow.fxml'.";
  462. assert defaultMapView != null : "fx:id=\"defaultMapView\" was not injected: check your FXML file 'MainWindow.fxml'.";
  463. assert roadMapView != null : "fx:id=\"roadMapView\" was not injected: check your FXML file 'MainWindow.fxml'.";
  464. assert satelliteMapView != null : "fx:id=\"satelliteMapView\" was not injected: check your FXML file 'MainWindow.fxml'.";
  465. assert hybridMapView != null : "fx:id=\"hybridMapView\" was not injected: check your FXML file 'MainWindow.fxml'.";
  466. assert previousWaypoint != null : "fx:id=\"previousWaypoint\" was not injected: check your FXML file 'MainWindow.fxml'.";
  467. assert nextWaypoint != null : "fx:id=\"nextWaypoint\" was not injected: check your FXML file 'MainWindow.fxml'.";
  468. assert underlayButton != null : "fx:id=\"underlayButton\" was not injected: check your FXML file 'MainWindow.fxml'.";
  469. assert operatorButton != null : "fx:id=\"operatorButton\" was not injected: check your FXML file 'MainWindow.fxml'.";
  470. assert mappingButton != null : "fx:id=\"mappingButton\" was not injected: check your FXML file 'MainWindow.fxml'.";
  471. assert symbolRepButton != null : "fx:id=\"symbolRepButton\" was not injected: check your FXML file 'MainWindow.fxml'.";
  472. assert newItem != null : "fx:id=\"newItem\" was not injected: check your FXML file 'MainWindow.fxml'.";
  473. assert open != null : "fx:id=\"open\" was not injected: check your FXML file 'MainWindow.fxml'.";
  474. assert add != null : "fx:id=\"add\" was not injected: check your FXML file 'MainWindow.fxml'.";
  475. assert save != null : "fx:id=\"save\" was not injected: check your FXML file 'MainWindow.fxml'.";
  476. assert saveAs != null : "fx:id=\"saveAs\" was not injected: check your FXML file 'MainWindow.fxml'.";
  477. assert preferences != null : "fx:id=\"preferences\" was not injected: check your FXML file 'MainWindow.fxml'.";
  478. assert quit != null : "fx:id=\"quit\" was not injected: check your FXML file 'MainWindow.fxml'.";
  479. assert delete != null : "fx:id=\"delete\" was not injected: check your FXML file 'MainWindow.fxml'.";
  480. assert undelete != null : "fx:id=\"undelete\" was not injected: check your FXML file 'MainWindow.fxml'.";
  481. assert operators != null : "fx:id=\"operators\" was not injected: check your FXML file 'MainWindow.fxml'.";
  482. assert resetMapping != null : "fx:id=\"resetMapping\" was not injected: check your FXML file 'MainWindow.fxml'.";
  483. assert updateMetricMI != null : "fx:id=\"updateMetricMI\" was not injected: check your FXML file 'MainWindow.fxml'.";
  484. assert about != null : "fx:id=\"about\" was not injected: check your FXML file 'MainWindow.fxml'.";
  485. assert toolbox != null : "fx:id=\"toolbox\" was not injected: check your FXML file 'MainWindow.fxml'.";
  486. assert properties != null : "fx:id=\"properties\" was not injected: check your FXML file 'MainWindow.fxml'.";
  487. assert metricbox != null : "fx:id=\"metricbox\" was not injected: check your FXML file 'MainWindow.fxml'.";
  488. assert toolboxStringColumn != null : "fx:id=\"toolboxString\" was not injected: check your FXML file 'MainWindow.fxml'.";
  489. assert toolboxObjectColumn != null : "fx:id=\"toolboxObject\" was not injected: check your FXML file 'MainWindow.fxml'.";
  490. assert propertiesStringColumn != null : "fx:id=\"propertiesString\" was not injected: check your FXML file 'MainWindow.fxml'.";
  491. assert propertiesObjectColumn != null : "fx:id=\"propertiesObject\" was not injected: check your FXML file 'MainWindow.fxml'.";
  492. assert propertiesTypeColumn != null : "fx:id=\"propertiesType\" was not injected: check your FXML file 'MainWindow.fxml'.";
  493. assert leftSide != null : "fx:id=\"leftSide\" was not injected: check your FXML file 'MainWindow.fxml'.";
  494. assert rightSide != null : "fx:id=\"rightSide\" was not injected: check your FXML file 'MainWindow.fxml'.";
  495. assert opGraphSelectionBox != null : "fx:id=\"opGraphSelectionBox\" was not injected: check your FXML file 'MainWindow.fxml'.";
  496. assert consoleScrollPane != null : "fx:id=\"consoleScrollPane\" was not injected: check your FXML file 'MainWindow.fxml'.";
  497. assert consoleWindow != null : "fx:id=\"consoleWindow\" was not injected: check your FXML file 'MainWindow.fxml'.";
  498. assert metricBoxMetricColumn != null : "fx:id=\"metricBoxMetricColumn\" was not injected: check your FXML file 'MainWindow.fxml'.";
  499. assert metricBoxValueColumn != null : "fx:id=\"metricBoxValueColumn\" was not injected: check your FXML file 'MainWindow.fxml'.";
  500. assert metricBoxUpdateColumn != null : "fx:id=\"metricBoxUpdateColumn\" was not injected: check your FXML file 'MainWindow.fxml'.";
  501. assert updateMetricButton != null : "fx:id=\"updateMetricButton\" was not injected: check your FXML file 'MainWindow.fxml'.";
  502. assert resetMappingButton != null : "fx:id=\"resetMappingButton\" was not injected: check your FXML file 'MainWindow.fxml'.";
  503. assert topLeftAPane != null : "fx:id=\"topLeftAPane\" was not injected: check your FXML file 'MainWindow.fxml'.";
  504. assert updateButtonAPane != null : "fx:id=\"updateButton\" was not injected: check your FXML file 'MainWindow.fxml'.";
  505. assert resetMappingButtonAPane != null : "fx:id=\"resetMappingButtonAPane\" was not injected: check your FXML file 'MainWindow.fxml'.";
  506. assert symbolToolVBox != null : "fx:id=\"symbolToolVBox\" was not injected: check your FXML file 'MainWindow.fxml'.";
  507. assert edgesVisibleCheckbox != null : "fx:id=\"edgesVisibleCheckbox\" was not injected: check your FXML file 'MainWindow.fxml'.";
  508. assert nodeLabelCheckbox != null : "fx:id=\"nodeLabelCheckbox\" was not injected: check your FXML file 'MainWindow.fxml'.";
  509. assert edgeWeightCheckbox != null : "fx:id=\"egdeWeightCheckbox\" was not injected: check your FXML file 'MainWindow.fxml'.";
  510. assert mapViewChoiceBox != null : "fx:id=\"mapViewChoiceBox\" was not injected: check your FXML file 'MainWindow.fxml'.";
  511. assert stackPane != null : "fx:id=\"stackPane\" was not injected: check your FXML file 'MainWindow.fxml'.";
  512. assert swingNodeWorldView != null : "fx:id=\"swingNodeWorldView\" was not injected: check your FXML file 'MainWindow.fxml'.";
  513. }
  514. }