////////////////////////////////////////////////////////////////////////// public bool SaveUndoState(string Name) { IsDirty = true; string StrState = GetCurrentStateForUndo(); if (StrState == null) { return(false); } UndoPointer++; while (UndoStates.Count > UndoPointer) { UndoStates.RemoveAt(UndoStates.Count - 1); } try { System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(); byte[] OrigBuf = enc.GetBytes(StrState); byte[] CompBuf = WUtils.CompressBuffer(OrigBuf); UndoState State; if (CompBuf != null) { State = new UndoState(Name, CompBuf, true, OrigBuf.Length); } else { State = new UndoState(Name, OrigBuf, false, OrigBuf.Length); } UndoStates.Add(State); if (UndoStates.Count > MaxUndoLevel) { UndoStates.RemoveAt(0); UndoPointer--; } return(true); } catch { UndoPointer--; return(false); } }
////////////////////////////////////////////////////////////////////////// private string GetUndoState(int Pos) { if (Pos < 0 || Pos >= UndoStates.Count) { return(null); } UndoState State = UndoStates[Pos]; byte[] StrBuf; if (State.IsCompressed) { StrBuf = WUtils.DecompressBuffer(State.State, State.OrigSize); } else { StrBuf = State.State; } System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(); return(enc.GetString(StrBuf)); }