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