Archived
1

Corrected MVC Implementation

This commit is contained in:
Kim Wittenburg
2015-01-08 21:58:15 +01:00
parent ee13abb8e7
commit 72abd9bc39
5 changed files with 34 additions and 38 deletions

View File

@@ -21,38 +21,17 @@
/*!
@class MPExpressionStorage
@abstract An expression storage manages the contents of an expression view
and notifies it when the underlying expression changes.
@abstract An expression storage manages the contents of an expression view.
*/
@interface MPExpressionStorage : MPExpression
/*!
@property expressionView
@abstract The receiver's expression view.
@discussion The expression view is the view that displays the contents of an
expression storage. Normally you should not call the setter of
this property. It is automatically assigned when the <code>@link
//apple_ref/occ/instp/MPExpressionView/expressionStorage@/link</code>
property of the respective <code>@link
//apple_ref/occ/cl/MPExpressionView@/link</code> instance is set.
When this property is set the receiver assumes that the
displaying expression view has changed (regardless of wether the
actual value of the property changed or not). It then adapts to
the properties of the new expression view and discards the
current root layout.
*/
@property (nonatomic, weak) MPExpressionView *expressionView;
/*!
@property rootLayout
@abstract The receiver's root layout.
@discussion The root layout is the root node of the layout tree that draws
the receiver's contents. For more information see the
documentation on the <code>@link
the receiver's contents in an expression view. For more
information see the documentation on the <code>@link
//apple_ref/occ/cl/MPLayout@/link</code> class.
*/
@property (nonatomic, strong) MPExpressionLayout *rootLayout;

View File

@@ -37,14 +37,6 @@
}
- (void)setExpressionView:(MPExpressionView *)expressionView
{
_expressionView = expressionView;
self.rootLayout = [[MPExpressionLayout alloc] initWithExpression:self parent:nil];
self.rootLayout.flipped = expressionView.flipped;
}
- (void)changedElementsInRangePath:(MPRangePath *)rangePath
replacementLength:(NSUInteger)replacementLength
{
@@ -58,8 +50,6 @@
}
[current clearCacheInRange:rangePath.rangeAtLastIndex
replacementLength:replacementLength];
[self.expressionView invalidateIntrinsicContentSize];
self.expressionView.needsDisplay = YES;
}
@end

View File

@@ -348,7 +348,7 @@
{
// Setup the Expression Storage
MPExpressionStorage *expressionStorage = [[MPExpressionStorage alloc] init];
expressionStorage.expressionView = self;
expressionStorage.rootLayout.expressionView = self;
_expressionStorage = expressionStorage;
[self initializeButtons];
@@ -472,9 +472,9 @@
- (void)setExpressionStorage:(MPExpressionStorage *)expressionStorage
{
_expressionStorage.expressionView = nil;
_expressionStorage.rootLayout.expressionView = nil;
_expressionStorage = expressionStorage;;
_expressionStorage.expressionView = self;
_expressionStorage.rootLayout.expressionView = self;
[self invalidateIntrinsicContentSize];
}

View File

@@ -86,7 +86,7 @@
@class MPLayout, MPRangePath;
@class MPLayout, MPExpressionView, MPRangePath;
/*!
@@ -149,6 +149,21 @@
*/
/*!
@property expressionView
@abstract The receiver's expression view.
@discussion The expression view is the view in which the receivin
<code>MPLayout</code> instance draws itself into. Normally you
should not call the setter of this property. It is automatically
assigned when the <code>@link
//apple_ref/occ/instp/MPExpressionView/expressionStorage@/link</code>
property of the respective <code>@link
//apple_ref/occ/cl/MPExpressionView@/link</code> instance is set.
*/
@property (nonatomic, weak) MPExpressionView *expressionView;
/*!
@method font
@abstract Returns the receiver's context inferred font.

View File

@@ -8,6 +8,8 @@
#import "MPLayout.h"
#import "MPExpressionView.h"
#import "MPRangePath.h"
#import "NSIndexPath+MPAdditions.h"
@@ -54,6 +56,14 @@
#pragma mark Properties
- (void)setExpressionView:(MPExpressionView *)expressionView
{
self.flipped = expressionView.flipped;
[_cache removeAllObjects];
[self invalidate];
}
- (NSFont *)normalFontWithSize:(CGFloat)size
{
return [NSFont fontWithName:@"CMU Serif"
@@ -135,6 +145,8 @@
[_cache replaceObjectsInRange:range
withObjectsFromArray:placeholders];
[self invalidate];
[self.expressionView invalidateIntrinsicContentSize];
self.expressionView.needsDisplay = YES;
}