From: <ho...@us...> - 2009-03-20 10:52:49
|
Revision: 14820 http://bibdesk.svn.sourceforge.net/bibdesk/?rev=14820&view=rev Author: hofman Date: 2009-03-20 10:52:27 +0000 (Fri, 20 Mar 2009) Log Message: ----------- Add a preference to hide the group count bubbles. When this is set and the groups are not sorted by key, don't update the smart groups count, because it's very inefficient for many smart groups and won't be used in this case. This is in fact the main reason for adding this feature. Modified Paths: -------------- trunk/bibdesk/BDSKGroup.m trunk/bibdesk/BDSKStringConstants.h trunk/bibdesk/BDSKStringConstants.m trunk/bibdesk/BibDocument.m trunk/bibdesk/BibDocument_Groups.m trunk/bibdesk/BibPref_Display.h trunk/bibdesk/BibPref_Display.m trunk/bibdesk/English.lproj/BibPref_Display.nib/classes.nib trunk/bibdesk/English.lproj/BibPref_Display.nib/keyedobjects.nib trunk/bibdesk/Preferences.plist Modified: trunk/bibdesk/BDSKGroup.m =================================================================== --- trunk/bibdesk/BDSKGroup.m 2009-03-20 04:58:14 UTC (rev 14819) +++ trunk/bibdesk/BDSKGroup.m 2009-03-20 10:52:27 UTC (rev 14820) @@ -45,6 +45,17 @@ #import "BDSKRuntime.h" +@implementation BDSKGroup + +static NSArray *cellValueKeys = nil; +static NSArray *noCountCellValueKeys = nil; + ++ (void)initialize { + BDSKINITIALIZE; + cellValueKeys = [[NSArray alloc] initWithObjects:@"stringValue", @"editingStringValue", @"numberValue", @"icon", @"isRetrieving", @"failedDownload", nil]; + noCountCellValueKeys = [[NSArray alloc] initWithObjects:@"stringValue", @"editingStringValue", @"icon", @"isRetrieving", @"failedDownload", nil]; +} + static NSString *createUniqueID(void) { CFUUIDRef uuid = CFUUIDCreate(NULL); @@ -53,8 +64,6 @@ return uuidStr; } -@implementation BDSKGroup - // super's designated initializer - (id)init { if ([self class] == [BDSKGroup class]) { @@ -218,7 +227,10 @@ } - (NSDictionary *)cellValue { - return [self dictionaryWithValuesForKeys:[NSArray arrayWithObjects:@"stringValue", @"editingStringValue", @"numberValue", @"icon", @"isRetrieving", @"failedDownload", nil]]; + if ([[NSUserDefaults standardUserDefaults] boolForKey:BDSKHideGroupCountKey]) + return [self dictionaryWithValuesForKeys:noCountCellValueKeys]; + else + return [self dictionaryWithValuesForKeys:cellValueKeys]; } - (NSString *)toolTip { Modified: trunk/bibdesk/BDSKStringConstants.h =================================================================== --- trunk/bibdesk/BDSKStringConstants.h 2009-03-20 04:58:14 UTC (rev 14819) +++ trunk/bibdesk/BDSKStringConstants.h 2009-03-20 10:52:27 UTC (rev 14820) @@ -194,6 +194,8 @@ extern NSString *BDSKAuthorNameDisplayKey; +extern NSString *BDSKHideGroupCountKey; + extern NSString *BDSKSpotlightVersionInfoKey; extern NSString *BDSKShouldShowWebGroupPrefKey; Modified: trunk/bibdesk/BDSKStringConstants.m =================================================================== --- trunk/bibdesk/BDSKStringConstants.m 2009-03-20 04:58:14 UTC (rev 14819) +++ trunk/bibdesk/BDSKStringConstants.m 2009-03-20 10:52:27 UTC (rev 14820) @@ -202,7 +202,7 @@ NSString *BDSKCiteseerHostKey = @"BDSKCiteseerHostKey"; NSString *BDSKAuthorNameDisplayKey = @"BDSKAuthorNameDisplayKey"; -NSString *BDSKShouldDisplayLastNameFirstKey = @"BDSKShouldDisplayLastNameFirstKey"; +NSString *BDSKHideGroupCountKey = @"BDSKHideGroupCount"; NSString *BDSKShouldShareFilesKey = @"BDSKShouldShareFilesKey"; NSString *BDSKShouldLookForSharedFilesKey = @"BDSKShouldLookForSharedFilesKey"; NSString *BDSKSharingRequiresPasswordKey = @"BDSKBrowsingRequiresPasswordKey"; Modified: trunk/bibdesk/BibDocument.m =================================================================== --- trunk/bibdesk/BibDocument.m 2009-03-20 04:58:14 UTC (rev 14819) +++ trunk/bibdesk/BibDocument.m 2009-03-20 10:52:27 UTC (rev 14820) @@ -302,6 +302,7 @@ [sud removeObserver:self forKeyPath:[@"values." stringByAppendingString:BDSKAuthorNameDisplayKey]]; [sud removeObserver:self forKeyPath:[@"values." stringByAppendingString:BDSKBTStyleKey]]; [sud removeObserver:self forKeyPath:[@"values." stringByAppendingString:BDSKUsesTeXKey]]; + [sud removeObserver:self forKeyPath:[@"values." stringByAppendingString:BDSKHideGroupCountKey]]; } @catch (id e) {} // workaround for crash: to reproduce, create empty doc, hit cmd-n for new editor window, then cmd-q to quit, choose "don't save"; this results in an -undoManager message to the dealloced document @@ -2809,6 +2810,10 @@ forKeyPath:[@"values." stringByAppendingString:BDSKUsesTeXKey] options:0 context:&BDSKDocumentDefaultsObservationContext]; + [sud addObserver:self + forKeyPath:[@"values." stringByAppendingString:BDSKHideGroupCountKey] + options:0 + context:&BDSKDocumentDefaultsObservationContext]; } - (void)handleBibItemAddDelNotification:(NSNotification *)notification{ @@ -3100,6 +3105,12 @@ [self updatePreviewer:[BDSKPreviewer sharedPreviewer]]; } else if ([key isEqualToString:BDSKUsesTeXKey]) { [bottomPreviewButton setEnabled:[[NSUserDefaults standardUserDefaults] boolForKey:BDSKUsesTeXKey] forSegment:BDSKPreviewDisplayTeX]; + } else if ([key isEqualToString:BDSKHideGroupCountKey]) { + // if we were hiding the count, the smart group counts weren't updated, so we need to update them now when we're showing the count, otherwise just reload + if ([[NSUserDefaults standardUserDefaults] boolForKey:BDSKHideGroupCountKey]) + [groupTableView reloadData]; + else + [self updateSmartGroupsCountAndContent:NO]; } } else { [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; Modified: trunk/bibdesk/BibDocument_Groups.m =================================================================== --- trunk/bibdesk/BibDocument_Groups.m 2009-03-20 04:58:14 UTC (rev 14819) +++ trunk/bibdesk/BibDocument_Groups.m 2009-03-20 10:52:27 UTC (rev 14820) @@ -620,21 +620,25 @@ unsigned int row = NSMaxRange(smartRange); BOOL needsUpdate = NO; BOOL hasManyGroups = smartRange.length > 10; + BOOL hideCount = [[NSUserDefaults standardUserDefaults] boolForKey:BDSKHideGroupCountKey]; + BOOL sortByCount = [sortGroupsKey isEqualToString:BDSKGroupCellCountKey]; while(NSLocationInRange(--row, smartRange)){ - if (hasManyGroups == NO) + if([groupTableView isRowSelected:row]) + needsUpdate = shouldUpdate; + else if (hideCount == YES && sortByCount == NO) + continue; + if (hasManyGroups == NO) [(BDSKSmartGroup *)[groups objectAtIndex:row] filterItems:publications]; else if (docState.isDocumentClosed == NO) [self queueSelectorOnce:@selector(updateCountForSmartGroup:) withObject:(BDSKSmartGroup *)[groups objectAtIndex:row]]; - if([groupTableView isRowSelected:row]) - needsUpdate = shouldUpdate; } - if([sortGroupsKey isEqualToString:BDSKGroupCellCountKey]){ + if(sortByCount){ NSPoint scrollPoint = [[tableView enclosingScrollView] scrollPositionAsPercentage]; [self sortGroupsByKey:sortGroupsKey]; [[tableView enclosingScrollView] setScrollPositionAsPercentage:scrollPoint]; - }else{ + }else if (needsUpdate == YES || hideCount == NO){ [groupTableView reloadData]; if(needsUpdate == YES){ // fix for bug #1362191: after changing a checkbox that removed an item from a smart group, the table scrolled to the top @@ -751,7 +755,7 @@ - (IBAction)sortGroupsByCount:(id)sender{ if ([sortGroupsKey isEqualToString:BDSKGroupCellCountKey]) return; - [self sortGroupsByKey:BDSKGroupCellCountKey]; + [self sortGroupsByKey:BDSKGroupCellCountKey]; } - (IBAction)changeGroupFieldAction:(id)sender{ @@ -1628,6 +1632,11 @@ docState.sortGroupsDescending = YES; // more appropriate for default count sort [sortGroupsKey release]; sortGroupsKey = [key retain]; + if ([sortGroupsKey isEqualToString:BDSKGroupCellCountKey] && [[NSUserDefaults standardUserDefaults] boolForKey:BDSKHideGroupCountKey]) { + // the smart group counts were not updated, so we need to do that now; this will get back to us, so just return here. + [self updateSmartGroupsCountAndContent:NO]; + return; + } } // this is a hack to keep us from getting selection change notifications while sorting (which updates the TeX and attributed text previews) Modified: trunk/bibdesk/BibPref_Display.h =================================================================== --- trunk/bibdesk/BibPref_Display.h 2009-03-20 04:58:14 UTC (rev 14819) +++ trunk/bibdesk/BibPref_Display.h 2009-03-20 10:52:27 UTC (rev 14820) @@ -47,6 +47,8 @@ IBOutlet NSButton *fontButton; IBOutlet NSTextField *ignoredSortTermsField; + + IBOutlet NSButton *displayGroupCountButton; IBOutlet NSButton *authorFirstNameButton; IBOutlet NSButton *authorAbbreviateButton; @@ -57,6 +59,8 @@ - (IBAction)changeAuthorDisplay:(id)sender; +- (IBAction)changeDisplayGroupCount:(id)sender; + - (IBAction)changeIgnoredSortTerms:(id)sender; - (IBAction)changeFont:(id)sender; Modified: trunk/bibdesk/BibPref_Display.m =================================================================== --- trunk/bibdesk/BibPref_Display.m 2009-03-20 04:58:14 UTC (rev 14819) +++ trunk/bibdesk/BibPref_Display.m 2009-03-20 10:52:27 UTC (rev 14820) @@ -60,6 +60,7 @@ - (void)awakeFromNib{ [previewMaxNumberComboBox addItemsWithObjectValues:[NSArray arrayWithObjects:NSLocalizedString(@"All", @"Display all items in preview"), @"1", @"5", @"10", @"20", nil]]; [ignoredSortTermsField setFormatter:[[[BDSKStringArrayFormatter alloc] init] autorelease]]; + [displayGroupCountButton setState:[sud boolForKey:BDSKHideGroupCountKey] ? NSOffState : NSOnState]; [self updatePreviewDisplayUI]; [self updateAuthorNameDisplayUI]; [self updateSortWordsDisplayUI]; @@ -99,6 +100,10 @@ CFNotificationCenterPostNotification(CFNotificationCenterGetLocalCenter(), CFSTR("BDSKIgnoredSortTermsChangedNotification"), NULL, NULL, FALSE); } +- (IBAction)changeDisplayGroupCount:(id)sender{ + [sud setBool:[sender state] == NSOffState forKey:BDSKHideGroupCountKey]; +} + - (IBAction)changeAuthorDisplay:(id)sender; { int itemMask = 1 << [sender tag]; Modified: trunk/bibdesk/English.lproj/BibPref_Display.nib/classes.nib =================================================================== (Binary files differ) Modified: trunk/bibdesk/English.lproj/BibPref_Display.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/bibdesk/Preferences.plist =================================================================== --- trunk/bibdesk/Preferences.plist 2009-03-20 04:58:14 UTC (rev 14819) +++ trunk/bibdesk/Preferences.plist 2009-03-20 10:52:27 UTC (rev 14820) @@ -276,6 +276,8 @@ <string>LucidaGrande</string> <key>BDSKGroupTableViewFontSizeKey</key> <real>0</real> + <key>BDSKHideGroupCount</key> + <false/> <key>BDSKMainTableViewFontNameKey</key> <string>LucidaGrande</string> <key>BDSKMainTableViewFontSizeKey</key> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |