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();
- }
- }
- }
|