[WIP] Created a snackbar for notification. Currently used for keybinding success/fail. Need to show red if fails.

#story[1278]
This commit is contained in:
Zhi You Tan
2017-09-23 01:39:26 +12:00
parent 094eb4c1cf
commit 957821f1f2
4 changed files with 71 additions and 17 deletions
@@ -4,6 +4,7 @@ import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXDecorator; import com.jfoenix.controls.JFXDecorator;
import com.jfoenix.controls.JFXDialog; import com.jfoenix.controls.JFXDialog;
import com.jfoenix.controls.JFXDialog.DialogTransition; import com.jfoenix.controls.JFXDialog.DialogTransition;
import com.jfoenix.controls.JFXSnackbar;
import com.jfoenix.svg.SVGGlyph; import com.jfoenix.svg.SVGGlyph;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
@@ -37,6 +38,7 @@ public class ViewManager {
private ObservableList<String> playerList; private ObservableList<String> playerList;
private Logger logger = LoggerFactory.getLogger(ViewManager.class); private Logger logger = LoggerFactory.getLogger(ViewManager.class);
private Stage stage; private Stage stage;
private JFXSnackbar jfxSnackbar;
private ViewManager() { private ViewManager() {
properties = new HashMap<>(); properties = new HashMap<>();
@@ -98,6 +100,10 @@ public class ViewManager {
gameClient.stopGame(); gameClient.stopGame();
System.exit(0); System.exit(0);
}); });
jfxSnackbar = new JFXSnackbar();
decorator.getChildren().add(jfxSnackbar);
jfxSnackbar.registerSnackbarContainer(decorator);
} }
/** /**
@@ -210,13 +216,22 @@ public class ViewManager {
DialogTransition.CENTER); DialogTransition.CENTER);
KeyBindingDialogController keyBindingDialogController = dialogContent KeyBindingDialogController keyBindingDialogController = dialogContent
.getController(); .getController();
keyBindingDialogController.init(gameClient.getKeyBind()); keyBindingDialogController.init(gameClient.getKeyBind(), this);
dialog.show(); dialog.show();
Sounds.playButtonClick(); Sounds.playButtonClick();
} }
} }
} }
/**
* Show a snackbar at the bottom of the app for 1 second.
*
* @param snackbarText text to be displayed.
*/
public void showSnackbar(String snackbarText) {
jfxSnackbar.show(snackbarText, 1000);
}
/** /**
* Determines if a PC has compatibility with the bonjour protocol for server detection. * Determines if a PC has compatibility with the bonjour protocol for server detection.
*/ */
@@ -362,4 +377,13 @@ public class ViewManager {
public Stage getStage() { public Stage getStage() {
return stage; return stage;
} }
/**
* Getter to return snackbar object.
*
* @return snackbar object.
*/
public JFXSnackbar getJfxSnackbar() {
return jfxSnackbar;
}
} }
@@ -1,20 +1,28 @@
package seng302.visualiser.controllers.dialogs; package seng302.visualiser.controllers.dialogs;
import com.jfoenix.controls.JFXButton; import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXDialogLayout;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.input.KeyCode; import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent; import javafx.scene.input.KeyEvent;
import java.net.URL;
import java.util.*;
import seng302.model.GameClientAction; import seng302.model.GameClientAction;
import seng302.visualiser.controllers.ViewManager;
public class KeyBindingDialogController implements Initializable { public class KeyBindingDialogController implements Initializable {
//--------FXML BEGIN--------// //--------FXML BEGIN--------//
@FXML @FXML
private JFXDialogLayout keyBindDialog;
@FXML
private Label keyBindingDialogHeader; private Label keyBindingDialogHeader;
@FXML @FXML
private JFXButton zoomInbtn; private JFXButton zoomInbtn;
@@ -32,6 +40,8 @@ public class KeyBindingDialogController implements Initializable {
private JFXButton downwindBtn; private JFXButton downwindBtn;
//---------FXML END---------// //---------FXML END---------//
private ViewManager viewManager; // added viewManager to access snackbar. To be removed.
private Map<JFXButton, KeyCode> keys; private Map<JFXButton, KeyCode> keys;
private List<JFXButton> buttons = new ArrayList<>(); private List<JFXButton> buttons = new ArrayList<>();
private Map<GameClientAction, KeyCode> keyBind; private Map<GameClientAction, KeyCode> keyBind;
@@ -48,8 +58,9 @@ public class KeyBindingDialogController implements Initializable {
* *
* @param keyBind a map with GameClientAction and KeyCode pair to be used in GameClient. * @param keyBind a map with GameClientAction and KeyCode pair to be used in GameClient.
*/ */
public void init(Map<GameClientAction, KeyCode> keyBind) { public void init(Map<GameClientAction, KeyCode> keyBind, ViewManager viewManager) {
this.keyBind = keyBind; this.keyBind = keyBind;
this.viewManager = viewManager;
buttons = new ArrayList<>(); buttons = new ArrayList<>();
Collections Collections
@@ -130,10 +141,13 @@ public class KeyBindingDialogController implements Initializable {
keys.replace(button, null); keys.replace(button, null);
keyBind.replace(buttonAndGameClientActionMap.get(button), null); keyBind.replace(buttonAndGameClientActionMap.get(button), null);
button.setText(""); button.setText("");
viewManager
.showSnackbar(button.getId() + " can't be set to " + event.getCode().getName());
} else { } else {
keys.replace(button, event.getCode()); keys.replace(button, event.getCode());
keyBind.replace(buttonAndGameClientActionMap.get(button), event.getCode()); keyBind.replace(buttonAndGameClientActionMap.get(button), event.getCode());
button.setText(event.getCode().getName()); button.setText(event.getCode().getName());
viewManager.showSnackbar(button.getId() + " is set to " + event.getCode().getName());
} }
} }
} }
+15
View File
@@ -99,4 +99,19 @@
.slider .track { .slider .track {
-fx-background-color: -fx-pp-dark-text-color; -fx-background-color: -fx-pp-dark-text-color;
}
.jfx-snackbar-content {
-fx-background-color: WHITE;
-fx-padding: 0 5 0 5;
-fx-spacing: 0 5 0 5;
-fx-font-size: 18px;
}
.jfx-snackbar-toast {
-fx-text-fill: -fx-pp-theme-color;
}
.jfx-snackbar-action {
-fx-text-fill: #ff4081;
} }
@@ -9,9 +9,10 @@
<?import javafx.scene.layout.ColumnConstraints?> <?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?> <?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?> <?import javafx.scene.layout.RowConstraints?>
<JFXDialogLayout maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity"
minWidth="-Infinity" prefHeight="650.0" prefWidth="550.0" xmlns="http://javafx.com/javafx/8" <JFXDialogLayout fx:id="keyBindDialog" maxHeight="-Infinity" maxWidth="-Infinity"
xmlns:fx="http://javafx.com/fxml/1" minHeight="-Infinity" minWidth="-Infinity" prefHeight="650.0" prefWidth="550.0"
xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="seng302.visualiser.controllers.dialogs.KeyBindingDialogController"> fx:controller="seng302.visualiser.controllers.dialogs.KeyBindingDialogController">
<children> <children>
<GridPane> <GridPane>
@@ -68,31 +69,31 @@
<GridPane.margin> <GridPane.margin>
<Insets/> <Insets/>
</GridPane.margin></Label> </GridPane.margin></Label>
<JFXButton fx:id="zoomInbtn" buttonType="RAISED" maxHeight="-Infinity" <JFXButton id="ZOOM IN" fx:id="zoomInbtn" buttonType="RAISED" maxHeight="-Infinity"
maxWidth="-Infinity" minHeight="40.0" minWidth="-Infinity" prefWidth="150.0" text="Z" maxWidth="-Infinity" minHeight="40.0" minWidth="-Infinity" prefWidth="150.0" text="Z"
GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="1" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="1"
GridPane.valignment="CENTER"/> GridPane.valignment="CENTER"/>
<JFXButton fx:id="zoomOutBtn" buttonType="RAISED" maxHeight="-Infinity" <JFXButton id="ZOOM OUT" fx:id="zoomOutBtn" buttonType="RAISED" maxHeight="-Infinity"
maxWidth="-Infinity" minHeight="40.0" minWidth="-Infinity" prefWidth="150.0" text="X" maxWidth="-Infinity" minHeight="40.0" minWidth="-Infinity" prefWidth="150.0" text="X"
GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="2" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="2"
GridPane.valignment="CENTER"/> GridPane.valignment="CENTER"/>
<JFXButton fx:id="vmgBtn" buttonType="RAISED" maxHeight="-Infinity" <JFXButton id="VMG" fx:id="vmgBtn" buttonType="RAISED" maxHeight="-Infinity"
maxWidth="-Infinity" minHeight="40.0" minWidth="-Infinity" prefWidth="150.0" maxWidth="-Infinity" minHeight="40.0" minWidth="-Infinity" prefWidth="150.0"
text="SPACE" GridPane.columnIndex="1" GridPane.halignment="CENTER" text="SPACE" GridPane.columnIndex="1" GridPane.halignment="CENTER"
GridPane.rowIndex="3" GridPane.valignment="CENTER"/> GridPane.rowIndex="3" GridPane.valignment="CENTER"/>
<JFXButton fx:id="sailInOutBtn" buttonType="RAISED" maxHeight="-Infinity" <JFXButton id="SAILS IN/OUT" fx:id="sailInOutBtn" buttonType="RAISED"
maxWidth="-Infinity" minHeight="40.0" minWidth="-Infinity" prefWidth="150.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="40.0" minWidth="-Infinity"
text="SHIFT" GridPane.columnIndex="1" GridPane.halignment="CENTER" prefWidth="150.0" text="SHIFT" GridPane.columnIndex="1" GridPane.halignment="CENTER"
GridPane.rowIndex="4" GridPane.valignment="CENTER"/> GridPane.rowIndex="4" GridPane.valignment="CENTER"/>
<JFXButton fx:id="tackGybeBtn" buttonType="RAISED" maxHeight="-Infinity" <JFXButton id="TACK/GYBE" fx:id="tackGybeBtn" buttonType="RAISED" maxHeight="-Infinity"
maxWidth="-Infinity" minHeight="40.0" minWidth="-Infinity" prefWidth="150.0" maxWidth="-Infinity" minHeight="40.0" minWidth="-Infinity" prefWidth="150.0"
text="ENTER" GridPane.columnIndex="1" GridPane.halignment="CENTER" text="ENTER" GridPane.columnIndex="1" GridPane.halignment="CENTER"
GridPane.rowIndex="5" GridPane.valignment="CENTER"/> GridPane.rowIndex="5" GridPane.valignment="CENTER"/>
<JFXButton fx:id="upwindBtn" buttonType="RAISED" maxHeight="-Infinity" <JFXButton id="UPWIND" fx:id="upwindBtn" buttonType="RAISED" maxHeight="-Infinity"
maxWidth="-Infinity" minHeight="40.0" minWidth="-Infinity" prefWidth="150.0" maxWidth="-Infinity" minHeight="40.0" minWidth="-Infinity" prefWidth="150.0"
text="PAGE_UP" GridPane.columnIndex="1" GridPane.halignment="CENTER" text="PAGE_UP" GridPane.columnIndex="1" GridPane.halignment="CENTER"
GridPane.rowIndex="6" GridPane.valignment="CENTER"/> GridPane.rowIndex="6" GridPane.valignment="CENTER"/>
<JFXButton fx:id="downwindBtn" buttonType="RAISED" maxHeight="-Infinity" <JFXButton id="DOWNWIND" fx:id="downwindBtn" buttonType="RAISED" maxHeight="-Infinity"
maxWidth="-Infinity" minHeight="40.0" minWidth="-Infinity" prefWidth="150.0" maxWidth="-Infinity" minHeight="40.0" minWidth="-Infinity" prefWidth="150.0"
text="PAGE_DOWN" GridPane.columnIndex="1" GridPane.halignment="CENTER" text="PAGE_DOWN" GridPane.columnIndex="1" GridPane.halignment="CENTER"
GridPane.rowIndex="7" GridPane.valignment="CENTER"/> GridPane.rowIndex="7" GridPane.valignment="CENTER"/>