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

Reply via email to