public static void LogActiveDocument (bool transient) { if (switching) return; NavigationPoint point = GetNavPointForActiveDoc (); if (point == null) return; NavigationHistoryItem item = new NavigationHistoryItem (point); //if the current node's transient but has been around for a while, consider making it permanent if (Current == null || (currentIsTransient && DateTime.Now.Subtract (Current.Created).TotalMilliseconds > TRANSIENT_TIMEOUT)) { currentIsTransient = false; } //if the current point's transient, always replace it if (currentIsTransient) { //collapse down possible extra point in history NavigationHistoryItem backOne = history[-1]; if (backOne != null && point.ShouldReplace (backOne.NavigationPoint)) { // The new node is the same as the last permanent, so we can discard it history.RemoveCurrent (); currentIsTransient = false; item.Dispose (); } else { currentIsTransient = transient; history.ReplaceCurrent (item); } } //if the new point wants to replace the old one, let it else if (Current != null && !transient && point.ShouldReplace (Current.NavigationPoint)) { history.ReplaceCurrent (item); //but in this case, the point should not be transient -- unless the old point was, //but that's handled earlier currentIsTransient = false; } //final choice: append the the node //BUT only if the existing current node would not want to replace the new node else if (Current == null || !Current.NavigationPoint.ShouldReplace (point)) { history.AddPoint (item); currentIsTransient = transient; } else point.Dispose (); OnHistoryChanged (); }
public void Dispose() { navPoint.Dispose(); }