示例#1
0
        //////////////////////////////////////////////////////////////////////////
        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);
            }
        }
示例#2
0
        //////////////////////////////////////////////////////////////////////////
        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));
        }