18:45
L'export de données au format XML fonctionne enfin !
Après m'être cassé les dents pendant trois heures à boucler sur la liste des dossiers (affichée en hiérarchie mais stockée à plat), tenter d'analyser récursivement les dossiers parents pour savoir s'ils étaient déjà exportés, et m'appercevoir que je créais des objets orphelins, une approche radicalement différente a été décidée.
La boucle principale se fait désormais sur la copie des données et non plus sur la liste des dossiers affichés dans le ListView. Cela me donne accès à la récursivité. L'accès de la donnée à L'Item de la liste est assuré par le double lien mis en place entre la liste des dossiers et les objets :
Code : Tout sélectionner
// Double lien
Tool_Item.Data := Tool_Data;
Tool_Data.Tag := Integer(Tool_Item);
- Une analyse d'exportabilité est faite : si l'Item associé est coché, le dossier sera exporté avec ses données. Si l'Item n'est pas coché, l'analyse est lancée en récursif sur ses enfants dossiers jusqu'à ce que l'un soit exportable.
- Si le dossier est exportable, une copie est réalisée. Une boucle récursive sur ses enfants permet d'ajouter les enfants à leur parent en permettant de ne jamais perdre le lien parental.
- L'arbre des données réelles dont l'ancêtre est XV_RootData.
- L'arbre des données locales LV_ExportData, créé par duplication récursive de XV_RootData à l'ouverture de l'outil. Travailler avec une copie locale des données permet l'indépendance par rapport aux autres outils ouverts qui peuvent donc évoluer sans impacter l'export. Il est détruit lors de la fermeture.
- Et enfin, l'arbre des données d'export reconstruit à partir des données locales selon l'algorithme décrit plus haut. Cet arbre d'export est construit par duplication sélective lors de l'export et est ensuite immédiatement détruit après avoir été écrit sur disque.