Information on last child is added to the Dump() method + fixed a problem of lost last child tree node on removal (detach) operation.
Test case for issue CR24645
}
if(Father()->HasLast()) {
- if (Handle(TDataStd_TreeNode)::DownCast(this) == Father()->Last()) {
- if(HasPrevious()) {
- Father()->SetLast(Previous());
- }
- else Father()->SetLast(bid);
- }
+ Father()->SetLast(bid);
}
SetFather(bid);
anOS<<" First=";
if (!myFirst->Label().IsNull()) myFirst->Label().EntryDump(anOS);
}
+ if (myLast) {
+ anOS<<" Last=";
+ if (!myLast->Label().IsNull()) myLast->Label().EntryDump(anOS);
+ }
anOS<<endl;
return anOS;
}
--- /dev/null
+puts "=========="
+puts "OCC24645"
+puts "=========="
+puts ""
+###################################################
+# Pointer to the last is wrong for a tree node
+###################################################
+
+NewDocument D
+UndoLimit D 1000
+
+NewCommand D
+SetNode D 0:1
+
+NewCommand D
+AppendNode D 0:1 0:1:1
+NewCommand D
+AppendNode D 0:1 0:1:2
+NewCommand D
+AppendNode D 0:1 0:1:3
+NewCommand D
+AppendNode D 0:1 0:1:4
+
+NewCommand D
+AppendNode D 0:1 0:1:5
+
+if { [regexp "Last=0:1:5" [XDumpDF D] ] == 1 } {
+ puts "OK : Last node is good"
+} else {
+ puts "Error : Last node is bad"
+}
+puts ""
+
+DetachNode D 0:1:3
+DetachNode D 0:1:4
+
+NewCommand D
+Undo D
+
+if { [regexp "Last" [XDumpDF D] ] != 1 } {
+ puts "OK : Last node is not defined"
+} else {
+ puts "Error : Last node is bad"
+}
+puts ""