| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 | 
							- namespace Caliburn.Micro.Core {
 
-     using System;
 
-     /// <summary>
 
-     /// A base implementation of <see cref = "IScreen" />.
 
-     /// </summary>
 
-     public class Screen : ViewAware, IScreen, IChild {
 
-         static readonly ILog Log = LogManager.GetLog(typeof (Screen));
 
-         bool isActive;
 
-         bool isInitialized;
 
-         object parent;
 
-         string displayName;
 
-         /// <summary>
 
-         /// Creates an instance of the screen.
 
-         /// </summary>
 
-         public Screen() {
 
-             displayName = GetType().FullName;
 
-         }
 
-         /// <summary>
 
-         /// Gets or Sets the Parent <see cref = "IConductor" />
 
-         /// </summary>
 
-         public virtual object Parent {
 
-             get { return parent; }
 
-             set {
 
-                 parent = value;
 
-                 NotifyOfPropertyChange("Parent");
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Gets or Sets the Display Name
 
-         /// </summary>
 
-         public virtual string DisplayName {
 
-             get { return displayName; }
 
-             set {
 
-                 displayName = value;
 
-                 NotifyOfPropertyChange("DisplayName");
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Indicates whether or not this instance is currently active.
 
-         /// Virtualized in order to help with document oriented view models.
 
-         /// </summary>
 
-         public virtual bool IsActive {
 
-             get { return isActive; }
 
-             private set {
 
-                 isActive = value;
 
-                 NotifyOfPropertyChange("IsActive");
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Indicates whether or not this instance is currently initialized.
 
-         /// Virtualized in order to help with document oriented view models.
 
-         /// </summary>
 
-         public virtual bool IsInitialized {
 
-             get { return isInitialized; }
 
-             private set {
 
-                 isInitialized = value;
 
-                 NotifyOfPropertyChange("IsInitialized");
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Raised after activation occurs.
 
-         /// </summary>
 
-         public virtual event EventHandler<ActivationEventArgs> Activated = delegate { };
 
-         /// <summary>
 
-         /// Raised before deactivation.
 
-         /// </summary>
 
-         public virtual event EventHandler<DeactivationEventArgs> AttemptingDeactivation = delegate { };
 
-         /// <summary>
 
-         /// Raised after deactivation.
 
-         /// </summary>
 
-         public virtual event EventHandler<DeactivationEventArgs> Deactivated = delegate { };
 
-         void IActivate.Activate() {
 
-             if (IsActive) {
 
-                 return;
 
-             }
 
-             var initialized = false;
 
-             if (!IsInitialized) {
 
-                 IsInitialized = initialized = true;
 
-                 OnInitialize();
 
-             }
 
-             IsActive = true;
 
-             Log.Info("Activating {0}.", this);
 
-             OnActivate();
 
-             var handler = Activated;
 
-             if (handler != null) {
 
-                 handler(this, new ActivationEventArgs
 
-                 {
 
-                     WasInitialized = initialized
 
-                 });
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Called when initializing.
 
-         /// </summary>
 
-         protected virtual void OnInitialize() {}
 
-         /// <summary>
 
-         /// Called when activating.
 
-         /// </summary>
 
-         protected virtual void OnActivate() {}
 
-         void IDeactivate.Deactivate(bool close) {
 
-             if (IsActive || (IsInitialized && close)) {
 
-                 var attemptingDeactivationHandler = AttemptingDeactivation;
 
-                 if (attemptingDeactivationHandler != null) {
 
-                     attemptingDeactivationHandler(this, new DeactivationEventArgs
 
-                     {
 
-                         WasClosed = close
 
-                     });
 
-                 }
 
-                 IsActive = false;
 
-                 Log.Info("Deactivating {0}.", this);
 
-                 OnDeactivate(close);
 
-                 var deactivatedHandler = Deactivated;
 
-                 if (deactivatedHandler != null) {
 
-                     deactivatedHandler(this, new DeactivationEventArgs
 
-                     {
 
-                         WasClosed = close
 
-                     });
 
-                 }
 
-                 if (close) {
 
-                     Views.Clear();
 
-                     Log.Info("Closed {0}.", this);
 
-                 }
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Called when deactivating.
 
-         /// </summary>
 
-         /// <param name = "close">Inidicates whether this instance will be closed.</param>
 
-         protected virtual void OnDeactivate(bool close) {}
 
-         /// <summary>
 
-         /// Called to check whether or not this instance can close.
 
-         /// </summary>
 
-         /// <param name = "callback">The implementor calls this action with the result of the close check.</param>
 
-         public virtual void CanClose(Action<bool> callback) {
 
-             callback(true);
 
-         }
 
-         /// <summary>
 
-         /// Tries to close this instance by asking its Parent to initiate shutdown or by asking its corresponding view to close.
 
-         /// Also provides an opportunity to pass a dialog result to it's corresponding view.
 
-         /// </summary>
 
-         /// <param name="dialogResult">The dialog result.</param>
 
-         public virtual void TryClose(bool? dialogResult = null) {
 
-             PlatformProvider.Current.GetViewCloseAction(this, Views.Values, dialogResult).OnUIThread();
 
-         }
 
-     }
 
- }
 
 
  |