boîte de dialogue ad-hoc (méthode statique QFileDialog.getSaveFileName).
Le présent test sert à être sûr qu'on a bien un nom de fichier défini ; il faut en effet se
prémunir du cas où l'utilisateur a fermé la boîte de dialogue sans choisir de fichier
(voir point ).
À l'activation du bouton Nouveau, on commence par déselectionner la ligne
éventuellement sélectionnée dans la liste. Si une ligne était effectivement
sélectionnée, le signal selectionChanged est émis et la méthode
on_treeViewLivres_selectionChanged est appelée : dès lors, les champs de
saisie sont effacés et on n'a rien d'autre à faire. Oui, seulement… comme rien ne
garantit qu'une ligne était sélectionnée à l'activation du bouton, il est nécessaire
d'appeler effaceLivre explicitement.
À l'activation du bouton Sauvegarder, on commence par créer une nouvelle instance
de livre, en récupérant les données saisies dans les différents champs…
… ensuite, on teste si aucune ligne n'est sélectionnée dans la liste. Si oui, on sait
qu'on a un nouveau livre à ajouter ; on invoque la méthode ajouteLivre sur le
modèle en lui passant le nouveau livre ; ceci aura pour effet de notifier la vue et de
faire apparaître le livre dans la liste (mais il ne faut plus se soucier de cela !). Pour
aider l'utilisateur, on appelle on_pushButtonNouveau_clicked(), pour permettre
des saisies à la chaîne (c'est juste un choix de conception d'interface).
Au contraire, si une ligne est sélectionnée dans la liste, on sait que l'utilisateur est
en train de mettre à jour les données d'un livre existant ; on récupère l'indice du
livre sélectionné et on invoque remplaceLivre sur le modèle, avec cet indice et le
nouveau livre. Ceci aura pour effet de notifier la vue et rafraîchir le livre
sélectionné dans la liste (si, bien sûr, l'utilisateur a modifié le titre, l'auteur ou
l'éditeur de ce livre).
À l'activation du bouton Supprimer, on vérifie qu'on a bien un livre sélectionné ;
normalement, c'est le cas, car nous avons pris soin de désactiver le bouton si aucune
ligne n'est sélectionnée (voir on_treeViewLivres_selectionChanged) — mais
126
Le présent test sert à être sûr qu'on a bien un nom de fichier défini ; il faut en effet se
prémunir du cas où l'utilisateur a fermé la boîte de dialogue sans choisir de fichier
(voir point ).
À l'activation du bouton Nouveau, on commence par déselectionner la ligne
éventuellement sélectionnée dans la liste. Si une ligne était effectivement
sélectionnée, le signal selectionChanged est émis et la méthode
on_treeViewLivres_selectionChanged est appelée : dès lors, les champs de
saisie sont effacés et on n'a rien d'autre à faire. Oui, seulement… comme rien ne
garantit qu'une ligne était sélectionnée à l'activation du bouton, il est nécessaire
d'appeler effaceLivre explicitement.
À l'activation du bouton Sauvegarder, on commence par créer une nouvelle instance
de livre, en récupérant les données saisies dans les différents champs…
… ensuite, on teste si aucune ligne n'est sélectionnée dans la liste. Si oui, on sait
qu'on a un nouveau livre à ajouter ; on invoque la méthode ajouteLivre sur le
modèle en lui passant le nouveau livre ; ceci aura pour effet de notifier la vue et de
faire apparaître le livre dans la liste (mais il ne faut plus se soucier de cela !). Pour
aider l'utilisateur, on appelle on_pushButtonNouveau_clicked(), pour permettre
des saisies à la chaîne (c'est juste un choix de conception d'interface).
Au contraire, si une ligne est sélectionnée dans la liste, on sait que l'utilisateur est
en train de mettre à jour les données d'un livre existant ; on récupère l'indice du
livre sélectionné et on invoque remplaceLivre sur le modèle, avec cet indice et le
nouveau livre. Ceci aura pour effet de notifier la vue et rafraîchir le livre
sélectionné dans la liste (si, bien sûr, l'utilisateur a modifié le titre, l'auteur ou
l'éditeur de ce livre).
À l'activation du bouton Supprimer, on vérifie qu'on a bien un livre sélectionné ;
normalement, c'est le cas, car nous avons pris soin de désactiver le bouton si aucune
ligne n'est sélectionnée (voir on_treeViewLivres_selectionChanged) — mais
126
