 	@availability(*,unavailable)
 	override var objectValue:AnyObject? {
 		willSet(v) {
-			precondition(v is WorkspaceNode, "Only `WorkspaceNode` type is acceptable.")
+			precondition(v == nil || v is WorkspaceNode, "Only `WorkspaceNode` type is acceptable.")
 		}
 //		get {
 //			

	override init() {
		super.init()
		
		menu.showInFinder.reaction	=	{ [unowned self] in
			let	fn	=	self.owner.outlineView.clickedNode
			let	sns	=	self.owner.outlineView.selectedNodes
			
			let	hasFocus		=	fn != nil
			let	hasSelection	=	sns.count > 0
			let	rootFocused		=	fn === self.repository!.root
			let	rootSelected	=	sns.filter({ n in n === self.repository!.root }).count > 0
			
			let	fu	=	self.owner.clickedURL
			let	sus	=	self.owner.selectedURLs
			let aus =   (fu == nil ? [] : [fu!]) + sus
			
			NSWorkspace.sharedWorkspace().activateFileViewerSelectingURLs(aus)
		}
		
		NSNotificationCenter.defaultCenter().addObserverForName(

///	MARK:
///	MARK:	InternalController

private struct Selection<T> {
	///	Selection that temporaily focused by mouse.
	let	hot:T?
	
	///	Selection that explicitly selected by mouse.
	let	cool:[T]
	
	///	`hot` + `cool`.
	var all:[T] {
		get {
			return	(hot == nil ? [] : [hot!]) + cool
		}
	}
}
private struct SelectionQuery {
	let	node:Selection<WorkspaceNode>
	let	URL:Selection<NSURL>
	
	let	rootHotSelection:Bool
	let	rootCoolSelection:Bool
//	let	rootAnySelection:Bool
	
	init(controller:WorkspaceNavigationViewController) {
		let	fn	=	controller.outlineView.clickedNode
		let	sns	=	controller.outlineView.selectedNodes
		
		let	fu	=	controller.clickedURL
		let	sus	=	controller.selectedURLs
		
		node	=	Selection(hot: fn, cool: sns)
		URL		=	Selection(hot: fu, cool: sus)
		
		let	r	=	controller._internalController.repository?.root
		
		rootHotSelection	=	node.hot === r
		rootCoolSelection	=	node.cool.filter({ n in n === r }).count > 0
//		rootAnySelection	=	rootHotSelection || rootCoolSelection
	}
}

private final class InternalController: NSObject {
	let menu			=	WorkspaceNavigationContextMenuController()
	var repository		=	nil as WorkspaceRepository?
