From: <ho...@us...> - 2006-03-07 18:45:43
|
Revision: 5774 Author: hofman Date: 2006-03-07 10:45:19 -0800 (Tue, 07 Mar 2006) ViewCVS: http://svn.sourceforge.net/bibdesk/?rev=5774&view=rev Log Message: ----------- Handle font changes for tableViews in our NSTableViewcategory. Pref keys and notification names can be provided by the delegate or the tableView. Modified Paths: -------------- trunk/bibdesk/BDSKDragTableView.h trunk/bibdesk/BDSKDragTableView.m trunk/bibdesk/BDSKGroupTableView.h trunk/bibdesk/BDSKGroupTableView.m trunk/bibdesk/BibDocument.h trunk/bibdesk/BibDocument.m trunk/bibdesk/BibDocument_DataSource.m trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj trunk/bibdesk/NSTableView_BDSKExtensions.h trunk/bibdesk/NSTableView_BDSKExtensions.m Modified: trunk/bibdesk/BDSKDragTableView.h =================================================================== --- trunk/bibdesk/BDSKDragTableView.h 2006-03-07 15:44:11 UTC (rev 5773) +++ trunk/bibdesk/BDSKDragTableView.h 2006-03-07 18:45:19 UTC (rev 5774) @@ -51,7 +51,6 @@ } - (void)removeAllTableColumns; -- (void)changeFont:(id)sender; @end @interface NSObject (BDSKDragTableViewDataSource) Modified: trunk/bibdesk/BDSKDragTableView.m =================================================================== --- trunk/bibdesk/BDSKDragTableView.m 2006-03-07 15:44:11 UTC (rev 5773) +++ trunk/bibdesk/BDSKDragTableView.m 2006-03-07 18:45:19 UTC (rev 5774) @@ -39,6 +39,7 @@ @implementation BDSKDragTableView - (void)awakeFromNib{ + [super awakeFromNib]; // this updates the font typeAheadHelper = [[OATypeAheadSelectionHelper alloc] init]; [typeAheadHelper setDataSource:[self delegate]]; // which is the bibdocument [typeAheadHelper setCyclesSimilarResults:YES]; @@ -129,24 +130,4 @@ [[self dataSource] tableView:self concludeDragOperation:operation]; } -- (void)changeFont:(id)sender { - NSFontManager *fontManager = [NSFontManager sharedFontManager]; - NSFont *selectedFont = [fontManager selectedFont]; - if (selectedFont == nil) - selectedFont = [NSFont systemFontOfSize:[NSFont systemFontSize]]; - NSFont *font = [fontManager convertFont:selectedFont]; - - [[OFPreferenceWrapper sharedPreferenceWrapper] setObject:[font fontName] forKey:BDSKTableViewFontKey]; - [[OFPreferenceWrapper sharedPreferenceWrapper] setFloat:[font pointSize] forKey:BDSKTableViewFontSizeKey]; - - [[NSNotificationCenter defaultCenter] postNotificationName:BDSKTableViewFontChangedNotification object:nil]; -} - -- (BOOL)becomeFirstResponder{ - NSString *fontName = [[OFPreferenceWrapper sharedPreferenceWrapper] objectForKey:BDSKTableViewFontKey]; - float fontSize = [[OFPreferenceWrapper sharedPreferenceWrapper] floatForKey:BDSKTableViewFontSizeKey]; - [[NSFontManager sharedFontManager] setSelectedFont:[NSFont fontWithName:fontName size:fontSize] isMultiple:NO]; - return [super becomeFirstResponder]; -} - @end Modified: trunk/bibdesk/BDSKGroupTableView.h =================================================================== --- trunk/bibdesk/BDSKGroupTableView.h 2006-03-07 15:44:11 UTC (rev 5773) +++ trunk/bibdesk/BDSKGroupTableView.h 2006-03-07 18:45:19 UTC (rev 5774) @@ -52,7 +52,6 @@ OATypeAheadSelectionHelper *typeAheadHelper; } - (void)handleClipViewFrameChangedNotification:(NSNotification *)note; -- (void)handleFontChangedNotification:(NSNotification *)note; - (void)updateHighlights; - (void)changeFont:(id)sender; Modified: trunk/bibdesk/BDSKGroupTableView.m =================================================================== --- trunk/bibdesk/BDSKGroupTableView.m 2006-03-07 15:44:11 UTC (rev 5773) +++ trunk/bibdesk/BDSKGroupTableView.m 2006-03-07 18:45:19 UTC (rev 5774) @@ -44,6 +44,7 @@ #import "BDSKHeaderPopUpButtonCell.h" #import "NSBezierPath_BDSKExtensions.h" #import "BibDocument_Groups.h" +#import "NSTableView_BDSKExtensions.h" @implementation BDSKGroupTableView @@ -70,13 +71,8 @@ [self setHeaderView:customTableHeaderView]; [customTableHeaderView release]; - [self handleFontChangedNotification:nil]; + [super awakeFromNib]; // this updates the font - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(handleFontChangedNotification:) - name:BDSKTableViewFontChangedNotification - object:nil]; - OBPRECONDITION([[self enclosingScrollView] contentView]); [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleClipViewFrameChangedNotification:) @@ -118,11 +114,16 @@ [[self cornerView] setNeedsDisplay:YES]; } -- (void)handleFontChangedNotification:(NSNotification *)note +- (void)tableViewFontChanged:(NSNotification *)note { - // The font we're using now - NSFont *font = [NSFont fontWithName:[[OFPreferenceWrapper sharedPreferenceWrapper] objectForKey:BDSKTableViewFontKey] - size:[[OFPreferenceWrapper sharedPreferenceWrapper] floatForKey:BDSKTableViewFontSizeKey]]; + // overwrite this as we want to change the intercellspacing + NSString *fontNamePrefKey = [self fontNamePreferenceKey]; + NSString *fontSizePrefKey = [self fontSizePreferenceKey]; + if (fontNamePrefKey == nil || fontSizePrefKey == nil) + return; + NSString *fontName = [[OFPreferenceWrapper sharedPreferenceWrapper] objectForKey:fontNamePrefKey]; + float fontSize = [[OFPreferenceWrapper sharedPreferenceWrapper] floatForKey:fontSizePrefKey]; + NSFont *font = [NSFont fontWithName:fontName size:fontSize]; [self setFont:font]; // let the cell calculate the row height for us, so the text baseline isn't fouled up Modified: trunk/bibdesk/BibDocument.h =================================================================== --- trunk/bibdesk/BibDocument.h 2006-03-07 15:44:11 UTC (rev 5773) +++ trunk/bibdesk/BibDocument.h 2006-03-07 18:45:19 UTC (rev 5774) @@ -985,23 +985,7 @@ @param notification (description) */ - (void)handleBibItemAddDelNotification:(NSNotification *)notification; -/*! - @method handleFontChangedNotification - @abstract responds to font change notification by calling setTableFont - @discussion - -*/ -- (void)handleFontChangedNotification:(NSNotification *)notification; - - /*! - @method setTableFont - @abstract sets the font of the tableView. - @discussion - - */ -- (void)setTableFont; - /*! @method handleBibItemChangedNotification Modified: trunk/bibdesk/BibDocument.m =================================================================== --- trunk/bibdesk/BibDocument.m 2006-03-07 15:44:11 UTC (rev 5773) +++ trunk/bibdesk/BibDocument.m 2006-03-07 18:45:19 UTC (rev 5774) @@ -86,6 +86,7 @@ #import "BDSKPreviewMessageQueue.h" #import "NSArray_BDSKExtensions.h" #import "NSTextView_BDSKExtensions.h" +#import "NSTableView_BDSKExtensions.h" #import "BDSKWebOfScienceParser.h" #import "NSMutableDictionary+ThreadSafety.h" #import "NSSet_BDSKExtensions.h" @@ -140,12 +141,6 @@ promisedPboardTypes = [[NSMutableDictionary alloc] initWithCapacity:2]; - // Register as observer of font change events. - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(handleFontChangedNotification:) - name:BDSKTableViewFontChangedNotification - object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handlePreviewDisplayChangedNotification:) name:BDSKPreviewDisplayChangedNotification @@ -271,9 +266,6 @@ showingCustomCiteDrawer = NO; - // finally, make sure the font is correct initially: - [self setTableFont]; - // unfortunately we cannot set this in IB [actionMenuButton setArrowImage:[NSImage imageNamed:@"ArrowPointingDown"]]; [actionMenuButton setShowsMenuWhenIconClicked:YES]; @@ -366,7 +358,6 @@ [tableView removeAllTableColumns]; [self setupTableColumns]; // calling it here mostly just makes sure that the menu is set up. [self sortPubsByDefaultColumn]; - [self setTableFont]; } - (void)addWindowController:(NSWindowController *)windowController{ @@ -2407,7 +2398,7 @@ [tableView addTableColumn:tc]; } - [self setTableFont]; + [tableView tableViewFontChanged:nil]; } - (IBAction)dismissAddFieldSheet:(id)sender{ @@ -2565,10 +2556,6 @@ [self displayPreviewForItems:[self selectedPublications]]; } -- (void)handleFontChangedNotification:(NSNotification *)notification{ - [self setTableFont]; -} - - (void)handleBibItemAddDelNotification:(NSNotification *)notification{ // NB: this method gets called for setPublications: also, so checking for AddItemNotification might not do what you expect if([[notification name] isEqualToString:BDSKDocDelItemNotification] == NO) @@ -2805,21 +2792,6 @@ [statusStr release]; } -- (void)setTableFont{ - // The font we're using now - NSFont *font = [NSFont fontWithName:[[OFPreferenceWrapper sharedPreferenceWrapper] objectForKey:BDSKTableViewFontKey] - size:[[OFPreferenceWrapper sharedPreferenceWrapper] floatForKey:BDSKTableViewFontSizeKey]]; - - [tableView setFont:font]; - - NSLayoutManager *lm = [[NSLayoutManager alloc] init]; - [tableView setRowHeight:([lm defaultLineHeightForFont:font] + 2.0f)]; - [lm release]; - - [tableView tile]; - [tableView reloadData]; // othewise the change isn't immediately visible -} - - (BOOL)highlightItemForPartialItem:(NSDictionary *)partialItem{ // make sure we can see the publication, if it's still here Modified: trunk/bibdesk/BibDocument_DataSource.m =================================================================== --- trunk/bibdesk/BibDocument_DataSource.m 2006-03-07 15:44:11 UTC (rev 5773) +++ trunk/bibdesk/BibDocument_DataSource.m 2006-03-07 18:45:19 UTC (rev 5774) @@ -305,6 +305,27 @@ return YES; } +- (NSString *)tableViewFontNamePreferenceKey:(NSTableView *)tv { + if (tv == tableView || tv == groupTableView) + return BDSKTableViewFontKey; + else + return nil; +} + +- (NSString *)tableViewFontSizePreferenceKey:(NSTableView *)tv { + if (tv == tableView || tv == groupTableView) + return BDSKTableViewFontSizeKey; + else + return nil; +} + +- (NSString *)tableViewFontChangedNotificationName:(NSTableView *)tv { + if (tv == tableView || tv == groupTableView) + return BDSKTableViewFontChangedNotification; + else + return nil; +} + #pragma mark TableView dragging source // for 10.3 compatibility and OmniAppKit dataSource methods Modified: trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj =================================================================== --- trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj 2006-03-07 15:44:11 UTC (rev 5773) +++ trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj 2006-03-07 18:45:19 UTC (rev 5774) @@ -1045,7 +1045,7 @@ 3DFF35600816B55B0052F37C /* forward_small.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = forward_small.tiff; path = Images/forward_small.tiff; sourceTree = "<group>"; }; 3DFF35620816B5780052F37C /* reload_small.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = reload_small.tiff; path = Images/reload_small.tiff; sourceTree = "<group>"; }; 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; }; - 8D1107320486CEB800E47090 /* BibDesk.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = BibDesk.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 8D1107320486CEB800E47090 /* BibDesk.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BibDesk.app; sourceTree = BUILT_PRODUCTS_DIR; }; CE1A7ED4090BDEB600ACC864 /* BDSKHeaderPopUpButtonCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BDSKHeaderPopUpButtonCell.h; sourceTree = "<group>"; }; CE1A7ED5090BDEB600ACC864 /* BDSKHeaderPopUpButtonCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BDSKHeaderPopUpButtonCell.m; sourceTree = "<group>"; }; CE1A7EDD090BDF1C00ACC864 /* BDSKHeaderPopUpButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BDSKHeaderPopUpButton.h; sourceTree = "<group>"; }; Modified: trunk/bibdesk/NSTableView_BDSKExtensions.h =================================================================== --- trunk/bibdesk/NSTableView_BDSKExtensions.h 2006-03-07 15:44:11 UTC (rev 5773) +++ trunk/bibdesk/NSTableView_BDSKExtensions.h 2006-03-07 18:45:19 UTC (rev 5774) @@ -44,8 +44,22 @@ - (void)replacementReloadData; - (void)replacementNoteNumberOfRowsChanged; - (void)rebuildToolTips; +- (BOOL)replacementBecomeFirstResponder; +- (void)replacementDealloc; +- (void)awakeFromNib; +- (void)changeFont:(id)sender; +- (void)tableViewFontChanged:(NSNotification *)notification; +- (NSString *)fontNamePreferenceKey; +- (NSString *)fontSizePreferenceKey; +- (NSString *)fontChangedNotificationName; @end @interface NSObject (NSTableBDSKExtendedDataSource) - (NSString *)tableView:(NSTableView *)aTableView toolTipForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex; @end + +@interface NSObject (NSTableBDSKExtendedDelegate) +- (NSString *)tableViewFontNamePreferenceKey:(NSTableView *)aTableView; +- (NSString *)tableViewFontSizePreferenceKey:(NSTableView *)aTableView; +- (NSString *)tableViewFontChangedNotificationName:(NSTableView *)aTableView; +@end Modified: trunk/bibdesk/NSTableView_BDSKExtensions.m =================================================================== --- trunk/bibdesk/NSTableView_BDSKExtensions.m 2006-03-07 15:44:11 UTC (rev 5773) +++ trunk/bibdesk/NSTableView_BDSKExtensions.m 2006-03-07 18:45:19 UTC (rev 5774) @@ -38,18 +38,23 @@ #import "NSTableView_BDSKExtensions.h" #import "BDSKFieldEditor.h" +#import "BibPrefController.h" @implementation NSTableView (BDSKExtensions) static IMP originalSetDataSource; static IMP originalReloadData; static IMP originalNoteNumberOfRowsChanged; +static BOOL (*originalBecomeFirstResponder)(id self, SEL _cmd); +static IMP originalDealloc; + (void)didLoad; { originalSetDataSource = OBReplaceMethodImplementationWithSelector(self, @selector(setDataSource:), @selector(replacementSetDataSource:)); originalReloadData = OBReplaceMethodImplementationWithSelector(self, @selector(reloadData), @selector(replacementReloadData)); originalNoteNumberOfRowsChanged = OBReplaceMethodImplementationWithSelector(self, @selector(noteNumberOfRowsChanged), @selector(replacementNoteNumberOfRowsChanged)); + originalBecomeFirstResponder = (typeof(originalBecomeFirstResponder))OBReplaceMethodImplementationWithSelector(self, @selector(becomeFirstResponder), @selector(replacementBecomeFirstResponder)); + originalDealloc = OBReplaceMethodImplementationWithSelector(self, @selector(dealloc), @selector(replacementDealloc)); } - (BOOL)validateDelegatedMenuItem:(id<NSMenuItem>)menuItem defaultDataSourceSelector:(SEL)dataSourceSelector{ @@ -170,4 +175,93 @@ return nil; } +- (NSString *)fontNamePreferenceKey{ + if ([[self delegate] respondsToSelector:@selector(tableViewFontNamePreferenceKey:)]) + return [[self delegate] tableViewFontNamePreferenceKey:self]; + return nil; +} + +- (NSString *)fontSizePreferenceKey{ + if ([[self delegate] respondsToSelector:@selector(tableViewFontSizePreferenceKey:)]) + return [[self delegate] tableViewFontSizePreferenceKey:self]; + return nil; +} + +- (NSString *)fontChangedNotificationName{ + if ([[self delegate] respondsToSelector:@selector(tableViewFontChangedNotificationName:)]) + return [[self delegate] tableViewFontChangedNotificationName:self]; + return nil; +} + +- (BOOL)replacementBecomeFirstResponder { + NSString *fontNamePrefKey = [self fontNamePreferenceKey]; + NSString *fontSizePrefKey = [self fontSizePreferenceKey]; + if (fontNamePrefKey != nil && fontSizePrefKey != nil) { + NSString *fontName = [[OFPreferenceWrapper sharedPreferenceWrapper] objectForKey:fontNamePrefKey]; + float fontSize = [[OFPreferenceWrapper sharedPreferenceWrapper] floatForKey:fontSizePrefKey]; + [[NSFontManager sharedFontManager] setSelectedFont:[NSFont fontWithName:fontName size:fontSize] isMultiple:NO]; + } + return originalBecomeFirstResponder(self, _cmd); +} + +- (void)replacementDealloc { + NSString *fontChangedNoteName = [self fontChangedNotificationName]; + if (fontChangedNoteName != nil) { + [[NSNotificationCenter defaultCenter] removeObserver:self]; + } + originalDealloc(self, _cmd); +} + +- (void)awakeFromNib { + // there was no original awakeFromNib + NSString *fontChangedNoteName = [self fontChangedNotificationName]; + if (fontChangedNoteName != nil) { + [self tableViewFontChanged:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(tableViewFontChanged:) + name:fontChangedNoteName + object:nil]; + } +} + +- (void)changeFont:(id)sender { + NSString *fontNamePrefKey = [self fontNamePreferenceKey]; + NSString *fontSizePrefKey = [self fontSizePreferenceKey]; + if (fontNamePrefKey == nil || fontSizePrefKey == nil) + return; + NSFontManager *fontManager = [NSFontManager sharedFontManager]; + NSFont *selectedFont = [fontManager selectedFont]; + if (selectedFont == nil) + selectedFont = [NSFont systemFontOfSize:[NSFont systemFontSize]]; + NSFont *font = [fontManager convertFont:selectedFont]; + + [[OFPreferenceWrapper sharedPreferenceWrapper] setObject:[font fontName] forKey:fontNamePrefKey]; + [[OFPreferenceWrapper sharedPreferenceWrapper] setFloat:[font pointSize] forKey:fontSizePrefKey]; + + NSString *fontChangedNoteName = [self fontChangedNotificationName]; + if (fontChangedNoteName != nil) + [[NSNotificationCenter defaultCenter] postNotificationName:fontChangedNoteName object:self]; + else + [self tableViewFontChanged:nil]; +} + +- (void)tableViewFontChanged:(NSNotification *)notification { + NSString *fontNamePrefKey = [self fontNamePreferenceKey]; + NSString *fontSizePrefKey = [self fontSizePreferenceKey]; + if (fontNamePrefKey == nil || fontSizePrefKey == nil) + return; + NSString *fontName = [[OFPreferenceWrapper sharedPreferenceWrapper] objectForKey:fontNamePrefKey]; + float fontSize = [[OFPreferenceWrapper sharedPreferenceWrapper] floatForKey:fontSizePrefKey]; + NSFont *font = [NSFont fontWithName:fontName size:fontSize]; + + [self setFont:font]; + + NSLayoutManager *lm = [[NSLayoutManager alloc] init]; + [self setRowHeight:([lm defaultLineHeightForFont:font] + 2.0f)]; + [lm release]; + + [self tile]; + [self reloadData]; // othewise the change isn't immediately visible +} + @end This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |