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