Revision: 28458
          http://sourceforge.net/p/bibdesk/svn/28458
Author:   hofman
Date:     2023-11-20 22:17:24 +0000 (Mon, 20 Nov 2023)
Log Message:
-----------
Implement KVO notifications for keys dependent on user defaults keys changes in 
preference pane class

Modified Paths:
--------------
    trunk/bibdesk/BDSKPreferencePane.h
    trunk/bibdesk/BDSKPreferencePane.m
    trunk/bibdesk/BibPref_AutoFile.m
    trunk/bibdesk/BibPref_Cite.m
    trunk/bibdesk/BibPref_Defaults.m

Modified: trunk/bibdesk/BDSKPreferencePane.h
===================================================================
--- trunk/bibdesk/BDSKPreferencePane.h  2023-11-19 16:34:10 UTC (rev 28457)
+++ trunk/bibdesk/BDSKPreferencePane.h  2023-11-20 22:17:24 UTC (rev 28458)
@@ -44,6 +44,7 @@
     BDSKPreferenceController *preferenceController;
     NSUserDefaults *sud;
     NSMutableArray *observedKeys;
+    NSMutableDictionary *dependentKeys;
 }
 
 - (id)initWithRecord:(BDSKPreferenceRecord *)aRecord 
forPreferenceController:(BDSKPreferenceController *)aController;
@@ -77,7 +78,7 @@
 - (void)willCloseWindow;
 
 - (void)addObserverForUserDefaultsKey:(NSString *)key;
-- (void)observePriorValueForUserDefaultsKey:(NSString *)key;
+- (void)addObserverForUserDefaultsKey:(NSString *)key dependentKey:(NSString 
*)dependentKey;
 - (void)observeValueForUserDefaultsKey:(NSString *)key;
 
 @end

Modified: trunk/bibdesk/BDSKPreferencePane.m
===================================================================
--- trunk/bibdesk/BDSKPreferencePane.m  2023-11-19 16:34:10 UTC (rev 28457)
+++ trunk/bibdesk/BDSKPreferencePane.m  2023-11-20 22:17:24 UTC (rev 28458)
@@ -69,6 +69,7 @@
         @catch(id e) {}
         BDSKDESTROY(observedKeys);
     }
+    BDSKDESTROY(dependentKeys);
     [super dealloc];
 }
 
@@ -143,24 +144,39 @@
 
 #pragma mark KVO
 
