/// <summary> /// Determines if the specified presenter can be shut down. /// </summary> /// <param name="presenter">The presenter.</param> /// <param name="completed">Called when the shutdown action is finished.</param> protected virtual void CanShutdownPresenter(IPresenter presenter, Action <bool> completed) { var canShutdownPresenter = presenter.CanShutdown(); if (!canShutdownPresenter) { var custom = presenter as ISupportCustomShutdown; if (custom != null) { var model = custom.CreateShutdownModel(); if (model != null) { ExecuteShutdownModel( model, () => completed(custom.CanShutdown(model)) ); return; } } } completed(canShutdownPresenter); }
/// <summary> /// Determines whether this instance can shutdown. /// </summary> /// <returns> /// <c>true</c> if this instance can shutdown; otherwise, <c>false</c>. /// </returns> public override bool CanShutdown() { if (_currentPresenter != null) { return(_currentPresenter.CanShutdown()); } return(true); }
/// <summary> /// Called when shutdown attempted. /// </summary> /// <param name="rootModel">The root model.</param> /// <param name="view">The view.</param> /// <param name="handleShutdownModel">The handler for the shutdown model.</param> /// <param name="e">The <see cref="System.ComponentModel.CancelEventArgs"/> instance containing the event data.</param> protected virtual void OnShutdownAttempted(IPresenter rootModel, Window view, Action <ISubordinate, Action> handleShutdownModel, CancelEventArgs e) { if (_actuallyClosing || rootModel.CanShutdown()) { _actuallyClosing = false; return; } bool runningAsync = false; var custom = rootModel as ISupportCustomShutdown; if (custom != null && handleShutdownModel != null) { var shutdownModel = custom.CreateShutdownModel(); var shouldEnd = false; handleShutdownModel( shutdownModel, () => { var canShutdown = custom.CanShutdown(shutdownModel); if (runningAsync && canShutdown) { _actuallyClosing = true; view.Close(); } else { e.Cancel = !canShutdown; } shouldEnd = true; }); if (shouldEnd) { return; } } runningAsync = e.Cancel = true; }
/// <summary> /// Determines if the specified presenter can be shut down. /// </summary> /// <param name="presenter">The presenter.</param> /// <param name="completed">Called when the shutdown action is finished.</param> protected virtual void CanShutdownPresenter(IPresenter presenter, Action<bool> completed) { var canShutdownPresenter = presenter.CanShutdown(); if (!canShutdownPresenter) { var custom = presenter as ISupportCustomShutdown; if (custom != null) { var model = custom.CreateShutdownModel(); if (model != null) { ExecuteShutdownModel( model, () => completed(custom.CanShutdown(model)) ); return; } } } completed(canShutdownPresenter); }
/// <summary> /// Called when shutdown attempted. /// </summary> /// <param name="rootModel">The root model.</param> /// <param name="view">The view.</param> /// <param name="handleShutdownModel">The handler for the shutdown model.</param> /// <param name="e">The <see cref="System.ComponentModel.CancelEventArgs"/> instance containing the event data.</param> protected virtual void OnShutdownAttempted(IPresenter rootModel, Window view, Action<ISubordinate, Action> handleShutdownModel, CancelEventArgs e) { if (_actuallyClosing || rootModel.CanShutdown()) { _actuallyClosing = false; return; } bool runningAsync = false; var custom = rootModel as ISupportCustomShutdown; if (custom != null && handleShutdownModel != null) { var shutdownModel = custom.CreateShutdownModel(); var shouldEnd = false; handleShutdownModel( shutdownModel, () => { var canShutdown = custom.CanShutdown(shutdownModel); if (runningAsync && canShutdown) { _actuallyClosing = true; view.Close(); } else e.Cancel = !canShutdown; shouldEnd = true; }); if (shouldEnd) return; } runningAsync = e.Cancel = true; }