Forums » Forum général »
difficile de supprimer un seul composant d'un CT_TNodeGroup : proposition de modification du comportement de la methode CT_TNodeGroup::setSuccessor()
Added by Théveny Frédéric over 10 years ago
Bonjour,
je cherche à supprimer un composant CT_TNodeGroup d’un CT_TTreeGroup et je ne vois pas comment faire simplement.
Exemple :
j’ai un rootNode qui est composé de 3 composants C1,C2 et C3.
la structure fait que je me retrouve avec cette représentation (ci dessous) :
rootNode -(component)-> C1 -(successor)-> C2 -(successor)-> C3
Je dispose bien d’une méthode removeComponent mais elle a le défaut de supprimer les autres composants récursivement (directement ou non via recursiveRemoveNode()). Ce qui fait que quand je supprime C2 avec rootNode.removeComponent(C2) alors il me supprime aussi C3, car il supprime les successeurs de C2.
Passer par C1.setSuccessor(C3) ne fonctionne pas non plus car setSuccessor() va supprimer les anciens sucesseurs du noeud avant d’ajouter le nouveau successeur et ici c’est les mêmes.
Je pensais sous classer pour surcharger la méthode mais les attributs permettant la gestion des liens sont privés (m_component, m_ancestor, _m_successor et m_complex) et l’absence d’accès à m_successor m’empeche de refaire les liens moi même.
La solution idéale serait que removeComponent() ne fasse que supprimer logiquement le noeud composant dans la liste :
- s’il est le dernier de la liste, alors il passe à NULL le successeur de nouveau dernier de liste
- s’il est le premier de liste, il met à jour les m_complex / m_rootNode concernés du rootnode et du nouveau premier de liste
- si le noeud supprimé contient des liaisons d’un autre type (branchaisons, composition) alors en effet, il peut les supprimer récursivement.
Une autre solution serait de transformer setSuccessor() en un accesseur simple et lui retirer sa fonction de suppression des noeuds qui le suivent. Ca oblige à gérer la liste à la main mais ça permet de supprimer un seul noeud dans la liste.
Replies (6)
RE: difficile de supprimer un seul composant d'un CT_TNodeGroup : proposition de modification du comportement de la methode CT_TNodeGroup::setSuccessor() - Added by Krebs Michaël over 10 years ago
J’ai fait un commit. Ça devrait régler ton problème. Appel la méthode removeComponent avec le deuxième paramètre à false.
RE: difficile de supprimer un seul composant d'un CT_TNodeGroup : proposition de modification du comportement de la methode CT_TNodeGroup::setSuccessor() - Added by Théveny Frédéric over 10 years ago
super merci !
je teste ça demain et je te fais un retour.
RE: difficile de supprimer un seul composant d'un CT_TNodeGroup : proposition de modification du comportement de la methode CT_TNodeGroup::setSuccessor() - Added by Théveny Frédéric over 10 years ago
Bonjour Michael
J’ai un petit problème de compilation suite à l’update :
fichier dm_vbomanager.cpp (25) : error: 'initializeOpenGLFunctions’ was not declared in this scope ⇒ fonction QT5 et je suis en QT4.8
RE: difficile de supprimer un seul composant d'un CT_TNodeGroup : proposition de modification du comportement de la methode CT_TNodeGroup::setSuccessor() - Added by Théveny Frédéric over 10 years ago
je viens de faire l’update et j’ai ce problème résiduel :
- gmainwindow.h (72) : computree/computreev3/ComputreeGui/view/MainView/gmainwindow.h:71: error: 'DM_VertexVBOManager’ does not name a type → rajout d’un #include “dm_vertexvbomanager.h” en tête de fichier
Sinon pas de soucis particulier concernant la MAJ. Je vais pouvoir utiliser tes corrections sur le CT_TTreeNode.
Merci à toi
Fred
RE: difficile de supprimer un seul composant d'un CT_TNodeGroup : proposition de modification du comportement de la methode CT_TNodeGroup::setSuccessor() - Added by Piboule Alexandre over 10 years ago
Je viens de faire un commit avec l’include manquant.
RE: difficile de supprimer un seul composant d'un CT_TNodeGroup : proposition de modification du comportement de la methode CT_TNodeGroup::setSuccessor() - Added by Théveny Frédéric over 10 years ago
La modif du removeComponent est parfaite : merci !