| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 | 
							- namespace Caliburn.Micro.Core {
 
-     using System;
 
-     using System.Collections;
 
-     using System.Collections.Generic;
 
-     /// <summary>
 
-     /// A base class for various implementations of <see cref="IConductor"/>.
 
-     /// </summary>
 
-     /// <typeparam name="T">The type that is being conducted.</typeparam>
 
-     public abstract class ConductorBase<T> : Screen, IConductor, IParent<T> where T : class {
 
-         ICloseStrategy<T> closeStrategy;
 
-         /// <summary>
 
-         /// Gets or sets the close strategy.
 
-         /// </summary>
 
-         /// <value>The close strategy.</value>
 
-         public ICloseStrategy<T> CloseStrategy {
 
-             get { return closeStrategy ?? (closeStrategy = new DefaultCloseStrategy<T>()); }
 
-             set { closeStrategy = value; }
 
-         }
 
-         void IConductor.ActivateItem(object item) {
 
-             ActivateItem((T) item);
 
-         }
 
-         void IConductor.DeactivateItem(object item, bool close) {
 
-             DeactivateItem((T) item, close);
 
-         }
 
-         IEnumerable IParent.GetChildren() {
 
-             return GetChildren();
 
-         }
 
-         /// <summary>
 
-         /// Occurs when an activation request is processed.
 
-         /// </summary>
 
-         public virtual event EventHandler<ActivationProcessedEventArgs> ActivationProcessed = delegate { };
 
-         /// <summary>
 
-         /// Gets the children.
 
-         /// </summary>
 
-         /// <returns>The collection of children.</returns>
 
-         public abstract IEnumerable<T> GetChildren();
 
-         /// <summary>
 
-         /// Activates the specified item.
 
-         /// </summary>
 
-         /// <param name="item">The item to activate.</param>
 
-         public abstract void ActivateItem(T item);
 
-         /// <summary>
 
-         /// Deactivates the specified item.
 
-         /// </summary>
 
-         /// <param name="item">The item to close.</param>
 
-         /// <param name="close">Indicates whether or not to close the item after deactivating it.</param>
 
-         public abstract void DeactivateItem(T item, bool close);
 
-         /// <summary>
 
-         /// Called by a subclass when an activation needs processing.
 
-         /// </summary>
 
-         /// <param name="item">The item on which activation was attempted.</param>
 
-         /// <param name="success">if set to <c>true</c> activation was successful.</param>
 
-         protected virtual void OnActivationProcessed(T item, bool success) {
 
-             if (item == null) {
 
-                 return;
 
-             }
 
-             var handler = ActivationProcessed;
 
-             if (handler != null) {
 
-                 handler(this, new ActivationProcessedEventArgs
 
-                 {
 
-                     Item = item,
 
-                     Success = success
 
-                 });
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Ensures that an item is ready to be activated.
 
-         /// </summary>
 
-         /// <param name="newItem">The item that is about to be activated.</param>
 
-         /// <returns>The item to be activated.</returns>
 
-         protected virtual T EnsureItem(T newItem) {
 
-             var node = newItem as IChild;
 
-             if (node != null && node.Parent != this)
 
-                 node.Parent = this;
 
-             return newItem;
 
-         }
 
-     }
 
- }
 
 
  |