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