Whenever you check a box, check to see if all its siblings are checked. If so, check the parent. (And run the check again on that level.)
To do that... well, your NSOutlineView has a data source, right? Something that's telling it what to display? Well, in the method called by the checkbox when it's clicked (whatever you set that up to be), get the parent object behind the row which was clicked, and then update its status. If you don't have a direct reference to the checkbox from the model, you can use -[NSOutlineView parentForItem:]
to find it.
Hopefully that gives you enough to get started. If it doesn't, then you'll need to ask a more specific question, detailing exactly which parts you're having trouble with.
BJ Homer
2009-06-02 20:21:51