Revision: 25999
          http://sourceforge.net/p/bibdesk/svn/25999
Author:   hofman
Date:     2021-05-18 16:11:41 +0000 (Tue, 18 May 2021)
Log Message:
-----------
Set filtercontroller of conditioncontroller using setter and reset when 
removing, otherwise binding creates problems. AStart and stop observing when 
filtercontroller is set.

Modified Paths:
--------------
    trunk/bibdesk/BDSKConditionController.h
    trunk/bibdesk/BDSKConditionController.m
    trunk/bibdesk/BDSKFilterController.m

Modified: trunk/bibdesk/BDSKConditionController.h
===================================================================
--- trunk/bibdesk/BDSKConditionController.h     2021-05-18 14:55:05 UTC (rev 
25998)
+++ trunk/bibdesk/BDSKConditionController.h     2021-05-18 16:11:41 UTC (rev 
25999)
@@ -92,8 +92,7 @@
 @property (nonatomic, assign) IBOutlet NSButton *addButton;
 @property (nonatomic, assign) IBOutlet NSButton *removeButton;
 
-- (id)initWithFilterController:(BDSKFilterController *)aFilterController;
-- (id)initWithFilterController:(BDSKFilterController *)aFilterController 
condition:(BDSKCondition *)aCondition;
+- (id)initWithCondition:(BDSKCondition *)aCondition;
 
 - (IBAction)addNewCondition:(id)sender;
 - (IBAction)removeThisCondition:(id)sender;
@@ -100,15 +99,12 @@
 - (IBAction)changeRating:(id)sender;
 - (IBAction)selectKeyText:(id)sender;
 
-@property (nonatomic, readonly) BDSKFilterController *filterController;
+@property (nonatomic, assign) BDSKFilterController *filterController;
 
 @property (nonatomic, readonly) BDSKCondition *condition;
 
 @property (nonatomic, readonly) NSArray *keys;
 
-- (void)startObserving;
-- (void)stopObserving;
-
 - (void)discardEditing;
 - (BOOL)commitEditing;
 - (void)commitEditingWithDelegate:(id)delegate 
didCommitSelector:(SEL)didCommitSelector contextInfo:(void *)contextInfo;

Modified: trunk/bibdesk/BDSKConditionController.m
===================================================================
--- trunk/bibdesk/BDSKConditionController.m     2021-05-18 14:55:05 UTC (rev 
25998)
+++ trunk/bibdesk/BDSKConditionController.m     2021-05-18 16:11:41 UTC (rev 
25999)
@@ -52,6 +52,8 @@
 static char BDSKConditionControllerObservationContext;
 
 @interface BDSKConditionController (BDSKPrivate)
+- (void)startObserving;
+- (void)stopObserving;
 - (void)layoutValueControls;
 - (void)layoutComparisonControls;
 @end
@@ -69,18 +71,16 @@
     [NSValueTransformer 
setValueTransformer:[[[BDSKColorFromStringValueTransformer alloc] init] 
autorelease] forName:BDSKColorFromStringValueTransformerName];
 }
 
-- (id)initWithFilterController:(BDSKFilterController *)aFilterController
+- (id)init
 {
-       BDSKCondition *aCondition = [[[BDSKCondition alloc] init] autorelease];
-    self = [self initWithFilterController:aFilterController 
condition:aCondition];
-    return self;
+    return [self initWithCondition:[[[BDSKCondition alloc] init] autorelease]];
 }
 
-- (id)initWithFilterController:(BDSKFilterController *)aFilterController 
condition:(BDSKCondition *)aCondition
+- (id)initWithCondition:(BDSKCondition *)aCondition
 {
     self = [super initWithNibName:@"BDSKCondition" bundle:nil];
     if (self) {
-        filterController = aFilterController;
+        filterController = nil;
         [self setRepresentedObject:aCondition];
                
         BDSKTypeManager *typeMan = [BDSKTypeManager sharedManager];
@@ -159,8 +159,6 @@
         [comparisonView setHidden:YES];
         [valueView setHidden:YES];
         [removeButton setHidden:YES];
-    } else {
-        [self startObserving];
     }
 }
 
@@ -186,6 +184,16 @@
     return [self representedObject];
 }
 
+- (void)setFilterController:(BDSKFilterController *)controller {
+    if (controller != filterController) {
+        if (filterController)
+            [self stopObserving];
+        filterController = controller;
+        if (filterController)
+            [self startObserving];
+    }
+}
+
 - (void)layoutValueControls {
     NSArray *controls = nil;
     switch ([[[self condition] key] fieldType]) {

Modified: trunk/bibdesk/BDSKFilterController.m
===================================================================
--- trunk/bibdesk/BDSKFilterController.m        2021-05-18 14:55:05 UTC (rev 
25998)
+++ trunk/bibdesk/BDSKFilterController.m        2021-05-18 16:11:41 UTC (rev 
25999)
@@ -79,13 +79,13 @@
         BDSKConditionController *controller;
         if ([[filter conditions] count]) {
             for (BDSKCondition *condition in [filter conditions]) {
-                controller = [[BDSKConditionController alloc] 
initWithFilterController:self condition:[[condition copy] autorelease]];
+                controller = [[BDSKConditionController alloc] 
initWithCondition:[[condition copy] autorelease]];
                 [conditionControllers addObject:controller];
                 [controller release];
             }
         } else {
             // add a dummy controller when there's no condition, so we have an 
add button
-            controller = [[BDSKConditionController alloc] 
initWithFilterController:self condition:nil];
+            controller = [[BDSKConditionController alloc] 
initWithCondition:nil];
             [conditionControllers addObject:controller];
             [controller release];
         }
@@ -111,7 +111,7 @@
 - (void)windowDidLoad {
     for (BDSKConditionController *controller in conditionControllers) {
         [conditionsView addView:[controller view]];
-        [controller startObserving];
+        [controller setFilterController:self];
     }
     [self handleScrollerStyleChanged:nil];
     [[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(handleScrollerStyleChanged:) 
name:NSPreferredScrollerStyleDidChangeNotification object:nil];
@@ -122,7 +122,7 @@
         NSBeep();
         return;
     }
-    [conditionControllers makeObjectsPerformSelector:@selector(stopObserving)];
+    [conditionControllers setValue:nil forKey:@"filterController"];
     [super dismiss:sender];
 }
 
@@ -136,7 +136,7 @@
                idx = [conditionControllers count];
     else
         ++idx;
-    BDSKConditionController *newController = [[[BDSKConditionController alloc] 
initWithFilterController:self] autorelease];
+    BDSKConditionController *newController = [[[BDSKConditionController alloc] 
init] autorelease];
     [self insertObject:newController inConditionControllersAtIndex:idx];
     [newController selectKeyText:self];
 }
@@ -145,8 +145,8 @@
     [[[self undoManager] prepareWithInvocationTarget:self] 
removeObjectFromConditionControllersAtIndex:idx];
        
     [conditionControllers insertObject:newController atIndex:idx];
+    [newController setFilterController:self];
     [conditionsView insertView:[newController view] atIndex:idx];
-    [newController startObserving];
 }
 
 - (void)removeConditionController:(BDSKConditionController 
*)aConditionController {
@@ -159,7 +159,7 @@
     
     [[[self undoManager] prepareWithInvocationTarget:self] 
insertObject:aConditionController inConditionControllersAtIndex:idx];
     
-    [aConditionController stopObserving];
+    [aConditionController setFilterController:nil];
     [conditionsView removeView:[aConditionController view]];
        [conditionControllers removeObject:aConditionController];
 }

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