XT4 utilise pour le moment 3 arbres de données.
1) L'arbre des commandes (XV_Commands) :
- Sa racine est de type 'Root', tous les autres Containers sont de type 'Group'.
- Il est affiché dans le Gestionnaire de commandes et la page Action du panneau d'édition de l'Agenda. Il n'est jamais importé, et n'est sauvé que pour du debug, alors intégralement.
- Sa racine est de type 'Root', ses descendants Container sont de type 'XD', et 'Ribbon' puis 'Menu' puis l'XD de la Barre.
- Il n'est jamais affiché ni importé, et est toujours sauvé intégralement.
- Sa racine est de type 'Root', ses descendants Container sont de type 'Tool' pour chaque outil puis 'Folder' en dessous.
- Il est affiché dans tous les outils, et peut être importé ou sauvé partiellement.
Pour le moment, XT4 gère les Containers affichés (XV_Commands et XV_Data) très simplement :
- Si le Container est de type 'Folder' alors il s'agit d'un dossier utilisateur, qui sera affiché dans les TreeView avec des icônes jaunes et sera renommables, effacable, copiable...
- Tous les autres Containers affichables sont affichés avec des icônes oranges et sont "read-only", il s'agit des Containers de type 'Group' et 'Tool'.
Il s'agit maintenant de rajouter des Containers techniques 'Tasks', 'Events' ou '2012-Wxx' en dessous des Containers 'Folder' de l'Agenda. Ils ne devront pas être visibles mais devront être exportés / importés avec leurs Containers 'Folder' parents.
Première idée : modifier le code pour ne pas afficher les Containers de type 'Technical'. Possible mais autant voir plus générique.
Seconde idée : rajouter une propriété <Visible=True> aux Dossiers utilisateurs et aux Groupes des commandes. Rejeté car 1) cela rendra invisible tous les dossiers créés dans les prototypes et 2) les vrais dossiers étant majoritaires, cela surchargera trop les données.
Troisième idée : rajouter une propriété <Hidden=True> à ces nouveaux Containers techniques. Aucun impact sur les données existantes, surcharge contenue, solution adoptée. (Afin d'économiser de l'espace, XT4 considère les propiétés <Boolean=Fasle> ou <Integer=0> ou <String=> comme jetables ou non sauvables. Bien sûr, à la lecture, ce sont ces valeurs par défaut qui sont attribuées si la propriété n'est pas trouvée. Il faut donc utiliser une propriété <QQchose=True> pour les nouveaux Containers.)
Les impacts finaux sont assez légers :
- La méthode qui constuit un TreeView à partir d'un arbre de donnée. Méthode utilisée pour tous les TreeViews d'XT4.
- Les méthodes d'export et d'import, il va falloir les forcer à "cocher" ces sous-dossiers invisibles afin de les traiter comme leurs parents.