Rev 3101 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
/** R.app : a Cocoa front end to: "R A Computer Language for Statistical Data Analysis"** R.app Copyright notes:* Copyright (C) 2004-5 The R Foundation* written by Stefano M. Iacus and Simon Urbanek* RDocumentController written by Rob Goedman*** R Copyright notes:* Copyright (C) 1995-1996 Robert Gentleman and Ross Ihaka* Copyright (C) 1998-2001 The R Development Core Team* Copyright (C) 2002-2004 The R Foundation** This program is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License as published by* the Free Software Foundation; either version 2 of the License, or* (at your option) any later version.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* GNU General Public License for more details.** A copy of the GNU General Public License is available via WWW at* http://www.gnu.org/copyleft/gpl.html. You can also obtain it by* writing to the Free Software Foundation, Inc., 59 Temple Place,* Suite 330, Boston, MA 02111-1307 USA.*/#import "RGUI.h"#import "RDocumentController.h"#import "RController.h"#import "Preferences.h"#import "PreferenceKeys.h"@implementation RDocumentController- (id)init {self = [super init];return self;}- (void)noteNewRecentDocument:(NSDocument *)aDocument {[super noteNewRecentDocument:(NSDocument *)aDocument];}- (IBAction)newDocument:(id)sender {[self openNamedFile:@"" display:YES];}- (IBAction)openDocument:(id)sender {NSArray *files = [super fileNamesFromRunningOpenPanel];int i = [files count];int j;for (j=0;j<i;j++) {[self openDocumentWithContentsOfFile: [files objectAtIndex:j] display:YES];}}- (id)openDocumentWithContentsOfFile:(NSString *)aFile display:(BOOL)flag{int res = [[RController sharedController] isImageData: aFile];SLog(@"RDocumentController.openDocumentWithContentsOfFile: %@", aFile);if (res == -1)NSLog(@"File format: %@ not recognized by isImageData", aFile);elseif (res == 0 )[[RController sharedController] sendInput: [NSString stringWithFormat:@"load(\"%@\")", aFile]];elsereturn [self openNamedFile: aFile display:flag];return nil;}/*Below is the path taken by drag & drop on the R icon, by New Document and by OpenDocument. If edit is selected in MiscPrefPane, the file is opened in either theinternal or external editor (selected in the EditorPrefPane). If source is selectedin MiscPrefPane, an existing file is sourced into R. A new file opens a new document.*/- (id) openNamedFile:(NSString *)aFile display:(BOOL) flag{BOOL useInternalEditor = [Preferences flagForKey:internalOrExternalKey withDefault: YES];NSString *externalEditor = @"\"";externalEditor = [externalEditor stringByAppendingString:[Preferences stringForKey:externalEditorNameKey withDefault: @"TextEdit"]];externalEditor = [externalEditor stringByAppendingString:@"\""];BOOL editorIsApp = [Preferences flagForKey:appOrCommandKey withDefault: YES];NSString *cmd;if ([aFile isEqualToString:@""] && useInternalEditor) {return [super openUntitledDocumentOfType:defaultDocumentType display:YES];}elseif (useInternalEditor) {NSString *fname = [aFile stringByExpandingTildeInPath];return [super openDocumentWithContentsOfFile:fname display:(BOOL)flag];}if (editorIsApp) {cmd = [@"open -a " stringByAppendingString:externalEditor];if (![aFile isEqualToString:@""])cmd = [cmd stringByAppendingString: [NSString stringWithFormat:@" \"%@\"", aFile]];} else {cmd = externalEditor;if (![aFile isEqualToString:@""])cmd = [cmd stringByAppendingString: [NSString stringWithString: [NSString stringWithFormat:@" \"%@\"", aFile]]];}system([cmd UTF8String]);return 0;}/*Below is the path taken by callbacks from R like edit(object) or edit(file="/Users/...")If the internal editor is used, R is kept in modal mode and after editing, the file contentis returned, e.g. to be assigned as in x = edit(x). If an external editor is selected,the editor is opened and R displays the old content and is ready for input. The selectionof source or edit has no influence.*/- (id)openRDocumentWithContentsOfFile:(NSString *)aFile display:(BOOL)flag{BOOL useInternalEditor = [Preferences flagForKey:internalOrExternalKey withDefault: YES];NSString *externalEditor = @"\"";externalEditor = [externalEditor stringByAppendingString:[Preferences stringForKey:externalEditorNameKey withDefault: @"TextEdit"]];externalEditor = [externalEditor stringByAppendingString:@"\""];BOOL editorIsApp = [Preferences flagForKey:appOrCommandKey withDefault: YES];if (useInternalEditor) {NSString *fname = [aFile stringByExpandingTildeInPath];return [super openDocumentWithContentsOfFile:fname display:flag];} else {NSString *cmd;if (editorIsApp) {cmd = [@"open -a " stringByAppendingString:externalEditor];if (![aFile isEqualToString:@""])cmd = [cmd stringByAppendingString: [NSString stringWithFormat:@" \"%@\"", aFile]];} else {cmd = externalEditor;if (![aFile isEqualToString:@""])cmd = [cmd stringByAppendingString: [NSString stringWithString: [NSString stringWithFormat:@" \"%@\"", aFile]]];}system([cmd UTF8String]);return nil;}}- (void)removeDocument:(NSDocument *)document {SLog(@"RDocumentController(%@).removeDocument: %@\n", self, document);[super removeDocument:document];}@end