Revision: 28835 http://sourceforge.net/p/bibdesk/svn/28835 Author: hofman Date: 2024-03-11 15:39:03 +0000 (Mon, 11 Mar 2024) Log Message: ----------- remember constraints for condition views
Modified Paths: -------------- trunk/bibdesk/BDSKConditionController.h trunk/bibdesk/BDSKConditionController.m trunk/bibdesk/BDSKFilterController.h trunk/bibdesk/BDSKFilterController.m trunk/bibdesk/Base.lproj/BDSKCondition.xib Modified: trunk/bibdesk/BDSKConditionController.h =================================================================== --- trunk/bibdesk/BDSKConditionController.h 2024-03-11 14:55:24 UTC (rev 28834) +++ trunk/bibdesk/BDSKConditionController.h 2024-03-11 15:39:03 UTC (rev 28835) @@ -94,6 +94,7 @@ @property (nonatomic, strong) IBOutlet NSView *valueView; @property (nonatomic, strong) IBOutlet NSButton *addButton; @property (nonatomic, strong) IBOutlet NSButton *removeButton; +@property (nonatomic, strong) IBOutlet NSLayoutConstraint *heightConstraint; @property (nonatomic, strong) IBOutlet NSLayoutConstraint *comparisonWidthConstraint; @property (nonatomic, strong) IBOutlet NSLayoutConstraint *valueWidthConstraint; @property (nonatomic, strong) IBOutlet NSLayoutConstraint *stringvalueWidthConstraint; Modified: trunk/bibdesk/BDSKConditionController.m =================================================================== --- trunk/bibdesk/BDSKConditionController.m 2024-03-11 14:55:24 UTC (rev 28834) +++ trunk/bibdesk/BDSKConditionController.m 2024-03-11 15:39:03 UTC (rev 28835) @@ -61,7 +61,7 @@ @implementation BDSKConditionController -@synthesize objectController, keyComboBox, comparisonPopUp, attachmentComparisonPopUp, dateComparisonPopUp, valueTextField, countTextField, numberTextField, andNumberTextField, dateTextField, toDateTextField, agoText, periodPopUp, booleanButton, triStateButton, ratingButton, colorWell, comparisonView, valueView, addButton, removeButton, comparisonWidthConstraint, valueWidthConstraint, stringvalueWidthConstraint, filterController, keys; +@synthesize objectController, keyComboBox, comparisonPopUp, attachmentComparisonPopUp, dateComparisonPopUp, valueTextField, countTextField, numberTextField, andNumberTextField, dateTextField, toDateTextField, agoText, periodPopUp, booleanButton, triStateButton, ratingButton, colorWell, comparisonView, valueView, addButton, removeButton, heightConstraint, comparisonWidthConstraint, valueWidthConstraint, stringvalueWidthConstraint, filterController, keys; @dynamic condition; + (void)initialize Modified: trunk/bibdesk/BDSKFilterController.h =================================================================== --- trunk/bibdesk/BDSKFilterController.h 2024-03-11 14:55:24 UTC (rev 28834) +++ trunk/bibdesk/BDSKFilterController.h 2024-03-11 15:39:03 UTC (rev 28835) @@ -44,6 +44,7 @@ @interface BDSKFilterController : NSWindowController <NSTouchBarDelegate> { NSView *conditionsView; NSLayoutConstraint *widthConstraint; + NSMutableArray *verticalConstraints; NSButton *okButton; NSButton *cancelButton; NSMutableArray *conditionControllers; Modified: trunk/bibdesk/BDSKFilterController.m =================================================================== --- trunk/bibdesk/BDSKFilterController.m 2024-03-11 14:55:24 UTC (rev 28834) +++ trunk/bibdesk/BDSKFilterController.m 2024-03-11 15:39:03 UTC (rev 28835) @@ -41,8 +41,6 @@ #import "NSWindowController_BDSKExtensions.h" #import "NSInvocation_BDSKExtensions.h" #import "BDSKTouchBarButtonGroup.h" -#import "NSView_BDSKExtensions.h" -#import "NSLayoutConstraint_BDSKExtensions.h" #define MAX_HEIGHT 320.0 #define SCROLLVIEW_MARGIN 8.0 @@ -50,9 +48,9 @@ #define BDSKTouchBarItemIdentifierButtons @"edu.ucsd.mmccrack.bibdesk.touchbar-item.buttons" @interface BDSKFilterController (BDSKPrivate) -- (void)insertConditionView:(NSView *)view atIndex:(NSUInteger)idx; +- (void)insertConditionView:(BDSKConditionController *)aConditionController atIndex:(NSUInteger)idx; - (void)addConditionViews:(NSArray *)views; -- (void)removeConditionView:(NSView *)view; +- (void)removeConditionView:(BDSKConditionController *)aConditionController; @end @implementation BDSKFilterController @@ -145,7 +143,7 @@ [conditionControllers insertObject:newController atIndex:idx]; [newController setFilterController:self]; - [self insertConditionView:[newController view] atIndex:idx]; + [self insertConditionView:newController atIndex:idx]; } - (void)removeConditionController:(BDSKConditionController *)aConditionController { @@ -159,7 +157,7 @@ [[[self undoManager] prepareWithInvocationTarget:self] insertObject:aConditionController inConditionControllersAtIndex:idx]; [aConditionController setFilterController:nil]; - [self removeConditionView:[aConditionController view]]; + [self removeConditionView:aConditionController]; [conditionControllers removeObject:aConditionController]; } @@ -185,36 +183,36 @@ #pragma mark ConditionsView layout -- (void)insertConditionView:(NSView *)view atIndex:(NSUInteger)idx{ +- (void)insertConditionView:(BDSKConditionController *)aConditionController atIndex:(NSUInteger)idx{ + NSView *view = [aConditionController view]; NSArray *subviews = [conditionsView subviews]; NSView *prevView = idx == 0 ? nil : [subviews objectAtIndex:idx - 1]; NSView *nextView = idx == [subviews count] ? nil : [subviews objectAtIndex:idx]; - NSLayoutConstraint *heightConstraint = [view constraintWithFirstItem:view firstAttribute:NSLayoutAttributeHeight]; + NSLayoutConstraint *heightConstraint = [aConditionController heightConstraint]; CGFloat height = [heightConstraint constant]; [heightConstraint setConstant:0.0]; [conditionsView addSubview:view positioned:prevView ? NSWindowAbove : NSWindowBelow relativeTo:prevView]; - - if (nextView) { - NSLayoutConstraint *topConstraint = [conditionsView constraintWithFirstItem:nextView firstAttribute:NSLayoutAttributeTop]; - if (topConstraint) - [topConstraint setActive:NO]; - } else if (prevView) { - NSLayoutConstraint *bottomConstraint = [conditionsView constraintWithSecondItem:prevView secondAttribute:NSLayoutAttributeBottom]; - if (bottomConstraint) - [bottomConstraint setActive:NO]; + if (nextView || prevView) { + [[verticalConstraints objectAtIndex:idx] setActive:NO]; + [verticalConstraints removeObjectAtIndex:idx]; } + NSLayoutConstraint *constraint = nil; [[[view leadingAnchor] constraintEqualToAnchor:[conditionsView leadingAnchor]] setActive:YES]; [[[conditionsView trailingAnchor] constraintEqualToAnchor:[view trailingAnchor]] setActive:YES]; + if (nextView) + constraint = [[nextView topAnchor] constraintEqualToAnchor:[view bottomAnchor]]; + else + constraint = [[conditionsView bottomAnchor] constraintEqualToAnchor:[view bottomAnchor]]; + [constraint setActive:YES]; + [verticalConstraints insertObject:constraint atIndex:idx]; if (prevView) - [[[view topAnchor] constraintEqualToAnchor:[prevView bottomAnchor]] setActive:YES]; + constraint = [[view topAnchor] constraintEqualToAnchor:[prevView bottomAnchor]]; else - [[[view topAnchor] constraintEqualToAnchor:[conditionsView topAnchor]] setActive:YES]; - if (nextView) - [[[nextView topAnchor] constraintEqualToAnchor:[view bottomAnchor]] setActive:YES]; - else - [[[conditionsView bottomAnchor] constraintEqualToAnchor:[view bottomAnchor]] setActive:YES]; + constraint = [[view topAnchor] constraintEqualToAnchor:[conditionsView topAnchor]]; + [constraint setActive:YES]; + [verticalConstraints insertObject:constraint atIndex:idx]; [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){ [[heightConstraint animator] setConstant:height]; @@ -224,22 +222,31 @@ } - (void)addConditionViews:(NSArray *)views { + verticalConstraints = [[NSMutableArray alloc] init]; NSView *prevView = nil; + NSLayoutConstraint *constraint; for (NSView *view in views) { [conditionsView addSubview:view]; [[[view leadingAnchor] constraintEqualToAnchor:[conditionsView leadingAnchor]] setActive:YES]; [[[conditionsView trailingAnchor] constraintEqualToAnchor:[view trailingAnchor]] setActive:YES]; + if (prevView) - [[[view topAnchor] constraintEqualToAnchor:[prevView bottomAnchor]] setActive:YES]; + constraint = [[view topAnchor] constraintEqualToAnchor:[prevView bottomAnchor]]; else - [[[view topAnchor] constraintEqualToAnchor:[conditionsView topAnchor]] setActive:YES]; + constraint = [[view topAnchor] constraintEqualToAnchor:[conditionsView topAnchor]]; + [constraint setActive:YES]; + [verticalConstraints addObject:constraint]; prevView = view; } - if (prevView) - [[[conditionsView bottomAnchor] constraintEqualToAnchor:[prevView bottomAnchor]] setActive:YES]; + if (prevView) { + constraint = [[conditionsView bottomAnchor] constraintEqualToAnchor:[prevView bottomAnchor]]; + [constraint setActive:YES]; + [verticalConstraints addObject:constraint]; + } } -- (void)removeConditionView:(NSView *)view { +- (void)removeConditionView:(BDSKConditionController *)aConditionController { + NSView *view = [aConditionController view]; NSArray *subviews = [conditionsView subviews]; NSUInteger idx = [subviews indexOfObjectIdenticalTo:view]; @@ -246,7 +253,7 @@ if (idx != NSNotFound) { NSView *prevView = idx == 0 ? nil : [subviews objectAtIndex:idx - 1]; NSView *nextView = idx + 1 == [subviews count] ? nil : [subviews objectAtIndex:idx + 1]; - NSLayoutConstraint *heightConstraint = [view constraintWithFirstItem:view firstAttribute:NSLayoutAttributeHeight]; + NSLayoutConstraint *heightConstraint = [aConditionController heightConstraint]; CGFloat height = [heightConstraint constant]; [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){ @@ -254,8 +261,13 @@ } completionHandler:^{ [heightConstraint setConstant:height]; [view removeFromSuperview]; - if (prevView || nextView) - [[(nextView ? [nextView topAnchor] : [conditionsView bottomAnchor]) constraintEqualToAnchor:(prevView ? [prevView bottomAnchor] : [conditionsView topAnchor])] setActive:YES]; + [verticalConstraints removeObjectAtIndex:idx]; + [verticalConstraints removeObjectAtIndex:idx]; + if (prevView || nextView) { + NSLayoutConstraint *constraint = [(nextView ? [nextView topAnchor] : [conditionsView bottomAnchor]) constraintEqualToAnchor:(prevView ? [prevView bottomAnchor] : [conditionsView topAnchor])]; + [constraint setActive:YES]; + [verticalConstraints insertObject:constraint atIndex:idx]; + } }]; } } Modified: trunk/bibdesk/Base.lproj/BDSKCondition.xib =================================================================== --- trunk/bibdesk/Base.lproj/BDSKCondition.xib 2024-03-11 14:55:24 UTC (rev 28834) +++ trunk/bibdesk/Base.lproj/BDSKCondition.xib 2024-03-11 15:39:03 UTC (rev 28835) @@ -20,6 +20,7 @@ <outlet property="countTextField" destination="371" id="374"/> <outlet property="dateComparisonPopUp" destination="208" id="237"/> <outlet property="dateTextField" destination="201" id="240"/> + <outlet property="heightConstraint" destination="uJt-lu-0lf" id="9ZR-au-Bhd"/> <outlet property="keyComboBox" destination="272" id="285"/> <outlet property="numberTextField" destination="185" id="242"/> <outlet property="objectController" destination="403" id="431"/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. _______________________________________________ Bibdesk-commit mailing list Bibdesk-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bibdesk-commit