Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package gui;
- import javafx.beans.value.ChangeListener;
- import javafx.geometry.Insets;
- import javafx.scene.control.Button;
- import javafx.scene.control.CheckBox;
- import javafx.scene.control.DatePicker;
- import javafx.scene.control.Label;
- import javafx.scene.control.ListView;
- import javafx.scene.control.TextField;
- import javafx.scene.layout.GridPane;
- import model.Hotel;
- import model.Konference;
- import model.Tilmelding;
- import service.Service;
- public class KonferencePane extends GridPane {
- // TODO Spørg margrethe om hvordan man kan få listview til at opdatere hvis
- // man laver noget
- // i en anden tab
- // TODO Hvordan man laver mutiple selections på et listview
- // TODO spørg margrethe om hvordan man håndterer removeHotelFromKonference.
- // Den vil crashe når
- // den kører metoden for anden gang pga. den ikke kan fjerne then samme
- // konference to gange.
- // TODO Spørg også om det er muligt at begrænse DatePicker til kun at virke
- // indenfor
- // konferencen's
- // tidspunkt, og hvordan man forhindrer at der er negativt antal dage.
- private TextField txfKonfId, txfPris, txfSted, txfSamletpris;
- private Label lblStart, lblSlut, lblKonfId, lblPris;
- private ListView<Konference> lvwKonferencer;
- private ListView<Tilmelding> lvwTilmeldinger;
- private DatePicker startDatoPicker, slutDatoPicker;
- private CheckBox cSamletpris;
- public KonferencePane() {
- setPadding(new Insets(20));
- setHgap(20);
- setVgap(10);
- setGridLinesVisible(false);
- cSamletpris = new CheckBox();
- cSamletpris.setText("udregn samlet pris");
- this.add(cSamletpris, 6, 1);
- cSamletpris.setDisable(true);
- cSamletpris.setOnAction(event -> {
- if (cSamletpris.isSelected()) {
- Tilmelding t = lvwTilmeldinger.getSelectionModel()
- .getSelectedItem();
- if (t != null) {
- txfSamletpris.setText(t.beregnSamletPris() + "");
- }
- }
- });
- lblStart = new Label("Start Dato:");
- this.add(lblStart, 0, 0);
- startDatoPicker = new DatePicker();
- this.add(startDatoPicker, 0, 1);
- lblSlut = new Label("Slut Dato:");
- this.add(lblSlut, 0, 2);
- slutDatoPicker = new DatePicker();
- this.add(slutDatoPicker, 0, 3);
- lblKonfId = new Label("Konferrence id:");
- this.add(lblKonfId, 0, 4);
- txfSamletpris = new TextField();
- this.add(txfSamletpris, 6, 2);
- txfSamletpris.setDisable(true);
- txfKonfId = new TextField();
- this.add(txfKonfId, 0, 5);
- lblPris = new Label("Pris:");
- this.add(lblPris, 0, 6);
- txfPris = new TextField();
- this.add(txfPris, 0, 7);
- Label lblSted = new Label("Sted:");
- this.add(lblSted, 0, 8);
- txfSted = new TextField();
- this.add(txfSted, 0, 9);
- Label lblDeltagere = new Label("Deltagere:");
- this.add(lblDeltagere, 3, 0);
- Label lblKonferencer = new Label("Konferencer:");
- this.add(lblKonferencer, 2, 0);
- lvwKonferencer = new ListView<>();
- this.add(lvwKonferencer, 2, 1, 1, 8);
- lvwKonferencer.setPrefHeight(200);
- lvwKonferencer.setPrefWidth(200);
- lvwTilmeldinger = new ListView<>();
- this.add(lvwTilmeldinger, 3, 1, 1, 8);
- lvwTilmeldinger.setPrefHeight(200);
- lvwTilmeldinger.setPrefWidth(200);
- ChangeListener<Tilmelding> tilmeldingListener = (ov, oldTilmelding,
- newTilmelding) -> aktiverPris();
- lvwTilmeldinger.getSelectionModel().selectedItemProperty()
- .addListener(tilmeldingListener);
- /*
- * Updates the listview of konferences upon initialization, othervise it
- * will be empty until a new konference is created
- */
- lvwKonferencer.getItems().setAll(Service.getKonferencer());
- ChangeListener<Konference> konfListener = (ov, oldKonference,
- newKonference) -> updateControls();
- lvwKonferencer.getSelectionModel().selectedItemProperty()
- .addListener(konfListener);
- Button btnAdd = new Button("Opret konference");
- this.add(btnAdd, 0, 11);
- btnAdd.setOnAction(event -> opretKonference());
- Button btnRemove = new Button("Fjern deltager");
- this.add(btnRemove, 0, 12);
- btnRemove.setOnAction(event -> removeTilmelding());
- Button btnRemoveKonf = new Button("Fjern konference");
- this.add(btnRemoveKonf, 0, 13);
- btnRemoveKonf.setOnAction(event -> removeKonference());
- Button btnUpdate = new Button("Opdater konference");
- this.add(btnUpdate, 0, 14);
- btnUpdate.setOnAction(event -> updateKonferenceInfo(lvwKonferencer
- .getSelectionModel().getSelectedItem()));
- }
- /*
- * Creates a new konference with the info read from the textfields. WILL
- * cause errors if any of the textFields it uses are empty. Need an if
- * statement that checks if they're not empty, else discard information and
- * message popup that the user caused a thermonuclear war.
- */
- public void opretKonference() {
- double subtotal = Double.valueOf(txfPris.getText()).doubleValue();
- Service.createKonference(txfKonfId.getText(),
- startDatoPicker.getValue(), slutDatoPicker.getValue(),
- subtotal, txfSted.getText());
- lvwKonferencer.getItems().setAll(Service.getKonferencer());
- clearTextFields();
- }
- /*
- * Checks if a konference exists, then fills the lvwTilmeldinger with it's
- * tilmeldinger.
- */
- public void updateControls() {
- Konference konference = lvwKonferencer.getSelectionModel()
- .getSelectedItem();
- if (konference != null) {
- lvwTilmeldinger.getItems().setAll(konference.getTilmeldinger());
- fillTextFieldsWithKonfInfo(konference);
- }
- }
- /*
- * Removes tilmelding, clears up any links between that and konference so it
- * gets deleted by the garbage collector. Also updates the list
- */
- public void removeTilmelding() {
- Konference konference = lvwKonferencer.getSelectionModel()
- .getSelectedItem();
- Tilmelding tilmelding = lvwTilmeldinger.getSelectionModel()
- .getSelectedItem();
- konference.removeTilmelding(tilmelding);
- lvwTilmeldinger.getItems().setAll(konference.getTilmeldinger());
- }
- /*
- * Deletes the konference from storage via service, removes all link
- * attributes between Tilmeldinger, hotels and the konference itself,
- * atleast that's what is intended. Is possible to crash if more than one
- * hotel is attributed to the konference.
- */
- public void removeKonference() {
- Konference konference = lvwKonferencer.getSelectionModel()
- .getSelectedItem();
- for (Tilmelding t : konference.getTilmeldinger()) {
- konference.removeTilmelding(t);
- }
- for (Hotel h : konference.getHoteller()) {
- Service.removeHotelFromKonference(h, konference);
- }
- lvwTilmeldinger.getItems().setAll(konference.getTilmeldinger());
- Service.deleteKonference(konference);
- lvwKonferencer.getItems().setAll(Service.getKonferencer());
- clearTextFields();
- }
- /*
- * This is clear, the janitor, cleans up after each time we've made a mess
- * from deleting or creating a konference, clear does good.
- */
- public void clearTextFields() {
- txfKonfId.clear();
- txfPris.clear();
- txfSted.clear();
- slutDatoPicker.setValue(null);
- startDatoPicker.setValue(null);
- }
- /*
- * THis is fill, he does the opposite of clear, but only when told to, fills
- * textfields with info rom a konference.
- */
- public void fillTextFieldsWithKonfInfo(Konference k) {
- txfKonfId.setText(k.getKonferenceid());
- txfPris.setText(k.getKonferenceafgift() + "");
- txfSted.setText(k.getSted());
- slutDatoPicker.setValue(k.getSlutDato());
- startDatoPicker.setValue(k.getStartDato());
- }
- /*
- * Reads the textfields and sets them as the new info for the selected
- * konference
- */
- public void updateKonferenceInfo(Konference k) {
- if (k != null) {
- k.setKonferenceid(txfKonfId.getText());
- k.setKonferenceafgift(Double.parseDouble(txfPris.getText()));
- k.setSted(txfSted.getText());
- k.setSlutDato(slutDatoPicker.getValue());
- k.setStartDato(startDatoPicker.getValue());
- lvwKonferencer.getItems().setAll(Service.getKonferencer());
- }
- }
- public void aktiverPris() {
- cSamletpris.setDisable(false);
- txfSamletpris.setDisable(false);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement