From: Andrew M. <fit...@us...> - 2006-08-29 01:26:55
|
Update of /cvsroot/radmind/radmind-assistant/rte In directory sc8-pr-cvs9.sourceforge.net:/tmp/cvs-serv26258 Modified Files: RXAppController.h RXAppController.m Log Message: Filter support. Index: RXAppController.h =================================================================== RCS file: /cvsroot/radmind/radmind-assistant/rte/RXAppController.h,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** RXAppController.h 7 Mar 2005 14:53:46 -0000 1.4 --- RXAppController.h 29 Aug 2006 01:26:52 -0000 1.5 *************** *** 29,35 **** --- 29,38 ---- @interface RXAppController : NSObject { + IBOutlet NSMenuItem *filtersMenuItem; + @private RXPrefs *prefController; NSString *_rteUserName; + NSMutableArray *_rteFilters; } *************** *** 37,40 **** --- 40,50 ---- - ( NSString * )sessionUserName; + - ( NSMutableArray * )readTranscriptFilters; + - ( NSMutableArray * )transcriptFilters; + - ( void )createFilterMenu; + + @end + @interface NSObject(RTEApplicationFilterDelegate) + - ( NSDictionary * )filterWithTag: ( int )tag; @end Index: RXAppController.m =================================================================== RCS file: /cvsroot/radmind/radmind-assistant/rte/RXAppController.m,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** RXAppController.m 7 Mar 2005 14:53:46 -0000 1.6 --- RXAppController.m 29 Aug 2006 01:26:52 -0000 1.7 *************** *** 24,27 **** --- 24,28 ---- #import "RXAppController.h" + #import "UMArrayController.h" #include <CoreFoundation/CoreFoundation.h> *************** *** 36,41 **** { self = [ super init ]; ! prefController = nil; ! _rteUserName = nil; return( self ); --- 37,44 ---- { self = [ super init ]; ! if ( self ) { ! prefController = nil; ! _rteUserName = nil; ! _rteFilters = nil; } return( self ); *************** *** 130,134 **** --- 133,304 ---- _rteUserName = [[ NSString stringWithUTF8String: pw->pw_name ] retain ]; } + + _rteFilters = [[ self readTranscriptFilters ] retain ]; + [ self createFilterMenu ]; + } + + #pragma mark Trancript Filter handling + - ( NSMutableArray * )transcriptFilters + { + return( _rteFilters ); + } + + - ( NSMutableArray * )readTranscriptFilters + { + NSMutableDictionary *filter; + NSMutableArray *transcriptFilters = nil; + NSArray *tmp; + NSString *path; + unsigned int i, tag = 0; + + /* first check app bundle, read any available filters */ + if (( tmp = [[ NSBundle mainBundle ] + pathsForResourcesOfType: @"transcriptFilter" + inDirectory: @"Filters" ] ) != nil ) { + for ( i = 0; i < [ tmp count ]; i++, tag++ ) { + if (( filter = [ NSMutableDictionary dictionaryWithContentsOfFile: + [ tmp objectAtIndex: i ]] ) == nil ) { + NSLog( @"Couldn't read %@, skipping", + [ tmp objectAtIndex: i ] ); + continue; + } + + /* set tag for menu item */ + [ filter setObject: [ NSNumber numberWithInt: tag ] + forKey: @"menuTag" ]; + + /* user cannot modify these */ + [ filter setObject: [ NSNumber numberWithBool: YES ] + forKey: @"immutable" ]; + + if ( transcriptFilters == nil ) { + transcriptFilters = [ NSMutableArray array ]; + } + [ transcriptFilters addObject: filter ]; + } + } + + /* then check the global App Support folder */ + if ( floor( NSAppKitVersionNumber ) <= NSAppKitVersionNumber10_3 ) { + /* 10.3 doesn't have NSApplicationSupportDirectory defined */ + tmp = [ NSArray arrayWithObject: @"/Library/Application Support" ]; + } else { + tmp = NSSearchPathForDirectoriesInDomains( + NSApplicationSupportDirectory, NSLocalDomainMask, YES ); + } + if ( tmp ) { + path = [[ tmp objectAtIndex: 0 ] stringByAppendingPathComponent: + @"Radmind Transcript Editor" ]; + path = [ path stringByAppendingPathComponent: @"Filters" ]; + tmp = [[ NSFileManager defaultManager ] + directoryContentsAtPath: path ]; + for ( i = 0; i < [ tmp count ]; i++ ) { + if (( filter = [ NSMutableDictionary dictionaryWithContentsOfFile: + [ tmp objectAtIndex: i ]] ) == nil ) { + NSLog( @"Couldn't read %@, skipping", + [ tmp objectAtIndex: i ] ); + continue; + } + + /* user cannot modify these */ + [ filter setObject: [ NSNumber numberWithBool: YES ] + forKey: @"immutable" ]; + + if ( transcriptFilters == nil ) { + transcriptFilters = [ NSMutableArray array ]; + } + [ transcriptFilters addObject: filter ]; + } + } + + /* finally, check user App Support folder */ + if ( floor( NSAppKitVersionNumber ) <= NSAppKitVersionNumber10_3 ) { + /* 10.3 doesn't have NSApplicationSupportDirectory defined */ + tmp = [ NSArray arrayWithObject: + [ @"~/Library/Application Support" stringByExpandingTildeInPath ]]; + } else { + tmp = NSSearchPathForDirectoriesInDomains( + NSApplicationSupportDirectory, NSUserDomainMask, YES ); + } + if ( tmp ) { + path = [[ tmp objectAtIndex: 0 ] stringByAppendingPathComponent: + @"Radmind Transcript Editor" ]; + path = [ path stringByAppendingPathComponent: @"Filters" ]; + tmp = [[ NSFileManager defaultManager ] + directoryContentsAtPath: path ]; + for ( i = 0; i < [ tmp count ]; i++ ) { + if (( filter = [ NSMutableDictionary dictionaryWithContentsOfFile: + [ tmp objectAtIndex: i ]] ) == nil ) { + NSLog( @"Couldn't read %@, skipping", + [ tmp objectAtIndex: i ] ); + continue; + } + + if ( transcriptFilters == nil ) { + transcriptFilters = [ NSMutableArray array ]; + } + [ transcriptFilters addObject: filter ]; + } + } + + /* XXX sort filters */ + + return( transcriptFilters ); + } + + - ( NSMutableDictionary * )filterWithTag: ( int )tag + { + unsigned int i; + + for ( i = 0; i < [[ self transcriptFilters ] count ]; i++ ) { + if ( [[[[ self transcriptFilters ] objectAtIndex: i ] + objectForKey: @"menuTag" ] intValue ] == tag ) { + break; + } + } + if ( i >= [[ self transcriptFilters ] count ] ) { + return( nil ); + } + + return( [[ self transcriptFilters ] objectAtIndex: i ] ); + } + + - ( void )createFilterMenu + { + NSMenu *newFilterMenu; + NSMenuItem *item; + NSMutableArray *filters = [ self transcriptFilters ]; + NSString *title; + unsigned int i; + + if ( filters == nil || [ filters count ] == 0 ) { + return; + } + + newFilterMenu = [[ NSMenu alloc ] initWithTitle: + NSLocalizedString( @"Filters", @"Filters" ) ]; + for ( i = 0; i < [ filters count ]; i++ ) { + title = [[ filters objectAtIndex: i ] objectForKey: @"filterName" ]; + if ( title == nil ) { + title = NSLocalizedString( @"Untitled Filter", @"Untitled Filter" ); + } + + item = [[ NSMenuItem alloc ] initWithTitle: title + action: @selector( applyFilterToTranscript: ) + keyEquivalent: @"" ]; + if ( item == nil ) { + NSLog( @"Couldn't create menu item with title %@", title ); + continue; + } + [ item setTag: [[[ filters objectAtIndex: i ] + objectForKey: @"menuTag" ] intValue ]]; + + [ newFilterMenu insertItem: item atIndex: i ]; + } + + [ filtersMenuItem setSubmenu: newFilterMenu ]; + [ newFilterMenu autorelease ]; } @end + \ No newline at end of file |