diff --git a/build.gradle b/build.gradle index 08eeec4..02ea9db 100644 --- a/build.gradle +++ b/build.gradle @@ -82,6 +82,8 @@ dependencies { compile 'ws.schild:jave-core:2.5.0' runtime 'org.slf4j:jcl-over-slf4j:1.7.25' runtime 'org.slf4j:log4j-over-slf4j:1.7.25' + compile group: 'javax.mail', name: 'mail', version: '1.4.5' + compile group: 'javax.activation', name: 'activation', version: '1.1.1' } diff --git a/scripts/changePassword.sh b/scripts/changePassword.sh new file mode 100644 index 0000000..3ee6aae --- /dev/null +++ b/scripts/changePassword.sh @@ -0,0 +1,2 @@ +#!/bin/bash +echo -e $(echo -e $(zenity --forms --title="Changer de mot de passe" --text="Mot de passe pour $USER" --separator="\n" --add-password="Ancien mot de passe" --add-password="Nouveau mot de passe" --add-password="Confirmez le mot de passe") | sed ':a;N;$!ba;s/\n/\\n/g') | passwd diff --git a/src/main/java/main/Configuration.java b/src/main/java/main/Configuration.java index 07879cd..3f5e7ba 100644 --- a/src/main/java/main/Configuration.java +++ b/src/main/java/main/Configuration.java @@ -11,6 +11,8 @@ public class Configuration { + public final static String VERSION = "InterAACtionBox-Interface 1.0.0 Dev v.2021.18.11"; + public final static int MOUSE_INTERACTION = 0; public final static int GAZE_INTERACTION = 1; @Setter diff --git a/src/main/java/main/Main.java b/src/main/java/main/Main.java index 7517e07..7400189 100644 --- a/src/main/java/main/Main.java +++ b/src/main/java/main/Main.java @@ -12,6 +12,7 @@ import javafx.stage.Screen; import javafx.stage.Stage; import javafx.stage.StageStyle; +import main.UI.menu.ContactUs; import main.UI.menu.GraphicalMenus; import main.utils.StageUtils; import main.utils.UtilsOS; diff --git a/src/main/java/main/UI/menu/ContactUs.java b/src/main/java/main/UI/menu/ContactUs.java new file mode 100644 index 0000000..c1036a2 --- /dev/null +++ b/src/main/java/main/UI/menu/ContactUs.java @@ -0,0 +1,120 @@ +package main.UI.menu; + +import javafx.geometry.HPos; +import javafx.geometry.Pos; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; +import javafx.scene.layout.BorderPane; +import javafx.scene.layout.GridPane; +import lombok.extern.slf4j.Slf4j; +import main.utils.UtilsMail; +import main.utils.UtilsUI; + +@Slf4j +public class ContactUs extends BorderPane { + + + Label errorLabel = new Label(); + + public ContactUs(GraphicalMenus graphicalMenus) { + + this.getChildren().add(UtilsUI.createBackground(graphicalMenus)); + + this.prefWidthProperty().bind(graphicalMenus.primaryStage.widthProperty()); + this.prefHeightProperty().bind(graphicalMenus.primaryStage.heightProperty()); + + this.setTop(UtilsUI.createTopBar(graphicalMenus.getOptionsMenu(), graphicalMenus, "Contact")); + + GridPane settings = new GridPane(); + settings.setHgap(20); + settings.setVgap(graphicalMenus.primaryStage.getHeight() / 20); + settings.prefWidthProperty().bind(this.prefWidthProperty()); + + + Label firstNameLabel = new Label("Nom*:"); + TextField firstName = new TextField(); + firstName.setPromptText("Dupont"); + firstName.minWidthProperty().bind(settings.prefWidthProperty().divide(8)); + firstName.prefWidthProperty().bind(settings.prefWidthProperty().divide(8)); + firstName.maxWidthProperty().bind(settings.prefWidthProperty().divide(8)); + + + Label lastNameLabel = new Label("Pr\u00e9nom*:"); + TextField lastName = new TextField(); + lastName.setPromptText("Martin"); + lastName.minWidthProperty().bind(settings.prefWidthProperty().divide(8)); + lastName.prefWidthProperty().bind(settings.prefWidthProperty().divide(8)); + lastName.maxWidthProperty().bind(settings.prefWidthProperty().divide(8)); + + + Label mailLabel = new Label("E-mail*:"); + TextField email = new TextField(); + email.setPromptText("Martin.Dupont@email.fr"); + email.minWidthProperty().bind(settings.prefWidthProperty().divide(4)); + email.prefWidthProperty().bind(settings.prefWidthProperty().divide(4)); + email.maxWidthProperty().bind(settings.prefWidthProperty().divide(4)); + + + Label objectLabel = new Label("Objet*:"); + TextField object = new TextField(); + object.setPromptText("Objet du message"); + object.minWidthProperty().bind(settings.prefWidthProperty().divide(4)); + object.prefWidthProperty().bind(settings.prefWidthProperty().divide(4)); + object.maxWidthProperty().bind(settings.prefWidthProperty().divide(4)); + + Label messageLabel = new Label("Message*:"); + TextArea message = new TextArea(); + message.setPromptText("Un probl\u00e8me, Une id\u00e9e, vous voulez travailler avec nous ? Dites-nous tout ! "); + message.setWrapText(true); + message.minWidthProperty().bind(settings.prefWidthProperty().divide(3)); + message.prefWidthProperty().bind(settings.prefWidthProperty().divide(3)); + message.maxWidthProperty().bind(settings.prefWidthProperty().divide(3)); + + message.minHeightProperty().bind(this.prefHeightProperty().divide(3)); + message.prefHeightProperty().bind(this.prefHeightProperty().divide(3)); + message.maxHeightProperty().bind(this.prefHeightProperty().divide(3)); + + Button ok = new Button("Envoyer"); + ok.setOnAction((event) -> { + send(errorLabel, firstName.getText(), lastName.getText(), email.getText(), object.getText(), message.getText()); + }); + + GridPane.setHalignment(firstName, HPos.CENTER); + GridPane.setHalignment(lastName, HPos.CENTER); + GridPane.setHalignment(email, HPos.CENTER); + + GridPane.setHalignment(object, HPos.CENTER); + GridPane.setHalignment(message, HPos.CENTER); + GridPane.setHalignment(errorLabel, HPos.CENTER); + GridPane.setHalignment(ok, HPos.CENTER); + + settings.add(firstNameLabel, 0, 0); + settings.add(firstName, 1, 0); + settings.add(lastNameLabel, 2, 0); + settings.add(lastName, 3, 0); + settings.add(mailLabel, 0, 1); + settings.add(email, 1, 1, 3, 1); + settings.add(objectLabel, 0, 2); + settings.add(object, 1, 2, 3, 1); + settings.add(messageLabel, 0, 3); + settings.add(message, 0, 4, 4, 1); + settings.add(errorLabel, 0, 5, 4, 1); + settings.add(ok, 0, 6, 4, 1); + + settings.setAlignment(Pos.CENTER); + this.setCenter(settings); + } + + public static void send(Label errorLabel, String firstname, String lastname, String email, String object, String text) { + UtilsMail.send(errorLabel, + firstname, + lastname, + email, + object, + text + ); + } + +} diff --git a/src/main/java/main/UI/menu/GraphicalMenus.java b/src/main/java/main/UI/menu/GraphicalMenus.java index 502f342..2643366 100644 --- a/src/main/java/main/UI/menu/GraphicalMenus.java +++ b/src/main/java/main/UI/menu/GraphicalMenus.java @@ -21,15 +21,21 @@ public class GraphicalMenus { private final OptionsMenu optionsMenu; @Getter private final UpdateMenu updateMenu; + @Getter + private final UserPageMenu userPageMenu; + @Getter + private final ContactUs contactUs; public NamedProcess process = new NamedProcess(); public GraphicalMenus(Stage primaryStage) { this.primaryStage = primaryStage; UpdateManager updateManager = new UpdateManager(); - this.optionsMenu = new OptionsMenu(this); this.homeScreen = new HomeScreen(this, updateManager); + this.optionsMenu = new OptionsMenu(this); this.updateMenu = new UpdateMenu(this, updateManager); + this.userPageMenu = new UserPageMenu(this); + this.contactUs = new ContactUs(this); } } diff --git a/src/main/java/main/UI/menu/HomeScreen.java b/src/main/java/main/UI/menu/HomeScreen.java index 243d1a5..1db0ada 100644 --- a/src/main/java/main/UI/menu/HomeScreen.java +++ b/src/main/java/main/UI/menu/HomeScreen.java @@ -82,7 +82,7 @@ public HomeScreen(GraphicalMenus graphicalMenus, UpdateManager updateManager) { showCloseProcessButtonIfProcessNotNull(); Button tobiiButton = createTopBarButton( - "Tobii Manager", + "Eye-Tracker Manager", "images/eye-tracking_white.png", (e) -> { StageUtils.killRunningProcess(graphicalMenus); @@ -311,7 +311,7 @@ private void takeSnapShot() { public ProgressButton createCloseMenuButton() { ProgressButton closeButton = new ProgressButton(); - closeButton.getButton().setRadius(graphicalMenus.primaryStage.getWidth() / 10); + closeButton.getButton().setRadius(graphicalMenus.primaryStage.getWidth() / 15); closeButton.getButton().setStroke(Color.web("#cd2653")); closeButton.getButton().setStrokeWidth(3); @@ -331,7 +331,7 @@ public void showCloseProcessButtonIfProcessNotNull() { centerMenu.setSpacing(rest / 2); centerMenu.setTranslateY(rest / 2); centerMenu.getChildren().add(0, closeMenuButton); - closeMenuButton.getLabel().setText("Back To :\n" + graphicalMenus.process.getName()); + closeMenuButton.getLabel().setText("Retourner sur :\n" + graphicalMenus.process.getName()); } else if (graphicalMenus.process == null || graphicalMenus.process.get() == null) { double rest = graphicalMenus.primaryStage.getHeight() - (graphicalMenus.primaryStage.getHeight() / 10 + graphicalMenus.primaryStage.getWidth() / 5); double spacingoffset = (graphicalMenus.primaryStage.getHeight() - (graphicalMenus.primaryStage.getHeight() / 10 + 2 * graphicalMenus.primaryStage.getWidth() / 5)) / 3; diff --git a/src/main/java/main/UI/menu/OptionsMenu.java b/src/main/java/main/UI/menu/OptionsMenu.java index c8ca81a..01ba66a 100644 --- a/src/main/java/main/UI/menu/OptionsMenu.java +++ b/src/main/java/main/UI/menu/OptionsMenu.java @@ -2,18 +2,17 @@ import javafx.event.EventHandler; import javafx.geometry.Pos; -import javafx.scene.control.Button; -import javafx.scene.control.CheckBox; -import javafx.scene.control.Label; +import javafx.scene.control.*; import javafx.scene.image.ImageView; -import javafx.scene.layout.*; +import javafx.scene.layout.BorderPane; +import javafx.scene.layout.GridPane; import javafx.scene.paint.Color; import javafx.scene.paint.CycleMethod; import javafx.scene.paint.LinearGradient; import javafx.scene.paint.Stop; import javafx.scene.shape.Rectangle; import javafx.scene.text.Font; -import javafx.scene.text.TextAlignment; +import lombok.extern.slf4j.Slf4j; import main.Configuration; import main.UI.DoubleClickedButton; import main.process.GnomeControlCenterNamedProcessCreator; @@ -21,42 +20,39 @@ import main.utils.StageUtils; import main.utils.UtilsUI; +@Slf4j public class OptionsMenu extends BorderPane { + public String langage = "Francais"; + public OptionsMenu(GraphicalMenus graphicalMenus) { super(); - Rectangle r = new Rectangle(); - r.widthProperty().bind(graphicalMenus.primaryStage.widthProperty()); - r.heightProperty().bind(graphicalMenus.primaryStage.heightProperty()); - Stop[] stops = new Stop[]{new Stop(0, Color.web("#faeaed")), new Stop(1, Color.web("#cd2653"))}; - LinearGradient lg1 = new LinearGradient(0, 1, 1.5, 0, true, CycleMethod.NO_CYCLE, stops); - r.setFill(lg1); - - this.getChildren().add(r); + this.getChildren().add(UtilsUI.createBackground(graphicalMenus)); this.prefWidthProperty().bind(graphicalMenus.primaryStage.widthProperty()); this.prefHeightProperty().bind(graphicalMenus.primaryStage.heightProperty()); - StackPane titlePane = UtilsUI.createTopBar(graphicalMenus,"Options"); - - BorderPane.setAlignment(titlePane, Pos.CENTER); - this.setTop(titlePane); - + this.setTop(UtilsUI.createTopBar(graphicalMenus.getHomeScreen(), graphicalMenus, "Options")); GridPane settings = new GridPane(); settings.setHgap(20); - settings.setVgap(graphicalMenus.primaryStage.getHeight()/15); + settings.setVgap(graphicalMenus.primaryStage.getHeight() / 30); { Label useEyeTracker = new Label("Eye Tracker:"); - - useEyeTracker.setFont(new Font(20)); - useEyeTracker.setStyle("-fx-font-weight: bold; -fx-font-family: Helvetica"); - useEyeTracker.setTextFill(Color.web("#cd2653")); + useEyeTracker.setStyle("-fx-font-weight: bold; -fx-font-family: Helvetica; -fx-font-size: 3em ; -fx-text-fill: #cd2653"); CheckBox useEyeTrackerCheckBox = new CheckBox("Activ\u00e9"); - useEyeTrackerCheckBox.setStyle("-fx-font-weight: bold; -fx-font-family: Helvetica; -fx-font-size: 20"); + String style = "-fx-font-weight: bold; -fx-font-family: Helvetica; -fx-font-size: 2.5em; "; + useEyeTrackerCheckBox.setStyle(style); + useEyeTrackerCheckBox.hoverProperty().addListener((obs, oldval, newval) -> { + if (newval) { + useEyeTrackerCheckBox.setStyle(style + "-fx-cursor: hand; -fx-underline: true"); + } else { + useEyeTrackerCheckBox.setStyle(style); + } + }); useEyeTrackerCheckBox.selectedProperty().addListener((obj, oldval, newval) -> { if (newval) { useEyeTrackerCheckBox.setText("D\u00e9sactiv\u00e9"); @@ -69,26 +65,64 @@ public OptionsMenu(GraphicalMenus graphicalMenus) { useEyeTrackerCheckBox.setSelected(true); useEyeTrackerCheckBox.setTextFill(Color.web("#faeaed")); - useEyeTrackerCheckBox.resize(100,100); + useEyeTrackerCheckBox.resize(100, 100); - settings.add(useEyeTracker, 0, 0); - settings.add(useEyeTrackerCheckBox, 1, 0); + settings.add(useEyeTracker, 0, 1); + settings.add(useEyeTrackerCheckBox, 1, 1); } - createGnomeControlCenterButton(graphicalMenus, settings, "Gestionnaire Wifi:", "images/wi-fi_white.png", "wifi", 1); - createGnomeControlCenterButton(graphicalMenus, settings, "Gestionnaire Bluetooth:", "images/bluetooth.png", "bluetooth", 2); - createGnomeControlCenterButton(graphicalMenus, settings, "Param\u00e8tres D'Affichage:", "images/notebook.png", "display", 3); - createGnomeControlCenterButton(graphicalMenus, settings, "Param\u00e8tres de Batterie:", "images/battery.png", "power", 4); + createGnomeControlCenterButton(graphicalMenus, settings, "Gestionnaire Wifi:", "images/wi-fi_white.png", "wifi", 2); + createGnomeControlCenterButton(graphicalMenus, settings, "Gestionnaire Bluetooth:", "images/bluetooth.png", "bluetooth", 3); + createGnomeControlCenterButton(graphicalMenus, settings, "Param\u00e8tres D'Affichage:", "images/notebook.png", "display", 4); + createGnomeControlCenterButton(graphicalMenus, settings, "Param\u00e8tres de Batterie:", "images/battery.png", "power", 5); + createGnomeControlCenterButtonLang(settings); { - Label teamviewerLabel = new Label("Lancer TeamViewer:"); + Label userInformationLabel = new Label("Une id\u00e9e ? Besoin d'aide ? "); + userInformationLabel.setStyle("-fx-font-weight: bold; -fx-font-family: Helvetica; -fx-font-size: 3em ; -fx-text-fill: #cd2653"); + + Button userInformationButton = UtilsUI.createButton( + "Contactez-nous>", + "images/contact.png", + (e) -> { + StageUtils.killRunningProcess(graphicalMenus); + graphicalMenus.getConfiguration().scene.setRoot(graphicalMenus.getContactUs()); + } + ); + + userInformationButton.setTextFill(Color.web("#faeaed")); + + settings.add(userInformationLabel, 0, 8); + settings.add(userInformationButton, 1, 8); + } + + { - teamviewerLabel.setFont(new Font(20)); - teamviewerLabel.setStyle("-fx-font-weight: bold; -fx-font-family: Helvetica"); - teamviewerLabel.setTextFill(Color.web("#cd2653")); + Label userInformationLabel = new Label("Informations de l'utilisateur:"); + userInformationLabel.setStyle("-fx-font-weight: bold; -fx-font-family: Helvetica; -fx-font-size: 3em ; -fx-text-fill: #cd2653"); - Button teamViewerButton = createTopBarButton( + Button userInformationButton = UtilsUI.createButton( + "Ouvrir>", + "images/user_white.png", + (e) -> { + StageUtils.killRunningProcess(graphicalMenus); + graphicalMenus.getConfiguration().scene.setRoot(graphicalMenus.getUserPageMenu()); + } + ); + + userInformationButton.setTextFill(Color.web("#faeaed")); + + settings.add(userInformationLabel, 0, 7); + settings.add(userInformationButton, 1, 7); + } + + { + + Label teamviewerLabel = new Label("Lancer TeamViewer:"); + teamviewerLabel.setStyle("-fx-font-weight: bold; -fx-font-family: Helvetica; -fx-font-size: 3em ; -fx-text-fill: #cd2653"); + + Button teamViewerButton = UtilsUI.createButton( "Ouvrir>", "images/teamviewer.png", (e) -> { @@ -101,22 +135,22 @@ public OptionsMenu(GraphicalMenus graphicalMenus) { teamViewerButton.setTextFill(Color.web("#faeaed")); - settings.add(teamviewerLabel, 0, 5); - settings.add(teamViewerButton, 1, 5); + settings.add(teamviewerLabel, 0, 6); + settings.add(teamViewerButton, 1, 6); } settings.setAlignment(Pos.CENTER); BorderPane.setAlignment(settings, Pos.CENTER); this.setCenter(settings); + + this.setBottom(new Label(Configuration.VERSION)); } void createGnomeControlCenterButton(GraphicalMenus graphicalMenus, GridPane settings, String label, String imageName, String panelToOpen, int row) { Label displayedLabel = new Label(label); - displayedLabel.setFont(new Font(20)); - displayedLabel.setStyle("-fx-font-weight: bold; -fx-font-family: Helvetica"); - displayedLabel.setTextFill(Color.web("#cd2653")); + displayedLabel.setStyle("-fx-font-weight: bold; -fx-font-family: Helvetica; -fx-text-fill: #cd2653; -fx-font-size: 3em"); - Button button = createTopBarButton( + Button button = UtilsUI.createButton( "Ouvrir>", imageName, (e) -> { @@ -133,27 +167,28 @@ void createGnomeControlCenterButton(GraphicalMenus graphicalMenus, GridPane sett settings.add(button, 1, row); } - Button createTopBarButton(String text, String imagePath, EventHandler eventhandler) { - DoubleClickedButton optionButton = new DoubleClickedButton(text); - optionButton.setPrefHeight(50); - optionButton.setMaxHeight(50); - optionButton.setStyle( - "-fx-border-color: transparent; " + - "-fx-border-width: 0; " + - "-fx-background-radius: 0; " + - "-fx-background-color: transparent; " + - "-fx-font-weight: bold; " + - "-fx-font-family: Helvetica; " + - "-fx-text-fill: #faeaed;"+ - "-fx-font-size: 20" - ); - ImageView graphic = new ImageView(imagePath); - graphic.setPreserveRatio(true); - graphic.setFitHeight(30); - optionButton.setGraphic(graphic); + void createGnomeControlCenterButtonLang(GridPane settings) { + Label displayedLabel = new Label("Choisir une langue:"); + displayedLabel.setStyle("-fx-font-weight: bold; -fx-font-family: Helvetica; -fx-font-size: 3em ; -fx-text-fill: #cd2653"); + displayedLabel.setTextFill(Color.web("#cd2653")); + + MenuItem menuItemFR = new MenuItem("Francais"); + MenuItem menuItemEN = new MenuItem("English"); + + MenuButton menuButton = new MenuButton(langage); + + menuItemFR.setOnAction(eventMenuLanguages -> { + langage = menuItemFR.getText(); + menuButton.setText(langage); + }); + menuItemEN.setOnAction(eventMenuLanguages -> { + langage = menuItemEN.getText(); + menuButton.setText(langage); + }); + menuButton.getItems().addAll(menuItemEN,menuItemFR); - optionButton.assignHandler(eventhandler); - return optionButton; + settings.add(displayedLabel, 0, 0); + settings.add(menuButton,1, 0); } diff --git a/src/main/java/main/UI/menu/UpdateMenu.java b/src/main/java/main/UI/menu/UpdateMenu.java index 333a680..1e126aa 100644 --- a/src/main/java/main/UI/menu/UpdateMenu.java +++ b/src/main/java/main/UI/menu/UpdateMenu.java @@ -11,11 +11,14 @@ import javafx.scene.control.ProgressBar; import javafx.scene.image.Image; import javafx.scene.image.ImageView; -import javafx.scene.layout.*; +import javafx.scene.layout.BorderPane; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.HBox; +import javafx.scene.layout.VBox; import javafx.scene.paint.Color; -import javafx.scene.text.Font; import javafx.util.Duration; import lombok.extern.slf4j.Slf4j; +import main.Configuration; import main.utils.UpdateManager; import main.utils.UpdateService; import main.utils.UtilsUI; @@ -28,9 +31,8 @@ public class UpdateMenu extends BorderPane { UpdateManager updateManager; - Button downloadButton; ProgressBar[] progressBars = new ProgressBar[6]; - Label displayedLabel; + Button installAllButton; GraphicalMenus graphicalMenus; public UpdateMenu(GraphicalMenus graphicalMenus, UpdateManager updateManager) { @@ -48,7 +50,7 @@ public UpdateMenu(GraphicalMenus graphicalMenus, UpdateManager updateManager) { this.prefWidthProperty().bind(graphicalMenus.primaryStage.widthProperty()); this.prefHeightProperty().bind(graphicalMenus.primaryStage.heightProperty()); - this.setTop(UtilsUI.createTopBar(graphicalMenus, "Mises \u00e0 jour")); + this.setTop(UtilsUI.createTopBar(graphicalMenus.getHomeScreen(), graphicalMenus, "Mises \u00e0 jour")); VBox menu = new VBox(); @@ -58,29 +60,30 @@ public UpdateMenu(GraphicalMenus graphicalMenus, UpdateManager updateManager) { downloadEverythin.setAlignment(Pos.CENTER); downloadEverythin.setSpacing(20); - displayedLabel = new Label("Mettre \u00e0 jour tous les logiciels"); - displayedLabel.setStyle("-fx-font-weight: bold; " + - "-fx-font-family: Helvetica; " + - "-fx-text-fill: #cd2653"); - displayedLabel.setFont(new Font(30)); - menu.setSpacing(30); - - downloadButton = new Button("Installer tous"); - - downloadButton.setOnMouseClicked((event) -> { - downloadButton.setVisible(false); - startUpdateAll(); + installAllButton = createTopBarButton("Mettre \u00e0 jour tous les logiciels", (event) -> { + if (updateManager.anyUpdateNeeded.getValue()) { + startUpdateAll(); + } + }, null); + String style = "-fx-font-weight: bold; -fx-font-family: Helvetica; -fx-text-fill: #cd2653; -fx-font-size: 3em; " + + "-fx-border-color: transparent; -fx-border-width: 0; -fx-background-radius: 0; -fx-background-color: transparent; "; + installAllButton.setStyle(style); + installAllButton.hoverProperty().addListener((obs, oldval, newval) -> { + if (newval && updateManager.anyUpdateNeeded.getValue()) { + installAllButton.setStyle(style + "-fx-cursor: hand; -fx-underline: true"); + } else { + installAllButton.setStyle(style); + } }); + menu.setSpacing(30); - downloadEverythin.getChildren().addAll(displayedLabel); + downloadEverythin.getChildren().addAll(installAllButton); updateManager.anyUpdateNeeded.addListener((obs, oldval, newval) -> { if (newval) { - displayedLabel.setText("Mettre \u00e0 jour tous les logiciels"); - downloadEverythin.getChildren().add(downloadButton); + installAllButton.setText("Mettre \u00e0 jour tous les logiciels"); } else { - displayedLabel.setText("Votre syst\u00e8me est \u00e0 jour"); - downloadEverythin.getChildren().remove(downloadButton); + installAllButton.setText("Votre syst\u00e8me est \u00e0 jour"); } }); @@ -111,6 +114,7 @@ public UpdateMenu(GraphicalMenus graphicalMenus, UpdateManager updateManager) { menu.getChildren().addAll(downloadEverythin, progressBars[0], settings); this.setCenter(menu); + this.setBottom(new Label(Configuration.VERSION)); } void startUpdateAll() { @@ -165,7 +169,7 @@ void closeProcessStream(Process p) { void startUpdateSystem() { if (updateManager.updateServices[UpdateService.SYSTEME].getUpdateProperty().get()) { try { - ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "dir /s /b \"C:/Users/Sebastien\" "); + ProcessBuilder pb = new ProcessBuilder(""); pb.redirectErrorStream(true); Process p = pb.start(); p.onExit().thenRun(() -> { @@ -185,6 +189,26 @@ void startUpdateSystem() { } } + void startUpdateOnlySystem() { + if (updateManager.updateServices[UpdateService.SYSTEME].getUpdateProperty().get()) { + try { + ProcessBuilder pb = new ProcessBuilder(""); + pb.redirectErrorStream(true); + Process p = pb.start(); + p.onExit().thenRun(() -> { + closeProcessStream(p); + Platform.runLater(() -> { + progressBars[UpdateService.SYSTEME + 1].setVisible(false); + updateManager.updateServices[UpdateService.SYSTEME].getOutput().setValue(""); + }); + }); + progressPercent(p, 1); + } catch (IOException ex) { + ex.printStackTrace(System.err); + } + } + } + void startUpdateAugCom() { if (updateManager.updateServices[UpdateService.AUGCOM].getUpdateProperty().get()) { try { @@ -208,6 +232,26 @@ void startUpdateAugCom() { } } + void startUpdateOnlyAugCom() { + if (updateManager.updateServices[UpdateService.AUGCOM].getUpdateProperty().get()) { + try { + ProcessBuilder pb = new ProcessBuilder("sh", "../../Update/augcomUpdate.sh"); + pb.redirectErrorStream(true); + Process p = pb.start(); + p.onExit().thenRun(() -> { + closeProcessStream(p); + Platform.runLater(() -> { + progressBars[UpdateService.AUGCOM + 1].setVisible(false); + updateManager.updateServices[UpdateService.AUGCOM].getOutput().setValue(""); + }); + }); + progressPercent(p, 2); + } catch (IOException ex) { + ex.printStackTrace(System.err); + } + } + } + void startUpdateInterAACtonScene() { if (updateManager.updateServices[UpdateService.INTERAACTION_SCENE].getUpdateProperty().get()) { try { @@ -231,6 +275,26 @@ void startUpdateInterAACtonScene() { } } + void startUpdateOnlyInterAACtonScene() { + if (updateManager.updateServices[UpdateService.INTERAACTION_SCENE].getUpdateProperty().get()) { + try { + ProcessBuilder pb = new ProcessBuilder("sh", "../../Update/interAACtionSceneUpdate.sh"); + pb.redirectErrorStream(true); + Process p = pb.start(); + p.onExit().thenRun(() -> { + closeProcessStream(p); + Platform.runLater(() -> { + progressBars[UpdateService.INTERAACTION_SCENE + 1].setVisible(false); + updateManager.updateServices[UpdateService.INTERAACTION_SCENE].getOutput().setValue(""); + }); + }); + progressPercent(p, 3); + } catch (IOException ex) { + ex.printStackTrace(System.err); + } + } + } + void startUpdateGazePlay() { if (updateManager.updateServices[UpdateService.GAZEPLAY].getUpdateProperty().get()) { try { @@ -254,6 +318,26 @@ void startUpdateGazePlay() { } } + void startUpdateOnlyGazePlay() { + if (updateManager.updateServices[UpdateService.GAZEPLAY].getUpdateProperty().get()) { + try { + ProcessBuilder pb = new ProcessBuilder("sh", "../../Update/gazeplayUpdate.sh"); + pb.redirectErrorStream(true); + Process p = pb.start(); + p.onExit().thenRun(() -> { + closeProcessStream(p); + Platform.runLater(() -> { + progressBars[UpdateService.GAZEPLAY + 1].setVisible(false); + updateManager.updateServices[UpdateService.GAZEPLAY].getOutput().setValue(""); + }); + }); + progressPercent(p, 4); + } catch (IOException ex) { + ex.printStackTrace(System.err); + } + } + } + void startUpdateInterAACtionPlayer() { if (updateManager.updateServices[UpdateService.INTERAACTION_PLAYER].getUpdateProperty().get()) { @@ -278,6 +362,27 @@ void startUpdateInterAACtionPlayer() { } } + void startUpdateOnlyInterAACtionPlayer() { + + if (updateManager.updateServices[UpdateService.INTERAACTION_PLAYER].getUpdateProperty().get()) { + try { + ProcessBuilder pb = new ProcessBuilder("sh", "../../Update/interAACtionPlayerUpdate.sh"); + pb.redirectErrorStream(true); + Process p = pb.start(); + p.onExit().thenRun(() -> { + closeProcessStream(p); + Platform.runLater(() -> { + progressBars[UpdateService.INTERAACTION_PLAYER + 1].setVisible(false); + updateManager.updateServices[UpdateService.INTERAACTION_PLAYER].getOutput().setValue(""); + }); + }); + progressPercent(p, 5); + } catch (IOException ex) { + ex.printStackTrace(System.err); + } + } + } + void progressPercent(Process p, int index) { Thread t = new Thread(() -> { String s; @@ -310,19 +415,47 @@ void progressPercent(Process p, int index) { void createGnomeControlCenterButton(GridPane settings, int serviceIndex) { Label displayedLabel = new Label(updateManager.updateServices[serviceIndex].getName() + ":"); - displayedLabel.setFont(new Font(20)); - displayedLabel.setStyle("-fx-font-weight: bold; -fx-font-family: Helvetica"); + displayedLabel.setStyle("-fx-font-weight: bold; -fx-font-family: Helvetica; -fx-font-size: 2.5em"); displayedLabel.setTextFill(Color.web("#cd2653")); Button button = createTopBarButton( "Le logiciel est \u00e0 jour", - (e) -> { + (event) -> { + if (updateManager.updateServices[serviceIndex].getUpdateProperty().getValue()) { + switch (serviceIndex) { + case UpdateService.SYSTEME: + startUpdateOnlySystem(); + break; + case UpdateService.AUGCOM: + startUpdateOnlyAugCom(); + break; + case UpdateService.INTERAACTION_SCENE: + startUpdateOnlyInterAACtonScene(); + break; + case UpdateService.GAZEPLAY: + startUpdateOnlyGazePlay(); + break; + case UpdateService.INTERAACTION_PLAYER: + startUpdateOnlyInterAACtionPlayer(); + break; + default: + break; + } + } }, "images/tick-mark.png" ); - - button.setTextFill(Color.web("#faeaed")); + String style = "-fx-border-color: transparent; -fx-border-width: 0; -fx-background-radius: 0; -fx-font-size: 2em ;" + + "-fx-background-color: transparent; -fx-font-weight: bold; -fx-font-family: Helvetica; -fx-text-fill: #faeaed;"; + button.setStyle(style); + button.hoverProperty().addListener((obs, oldval, newval) -> { + if (newval && updateManager.updateServices[serviceIndex].getUpdateProperty().getValue()) { + button.setStyle(style + "-fx-cursor: hand; -fx-underline: true"); + } else { + button.setStyle(style); + } + }); int row = serviceIndex + 1; @@ -332,7 +465,7 @@ void createGnomeControlCenterButton(GridPane settings, int serviceIndex) { output.textProperty().bind(updateManager.updateServices[serviceIndex].getOutput()); output.setOpacity(0.5); output.setWrapText(true); - output.setStyle("-fx-font-size: 5"); + output.setStyle("-fx-font-size: 0.5em"); output.prefWidthProperty().bind(graphicalMenus.primaryStage.widthProperty().divide(10)); output.maxWidthProperty().bind(graphicalMenus.primaryStage.widthProperty().divide(10)); settings.add(output, 3, row); diff --git a/src/main/java/main/UI/menu/UserPageMenu.java b/src/main/java/main/UI/menu/UserPageMenu.java index 95366a8..fe2db98 100644 --- a/src/main/java/main/UI/menu/UserPageMenu.java +++ b/src/main/java/main/UI/menu/UserPageMenu.java @@ -1,105 +1,64 @@ package main.UI.menu; import javafx.geometry.Pos; -import javafx.scene.control.CheckBox; +import javafx.scene.control.Button; import javafx.scene.control.Label; -import javafx.scene.image.ImageView; import javafx.scene.layout.BorderPane; import javafx.scene.layout.GridPane; -import javafx.scene.layout.HBox; -import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; -import javafx.scene.paint.CycleMethod; -import javafx.scene.paint.LinearGradient; -import javafx.scene.paint.Stop; -import javafx.scene.shape.Rectangle; -import javafx.scene.text.Font; -import javafx.scene.text.TextAlignment; -import main.Configuration; -import main.UI.DoubleClickedButton; +import lombok.extern.slf4j.Slf4j; +import main.utils.UtilsUI; +import java.io.IOException; + +@Slf4j public class UserPageMenu extends BorderPane { public UserPageMenu(GraphicalMenus graphicalMenus) { super(); - Rectangle r = new Rectangle(); - r.widthProperty().bind(graphicalMenus.primaryStage.widthProperty()); - r.heightProperty().bind(graphicalMenus.primaryStage.heightProperty()); - Stop[] stops = new Stop[]{new Stop(0, Color.web("#faeaed")), new Stop(1, Color.web("#cd2653"))}; - LinearGradient lg1 = new LinearGradient(0, 1, 1.5, 0, true, CycleMethod.NO_CYCLE, stops); - r.setFill(lg1); - - this.getChildren().add(r); + this.getChildren().add(UtilsUI.createBackground(graphicalMenus)); this.prefWidthProperty().bind(graphicalMenus.primaryStage.widthProperty()); this.prefHeightProperty().bind(graphicalMenus.primaryStage.heightProperty()); - StackPane titlePane = new StackPane(); - Rectangle backgroundForTitle = new Rectangle(0, 0, 600, 50); - backgroundForTitle.widthProperty().bind(graphicalMenus.primaryStage.widthProperty()); - backgroundForTitle.setFill(Color.web("#cd2653")); - - Label title = new Label("Options"); - title.setFont(new Font(30)); - title.setStyle("-fx-font-weight: bold; -fx-font-family: Helvetica"); - title.setTextFill(Color.web("#faeaed")); - - DoubleClickedButton back = new DoubleClickedButton("Retour"); - back.setPrefHeight(50); - back.setMaxHeight(50); - back.setStyle( - "-fx-border-color: transparent; " + - "-fx-border-width: 0; " + - "-fx-background-radius: 0; " + - "-fx-background-color: transparent; " + - "-fx-font-weight: bold; " + - "-fx-font-family: Helvetica; " + - "-fx-text-fill: #faeaed" - ); - ImageView graphic = new ImageView("images/back.png"); - graphic.setPreserveRatio(true); - graphic.setFitHeight(30); - back.setGraphic(graphic); - - back.assignHandler((e) -> graphicalMenus.getConfiguration().scene.setRoot(graphicalMenus.getHomeScreen())); - - HBox titleBox = new HBox(back, title); - title.prefWidthProperty().bind(graphicalMenus.primaryStage.widthProperty().subtract(back.widthProperty().multiply(2))); - titleBox.prefWidthProperty().bind(graphicalMenus.primaryStage.widthProperty()); - title.setTextAlignment(TextAlignment.CENTER); - title.setAlignment(Pos.CENTER); - titlePane.getChildren().addAll(backgroundForTitle, titleBox); - - BorderPane.setAlignment(titlePane, Pos.CENTER); - this.setTop(titlePane); - + this.setTop(UtilsUI.createTopBar(graphicalMenus.getOptionsMenu(), graphicalMenus, "Informations de l'utilisateur")); GridPane settings = new GridPane(); settings.setHgap(20); + settings.setVgap(graphicalMenus.primaryStage.getHeight() / 20); { - Label useEyeTracker = new Label("Desactiver l'eye Tracker:"); - - useEyeTracker.setFont(new Font(20)); - useEyeTracker.setStyle("-fx-font-weight: bold; -fx-font-family: Helvetica"); - useEyeTracker.setTextFill(Color.web("#cd2653")); - - CheckBox useEyeTrackerCheckBox = new CheckBox(); - useEyeTrackerCheckBox.selectedProperty().addListener((obj, newVal, oldVal) -> { - if (newVal) { - graphicalMenus.getConfiguration().setMode(Configuration.GAZE_INTERACTION); - } else { - graphicalMenus.getConfiguration().setMode(Configuration.MOUSE_INTERACTION); - } - }); - - settings.add(useEyeTracker, 0, 0); - settings.add(useEyeTrackerCheckBox, 1, 0); + Label displayedLabel = new Label("Mot de Passe"); + displayedLabel.setStyle("-fx-font-weight: bold; -fx-font-family: Helvetica; -fx-text-fill: #cd2653; -fx-font-size: 3em"); + + + Button button = UtilsUI.createButton( + "Changer>", + "images/user_white.png", + (e) -> { + try { + changePassword(); + } catch (IOException ex) { + ex.printStackTrace(); + } + } + ); + + button.setTextFill(Color.web("#faeaed")); + + settings.add(displayedLabel, 0, 0); + settings.add(button, 1, 0); } settings.setAlignment(Pos.CENTER); BorderPane.setAlignment(settings, Pos.CENTER); this.setCenter(settings); } + + void changePassword() throws IOException { + ProcessBuilder pb = new ProcessBuilder("bash", "./scripts/changePassword.sh"); + pb.inheritIO().start(); + } + } diff --git a/src/main/java/main/gaze/devicemanager/EyeTracker.java b/src/main/java/main/gaze/devicemanager/EyeTracker.java index b6eb795..33ed9c0 100644 --- a/src/main/java/main/gaze/devicemanager/EyeTracker.java +++ b/src/main/java/main/gaze/devicemanager/EyeTracker.java @@ -1,5 +1,5 @@ package main.gaze.devicemanager; public enum EyeTracker { - mouse_control, tobii_eyeX_4C, eyetribe + mouse_control, tobii, eyetribe } diff --git a/src/main/java/main/process/CloseGoogleChromeProcessCreator.java b/src/main/java/main/process/CloseGoogleChromeProcessCreator.java index f4ece8f..de7ba5c 100644 --- a/src/main/java/main/process/CloseGoogleChromeProcessCreator.java +++ b/src/main/java/main/process/CloseGoogleChromeProcessCreator.java @@ -21,7 +21,7 @@ public void setUpProcessBuilder() { Process waitForCloseRequest() { try { - File fileFR = new File("~/Téléchargements/close161918.txt"); + File fileFR = new File("~/Téléchargements/close161918.txt"); File fileEN = new File("~/Downloads/close161918.txt"); if(fileFR.exists()) { fileFR.delete(); diff --git a/src/main/java/main/process/TobiiManagerNamedProcessCreator.java b/src/main/java/main/process/TobiiManagerNamedProcessCreator.java index 5357f40..287da3f 100644 --- a/src/main/java/main/process/TobiiManagerNamedProcessCreator.java +++ b/src/main/java/main/process/TobiiManagerNamedProcessCreator.java @@ -21,13 +21,13 @@ public void setUpProcessBuilder() { "/max ", System.getProperty("user.home") + "/AppData/Local/Programs/TobiiProEyeTrackerManager/TobiiProEyeTrackerManager.exe"); } else { - processBuilder = new ProcessBuilder("tobiiproeyetrackermanager"); + processBuilder = new ProcessBuilder("tobii_config"); } } @Override public NamedProcess start(GraphicalMenus graphicalMenus) { - return AppNamedProcessCreator.createProcress(new TobiiXdotoolProcessCreator(), processBuilder, graphicalMenus, "Tobii Pro EyeTracker Manager"); + return AppNamedProcessCreator.createProcress(new TobiiXdotoolProcessCreator(), processBuilder, graphicalMenus, "Eye-Tracker Manager"); } diff --git a/src/main/java/main/utils/UpdateManager.java b/src/main/java/main/utils/UpdateManager.java index 4130e22..773ab94 100644 --- a/src/main/java/main/utils/UpdateManager.java +++ b/src/main/java/main/utils/UpdateManager.java @@ -44,7 +44,7 @@ public UpdateManager() { public void checkUpdates() { for (UpdateService updateService : updateServices) { - updateService.checkUpdate(); + updateService.checkUpdate(true); updateService.checkExist(); } } diff --git a/src/main/java/main/utils/UpdateService.java b/src/main/java/main/utils/UpdateService.java index b42273f..6844e27 100644 --- a/src/main/java/main/utils/UpdateService.java +++ b/src/main/java/main/utils/UpdateService.java @@ -42,8 +42,8 @@ public UpdateService(String name, String updateURL) { this.existProperty = new SimpleBooleanProperty(false); } - public void checkUpdate() { - if (!updateURL.equals("")) { + public void checkUpdate(boolean testBool) { + if (!updateURL.equals("") && testBool) { try { if (name.equals("GazePlay")) { JSONObject softwareJson = JsonReader.readJsonFromUrl(updateURL); diff --git a/src/main/java/main/utils/UtilsMail.java b/src/main/java/main/utils/UtilsMail.java new file mode 100644 index 0000000..9311b3e --- /dev/null +++ b/src/main/java/main/utils/UtilsMail.java @@ -0,0 +1,156 @@ +package main.utils; + +import javafx.scene.control.Label; +import lombok.extern.slf4j.Slf4j; + +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.mail.*; +import javax.mail.internet.AddressException; +import javax.mail.internet.InternetAddress; +import javax.mail.internet.MimeMessage; +import java.io.BufferedReader; +import java.io.FileReader; +import java.nio.ByteBuffer; +import java.util.Base64; +import java.util.LinkedList; +import java.util.Properties; + +@Slf4j +public class UtilsMail { + static Cipher cipher; + + public static String letMeSendIt() { + try { + KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); + keyGenerator.init(128); // block size is 128bits + LinkedList byteList = new LinkedList<>(); + BufferedReader buffReader = new BufferedReader(new FileReader("~/.email/crypted_key.txt")); + String[] stringbyteArray = buffReader.readLine().split(","); + byte[] realBytesArray = new byte[stringbyteArray.length]; + for (int i = 0; i < stringbyteArray.length; i++) { + realBytesArray[i] = ByteBuffer.allocate(4).putInt(Integer.parseInt(stringbyteArray[i])).array()[3]; + } + SecretKey secretKey = new SecretKey() { + @Override + public String getAlgorithm() { + return "AES"; + } + + @Override + public String getFormat() { + return "RAW"; + } + + @Override + public byte[] getEncoded() { + return realBytesArray; + } + }; + cipher = Cipher.getInstance("AES"); + + BufferedReader buffReaderpass = new BufferedReader(new FileReader("~/.email/crypted_pass.txt")); + return decrypt(buffReaderpass.readLine(), secretKey); + } catch (Exception e) { + return ""; + } + } + + public static void send(Label errorLabel, String firstname, String lastname, String email, String object, String text) { + if (firstname == null || firstname.isEmpty() || lastname == null || lastname.isEmpty()) { + errorLabel.setText("Entrez votre nom et pr\u00e8nom"); + } else if (email == null || email.isEmpty()) { + errorLabel.setText("Entrez une addresse email pour que nous puissions vous répondre"); + } else if (object == null || object.isEmpty() || text == null || text.isEmpty()) { + errorLabel.setText("Renseignez l'objet de votre demande et donnez nous les détails dans votre message"); + } else { + try { + sendClient(errorLabel, firstname, lastname, email, object, text); + sendSupport(firstname, lastname, email, object, text); + errorLabel.setText("Message envoy\u00e8 !"); + } catch (AuthenticationFailedException e) { + errorLabel.setText("Service temporairement indisponible"); + } catch (AddressException e) { + errorLabel.setText("Adresse Email invalide"); + } + } + } + + public static void sendSupport(String firstname, String lastname, String email, String object, String text) throws AuthenticationFailedException { + //Propriétés + Properties p = new Properties(); + p.put("mail.smtp.host", "smtp.gmail.com"); + p.put("mail.smtp.socketFactory.port", "465"); + p.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); + p.put("mail.smtp.auth", "true"); + p.put("mail.smtp.port", "465"); + //Session + Session s = Session.getDefaultInstance(p, + new javax.mail.Authenticator() { + protected PasswordAuthentication getPasswordAuthentication() { + return passWordAuthentification(); + } + }); + //composer le message + try { + MimeMessage m = new MimeMessage(s); + m.addRecipient(Message.RecipientType.TO, new InternetAddress("contact.interaactionbox@gmail.com")); + m.setSubject("[" + firstname + " " + lastname + "] objet: " + object); + m.setText(lastname + " " + firstname + + " vous a contact\u00e9 avec le message suivant:\n\n\"" + text + "\"\n\n Nom: " + firstname + "\n Pr\u00e9nom: " + lastname + "\n Adresse mail: " + email); + //envoyer le message + Transport.send(m); + } catch (AuthenticationFailedException e) { + throw new AuthenticationFailedException(); + } catch (MessagingException e) { + e.printStackTrace(); + } + } + + public static void sendClient(Label errorLabel, String firstname, String lastname, String email, String object, String text) throws AddressException, AuthenticationFailedException { + //Propriétés + Properties p = new Properties(); + p.put("mail.smtp.host", "smtp.gmail.com"); + p.put("mail.smtp.socketFactory.port", "465"); + p.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); + p.put("mail.smtp.auth", "true"); + p.put("mail.smtp.port", "465"); + //Session + Session s = Session.getDefaultInstance(p, + new javax.mail.Authenticator() { + protected PasswordAuthentication getPasswordAuthentication() { + return passWordAuthentification(); + } + }); + //composer le message + MimeMessage m = new MimeMessage(s); + InternetAddress internetAddress = new InternetAddress(email); + try { + m.addRecipient(Message.RecipientType.TO, internetAddress); + m.setSubject("[Support InterAACtionBox] objet: " + object); + m.setText("Bonjour " + lastname + " " + firstname + + ",\nmerci d'avoir contact\u00e9 le support de l'InterAACtionBox.\nVotre message :\n\n\"" + text + "\"\n\na \u00e9t\u00e9 transmis \u00e0 notre \u00e9quipe qui vous r\u00e9pondra prochainement \u00e0 l'adresse: " + email + "\n\n \u00C0 tr\u00e8s vite !"); + //envoyer le message + + Transport.send(m); + } catch (AuthenticationFailedException e) { + throw new AuthenticationFailedException(); + } catch (MessagingException e) { + errorLabel.setText("Erreur lors de l'envois du message..."); + } + } + + private static PasswordAuthentication passWordAuthentification() { + return new PasswordAuthentication("help.interaactionbox@gmail.com", letMeSendIt()); + } + + public static String decrypt(String encryptedText, SecretKey secretKey) + throws Exception { + Base64.Decoder decoder = Base64.getDecoder(); + byte[] encryptedTextByte = decoder.decode(encryptedText); + cipher.init(Cipher.DECRYPT_MODE, secretKey); + byte[] decryptedByte = cipher.doFinal(encryptedTextByte); + return new String(decryptedByte); + } +} diff --git a/src/main/java/main/utils/UtilsUI.java b/src/main/java/main/utils/UtilsUI.java index 52034b1..b1d957d 100644 --- a/src/main/java/main/utils/UtilsUI.java +++ b/src/main/java/main/utils/UtilsUI.java @@ -2,6 +2,7 @@ import javafx.event.EventHandler; import javafx.geometry.Pos; +import javafx.scene.Parent; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.effect.DropShadow; @@ -16,7 +17,6 @@ import javafx.scene.paint.LinearGradient; import javafx.scene.paint.Stop; import javafx.scene.shape.Rectangle; -import javafx.scene.text.Font; import javafx.scene.text.TextAlignment; import javafx.stage.Stage; import main.UI.DoubleClickedButton; @@ -31,19 +31,21 @@ public static Button getDoubleClickedButton(String text, String imagePath, Event DoubleClickedButton optionButton = new DoubleClickedButton(text); // optionButton.setMaxHeight(50); optionButton.setStyle( - "-fx-border-color: transparent; " + + "-fx-border-color: transparent; " + "-fx-border-width: 0; " + "-fx-background-radius: 0; " + "-fx-background-color: transparent; " + "-fx-font-weight: bold; " + "-fx-font-family: Helvetica; " + "-fx-text-fill: #faeaed;" + - "-fx-font-size: 20;" + "-fx-font-size: 2em;" ); - ImageView graphic = new ImageView(imagePath); - graphic.setPreserveRatio(true); - graphic.setFitHeight((primaryStage.getHeight() / 10) * 0.7); - optionButton.setGraphic(graphic); + if (imagePath != null) { + ImageView graphic = new ImageView(imagePath); + graphic.setPreserveRatio(true); + graphic.setFitHeight((primaryStage.getHeight() / 10) * 0.7); + optionButton.setGraphic(graphic); + } optionButton.assignHandler(eventhandler); return optionButton; } @@ -60,19 +62,18 @@ public static ImageView getDownloadImageView(ProgressButton processButton) { return downnloadImageView; } - public static StackPane createTopBar(GraphicalMenus graphicalMenus, String label){ + public static StackPane createTopBar(Parent parent, GraphicalMenus graphicalMenus, String label) { StackPane titlePane = new StackPane(); Rectangle backgroundForTitle = new Rectangle(0, 0, graphicalMenus.primaryStage.getWidth(), graphicalMenus.primaryStage.getHeight() / 10); backgroundForTitle.heightProperty().bind(graphicalMenus.primaryStage.heightProperty().divide(10)); backgroundForTitle.widthProperty().bind(graphicalMenus.primaryStage.widthProperty()); backgroundForTitle.setFill(Color.web("#cd2653")); - Button back = UtilsUI.getDoubleClickedButton("Retour", "images/back.png", (e) -> graphicalMenus.getConfiguration().scene.setRoot(graphicalMenus.getHomeScreen()), graphicalMenus.primaryStage); + Button back = UtilsUI.getDoubleClickedButton("Retour", "images/back.png", (e) -> graphicalMenus.getConfiguration().scene.setRoot(parent), graphicalMenus.primaryStage); back.prefHeightProperty().bind(backgroundForTitle.heightProperty()); Label title = new Label(label); - title.setFont(new Font(30)); - title.setStyle("-fx-font-weight: bold; -fx-font-family: Helvetica"); + title.setStyle("-fx-font-weight: bold; -fx-font-family: Helvetica; -fx-font-size: 3em"); title.setTextFill(Color.web("#faeaed")); BorderPane titleBox = new BorderPane(); title.prefWidthProperty().bind(graphicalMenus.primaryStage.widthProperty().subtract(back.widthProperty().multiply(2))); @@ -109,4 +110,28 @@ public static Rectangle createBackground(GraphicalMenus graphicalMenus) { r.setFill(lg1); return r; } + + + public static Button createButton(String text, String imagePath, EventHandler eventhandler) { + DoubleClickedButton optionButton = new DoubleClickedButton(text); + optionButton.setPrefHeight(50); + optionButton.setMaxHeight(50); + String style = "-fx-border-color: transparent; -fx-border-width: 0; -fx-background-radius: 0; -fx-background-color: transparent; " + + "-fx-font-weight: bold; -fx-font-family: Helvetica; -fx-text-fill: #faeaed; -fx-font-size: 2.5em; "; + optionButton.setStyle(style); + optionButton.hoverProperty().addListener((obs, oldval, newval) -> { + if (newval) { + optionButton.setStyle(style + "-fx-cursor: hand; -fx-underline: true"); + } else { + optionButton.setStyle(style); + } + }); + ImageView graphic = new ImageView(imagePath); + graphic.setPreserveRatio(true); + graphic.setFitHeight(30); + optionButton.setGraphic(graphic); + + optionButton.assignHandler(eventhandler); + return optionButton; + } } diff --git a/src/resources/images/contact.png b/src/resources/images/contact.png new file mode 100644 index 0000000..8f78aaf Binary files /dev/null and b/src/resources/images/contact.png differ diff --git a/src/resources/images/user.png b/src/resources/images/user.png new file mode 100644 index 0000000..e50d9be Binary files /dev/null and b/src/resources/images/user.png differ diff --git a/src/resources/images/user_white.png b/src/resources/images/user_white.png new file mode 100644 index 0000000..616ca47 Binary files /dev/null and b/src/resources/images/user_white.png differ diff --git a/src/resources/images/wi-fi_white.png b/src/resources/images/wi-fi_white.png index 6d59c4c..d724639 100644 Binary files a/src/resources/images/wi-fi_white.png and b/src/resources/images/wi-fi_white.png differ