@ -7,23 +7,17 @@ import javafx.fxml.FXML;
import javafx.scene.chart.LineChart ;
import javafx.scene.chart.NumberAxis ;
import javafx.scene.chart.XYChart ;
import javafx.geometry.Pos ;
import javafx.scene.control.* ;
import javafx.scene.layout.GridPane ;
import javafx.scene.paint.Color ;
import javafx.scene.layout.Pane ;
import javafx.scene.layout.StackPane ;
import javafx.scene.paint.Color ;
import javafx.scene.paint.Paint ;
import seng302.Mock.StreamedRace ;
import seng302.Model.* ;
import seng302.VisualiserInput ;
import java.net.URL ;
import java.util.* ;
import java.util.ArrayList ;
import java.util.Locale ;
import java.util.ResourceBundle ;
/ * *
* Created by fwy13 on 15 / 03 / 2017.
@ -33,34 +27,57 @@ public class RaceController extends Controller {
//user saved data for annotation display
private ArrayList < Boolean > presetAnno ;
private Map < String , Boolean > importantAnno ;
private Map < String , Boolean > 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 String timeCheckAnno = "time" ;
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 ArrayList < Boat > startBoats ;
private Integer sparkLineNumber = 0 ;
private ResizableRaceCanvas raceMap ;
private ResizableRaceMap raceBoundaries ;
private ToggleGroup annotationGroup ;
private ArrayList < String > colours ;
private Map < Integer , String > boatColours = new HashMap < > ( ) ;
private int legNum ;
private RaceClock raceClock ;
@FXML Pane arrow ;
@FXML SplitPane race ;
@FXML StackPane arrowPane ;
@FXML CheckBox showFPS ;
@FXML CheckBox showBoatPath ;
@FXML CheckBox showAnnotations ;
@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 Button showSetAnno ;
@FXML TableView < Boat > boatInfoTable ;
@FXML TableColumn < Boat , String > boatPlacingColumn ;
@FXML TableColumn < Boat , String > boatTeamColumn ;
@FXML TableColumn < Boat , String > boatMarkColumn ;
@FXML TableColumn < Boat , String > boatSpeedColumn ;
@FXML RadioButton hideAnnoRBTN ;
@FXML RadioButton showAnnoRBTN ;
@FXML RadioButton partialAnnoRBTN ;
@FXML RadioButton importantAnnoRBTN ;
@FXML LineChart < Number , Number > sparklineChart ;
@FXML NumberAxis xAxis ;
@FXML NumberAxis yAxis ;
@ -107,6 +124,12 @@ public class RaceController extends Controller {
FPS . setVisible ( false ) ;
}
} ) ;
//adds all radios buttons for annotations to a group
annotationGroup = new ToggleGroup ( ) ;
hideAnnoRBTN . setToggleGroup ( annotationGroup ) ;
showAnnoRBTN . setToggleGroup ( annotationGroup ) ;
partialAnnoRBTN . setToggleGroup ( annotationGroup ) ;
importantAnnoRBTN . setToggleGroup ( annotationGroup ) ;
}
/ * *
@ -223,21 +246,15 @@ public class RaceController extends Controller {
new Thread ( ( newRace ) ) . start ( ) ;
}
/ * *
* Finish Race View
* @param boats boats there are in the race .
* /
public void finishRace ( ObservableList < Boat > boats ) {
race . setVisible ( false ) ;
parent . enterFinish ( boats ) ;
}
/ * *
* Set the value for the race clock label
*
* @param time time that the label will be updated to
* /
public void setTimer ( String time ) {
//timer.setText(time);
}
/ * *
* Set the value for the fps label
*
@ -332,39 +349,123 @@ 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 ( ) ) ;
annoShownBeforeHide . put ( timeCheckAnno , showTime . isSelected ( ) ) ;
}
/ * *
* Set up boat annotations
* /
private void initializeAnnotations ( ) {
presetAnno = new ArrayList < > ( ) ;
//listener for annotation
showAnnotations . selectedProperty ( ) . addListener ( ( ov , old_val , new_val ) - > {
raceMap . toggleAnnotations ( ) ;
raceMap . update ( ) ;
} ) ;
importantAnno = new HashMap < > ( ) ;
importantAnno . put ( nameCheckAnno , false ) ;
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 ) - > {
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 ;
} ) ;
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
@ -374,17 +475,63 @@ public class RaceController extends Controller {
presetAnno . add ( showAbbrev . isSelected ( ) ) ;
presetAnno . add ( showSpeed . isSelected ( ) ) ;
presetAnno . add ( showBoatPath . isSelected ( ) ) ;
presetAnno . add ( showTime . isSelected ( ) ) ;
} ) ;
//listener for hiding
hideAnnoRBTN . selectedProperty ( ) . addListener ( ( ov , old_val , new_val ) - > {
buttonChecked = hideBtn ;
//raceMap.hideAnnotations();
showName . setSelected ( false ) ;
showAbbrev . setSelected ( false ) ;
showBoatPath . setSelected ( false ) ;
showSpeed . setSelected ( false ) ;
showTime . setSelected ( false ) ;
annotationGroup . selectToggle ( hideAnnoRBTN ) ;
raceMap . update ( ) ;
buttonChecked = noBtn ;
prevBtnChecked = hideBtn ;
} ) ;
//listener for showing all annotations
showAnnoRBTN . selectedProperty ( ) . addListener ( ( ov , old_val , new_val ) - > {
buttonChecked = showBtn ;
showName . setSelected ( annoShownBeforeHide . get ( nameCheckAnno ) ) ;
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 ;
} ) ;
//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 ) ;
showTime . setSelected ( false ) ;
annotationGroup . selectToggle ( partialAnnoRBTN ) ;
raceMap . update ( ) ;
buttonChecked = noBtn ;
prevBtnChecked = partialBtn ;
} ) ;
//listener to show saved annotation
showSetAnno . setOnAction ( event - > {
//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 ) ) ;
showTime . setSelected ( presetAnno . get ( 4 ) ) ;
annotationGroup . selectToggle ( importantAnnoRBTN ) ;
raceMap . update ( ) ;
}
buttonChecked = noBtn ;
prevBtnChecked = importantBtn ;
} ) ;
annotationGroup . selectToggle ( showAnnoRBTN ) ;
}
private String colourToHex ( Color color ) {