File: src\Framework\MS\Internal\Documents\IParentUndoUnit.cs
Project: wpf\PresentationFramework.csproj (PresentationFramework)
//---------------------------------------------------------------------------
//
// <copyright file=IParentUndoUnit.cs company=Microsoft>
//    Copyright (C) Microsoft Corporation.  All rights reserved.
// </copyright>
// 
//
// Description: 
//
//              See spec at http://avalon/uis/Stock%20Services/Undo%20spec.htm
// 
// History:  
//  07/16/2003 : psarrett   Created
//
//---------------------------------------------------------------------------
 
using System.Collections;
 
using System;
 
namespace MS.Internal.Documents
{
    /// <summary>
    /// IParentUndoUnit interface
    /// </summary>
    
    internal interface IParentUndoUnit : IUndoUnit
    {
        //------------------------------------------------------
        //
        //  Constructors
        //
        //------------------------------------------------------
 
        //------------------------------------------------------
        //
        //  Public Methods
        //
        //------------------------------------------------------
 
        #region Public Methods
 
        /// <summary>
        /// Clear all units from the IParentUndoUnit.  These units aren't "undone", they're simply deleted.
        /// </summary>
        void Clear();
 
        /// <summary>
        /// Open a new IParentUndoUnit inside the deepest open IParentUndoUnit.
        /// IParentUndoUnits can nest arbitrarily deep.
        /// </summary>
        /// <param name="newUnit">IParentUndoUnit to open</param>
        void Open(IParentUndoUnit newUnit);
 
        /// <summary>
        /// Closes the open IParentUndoUnit within the IUndoService
        /// </summary>
        void Close(UndoCloseAction closeAction);
 
        /// <summary>
        /// Closes the given open IParentUndoUnit within the current container or its child
        /// containers.  If closingUnit == null, IParentUndoUnit's currently open unit (if any)
        /// is closed instead.  
        /// </summary>
        void Close(IParentUndoUnit closingUnit, UndoCloseAction closeAction);
 
        /// <summary>
        /// Adds the given unit to the deepest open IParentUndoUnit.  Since newUnit is not
        /// necessarily an IParentUndoUnit, newUnit is not opened. 
        /// </summary>
        /// <param name="newUnit">IUndoUnit to add</param>
        void Add(IUndoUnit newUnit);
 
        /// <summary>
        /// Notifies the last parent undo unit in the collection that a new unit has been added
        /// to the collection.  The undo manager or containing parent undo unit calls this
        /// function on its most recently added parent undo unit to notify it that the context
        /// has changed and no further modifications should be made to it.
        /// </summary>
        void OnNextAdd();
 
        /// <summary>
        /// Notifies the last parent undo unit in the collection that the unit immediately
        /// after it has been discarded.  The undo manager or containing parent undo unit calls this
        /// function on its most recently added parent undo unit to notify it that it should unlock.
        /// its last unit to allow it to be changed again.
        /// </summary>
        void OnNextDiscard();
 
        #endregion Public Methods        
 
        //------------------------------------------------------
        //
        //  Public Properties
        //
        //------------------------------------------------------
 
        #region Public Properties
 
        /// <summary>
        /// Last unit added to the IParentUndoUnit
        /// </summary>
        IUndoUnit LastUnit
        {
            get;
        }
 
        /// <summary>
        /// Readonly access to the unit currently open at the top level of this IParentUndoUnit
        /// </summary>
        IParentUndoUnit OpenedUnit
        {
            get;
        }
 
        /// <summary>
        /// text description of this unit
        /// </summary>
        string Description
        {
            get;
            set;
        }
 
        /// <summary>
        /// Whether or not the unit can accept new changes
        /// </summary>
        bool Locked
        {
            get;
        }
 
        /// <summary>
        /// IUndoService or IParentUndoUnit that contains this IParentUndoUnit.  This is a backpointer
        /// only-- setting this value does not change the IParentUndoUnit's actual container.
        /// </summary>
        object Container
        {
            get;
            set;
        }
 
        #endregion Public Properties
    }
}