diff --git a/tp2/source.bin b/tp2/source.bin index ff520a9..12590b8 100644 Binary files a/tp2/source.bin and b/tp2/source.bin differ diff --git a/tp2/src/modele/metier/ManagerOiseau.java b/tp2/src/modele/metier/ManagerOiseau.java index ce723fb..b767614 100644 --- a/tp2/src/modele/metier/ManagerOiseau.java +++ b/tp2/src/modele/metier/ManagerOiseau.java @@ -31,6 +31,10 @@ public class ManagerOiseau { public static final String PROP_DATE_DU_JOUR = "DateDuJour"; + public static final String SUPPRESSION_OISEAU = "Oiseau_supprime"; + + public static final String AJOUT_OISEAU = "Oiseau_ajoute"; + public ManagerOiseau() { dateDuJour = LocalDate.now(); oiseaux = new ArrayList<>(); @@ -49,11 +53,16 @@ public class ManagerOiseau { } public void addOiseau(String nom, int age, String couleurAiles){ - oiseaux.add(factoryOiseau.creerOiseau(nom, age, couleurAiles)); + Oiseau oiseau = factoryOiseau.creerOiseau(nom, age, couleurAiles); + oiseaux.add(oiseau); + int index = oiseaux.size() - 1; // donc l'index d'ajout est nbOiseau - 1 (évite les index out of the bound) + support.fireIndexedPropertyChange(AJOUT_OISEAU, index, null, oiseau); // j'ajoute à la fin donc la oldValue est à null car y'avait pas d'oiseau avant à cet index là } public void addOiseau(Oiseau oiseau){ - oiseaux.add(oiseau); + oiseaux.add(oiseau); // j'ajoute à la fin + int index = oiseaux.size() - 1; // donc l'index d'ajout est nbOiseau - 1 (évite les index out of the bound) + support.fireIndexedPropertyChange(AJOUT_OISEAU, index, null, oiseau); // j'ajoute à la fin donc la oldValue est à null car y'avait pas d'oiseau avant à cet index là } public void addListener(PropertyChangeListener listener){ @@ -65,7 +74,9 @@ public class ManagerOiseau { } public void supprimerOiseau(Oiseau oiseau) { - oiseaux.remove(oiseau); + int index = oiseaux.indexOf(oiseau); + oiseaux.remove(index); + support.fireIndexedPropertyChange(SUPPRESSION_OISEAU, index, oiseau, null); } public LocalDate getDateDuJour() { diff --git a/tp2/src/modele/metier/oiseaux/Oiseau.java b/tp2/src/modele/metier/oiseaux/Oiseau.java index 13f46e5..a304e7f 100644 --- a/tp2/src/modele/metier/oiseaux/Oiseau.java +++ b/tp2/src/modele/metier/oiseaux/Oiseau.java @@ -1,7 +1,5 @@ package modele.metier.oiseaux; -import com.sun.webkit.LoadListenerClient; -import javafx.beans.property.*; import modele.metier.etat.Affame; import modele.metier.etat.Decede; import modele.metier.etat.Etat; @@ -10,10 +8,8 @@ import modele.metier.etat.Rassasie; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.io.Serializable; -import java.sql.Array; import java.time.LocalDate; import java.time.temporal.ChronoUnit; -import java.util.ArrayList; public class Oiseau implements Serializable { diff --git a/tp2/src/viewmodel/ManagerOiseauVM.java b/tp2/src/viewmodel/ManagerOiseauVM.java index f5ef354..9b4b24e 100644 --- a/tp2/src/viewmodel/ManagerOiseauVM.java +++ b/tp2/src/viewmodel/ManagerOiseauVM.java @@ -10,6 +10,7 @@ import javafx.collections.ObservableList; import modele.metier.ManagerOiseau; import modele.metier.oiseaux.Oiseau; +import java.beans.IndexedPropertyChangeEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.IOException; @@ -30,7 +31,7 @@ public class ManagerOiseauVM implements PropertyChangeListener { public void setOiseauCourant(OiseauVM oiseauCourant) { this.oiseauCourant.set(oiseauCourant); } - private ObservableList oiseauxObs = FXCollections.observableArrayList(); + private ObservableList oiseauxObs = FXCollections.observableArrayList(); // envoie notif quand un des élémentscha private ListProperty listeOiseaux = new SimpleListProperty<>(oiseauxObs); public ObservableList getListeOiseaux() { return listeOiseaux.get(); } public ListProperty listeOiseauxProperty() { return listeOiseaux; } @@ -53,6 +54,7 @@ public class ManagerOiseauVM implements PropertyChangeListener { for(Oiseau oiseau : modele.getOiseaux()){ oiseauxObs.add(new OiseauVM(oiseau)); + //oiseauxObs.add(new OiseauVM(oiseau.getNom(), oiseau.getAge(), oiseau.getCouleurAiles())); // pb de référence si je fais ça } setDateDuJour(modele.getDateDuJour()); modele.addListener(this); @@ -63,24 +65,25 @@ public class ManagerOiseauVM implements PropertyChangeListener { } public void addOiseau(String nom, int age, String couleurAiles){ - OiseauVM oiseauVM = new OiseauVM(nom, age, couleurAiles); - Oiseau oiseau = oiseauVM.getModele(); - modele.addOiseau(oiseau.getNom(), oiseau.getAge(), oiseau.getCouleurAiles()); - oiseauxObs.add(oiseauVM); - + modele.addOiseau(nom, age, couleurAiles); } public void supprimerOiseau(OiseauVM oiseau) { modele.supprimerOiseau(oiseau.getModele()); - oiseauxObs.remove(oiseau); } @Override public void propertyChange(PropertyChangeEvent evt) { switch (evt.getPropertyName()){ - case ManagerOiseau.PROP_DATE_DU_JOUR: + case ManagerOiseau.PROP_DATE_DU_JOUR: // date du jour qui change setDateDuJour((LocalDate) evt.getNewValue()); break; + case ManagerOiseau.SUPPRESSION_OISEAU: // supprimer un oiseau + oiseauxObs.remove(((IndexedPropertyChangeEvent) evt).getIndex()); + break; + case ManagerOiseau.AJOUT_OISEAU: // ajout d'un oiseau + oiseauxObs.add(((IndexedPropertyChangeEvent) evt).getIndex(), new OiseauVM((Oiseau)evt.getNewValue())); + break; } } diff --git a/tp2/src/viewmodel/OiseauVM.java b/tp2/src/viewmodel/OiseauVM.java index 63f3b8f..5327e0a 100644 --- a/tp2/src/viewmodel/OiseauVM.java +++ b/tp2/src/viewmodel/OiseauVM.java @@ -40,12 +40,13 @@ public class OiseauVM implements PropertyChangeListener { public OiseauVM(Oiseau modele) { this.modele = modele; + // première initialisation des propriétés setNom(modele.getNom()); setAge(modele.getAge()); setCouleurAiles(modele.getCouleurAiles()); setEtat(modele.getEtat()); setDateDernierRepas(modele.getDateDernierRepas()); - modele.ajouterListener(this); + modele.ajouterListener(this); // écoute les modifications de son oiseau nom.addListener((__,___,newV) -> modele.setNom(newV)); } diff --git a/tp2/src/vues/MainWindow.java b/tp2/src/vues/MainWindow.java index cd1ccd6..8661a80 100644 --- a/tp2/src/vues/MainWindow.java +++ b/tp2/src/vues/MainWindow.java @@ -67,8 +67,6 @@ public class MainWindow { dateDernierRepas.textProperty().bind(Bindings.concat("Date du dernier repas : ", newV.dateDernierRepasProperty().asString())); boutonTuerOiseau.setDisable(false); } - - }); } @@ -80,14 +78,12 @@ public class MainWindow { @FXML private void ajouterOiseau() throws IOException { Scene scene = new Scene(FXMLLoader.load(getClass().getResource("/vues/AjouterOiseau.fxml"))); - Stage secondStage = new Stage(); + Stage secondStage = new Stage(); // stage de ma nouvelle fenêtre Stage stage = (Stage)ajouterOiseau.getScene().getWindow(); - secondStage.initOwner(stage); + secondStage.initOwner(stage); // set sa fenêtre parent secondStage.setScene(scene); - secondStage.initModality(Modality.WINDOW_MODAL); - + secondStage.initModality(Modality.WINDOW_MODAL); // préciser le type de fenêtre qu'on veut afficher, ici une fenêtre modale secondStage.show(); - } @FXML