3. Édition du modèle
Pour que cette application soit réellement utile, une fonctionnalité manque à l'appel : la
modification du contenu. Pour rendre cela possible, il faut remplacer l'affichage de
texte par des composants d'édition : TextField pour le texte libre, ComboBox pour
choisir le genre dans une liste prédéfinie, SpinBox pour déterminer l'année.
TextField { // Au lieu de Text
id: fieldTitle
text: … bookModel.get(booksList.currentRow).title …
Layout.minimumWidth: window.width * 0.6
}
// …
La liste des genres est stockée dans un modèle à part. Pour retrouver l'identifiant d'un
genre dans la liste depuis son nom, il est commode de créer une fonction attachée à ce
modèle : findGenreIndexByName. Celle-ci opère en itérant sur tous les éléments du
modèle et en les comparant avec le texte donné.
ListModel {
id: genreModel
ListElement { text: "(None)" }
// …
function findGenreIndexByName(name) {
for(var i = 0; i < count; i++) {
if(name === get(i).text) {
return i;
}
}
return -1;
}
}
Note > Il serait assez simple de proposer à l'utilisateur de changer cette liste de
genres : par exemple, en ouvrant une nouvelle fenêtre depuis un menu, dont le
contenu serait assez similaire à la fenêtre principale.
Finalement vient la partie la plus intéressante : les modifications effectives de la
bibliothèque. L'utilisateur peut effectuer trois actions, donc trois boutons dans
l'interface : l'un pour enregistrer les modifications du livre courant ; un autre pour créer
un nouveau livre (le livre courant devient vide) ; le dernier pour supprimer le livre
actuellement sélectionné. Ainsi, les modifications effectuées dans les champs d'édition
349
Pour que cette application soit réellement utile, une fonctionnalité manque à l'appel : la
modification du contenu. Pour rendre cela possible, il faut remplacer l'affichage de
texte par des composants d'édition : TextField pour le texte libre, ComboBox pour
choisir le genre dans une liste prédéfinie, SpinBox pour déterminer l'année.
TextField { // Au lieu de Text
id: fieldTitle
text: … bookModel.get(booksList.currentRow).title …
Layout.minimumWidth: window.width * 0.6
}
// …
La liste des genres est stockée dans un modèle à part. Pour retrouver l'identifiant d'un
genre dans la liste depuis son nom, il est commode de créer une fonction attachée à ce
modèle : findGenreIndexByName. Celle-ci opère en itérant sur tous les éléments du
modèle et en les comparant avec le texte donné.
ListModel {
id: genreModel
ListElement { text: "(None)" }
// …
function findGenreIndexByName(name) {
for(var i = 0; i < count; i++) {
if(name === get(i).text) {
return i;
}
}
return -1;
}
}
Note > Il serait assez simple de proposer à l'utilisateur de changer cette liste de
genres : par exemple, en ouvrant une nouvelle fenêtre depuis un menu, dont le
contenu serait assez similaire à la fenêtre principale.
Finalement vient la partie la plus intéressante : les modifications effectives de la
bibliothèque. L'utilisateur peut effectuer trois actions, donc trois boutons dans
l'interface : l'un pour enregistrer les modifications du livre courant ; un autre pour créer
un nouveau livre (le livre courant devient vide) ; le dernier pour supprimer le livre
actuellement sélectionné. Ainsi, les modifications effectuées dans les champs d'édition
349
