def LayoutChildren( self, dc, children, parent, x,y,w,h, hot_map, depth=0, node_sum=None ):
        """Layout the set of children in the given rectangle
        
        node_sum -- if provided, we are a recursive call that already has sizes and sorting,
            so skip those operations
        """
        if node_sum is None:
            nodes = [ (self.adapter.value(node,parent),node) for node in children ]
            nodes.sort(key=operator.itemgetter(0))
            total = self.adapter.children_sum( children,parent )
        else:
            nodes = children
            total = node_sum
        if total:
            if self.square_style and len(nodes) > 5:
                # new handling to make parents with large numbers of parents a little less 
                # "sliced" looking (i.e. more square)
                (head_sum,head),(tail_sum,tail) = split_by_value( total, nodes )
                if head and tail:
                    # split into two sub-boxes and render each...
                    head_coord,tail_coord = split_box( head_sum/float(total), x,y,w,h )
                    if head_coord:
                        self.LayoutChildren( 
                            dc, head, parent, head_coord[0],head_coord[1],head_coord[2],head_coord[3],
                            hot_map, depth,
                            node_sum = head_sum,
                        )
                    if tail_coord and coord_bigger_than_padding( tail_coord, self.padding+self.margin ):
                        self.LayoutChildren( 
                            dc, tail, parent, tail_coord[0],tail_coord[1],tail_coord[2],tail_coord[3],
                            hot_map, depth,
                            node_sum = tail_sum,
                        )
                    return 
                        
            (firstSize,firstNode) = nodes[-1]
            fraction = firstSize/float(total)
            head_coord,tail_coord = split_box( firstSize/float(total), x,y,w,h )
            if head_coord:
                self.DrawBox( 
                    dc, firstNode, head_coord[0],head_coord[1],head_coord[2],head_coord[3], 
                    hot_map, depth+1 
                )
            else:
                return # no other node will show up as non-0 either
                
            if len(nodes) > 1 and tail_coord and coord_bigger_than_padding( tail_coord, self.padding+self.margin ):
                self.LayoutChildren( 
                    dc, nodes[:-1], parent, 
                    tail_coord[0],tail_coord[1],tail_coord[2],tail_coord[3], 
                    hot_map, depth,
                    node_sum = total - firstSize,
                )
Layout the set of children in the given rectangle
        
        node_sum -- if provided, we are a recursive call that already has sizes and sorting,
            so skip those operations