Cappuccino - CPSplitView fixed subnode size

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 
+4
source share
1 answer

I got a helpful suggestion here . Creating my own delegate that handles the automatic resizing of GridNode subframes according to the fixed value set when dragging the separator is all I had to do.

+2
source

Source: https://habr.com/ru/post/1483997/


All Articles