From: <ho...@us...> - 2006-08-30 15:26:58
|
Revision: 7608 http://svn.sourceforge.net/bibdesk/?rev=7608&view=rev Author: hofman Date: 2006-08-30 08:26:49 -0700 (Wed, 30 Aug 2006) Log Message: ----------- Simplify filtering of errors. Use singleton manager subclass instead of placeholder item for all errors. Modified Paths: -------------- trunk/bibdesk/BDSKErrorManager.h trunk/bibdesk/BDSKErrorManager.m trunk/bibdesk/BDSKErrorObjectController.h trunk/bibdesk/BDSKErrorObjectController.m trunk/bibdesk/English.lproj/BDSKErrorPanel.nib/keyedobjects.nib Modified: trunk/bibdesk/BDSKErrorManager.h =================================================================== --- trunk/bibdesk/BDSKErrorManager.h 2006-08-30 12:54:46 UTC (rev 7607) +++ trunk/bibdesk/BDSKErrorManager.h 2006-08-30 15:26:49 UTC (rev 7608) @@ -38,7 +38,7 @@ #import <Cocoa/Cocoa.h> -@class BDSKErrorObjectController, BDSKErrorEditor, BibDocument; +@class BDSKErrorObjectController, BDSKErrorObject, BDSKErrorEditor, BibDocument; @interface BDSKErrorManager : NSObject { BDSKErrorObjectController *errorController; @@ -49,8 +49,12 @@ int uniqueNumber; } ++ (id)allItemsErrorManager; + - (id)initWithDocument:(BibDocument *)aDocument; +- (BOOL)isAllItems; + - (BDSKErrorObjectController *)errorController; - (void)setErrorController:(BDSKErrorObjectController *)newController; @@ -72,4 +76,6 @@ - (void)removeEditor:(BDSKErrorEditor *)editor; - (void)removeClosedEditors; +- (BOOL)managesError:(BDSKErrorObject *)errObj; + @end Modified: trunk/bibdesk/BDSKErrorManager.m =================================================================== --- trunk/bibdesk/BDSKErrorManager.m 2006-08-30 12:54:46 UTC (rev 7607) +++ trunk/bibdesk/BDSKErrorManager.m 2006-08-30 15:26:49 UTC (rev 7608) @@ -38,12 +38,25 @@ #import "BDSKErrorManager.h" #import "BDSKErrorObjectController.h" +#import <BTParse/BDSKErrorObject.h> #import "BDSKErrorEditor.h" #import "BibDocument.h" +@interface BDSKAllItemsErrorManager : BDSKErrorManager @end + +static BDSKAllItemsErrorManager *allItemsErrorManager = nil; + + @implementation BDSKErrorManager ++ (id)allItemsErrorManager; +{ + if(allItemsErrorManager == nil) + allItemsErrorManager = [[BDSKAllItemsErrorManager alloc] init]; + return allItemsErrorManager; +} + - (id)initWithDocument:(BibDocument *)aDocument; { if(self = [super init]){ @@ -63,6 +76,8 @@ [super dealloc]; } +- (BOOL)isAllItems { return NO; } + - (BDSKErrorObjectController *)errorController; { return errorController; @@ -135,7 +150,6 @@ uniqueNumber = 0; while(manager = [mEnum nextObject]){ - if([manager isKindOfClass:[BDSKPlaceHolderFilterItem class]] || manager == self) continue; if([[manager documentDisplayName] isEqualToString:documentDisplayName]) uniqueNumber = MAX(uniqueNumber, [manager uniqueNumber] + 1); } @@ -189,4 +203,26 @@ } } +- (BOOL)managesError:(BDSKErrorObject *)errObj; +{ + return [[errObj editor] manager] == self; +} + @end + + +@implementation BDSKAllItemsErrorManager + +- (id)init; +{ + if(self = [super initWithDocument:nil]){ + documentDisplayName = [NSLocalizedString(@"All", @"All") retain]; + } + return self; +} + +- (BOOL)isAllItems{ return YES; } + +- (BOOL)managesError:(BDSKErrorObject *)errObj{ return YES; } + +@end Modified: trunk/bibdesk/BDSKErrorObjectController.h =================================================================== --- trunk/bibdesk/BDSKErrorObjectController.h 2006-08-30 12:54:46 UTC (rev 7607) +++ trunk/bibdesk/BDSKErrorObjectController.h 2006-08-30 15:26:49 UTC (rev 7608) @@ -100,32 +100,13 @@ #pragma mark - -@interface BDSKPlaceHolderFilterItem : NSObject { - NSString *displayName; -} -+ (BDSKPlaceHolderFilterItem *)allItemsPlaceHolderFilterItem; -+ (BDSKPlaceHolderFilterItem *)emptyItemsPlaceHolderFilterItem; -- (id)initWithDisplayName:(NSString *)name; -@end - -#pragma mark - - @interface BDSKFilteringArrayController : NSArrayController { - id filterValue; - NSString *filterKey; - NSString *warningKey; - NSString *warningValue; + BDSKErrorManager *filterManager; BOOL hideWarnings; } -- (id)filterValue; -- (void)setFilterValue:(id)newValue; -- (NSString *)filterKey; -- (void)setFilterKey:(NSString *)newKey; -- (NSString *)warningKey; -- (void)setWarningKey:(NSString *)newKey; -- (NSString *)warningValue; -- (void)setWarningValue:(NSString *)newKey; +- (BDSKErrorManager *)filterManager; +- (void)setFilterManager:(BDSKErrorManager *)manager; - (BOOL)hideWarnings; - (void)setHideWarnings:(BOOL)flag; Modified: trunk/bibdesk/BDSKErrorObjectController.m =================================================================== --- trunk/bibdesk/BDSKErrorObjectController.m 2006-08-30 12:54:46 UTC (rev 7607) +++ trunk/bibdesk/BDSKErrorObjectController.m 2006-08-30 15:26:49 UTC (rev 7608) @@ -78,7 +78,7 @@ errors = [[NSMutableArray alloc] initWithCapacity:10]; managers = [[NSMutableArray alloc] initWithCapacity:4]; - [managers addObject:[BDSKPlaceHolderFilterItem allItemsPlaceHolderFilterItem]]; + [managers addObject:[BDSKErrorManager allItemsErrorManager]]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleErrorNotification:) @@ -117,10 +117,7 @@ { [errorTableView setDoubleAction:@selector(gotoError:)]; - [errorsController setFilterKey:@"editor.manager"]; - [errorsController setFilterValue:[BDSKPlaceHolderFilterItem allItemsPlaceHolderFilterItem]]; - [errorsController setWarningKey:@"errorClassName"]; - [errorsController setWarningValue:BDSKParserWarningString]; + [errorsController setFilterManager:[BDSKErrorManager allItemsErrorManager]]; [errorsController setHideWarnings:NO]; } @@ -176,8 +173,8 @@ } - (void)removeManager:(BDSKErrorManager *)manager{ - if ([errorsController filterValue] == manager) - [errorsController setFilterValue:[BDSKPlaceHolderFilterItem allItemsPlaceHolderFilterItem]]; + if ([errorsController filterManager] == manager) + [errorsController setFilterManager:[BDSKErrorManager allItemsErrorManager]]; [manager setErrorController:nil]; [self removeObjectFromManagersAtIndex:[managers indexOfObject:manager]]; } @@ -189,7 +186,6 @@ BDSKErrorManager *manager = nil; while(manager = [mEnum nextObject]){ - if([manager isKindOfClass:[BDSKPlaceHolderFilterItem class]]) continue; if(document == [manager sourceDocument]) break; } @@ -266,12 +262,11 @@ while (index--) { manager = [managers objectAtIndex:index]; - if([manager isKindOfClass:[BDSKPlaceHolderFilterItem class]]) continue; if([manager sourceDocument] == document){ [manager setSourceDocument:nil]; if(shouldEdit) [[manager mainEditor] showWindow:self]; - }else if([manager sourceDocument] == nil){ + }else if([manager sourceDocument] == nil && [manager isAllItems] == NO){ [manager removeClosedEditors]; } } @@ -289,7 +284,6 @@ while (index--) { manager = [managers objectAtIndex:index]; - if([manager isKindOfClass:[BDSKPlaceHolderFilterItem class]]) continue; if([manager sourceDocument] == document){ [manager setSourceDocument:nil]; [manager removeClosedEditors]; @@ -453,54 +447,22 @@ @end #pragma mark - -#pragma mark Placeholder objects for filter menu - -@implementation BDSKPlaceHolderFilterItem - -static BDSKPlaceHolderFilterItem *allItemsPlaceHolderFilterItem = nil; -static BDSKPlaceHolderFilterItem *emptyItemsPlaceHolderFilterItem = nil; - -+ (void)initialize { - allItemsPlaceHolderFilterItem = [[BDSKPlaceHolderFilterItem alloc] initWithDisplayName:NSLocalizedString(@"All", @"All")]; - emptyItemsPlaceHolderFilterItem = [[BDSKPlaceHolderFilterItem alloc] initWithDisplayName:NSLocalizedString(@"Empty", @"Empty")]; -} - -+ (BDSKPlaceHolderFilterItem *)allItemsPlaceHolderFilterItem { return allItemsPlaceHolderFilterItem; }; -+ (BDSKPlaceHolderFilterItem *)emptyItemsPlaceHolderFilterItem { return emptyItemsPlaceHolderFilterItem; }; - -- (id)valueForUndefinedKey:(NSString *)keyPath { - return displayName; -} - -- (id)initWithDisplayName:(NSString *)name { - if (self = [super init]) { - displayName = [name copy]; - } - return self; -} - -@end - -#pragma mark - #pragma mark Array controller for error objects @implementation BDSKFilteringArrayController - (NSArray *)arrangeObjects:(NSArray *)objects { - BOOL filterByKey = (filterValue != nil && filterValue != [BDSKPlaceHolderFilterItem allItemsPlaceHolderFilterItem] && [NSString isEmptyString:filterKey] == NO); - BOOL filterWarnings = (hideWarnings == YES && [NSString isEmptyString:warningKey] == NO && [NSString isEmptyString:warningValue] == NO); - - if(filterByKey || filterWarnings){ + if(hideWarnings || filterManager){ NSMutableArray *matchedObjects = [NSMutableArray arrayWithCapacity:[objects count]]; NSEnumerator *itemEnum = [objects objectEnumerator]; id item; while (item = [itemEnum nextObject]) { - id value = [item valueForKeyPath:filterKey]; - if ((filterByKey == NO || (filterValue == [BDSKPlaceHolderFilterItem emptyItemsPlaceHolderFilterItem] && value == nil) || [value isEqual:filterValue]) && - (filterWarnings == NO || [warningValue isEqual:[item valueForKey:warningKey]] == NO) ) { - [matchedObjects addObject:item]; - } + if(filterManager && [filterManager managesError:item] == NO) + continue; + if(hideWarnings && [BDSKParserWarningString isEqual:[item valueForKey:@"errorClassName"]]) + continue; + [matchedObjects addObject:item]; } objects = matchedObjects; @@ -509,59 +471,22 @@ } - (void)dealloc { - [self setFilterValue: nil]; - [self setFilterKey: nil]; + [self setFilterManager: nil]; [super dealloc]; } -- (id)filterValue { - return filterValue; +- (BDSKErrorManager *)filterManager { + return filterManager; } -- (void)setFilterValue:(id)newValue { - if (filterValue != newValue) { - [filterValue autorelease]; - filterValue = [newValue retain]; +- (void)setFilterManager:(BDSKErrorManager *)manager { + if (filterManager != manager) { + [filterManager autorelease]; + filterManager = [manager retain]; [self rearrangeObjects]; } } -- (NSString *)filterKey { - return [[filterKey retain] autorelease]; -} - -- (void)setFilterKey:(NSString *)newKey { - if (filterKey != newKey) { - [filterKey release]; - filterKey = [newKey retain]; - [self rearrangeObjects]; - } -} - -- (NSString *)warningKey { - return [[warningKey retain] autorelease]; -} - -- (void)setWarningKey:(NSString *)newKey { - if (warningKey != newKey) { - [warningKey autorelease]; - warningKey = [newKey retain]; - [self rearrangeObjects]; - } -} - -- (NSString *)warningValue { - return [[warningValue retain] autorelease]; -} - -- (void)setWarningValue:(NSString *)newValue { - if (warningValue != newValue) { - [warningValue autorelease]; - warningValue = [newValue retain]; - [self rearrangeObjects]; - } -} - - (BOOL)hideWarnings { return hideWarnings; } Modified: trunk/bibdesk/English.lproj/BDSKErrorPanel.nib/keyedobjects.nib =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |