summaryrefslogtreecommitdiff
path: root/src/main/java/vue
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2026-07-02 00:14:17 +0200
committerpolo <ordipolo@gmx.fr>2026-07-02 00:14:17 +0200
commit0c2c3ee5a55f36d270171f2f67938542e251fdc5 (patch)
tree8ea4d6a7ad09a5b1389b829980a7a5476982e754 /src/main/java/vue
downloadppe_javafx-0c2c3ee5a55f36d270171f2f67938542e251fdc5.tar.gz
ppe_javafx-0c2c3ee5a55f36d270171f2f67938542e251fdc5.tar.bz2
ppe_javafx-0c2c3ee5a55f36d270171f2f67938542e251fdc5.zip
fork utilisant maven
Diffstat (limited to 'src/main/java/vue')
-rw-r--r--src/main/java/vue/AfficheAccueil.java108
-rw-r--r--src/main/java/vue/AfficheAdmin.java151
-rw-r--r--src/main/java/vue/AfficheConnexion.java54
-rw-r--r--src/main/java/vue/AfficheConnexionFailed.java56
-rw-r--r--src/main/java/vue/AfficheCreationCompte.java56
-rw-r--r--src/main/java/vue/AfficheCreerListe.java248
-rw-r--r--src/main/java/vue/AfficheEvenement.java88
-rw-r--r--src/main/java/vue/AfficheGestionCompte.java131
-rw-r--r--src/main/java/vue/AfficheTopMenu.java116
-rw-r--r--src/main/java/vue/GestionListe/AfficheGestionListe.java126
-rw-r--r--src/main/java/vue/GestionListe/AfficheModificationListe.java165
-rw-r--r--src/main/java/vue/simulation/AfficheSimulation.java201
-rw-r--r--src/main/java/vue/simulation/SimAptAndWeaponsVBox.java130
-rw-r--r--src/main/java/vue/simulation/SimFigurinesVBox.java139
-rw-r--r--src/main/java/vue/simulation/SimHistogramme.java101
-rw-r--r--src/main/java/vue/simulation/SimUnitsVBox.java65
16 files changed, 1935 insertions, 0 deletions
diff --git a/src/main/java/vue/AfficheAccueil.java b/src/main/java/vue/AfficheAccueil.java
new file mode 100644
index 0000000..957a249
--- /dev/null
+++ b/src/main/java/vue/AfficheAccueil.java
@@ -0,0 +1,108 @@
1package vue;
2
3import java.util.ArrayList;
4
5import controlleur.Connexion;
6import controlleur.EvenementController;
7import javafx.geometry.Pos;
8import javafx.scene.Scene;
9import javafx.scene.control.Button;
10import javafx.scene.control.Label;
11import javafx.scene.image.Image;
12import javafx.scene.image.ImageView;
13import javafx.scene.layout.HBox;
14import javafx.scene.layout.Priority;
15import javafx.scene.layout.VBox;
16import javafx.scene.text.Font;
17import javafx.stage.Stage;
18import modele.Evenement;
19import modele.User;
20
21public class AfficheAccueil {
22
23 private static VBox vEvt;
24
25 public static void affiche(Stage primaryStage,User session) {
26
27
28 VBox root = new VBox();
29 Scene scene = new Scene(root,800,600);
30
31 AfficheTopMenu menu = new AfficheTopMenu(primaryStage,session);
32 //AfficheTopMenu.setHgrow(root, Priority.ALWAYS);
33
34
35 vEvt = AfficheEvenement.NewAfficheEvenement(primaryStage, session);
36
37 root.getChildren().add(menu);
38
39
40
41 Label titre = new Label("StatHammer");
42 VBox cadre = new VBox();
43 VBox cadreImage = new VBox();
44 HBox capsule = new HBox();
45
46 Button simulation = new Button("SIMULATION");
47 Button creeListe = new Button("CREER LISTE");
48 Button gererListe = new Button("GERER LISTE");
49 /*
50 Image accueil = new Image("images/accueil.jpg");
51 ImageView iv1 = new ImageView();
52 iv1.setImage(accueil);
53 iv1.setFitWidth(700);
54 iv1.setPreserveRatio(true);
55 iv1.setSmooth(true);
56 iv1.setCache(true);
57 */
58
59
60
61 titre.setFont(Font.font(32));
62 titre.setPrefHeight(150);
63
64 creeListe.setPrefWidth(200);
65 creeListe.setPrefHeight(50);
66
67 simulation.setPrefWidth(200);
68 simulation.setPrefHeight(50);
69
70 gererListe.setPrefWidth(200);
71 gererListe.setPrefHeight(50);
72
73 root.getChildren().add(titre);
74 root.getChildren().add(vEvt);
75 root.getChildren().add(capsule);
76
77
78 capsule.getChildren().add(cadreImage);
79 capsule.getChildren().add(cadre);
80
81
82 cadre.setPrefSize(300, 800);
83 cadre.setAlignment(Pos.CENTER);
84
85 /*
86 cadreImage.setPrefSize(900, 800);
87 cadreImage.setAlignment(Pos.CENTER);
88
89 cadreImage.getChildren().add(iv1);*/
90 /*cadre.getChildren().add(simulation);
91 cadre.getChildren().add(creeListe);
92 cadre.getChildren().add(gererListe);
93
94
95
96
97
98 simulation.setOnAction(e -> {
99 primaryStage.close();
100 AfficheSimulation.affiche(primaryStage);
101
102 });
103 */
104 root.setAlignment(Pos.TOP_CENTER);
105 primaryStage.setScene(scene);
106 primaryStage.show();
107 }
108} \ No newline at end of file
diff --git a/src/main/java/vue/AfficheAdmin.java b/src/main/java/vue/AfficheAdmin.java
new file mode 100644
index 0000000..565a18a
--- /dev/null
+++ b/src/main/java/vue/AfficheAdmin.java
@@ -0,0 +1,151 @@
1package vue;
2
3import javafx.geometry.Pos;
4import javafx.scene.Scene;
5import javafx.scene.control.Alert;
6import javafx.scene.control.Button;
7import javafx.scene.control.DatePicker;
8import javafx.scene.image.Image;
9import javafx.scene.image.ImageView;
10import javafx.scene.layout.HBox;
11import javafx.scene.layout.VBox;
12import javafx.scene.paint.Color;
13import javafx.scene.text.Font;
14import javafx.scene.text.Text;
15import javafx.stage.FileChooser;
16import javafx.stage.Stage;
17import modele.Evenement;
18import modele.User;
19import javafx.scene.control.TextField;
20//import java.awt.TextArea;
21import java.io.File;
22import java.io.IOException;
23import java.nio.file.Files;
24import java.nio.file.Paths;
25import java.time.LocalDate;
26import java.time.ZoneId;
27import java.time.format.DateTimeFormatter;
28import java.util.Date;
29
30import controlleur.BDD;
31import controlleur.ControllerAdmin;
32import controlleur.EvenementController;
33
34public class AfficheAdmin {
35 private static VBox events;
36 private static Stage stage;
37 private static User sess;
38
39 public static Stage getStage() {
40 return stage;
41 }
42
43 public static void setStage(Stage stage) {
44 AfficheAdmin.stage = stage;
45 }
46
47 public static User getSess() {
48 return sess;
49 }
50
51 public static void setSess(User sess) {
52 AfficheAdmin.sess = sess;
53 }
54
55 public static VBox getEvents() {
56 return events;
57 }
58
59 public static void affiche(Stage primaryStage, User session) {
60 stage = primaryStage;
61 sess = session;
62 events = EvenementController.EvenementVBox();
63 AfficheTopMenu menu = new AfficheTopMenu(stage,sess);
64 Text titre = new Text("Mes évènements");
65 titre.setFont(Font.font("Arial", 30));
66 titre.setFill(Color.web("#2C3E50"));
67 titre.setStroke(Color.web("#34495E"));
68 titre.setStrokeWidth(1);
69
70
71 // Création du DatePicker
72 DatePicker date = new DatePicker();
73 date.setMaxWidth(60);
74
75 VBox vTitre = new VBox(titre);
76 Button parcourir = new Button("Parcourir");
77 Button valider = new Button("Valider");
78 TextField nom = new TextField("");
79 nom.setPromptText("Nom de l'évènement");
80 TextField descEvent = new TextField();
81 descEvent.setPromptText("Quelques mots pour votre évènement ?");
82 descEvent.setPrefWidth(250);
83
84 // Création d'un ImageView pour afficher l'image
85 ImageView imageView = new ImageView();
86 imageView.setPreserveRatio(true);
87 imageView.setFitWidth(80);
88
89 // Action des boutons
90 parcourir.setOnAction(e -> {
91 ControllerAdmin.parcourir(stage, imageView);
92 });
93
94 valider.setOnAction(e -> {
95 if (nom.getText().isEmpty() || descEvent.getText().isEmpty()||ControllerAdmin.getFile() == null){
96
97 // Affichage du message d'erreur si n champ est vide
98 showErrorMessage("Tous les champs doivent être remplis.");
99 }
100 else {
101 // Récupération de la date sélectionnée
102 LocalDate localDate = date.getValue();
103
104 if (localDate != null) {
105 // Formater la date en chaîne de caractères au format "yyyy-MM-dd"
106 String dateString = localDate.format(DateTimeFormatter.ISO_LOCAL_DATE);
107 System.out.println("Date sélectionnée : " + dateString);
108 System.out.println(dateString);
109 System.out.println("Date sélectionnée (java.util.Date) : " + dateString);
110 events = ControllerAdmin.valider(nom.getText(),ControllerAdmin.getFile().getName(),descEvent.getText(), dateString);
111 AfficheAdmin.affiche(stage, sess);
112 }
113 else {
114
115 // Affichage du message d'erreur si n champ est vide
116 showErrorMessage("Tous les champs doivent être remplis.");
117 }
118 }
119 });
120
121 // VBox principal
122 HBox hbox = new HBox(20);
123 hbox.getChildren().addAll(nom, imageView, descEvent, date, parcourir, valider);
124 hbox.setAlignment(Pos.CENTER);
125
126 VBox root = new VBox();
127 root.getChildren().addAll(menu,vTitre,hbox,events);
128
129 // Ajout du VBox à la scène
130 Scene scene = new Scene(root, 800, 600);
131
132 // Ajout d'un titre à la fenêtre
133 primaryStage.setTitle("StatHammer : Admin");
134 primaryStage.setScene(scene);
135 primaryStage.show();
136 }
137
138 public static void setEvents(VBox events) {
139 AfficheAdmin.events = events;
140 }
141
142 // Méthode pour afficher une erreur
143 private static void showErrorMessage(String message) {
144 Alert alert = new Alert(Alert.AlertType.ERROR);
145 alert.setTitle("StatHammer : Erreur dans le formulaire");
146 alert.setHeaderText(null);
147 alert.setContentText(message);
148 alert.showAndWait();
149 }
150
151}
diff --git a/src/main/java/vue/AfficheConnexion.java b/src/main/java/vue/AfficheConnexion.java
new file mode 100644
index 0000000..5608ab7
--- /dev/null
+++ b/src/main/java/vue/AfficheConnexion.java
@@ -0,0 +1,54 @@
1package vue;
2
3import controlleur.BDD;
4import controlleur.Connexion;
5import javafx.geometry.Pos;
6import javafx.scene.Scene;
7import javafx.scene.control.Button;
8import javafx.scene.control.Label;
9import javafx.scene.control.PasswordField;
10import javafx.scene.control.TextField;
11import javafx.scene.layout.VBox;
12import javafx.stage.Stage;
13
14public class AfficheConnexion {
15 public static void affiche(Stage primaryStage) {
16 VBox root = new VBox();
17 Scene scene = new Scene(root, 800, 600);
18 TextField pseudo = new TextField();
19 PasswordField mdp = new PasswordField();
20 Label nomPseudo = new Label("Pseudo");
21 Label nomMdp = new Label("Mot de passe");
22 Button envoi = new Button("Connexion");
23 Button creaCompte = new Button("Créer un compte");
24
25 root.getChildren().add(nomPseudo);
26 root.getChildren().add(pseudo);
27 root.getChildren().add(nomMdp);
28 root.getChildren().add(mdp);
29 root.getChildren().add(envoi);
30 root.getChildren().add(creaCompte);
31
32 mdp.setMaxWidth(200);
33 pseudo.setMaxWidth(200);
34
35 pseudo.setAlignment(Pos.CENTER);
36 mdp.setAlignment(Pos.CENTER);
37 root.setAlignment(Pos.CENTER);
38
39 //BDD.setInfos("400129","stathammer_greta_admin","stathammer_v1");
40 BDD.setInfos("root","qsdfgh","stathammer");
41
42 creaCompte.setOnAction(e -> {
43 AfficheCreationCompte.affiche(primaryStage);
44 });
45
46 envoi.setOnAction(e -> {
47
48 Connexion.verif(pseudo.getText(), mdp.getText(), primaryStage);
49 });
50
51 primaryStage.setScene(scene);
52 primaryStage.show();
53 }
54}
diff --git a/src/main/java/vue/AfficheConnexionFailed.java b/src/main/java/vue/AfficheConnexionFailed.java
new file mode 100644
index 0000000..0f6ab38
--- /dev/null
+++ b/src/main/java/vue/AfficheConnexionFailed.java
@@ -0,0 +1,56 @@
1package vue;
2
3import controlleur.Connexion;
4import javafx.geometry.Pos;
5import javafx.scene.Scene;
6import javafx.scene.control.Button;
7import javafx.scene.control.Label;
8import javafx.scene.control.PasswordField;
9import javafx.scene.control.TextField;
10import javafx.scene.layout.VBox;
11import javafx.scene.paint.Color;
12import javafx.stage.Stage;
13
14public class AfficheConnexionFailed {
15 public static void affiche(Stage primaryStage) {
16 VBox root = new VBox();
17 Scene scene = new Scene(root, 800, 600);
18 TextField pseudo = new TextField();
19 PasswordField mdp = new PasswordField();
20 Label nomPseudo = new Label("Pseudo");
21 Label nomMdp = new Label("Mot de passe");
22 Button envoi = new Button("Connexion");
23 Button creaCompte = new Button("Créer un compte");
24 Label erreur = new Label("Mauvais Login et/ou MDP");
25
26 erreur.setTextFill(Color.RED);
27 erreur.setAlignment(Pos.CENTER);
28
29 root.getChildren().add(nomPseudo);
30 root.getChildren().add(pseudo);
31 root.getChildren().add(nomMdp);
32 root.getChildren().add(mdp);
33 root.getChildren().add(envoi);
34 root.getChildren().add(creaCompte);
35 root.getChildren().add(erreur);
36
37 mdp.setMaxWidth(200);
38 pseudo.setMaxWidth(200);
39
40 pseudo.setAlignment(Pos.CENTER);
41 mdp.setAlignment(Pos.CENTER);
42 root.setAlignment(Pos.CENTER);
43
44 envoi.setOnAction(e -> {
45
46 Connexion.verif(pseudo.getText(), mdp.getText(), primaryStage);
47 });
48 creaCompte.setOnAction(e -> {
49 AfficheCreationCompte.affiche(primaryStage);
50 });
51
52 primaryStage.setScene(scene);
53 primaryStage.show();
54 }
55
56}
diff --git a/src/main/java/vue/AfficheCreationCompte.java b/src/main/java/vue/AfficheCreationCompte.java
new file mode 100644
index 0000000..0714103
--- /dev/null
+++ b/src/main/java/vue/AfficheCreationCompte.java
@@ -0,0 +1,56 @@
1package vue;
2
3import controlleur.CreationCompte;
4import javafx.geometry.Pos;
5import javafx.scene.Scene;
6import javafx.scene.control.Button;
7import javafx.scene.control.Label;
8import javafx.scene.control.PasswordField;
9import javafx.scene.control.TextField;
10import javafx.scene.layout.VBox;
11import javafx.stage.Stage;
12
13public class AfficheCreationCompte {
14 public static void affiche(Stage primaryStage) {
15 VBox root = new VBox();
16 Scene scene = new Scene(root, 800, 600);
17 TextField Email = new TextField();
18 TextField Pseudo = new TextField();
19 PasswordField Mdp = new PasswordField();
20 Label nomEmail = new Label("Email");
21 Label nomPseudo = new Label("Pseudonyme");
22 Label nomMdp = new Label("Mot de passe");
23 Button envoi = new Button("Créer un compte");
24 Button getback = new Button("Retour page de connexion");
25
26 root.getChildren().add(nomEmail);
27 root.getChildren().add(Email);
28 root.getChildren().add(nomPseudo);
29 root.getChildren().add(Pseudo);
30 root.getChildren().add(nomMdp);
31 root.getChildren().add(Mdp);
32 root.getChildren().add(envoi);
33 root.getChildren().add(getback);
34
35 Email.setMaxWidth(200);
36 Pseudo.setMaxWidth(200);
37 Mdp.setMaxWidth(200);
38
39 Email.setAlignment(Pos.CENTER);
40 Pseudo.setAlignment(Pos.CENTER);
41 Mdp.setAlignment(Pos.CENTER);
42 root.setAlignment(Pos.CENTER);
43
44 envoi.setOnAction(e -> {
45
46 CreationCompte.verif(Email.getText(), Pseudo.getText(), String.valueOf(Mdp.getText().hashCode()), primaryStage);
47 });
48 getback.setOnAction(e -> {
49
50 CreationCompte.getBack(primaryStage);
51 });
52
53 primaryStage.setScene(scene);
54 primaryStage.show();
55 }
56}
diff --git a/src/main/java/vue/AfficheCreerListe.java b/src/main/java/vue/AfficheCreerListe.java
new file mode 100644
index 0000000..4c5bd70
--- /dev/null
+++ b/src/main/java/vue/AfficheCreerListe.java
@@ -0,0 +1,248 @@
1package vue;
2
3import java.awt.Dimension;
4import controlleur.Instanciation;
5import controlleur.StockageCreerListe;
6import javafx.geometry.Pos;
7import javafx.scene.Scene;
8import javafx.scene.control.Button;
9import javafx.scene.control.ChoiceBox;
10import javafx.scene.control.Label;
11import javafx.scene.control.ScrollPane;
12import javafx.scene.control.TextField;
13import javafx.scene.image.Image;
14import javafx.scene.image.ImageView;
15import javafx.scene.layout.HBox;
16import javafx.scene.layout.VBox;
17import javafx.scene.text.Font;
18import javafx.stage.Stage;
19import modele.Bouton;
20import modele.User;
21
22public class AfficheCreerListe {
23 public static void afficheCreerListe(Stage primaryStage,User session) {
24
25 //Definission hauteur largeur pour afficher un peu responsive
26 Dimension tailleEcran = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
27 double hauteur = tailleEcran.getHeight()/2;
28 double largeur = tailleEcran.getWidth()/2;
29
30
31
32
33
34 AfficheTopMenu menu = new AfficheTopMenu(primaryStage, session);
35 //initialisation de toute les variables pour l'affichage
36 VBox root = new VBox();
37 HBox boite = new HBox();
38 VBox gauche = new VBox();
39 VBox droite = new VBox();
40 HBox entete = new HBox();
41 VBox gaucheCorps = new VBox();
42 HBox corpTete = new HBox();
43 VBox droiteCorps= new VBox();
44 Scene scene = new Scene(root,largeur,hauteur);
45 Label titre = new Label("StatHammer");
46 Image logoFaction = new Image("images/wip.jpg");
47 ImageView iv1 = new ImageView(logoFaction);
48 ImageView iv2 = new ImageView(logoFaction);
49 Button creation = new Button("Créer et sauvegarder une Armée");
50 TextField nomArmee = new TextField();
51 ScrollPane toutUnit = new ScrollPane();
52 ScrollPane unitSauv = new ScrollPane();
53 VBox gaucheUnit = new VBox();
54 ChoiceBox<String> faction = new ChoiceBox<>();
55 ChoiceBox<String> groupe = new ChoiceBox<>();
56 StockageCreerListe.initArmeeListe();
57
58 //remplissage de la liste des factions disponibles dans une variable static
59 StockageCreerListe.initFaction();
60
61 //Affichage des noms des faction récuperer dans le stockage static
62 for(String fac:StockageCreerListe.getNomFac()) {
63 faction.getItems().add(fac);
64 }
65 faction.setValue(faction.getItems().getFirst());
66
67
68
69
70 //remplissage de la liste des Armée disponibles dans une variable static
71 StockageCreerListe.initArmee(faction.getValue());
72
73 //affichage des Armée disponible dans un faction séléctionnée
74 for(String armee:StockageCreerListe.getNomArmee()) {
75 groupe.getItems().add(armee);
76 }
77 groupe.setValue(groupe.getItems().getFirst());
78
79
80 //action liste déroulante pour changer de faction et les armée afficher en conséquence
81 faction.setOnAction(e->{
82 groupe.getItems().clear();
83
84 StockageCreerListe.initArmee(faction.getValue());
85 for(String armee:StockageCreerListe.getNomArmee()) {
86 groupe.getItems().add(armee);
87 }
88 groupe.setValue(groupe.getItems().getFirst());
89 });
90
91 //remplissage des unitéd d'une armée séléctionnée dans une variable static
92 StockageCreerListe.initUnit(groupe.getValue());
93
94 //affichage de la liste des unité présente dans l'armée séléctionnée
95 for(String unit : StockageCreerListe.getNomUnit()) {
96
97 //action sur le bouton + permettant d'ajouter l'unité à la liste de l'armée en création
98 droiteCorps.getChildren().add(new HBox(new Label(unit.toString() ),new Bouton("+").setOnAction2(e->{
99 gaucheUnit.getChildren().clear();
100 //verification que l'unité ne fait pas déjà parti de l'armée en cours de création
101 if(!StockageCreerListe.getArmeeListe().getUnits().contains(StockageCreerListe.getUnit(unit))) {
102 StockageCreerListe.getUnit(unit).setFigurine(Instanciation.getFigurine2(unit)) ;
103 StockageCreerListe.getArmeeListe().addUnit(StockageCreerListe.getUnit(unit));
104 }
105
106 //affichage des unité de l'armée en cours de création
107 for(String unit2:StockageCreerListe.getArmeeListe().getUnitNames()) {
108 //action du bouton - permettant de retirer une unité de l'armée en cours de création
109 gaucheUnit.getChildren().add(new HBox(new Label(unit2.toString() ),new Bouton("-").setOnAction2(z->{
110 gaucheUnit.getChildren().remove(
111 StockageCreerListe.getArmeeListe().getUnits().indexOf(StockageCreerListe.getUnit(unit2)));
112 StockageCreerListe.getArmeeListe().removeUnit(StockageCreerListe.getUnit(unit2));
113
114
115 })));
116 }
117
118 })));
119
120 }
121
122 //Meme action que plus haut à faire au moment du changement de choix d'une armée
123 groupe.setOnAction(e->{
124
125 StockageCreerListe.initUnit(groupe.getValue());
126 droiteCorps.getChildren().clear();
127 StockageCreerListe.getArmeeListe().getUnits().clear();
128 for(String unit : StockageCreerListe.getNomUnit()) {
129
130 droiteCorps.getChildren().add(new HBox(new Label(unit.toString() ),new Bouton("+").setOnAction2(y->{
131 gaucheUnit.getChildren().clear();
132
133 if(!StockageCreerListe.getArmeeListe().getUnits().contains(StockageCreerListe.getUnit(unit))) {
134 StockageCreerListe.getUnit(unit).setFigurine(Instanciation.getFigurine2(unit)) ;
135 StockageCreerListe.getArmeeListe().addUnit(StockageCreerListe.getUnit(unit));
136 }
137 for(String unit2:StockageCreerListe.getArmeeListe().getUnitNames()) {
138 gaucheUnit.getChildren().add(new HBox(new Label(unit2.toString() ),new Bouton("-").setOnAction2(z->{
139 gaucheUnit.getChildren().remove(
140 StockageCreerListe.getArmeeListe().getUnits().indexOf(StockageCreerListe.getUnit(unit2)));
141 StockageCreerListe.getArmeeListe().removeUnit(StockageCreerListe.getUnit(unit2));
142
143 })));
144 }
145 })));
146
147 }
148 });
149
150 //assemblage des éléments visuels
151 iv1.setFitHeight(hauteur/15);
152 iv1.setPreserveRatio(true);
153 iv1.setSmooth(true);
154 iv1.setCache(true);
155
156 iv2.setFitHeight(hauteur/15);
157 iv2.setPreserveRatio(true);
158 iv2.setSmooth(true);
159 iv2.setCache(true);
160
161 titre.setFont(Font.font(32));
162 titre.setPrefHeight(50);
163 titre.setAlignment(Pos.CENTER);
164
165 boite.getChildren().addAll(gauche,droite);
166 boite.setAlignment(Pos.CENTER);
167
168 gauche.getChildren().add(entete);
169 gauche.getChildren().add(gaucheCorps);
170 gauche.setPrefWidth(largeur/2);
171 gauche.setPrefHeight(hauteur);
172 gauche.setMaxWidth(largeur/2);
173 gauche.setMaxHeight(hauteur);
174
175
176 droite.getChildren().add(toutUnit);
177 droite.setPrefWidth(largeur/2);
178 droite.setPrefHeight(hauteur);
179 droite.setMaxWidth(largeur/2);
180 droite.setMaxHeight(hauteur);
181
182
183 toutUnit.setFitToHeight(true);
184 toutUnit.setContent(droiteCorps);
185
186 entete.getChildren().addAll(creation,nomArmee,faction,iv1);
187 entete.setAlignment(Pos.CENTER);
188 entete.setMaxHeight(hauteur/15);
189
190 //Bouton de validation de création d'une armée pour sauvegarder l'armée en base de donnée
191 creation.setOnAction(e->{
192 //verification que l'armée soit nommé et NON VIDE
193 if(nomArmee.getText().trim().equals("") || StockageCreerListe.getArmeeListe().getUnits().size()==0) {
194 //affichage d'une boite d'erreur si nom vide ou armée sans unité
195 Stage secondaryStage = new Stage();
196 HBox boitesecondaire = new HBox();
197 Scene secondScene = new Scene(boitesecondaire,200,100);
198 Label error = new Label("ERREUR Armee vide ET/OU sans nom");
199 boitesecondaire.getChildren().add(error);
200 boitesecondaire.setAlignment(Pos.CENTER);
201 secondaryStage.setScene(secondScene);
202 secondaryStage.setTitle("Error");
203 secondaryStage.show();
204 }else {
205 //sauvegarde de l'armée dans la variable de session ainsi que dans la BDD
206 StockageCreerListe.getArmeeListe().setNom(nomArmee.getText());
207 session.getListes().add(StockageCreerListe.getArmeeListe());
208 try {
209
210 Instanciation.insertListe(StockageCreerListe.getArmeeListe(), session);
211
212 AfficheAccueil.affiche(primaryStage, session);
213
214 } catch (Exception e2) {
215 // TODO: handle exception
216 }
217 }
218
219 });
220
221
222 gaucheCorps.getChildren().add(corpTete);
223 gaucheCorps.getChildren().add(unitSauv);
224
225 unitSauv.setContent(gaucheUnit);
226 unitSauv.setFitToHeight(true);
227
228
229
230 corpTete.getChildren().addAll(groupe,iv2);
231 corpTete.setAlignment(Pos.CENTER);
232 corpTete.setMaxHeight(hauteur/15);
233
234 root.getChildren().add(menu);
235 root.setAlignment(Pos.CENTER);
236 root.getChildren().add(titre);
237 root.getChildren().add(boite);
238
239
240
241
242
243 primaryStage.setScene(scene);
244 primaryStage.setTitle("Création de l'armée");
245 primaryStage.show();
246 }
247}
248
diff --git a/src/main/java/vue/AfficheEvenement.java b/src/main/java/vue/AfficheEvenement.java
new file mode 100644
index 0000000..9188476
--- /dev/null
+++ b/src/main/java/vue/AfficheEvenement.java
@@ -0,0 +1,88 @@
1package vue;
2
3import controlleur.Connexion;
4import controlleur.EvenementController;
5import javafx.scene.control.Button;
6import javafx.scene.control.Label;
7import javafx.scene.image.Image;
8import javafx.scene.image.ImageView;
9import javafx.scene.layout.HBox;
10import javafx.scene.layout.VBox;
11import javafx.stage.Stage;
12import modele.Evenement;
13import modele.User;
14
15public class AfficheEvenement {
16 //private static Evenement event;
17
18 public static VBox NewAfficheEvenement(Stage primaryStage, User session) {
19
20 VBox main = new VBox();
21 main.setSpacing(20); // Espacement entre les éléments
22 main.setStyle("-fx-padding: 20; -fx-alignment: center;"); // Ajout de marges autour et centrage du VBox
23
24 HBox hBouton = new HBox();
25 hBouton.setSpacing(10); // Espacement entre les boutons
26 hBouton.setStyle("-fx-alignment: center;"); // Alignement des boutons au centre
27
28 // Style gothique pour le nom de l'événement
29 Label nomEvt = new Label(Connexion.event.getNom_evenement());
30 nomEvt.setStyle("-fx-font-size: 32px; -fx-font-family: 'Times New Roman'; -fx-font-weight: bold; -fx-text-fill: #2F4F4F; -fx-effect: dropshadow(gaussian, rgba(0, 0, 0, 0.5), 10, 5, 2, 2);");
31 nomEvt.setStyle("-fx-font-size: 32px; -fx-font-family: 'Garamond'; -fx-font-weight: bold; -fx-text-fill: #2F4F4F; -fx-effect: dropshadow(gaussian, rgba(0, 0, 0, 0.6), 15, 0.5, 0, 3);");
32
33 // Style de la date et de la description
34 Label dateEvt = new Label(Connexion.event.getData_evenement());
35 dateEvt.setStyle("-fx-font-size: 16px; -fx-text-fill: #555555;"); // Style de la date de l'événement
36
37 Label descEvt = new Label(Connexion.event.getDescritption_evenement());
38 descEvt.setStyle("-fx-font-size: 14px; -fx-text-fill: #777777; -fx-wrap-text: true;");
39 descEvt.setMaxWidth(400); // Limite la largeur de la description
40
41 HBox hLabel = new HBox();
42 hLabel.setSpacing(10);
43 hLabel.getChildren().add(dateEvt);
44 hLabel.getChildren().add(descEvt);
45 hLabel.setStyle("-fx-alignment: center;"); // Alignement des labels au centre
46
47 // Ajout des boutons dans le HBox avec style "dark fantasy" modeste
48 for (int i = 0; i < Connexion.eventC.getNbrEvt(); i++) {
49 int j = i;
50 Button btn = new Button(Connexion.eventC.getNom_event().get(i));
51 btn.setStyle("-fx-background-color: #1a1a1a; -fx-text-fill: #e6e6e6; -fx-font-size: 14px; -fx-padding: 10px 15px; -fx-border-radius: 5px; -fx-border-color: #444444; -fx-border-width: 1px;");
52 btn.setOnAction(e -> {
53 Connexion.event = new Evenement(Connexion.eventC.getNom_event().get(j),
54 Connexion.eventC.getNom_image().get(j),
55 Connexion.eventC.getDesc_event().get(j),
56 Connexion.eventC.getDate_event().get(j));
57
58 AfficheAccueil.affiche(primaryStage, session);
59 });
60 hBouton.getChildren().add(btn);
61 }
62
63 // Image avec centrage et un peu plus de style sombre
64 Image imageAccueil = new Image("images/" + Connexion.event.getNom_image());
65 ImageView iv1 = new ImageView();
66 iv1.setImage(imageAccueil);
67 iv1.setFitWidth(500);
68 iv1.setPreserveRatio(true);
69 iv1.setSmooth(true);
70 iv1.setCache(true);
71 iv1.setStyle("-fx-border-radius: 10px; -fx-effect: dropshadow(gaussian, rgba(0, 0, 0, 0.7), 15, 3, 2, 2);");
72
73 // Centrer le nom et l'image dans un VBox intermédiaire
74 VBox centeredContent = new VBox();
75 centeredContent.setSpacing(10);
76 centeredContent.setStyle("-fx-alignment: center;");
77 centeredContent.getChildren().add(nomEvt);
78 centeredContent.getChildren().add(iv1);
79
80 // Ajout des éléments dans le VBox principal
81 main.getChildren().add(centeredContent); // Ajout du nom et de l'image centrés
82 main.getChildren().add(hBouton); // Ajout des boutons
83 main.getChildren().add(hLabel); // Ajout de la date et description
84
85 // Retourne le VBox stylisé
86 return main;
87 }
88}
diff --git a/src/main/java/vue/AfficheGestionCompte.java b/src/main/java/vue/AfficheGestionCompte.java
new file mode 100644
index 0000000..829ec99
--- /dev/null
+++ b/src/main/java/vue/AfficheGestionCompte.java
@@ -0,0 +1,131 @@
1package vue;
2
3import java.sql.SQLException;
4
5import controlleur.Connexion;
6import javafx.geometry.Insets;
7import javafx.geometry.Pos;
8import javafx.scene.Scene;
9import javafx.scene.control.Alert;
10import javafx.scene.control.Button;
11import javafx.scene.control.Label;
12import javafx.scene.control.PasswordField;
13import javafx.scene.control.TextField;
14import javafx.scene.control.Alert.AlertType;
15import javafx.scene.layout.VBox;
16import javafx.scene.text.Font;
17import javafx.stage.Stage;
18import modele.Evenement;
19import modele.User;
20
21public class AfficheGestionCompte {
22
23public static void affiche(Stage primaryStage,User session) {
24
25
26
27 Label etiquetteM = new Label("Gestion du compte utilisateur");
28 etiquetteM.setFont(new Font("Arial", 24));
29 Button bouton1 = new Button("Envoyer");
30 Button bouton2 = new Button("Envoyer");
31 Label etiquette = new Label("Modifier le pseudonyme : ");
32 TextField texte = new TextField();
33 Label etiquette2 = new Label("Modifier le mot de passe : ");
34 PasswordField texte2 = new PasswordField();
35 Label etiquette3 = new Label("Confirmer avec mot de passe actuel : ");
36 PasswordField texte3 = new PasswordField();
37 VBox vbox = new VBox();
38 VBox vboxT = new VBox();
39 vboxT.getChildren().add(etiquetteM);
40 //VBox vboxL = new VBox();
41 //etiquette.setText("test");
42
43 AfficheTopMenu menu = new AfficheTopMenu(primaryStage,session);
44
45 VBox vbox1 = new VBox();
46 vbox1.getChildren().add(etiquette);
47 vbox1.getChildren().add(texte);
48 vbox1.getChildren().add(bouton1);
49
50 VBox vbox2 = new VBox();
51
52 VBox vboxL = new VBox();
53
54 vbox2.getChildren().add(etiquette2);
55 vbox2.getChildren().add(texte2);
56 vbox2.getChildren().add(etiquette3);
57 vbox2.getChildren().add(texte3);
58 VBox vboxb = new VBox();
59 vboxb.getChildren().add(bouton2);
60 vbox2.getChildren().add(vboxb);
61
62
63
64 Scene scene = new Scene(vbox, 800, 600);
65 vbox.getChildren().add(menu);
66
67 vbox.getChildren().add(vboxT);
68 vbox.getChildren().add(vbox1);
69 vbox.getChildren().add(vbox2);
70
71 vboxT.setAlignment(Pos.CENTER);
72 vboxb.setAlignment(Pos.CENTER);
73 vbox.setSpacing(10);
74 vbox1.setSpacing(10);// Ajoute un espace de 10 pixels entre les composants
75 vbox1.setPadding(new Insets(20, 20, 20, 20)); // Ajoute des marges autour du conteneur
76
77 vbox2.setSpacing(10);// Ajoute un espace de 10 pixels entre les composants
78 vbox2.setPadding(new Insets(20, 20, 20, 20)); // Ajoute des marges autour du conteneur
79 vbox1.setAlignment(Pos.CENTER);
80 bouton2.setAlignment(Pos.CENTER);
81 etiquette.setMaxWidth(Double.MAX_VALUE);
82 texte.setMaxWidth(Double.MAX_VALUE);
83 texte2.setMaxWidth(Double.MAX_VALUE);
84 texte3.setMaxWidth(Double.MAX_VALUE);
85
86 bouton1.setOnAction(e -> {
87 if(texte.getText() != null && !texte.getText().trim().isEmpty() && texte.getText().trim().contains(" ")==false)
88 try {
89 Connexion.updatePseudo(texte.getText().trim(),session.getId()); // bdd
90 session.setNom(texte.getText().trim()); // instance de l'utilisateur
91 menu.setLogin(session.getNom()); // barre de menu
92 Alert alert = new Alert(AlertType.INFORMATION);
93 alert.setTitle("Information");
94 alert.setHeaderText(null);
95 alert.setContentText("Le pseudo a été changé !");
96 alert.showAndWait();
97 } catch (SQLException e1) {
98 e1.printStackTrace();
99 }
100 });
101
102 bouton2.setOnAction(e -> {
103
104 try {
105 String mdp =Connexion.selectMdp(session.getId());
106 if (Integer.toString(texte3.getText().trim().hashCode()).equals(mdp)==true) {
107
108 if(texte2.getText() != null && !texte2.getText().trim().isEmpty() && texte2.getText().trim().contains(" ")==false)
109 try {
110 Connexion.updateMdp(texte2.getText().trim(), session.getId());
111 Alert alert2 = new Alert(AlertType.INFORMATION);
112 alert2.setTitle("Information");
113 alert2.setHeaderText(null);
114 alert2.setContentText("Le mot de passe !");
115 alert2.showAndWait();
116
117 } catch (SQLException e1) {
118 e1.printStackTrace();
119 }
120 }
121 }
122 catch (SQLException e1) {
123 e1.printStackTrace();
124 }
125 });
126
127 primaryStage.setScene(scene);
128 primaryStage.show();
129 }
130}
131
diff --git a/src/main/java/vue/AfficheTopMenu.java b/src/main/java/vue/AfficheTopMenu.java
new file mode 100644
index 0000000..f0449aa
--- /dev/null
+++ b/src/main/java/vue/AfficheTopMenu.java
@@ -0,0 +1,116 @@
1package vue;
2
3import controlleur.ControllerTopMenu;
4import javafx.scene.control.Button;
5import javafx.scene.control.Label;
6import javafx.scene.image.Image;
7import javafx.scene.image.ImageView;
8import javafx.scene.layout.HBox;
9import javafx.scene.layout.Pane;
10import javafx.scene.layout.Priority;
11import javafx.scene.paint.Color;
12import javafx.stage.Stage;
13import modele.Evenement;
14import modele.User;
15
16public class AfficheTopMenu extends HBox
17{
18 private Label pseudo;
19
20 public AfficheTopMenu(Stage primaryStage, User session)
21 {
22 this.setStyle("-fx-background-color: gray; -fx-padding: 5px;");
23 //-fx-spacing: 10px;
24 //Label title = new Label("Simulation"); // moche, à améliorer ou retirer
25 Button btn_account = new Button("Mon compte");
26 Button btn_logout = new Button();
27 Button btn_home = new Button("Accueil");
28 Button btn_gerer_liste = new Button("Gerer liste");
29 Button btn_creer_liste = new Button("Création liste");
30 Button btn_admin = new Button("Admin");
31 Button btn_simu = new Button("Simulation");
32
33
34 HBox h1 = new HBox();
35 h1.getChildren().addAll(btn_home, btn_account,btn_gerer_liste,btn_creer_liste,btn_simu);
36
37
38
39 Image icons_deco = new Image("/images/deco.png");
40 ImageView icons_deco_box = new ImageView(icons_deco);
41 btn_logout.setGraphic(icons_deco_box);
42 icons_deco_box.setPreserveRatio(true);
43 icons_deco_box.fitHeightProperty().bind(btn_account.heightProperty());
44 //this.getChildren().add(h1);
45 //this.setAlignment(javafx.geometry.Pos.CENTER_RIGHT);
46 //h1.setLeft(null);
47 //h2.setAlignment(javafx.geometry.Pos.TOP_RIGHT);
48 //this.setSpacing(getMaxWidth());
49 //h1.setSpacing(10);// Ajoute un espace de 10 pixels entre les composants
50 //h2.setPadding(new Insets(1, 1, 20, 1));
51
52
53
54 if(session.getRole().equals("Admin") ) {
55 h1.getChildren().add(btn_admin);
56 }
57 pseudo = new Label(session.getNom());
58 //pseudo.setStyle("-fx-text-fill: white");
59 pseudo.setTextFill(Color.WHITE);
60 pseudo.setStyle("-fx-font-weight: bold;");
61 //barre.getChildren().addAll( pseudo, btn_logout);
62
63
64 //this.setAlignment(javafx.geometry.Pos.CENTER_RIGHT);
65 HBox h2 = new HBox();
66 h2.getChildren().addAll( pseudo, btn_logout);
67
68 h1.setSpacing(10);
69 h2.setSpacing(10);
70 Pane p = new Pane();
71 HBox.setHgrow(p, Priority.ALWAYS);
72 this.getChildren().addAll( h1,p, h2);
73 this.setAlignment(javafx.geometry.Pos.TOP_CENTER);
74 h1.setAlignment(javafx.geometry.Pos.CENTER_LEFT);
75 h2.setAlignment(javafx.geometry.Pos.CENTER_RIGHT);
76
77
78 // menu principal
79 btn_home.setOnAction(e -> {
80 ControllerTopMenu.go_accueil(primaryStage,session);
81 });
82 // gestion de son compte
83 btn_account.setOnAction(e -> {
84 ControllerTopMenu.go_gestion_compte(primaryStage,session);
85 });
86 // gestion des listes
87 btn_gerer_liste.setOnAction(e -> {
88 ControllerTopMenu.go_gestion_listes(primaryStage,session);
89 });
90 // page de connexion
91 btn_logout.setOnAction(e -> {
92 ControllerTopMenu.go_deco(primaryStage, session);
93 });
94 // simulation
95 btn_simu.setOnAction(e -> {
96 ControllerTopMenu.go_simulation(primaryStage,session);
97 });
98
99 // options réservées à l'admin
100 btn_admin.setOnAction(e -> {
101 ControllerTopMenu.go_admin(primaryStage, session);
102 });
103
104 //vers creer liste
105 btn_creer_liste.setOnAction(e->{
106 ControllerTopMenu.go_creer_liste(primaryStage,session);
107 });
108
109 }
110
111 public void setLogin(String login)
112 {
113 pseudo.setText(login);
114 }
115
116}
diff --git a/src/main/java/vue/GestionListe/AfficheGestionListe.java b/src/main/java/vue/GestionListe/AfficheGestionListe.java
new file mode 100644
index 0000000..743eff4
--- /dev/null
+++ b/src/main/java/vue/GestionListe/AfficheGestionListe.java
@@ -0,0 +1,126 @@
1package vue.GestionListe;
2
3import controlleur.GestionListe;
4import javafx.geometry.Insets;
5import javafx.geometry.Pos;
6import javafx.scene.Scene;
7import javafx.scene.control.Alert;
8import javafx.scene.control.Button;
9import javafx.scene.control.ButtonType;
10import javafx.scene.control.Label;
11import javafx.scene.layout.*;
12import javafx.scene.paint.Color;
13import javafx.stage.Stage;
14import modele.ArmeeListe;
15import modele.User;
16import vue.AfficheAccueil;
17import vue.AfficheTopMenu;
18import controlleur.SupprListe;
19
20import java.io.File;
21import java.util.ArrayList;
22
23public class AfficheGestionListe {
24 public static void affiche(Stage primaryStage, User session) {
25 // Liste des conteneurs principaux structurant l'interface
26 VBox root = new VBox(); // page principa
27 HBox boite = new HBox(); // Box contenant les parties bouton et liste
28 VBox selectBouton = new VBox(); // Partie bouton
29 VBox liste = new VBox(); // Partie Liste
30 Scene scene = new Scene(root, 1000, 800); // taille de la scène
31 File file = null;
32
33 AfficheTopMenu menu = new AfficheTopMenu(primaryStage,session);
34
35 root.getChildren().add(menu);
36
37 // _______________ BOX BOITE _______________
38 // Partie bouton
39 Button Retour = new Button("Retour");
40 Button Import = new Button("Importer une liste");
41 // dimension des boutons
42 Retour.setPrefSize(200, 50);
43 Import.setPrefSize(200, 50);
44 // configuration des boutons
45 selectBouton.setPadding(new Insets(50, 0, 0, 0));
46 selectBouton.setAlignment(Pos.TOP_CENTER);
47 selectBouton.getChildren().addAll(Retour, Import);
48 selectBouton.setPrefWidth(400);
49 selectBouton.setBackground(Background.fill(Color.LIGHTGRAY));
50
51 // Conteneur des listes
52 liste.setPrefWidth(800);
53 liste.setBackground(Background.fill(Color.LIGHTGREY));
54 liste.setSpacing(10);
55 liste.setStyle("-fx-border-color: black; -fx-border-width: 1px;"); // bordure du conteneur
56
57 // Charger les listes de l'utilisateur
58 GestionListe gestionListe = new GestionListe();
59 ArrayList<ArmeeListe> listes = gestionListe.getArmeeListe(session.getId()); // récupération des listes avec l'id
60 // utilisateur
61 // Boucle pour afficher les listes
62 for (ArmeeListe armee : listes) {
63 VBox listeBox = new VBox();
64 listeBox.setPadding(new Insets(10));
65 listeBox.setSpacing(5);
66 listeBox.setStyle("-fx-border-color: black; -fx-border-width: 1px;");
67
68 Label nomListe = new Label(armee.getNomListe());
69 Label descriptionListe = new Label(armee.getDescription());
70 VBox uniteBox = new VBox();
71 for (String unit_name : armee.getUniteListe()) {
72 Label nomUnite = new Label("- " + unit_name);
73 uniteBox.getChildren().add(nomUnite);
74 }
75
76 // Ajout des boutons (Partage, Modification, Suppression)
77 HBox actions = new HBox();
78 actions.setSpacing(10);
79 Button partageBtn = new Button("Exporter");
80 Button modifBtn = new Button("Modifier");
81 Button supprBtn = new Button("Supprimer");
82
83 actions.getChildren().addAll(partageBtn, modifBtn, supprBtn);
84 actions.setAlignment(Pos.CENTER_RIGHT);
85
86 listeBox.getChildren().addAll(nomListe, descriptionListe, uniteBox, actions);
87 liste.getChildren().add(listeBox);
88
89 modifBtn.setOnAction(e ->{
90 //primaryStage.close();
91 AfficheModificationListe.affiche(primaryStage, session, armee.getIdListe(), armee.getIdArmee());
92 });
93
94 supprBtn.setOnAction(e -> {
95 Alert alert = new Alert(Alert.AlertType.CONFIRMATION,
96 "Voulez-vous vraiment supprimer la liste :" + armee.getName() + "?", ButtonType.YES,
97 ButtonType.NO);
98 alert.showAndWait().ifPresent(response -> {
99 if (response == ButtonType.YES) {
100 int idListe = armee.getId();
101 SupprListe suppr = new SupprListe();
102 suppr.Suppression(idListe);
103
104 liste.getChildren().remove(listeBox);
105 }
106 });
107 });
108 }
109 // ajout des conteneurs principaux à la scène
110 boite.getChildren().addAll(selectBouton, liste);
111 root.getChildren().addAll(boite);
112
113 // Bouton Retour
114 Retour.setOnAction(e -> {
115 AfficheAccueil.affiche(primaryStage, session);
116 });
117
118 Import.setOnAction(e -> {
119 GestionListe.importer(primaryStage, file);
120 });
121
122 primaryStage.setScene(scene);
123 primaryStage.show();
124 }
125
126}
diff --git a/src/main/java/vue/GestionListe/AfficheModificationListe.java b/src/main/java/vue/GestionListe/AfficheModificationListe.java
new file mode 100644
index 0000000..e8e6a8f
--- /dev/null
+++ b/src/main/java/vue/GestionListe/AfficheModificationListe.java
@@ -0,0 +1,165 @@
1package vue.GestionListe;
2
3import javafx.scene.layout.VBox;
4import javafx.scene.paint.Color;
5import javafx.stage.Stage;
6import modele.ArmeeListe;
7import modele.Evenement;
8import modele.Figurine;
9import modele.User;
10import vue.AfficheTopMenu;
11
12import java.util.ArrayList;
13
14import controlleur.ModificationListe;
15import javafx.geometry.Insets;
16import javafx.scene.Scene;
17import javafx.scene.control.Button;
18import javafx.scene.control.Label;
19import javafx.scene.control.ScrollPane;
20import javafx.scene.layout.Background;
21import javafx.scene.layout.HBox;
22
23public class AfficheModificationListe {
24 public static void affiche(Stage primaryStage, User session, int idListe, int idArmee) {
25 VBox root = new VBox();
26 HBox boite = new HBox();
27 VBox afficheListe = new VBox();
28
29 ScrollPane scrollModifListe = new ScrollPane();
30 ScrollPane scrollAfficheListe = new ScrollPane();
31 VBox unitDispo = new VBox();
32 Scene scene = new Scene(root, 1200, 600);
33
34 AfficheTopMenu menu = new AfficheTopMenu(primaryStage, session);
35
36 root.getChildren().add(menu);
37
38 ModificationListe modificationListe = new ModificationListe();
39 ArrayList<ArmeeListe> listes = modificationListe.getArmeeListe(idListe);
40
41 // Listes temporaires pour les unités ajoutées et supprimées
42 ArrayList<String> unitesAjoutees = new ArrayList<>();
43 ArrayList<String> unitesSupprimees = new ArrayList<>();
44
45 // Colonne Affichage de la liste principale
46 for (ArmeeListe armee : listes) {
47 VBox listeBox = new VBox();
48 listeBox.setPadding(new Insets(10));
49 listeBox.setSpacing(5);
50 listeBox.setStyle("-fx-border-color: black; -fx-border-width: 1px;");
51
52 Label nomListe = new Label(armee.getNomListe());
53 VBox uniteBox = new VBox();
54 for (String unite : armee.getUniteListe()) {
55 VBox uniteContainer = new VBox();
56
57 Button retirerUnit = new Button("retirer");
58 uniteContainer.getChildren().add(retirerUnit);
59 retirerUnit.setOnAction(e -> {
60 if (!unitesSupprimees.contains(unite)) {
61 unitesSupprimees.add(unite);
62 uniteBox.getChildren().remove(uniteContainer);
63 System.out.println("Unité retirée : " + unite);
64 }
65 });
66
67 Label nomUnite = new Label("| " + unite);
68 uniteContainer.getChildren().add(nomUnite);
69
70 // Récupérer et afficher les figurines pour cette unité
71 ArrayList<Figurine> figurines = modificationListe.getFigurineListe(idListe, unite);
72 for (Figurine figurine : figurines) {
73 Label nomFigurine = new Label(" - " + figurine.getNom());
74 uniteContainer.getChildren().add(nomFigurine);
75 }
76
77 uniteBox.getChildren().add(uniteContainer);
78 }
79 listeBox.getChildren().addAll(nomListe, uniteBox);
80 afficheListe.getChildren().add(listeBox);
81 }
82
83 afficheListe.setPrefWidth(400);
84 afficheListe.setPrefHeight(500);
85 afficheListe.setBackground(Background.fill(Color.LIGHTGREY));
86
87 // Colonne des unités disponibles
88 ArrayList<ArmeeListe> toutesUnites = modificationListe.getAllUnites(idArmee, idListe);
89 for (ArmeeListe armee : toutesUnites) {
90 VBox listeBox = new VBox();
91 listeBox.setPadding(new Insets(10));
92 listeBox.setSpacing(5);
93 listeBox.setStyle("-fx-border-color: black; -fx-border-width: 1px;");
94
95 VBox uniteBox = new VBox();
96 for (String unite : armee.getUniteListe()) {
97 Button ajouterUnit = new Button("ajouter");
98 uniteBox.getChildren().add(ajouterUnit);
99 ajouterUnit.setOnAction(e -> {
100 if (!unitesAjoutees.contains(unite)) {
101 unitesAjoutees.add(unite);
102
103 // Ajouter l'unité et ses figurines à l'affichage
104 VBox nouvelleUniteContainer = new VBox();
105
106 Button nouveauRetirerUnit = new Button("retirer");
107 nouvelleUniteContainer.getChildren().add(nouveauRetirerUnit);
108 nouveauRetirerUnit.setOnAction(event -> {
109 if (!unitesSupprimees.contains(unite)) {
110 unitesSupprimees.add(unite);
111 afficheListe.getChildren().remove(nouvelleUniteContainer);
112 System.out.println("Unité retirée : " + unite);
113 }
114 });
115
116 Label nouvelleUnite = new Label("| " + unite);
117 nouvelleUniteContainer.getChildren().add(nouvelleUnite);
118
119 // Récupère et affiche les figurines de unité
120 ArrayList<Figurine> figurines = modificationListe.getAllFigurineListe(idArmee, unite);
121 for (Figurine figurine : figurines) {
122 Label nomFigurine = new Label(" - " + figurine.getNom());
123 nouvelleUniteContainer.getChildren().add(nomFigurine);
124 }
125
126 afficheListe.getChildren().add(nouvelleUniteContainer);
127 System.out.println("Unité ajoutée : " + unite);
128 }
129 });
130
131 Label nomUnite = new Label("| " + unite);
132 uniteBox.getChildren().add(nomUnite);
133
134 // Récupérer et afficher les figurines de l'unité
135 ArrayList<Figurine> figurines = modificationListe.getAllFigurineListe(idArmee, unite);
136 for (Figurine figurine : figurines) {
137 Label nomFigurine = new Label(" - " + figurine.getNom());
138 uniteBox.getChildren().add(nomFigurine);
139 }
140 }
141 listeBox.getChildren().addAll(uniteBox);
142 unitDispo.getChildren().add(listeBox);
143 }
144
145 unitDispo.setPrefWidth(400);
146 unitDispo.setPrefHeight(500);
147 unitDispo.setBackground(Background.fill(Color.LIGHTGREY));
148 scrollModifListe.setContent(unitDispo);
149 scrollAfficheListe.setContent(afficheListe);
150
151 Button valider = new Button("Valider");
152 valider.setOnAction(e -> {
153 // Envoyer les modifications à la bdd
154 modificationListe.ajouterUnites(idListe, unitesAjoutees);
155 modificationListe.supprimerUnites(idListe, unitesSupprimees);
156 System.out.println("Modifications validées.");
157 });
158
159 boite.getChildren().addAll(scrollModifListe, scrollAfficheListe, valider);
160 root.getChildren().addAll(boite);
161
162 primaryStage.setScene(scene);
163 primaryStage.show();
164 }
165}
diff --git a/src/main/java/vue/simulation/AfficheSimulation.java b/src/main/java/vue/simulation/AfficheSimulation.java
new file mode 100644
index 0000000..bb658a3
--- /dev/null
+++ b/src/main/java/vue/simulation/AfficheSimulation.java
@@ -0,0 +1,201 @@
1package vue.simulation;
2
3
4import vue.AfficheTopMenu;
5
6import java.util.ArrayList;
7
8import application.Battle;
9import controlleur.ControlleurSimu;
10import javafx.geometry.Insets;
11import javafx.geometry.Pos;
12import javafx.scene.Scene;
13import javafx.scene.control.Button;
14import javafx.scene.control.ChoiceBox;
15import javafx.scene.control.ScrollPane;
16import javafx.scene.image.Image;
17import javafx.scene.image.ImageView;
18import javafx.scene.layout.HBox;
19import javafx.scene.layout.Pane;
20import javafx.scene.layout.VBox;
21import javafx.stage.Stage;
22import modele.ArmeeListe;
23
24import modele.User;
25
26public class AfficheSimulation
27{
28 private static SimAptAndWeaponsVBox weapons_aptitudes_menu = new SimAptAndWeaponsVBox();
29 public static boolean inversion = false; // pour le bouton inversion
30
31 public static void refreshWeaponAndAptitude(SimAptAndWeaponsVBox wap)
32 {
33 weapons_aptitudes_menu.getChildren().clear();
34 weapons_aptitudes_menu.getChildren().addAll(wap.getChildren()); // copie profonde
35 //weapons_aptitudes_menu.setStyle("-fx-border-width: 1; -fx-border-color: black; -fx-border-radius: 2; -fx-padding: 3px;");
36 weapons_aptitudes_menu.setStyle("-fx-background-color: rgb(210, 210, 210); -fx-padding: 4px; -fx-border-color: black; -fx-border-radius: 4;");
37 }
38
39 public static SimAptAndWeaponsVBox getWeaponsAtitudesMenu() {
40 return weapons_aptitudes_menu;
41 }
42 public static void cleanWeaponsAtitudesMenu() {
43 weapons_aptitudes_menu = new SimAptAndWeaponsVBox();
44 }
45
46 public static void affiche(Stage primaryStage, User session)
47 {
48 // listes d'armées
49 ArrayList<ArmeeListe> lists_of_lists = session.getListes(); // listes d'objets ArmeeListe
50 String[] list_names = session.getListNames(); // tableau des noms des listes
51
52 System.out.print(session.getListes() + "wawa" + session.getListNames() + "wiwi");
53 VBox root_box = new VBox();
54
55 AfficheTopMenu menu = new AfficheTopMenu(primaryStage, session); // menu du haut de l'écran
56
57 HBox main = new HBox(); // partie principale de la fenêtre
58
59
60 /* -- colonne de gauche -- */
61 VBox column1_box = new VBox();
62 column1_box.prefWidthProperty().bind(main.widthProperty().multiply(0.3));
63
64 ScrollPane column1_scrollpane = new ScrollPane(); // conteneur avec barres de défilement
65 column1_scrollpane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); // pas de barre horizontale
66
67 VBox column1 = new VBox();
68 column1.prefWidthProperty().bind(column1_scrollpane.widthProperty());
69
70
71 // menu choix armée
72 HBox col1_first_row = new HBox(); // menu déroulant + logo faction
73 ChoiceBox<String> list1_drop_down = new ChoiceBox<>();
74 list1_drop_down.setStyle("-fx-font-size: 15;");
75 list1_drop_down.prefWidthProperty().bind(column1_scrollpane.widthProperty());
76 for(int i = 0; i < list_names.length; i++)
77 {
78 list1_drop_down.getItems().add(list_names[i]);
79 }
80 col1_first_row.getChildren().add(list1_drop_down);
81 column1.getChildren().add(col1_first_row);
82
83 // unités colonne 1 (par défaut)
84 SimUnitsVBox units_list1 = new SimUnitsVBox(1);
85 column1.getChildren().add(units_list1);
86 column1_scrollpane.setContent(column1);
87
88 VBox.setMargin(weapons_aptitudes_menu, new Insets(5,2,2,2));
89 column1_box.getChildren().addAll(column1_scrollpane, weapons_aptitudes_menu);
90
91
92 /* -- colonne centrale -- */
93 VBox column2 = new VBox();
94 column2.prefWidthProperty().bind(main.widthProperty().multiply(0.4));
95 column2.setAlignment(Pos.TOP_CENTER);
96
97 // boutons inverser et simuler
98 Button btn_simulate = new Button("Action !!");
99 btn_simulate.setStyle("-fx-font-size: 15;");
100
101 Image icons_inversion = new Image("/images/inversion_icons.png");
102 ImageView icons_inversion_box = new ImageView(icons_inversion);
103 Button btn_reverse_armies = new Button();
104 btn_reverse_armies.setGraphic(icons_inversion_box);
105
106 // grande image
107 Image image_col2 = new Image("/images/wip.jpg");
108 ImageView image_box = new ImageView();
109 image_box.setPreserveRatio(true);
110 image_box.fitWidthProperty().bind(column2.widthProperty());
111 image_box.setImage(image_col2);
112
113 // contrairement aux VBox, ce conteneur ne s'adapte pas à la taille des ses enfants, c'est l'image qui s'adapte
114 Pane big_image_pane = new Pane();
115 big_image_pane.getChildren().add(image_box);
116
117 // assemblage
118 column2.getChildren().addAll(btn_simulate, big_image_pane, btn_reverse_armies);
119
120
121 /* -- colonne de droite -- */
122 ScrollPane column3_box = new ScrollPane(); // conteneur avec barres de défilement
123 column3_box.prefWidthProperty().bind(main.widthProperty().multiply(0.3));
124 column3_box.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); // pas de barre horizontale
125
126 VBox column3 = new VBox();
127 column3.prefWidthProperty().bind(column3_box.widthProperty());
128
129 HBox col3_first_row = new HBox(); // menu déroulant + logo faction
130 ChoiceBox<String> list2_drop_down = new ChoiceBox<>();
131 list2_drop_down.setStyle("-fx-font-size: 15;");
132 list2_drop_down.prefWidthProperty().bind(column1_scrollpane.widthProperty());
133 for(int i = 0; i < list_names.length; i++)
134 {
135 list2_drop_down.getItems().add(list_names[i]);
136 }
137 col3_first_row.getChildren().add(list2_drop_down);
138 column3.getChildren().add(col3_first_row);
139
140 // unités colonne 3
141 SimUnitsVBox units_list2 = new SimUnitsVBox(2);
142 column3.getChildren().add(units_list2);
143 column3_box.setContent(column3);
144
145
146 /* -- assemblage -- */
147 main.getChildren().addAll(column1_box, column2, column3_box);
148 root_box.getChildren().addAll(menu, main);
149
150
151 /* ACTION !! */
152 btn_simulate.setOnAction(e -> {
153 if(Battle.getSelectedList(1) != null && Battle.getSelectedList(2) != null
154 && Battle.getSelectedUnitIndex(1) >= 0 && Battle.getSelectedUnitIndex(2) >= 0)
155 {
156 ControlleurSimu.afficheSimu(big_image_pane, Battle.getSelectedUnit(1), Battle.getSelectedUnit(2));
157 }
158 else {
159 System.out.println("conditions non remplies pour faire une simulation");
160 }
161 });
162
163
164 Scene scene = new Scene(root_box,800,600);
165 primaryStage.setTitle("Simulation");
166 primaryStage.setScene(scene);
167 primaryStage.show();
168
169
170 // choix des listes d'armées
171 ArrayList<SimUnitsVBox> unit_lists = new ArrayList<SimUnitsVBox>();
172 unit_lists.add(units_list1);
173 unit_lists.add(units_list2);
174 ArrayList<ChoiceBox<String>> lists_drop_down = new ArrayList<ChoiceBox<String>>();
175 lists_drop_down.add(list1_drop_down);
176 lists_drop_down.add(list2_drop_down);;
177 ArrayList<HBox> first_rows = new ArrayList<HBox>();
178 first_rows.add(col1_first_row);
179 first_rows.add(col3_first_row);
180 for(int i = 0; i < 2; i++)
181 {
182 final int j = i;
183 lists_drop_down.get(i).getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
184 if(!inversion) {
185 ControlleurSimu.selectAList(j + 1, lists_of_lists, newValue);
186 }
187 ControlleurSimu.PullDownUnits(j + 1, first_rows.get(j), unit_lists.get(j));
188 });
189 }
190
191 // inversion de l'attaquant et du défenseur
192 btn_reverse_armies.setOnAction(e -> {
193 if(Battle.getSelectedList(1) != null && Battle.getSelectedList(2) != null) {
194 ControlleurSimu.reverseArmies(lists_drop_down);
195 }
196 else {
197 System.out.println("conditions non remplies pour inverser listes");
198 }
199 });
200 }
201}
diff --git a/src/main/java/vue/simulation/SimAptAndWeaponsVBox.java b/src/main/java/vue/simulation/SimAptAndWeaponsVBox.java
new file mode 100644
index 0000000..5014b59
--- /dev/null
+++ b/src/main/java/vue/simulation/SimAptAndWeaponsVBox.java
@@ -0,0 +1,130 @@
1package vue.simulation;
2
3import java.util.ArrayList;
4
5import application.Battle;
6import controlleur.ControlleurSimu;
7import javafx.geometry.Insets;
8import javafx.geometry.Pos;
9import javafx.scene.control.CheckBox;
10import javafx.scene.control.ChoiceBox;
11import javafx.scene.control.Label;
12import javafx.scene.control.Slider;
13import javafx.scene.layout.HBox;
14import javafx.scene.layout.FlowPane;
15import javafx.scene.layout.VBox;
16import modele.Aptitude;
17import modele.Arme;
18import modele.Figurine;
19
20public class SimAptAndWeaponsVBox extends VBox
21{
22 private int group_number;
23 private String group_name;
24 int group_size;
25 String[] weapon_names;
26 String[] aptitude_names;
27
28 //public SimAptAndWeaponsVBox(){}
29
30 // setters
31 public void setFigGroup(int fig_group_number, String fig_group_name, int fig_group_size){
32 group_number = fig_group_number;
33 group_name = fig_group_name;
34 group_size = fig_group_size;
35 }
36 public void setArmes(ArrayList<Arme> weapon_list){
37 weapon_names = new String[weapon_list.size()];
38 for(int i = 0; i < weapon_list.size(); i++) {
39 weapon_names[i] = weapon_list.get(i).getNom();
40 }
41 }
42 public void setAptitudes(ArrayList<Aptitude> aptitude_list){
43 aptitude_names = new String[aptitude_list.size()];
44 for(int i = 0; i < aptitude_list.size(); i++) {
45 aptitude_names[i] = aptitude_list.get(i).getName();
46 }
47 }
48
49 public void setAptAndWeapons(ArrayList<Figurine> fig_group)
50 {
51 /* -- ligne 1: numéro du group et nom figurine -- */
52 HBox first_row = new HBox();
53
54 // numéro du group de figurines identiques
55 Label number = new Label(Integer.toString(group_number));
56 number.setAlignment(Pos.CENTER);
57 number.setMinHeight(25);
58 number.setMinWidth(25);
59 number.setStyle("-fx-text-fill: white; -fx-background-color: black; -fx-background-radius: 4;");
60 HBox.setMargin(number, new Insets(0, 2, 2, 0));
61
62 Label figurine_name = new Label(group_name);
63 first_row.getChildren().addAll(number, figurine_name);
64
65
66 /* -- ligne 2: menu déroulant choix de l'arme -- */
67 ChoiceBox<String> select_weapon = new ChoiceBox<String>();
68
69 // sécurité
70 for(int i = 0; i < weapon_names.length; i++)
71 {
72 select_weapon.getItems().add(weapon_names[i]);
73 }
74
75 // valeur initiale menu déroulante
76 Arme weapon = Battle.getSeletedWeapon(1, group_name);
77 if(weapon != null) {
78 select_weapon.setValue(weapon.getNom());
79 }
80 else {
81 select_weapon.setValue(weapon_names[0]);
82 }
83 // caractéristiques
84 FlowPane weapon_stats = new FlowPane();
85 setWeaponStats(weapon, weapon_stats);
86
87 select_weapon.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
88 ControlleurSimu.selectAWeapon(this, newValue, fig_group, weapon_stats);
89 });
90
91 // choix du nombre d'attaquants (= nombre d'armes)
92 Slider nb_of_attackers = new Slider(0, group_size, Battle.getSelectedUnit(1).getAliveFigsOfAGroup(group_name));
93 nb_of_attackers.setMajorTickUnit(1);
94 nb_of_attackers.setMinorTickCount(0);
95 nb_of_attackers.setSnapToTicks(true);
96 //nb_of_attackers.setShowTickMarks(true);
97 nb_of_attackers.setShowTickLabels(true);
98 //nb_of_attackers.setBlockIncrement(1);
99
100 nb_of_attackers.valueProperty().addListener((observable, oldValue, newValue) -> {
101 ControlleurSimu.AliveFigsChoice(1, newValue.intValue(), group_name);
102 });
103
104 // checkbox
105 FlowPane aptitudes = new FlowPane();
106 for(int i = 0; i < aptitude_names.length; i++)
107 {
108 CheckBox one_aptitude = new CheckBox(aptitude_names[i]);
109 one_aptitude.setStyle("-fx-padding: 2px;");
110 aptitudes.getChildren().add(one_aptitude);
111
112 one_aptitude.setOnAction(e -> {
113 ControlleurSimu.checkOrUncheckAnAptitude(one_aptitude.isSelected(), one_aptitude.getText(), fig_group);
114 });
115 }
116
117 this.getChildren().addAll(first_row, select_weapon, weapon_stats, nb_of_attackers, aptitudes);
118 }
119
120 public void setWeaponStats(Arme weapon, FlowPane weapon_stats) {
121 weapon_stats.setStyle("-fx-padding: 3px;");
122 Label A = new Label("A " + weapon.getA() + " | ");
123 Label F = new Label("F " + weapon.getF() + " | ");
124 Label PA = new Label("PA " + weapon.getPA() + " | ");
125 Label D = new Label("D " + weapon.getD() + " | ");
126 Label portee = new Label("portée " + weapon.getPortee());
127 weapon_stats.getChildren().addAll(A, F, PA, D, portee);
128 }
129}
130
diff --git a/src/main/java/vue/simulation/SimFigurinesVBox.java b/src/main/java/vue/simulation/SimFigurinesVBox.java
new file mode 100644
index 0000000..4940917
--- /dev/null
+++ b/src/main/java/vue/simulation/SimFigurinesVBox.java
@@ -0,0 +1,139 @@
1package vue.simulation;
2
3import java.util.ArrayList;
4import java.util.HashMap;
5
6import application.Battle;
7import controlleur.ControlleurSimu;
8import javafx.geometry.Insets;
9import javafx.geometry.Pos;
10import javafx.scene.control.Button;
11import javafx.scene.control.Label;
12import javafx.scene.control.Slider;
13import javafx.scene.control.Spinner;
14import javafx.scene.image.Image;
15import javafx.scene.image.ImageView;
16import javafx.scene.layout.HBox;
17import javafx.scene.layout.FlowPane;
18import javafx.scene.layout.VBox;
19import modele.Figurine;
20import modele.Unit;
21
22public class SimFigurinesVBox extends VBox
23{
24 private Unit unit;
25 private int column;
26 private ArrayList<SimAptAndWeaponsVBox> weapons_aptitudes_menu_view = new ArrayList<SimAptAndWeaponsVBox>();
27 private boolean open = false; // les figurines sont cachées par défaut
28
29 public SimFigurinesVBox(int col, Unit unit){
30 column = col;
31 this.unit = unit;
32 this.setStyle("-fx-padding: 2px;");
33 }
34
35 public boolean isOpen(){
36 return open;
37 }
38 public void changeState(){
39 open ^= true; // inversion de bouléen avec un masque 00000001
40 }
41
42 public void setFigurines()
43 {
44 /* -- boucle sur les groupes de figuriones -- */
45 int i = 0; // valeurs des boutons numérotés
46 for(HashMap.Entry<String, ArrayList<Figurine>> entry : unit.getIdenticalFigsGroups().entrySet())
47 {
48 FlowPane fig_group = new FlowPane();
49 //fig_group.setStyle("-fx-background-color: rgb(220, 220, 220);");
50 String fig_name = entry.getKey();
51 ArrayList<Figurine> fig_list = entry.getValue();
52 i++;
53 if(column == 1)
54 {
55 // boutons numérotés des groupes de figurines
56 Button number = new Button(Integer.toString(i));
57 number.setAlignment(Pos.CENTER);
58 number.setMinHeight(25);
59 number.setMinWidth(25);
60 number.setStyle("-fx-text-fill: white; -fx-background-color: black;");
61 fig_group.getChildren().add(number);
62
63 // zone des armes et aptitudes
64 SimAptAndWeaponsVBox weapons_aptitudes_menu = new SimAptAndWeaponsVBox();
65 weapons_aptitudes_menu.setFigGroup(i, fig_name, fig_list.size());
66 weapons_aptitudes_menu_view.add(weapons_aptitudes_menu);
67
68 number.setOnAction(e ->
69 {
70 ControlleurSimu.makeWeaponsAndAptitudeZone(fig_list, weapons_aptitudes_menu);
71 });
72 }
73 else {
74 Label fig_name_label = new Label(fig_name);
75 fig_name_label.setStyle("-fx-padding: 0 5px 0 0");
76 fig_group.getChildren().add(fig_name_label);
77
78 Slider nb_of_defenders = new Slider(0, fig_list.size(),
79 Battle.getSelectedUnit(2).getAliveFigsOfAGroup(fig_name));
80 nb_of_defenders.setMajorTickUnit(1);
81 nb_of_defenders.setMinorTickCount(0);
82 nb_of_defenders.setSnapToTicks(true);
83 //nb_of_attackers.setShowTickMarks(true);
84 nb_of_defenders.setShowTickLabels(true);
85 //nb_of_attackers.setBlockIncrement(1);
86
87 fig_group.getChildren().add(nb_of_defenders);
88
89 nb_of_defenders.valueProperty().addListener((observable, oldValue, newValue) -> {
90 ControlleurSimu.AliveFigsChoice(2, newValue.intValue(), fig_name);
91 });
92 }
93
94
95 /* -- figurines d'un groupe -- */
96 for(Figurine fig : fig_list)
97 {
98 HBox one_fig_box = new HBox();
99 Image one_image;
100 if(fig.getHP() > 0) {
101 one_image = new Image("/images/android-fill.png");
102 }
103 else {
104 one_image = new Image("/images/android-line.png");
105 }
106 ImageView one_image_box = new ImageView();
107 one_image_box.setPreserveRatio(true);
108 //one_image_box.setFitHeight(24); // appeler une des deux méthodes de dimensionnement
109 one_image_box.setFitWidth(24);
110 one_image_box.setImage(one_image);
111 one_fig_box.getChildren().add(one_image_box);
112
113 if(column == 1) {
114 Label hp_label = new Label(fig.getHP() + " PV ");
115 one_fig_box.getChildren().add(hp_label);
116 }
117 else {
118 Label hp_label = new Label("PV:");
119 Spinner<Integer> spinner = new Spinner<>(0, fig.getHPMax(), fig.getHP());
120 spinner.setMaxWidth(55);
121 one_fig_box.getChildren().add(hp_label);
122 one_fig_box.getChildren().add(spinner);
123 one_fig_box.setStyle("-fx-padding: 0 3px 0 0;");
124
125 spinner.valueProperty().addListener((obs, oldValue, newValue) -> {
126 ControlleurSimu.hpUpdate(newValue, fig, one_image_box);
127 });
128 }
129
130 SimFigurinesVBox.setMargin(one_fig_box, new Insets(5));
131 fig_group.getChildren().add(one_fig_box);
132 }
133 SimFigurinesVBox.setMargin(fig_group, new Insets(3));
134
135 this.getChildren().add(fig_group);
136 }
137 }
138}
139
diff --git a/src/main/java/vue/simulation/SimHistogramme.java b/src/main/java/vue/simulation/SimHistogramme.java
new file mode 100644
index 0000000..519c90b
--- /dev/null
+++ b/src/main/java/vue/simulation/SimHistogramme.java
@@ -0,0 +1,101 @@
1package vue.simulation;
2import javafx.application.Application;
3import javafx.scene.Scene;
4import javafx.scene.chart.Axis;
5import javafx.scene.chart.BarChart;
6import javafx.scene.chart.CategoryAxis;
7import javafx.scene.chart.NumberAxis;
8import javafx.scene.chart.XYChart;
9import javafx.scene.layout.Pane;
10import javafx.scene.layout.Priority;
11import javafx.scene.layout.VBox;
12import javafx.stage.Stage;
13
14public class SimHistogramme extends Pane{
15 private Pane p;
16
17
18
19// public SimHistogramme() {
20// super();
21// }
22
23 public static void setHist(int[] tabdegat ,int[] tabmort, float degat_moyen ,float mort_moyen,Pane p) {
24 Axis<String> xAxis = new CategoryAxis();
25 xAxis.setLabel("nbr mort");
26
27 NumberAxis yAxis = new NumberAxis();
28 yAxis.setLabel("pourcentage");
29
30 Axis<String> xAxis2 = new CategoryAxis();
31 xAxis2.setLabel("nbr degat");
32
33 javafx.scene.chart.NumberAxis yAxis2 = new NumberAxis();
34 yAxis2.setLabel("pourcentage");
35
36 // Create a BarChart
37 BarChart<String, Number> barChart = new BarChart<String, Number>(xAxis, yAxis);
38 BarChart<String, Number> barChart2 = new BarChart<String, Number>(xAxis2, yAxis2);
39
40 // Series 1 - Data of 2014
41 XYChart.Series<String, Number> dataSeries1 = new XYChart.Series<String, Number>();
42 //dataSeries1.setName("mort moyen : "+mort_moyen);
43 for(int i=0;i<tabmort.length;i++) {
44 if(tabmort[i]!=0) {
45 dataSeries1.getData().add(new XYChart.Data<String, Number>(""+i , tabmort[i]/100));
46 }
47 }
48
49 //barChart.getData().add(dataSeries1);
50
51
52 // Series 1 - Data of 2014
53 XYChart.Series<String, Number> dataSeries2 = new XYChart.Series<String, Number>();
54 //dataSeries2.setName("degat moyen : "+degat_moyen);
55 for(int i=0;i<tabdegat.length;i++) {
56 if(tabdegat[i]!=0) {
57 dataSeries2.getData().add(new XYChart.Data<String, Number>(""+i , tabdegat[i]/100));
58 }
59 }
60
61 barChart.getData().add(dataSeries1);
62 barChart2.getData().add(dataSeries2);
63
64
65
66 VBox vbox = new VBox();
67 vbox.getChildren().add(barChart);
68 vbox.getChildren().add(barChart2);
69 barChart.maxWidthProperty().bind(p.widthProperty());
70 barChart2.maxWidthProperty().bind(p.widthProperty());
71 barChart2.prefHeight(150);
72 barChart.prefHeight(150);
73 barChart.lookupAll(".default-color0.chart-bar")
74 .forEach(n -> n.setStyle("-fx-bar-fill: red;"));
75 barChart2.lookupAll(".default-color0.chart-bar")
76 .forEach(n -> n.setStyle("-fx-bar-fill: green;"));
77
78
79 barChart.setMaxHeight(220);
80 barChart2.setMaxHeight(220);
81 barChart.prefHeight(200);
82 barChart.setLegendVisible(false);
83 barChart2.setLegendVisible(false);
84 barChart.setTitle("nbr mort moyen : "+mort_moyen);
85 barChart2.setTitle("nbr degat moyen : "+degat_moyen);
86 barChart2.prefHeight(200);
87 VBox.setVgrow(barChart, Priority.ALWAYS);
88 VBox.setVgrow(barChart2, Priority.ALWAYS);
89 //vbox.setSpacing(10);
90
91
92 p.getChildren().add(vbox);
93 }
94
95
96
97
98 //BarChart<String, Number> barChart = new BarChart<String, Number>(xAxis, yAxis);
99
100}
101
diff --git a/src/main/java/vue/simulation/SimUnitsVBox.java b/src/main/java/vue/simulation/SimUnitsVBox.java
new file mode 100644
index 0000000..df02f82
--- /dev/null
+++ b/src/main/java/vue/simulation/SimUnitsVBox.java
@@ -0,0 +1,65 @@
1package vue.simulation;
2
3import java.util.ArrayList;
4
5import application.Battle;
6import controlleur.ControlleurSimu;
7import javafx.scene.control.Button;
8import javafx.scene.layout.VBox;
9import modele.Unit;
10
11public class SimUnitsVBox extends VBox
12{
13 private ArrayList<Button> buttons = new ArrayList<Button>();
14 private ArrayList<SimFigurinesVBox> fig_boxes = new ArrayList<SimFigurinesVBox>();
15 private int column; // = 1 ou 2
16
17 public SimUnitsVBox(int col){
18 column = col;
19 this.setStyle("-fx-padding: 2px;");
20 }
21
22 // getters
23 public ArrayList<Button> getButtons(){
24 return buttons;
25 }
26 public ArrayList<SimFigurinesVBox> getFigBoxes(){
27 return fig_boxes;
28 }
29
30 // afficher les unités de la liste déroulée
31 public void setList(int num_list)
32 {
33 ArrayList<Unit> units = Battle.getSelectedList(num_list).getUnits();
34 for(int i = 0; i < units.size(); i++)
35 {
36 VBox one_unit = new VBox();
37
38 // chaque unité est un bouton pour dérouler des figurines
39 Button tmp_button = new Button(units.get(i).getName());
40 tmp_button.setMaxWidth(Double.MAX_VALUE);
41 one_unit.getChildren().add(tmp_button);
42 buttons.add(tmp_button);
43
44 // créer une zone de figurines par unité
45 SimFigurinesVBox one_fig_box = new SimFigurinesVBox(column, units.get(i));
46 one_unit.getChildren().add(one_fig_box);
47 fig_boxes.add(one_fig_box);
48
49 this.getChildren().add(one_unit);
50 }
51
52 /* -- activation des boutons pour dérouler les unités --*/
53 for(int i = 0; i < buttons.size(); i++)
54 {
55 final int j = i; // merci chatgpt pour le trick!
56 // java interdit à i et c d'être paramètres de la fonction lambda parce qu'ils changent à chaque itération
57 // on garantit que col et j seront constants (final) dans la méthode setOnAction
58
59 buttons.get(i).setOnAction(e ->
60 {
61 ControlleurSimu.selectAnUnit(this, column, j);
62 });
63 }
64 }
65}