Système de filtrage + modification du système d'ajout

master
Louis PERRET 3 years ago
parent 52c993278b
commit 0d737334c6

@ -14,10 +14,10 @@
<left> <left>
<VBox alignment="CENTER"> <VBox alignment="CENTER">
<ComboBox/> <ComboBox fx:id="listeFiltrage"/>
<ListView fx:id="listeProduit"/> <ListView fx:id="listeProduit"/>
<Button text="Ajouter habit" onAction="#lancerFenetreAjoutHabit"/> <Button text="Ajouter habit" onAction="#ajouterHabit"/>
<Button text="Ajouter parfum" onAction="#lancerFenetreAjoutParfum"/> <Button text="Ajouter parfum" onAction="#ajouterParfum"/>
<Button text="Supprimer l'objet sélectionné" onAction="#supprimerSelectionne"/> <Button text="Supprimer l'objet sélectionné" onAction="#supprimerSelectionne"/>
</VBox> </VBox>
</left> </left>

@ -39,8 +39,8 @@ public class Boutique implements Serializable {
getSupport().fireIndexedPropertyChange(PROP_AJOUT, index, null, produit); getSupport().fireIndexedPropertyChange(PROP_AJOUT, index, null, produit);
} }
public void ajouterParfum(String nom, int prix, List<String> fragrances){ public void ajouterParfum(String nom, int prix){
Produit produit = new Parfum(nom, prix, fragrances); Produit produit = new Parfum(nom, prix);
produits.add(produit); produits.add(produit);
int index = produits.size() - 1; int index = produits.size() - 1;
getSupport().fireIndexedPropertyChange(PROP_AJOUT, index, null, produit); getSupport().fireIndexedPropertyChange(PROP_AJOUT, index, null, produit);

@ -17,17 +17,18 @@ import launch.Launcher;
import view.cellules.CelluleProduit; import view.cellules.CelluleProduit;
import view.uc.UCDetailHabit; import view.uc.UCDetailHabit;
import view.uc.UCDetailParfum; import view.uc.UCDetailParfum;
import view_modele.BoutiqueVM; import view_modele.*;
import view_modele.HabitVM;
import view_modele.ParfumVM;
import view_modele.ProduitVM;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays;
public class MainWindow { public class MainWindow {
@FXML @FXML
public VBox layoutDetail; private VBox layoutDetail;
@FXML
private ComboBox listeFiltrage;
@FXML @FXML
private ListView<ProduitVM> listeProduit; private ListView<ProduitVM> listeProduit;
@ -50,7 +51,9 @@ public class MainWindow {
new Alert(Alert.AlertType.ERROR, "Erreur", ButtonType.OK).show(); new Alert(Alert.AlertType.ERROR, "Erreur", ButtonType.OK).show();
} }
listeProduit.setItems(boutiqueVM.getListeProduits()); listeFiltrage.setItems(Filtre.getFiltres());
listeFiltrage.getSelectionModel().selectedItemProperty().addListener(__ -> setFiltre());
listeProduit.setItems(boutiqueVM.getListeFiltre());
listeProduit.setCellFactory((__) -> new CelluleProduit()); listeProduit.setCellFactory((__) -> new CelluleProduit());
listeProduit.getSelectionModel().selectedItemProperty().addListener((__, oldV, newV) -> { listeProduit.getSelectionModel().selectedItemProperty().addListener((__, oldV, newV) -> {
if(oldV != null){ if(oldV != null){
@ -74,7 +77,21 @@ public class MainWindow {
}); });
} }
private void setFiltre() {
boutiqueVM.filtrer((Filtre)listeFiltrage.getSelectionModel().getSelectedItem());
}
@FXML
private void ajouterHabit(){
boutiqueVM.ajouterHabit("Nouvel habit", 0);
}
@FXML @FXML
private void ajouterParfum(){
boutiqueVM.ajouterParfum("Nouvel parfum", 0);
}
/* @FXML
private void lancerFenetreAjoutParfum(){ private void lancerFenetreAjoutParfum(){
Stage secondStage = new Stage(); Stage secondStage = new Stage();
secondStage.initOwner(listeProduit.getScene().getWindow()); secondStage.initOwner(listeProduit.getScene().getWindow());
@ -124,7 +141,7 @@ public class MainWindow {
} }
return controlleur; return controlleur;
} }*/
@FXML @FXML
private void supprimerSelectionne(){ private void supprimerSelectionne(){

@ -13,6 +13,7 @@ public class CelluleProduit extends ListCell<ProduitVM> {
} }
else{ else{
textProperty().unbind(); textProperty().unbind();
setText("");
} }
} }
} }

@ -10,6 +10,7 @@ import javafx.beans.property.ReadOnlyListProperty;
import javafx.beans.property.SimpleListProperty; import javafx.beans.property.SimpleListProperty;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.collections.transformation.FilteredList;
import java.beans.IndexedPropertyChangeEvent; import java.beans.IndexedPropertyChangeEvent;
import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeEvent;
@ -33,6 +34,12 @@ public class BoutiqueVM implements PropertyChangeListener {
public ReadOnlyListProperty<ProduitVM> listeProduitsProperty() { return listeProduits; } public ReadOnlyListProperty<ProduitVM> listeProduitsProperty() { return listeProduits; }
public void setListeProduits(ObservableList<ProduitVM> listeProduits) { this.listeProduits.set(listeProduits); } public void setListeProduits(ObservableList<ProduitVM> listeProduits) { this.listeProduits.set(listeProduits); }
private FilteredList<ProduitVM> listeFiltre = new FilteredList<>(produitsObs, p -> true);
public FilteredList<ProduitVM> getListeFiltre() {
return listeFiltre;
}
public BoutiqueVM(){ public BoutiqueVM(){
chargeur = new SimpleChargeur(); chargeur = new SimpleChargeur();
sauveur = new SimpleSauveur(); sauveur = new SimpleSauveur();
@ -65,8 +72,8 @@ public class BoutiqueVM implements PropertyChangeListener {
return produit; return produit;
} }
public void ajouterParfum(String nom, int prix, List<String> fragrances){ public void ajouterParfum(String nom, int prix){
modele.ajouterParfum(nom, prix, fragrances); modele.ajouterParfum(nom, prix);
} }
public void ajouterHabit(String nom, int prix){ public void ajouterHabit(String nom, int prix){
@ -84,7 +91,7 @@ public class BoutiqueVM implements PropertyChangeListener {
produitsObs.add(((IndexedPropertyChangeEvent)evt).getIndex(), creerProduitVM((Produit)evt.getNewValue())); produitsObs.add(((IndexedPropertyChangeEvent)evt).getIndex(), creerProduitVM((Produit)evt.getNewValue()));
break; break;
case Boutique.PROP_SUPPRESSION: case Boutique.PROP_SUPPRESSION:
produitsObs.remove(creerProduitVM((Produit)evt.getNewValue())); produitsObs.remove(creerProduitVM((Produit)evt.getOldValue()));
break; break;
} }
} }
@ -92,4 +99,12 @@ public class BoutiqueVM implements PropertyChangeListener {
public void sauver() throws IOException { public void sauver() throws IOException {
sauveur.sauver(modele, NOMFICHIER); sauveur.sauver(modele, NOMFICHIER);
} }
public void filtrer(Filtre filtre){
switch (filtre){
case TOUS -> listeFiltre.setPredicate(p -> true);
case HABIT -> listeFiltre.setPredicate(p -> p instanceof HabitVM);
case PARFUM -> listeFiltre.setPredicate(p -> p instanceof ParfumVM);
}
}
} }

@ -0,0 +1,21 @@
package view_modele;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
public enum Filtre {
TOUS,
HABIT,
PARFUM;
public static ObservableList<Filtre> getFiltres(){
ObservableList<Filtre> ans = FXCollections.observableArrayList();
for(var filtre : Filtre.values()){
ans.add(filtre);
}
return ans;
}
}

@ -83,5 +83,9 @@ public class HabitVM extends ProduitVM {
return ans; return ans;
} }
@Override
public boolean equals(Object obj){
return super.equals(obj);
}
} }

@ -44,4 +44,9 @@ public class ParfumVM extends ProduitVM {
case Parfum.PROP_SUPPRESSION_FRAGRANCE -> fragrancesObs.remove((String)evt.getOldValue()); case Parfum.PROP_SUPPRESSION_FRAGRANCE -> fragrancesObs.remove((String)evt.getOldValue());
} }
} }
@Override
public boolean equals(Object obj){
return super.equals(obj);
}
} }

Loading…
Cancel
Save