From: <ho...@us...> - 2006-05-31 12:05:31
|
Revision: 6775 Author: hofman Date: 2006-05-31 05:05:04 -0700 (Wed, 31 May 2006) ViewCVS: http://svn.sourceforge.net/bibdesk/?rev=6775&view=rev Log Message: ----------- Initial commit of new object files for custom document controller subclass. Code copied from appController files. Modified Paths: -------------- trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj Added Paths: ----------- trunk/bibdesk/BDSKDocumentController.h trunk/bibdesk/BDSKDocumentController.m Added: trunk/bibdesk/BDSKDocumentController.h =================================================================== --- trunk/bibdesk/BDSKDocumentController.h (rev 0) +++ trunk/bibdesk/BDSKDocumentController.h 2006-05-31 12:05:04 UTC (rev 6775) @@ -0,0 +1,83 @@ +// BDSKDocumentController.h + +// Created by Christiaan Hofman on 5/31/06. +/* + This software is Copyright (c) 2006 + Christiaan Hofman. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + - Neither the name of Christiaan Hofman nor the names of any + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +@interface BDSKDocumentController : NSDocumentController { + // stuff for the accessory view for openUsingFilter + IBOutlet NSView* openUsingFilterAccessoryView; + IBOutlet NSComboBox *openUsingFilterComboBox; + + // stuff for the accessory view for open text encoding + IBOutlet NSView *openTextEncodingAccessoryView; + IBOutlet NSPopUpButton *openTextEncodingPopupButton; + +} + +/*! + @method openDocumentUsingFilter: + @abstract Lets user specify a command-line to read from stdin and give us stdout. + @discussion \xC7discussion\xC8 + +*/ +- (IBAction)openDocumentUsingFilter:(id)sender; + +/*! + @method openBibTeXFile:withEncoding: + @abstract Imports a bibtex file with a specific encoding. Useful if there are non-ASCII characters in the file. + @discussion + */ +- (id)openBibTeXFile:(NSString *)filePath withEncoding:(NSStringEncoding)encoding; + +/*! + @method openRISFile:withEncoding: + @abstract Creates a new document with given RIS file and string encoding. + @discussion (comprehensive description) + @param filePath (description) + @param encoding (description) +*/ +- (id)openRISFile:(NSString *)filePath withEncoding:(NSStringEncoding)encoding; + +/*! + @method openBibTeXFileUsingPhonyCiteKeys:withEncoding: + @abstract Generates temporary cite keys in order to keep btparse from choking on files exported from Endnote or BookEnds. + @discussion Uses a regular expression to find and replace empty cite keys, according to a fairly limited pattern. + A new, untitled document is created, and a warning about the invalid temporary keys is shown after opening. + @param filePath The file to open + @param encoding File's character encoding +*/ +- (id)openBibTeXFileUsingPhonyCiteKeys:(NSString *)filePath withEncoding:(NSStringEncoding)encoding; + +@end Added: trunk/bibdesk/BDSKDocumentController.m =================================================================== --- trunk/bibdesk/BDSKDocumentController.m (rev 0) +++ trunk/bibdesk/BDSKDocumentController.m 2006-05-31 12:05:04 UTC (rev 6775) @@ -0,0 +1,398 @@ +// BDSKDocumentController.m + +// Created by Christiaan Hofman on 5/31/06. +/* + This software is Copyright (c) 2006 + Christiaan Hofman. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + - Neither the name of Christiaan Hofman nor the names of any + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import "BDSKDocumentController.h" +#import "BibPrefController.h" +#import <OmniBase/OmniBase.h> +#import <AGRegEx/AGRegEx.h> +#import "BDSKStringEncodingManager.h" +#import "BibAppController.h" +#import "BibDocument.h" +#import "BDSKShellTask.h" +#import "NSArray_BDSKExtensions.h" +#import "BDAlias.h" +#import "NSWorkspace_BDSKExtensions.h" + + +@implementation BDSKDocumentController + +- (id)init +{ + if(self = [super init]){ + // @@ NSDocumentController autosave is 10.4 only + if([self respondsToSelector:@selector(setAutosavingDelay:)] && [[OFPreferenceWrapper sharedPreferenceWrapper] boolForKey:BDSKShouldAutosaveDocumentKey]) + [self setAutosavingDelay:[[OFPreferenceWrapper sharedPreferenceWrapper] integerForKey:BDSKAutosaveTimeIntervalKey]]; + } + return self; +} + + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; + [super dealloc]; +} + +- (void)awakeFromNib{ + [openUsingFilterAccessoryView retain]; + [openTextEncodingPopupButton removeAllItems]; + [openTextEncodingPopupButton addItemsWithTitles:[[BDSKStringEncodingManager sharedEncodingManager] availableEncodingDisplayedNames]]; +} + +- (void)addDocument:(id)aDocument{ + [super addDocument:aDocument]; + [[NSNotificationCenter defaultCenter] postNotificationName:BDSKDocumentControllerAddDocumentNotification object:aDocument]; +} + +- (void)removeDocument:(id)aDocument{ + [aDocument retain]; + [super removeDocument:aDocument]; + [[NSNotificationCenter defaultCenter] postNotificationName:BDSKDocumentControllerRemoveDocumentNotification object:aDocument]; + [aDocument release]; +} + +- (void)openDocumentUsingPhonyCiteKeys:(BOOL)phony{ + NSOpenPanel *oPanel = [NSOpenPanel openPanel]; + [oPanel setAccessoryView:openTextEncodingAccessoryView]; + NSString *defaultEncName = [[BDSKStringEncodingManager sharedEncodingManager] displayedNameForStringEncoding:[[OFPreferenceWrapper sharedPreferenceWrapper] integerForKey:BDSKDefaultStringEncodingKey]]; + [openTextEncodingPopupButton selectItemWithTitle:defaultEncName]; + + NSArray *types = (phony ? [NSArray arrayWithObject:@"bib"] : [NSArray arrayWithObjects:@"bib", @"fcgi", @"ris", nil]); + + int result = [oPanel runModalForDirectory:nil + file:nil + types:types]; + id document = nil; + if (result == NSOKButton) { + NSString *fileToOpen = [oPanel filename]; + NSString *fileType = [fileToOpen pathExtension]; + NSStringEncoding encoding = [[BDSKStringEncodingManager sharedEncodingManager] stringEncodingForDisplayedName:[openTextEncodingPopupButton titleOfSelectedItem]]; + + if([fileType isEqualToString:@"bib"] && !phony){ + document = [self openBibTeXFile:fileToOpen withEncoding:encoding]; + } else if([fileType isEqualToString:@"ris"] || [fileType isEqualToString:@"fcgi"]){ + document = [self openRISFile:fileToOpen withEncoding:encoding]; + } else if([fileType isEqualToString:@"bib"] && phony){ + document = [self openBibTeXFileUsingPhonyCiteKeys:fileToOpen withEncoding:encoding]; + } else { + // handle other types in the usual way + // This ends up calling NSDocumentController makeDocumentWithContentsOfFile:ofType: + // which calls NSDocument (here, most likely BibDocument) initWithContentsOfFile:ofType: + OBASSERT_NOT_REACHED("unimplemented file type"); + document = [self openDocumentWithContentsOfFile:fileToOpen display:YES]; + } + [document showWindows]; + // @@ If the document is created as untitled and then loaded, the smart groups don't get updated at load; if you use Open Recent or the Finder, they are updated correctly (those call through to openDocumentWithContentsOfURL:display:error:, which may do something different with updating). + if([document respondsToSelector:@selector(updateAllSmartGroups)]) + [document performSelector:@selector(updateAllSmartGroups)]; + } + +} + +- (IBAction)openDocument:(id)sender{ + [self openDocumentUsingPhonyCiteKeys:NO]; +} + +- (IBAction)importDocumentUsingPhonyCiteKeys:(id)sender{ + [self openDocumentUsingPhonyCiteKeys:YES]; +} + +- (void)noteNewRecentDocument:(NSDocument *)aDocument{ + + if(! [aDocument isKindOfClass:[BibDocument class]]){ + // we don't worry about string encodings for BibLibrary files. + return; + } + + NSStringEncoding encoding = [(BibDocument *)aDocument documentStringEncoding]; + + if(encoding == NSASCIIStringEncoding || encoding == [[OFPreferenceWrapper sharedPreferenceWrapper] integerForKey:BDSKDefaultStringEncodingKey]){ + // NSLog(@"adding to recents list"); + [super noteNewRecentDocument:aDocument]; // only add it to the list of recent documents if it can be opened without manually selecting an encoding + } +} + +- (IBAction)openDocumentUsingFilter:(id)sender +{ + int result; + NSString *fileToOpen = nil; + NSString *shellCommand = nil; + NSString *filterOutput = nil; + BibDocument *bibDoc = nil; + NSString *fileInputString = nil; + + NSOpenPanel *oPanel = [NSOpenPanel openPanel]; + [oPanel setAllowsMultipleSelection:NO]; + + NSString *defaultEncName = [[BDSKStringEncodingManager sharedEncodingManager] displayedNameForStringEncoding:[[OFPreferenceWrapper sharedPreferenceWrapper] integerForKey:BDSKDefaultStringEncodingKey]]; + [openTextEncodingPopupButton selectItemWithTitle:defaultEncName]; + [openUsingFilterAccessoryView addSubview:openTextEncodingAccessoryView]; + [oPanel setAccessoryView:openUsingFilterAccessoryView]; + + NSSet *uniqueCommandHistory = [NSSet setWithArray:[[OFPreferenceWrapper sharedPreferenceWrapper] stringArrayForKey:BDSKFilterFieldHistoryKey]]; + NSMutableArray *commandHistory = [NSMutableArray arrayWithArray:[uniqueCommandHistory allObjects]]; + + unsigned MAX_HISTORY = 7; + if([commandHistory count] > MAX_HISTORY) + [commandHistory removeObjectsInRange:NSMakeRange(MAX_HISTORY, [commandHistory count] - MAX_HISTORY)]; + [openUsingFilterComboBox addItemsWithObjectValues:commandHistory]; + + if([commandHistory count]){ + [openUsingFilterComboBox selectItemAtIndex:0]; + [openUsingFilterComboBox setObjectValue:[openUsingFilterComboBox objectValueOfSelectedItem]]; + } + result = [oPanel runModalForDirectory:nil + file:nil + types:nil]; + if (result == NSOKButton) { + fileToOpen = [oPanel filename]; + shellCommand = [openUsingFilterComboBox stringValue]; + + unsigned commandIndex = [commandHistory indexOfObject:shellCommand]; + if(commandIndex != NSNotFound && commandIndex != 0) + [commandHistory removeObject:shellCommand]; + [commandHistory insertObject:shellCommand atIndex:0]; + [[OFPreferenceWrapper sharedPreferenceWrapper] setObject:commandHistory forKey:BDSKFilterFieldHistoryKey]; + + NSData *fileInputData = [[NSData alloc] initWithContentsOfFile:fileToOpen]; + + NSStringEncoding encoding = [[BDSKStringEncodingManager sharedEncodingManager] stringEncodingForDisplayedName:[openTextEncodingPopupButton titleOfSelectedItem]]; + fileInputString = [[NSString alloc] initWithData:fileInputData encoding:encoding]; + [fileInputData release]; + + if ([NSString isEmptyString:fileInputString]){ + NSRunAlertPanel(NSLocalizedString(@"Unable To Open With Filter",@""), + NSLocalizedString(@"The file could not be read correctly. Please try again, possibly using a different character encoding such as UTF-8.",@""), + NSLocalizedString(@"OK",@""), + nil, nil, nil, nil); + } else { + filterOutput = [[BDSKShellTask shellTask] runShellCommand:shellCommand + withInputString:fileInputString]; + + if ([NSString isEmptyString:filterOutput]){ + NSRunAlertPanel(NSLocalizedString(@"Unable To Open With Filter",@""), + NSLocalizedString(@"Unable to read the file correctly. Please ensure that the shell command specified for filtering is correct by testing it in Terminal.app.",@""), + NSLocalizedString(@"OK",@""), + nil, nil, nil, nil); + } else { + + // @@ REFACTOR: + // I suppose in the future, bibTeX database won't be the default? + bibDoc = [self openUntitledDocumentOfType:@"bibTeX database" display:NO]; + + // the shell task object returns data as UTF-8, so we'll force the document to open as UTF-8 + [bibDoc loadBibTeXDataRepresentation:[filterOutput dataUsingEncoding:NSUTF8StringEncoding] fromURL:nil encoding:NSUTF8StringEncoding error:NULL]; + [bibDoc updateChangeCount:NSChangeDone]; // imported files are unsaved + [bibDoc showWindows]; + } + + } + [fileInputString release]; + } +} + +- (id)openBibTeXFile:(NSString *)filePath withEncoding:(NSStringEncoding)encoding{ + + NSData *data = [NSData dataWithContentsOfFile:filePath]; + BibDocument *doc = nil; + + // make a fresh document, and don't display it until we can set its name. + doc = [self openUntitledDocumentOfType:@"bibTeX database" display:NO]; + [doc setFileName:filePath]; // this effectively makes it not an untitled document anymore. + [doc setFileType:@"bibTeX database"]; // this looks redundant, but it's necessary to enable saving the file (at least on AppKit == 10.3) + [doc loadBibTeXDataRepresentation:data fromURL:[NSURL fileURLWithPath:filePath] encoding:encoding error:NULL]; + return doc; +} + +- (id)openRISFile:(NSString *)filePath withEncoding:(NSStringEncoding)encoding{ + + NSData *data = [NSData dataWithContentsOfFile:filePath]; + BibDocument *doc = nil; + + // make a fresh document, and don't display it until we can set its name. + doc = [self openUntitledDocumentOfType:@"RIS/Medline File" display:NO]; + [doc setFileName:filePath]; // this effectively makes it not an untitled document anymore. + [doc setFileType:@"RIS/Medline File"]; // this looks redundant, but it's necessary to enable saving the file (at least on AppKit == 10.3) + [doc loadRISDataRepresentation:data fromURL:[NSURL fileURLWithPath:filePath] encoding:encoding error:NULL]; + return doc; +} + +- (id)openBibTeXFileUsingPhonyCiteKeys:(NSString *)filePath withEncoding:(NSStringEncoding)encoding{ + NSData *data = [NSData dataWithContentsOfFile:filePath]; + NSString *stringFromFile = [[[NSString alloc] initWithData:data encoding:encoding] autorelease]; + + // (@[a-z]+{),?([[:cntrl:]]) will grab either "@type{,eol" or "@type{eol", which is what we get + // from Bookends and EndNote, respectively. + AGRegex *theRegex = [AGRegex regexWithPattern:@"^(@[a-z]+{),?$" options:AGRegexCaseInsensitive]; + + // replace with "@type{FixMe,eol" (add the comma in, since we remove it if present) + NSCharacterSet *newlineCharacterSet = [NSCharacterSet newlineCharacterSet]; + + // do not use NSCharacterSets with OFStringScanners! + OFCharacterSet *newlineOFCharset = [[[OFCharacterSet alloc] initWithCharacterSet:newlineCharacterSet] autorelease]; + + OFStringScanner *scanner = [[[OFStringScanner alloc] initWithString:stringFromFile] autorelease]; + NSMutableString *mutableFileString = [NSMutableString stringWithCapacity:[stringFromFile length]]; + NSString *tmp = nil; + int scanLocation = 0; + + // we scan up to an (newline@) sequence, then to a newline; we then replace only in that line using theRegex, which is much more efficient than using AGRegex to find/replace in the entire string + do { + + // append the previous part to the mutable string + tmp = [scanner readFullTokenWithDelimiterCharacter:'@']; + if(tmp) [mutableFileString appendString:tmp]; + + scanLocation = scannerScanLocation(scanner); + if(scanLocation == 0 || [newlineCharacterSet characterIsMember:[stringFromFile characterAtIndex:scanLocation - 1]]){ + + tmp = [scanner readFullTokenWithDelimiterOFCharacterSet:newlineOFCharset]; + + // if we read something between the @ and newline, see if we can do the regex find/replace + if(tmp){ + // this should be a noop if the pattern isn't matched + tmp = [theRegex replaceWithString:@"$1FixMe," inString:tmp]; + [mutableFileString appendString:tmp]; // guaranteed non-nil result from AGRegex + } + // now append the newline, since the scanner will just ignore it + [mutableFileString appendString:@"\n"]; + } else + scannerReadCharacter(scanner); + + } while(scannerHasData(scanner)); + + data = [mutableFileString dataUsingEncoding:encoding]; + filePath = [[[NSApp delegate] temporaryFilePath:nil createDirectory:YES] stringByAppendingPathExtension:@"bib"]; + if([data writeToFile:filePath atomically:YES] == NO) + NSLog(@"Unable to write data to file %@; continuing anyway.", filePath); + + BibDocument *doc = nil; + + // make a fresh document, and don't display it until we can set its name. + doc = [self openUntitledDocumentOfType:@"bibTeX database" display:NO]; + [doc setFileName:filePath]; // required for error handling; mark it dirty, so it's obviously modified + [doc setFileType:@"bibTeX database"]; // this looks redundant, but it's necessary to enable saving the file (at least on AppKit == 10.3) + [doc loadBibTeXDataRepresentation:data fromURL:[NSURL fileURLWithPath:filePath] encoding:encoding error:NULL]; + [doc showWindows]; + + // mark as dirty, since we've changed the cite keys + [doc updateChangeCount:NSChangeDone]; + + // search so we only see the ones that have the temporary key; checking success isn't effective here, since it returns NO even if we loaded partial data + if([[doc publications] count]){ + [doc performSelector:@selector(setSelectedSearchFieldKey:) withObject:BDSKCiteKeyString]; + [doc performSelector:@selector(setFilterField:) withObject:@"FixMe"]; + NSBeginAlertSheet(NSLocalizedString(@"Temporary Cite Keys.",@""), + nil, nil, nil, // buttons + [[[doc windowControllers] firstObject] window], + nil, + nil, + nil, + nil, + NSLocalizedString(@"This document was opened using a temporary cite key for the publications shown. In order to use your file with BibTeX, you must generate valid cite keys for all of the items in this file.", @"")); + } + return doc; +} + +- (id)openDocumentWithContentsOfURL:(NSURL *)absoluteURL display:(BOOL)displayDocument error:(NSError **)outError{ + + NSString *theUTI = [[NSWorkspace sharedWorkspace] UTIForURL:absoluteURL]; + if(theUTI == nil || [theUTI isEqualToUTI:@"net.sourceforge.bibdesk.bdskcache"] == NO) + return [super openDocumentWithContentsOfURL:absoluteURL display:displayDocument error:outError]; + + NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfURL:absoluteURL]; + BDAlias *fileAlias = [BDAlias aliasWithData:[dictionary valueForKey:@"FileAlias"]]; + NSString *fullPath = [fileAlias fullPath]; + + if(fullPath == nil) // if the alias didn't work, let's see if we have a filepath key... + fullPath = [dictionary valueForKey:@"net_sourceforge_bibdesk_owningfilepath"]; + + if(fullPath == nil){ + if(outError != nil) + *outError = [NSError errorWithDomain:NSCocoaErrorDomain code:NSFileNoSuchFileError userInfo:[NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Unable to find the file associated with this item.", @""), NSLocalizedDescriptionKey, nil]]; + return nil; + } + + NSURL *fileURL = [NSURL fileURLWithPath:fullPath]; + + NSError *error = nil; // this is a garbage pointer if the document is already open + BibDocument *document = [super openDocumentWithContentsOfURL:fileURL display:YES error:&error]; + + if(document == nil) + NSLog(@"document at URL %@ failed to open for reason: %@", fileURL, [error localizedFailureReason]); + else + if(![document highlightItemForPartialItem:dictionary]) + NSBeep(); + + return document; +} + +@end + +#pragma mark - + +@interface NSSavePanel (AppleBugPrivate) +- (BOOL)_canShowGoto; +@end + +@interface BDSKPosingSavePanel : NSSavePanel @end + +@implementation BDSKPosingSavePanel + ++ (void)load +{ + [self poseAsClass:NSClassFromString(@"NSSavePanel")]; +} + +// hack around an acknowledged Apple bug (http://www.cocoabuilder.com/archive/message/cocoa/2006/4/14/161080) that causes the goto panel to be displayed when trying to enter a leading / in "Open Using Filter" accessory view (our bug #1480815) +- (BOOL)_canShowGoto; +{ + id firstResponder = [self firstResponder]; + // this is likely a field editor, but we have to make sure + if([firstResponder isKindOfClass:[NSText class]] && [firstResponder isFieldEditor] && [firstResponder respondsToSelector:@selector(superview)]){ + // if it's our custom view, the control will be a combo box (superview of the field editor) + NSView *superview = [firstResponder superview]; + NSEnumerator *viewE = [[[self accessoryView] subviews] objectEnumerator]; + NSView *aView; + while(aView = [viewE nextObject]){ + if([superview isDescendantOf:aView]) + return NO; + } + } + return [super _canShowGoto]; +} + +@end Modified: trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj =================================================================== --- trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj 2006-05-31 07:55:32 UTC (rev 6774) +++ trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj 2006-05-31 12:05:04 UTC (rev 6775) @@ -247,6 +247,8 @@ CE51914D09E5615400E97C3A /* BDSKRegExFindPattern.h in Headers */ = {isa = PBXBuildFile; fileRef = CE51914B09E5615400E97C3A /* BDSKRegExFindPattern.h */; }; CE51922009E5755600E97C3A /* BDSKFindFieldEditor.h in Headers */ = {isa = PBXBuildFile; fileRef = CE51921E09E5755600E97C3A /* BDSKFindFieldEditor.h */; }; CE51922109E5755600E97C3A /* BDSKFindFieldEditor.m in Sources */ = {isa = PBXBuildFile; fileRef = CE51921F09E5755600E97C3A /* BDSKFindFieldEditor.m */; }; + CE56D6510A2DAB55003CE000 /* BDSKDocumentController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE56D6500A2DAB55003CE000 /* BDSKDocumentController.m */; }; + CE56D67C0A2DAB66003CE000 /* BDSKDocumentController.h in Headers */ = {isa = PBXBuildFile; fileRef = CE56D67B0A2DAB66003CE000 /* BDSKDocumentController.h */; }; CE573D2609F6A0300020EC16 /* NSIndexSet_BDSKExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = CE573D2409F6A0300020EC16 /* NSIndexSet_BDSKExtensions.h */; }; CE573D2709F6A0300020EC16 /* NSIndexSet_BDSKExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE573D2509F6A0300020EC16 /* NSIndexSet_BDSKExtensions.m */; }; CE59A38109BC80A100AF3935 /* BDSKPreviewTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = CE59A37F09BC80A100AF3935 /* BDSKPreviewTextView.h */; }; @@ -1058,6 +1060,8 @@ CE51914B09E5615400E97C3A /* BDSKRegExFindPattern.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = BDSKRegExFindPattern.h; sourceTree = "<group>"; }; CE51921E09E5755600E97C3A /* BDSKFindFieldEditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BDSKFindFieldEditor.h; sourceTree = "<group>"; }; CE51921F09E5755600E97C3A /* BDSKFindFieldEditor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BDSKFindFieldEditor.m; sourceTree = "<group>"; }; + CE56D6500A2DAB55003CE000 /* BDSKDocumentController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = BDSKDocumentController.m; sourceTree = "<group>"; }; + CE56D67B0A2DAB66003CE000 /* BDSKDocumentController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = BDSKDocumentController.h; sourceTree = "<group>"; }; CE573D2409F6A0300020EC16 /* NSIndexSet_BDSKExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSIndexSet_BDSKExtensions.h; sourceTree = "<group>"; }; CE573D2509F6A0300020EC16 /* NSIndexSet_BDSKExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSIndexSet_BDSKExtensions.m; sourceTree = "<group>"; }; CE59A37F09BC80A100AF3935 /* BDSKPreviewTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BDSKPreviewTextView.h; sourceTree = "<group>"; }; @@ -1808,6 +1812,7 @@ children = ( 3D866C2708031CEC00FF1724 /* BDSKCharacterConversion.m */, CE38FB85091D946A00BCB69D /* BDSKConditionController.m */, + CE56D6500A2DAB55003CE000 /* BDSKDocumentController.m */, F9E43AD608AD8BDB00A0354B /* BDSKErrorObjectController.m */, CEF7295509CC88AB00802D48 /* BDSKFieldSheetController.m */, F9252E2108F60D170045D563 /* BDSKFileContentSearchController.m */, @@ -2058,6 +2063,7 @@ F96769FE0916B63900B42F6A /* BDSKCountedSet.h */, F9022C3C0758027800C3F701 /* BDSKCustomCiteTableView.h */, F9E759190942AE7C00CFB46F /* BDSKDateStringFormatter.h */, + CE56D67B0A2DAB66003CE000 /* BDSKDocumentController.h */, CEEC70DF093B6EC200A64F54 /* BDSKDragImageView.h */, F9022C400758027800C3F701 /* BDSKDragTableView.h */, F9022C420758027800C3F701 /* BDSKDragWindow.h */, @@ -2510,6 +2516,7 @@ F963E45A0A1D828000695DDC /* BDSKTreeNode.h in Headers */, F963E45C0A1D828100695DDC /* BibPref_Export.h in Headers */, F98DB3170A23C7730040D347 /* BDSKTemplate.h in Headers */, + CE56D67C0A2DAB66003CE000 /* BDSKDocumentController.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3311,6 +3318,7 @@ F963E45B0A1D828100695DDC /* BDSKTreeNode.m in Sources */, F963E45D0A1D828200695DDC /* BibPref_Export.m in Sources */, F98DB3180A23C7730040D347 /* BDSKTemplate.m in Sources */, + CE56D6510A2DAB55003CE000 /* BDSKDocumentController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |