Revision: 26274
          http://sourceforge.net/p/bibdesk/svn/26274
Author:   hofman
Date:     2021-06-21 09:21:48 +0000 (Mon, 21 Jun 2021)
Log Message:
-----------
Convenience methods to get a particular constraint from a view

Modified Paths:
--------------
    trunk/bibdesk/BDSKBookmarkController.m
    trunk/bibdesk/BDSKFilterController.m
    trunk/bibdesk/BDSKSearchBookmarkController.m
    trunk/bibdesk/BDSKStatusBar.m
    trunk/bibdesk/NSView_BDSKExtensions.h
    trunk/bibdesk/NSView_BDSKExtensions.m

Modified: trunk/bibdesk/BDSKBookmarkController.m
===================================================================
--- trunk/bibdesk/BDSKBookmarkController.m      2021-06-21 06:30:23 UTC (rev 
26273)
+++ trunk/bibdesk/BDSKBookmarkController.m      2021-06-21 09:21:48 UTC (rev 
26274)
@@ -49,6 +49,7 @@
 #import "NSURL_BDSKExtensions.h"
 #import "NSPasteboard_BDSKExtensions.h"
 #import "NSAnimationContext_BDSKExtensions.h"
+#import "NSView_BDSKExtensions.h"
 
 #define BDSKBookmarksWindowFrameAutosaveName @"BDSKBookmarksWindow"
 
@@ -628,14 +629,8 @@
     NSTableCellView *view = [ov makeViewWithIdentifier:identifier owner:self];
     if (!RUNNING_AFTER(10_15)) {
         BOOL isLast = [[tableColumn identifier] isEqualToString:@"url"];
-        if (isLast || isSep) {
-            for (NSLayoutConstraint *constraint in [view constraints]) {
-                if ([constraint firstAttribute] == NSLayoutAttributeTrailing) {
-                    [constraint setConstant:isSep == NO ? 4.0 : isLast ? 2.0 : 
0.0];
-                    break;
-                }
-            }
-        }
+        if (isLast || isSep)
+            [[view constraintWithFirstItem:view 
firstAttribute:NSLayoutAttributeTrailing] setConstant:isSep == NO ? 4.0 : 
isLast ? 2.0 : 0.0];
     }
     if ([identifier isEqualToString:@"url"])
         [[view textField] setEnabled:[item bookmarkType] == 
BDSKBookmarkTypeBookmark];

Modified: trunk/bibdesk/BDSKFilterController.m
===================================================================
--- trunk/bibdesk/BDSKFilterController.m        2021-06-21 06:30:23 UTC (rev 
26273)
+++ trunk/bibdesk/BDSKFilterController.m        2021-06-21 09:21:48 UTC (rev 
26274)
@@ -41,6 +41,7 @@
 #import "NSWindowController_BDSKExtensions.h"
 #import "NSInvocation_BDSKExtensions.h"
 #import "BDSKTouchBarButtonGroup.h"
+#import "NSView_BDSKExtensions.h"
 
 #define MAX_HEIGHT 320.0
 #define SCROLLVIEW_MARGIN 8.0
@@ -194,9 +195,7 @@
     NSView *prevView = idx == 0 ? nil : [subviews objectAtIndex:idx - 1];
     NSView *nextView = idx == [subviews count] ? nil : [subviews 
objectAtIndex:idx];
     
-    NSLayoutConstraint *heightConstraint = nil;
-    for (heightConstraint in [view constraints])
-        if ([heightConstraint firstAttribute] == NSLayoutAttributeHeight) 
break;
+    NSLayoutConstraint *heightConstraint = [view constraintWithFirstItem:view 
firstAttribute:NSLayoutAttributeHeight];
     CGFloat height = [heightConstraint constant];
     [heightConstraint setConstant:0.0];
     
