86 lines
2.9 KiB
Objective-C
86 lines
2.9 KiB
Objective-C
//
|
|
// MPFunctionLayout.m
|
|
// MathPad
|
|
//
|
|
// Created by Kim Wittenburg on 07.08.14.
|
|
// Copyright (c) 2014 Kim Wittenburg. All rights reserved.
|
|
//
|
|
|
|
#import "MPFunctionLayout.h"
|
|
#import "MPFunction.h"
|
|
#import "MPExpressionLayout.h"
|
|
|
|
#import "MPSumFunction.h"
|
|
#import "MPSumFunctionLayout.h"
|
|
|
|
@implementation MPFunctionLayout
|
|
|
|
#pragma mark Creation Methods
|
|
+ (MPFunctionLayout *)functionLayoutForFunctionAtIndexPath:(NSIndexPath *)path
|
|
inRootExpression:(MPExpression *)rootExpression
|
|
parent:(MPExpressionLayout *)parent
|
|
{
|
|
MPFunction *function = [rootExpression elementAtIndexPath:path];
|
|
Class class = [function class];
|
|
if (class == [MPSumFunction class]) {
|
|
return [[MPSumFunctionLayout alloc] initWithElementAtPath:path
|
|
inRootExpression:rootExpression
|
|
parent:parent];
|
|
}
|
|
return [[self alloc] initWithElementAtPath:path
|
|
inRootExpression:rootExpression
|
|
parent:parent];
|
|
}
|
|
|
|
- (instancetype)initWithElementAtPath:(NSIndexPath *)path
|
|
inRootExpression:(MPExpression *)rootExpression
|
|
parent:(MPLayout *)parent
|
|
{
|
|
self = [super initWithElementAtPath:path
|
|
inRootExpression:rootExpression
|
|
parent:parent];
|
|
if (self) {
|
|
_function = [rootExpression elementAtIndexPath:path];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
#pragma mark Cache Methods
|
|
- (CTLineRef)lineForPrivateCacheIndex:(NSUInteger)index
|
|
generator:(CTLineRef (^)())generator
|
|
{
|
|
NSUInteger actualIndex = self.function.numberOfChildren + index;
|
|
id (^actualGenerator)() = ^{
|
|
CTLineRef line = generator();
|
|
return CFBridgingRelease(line);
|
|
};
|
|
id lineObject = [self cachableObjectForIndex:actualIndex
|
|
generator:actualGenerator];
|
|
return (__bridge CTLineRef)(lineObject);
|
|
}
|
|
|
|
- (MPLayout *)childLayoutAtIndex:(NSUInteger)index
|
|
{
|
|
return [self cachableObjectForIndex:index generator:^id{
|
|
NSIndexPath *childPath = [self.function.indexPath indexPathByAddingIndex:index];
|
|
MPExpressionLayout *layout = [[MPExpressionLayout alloc] initWithElementAtPath:childPath
|
|
inRootExpression:self.function.rootExpression
|
|
parent:self];
|
|
layout.flipped = self.flipped;
|
|
layout.usesSmallSize = (index == 0 || index == 1) ? YES : self.usesSmallSize;
|
|
return layout;
|
|
}];
|
|
}
|
|
|
|
- (NSUInteger)indexOfChildBeforeChildAtIndex:(NSUInteger)index
|
|
{
|
|
return NSNotFound;
|
|
}
|
|
|
|
- (NSUInteger)indexOfChildAfterChildAtIndex:(NSUInteger)index
|
|
{
|
|
return NSNotFound;
|
|
}
|
|
|
|
@end
|