Topic: Add attribut "uuid" for .elmt file.
Bonjour,
Ces derniers jours les travaux ont portés:
Amélioration du code sur le switch du fond blanc en gris et vice versa des folios, les bordures et cartouches passent maintenant en gris comme le reste du schéma.
Les basic shapes, images une fois leur positions verrouillés ne sont plus déplaçables même avec le clavier.
Depuis quelques temps et plus tard suivant les OS, il est apparu que Qt n'enregistrait jamais dans le même ordre les attributs définitions des Eléments dans le XML à chaque lancement de Qet.
Une classe compare les attributs pour identifier si l’élément qui vient d’être posé sur le schéma existe déjà dans le projet, et s'il l'est, compare l'ensemble des attributs.
Pour des questions de rapidité cette méthode compare l'ensemble de la chaîne, si un attribut change de place l’élément est vu comme différent.
On à réfléchi avec Joshua à plusieurs solutions, dont le fait de passer de QDomdocument, à QXmlStreamReader , ou Sax mais il fallait revoir en profondeur une grosse partie du code et ça aurai pu prendre des mois....
La solution qui nous est apparue la plus facile : générer un identifiant unique (UUID) sur chaque élément de la collection par l'intermédiaire de l'éditeur d’élément (qui maintenant rajoute automatiquement ce champ à la sauvegarde).
Du code vient d’être ajouté pour comparer les éléments par ce seul attribut UUID, et non plus comme avant sur la chaîne entière d'attributs XML.
En principe sur de gros projets on devrait y voir une différence sur l'ajout d'un nouvel élément.
La collection officielle à été patchée pour rajouter ce nouveau attribut.
Je vous passe mon script bash, pour ceux sous gnu/linux qui veulent tagger leur collection personnelle (c'est pas parfait, mais ça a le mérite de fonctionner, je vais encore me faire tirer les oreilles par des plus barbus...). sed, uuidgen(paquet uuid-runtime) et find doivent d'abord être installés.
#!/bin/bash
# Add attribut "uuid" in all .elmt files.
find . -type f -name "*.elmt" -exec sh -c 'UUID="$(uuidgen | awk '"'"'{print toupper($0)}'"'"')" ; sed -i '"'"'s#\(\).*\(<names>\)#\1'"'"'"<uuid uuid=\"{$UUID}\"/>"'"'"'\2#'"'"' "{}"' \;
Il faut le mettre dans le répertoire élément et le rendre exécutable:
chmod +x elmt_gen_uuid.sh
puis le lancer en simple user par
./elmt_gen_uuid.sh
Voila c'est tout, faut laisser travailler la machine, ça m'a pris quelques minutes sur les 2500 éléments de la collection.
Ceux sous Windows, faudra vous débrouiller seul, je ne sais pas faire.(si mais avec Cygwin)
Enjoy!