class TaskTreeNode(object):
    """
    View controller for an individual node of the task tree.
    """
    def __init__(self, task):
        self.task = task
        self.task.listeners.append(self)
        
        self.tree_node = NodeView()
        self.tree_node.title = self.task.title
        self.tree_node.subtitle = self.task.subtitle
        self.tree_node.expandable = not callable(task)
        for child in self.task.children:
            self.task_did_append_child(self.task, child)
    
    def task_subtitle_did_change(self, task):
        self.tree_node.subtitle = self.task.subtitle
    
    def task_did_complete(self, task):
        self.task.listeners.remove(self)
    
    def task_did_append_child(self, task, child):
        child_ttnode = TaskTreeNode(child)
        self.tree_node.append_child(child_ttnode.tree_node)
    
    def task_did_clear_children(self, task):
        self.tree_node.children = []
 def __init__(self, task):
     self.task = task
     self.task.listeners.append(self)
     
     self.tree_node = NodeView()
     self.tree_node.title = self.task.title
     self.tree_node.subtitle = self.task.subtitle
     self.tree_node.expandable = not callable(task)
     for child in self.task.children:
         self.task_did_append_child(self.task, child)