From debc5d9c3883a37f9277619633a6699d2ef3b853 Mon Sep 17 00:00:00 2001 From: Fan-Wu Yang Date: Wed, 24 May 2017 22:24:37 +1200 Subject: [PATCH 1/3] Added adjustments that PO requested - hide will not deselect all checkboxes - visible will now show all checkboxes that were deselected when hidden - partial will now select abbreviation and speed only - when another checkbox is selected/deselected from partial,hidden or important it will immediately jump to visible radio button. #story[877] --- .../seng302/Controllers/RaceController.java | 130 ++++++++++++++++-- .../seng302/Model/ResizableRaceCanvas.java | 26 +--- 2 files changed, 123 insertions(+), 33 deletions(-) diff --git a/visualiser/src/main/java/seng302/Controllers/RaceController.java b/visualiser/src/main/java/seng302/Controllers/RaceController.java index de66ea24..fec6217a 100644 --- a/visualiser/src/main/java/seng302/Controllers/RaceController.java +++ b/visualiser/src/main/java/seng302/Controllers/RaceController.java @@ -11,6 +11,8 @@ import seng302.VisualiserInput; import java.net.URL; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; import java.util.ResourceBundle; /** @@ -21,9 +23,25 @@ public class RaceController extends Controller { //user saved data for annotation display private ArrayList presetAnno; + private Map importantAnno; + private Map annoShownBeforeHide; + private int buttonChecked;//button currently checked allows the checkboxes to know whether or not to put it's state in history (if not hidden then store) + private int prevBtnChecked;//button to keep track of previous pressed button incase we want to check a checkbox straight from hidden we do not wish for all previous to come on. + + private static String nameCheckAnno = "name"; + private static String abbrevCheckAnno = "abbrev"; + private static String speedCheckAnno = "speed"; + private static String pathCheckAnno = "path"; + + private static int noBtn = 0; + private static int hideBtn = 1; + private static int showBtn = 2; + private static int partialBtn = 3; + private static int importantBtn = 4; private ResizableRaceCanvas raceMap; private ResizableRaceMap raceBoundaries; + private ToggleGroup annotationGroup; @FXML SplitPane race; @FXML CheckBox showFPS; @FXML CheckBox showBoatPath; @@ -86,7 +104,7 @@ public class RaceController extends Controller { } }); //adds all radios buttons for annotations to a group - ToggleGroup annotationGroup = new ToggleGroup(); + annotationGroup = new ToggleGroup(); hideAnnoRBTN.setToggleGroup(annotationGroup); showAnnoRBTN.setToggleGroup(annotationGroup); partialAnnoRBTN.setToggleGroup(annotationGroup); @@ -165,31 +183,103 @@ public class RaceController extends Controller { }); } + private void storeCurrentAnnotationState(){ + annoShownBeforeHide.put(nameCheckAnno, showName.isSelected()); + annoShownBeforeHide.put(abbrevCheckAnno, showAbbrev.isSelected()); + annoShownBeforeHide.put(pathCheckAnno, showBoatPath.isSelected()); + annoShownBeforeHide.put(speedCheckAnno, showSpeed.isSelected()); + } + /** * Set up boat annotations */ private void initializeAnnotations() { presetAnno = new ArrayList<>(); + + importantAnno = new HashMap<>(); + importantAnno.put(nameCheckAnno, false); + importantAnno.put(abbrevCheckAnno, false); + importantAnno.put(pathCheckAnno, false); + importantAnno.put(speedCheckAnno, false); + + annoShownBeforeHide = new HashMap<>(); + annoShownBeforeHide.put(nameCheckAnno, true); + annoShownBeforeHide.put(abbrevCheckAnno, true); + annoShownBeforeHide.put(pathCheckAnno, true); + annoShownBeforeHide.put(speedCheckAnno, true); //listener for show name in annotation showName.selectedProperty().addListener((ov, old_val, new_val) -> { - raceMap.toggleAnnoName(); + if (old_val != new_val) { + raceMap.toggleAnnoName(); + } + if (buttonChecked != hideBtn) { + //if we are checking the box straight out of hide instead of using the radio buttons + if (prevBtnChecked == hideBtn && buttonChecked != showBtn){ + storeCurrentAnnotationState(); + } else { + annoShownBeforeHide.put(nameCheckAnno, showName.isSelected()); + } + if (buttonChecked == noBtn) { + annotationGroup.selectToggle(showAnnoRBTN); + } + } raceMap.update(); + prevBtnChecked = noBtn; }); //listener for show abbreviation for annotation showAbbrev.selectedProperty().addListener((ov, old_val, new_val) -> { - raceMap.toggleAnnoAbbrev(); + if (old_val != new_val) { + raceMap.toggleAnnoAbbrev(); + } + if (buttonChecked != hideBtn) { + if (prevBtnChecked == hideBtn && buttonChecked != showBtn){ + storeCurrentAnnotationState(); + } else { + annoShownBeforeHide.put(abbrevCheckAnno, showAbbrev.isSelected()); + } + if (buttonChecked == noBtn) { + annotationGroup.selectToggle(showAnnoRBTN); + } + } raceMap.update(); + prevBtnChecked = noBtn; }); //listener for show boat path for annotation showBoatPath.selectedProperty().addListener((ov, old_val, new_val) -> { - raceMap.toggleBoatPath(); + if (old_val != new_val) { + raceMap.toggleBoatPath(); + } + if (buttonChecked != hideBtn) { + if (prevBtnChecked == hideBtn && buttonChecked != showBtn){ + storeCurrentAnnotationState(); + } else { + annoShownBeforeHide.put(pathCheckAnno, showBoatPath.isSelected()); + } + if (buttonChecked == noBtn) { + annotationGroup.selectToggle(showAnnoRBTN); + } + } raceMap.update(); + prevBtnChecked = noBtn; }); //listener to show speed for annotation showSpeed.selectedProperty().addListener((ov, old_val, new_val) -> { - raceMap.toggleAnnoSpeed(); + if (old_val != new_val) { + raceMap.toggleAnnoSpeed(); + } + if (buttonChecked != hideBtn) { + if (prevBtnChecked == hideBtn && buttonChecked != showBtn){ + storeCurrentAnnotationState(); + } else { + annoShownBeforeHide.put(speedCheckAnno, showSpeed.isSelected()); + } + if (buttonChecked == noBtn) { + annotationGroup.selectToggle(showAnnoRBTN); + } + } raceMap.update(); + prevBtnChecked = noBtn; }); //listener to save currently selected annotation saveAnno.setOnAction(event -> { @@ -201,33 +291,55 @@ public class RaceController extends Controller { }); //listener for hiding hideAnnoRBTN.selectedProperty().addListener((ov, old_val, new_val) ->{ - raceMap.hideAnnotations(); + buttonChecked = hideBtn; + //raceMap.hideAnnotations(); + showName.setSelected(false); + showAbbrev.setSelected(false); + showBoatPath.setSelected(false); + showSpeed.setSelected(false); + annotationGroup.selectToggle(hideAnnoRBTN); raceMap.update(); + buttonChecked = noBtn; + prevBtnChecked = hideBtn; }); //listener for showing all annotations showAnnoRBTN.selectedProperty().addListener((ov, old_val, new_val) ->{ - raceMap.showAnnotations(); + buttonChecked = showBtn; + showName.setSelected(annoShownBeforeHide.get(nameCheckAnno)); + showAbbrev.setSelected(annoShownBeforeHide.get(abbrevCheckAnno)); + showBoatPath.setSelected(annoShownBeforeHide.get(pathCheckAnno)); + showSpeed.setSelected(annoShownBeforeHide.get(speedCheckAnno)); raceMap.update(); + buttonChecked = noBtn; + prevBtnChecked = showBtn; }); //listener for showing all important partialAnnoRBTN.selectedProperty().addListener((ov, old_val, new_val) ->{ + buttonChecked = partialBtn; showName.setSelected(false); showAbbrev.setSelected(true); showSpeed.setSelected(true); showBoatPath.setSelected(false); - raceMap.showAnnotations(); + //partialAnnoRBTN.setSelected(true);//as the others will set the show button back to visible then we need to make it so that this is rechecked. + annotationGroup.selectToggle(partialAnnoRBTN); raceMap.update(); + buttonChecked = noBtn; + prevBtnChecked = partialBtn; }); //listener for showing all important importantAnnoRBTN.selectedProperty().addListener((ov, old_val, new_val) ->{ + buttonChecked = importantBtn; if (presetAnno.size() > 0) { showName.setSelected(presetAnno.get(0)); showAbbrev.setSelected(presetAnno.get(1)); showSpeed.setSelected(presetAnno.get(2)); showBoatPath.setSelected(presetAnno.get(3)); - raceMap.showAnnotations(); + annotationGroup.selectToggle(importantAnnoRBTN); raceMap.update(); } + buttonChecked = noBtn; + prevBtnChecked = importantBtn; }); + annotationGroup.selectToggle(showAnnoRBTN); } } diff --git a/visualiser/src/main/java/seng302/Model/ResizableRaceCanvas.java b/visualiser/src/main/java/seng302/Model/ResizableRaceCanvas.java index 0b87a734..3df5055c 100644 --- a/visualiser/src/main/java/seng302/Model/ResizableRaceCanvas.java +++ b/visualiser/src/main/java/seng302/Model/ResizableRaceCanvas.java @@ -23,7 +23,6 @@ public class ResizableRaceCanvas extends ResizableCanvas { private RaceMap map; private List boats; private List boatMarkers; - private boolean raceAnno = true; private boolean annoName = true; private boolean annoAbbrev = true; private boolean annoSpeed = true; @@ -240,26 +239,6 @@ public class ResizableRaceCanvas extends ResizableCanvas { } } - /** - * Toggle the raceAnno value - */ - public void toggleAnnotations() { - raceAnno = !raceAnno; - } - - /** - * Shows the race Annotations - */ - public void showAnnotations(){ - raceAnno = true; - } - - /** - * Hides the Race ANnotations - */ - public void hideAnnotations(){ - raceAnno = false; - } /** * Toggle name display in annotation @@ -309,8 +288,7 @@ public class ResizableRaceCanvas extends ResizableCanvas { displayBoat(boat, 0, colours.get(currentColour)); } - if (raceAnno) - displayText(boat.toString(), boat.getAbbrev(), boat.getVelocity(), this.map.convertGPS(boat.getCurrentPosition())); + displayText(boat.toString(), boat.getAbbrev(), boat.getVelocity(), this.map.convertGPS(boat.getCurrentPosition())); //TODO this needs to be fixed. drawTrack(boat, colours.get(currentColour)); currentColour = (currentColour + 1) % colours.size(); @@ -324,7 +302,7 @@ public class ResizableRaceCanvas extends ResizableCanvas { * @see seng302.Model.TrackPoint */ private void drawTrack(Boat boat, Color colour) { - if (annoPath && raceAnno) { + if (annoPath) { for (TrackPoint point : boat.getTrack()) { GraphCoordinate scaledCoordinate = this.map.convertGPS(point.getCoordinate()); gc.setFill(new Color(colour.getRed(), colour.getGreen(), colour.getBlue(), point.getAlpha())); From e3c3def1848b99bdb0ad7473376e07645920349b Mon Sep 17 00:00:00 2001 From: Fan-Wu Yang Date: Wed, 24 May 2017 22:29:51 +1200 Subject: [PATCH 2/3] Fixed capitalisation that was pointed out by Erika in the Tests - LegTest.java ORIGIN_Compound_MARKER is now ORIGIN_COMPOUND_MARKER #story[877] --- mock/src/test/java/seng302/Model/LegTest.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mock/src/test/java/seng302/Model/LegTest.java b/mock/src/test/java/seng302/Model/LegTest.java index cae7b203..3bf1ffc8 100644 --- a/mock/src/test/java/seng302/Model/LegTest.java +++ b/mock/src/test/java/seng302/Model/LegTest.java @@ -14,7 +14,7 @@ import static junit.framework.TestCase.assertEquals; */ public class LegTest { - private Marker ORIGIN_Compound_MARKER = new Marker(new GPSCoordinate(0, 0)); + private Marker ORIGIN_COMPOUND_MARKER = new Marker(new GPSCoordinate(0, 0)); @Test public void calculateDistanceHandles5nmNorth() { @@ -23,7 +23,7 @@ public class LegTest { calc.setDirection(0, 5 * Constants.NMToMetersConversion); Marker endMarker = getEndMarker(calc.getDestinationGeographicPoint()); - Leg test = new Leg("Test", ORIGIN_Compound_MARKER, endMarker, 0); + Leg test = new Leg("Test", ORIGIN_COMPOUND_MARKER, endMarker, 0); assertEquals(test.getDistance(), 5, 1e-8); } @@ -34,7 +34,7 @@ public class LegTest { calc.setDirection(90, 12 * Constants.NMToMetersConversion); Marker endMarker = getEndMarker(calc.getDestinationGeographicPoint()); - Leg test = new Leg("Test", ORIGIN_Compound_MARKER, endMarker, 0); + Leg test = new Leg("Test", ORIGIN_COMPOUND_MARKER, endMarker, 0); assertEquals(test.getDistance(), 12, 1e-8); } @@ -45,7 +45,7 @@ public class LegTest { calc.setDirection(180, 0.5 * Constants.NMToMetersConversion); Marker endMarker = getEndMarker(calc.getDestinationGeographicPoint()); - Leg test = new Leg("Test", ORIGIN_Compound_MARKER, endMarker, 0); + Leg test = new Leg("Test", ORIGIN_COMPOUND_MARKER, endMarker, 0); assertEquals(test.getDistance(), 0.5, 1e-8); } @@ -56,14 +56,14 @@ public class LegTest { calc.setDirection(-90, 0.1 * Constants.NMToMetersConversion); Marker endMarker = getEndMarker(calc.getDestinationGeographicPoint()); - Leg test = new Leg("Test", ORIGIN_Compound_MARKER, endMarker, 0); + Leg test = new Leg("Test", ORIGIN_COMPOUND_MARKER, endMarker, 0); assertEquals(test.getDistance(), 0.1, 1e-8); } @Test public void calculateDistanceHandlesZeroDifference() { - Leg test = new Leg("Test", ORIGIN_Compound_MARKER, ORIGIN_Compound_MARKER, 0); + Leg test = new Leg("Test", ORIGIN_COMPOUND_MARKER, ORIGIN_COMPOUND_MARKER, 0); assertEquals(test.getDistance(), 0, 1e-8); } From ba5e74ab9c61067c16ffbff3dd0d1b5837689b6f Mon Sep 17 00:00:00 2001 From: Fan-Wu Yang Date: Wed, 24 May 2017 23:13:59 +1200 Subject: [PATCH 3/3] Merge with master complete - merged with master #story[877] --- mock/src/test/java/seng302/Model/LegTest.java | 12 +++---- .../seng302/Controllers/RaceController.java | 34 ++++++++++++++----- .../src/main/resources/scenes/race.fxml | 16 ++++----- 3 files changed, 39 insertions(+), 23 deletions(-) diff --git a/mock/src/test/java/seng302/Model/LegTest.java b/mock/src/test/java/seng302/Model/LegTest.java index 06ac325b..cb8d70d4 100644 --- a/mock/src/test/java/seng302/Model/LegTest.java +++ b/mock/src/test/java/seng302/Model/LegTest.java @@ -14,7 +14,7 @@ import static junit.framework.TestCase.assertEquals; */ public class LegTest { - private CompoundMark ORIGIN_Compound_MARKER = new CompoundMark(new Mark(1, "test mark1", new GPSCoordinate(0, 0))); + private CompoundMark ORIGIN_COMPOUND_MARKER = new CompoundMark(new Mark(1, "test mark1", new GPSCoordinate(0, 0))); @Test public void calculateDistanceHandles5nmNorth() { @@ -23,7 +23,7 @@ public class LegTest { calc.setDirection(0, 5 * Constants.NMToMetersConversion); CompoundMark endMarker = getEndMarker(calc.getDestinationGeographicPoint()); - Leg test = new Leg("Test", ORIGIN_Compound_MARKER, endMarker, 0); + Leg test = new Leg("Test", ORIGIN_COMPOUND_MARKER, endMarker, 0); assertEquals(test.getDistanceNauticalMiles(), 5, 1e-8); } @@ -34,7 +34,7 @@ public class LegTest { calc.setDirection(90, 12 * Constants.NMToMetersConversion); CompoundMark endMarker = getEndMarker(calc.getDestinationGeographicPoint()); - Leg test = new Leg("Test", ORIGIN_Compound_MARKER, endMarker, 0); + Leg test = new Leg("Test", ORIGIN_COMPOUND_MARKER, endMarker, 0); assertEquals(test.getDistanceNauticalMiles(), 12, 1e-8); } @@ -45,7 +45,7 @@ public class LegTest { calc.setDirection(180, 0.5 * Constants.NMToMetersConversion); CompoundMark endMarker = getEndMarker(calc.getDestinationGeographicPoint()); - Leg test = new Leg("Test", ORIGIN_Compound_MARKER, endMarker, 0); + Leg test = new Leg("Test", ORIGIN_COMPOUND_MARKER, endMarker, 0); assertEquals(test.getDistanceNauticalMiles(), 0.5, 1e-8); } @@ -56,14 +56,14 @@ public class LegTest { calc.setDirection(-90, 0.1 * Constants.NMToMetersConversion); CompoundMark endMarker = getEndMarker(calc.getDestinationGeographicPoint()); - Leg test = new Leg("Test", ORIGIN_Compound_MARKER, endMarker, 0); + Leg test = new Leg("Test", ORIGIN_COMPOUND_MARKER, endMarker, 0); assertEquals(test.getDistanceNauticalMiles(), 0.1, 1e-8); } @Test public void calculateDistanceHandlesZeroDifference() { - Leg test = new Leg("Test", ORIGIN_Compound_MARKER, ORIGIN_Compound_MARKER, 0); + Leg test = new Leg("Test", ORIGIN_COMPOUND_MARKER, ORIGIN_COMPOUND_MARKER, 0); assertEquals(test.getDistanceNauticalMiles(), 0, 1e-8); } diff --git a/visualiser/src/main/java/seng302/Controllers/RaceController.java b/visualiser/src/main/java/seng302/Controllers/RaceController.java index 67485626..3082b325 100644 --- a/visualiser/src/main/java/seng302/Controllers/RaceController.java +++ b/visualiser/src/main/java/seng302/Controllers/RaceController.java @@ -17,10 +17,7 @@ import seng302.Model.*; import seng302.VisualiserInput; import java.net.URL; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; -import java.util.ResourceBundle; +import java.util.*; /** * Created by fwy13 on 15/03/2017. @@ -39,6 +36,7 @@ public class RaceController extends Controller { private static String abbrevCheckAnno = "abbrev"; private static String speedCheckAnno = "speed"; private static String pathCheckAnno = "path"; + private static String timeCheckAnno = "time"; private static int noBtn = 0; private static int hideBtn = 1; @@ -63,13 +61,13 @@ public class RaceController extends Controller { @FXML StackPane arrowPane; @FXML CheckBox showFPS; @FXML CheckBox showBoatPath; - @FXML Label timer; - @FXML Label FPS; - @FXML Label timeZone; @FXML CheckBox showName; @FXML CheckBox showAbbrev; @FXML CheckBox showSpeed; @FXML CheckBox showTime; + @FXML Label timer; + @FXML Label FPS; + @FXML Label timeZone; @FXML Button saveAnno; @FXML TableView boatInfoTable; @FXML TableColumn boatPlacingColumn; @@ -357,6 +355,7 @@ public class RaceController extends Controller { annoShownBeforeHide.put(abbrevCheckAnno, showAbbrev.isSelected()); annoShownBeforeHide.put(pathCheckAnno, showBoatPath.isSelected()); annoShownBeforeHide.put(speedCheckAnno, showSpeed.isSelected()); + annoShownBeforeHide.put(timeCheckAnno, showTime.isSelected()); } /** @@ -370,12 +369,14 @@ public class RaceController extends Controller { importantAnno.put(abbrevCheckAnno, false); importantAnno.put(pathCheckAnno, false); importantAnno.put(speedCheckAnno, false); + importantAnno.put(timeCheckAnno, true); annoShownBeforeHide = new HashMap<>(); annoShownBeforeHide.put(nameCheckAnno, true); annoShownBeforeHide.put(abbrevCheckAnno, true); annoShownBeforeHide.put(pathCheckAnno, true); annoShownBeforeHide.put(speedCheckAnno, true); + annoShownBeforeHide.put(timeCheckAnno, true); //listener for show name in annotation showName.selectedProperty().addListener((ov, old_val, new_val) -> { if (old_val != new_val) { @@ -451,7 +452,20 @@ public class RaceController extends Controller { prevBtnChecked = noBtn; }); showTime.selectedProperty().addListener((ov, old_val, new_val) -> { - raceMap.toggleAnnoTime(); + if (old_val != new_val) { + raceMap.toggleAnnoTime(); + } + if (buttonChecked != hideBtn) { + if (prevBtnChecked == hideBtn && buttonChecked != showBtn){ + storeCurrentAnnotationState(); + } else { + annoShownBeforeHide.put(timeCheckAnno, showTime.isSelected()); + } + if (buttonChecked == noBtn) { + annotationGroup.selectToggle(showAnnoRBTN); + } + } + prevBtnChecked = noBtn; raceMap.update(); }); //listener to save currently selected annotation @@ -471,6 +485,7 @@ public class RaceController extends Controller { showAbbrev.setSelected(false); showBoatPath.setSelected(false); showSpeed.setSelected(false); + showTime.setSelected(false); annotationGroup.selectToggle(hideAnnoRBTN); raceMap.update(); buttonChecked = noBtn; @@ -483,6 +498,7 @@ public class RaceController extends Controller { showAbbrev.setSelected(annoShownBeforeHide.get(abbrevCheckAnno)); showBoatPath.setSelected(annoShownBeforeHide.get(pathCheckAnno)); showSpeed.setSelected(annoShownBeforeHide.get(speedCheckAnno)); + showTime.setSelected(annoShownBeforeHide.get(timeCheckAnno)); raceMap.update(); buttonChecked = noBtn; prevBtnChecked = showBtn; @@ -494,7 +510,7 @@ public class RaceController extends Controller { showAbbrev.setSelected(true); showSpeed.setSelected(true); showBoatPath.setSelected(false); - //partialAnnoRBTN.setSelected(true);//as the others will set the show button back to visible then we need to make it so that this is rechecked. + showTime.setSelected(false); annotationGroup.selectToggle(partialAnnoRBTN); raceMap.update(); buttonChecked = noBtn; diff --git a/visualiser/src/main/resources/scenes/race.fxml b/visualiser/src/main/resources/scenes/race.fxml index 8a661e1e..900b731d 100644 --- a/visualiser/src/main/resources/scenes/race.fxml +++ b/visualiser/src/main/resources/scenes/race.fxml @@ -32,14 +32,14 @@ - - -