//
//  PWTreeControllerNode.h
//  PWTreeControllerDemo
//
//  Created by Frank Illenberger on 04.03.06.
//  Copyright 2006 ProjectWizards, Melle, Germany. 
//

#import <Cocoa/Cocoa.h>

@class PWTreeController;

@interface PWTreeControllerNode : NSObject 
{	
	@public
	PWTreeController 		*treeController;
	id						observedObject;
	NSMutableArray			*subNodes;
	PWTreeControllerNode	*parentNode;
	NSMutableArray			*filteredSubNodes;
	BOOL					isLeaf;
	BOOL					determinedIsLeafValue;
	BOOL					needsResort;
	BOOL					isObservingSubNodes;
	BOOL					isObservingLeafState;
	BOOL					isObservingAttributes;
}

- (id)initWithTreeController:(PWTreeController *)controller observedObject:(id)object parentNode:(PWTreeControllerNode *)parent;
- (NSArray *)subNodes;
- (PWTreeControllerNode *)parentNode;
- (NSArray *)filteredSubNodes;
- (NSArray *)arrangedSubNodes;
- (BOOL)isLeaf;
- (id)observedObject;
- (void)setNeedsResort:(BOOL)needs;
- (void)prune;
- (void)createAllSubNodes;
- (void)addAttributeObservers:(NSArray *)observers recurse:(BOOL)recurse;
- (void)removeAttributeObservers:(NSArray *)observers recurse:(BOOL)recurse;
- (int) depth;
@end
