diff --git a/src/main/java/controllers/AddTripController.java b/src/main/java/controllers/AddTripController.java new file mode 100644 index 0000000..f5b93cf --- /dev/null +++ b/src/main/java/controllers/AddTripController.java @@ -0,0 +1,142 @@ +package controllers; + +import javafx.beans.property.ReadOnlyStringWrapper; +import javafx.beans.property.StringProperty; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.scene.control.*; +import javafx.scene.control.TableColumn.CellEditEvent; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.control.cell.TextFieldTableCell; +import javafx.util.Callback; +import model.*; + +import java.net.URL; +import java.util.Optional; +import java.util.ResourceBundle; + +/** + * Created by Gondr on 5/04/2017. + */ +public class AddTripController extends Controller{ + + @FXML + ComboBox routeDropdown; + @FXML + ComboBox ride; + @FXML + ComboBox direction; + @FXML + TableView routeTable; + @FXML + TableColumn stopName; + @FXML + TableColumn stopTime; + @FXML + CheckBox mon; + @FXML + CheckBox tues; + @FXML + CheckBox wed; + @FXML + CheckBox thur; + @FXML + CheckBox fri; + @FXML + CheckBox sat; + @FXML + CheckBox sun; + @FXML + ComboBox reoccur; + @FXML + DatePicker endDate; + + ObservableList stops; + + @FXML + private void addTrip() throws Exception { + boolean[] days = {mon.isSelected(), tues.isSelected(), wed.isSelected(), thur.isSelected(), fri.isSelected(), + sat.isSelected(), sun.isSelected()}; + boolean boolReoccur = reoccur.getValue() == "Yes"? true: false; + String failure = ""; + if (stops.size() == 0){ + failure += "You have not selected a route.\n"; + } + if (ride.getValue() == null){ + failure += "You must select a ride (vehicle) for this trip.\n"; + } + + if (failure != "") { + Trip trip = new Trip(stops, direction.getValue(), ride.getValue(), days, boolReoccur, endDate.getValue().toString()); + System.out.println(trip); + Optional result = popUp(Alert.AlertType.WARNING, "Warning!", "Crucial Information missing", failure, ButtonSets.YesNo); + if (result.get() == ButtonTypes.No){ + System.out.println("My Trips page to show up and impletmeneted");//TODO implement here. + //changeScene(SceneCode.MY_TRIPS); + } else{ + changeScene(SceneCode.ADD_TRIP); + } + }else{ + popUp(Alert.AlertType.WARNING, "Warning!", "Crucial Information missing", failure); + } + } + + @Override + public void runLater(){ + routeDropdown.setItems(parent.getSession().getDataManager().getRoutes()); + ride.setItems(parent.getSession().getDataManager().getRides()); + stopName.setCellValueFactory(p -> p.getValue().nameProperty()); + stopTime.setCellFactory(TextFieldTableCell.forTableColumn()); + stopTime.setOnEditCommit( + new EventHandler>() { + @Override + public void handle(CellEditEvent t) { + ((TripStop) t.getTableView().getItems().get( + t.getTablePosition().getRow()) + ).setTime(t.getNewValue()); + } + } + ); + routeDropdown.valueProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, Route oldValue, Route newValue) { + for (Stop stop: newValue.getStops()){ + stops.add(new TripStop(stop.getAddress(), "")); + } + routeTable.setItems(stops); + } + }); + } + + @Override + public void initialize(URL location, ResourceBundle resources) { + String[] reoccurence = {"Yes","No"}; + ObservableList reoccurs = FXCollections.observableArrayList(reoccurence); + reoccur.setItems(reoccurs); + reoccur.getSelectionModel().select(1); + reoccur.valueProperty().addListener((observable, oldValue, newValue) -> { + if (newValue == "Yes"){ + endDate.setDisable(false); + }else{ + endDate.setDisable(true); + } + }); + + String[] dir = {"University","Home"}; + ObservableList dirArr = FXCollections.observableArrayList(dir); + direction.setItems(dirArr); + direction.getSelectionModel().selectFirst(); + + stops = FXCollections.observableArrayList(); + + routeTable.setEditable(true); + stopName.setEditable(false); + stopTime.setEditable(true); + + endDate.setDisable(true); + } +} diff --git a/src/main/java/controllers/BaseController.java b/src/main/java/controllers/BaseController.java index c6dc61f..82f4d47 100644 --- a/src/main/java/controllers/BaseController.java +++ b/src/main/java/controllers/BaseController.java @@ -45,6 +45,10 @@ public class BaseController extends Controller { changeScene(SceneCode.MY_ROUTES); } + public void addTrip() throws Exception{ + changeScene(SceneCode.ADD_TRIP); + } + public void setContent(Parent parent1){ //remove all children that do not belong to the original fxml while (base.getChildren().size() > childNum) { diff --git a/src/main/java/model/SceneCode.java b/src/main/java/model/SceneCode.java index ff40a7d..36e640e 100644 --- a/src/main/java/model/SceneCode.java +++ b/src/main/java/model/SceneCode.java @@ -15,7 +15,7 @@ public enum SceneCode { MAIN("main", false), BASE("base", false), //screens after login HOME("home"),ADD_RIDE("addride"),MY_RIDES("myrides"), ADD_STOPS("addstops"), MY_STOPS("mystops"), ADD_ROUTE("addroute"), - MY_ROUTES("myroutes"); + MY_ROUTES("myroutes"), ADD_TRIP("addtrip"), MY_TRIPS("mytrips"); private String path; private boolean loadMenu; diff --git a/src/main/java/model/Trip.java b/src/main/java/model/Trip.java new file mode 100644 index 0000000..e4ef571 --- /dev/null +++ b/src/main/java/model/Trip.java @@ -0,0 +1,39 @@ +package model; + +import javafx.collections.ObservableList; + +/** + * Created by Gondr on 5/04/2017. + */ +public class Trip { + + ObservableList route; + String direction; + Ride ride; + boolean[] days; + boolean reoccur; + String endDate; + + static int MONDAY = 0; + static int TUESDAY = 1; + static int WEDNESDAY = 2; + static int THURSDAY = 3; + static int FRIDAY = 4; + static int SATURDAY = 5; + static int SUNDAY = 6; + + public Trip(ObservableList route, String direction, Ride ride, boolean[] days, boolean reoccur, String endDate){ + this.route = route; + this.direction = direction; + this.ride = ride; + this.days = days; + this.reoccur = reoccur; + this.endDate = endDate; + } + + public String toString(){ + String tripString = String.format("This trip has %s stops and driven by %s.", route.size(), ride); + return tripString; + } + +} diff --git a/src/main/java/model/TripStop.java b/src/main/java/model/TripStop.java new file mode 100644 index 0000000..c0be4fe --- /dev/null +++ b/src/main/java/model/TripStop.java @@ -0,0 +1,39 @@ +package model; + +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.property.StringProperty; +import javafx.collections.ObservableList; + +/** + * Created by Gondr on 5/04/2017. + */ +public class TripStop{ + + private StringProperty time; + private StringProperty name; + + public TripStop(String name, String time){ + this.name = new SimpleStringProperty(name); + this.time = new SimpleStringProperty(time); + } + + public String getTime() { + return time.get(); + } + + public StringProperty timeProperty() { + return time; + } + + public void setTime(String time) { + this.time.set(time); + } + + public String getName() { + return name.get(); + } + + public StringProperty nameProperty() { + return name; + } +} diff --git a/src/main/resources/scenes/addtrip.fxml b/src/main/resources/scenes/addtrip.fxml new file mode 100644 index 0000000..016fa49 --- /dev/null +++ b/src/main/resources/scenes/addtrip.fxml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +