ailleurs pour déterminer s'il y a lieu de mettre un message de confirmation avant la
sortie de l'application (closeEvent) ou avant l'ouverture d'un fichier
(on_actionOuvrir_triggered).
On a ajouté ce test pour gérer l'absence de sélection dans la liste, ce qui arrive
lorsque la liste est vide, lors de l'ouverture d'un fichier ou si l'utilisateur fait
Ctrl+clic sur la ligne sélectionnée ; dans ce cas, on efface les champs de détail et on
rend le bouton Supprimer inactivable.
Comme expliqué plus haut, le fait de mettre la valeur minimum admise dans les
widgets QAbstractSpinBox a pour effet d'afficher la valeur spéciale assignée (voir
constructeur __init__) et ainsi d'effacer la valeur.
Lors de la tentative de fermeture, si l'attribut fichierNonEnregistre est Faux,
cela signifie que le modèle est déjà enregistré sur fichier : on accepte l'événement et
l'application se termine sans autre forme de procès ; dans le cas contraire, on
demande confirmation à l'utilisateur.
Lors de la demande d'ouverture d'un fichier (menu Fichier > Ouvrir…), si l'attribut
fichierNonEnregistre est Vrai, on demande confirmation à l'utilisateur car cette
action va faire perdre les données non enregistrées. Si l'utilisateur se ravise, on sort
de la méthode par return ; sinon, on continue.
Une fois le fichier choisi par l'utilisateur, on lit ce fichier et on crée un nouveau
modèle via notre méthode statique ModeleTableBiblio.creeDepuisFichier.
Comme il s'agit d'un nouveau modèle, il faut le déclarer à la vue et refaire la
connexion du signal selectionChanged. On mémorise le nom du fichier dans
nomFichierBiblio et on appelle modificationAEnregistrer(False) pour
afficher ce nom dans la barre de titre.
Note > Comme on est en Python, on n'a pas à se soucier du modèle existant avant
l'ouverture du fichier : la zone mémoire utilisée sera récupérée automatiquement.
Lors de la demande d'enregistrement (menu Fichier > Enregistrer), si on n'a pas
encore de nom de fichier, on demande à l'utilisateur d'en fournir un en utilisant la
125
Précédent

- 126/494

Suivant