I have a GridNode class that inherits from CPSplitView , which is used to wrap objects of type GridELement . Each successive partition of a GridNode divides it into two new GridNodes (containing GridElements that resize with their parents).
Another class - GridToolbar inherits from GridELement . It should basically have the same behavior as the GridELement , although the size should not change automatically (as the container is resized), but only after the user drags the delimiter.
The problem is that even if I install AutoresizingMask in a certain direction (since the toolbars can be both vertical and horizontal), they will still be changed in both of them.
Any suggestions on what I can do to prevent this from happening?
source GridNode.j :
@implementation GridNode : CPSplitView { } - (id)initWithFrame:(CGRect)aFrame { self = [super initWithFrame:aFrame]; if(self) { [self setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable ]; [self setBackgroundColor:[CPColor colorWithHexString:"EEEEEE"]] } return self; } - (void)split:(id)sender { var parent = [sender superview]; var gridNode = [ [GridNode alloc] initWithFrame:CGRectMake( 0, 0, CGRectGetWidth([parent bounds]), CGRectGetHeight([parent bounds]) ) ]; [gridNode setVertical:(CGRectGetWidth([gridNode bounds]) >= CGRectGetHeight([gridNode bounds]) ? YES : NO)] var element = [ [GridElement alloc] initWithFrame:CGRectMake( 0, 0, CGRectGetWidth([parent bounds]), CGRectGetHeight([parent bounds]) ) ]; [self replaceSubview:parent with:gridNode]; [parent setBtnTarget:gridNode]; [element setBtnTarget:gridNode]; [gridNode addSubview:parent]; [gridNode addSubview:element]; } - (void)addBar:(id)sender { var parent = [sender superview]; var gridNode = [ [GridNode alloc] initWithFrame:CGRectMake( 0, 0, CGRectGetWidth([parent bounds]), CGRectGetHeight([parent bounds]) ) ]; [gridNode setVertical:(CGRectGetWidth([gridNode bounds]) >= CGRectGetHeight([gridNode bounds]) ? YES : NO)] var isVertical = [gridNode isVertical]; var toolbar = [ [GridToolbar alloc] initWithFrame:CGRectMake( 0, 0, CGRectGetWidth([parent bounds]), CGRectGetHeight([parent bounds]) ) vertical: isVertical ]; [parent setBounds:CGRectMake( isVertical ? 32 : 0, isVertical ? 0 : 32, CGRectGetWidth([gridNode bounds]) - (isVertical ? 32 : 0), CGRectGetHeight([parent bounds]) - (isVertical ? 0 : 32) )]; [self replaceSubview:parent with:gridNode]; [parent setBtnTarget:gridNode]; [toolbar setBtnTarget:gridNode]; [gridNode addSubview:toolbar]; [gridNode addSubview:parent]; } @end
source GridElement.j :
@implementation GridElement : CPView { CPButton btnSPlit; CPButton btnToolbar; } - (id)initWithFrame:(CGRect)aFrame { self = [super initWithFrame:aFrame] if (self) { [self setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable ]; [self setBackgroundColor:[CPColor colorWithCalibratedRed:Math.random() green:Math.random() blue:Math.random() alpha:1.0]]; btnSPlit = [ [CPButton alloc] initWithFrame:CGRectMake(0,0,128,24) ]; [btnSPlit setAutoresizingMask:CPViewMinXMargin | CPViewMaxXMargin | CPViewMinYMargin | CPViewMaxYMargin]; [btnSPlit setFrameOrigin:CGPointMake((CGRectGetWidth([self bounds]) - CGRectGetWidth([btnSPlit frame])) / 2.0, (CGRectGetHeight([self bounds]) - CGRectGetHeight([btnSPlit frame])) / 2.0 - 15)]; [btnSPlit setTitle:"split me!"]; [btnSPlit setAction:@selector(split:)]; [self addSubview:btnSPlit] btnToolbar = [ [CPButton alloc] initWithFrame:CGRectMake(0,0,128,24) ]; [btnToolbar setAutoresizingMask:CPViewMinXMargin | CPViewMaxXMargin | CPViewMinYMargin | CPViewMaxYMargin]; [btnToolbar setFrameOrigin:CGPointMake((CGRectGetWidth([self bounds]) - CGRectGetWidth([btnToolbar frame])) / 2.0, (CGRectGetHeight([self bounds]) - CGRectGetHeight([btnToolbar frame])) / 2.0 + 15)]; [btnToolbar setTitle:"split me!"]; [btnToolbar setAction:@selector(addBar:)]; [self addSubview:btnToolbar] } return self; } - (void)setBtnTarget:(id)aTarget { [btnSPlit setTarget:aTarget]; [btnSPlit setTitle:"split "+aTarget._UID] [btnToolbar setTarget:aTarget]; [btnToolbar setTitle:"toolbar "+aTarget._UID] } @end
source GridToolbar.j :
@implementation GridToolbar : GridElement { CPButtonBar btnBar; } - (id)initWithFrame:(CGRect)aFrame vertical:(BOOL)isVertical { self = [super initWithFrame:CGRectMake( 0,0, isVertical == NO ? aFrame.size.width : 32, isVertical == YES ? aFrame.size.height : 32 )] if(self) { isVertical == YES ? [self setAutoresizingMask:CPViewWidthSizable] : [self setAutoresizingMask:CPViewHeightSizable]; [self setBackgroundColor:[CPColor blackColor]]; btnBar = [ [CPButtonBar alloc] initWithFrame:CGRectMake( 0,0, CGRectGetWidth([self bounds]), CGRectGetHeight([self bounds]) ) ]; } return self; } @end