From 425599f3edd281eb3c04873b9361569115e82b4c Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 20 Oct 2020 00:51:32 -0400 Subject: [PATCH 01/24] added Welcome Screen and set up skeleton for list of parts --- .../gui/ItemSelectScreenController.java | 49 +++++++++++++++++ .../fieldsimulator/gui/ListViewPart.java | 27 ++++++++++ .../fieldsimulator/gui/ListViewPartCell.java | 50 +++++++++++++++++ .../rbe/rbe2001/fieldsimulator/gui/Main.java | 34 +++++++----- .../gui/WelcomeScreenController.java | 53 +++++++++++++++++++ src/main/resources/fxml/ItemSelectScreen.fxml | 24 +++++++++ src/main/resources/fxml/WelcomeScreen.fxml | 32 +++++++++++ src/main/resources/fxml/partListCell.fxml | 31 +++++++++++ 8 files changed, 288 insertions(+), 12 deletions(-) create mode 100644 src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/ItemSelectScreenController.java create mode 100644 src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/ListViewPart.java create mode 100644 src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/ListViewPartCell.java create mode 100644 src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/WelcomeScreenController.java create mode 100644 src/main/resources/fxml/ItemSelectScreen.fxml create mode 100644 src/main/resources/fxml/WelcomeScreen.fxml create mode 100644 src/main/resources/fxml/partListCell.fxml diff --git a/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/ItemSelectScreenController.java b/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/ItemSelectScreenController.java new file mode 100644 index 0000000..3639590 --- /dev/null +++ b/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/ItemSelectScreenController.java @@ -0,0 +1,49 @@ +package edu.wpi.rbe.rbe2001.fieldsimulator.gui; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.ResourceBundle; + +import edu.wpi.rbe.rbe2001.fieldsimulator.robot.IRBE2001Robot; +import edu.wpi.rbe.rbe2001.fieldsimulator.robot.IRBE2002Robot; +import edu.wpi.rbe.rbe2001.fieldsimulator.robot.RBE2001Robot; +import edu.wpi.rbe.rbe2001.fieldsimulator.robot.RBE3001Robot; +import edu.wpi.rbe.rbe2001.fieldsimulator.robot.ISimplePIDRobot; +import edu.wpi.rbe.rbe2001.fieldsimulator.robot.WarehouseRobotStatus; +import javafx.application.Platform; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.chart.LineChart; +import javafx.scene.chart.ScatterChart; +import javafx.scene.control.*; +import javafx.scene.chart.XYChart; +import javafx.scene.chart.XYChart.Series; + +public class ItemSelectScreenController implements Initializable { + @FXML + private Button Finished; + + @FXML + private ListView partsList; + + public ItemSelectScreenController(){ + Main.partList.addAll(new ListViewPart("item 1", 5, 1, 1), + new ListViewPart("item 2", 5, 1, 1)); + } + @Override + public void initialize(URL location, ResourceBundle resources) { + partsList.setItems(Main.partList); + partsList.setCellFactory(partListView->new ListViewPartCell()); + } + public void finishedCallback(){ + Main.setWelcomeScene(); + } +} diff --git a/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/ListViewPart.java b/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/ListViewPart.java new file mode 100644 index 0000000..6220c39 --- /dev/null +++ b/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/ListViewPart.java @@ -0,0 +1,27 @@ +package edu.wpi.rbe.rbe2001.fieldsimulator.gui; + +public class ListViewPart { + private String Name; + private int NumAvailable; + private int Row; + private int Col; + public ListViewPart(String name, int numAvailable, int row, int col) + { + this.Name = name; + this.NumAvailable = numAvailable; + this.Row = row; + this.Col = col; + } + public String getName(){ + return Name; + } + public int getNumAvailable(){ + return NumAvailable; + } + public int getRow(){ + return Row; + } + public int getCol(){ + return Col; + } +} diff --git a/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/ListViewPartCell.java b/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/ListViewPartCell.java new file mode 100644 index 0000000..b434cb5 --- /dev/null +++ b/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/ListViewPartCell.java @@ -0,0 +1,50 @@ +package edu.wpi.rbe.rbe2001.fieldsimulator.gui; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.control.Label; +import javafx.scene.control.ListCell; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.HBox; + +import java.io.IOException; + +public class ListViewPartCell extends ListCell{ + + @FXML + private Label name; + + @FXML + private Label numAvailable; + + @FXML + private HBox box; + + private FXMLLoader mLLoader; + + @Override + protected void updateItem(ListViewPart part, boolean empty) { + super.updateItem(part, empty); + if(empty || part == null) { + + setText(null); + setGraphic(null); + } + else { + if (mLLoader == null) { + mLLoader = new FXMLLoader(getClass().getResource("/fxml/partListCell.fxml")); + mLLoader.setController(this); + + + try { + mLLoader.load(); + } catch (IOException e) { + e.printStackTrace(); + } + name.setText(String.valueOf(part.getName())); + numAvailable.setText(String.valueOf(part.getNumAvailable())); + setText(null); + setGraphic(box); + } + } + } +} diff --git a/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/Main.java b/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/Main.java index 0bd17ef..269401d 100644 --- a/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/Main.java +++ b/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/Main.java @@ -1,31 +1,41 @@ package edu.wpi.rbe.rbe2001.fieldsimulator.gui; import javafx.application.Application; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; public class Main extends Application { + private static Stage theStage; + private static Scene WelcomeScene = null; + private static Scene ItemSelectScene = null; + public static ObservableList partList = FXCollections.observableArrayList(); + @Override - public void start(Stage primaryStage) throws Exception { - Parent root = FXMLLoader.load(getClass().getResource("/fxml/MainScreen.fxml")); - primaryStage.setTitle("RBE 2001 Controller"); + public void start(Stage stage) throws Exception { + theStage = stage; + Parent WelcomeScreen = FXMLLoader.load(getClass().getResource("/fxml/WelcomeScreen.fxml")); + Parent ItemSelectScreen = FXMLLoader.load(getClass().getResource("/fxml/ItemSelectScreen.fxml")); + //Parent root = FXMLLoader.load(getClass().getResource("/fxml/MainScreen.fxml")); + theStage.setTitle("RBE Warehouse"); //root.getStylesheets().add("/materialfx-material-design-for-javafx/material-fx-v0_3.css"); - primaryStage.setScene(new Scene(root, 1011, 665)); + //stage.setScene(new Scene(root, 1011, 665)); //primaryStage.setResizable(false); - - primaryStage.show(); - primaryStage.getScene().setRoot(root); - primaryStage.setOnCloseRequest(event -> { - - InterfaceController.disconnect(); - - }); + WelcomeScene = new Scene(WelcomeScreen); + ItemSelectScene = new Scene(ItemSelectScreen); + theStage.setScene(WelcomeScene); + theStage.show(); + } public static void main(String[] args) { launch(args); } + + public static void setWelcomeScene(){theStage.setScene(WelcomeScene);} + public static void setItemSelectScene(){theStage.setScene(ItemSelectScene);} } diff --git a/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/WelcomeScreenController.java b/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/WelcomeScreenController.java new file mode 100644 index 0000000..ea1f89e --- /dev/null +++ b/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/WelcomeScreenController.java @@ -0,0 +1,53 @@ +package edu.wpi.rbe.rbe2001.fieldsimulator.gui; +import edu.wpi.rbe.rbe2001.fieldsimulator.gui.Main; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.ResourceBundle; + +import edu.wpi.rbe.rbe2001.fieldsimulator.robot.IRBE2001Robot; +import edu.wpi.rbe.rbe2001.fieldsimulator.robot.IRBE2002Robot; +import edu.wpi.rbe.rbe2001.fieldsimulator.robot.RBE2001Robot; +import edu.wpi.rbe.rbe2001.fieldsimulator.robot.RBE3001Robot; +import edu.wpi.rbe.rbe2001.fieldsimulator.robot.ISimplePIDRobot; +import edu.wpi.rbe.rbe2001.fieldsimulator.robot.WarehouseRobotStatus; +import javafx.application.Platform; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.chart.LineChart; +import javafx.scene.chart.ScatterChart; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.Label; +import javafx.scene.control.RadioButton; +import javafx.scene.control.SingleSelectionModel; +import javafx.scene.control.Tab; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; +import javafx.scene.chart.XYChart; +import javafx.scene.chart.XYChart.Series; +import javafx.scene.control.CheckBox; + + +public class WelcomeScreenController implements Initializable { + + @FXML + private Button Enter; + + @Override + public void initialize(URL location, ResourceBundle resources) { + + } + + public void enterCallback(){ + Main.setItemSelectScene(); + } +} diff --git a/src/main/resources/fxml/ItemSelectScreen.fxml b/src/main/resources/fxml/ItemSelectScreen.fxml new file mode 100644 index 0000000..3ff9a7e --- /dev/null +++ b/src/main/resources/fxml/ItemSelectScreen.fxml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + diff --git a/src/main/resources/fxml/WelcomeScreen.fxml b/src/main/resources/fxml/WelcomeScreen.fxml new file mode 100644 index 0000000..992c118 --- /dev/null +++ b/src/main/resources/fxml/WelcomeScreen.fxml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/fxml/partListCell.fxml b/src/main/resources/fxml/partListCell.fxml new file mode 100644 index 0000000..11ff71f --- /dev/null +++ b/src/main/resources/fxml/partListCell.fxml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + From 29467e5fdd30bf1dc216234aeded9d59651d6e39 Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 20 Oct 2020 16:31:18 -0400 Subject: [PATCH 02/24] Added JSON file reader for inventory, populates item list --- build.gradle | 1 + .../fieldsimulator/gui/InventoryManager.java | 36 +++++++++++++++++++ .../gui/ItemSelectScreenController.java | 4 +-- .../fieldsimulator/gui/ListViewPart.java | 14 ++++---- .../rbe/rbe2001/fieldsimulator/gui/Main.java | 4 +++ .../gui/WelcomeScreenController.java | 29 +++++++++++++-- src/main/resources/fxml/WelcomeScreen.fxml | 7 +++- src/main/resources/fxml/partListCell.fxml | 4 +-- src/main/resources/json/Inventory.json | 22 ++++++++++++ 9 files changed, 107 insertions(+), 14 deletions(-) create mode 100644 src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/InventoryManager.java create mode 100644 src/main/resources/json/Inventory.json diff --git a/build.gradle b/build.gradle index 681683b..18ff4b1 100644 --- a/build.gradle +++ b/build.gradle @@ -31,6 +31,7 @@ dependencies { implementation "com.neuronrobotics:SimplePacketComsJava:0.10.1" implementation "com.neuronrobotics:SimplePacketComsJava-HID:0.13.1" + compile 'com.googlecode.json-simple:json-simple:1.1.1' //implementation project(":SimplePacketComsJava") } diff --git a/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/InventoryManager.java b/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/InventoryManager.java new file mode 100644 index 0000000..6483f70 --- /dev/null +++ b/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/InventoryManager.java @@ -0,0 +1,36 @@ +package edu.wpi.rbe.rbe2001.fieldsimulator.gui; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.Iterator; +public class InventoryManager { + private String InventoryJSON; + private String SignOutJSON; + + public InventoryManager(String InventoryLocation, String SignOutLocation){ + this.InventoryJSON = InventoryLocation; + this.SignOutJSON = SignOutLocation; + } + public void loadInventory(){ + JSONParser parser = new JSONParser(); + try { + InputStream stream = getClass().getResourceAsStream(InventoryJSON); + Object obj = parser.parse(new InputStreamReader(stream, StandardCharsets.UTF_8)); + JSONObject MainObject = (JSONObject) obj; + JSONArray inventoryList = (JSONArray) MainObject.get("inventory"); + Iterator iterator = inventoryList.iterator(); + while (iterator.hasNext()) { + JSONObject it = iterator.next(); + Main.partList.add(new ListViewPart((String)it.get("name"), (long)it.get("numberAvailable"), (long)it.get("row"), (long)it.get("col"))); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + +} diff --git a/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/ItemSelectScreenController.java b/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/ItemSelectScreenController.java index 3639590..a79109f 100644 --- a/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/ItemSelectScreenController.java +++ b/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/ItemSelectScreenController.java @@ -35,8 +35,8 @@ public class ItemSelectScreenController implements Initializable { private ListView partsList; public ItemSelectScreenController(){ - Main.partList.addAll(new ListViewPart("item 1", 5, 1, 1), - new ListViewPart("item 2", 5, 1, 1)); + //Main.partList.addAll(new ListViewPart("item 1", 5, 1, 1), + //new ListViewPart("item 2", 5, 1, 1)); } @Override public void initialize(URL location, ResourceBundle resources) { diff --git a/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/ListViewPart.java b/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/ListViewPart.java index 6220c39..e93f55d 100644 --- a/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/ListViewPart.java +++ b/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/ListViewPart.java @@ -2,10 +2,10 @@ public class ListViewPart { private String Name; - private int NumAvailable; - private int Row; - private int Col; - public ListViewPart(String name, int numAvailable, int row, int col) + private long NumAvailable; + private long Row; + private long Col; + public ListViewPart(String name, long numAvailable, long row, long col) { this.Name = name; this.NumAvailable = numAvailable; @@ -15,13 +15,13 @@ public ListViewPart(String name, int numAvailable, int row, int col) public String getName(){ return Name; } - public int getNumAvailable(){ + public long getNumAvailable(){ return NumAvailable; } - public int getRow(){ + public long getRow(){ return Row; } - public int getCol(){ + public long getCol(){ return Col; } } diff --git a/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/Main.java b/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/Main.java index 269401d..f616ee8 100644 --- a/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/Main.java +++ b/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/Main.java @@ -12,12 +12,16 @@ public class Main extends Application { private static Stage theStage; private static Scene WelcomeScene = null; private static Scene ItemSelectScene = null; + private static InventoryManager inventoryManager; public static ObservableList partList = FXCollections.observableArrayList(); + public static int currentIDNum = 0; @Override public void start(Stage stage) throws Exception { theStage = stage; + inventoryManager = new InventoryManager("/json/Inventory.json", ""); + inventoryManager.loadInventory(); Parent WelcomeScreen = FXMLLoader.load(getClass().getResource("/fxml/WelcomeScreen.fxml")); Parent ItemSelectScreen = FXMLLoader.load(getClass().getResource("/fxml/ItemSelectScreen.fxml")); //Parent root = FXMLLoader.load(getClass().getResource("/fxml/MainScreen.fxml")); diff --git a/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/WelcomeScreenController.java b/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/WelcomeScreenController.java index ea1f89e..6396391 100644 --- a/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/WelcomeScreenController.java +++ b/src/main/java/edu/wpi/rbe/rbe2001/fieldsimulator/gui/WelcomeScreenController.java @@ -42,12 +42,37 @@ public class WelcomeScreenController implements Initializable { @FXML private Button Enter; + @FXML + private Label error; + + @FXML + private TextField IDEntry; + @Override public void initialize(URL location, ResourceBundle resources) { - + error.setVisible(false); } public void enterCallback(){ - Main.setItemSelectScene(); + int ID = 0; + boolean idValid = true; + try{ + ID = Integer.parseInt(IDEntry.getText()); + if(IDEntry.getText().length()!=9){ + idValid = false; + } + } + catch (NumberFormatException e){ + idValid = false; + } + if(idValid) { + Main.currentIDNum = ID; + error.setVisible(false); + IDEntry.setText(""); + Main.setItemSelectScene(); + } + else{ + error.setVisible(true); + } } } diff --git a/src/main/resources/fxml/WelcomeScreen.fxml b/src/main/resources/fxml/WelcomeScreen.fxml index 992c118..6e1546b 100644 --- a/src/main/resources/fxml/WelcomeScreen.fxml +++ b/src/main/resources/fxml/WelcomeScreen.fxml @@ -16,7 +16,7 @@ - + @@ -28,5 +28,10 @@ + diff --git a/src/main/resources/fxml/partListCell.fxml b/src/main/resources/fxml/partListCell.fxml index 11ff71f..48ecbfc 100644 --- a/src/main/resources/fxml/partListCell.fxml +++ b/src/main/resources/fxml/partListCell.fxml @@ -7,9 +7,9 @@ - + -