break;
}
FeaturePtr aFeat = std::dynamic_pointer_cast<ModelAPI_Feature>(anObject);
- // only groups can be moved to the end for now (#2451)
- if (aFeat.get() && aFeat->getKind() != "Group") {
- aCanMove = false;
- break;
+ // only groups can be moved to the end for now (#2451 old_id, #23105 tuleap id)
+ // and groups created by other groups (#34401)
+ if (aFeat.get()) {
+ std::string aKindOfFeature = aFeat->getKind();
+ if (aKindOfFeature != "Group" &&
+ aKindOfFeature != "GroupSubstraction" &&
+ aKindOfFeature != "GroupAddition" &&
+ aKindOfFeature != "GroupIntersection") {
+ aCanMove = false;
+ break;
+ }
}
+ // Check that the feature can be moved due to its dependencies
+ // i.e. Check that there are no features between the moved one and its destination
+ // with references to it
+ // Details on #21340 (old_id #660)
+
// 1. Get features placed between selected and current in the document
std::list<FeaturePtr> aFeaturesBetween = toCurrentFeatures(anObject);
// if aFeaturesBetween is empty it means wrong order or anObject is the current feature