//
//  MPFunctionLayout.h
//  MathPad
//
//  Created by Kim Wittenburg on 07.08.14.
//  Copyright (c) 2014 Kim Wittenburg. All rights reserved.
//

@import Cocoa;
#import "MPLayout.h"

@interface MPFunctionLayout : MPLayout

+ (MPFunctionLayout *)functionLayoutForFunctionAtIndexPath:(NSIndexPath *)path
                                          inRootExpression:(MPExpression *)rootExpression
                                                    parent:(MPExpressionLayout *)parent;

@property (readonly, nonatomic, weak) MPFunction *function;

@end

@interface MPFunctionLayout (MPSubclassOverride)

#pragma mark Cache Methods
- (CTLineRef)lineForPrivateCacheIndex:(NSUInteger)index
                            generator:(CTLineRef (^)())generator;

// Should also implement accessor method for special function type:
// - (MPCustomFunction *)customFunction
// {
//      return (MPCustomFunction *)self.function;
// }

#pragma mark Size and Drawing Methods
- (NSPoint)offsetOfChildLayoutAtIndex:(NSUInteger)index; // To be implemented
- (NSIndexPath *)indexPathForMousePoint:(NSPoint)point; // To be implemented
- (NSRect)generateBounds; // To be implemented
- (void)drawAtPoint:(NSPoint)point; // To be implemented

@end