@@ -203,19 +202,13 @@
     [conditionsView addSubview:view positioned:prevView ? NSWindowAbove : 
NSWindowBelow relativeTo:prevView];
     
     if (nextView) {
-        for (NSLayoutConstraint *constraint in [conditionsView constraints]) {
-            if ([constraint firstItem] == nextView && [constraint 
firstAttribute] == NSLayoutAttributeTop) {
-                [conditionsView removeConstraint:constraint];
-                break;
-            }
-        }
+        NSLayoutConstraint *topConstraint = [conditionsView 
constraintWithFirstItem:nextView firstAttribute:NSLayoutAttributeTop];
+        if (topConstraint)
+            [conditionsView removeConstraint:topConstraint];
     } else if (prevView) {
-        for (NSLayoutConstraint *constraint in [conditionsView constraints]) {
-            if ([constraint secondItem] == prevView && [constraint 
secondAttribute] == NSLayoutAttributeBottom) {
-                [conditionsView removeConstraint:constraint];
-                break;
-            }
-        }
+        NSLayoutConstraint *bottomConstraint = [conditionsView 
constraintWithFirstItem:prevView firstAttribute:NSLayoutAttributeBottom];
+        if (bottomConstraint)
+            [conditionsView removeConstraint:bottomConstraint];
     }
     [conditionsView addConstraint:[NSLayoutConstraint constraintWithItem:view 
attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual 
toItem:conditionsView attribute:NSLayoutAttributeLeading multiplier:1.0 
constant:0.0]];
     [conditionsView addConstraint:[NSLayoutConstraint 
constraintWithItem:conditionsView attribute:NSLayoutAttributeTrailing 
relatedBy:NSLayoutRelationEqual toItem:view attribute:NSLayoutAttributeTrailing 
multiplier:1.0 constant:0.0]];
@@ -249,9 +242,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 = nil;
-        for (heightConstraint in [view constraints])
-            if ([heightConstraint firstAttribute] == NSLayoutAttributeHeight) 
break;
+        NSLayoutConstraint *heightConstraint = [view 
constraintWithFirstItem:view firstAttribute:NSLayoutAttributeHeight];
         CGFloat height = [heightConstraint constant];
         
         [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){

Modified: trunk/bibdesk/BDSKSearchBookmarkController.m
===================================================================
--- trunk/bibdesk/BDSKSearchBookmarkController.m        2021-06-21 06:30:23 UTC 
(rev 26273)
+++ trunk/bibdesk/BDSKSearchBookmarkController.m        2021-06-21 09:21:48 UTC 
(rev 26274)
@@ -45,6 +45,7 @@
 #import "BDSKOutlineView.h"
 #import "NSWindowController_BDSKExtensions.h"
 #import "NSAnimationContext_BDSKExtensions.h"
+#import "NSView_BDSKExtensions.h"
 
 #define BDSKSearchBookmarksWindowFrameAutosaveName @"BDSKSearchBookmarksWindow"
 
@@ -504,14 +505,8 @@
     NSTableCellView *view = [ov makeViewWithIdentifier:identifier owner:self];
     if (!RUNNING_AFTER(10_15)) {
         BOOL isLast = [[tableColumn identifier] isEqualToString:@"server"];
-        if (isLast || isSep) {
-            for (NSLayoutConstraint *constraint in [view constraints]) {
-                if ([constraint firstAttribute] == NSLayoutAttributeTrailing) {
-                    [constraint setConstant:isSep == NO ? 4.0 : isLast ? 2.0 : 
0.0];
-                    break;
-                }
-            }
-        }
+        if (isLast || isSep)
+            [[view constraintWithFirstItem:view 
firstAttribute:NSLayoutAttributeTrailing] setConstant:isSep == NO ? 4.0 : 
isLast ? 2.0 : 0.0];
     }
     if ([identifier isEqualToString:@"server"])
         [[view textField] setEnabled:[item bookmarkType] == 
BDSKSearchBookmarkTypeBookmark];

Modified: trunk/bibdesk/BDSKStatusBar.m
===================================================================
--- trunk/bibdesk/BDSKStatusBar.m       2021-06-21 06:30:23 UTC (rev 26273)
+++ trunk/bibdesk/BDSKStatusBar.m       2021-06-21 09:21:48 UTC (rev 26274)
@@ -129,16 +129,8 @@
     NSView *contentView = [view superview];
     BOOL visible = (nil == [self superview]);
     NSView *bottomView = visible ? view : self;
-    NSLayoutConstraint *bottomConstraint = nil;
+    NSLayoutConstraint *bottomConstraint = [contentView 
constraintWithSecondItem:bottomView secondAttribute:NSLayoutAttributeBottom];
     
-    for (NSLayoutConstraint *constraint in [contentView constraints]) {
-        if (([constraint firstItem] == bottomView && [constraint 
firstAttribute] == NSLayoutAttributeBottom) ||
-            ([constraint secondItem] == bottomView && [constraint 
secondAttribute] == NSLayoutAttributeBottom)) {
-            bottomConstraint = constraint;
-            break;
-        }
-    }
-    
     CGFloat statusHeight = NSHeight([self frame]);
     NSMutableArray *constraints = [NSMutableArray array];
     
@@ -159,7 +151,7 @@
     
     if (duration > 0.0) {
         animating = YES;
-        CGFloat target = visible ? 0.0 : [bottomConstraint firstItem] == self 
? statusHeight : -statusHeight;
+        CGFloat target = visible ? 0.0 : statusHeight;
         [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){
                 [context setDuration:duration];
                 [[bottomConstraint animator] setConstant:target];

Modified: trunk/bibdesk/NSView_BDSKExtensions.h
===================================================================
--- trunk/bibdesk/NSView_BDSKExtensions.h       2021-06-21 06:30:23 UTC (rev 
26273)
+++ trunk/bibdesk/NSView_BDSKExtensions.h       2021-06-21 09:21:48 UTC (rev 
26274)
@@ -78,4 +78,7 @@
 
 - (NSScrollView *)enclosedScrollView;
 
+- (NSLayoutConstraint *)constraintWithFirstItem:(id)item 
firstAttribute:(NSLayoutAttribute)attribute;
+- (NSLayoutConstraint *)constraintWithSecondItem:(id)item 
secondAttribute:(NSLayoutAttribute)attribute;
+
 @end

Modified: trunk/bibdesk/NSView_BDSKExtensions.m
===================================================================
--- trunk/bibdesk/NSView_BDSKExtensions.m       2021-06-21 06:30:23 UTC (rev 
26273)
+++ trunk/bibdesk/NSView_BDSKExtensions.m       2021-06-21 09:21:48 UTC (rev 
26274)
@@ -161,6 +161,22 @@
     return nil;
 }
 
+- (NSLayoutConstraint *)constraintWithFirstItem:(id)item 
firstAttribute:(NSLayoutAttribute)attribute {
+    for (NSLayoutConstraint *constraint in [self constraints]) {
+        if ([constraint firstItem] == item && [constraint firstAttribute] == 
attribute)
+            return constraint;
+    }
+    return nil;
+}
+
+- (NSLayoutConstraint *)constraintWithSecondItem:(id)item 
secondAttribute:(NSLayoutAttribute)attribute {
+    for (NSLayoutConstraint *constraint in [self constraints]) {
+        if ([constraint secondItem] == item && [constraint secondAttribute] == 
attribute)
+            return constraint;
+    }
+    return nil;
+}
+
 @end
 
 

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

Reply via email to