From 957821f1f2d272b0ab19c052ccee733c6a06c0cb Mon Sep 17 00:00:00 2001 From: Zhi You Tan Date: Sat, 23 Sep 2017 01:39:26 +1200 Subject: [PATCH] [WIP] Created a snackbar for notification. Currently used for keybinding success/fail. Need to show red if fails. #story[1278] --- .../visualiser/controllers/ViewManager.java | 26 ++++++++++++++++++- .../dialogs/KeyBindingDialogController.java | 22 +++++++++++++--- src/main/resources/css/Master.css | 15 +++++++++++ .../views/dialogs/KeyBindingDialog.fxml | 25 +++++++++--------- 4 files changed, 71 insertions(+), 17 deletions(-) diff --git a/src/main/java/seng302/visualiser/controllers/ViewManager.java b/src/main/java/seng302/visualiser/controllers/ViewManager.java index 60e181ae..13fcdd3f 100644 --- a/src/main/java/seng302/visualiser/controllers/ViewManager.java +++ b/src/main/java/seng302/visualiser/controllers/ViewManager.java @@ -4,6 +4,7 @@ import com.jfoenix.controls.JFXButton; import com.jfoenix.controls.JFXDecorator; import com.jfoenix.controls.JFXDialog; import com.jfoenix.controls.JFXDialog.DialogTransition; +import com.jfoenix.controls.JFXSnackbar; import com.jfoenix.svg.SVGGlyph; import java.io.IOException; import java.util.HashMap; @@ -37,6 +38,7 @@ public class ViewManager { private ObservableList playerList; private Logger logger = LoggerFactory.getLogger(ViewManager.class); private Stage stage; + private JFXSnackbar jfxSnackbar; private ViewManager() { properties = new HashMap<>(); @@ -98,6 +100,10 @@ public class ViewManager { gameClient.stopGame(); System.exit(0); }); + + jfxSnackbar = new JFXSnackbar(); + decorator.getChildren().add(jfxSnackbar); + jfxSnackbar.registerSnackbarContainer(decorator); } /** @@ -210,13 +216,22 @@ public class ViewManager { DialogTransition.CENTER); KeyBindingDialogController keyBindingDialogController = dialogContent .getController(); - keyBindingDialogController.init(gameClient.getKeyBind()); + keyBindingDialogController.init(gameClient.getKeyBind(), this); dialog.show(); 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. */ @@ -362,4 +377,13 @@ public class ViewManager { public Stage getStage() { return stage; } + + /** + * Getter to return snackbar object. + * + * @return snackbar object. + */ + public JFXSnackbar getJfxSnackbar() { + return jfxSnackbar; + } } diff --git a/src/main/java/seng302/visualiser/controllers/dialogs/KeyBindingDialogController.java b/src/main/java/seng302/visualiser/controllers/dialogs/KeyBindingDialogController.java index 114b2f74..62be7b1f 100644 --- a/src/main/java/seng302/visualiser/controllers/dialogs/KeyBindingDialogController.java +++ b/src/main/java/seng302/visualiser/controllers/dialogs/KeyBindingDialogController.java @@ -1,20 +1,28 @@ package seng302.visualiser.controllers.dialogs; 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.Initializable; import javafx.scene.control.Label; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; - -import java.net.URL; -import java.util.*; import seng302.model.GameClientAction; +import seng302.visualiser.controllers.ViewManager; public class KeyBindingDialogController implements Initializable { //--------FXML BEGIN--------// @FXML + private JFXDialogLayout keyBindDialog; + @FXML private Label keyBindingDialogHeader; @FXML private JFXButton zoomInbtn; @@ -32,6 +40,8 @@ public class KeyBindingDialogController implements Initializable { private JFXButton downwindBtn; //---------FXML END---------// + private ViewManager viewManager; // added viewManager to access snackbar. To be removed. + private Map keys; private List buttons = new ArrayList<>(); private Map keyBind; @@ -48,8 +58,9 @@ public class KeyBindingDialogController implements Initializable { * * @param keyBind a map with GameClientAction and KeyCode pair to be used in GameClient. */ - public void init(Map keyBind) { + public void init(Map keyBind, ViewManager viewManager) { this.keyBind = keyBind; + this.viewManager = viewManager; buttons = new ArrayList<>(); Collections @@ -130,10 +141,13 @@ public class KeyBindingDialogController implements Initializable { keys.replace(button, null); keyBind.replace(buttonAndGameClientActionMap.get(button), null); button.setText(""); + viewManager + .showSnackbar(button.getId() + " can't be set to " + event.getCode().getName()); } else { keys.replace(button, event.getCode()); keyBind.replace(buttonAndGameClientActionMap.get(button), event.getCode()); button.setText(event.getCode().getName()); + viewManager.showSnackbar(button.getId() + " is set to " + event.getCode().getName()); } } } diff --git a/src/main/resources/css/Master.css b/src/main/resources/css/Master.css index 8636a88a..c1d97ddd 100644 --- a/src/main/resources/css/Master.css +++ b/src/main/resources/css/Master.css @@ -99,4 +99,19 @@ .slider .track { -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; } \ No newline at end of file diff --git a/src/main/resources/views/dialogs/KeyBindingDialog.fxml b/src/main/resources/views/dialogs/KeyBindingDialog.fxml index 29eaa1b3..f22f17dc 100644 --- a/src/main/resources/views/dialogs/KeyBindingDialog.fxml +++ b/src/main/resources/views/dialogs/KeyBindingDialog.fxml @@ -9,9 +9,10 @@ - @@ -68,31 +69,31 @@ - - - - - - -