Update of /cvsroot/bibdesk/bibdesk In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15480 Modified Files: Tag: BR_1x BibDocument.m BibDocument_Groups.h BibDocument_Groups.m BibPrefController.h BibPrefController.m Log Message: Continuing fix for bug #1425451. Documents need to observe changes in group fields, so the popup contents stay current. Index: BibDocument_Groups.m =================================================================== RCS file: /cvsroot/bibdesk/bibdesk/Attic/BibDocument_Groups.m,v retrieving revision 1.1.2.48 retrieving revision 1.1.2.49 diff -C2 -d -r1.1.2.48 -r1.1.2.49 *** BibDocument_Groups.m 6 Feb 2006 18:09:15 -0000 1.1.2.48 --- BibDocument_Groups.m 6 Feb 2006 19:52:52 -0000 1.1.2.49 *************** *** 434,438 **** } ! - (void)addGroupFieldSheetDidEnd:(NSWindow *)sheet returnCode:(int) returnCode contextInfo:(void *)contextInfo{ if(returnCode == 0) --- 434,438 ---- } ! - (void)addGroupFieldSheetDidEnd:(NSWindow *)sheet returnCode:(int) returnCode contextInfo:(void *)contextInfo{ if(returnCode == 0) *************** *** 453,461 **** [[OFPreferenceWrapper sharedPreferenceWrapper] setObject:array forKey:BDSKGroupFieldsKey]; [cell insertItemWithTitle:field atIndex:[array count] - 1]; [self setCurrentGroupField:field]; [cell selectItemWithTitle:currentGroupField]; - [[OFPreferenceWrapper sharedPreferenceWrapper] setObject:currentGroupField forKey:BDSKCurrentGroupFieldKey]; [[NSNotificationCenter defaultCenter] postNotificationName:BDSKGroupFieldChangedNotification object:self --- 453,464 ---- [[OFPreferenceWrapper sharedPreferenceWrapper] setObject:array forKey:BDSKGroupFieldsKey]; + [[NSNotificationCenter defaultCenter] postNotificationName:BDSKGroupAddRemoveNotification + object:self + userInfo:[NSDictionary dictionaryWithObjectsAndKeys:field, NSKeyValueChangeNewKey, [NSNumber numberWithInt:NSKeyValueChangeInsertion], NSKeyValueChangeKindKey, nil]]; + [cell insertItemWithTitle:field atIndex:[array count] - 1]; [self setCurrentGroupField:field]; [cell selectItemWithTitle:currentGroupField]; [[NSNotificationCenter defaultCenter] postNotificationName:BDSKGroupFieldChangedNotification object:self *************** *** 501,504 **** --- 504,536 ---- userInfo:[NSDictionary dictionary]]; } + + [[NSNotificationCenter defaultCenter] postNotificationName:BDSKGroupAddRemoveNotification + object:self + userInfo:[NSDictionary dictionaryWithObjectsAndKeys:field, NSKeyValueChangeNewKey, [NSNumber numberWithInt:NSKeyValueChangeRemoval], NSKeyValueChangeKindKey, nil]]; + } + } + + - (void)handleGroupAddRemoveNotification:(NSNotification *)notification{ + // Handle changes to the popup from other documents. The userInfo for this notification uses key-value observing keys: NSKeyValueChangeNewKey is the affected field (whether add/remove), and NSKeyValueChangeKindKey will be either insert/remove + if([notification object] != self){ + BDSKGroupTableHeaderView *headerView = (BDSKGroupTableHeaderView *)[groupTableView headerView]; + NSPopUpButtonCell *headerCell = [headerView popUpHeaderCell]; + + id userInfo = [notification userInfo]; + NSParameterAssert(userInfo && [userInfo valueForKey:NSKeyValueChangeKindKey]); + + NSString *field = [userInfo valueForKey:NSKeyValueChangeNewKey]; + NSParameterAssert(field); + + // Ignore this change if we already have that field (shouldn't happen), or are removing the current group field; in the latter case, it's already removed in prefs, so it'll be gone next time the document is opened. Removing all fields means we have to deal with the add/remove menu items and separator, so avoid that. + if([[headerCell titleOfSelectedItem] isEqualToString:field] == NO){ + int changeType = [[userInfo valueForKey:NSKeyValueChangeKindKey] intValue]; + + if(changeType == NSKeyValueChangeInsertion) + [headerCell insertItemWithTitle:field atIndex:0]; + else if(changeType == NSKeyValueChangeRemoval) + [headerCell removeItemWithTitle:field]; + else [NSException raise:NSInvalidArgumentException format:@"Unrecognized change type %d", changeType]; + } } } Index: BibPrefController.h =================================================================== RCS file: /cvsroot/bibdesk/bibdesk/BibPrefController.h,v retrieving revision 1.66.2.43 retrieving revision 1.66.2.44 diff -C2 -d -r1.66.2.43 -r1.66.2.44 *** BibPrefController.h 3 Feb 2006 19:20:50 -0000 1.66.2.43 --- BibPrefController.h 6 Feb 2006 19:52:52 -0000 1.66.2.44 *************** *** 220,223 **** --- 220,224 ---- extern NSString *BDSKTableSelectionChangedNotification; extern NSString *BDSKGroupFieldChangedNotification; + extern NSString *BDSKGroupAddRemoveNotification; extern NSString *BDSKBibItemChangedNotification; extern NSString *BDSKNeedsToBeFiledChangedNotification; Index: BibPrefController.m =================================================================== RCS file: /cvsroot/bibdesk/bibdesk/BibPrefController.m,v retrieving revision 1.64.2.45 retrieving revision 1.64.2.46 diff -C2 -d -r1.64.2.45 -r1.64.2.46 *** BibPrefController.m 3 Feb 2006 19:20:50 -0000 1.64.2.45 --- BibPrefController.m 6 Feb 2006 19:52:52 -0000 1.64.2.46 *************** *** 235,238 **** --- 235,239 ---- NSString *BDSKTableSelectionChangedNotification = @"TableSelectionChangedNotification"; NSString *BDSKGroupFieldChangedNotification = @"GroupFieldChangedNotification"; + NSString *BDSKGroupAddRemoveNotification = @"BDSKGroupAddRemoveNotification"; NSString *BDSKBibItemChangedNotification = @"BibItem Changed notification"; NSString *BDSKNeedsToBeFiledChangedNotification = @"BibItem NeedsToBeFiled Flag Changed notification"; Index: BibDocument.m =================================================================== RCS file: /cvsroot/bibdesk/bibdesk/BibDocument.m,v retrieving revision 1.307.2.328 retrieving revision 1.307.2.329 diff -C2 -d -r1.307.2.328 -r1.307.2.329 *** BibDocument.m 6 Feb 2006 18:09:14 -0000 1.307.2.328 --- BibDocument.m 6 Feb 2006 19:52:47 -0000 1.307.2.329 *************** *** 158,161 **** --- 158,166 ---- object:self]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(handleGroupAddRemoveNotification:) + name:BDSKGroupAddRemoveNotification + object:nil]; + // register for selection changes notifications: [[NSNotificationCenter defaultCenter] addObserver:self *************** *** 296,300 **** [headerCell setMenu:[self groupFieldsMenu]]; [(BDSKHeaderPopUpButtonCell *)headerCell setIndicatorImage:[NSImage imageNamed:sortGroupsDescending ? @"NSDescendingSortIndicator" : @"NSAscendingSortIndicator"]]; ! [headerCell selectItemWithTitle:currentGroupField]; [saveTextEncodingPopupButton removeAllItems]; --- 301,308 ---- [headerCell setMenu:[self groupFieldsMenu]]; [(BDSKHeaderPopUpButtonCell *)headerCell setIndicatorImage:[NSImage imageNamed:sortGroupsDescending ? @"NSDescendingSortIndicator" : @"NSAscendingSortIndicator"]]; ! if([headerCell itemWithTitle:currentGroupField]) ! [headerCell selectItemWithTitle:currentGroupField]; ! else ! [headerCell selectItemAtIndex:0]; [saveTextEncodingPopupButton removeAllItems]; Index: BibDocument_Groups.h =================================================================== RCS file: /cvsroot/bibdesk/bibdesk/Attic/BibDocument_Groups.h,v retrieving revision 1.1.2.13 retrieving revision 1.1.2.14 diff -C2 -d -r1.1.2.13 -r1.1.2.14 *** BibDocument_Groups.h 28 Dec 2005 16:35:24 -0000 1.1.2.13 --- BibDocument_Groups.h 6 Feb 2006 19:52:52 -0000 1.1.2.14 *************** *** 58,64 **** --- 58,69 ---- - (BOOL)movePublications:(NSArray *)pubs fromGroup:(BDSKGroup *)group toGroupNamed:(NSString *)newGroupName; - (NSMenu *)groupFieldsMenu; + - (void)changeGroupFieldAction:(id)sender; - (void)addGroupFieldAction:(id)sender; - (void)removeGroupFieldAction:(id)sender; + - (void)removeGroupFieldSheetDidEnd:(NSWindow *)sheet returnCode:(int) returnCode contextInfo:(void *)contextInfo; + - (void)handleGroupFieldChangedNotification:(NSNotification *)notification; + - (void)handleGroupAddRemoveNotification:(NSNotification *)notification; + - (IBAction)sortGroupsByGroup:(id)sender; - (IBAction)sortGroupsByCount:(id)sender; *************** *** 74,79 **** - (void)addSmartGroupSheetDidEnd:(NSWindow *)sheet returnCode:(int) returnCode contextInfo:(void *)contextInfo; - - (void)removeGroupFieldSheetDidEnd:(NSWindow *)sheet returnCode:(int) returnCode contextInfo:(void *)contextInfo; - - (void)handleGroupFieldChangedNotification:(NSNotification *)notification; - (void)handleFilterChangedNotification:(NSNotification *)notification; - (void)sortGroupsByKey:(NSString *)key; --- 79,82 ---- |