-- (void)addObserverForUserDefaultsKey:(NSString *)key {
+- (void)addObserverForUserDefaultsKey:(NSString *)key dependentKey:(NSString 
*)dependentKey{
     if ([observedKeys containsObject:key])
         return;
-    [[NSUserDefaultsController sharedUserDefaultsController] addObserver:self 
forKeyPath:[@"values." stringByAppendingString:key] 
options:NSKeyValueObservingOptionPrior 
context:&BDSKPreferencePaneDefaultsObservationContext];
+    [[NSUserDefaultsController sharedUserDefaultsController] addObserver:self 
forKeyPath:[@"values." stringByAppendingString:key] options:dependentKey ? 
NSKeyValueObservingOptionPrior : 0 
context:&BDSKPreferencePaneDefaultsObservationContext];
     if (observedKeys == nil)
         observedKeys = [[NSMutableArray alloc] init];
     [observedKeys addObject:key];
+    if (dependentKey) {
+        if (dependentKeys == nil)
+            dependentKeys = [[NSMutableDictionary alloc] init];
+        [dependentKeys setObject:dependentKey forKey:key];
+    }
 }
 
-- (void)observePriorValueForUserDefaultsKey:(NSString *)key {}
+- (void)addObserverForUserDefaultsKey:(NSString *)key {
+    [self addObserverForUserDefaultsKey:key dependentKey:nil];
+}
+
 - (void)observeValueForUserDefaultsKey:(NSString *)key {}
 
 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object 
change:(NSDictionary *)change context:(void *)context {
     if (context == &BDSKPreferencePaneDefaultsObservationContext) {
-        if ([[change objectForKey:NSKeyValueChangeNotificationIsPriorKey] 
boolValue])
-            [self observePriorValueForUserDefaultsKey:[keyPath 
substringFromIndex:7]];
-        else
-            [self observeValueForUserDefaultsKey:[keyPath 
substringFromIndex:7]];
+        NSString *key = [keyPath substringFromIndex:7];
+        NSString *dependentKey = [dependentKeys objectForKey:key];
+        BOOL isPrior = [[change 
objectForKey:NSKeyValueChangeNotificationIsPriorKey] boolValue];
+        if (dependentKey) {
+            if (isPrior)
+                [self willChangeValueForKey:dependentKey];
+            else
+                [self didChangeValueForKey:dependentKey];
+        }
+        if (isPrior == NO)
+            [self observeValueForUserDefaultsKey:key];
     } else {
         [super observeValueForKeyPath:keyPath ofObject:object change:change 
context:context];
     }

Modified: trunk/bibdesk/BibPref_AutoFile.m
===================================================================
--- trunk/bibdesk/BibPref_AutoFile.m    2023-11-19 16:34:10 UTC (rev 28457)
+++ trunk/bibdesk/BibPref_AutoFile.m    2023-11-20 22:17:24 UTC (rev 28458)
@@ -90,7 +90,7 @@
     
     [self addObserverForUserDefaultsKey:BDSKLocalFileCleanOptionKey];
     [self addObserverForUserDefaultsKey:BDSKLocalFileLowercaseKey];
-    [self addObserverForUserDefaultsKey:BDSKPapersFolderPathKey];
+    [self addObserverForUserDefaultsKey:BDSKPapersFolderPathKey 
dependentKey:@"hasPapersFolder"];
 }
 
 - (void)defaultsDidRevert {
@@ -356,14 +356,7 @@
 
 #pragma mark KVO
 
-- (void)observePriorValueForUserDefaultsKey:(NSString *)key {
-    if ([key isEqualToString:BDSKPapersFolderPathKey])
-        [self willChangeValueForKey:@"hasPapersFolder"];
-}
-
 - (void)observeValueForUserDefaultsKey:(NSString *)key {
-    if ([key isEqualToString:BDSKPapersFolderPathKey])
-        [self didChangeValueForKey:@"hasPapersFolder"];
     [self updateFormatPreviewUI];
 }
 

Modified: trunk/bibdesk/BibPref_Cite.m
===================================================================
--- trunk/bibdesk/BibPref_Cite.m        2023-11-19 16:34:10 UTC (rev 28457)
+++ trunk/bibdesk/BibPref_Cite.m        2023-11-20 22:17:24 UTC (rev 28458)
@@ -68,7 +68,7 @@
     [self updateCiteCommandUI];
     
     [self addObserverForUserDefaultsKey:BDSKCiteStringKey];
-    [self addObserverForUserDefaultsKey:BDSKCiteStartBracketKey];
+    [self addObserverForUserDefaultsKey:BDSKCiteStartBracketKey 
dependentKey:@"useTeXBrackets"];
     [self addObserverForUserDefaultsKey:BDSKCiteEndBracketKey];
     [self addObserverForUserDefaultsKey:BDSKSeparateCiteKey];
     [self addObserverForUserDefaultsKey:BDSKCitePrependTildeKey];
@@ -160,14 +160,7 @@
     [self updateTemplates];
 }
 
-- (void)observePriorValueForUserDefaultsKey:(NSString *)key {
-    if ([key isEqualToString:BDSKCiteStartBracketKey])
-        [self willChangeValueForKey:@"useTeXBrackets"];
-}
-
 - (void)observeValueForUserDefaultsKey:(NSString *)key {
-    if ([key isEqualToString:BDSKCiteStartBracketKey])
-        [self didChangeValueForKey:@"useTeXBrackets"];
     [self updateCiteCommandUI];
 }
 

Modified: trunk/bibdesk/BibPref_Defaults.m
===================================================================
--- trunk/bibdesk/BibPref_Defaults.m    2023-11-19 16:34:10 UTC (rev 28457)
+++ trunk/bibdesk/BibPref_Defaults.m    2023-11-20 22:17:24 UTC (rev 28458)
@@ -241,7 +241,7 @@
     
     [defaultFieldsTableView reloadData];
     
-    [self addObserverForUserDefaultsKey:BDSKUseLocalUrlAndUrlKey];
+    [self addObserverForUserDefaultsKey:BDSKUseLocalUrlAndUrlKey 
dependentKey:@"convertURLFields"];
     
     NSTableColumn *tc = [defaultFieldsTableView 
tableColumnWithIdentifier:DEFAULT_KEY];
     CGFloat width = ceil([[tc headerCell] cellSize].width);
@@ -747,12 +747,7 @@
 
 #pragma mark KVO
 
-- (void)observePriorValueForUserDefaultsKey:(NSString *)key {
-    [self willChangeValueForKey:@"convertURLFields"];
-}
-
 - (void)observeValueForUserDefaultsKey:(NSString *)key {
-    [self didChangeValueForKey:@"convertURLFields"];
     // make sure Local-Url and Url are defined as Local File and remote URL 
fields
     if ([sud boolForKey:BDSKUseLocalUrlAndUrlKey] &&
         ([customFieldsSet containsObject:BDSKLocalUrlString] == NO || 
[customFieldsSet containsObject:BDSKUrlString] == NO)) {

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