1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#import "chrome/browser/ui/cocoa/applescript/browsercrapplication+applescript.h" 6 7#include "base/logging.h" 8#import "base/memory/scoped_nsobject.h" 9#import "chrome/browser/app_controller_mac.h" 10#include "chrome/browser/bookmarks/bookmark_model.h" 11#include "chrome/browser/profiles/profile.h" 12#include "chrome/browser/ui/browser_list.h" 13#import "chrome/browser/ui/cocoa/applescript/bookmark_folder_applescript.h" 14#import "chrome/browser/ui/cocoa/applescript/constants_applescript.h" 15#import "chrome/browser/ui/cocoa/applescript/error_applescript.h" 16#import "chrome/browser/ui/cocoa/applescript/window_applescript.h" 17 18@implementation BrowserCrApplication (AppleScriptAdditions) 19 20- (NSArray*)appleScriptWindows { 21 NSMutableArray* appleScriptWindows = [NSMutableArray 22 arrayWithCapacity:BrowserList::size()]; 23 // Iterate through all browsers and check if it closing, 24 // if not add it to list. 25 for (BrowserList::const_iterator browserIterator = BrowserList::begin(); 26 browserIterator != BrowserList::end(); ++browserIterator) { 27 if ((*browserIterator)->IsAttemptingToCloseBrowser()) 28 continue; 29 30 scoped_nsobject<WindowAppleScript> window( 31 [[WindowAppleScript alloc] initWithBrowser:*browserIterator]); 32 [window setContainer:NSApp 33 property:AppleScript::kWindowsProperty]; 34 [appleScriptWindows addObject:window]; 35 } 36 // Windows sorted by their index value, which is obtained by calling 37 // orderedIndex: on each window. 38 [appleScriptWindows sortUsingSelector:@selector(windowComparator:)]; 39 return appleScriptWindows; 40} 41 42- (void)insertInAppleScriptWindows:(WindowAppleScript*)aWindow { 43 // This method gets called when a new window is created so 44 // the container and property are set here. 45 [aWindow setContainer:self 46 property:AppleScript::kWindowsProperty]; 47} 48 49- (void)insertInAppleScriptWindows:(WindowAppleScript*)aWindow 50 atIndex:(int)index { 51 // This method gets called when a new window is created so 52 // the container and property are set here. 53 [aWindow setContainer:self 54 property:AppleScript::kWindowsProperty]; 55 // Note: AppleScript is 1-based. 56 index--; 57 [aWindow setOrderedIndex:[NSNumber numberWithInt:index]]; 58} 59 60- (void)removeFromAppleScriptWindowsAtIndex:(int)index { 61 [[[self appleScriptWindows] objectAtIndex:index] 62 handlesCloseScriptCommand:nil]; 63} 64 65- (NSScriptObjectSpecifier*)objectSpecifier { 66 return nil; 67} 68 69- (BookmarkFolderAppleScript*)otherBookmarks { 70 AppController* appDelegate = [NSApp delegate]; 71 72 Profile* defaultProfile = [appDelegate defaultProfile]; 73 if (!defaultProfile) { 74 AppleScript::SetError(AppleScript::errGetProfile); 75 return nil; 76 } 77 78 BookmarkModel* model = defaultProfile->GetBookmarkModel(); 79 if (!model->IsLoaded()) { 80 AppleScript::SetError(AppleScript::errBookmarkModelLoad); 81 return nil; 82 } 83 84 BookmarkFolderAppleScript* otherBookmarks = 85 [[[BookmarkFolderAppleScript alloc] 86 initWithBookmarkNode:model->other_node()] autorelease]; 87 [otherBookmarks setContainer:self 88 property:AppleScript::kBookmarkFoldersProperty]; 89 return otherBookmarks; 90} 91 92- (BookmarkFolderAppleScript*)bookmarksBar { 93 AppController* appDelegate = [NSApp delegate]; 94 95 Profile* defaultProfile = [appDelegate defaultProfile]; 96 if (!defaultProfile) { 97 AppleScript::SetError(AppleScript::errGetProfile); 98 return nil; 99 } 100 101 BookmarkModel* model = defaultProfile->GetBookmarkModel(); 102 if (!model->IsLoaded()) { 103 AppleScript::SetError(AppleScript::errBookmarkModelLoad); 104 return NULL; 105 } 106 107 BookmarkFolderAppleScript* bookmarksBar = 108 [[[BookmarkFolderAppleScript alloc] 109 initWithBookmarkNode:model->GetBookmarkBarNode()] autorelease]; 110 [bookmarksBar setContainer:self 111 property:AppleScript::kBookmarkFoldersProperty]; 112 return bookmarksBar; 113} 114 115- (NSArray*)bookmarkFolders { 116 BookmarkFolderAppleScript* otherBookmarks = [self otherBookmarks]; 117 BookmarkFolderAppleScript* bookmarksBar = [self bookmarksBar]; 118 NSArray* folderArray = [NSArray arrayWithObjects:otherBookmarks, 119 bookmarksBar, 120 nil]; 121 return folderArray; 122} 123 124- (void)insertInBookmarksFolders:(id)aBookmarkFolder { 125 NOTIMPLEMENTED(); 126} 127 128- (void)insertInBookmarksFolders:(id)aBookmarkFolder atIndex:(int)index { 129 NOTIMPLEMENTED(); 130} 131 132- (void)removeFromBookmarksFoldersAtIndex:(int)index { 133 NOTIMPLEMENTED(); 134} 135 136@end 137