OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/shell_dialogs.h" | 5 #include "chrome/browser/shell_dialogs.h" |
6 | 6 |
7 #import <Cocoa/Cocoa.h> | 7 #import <Cocoa/Cocoa.h> |
8 #include <CoreServices/CoreServices.h> | 8 #include <CoreServices/CoreServices.h> |
9 | 9 |
10 #include <map> | 10 #include <map> |
(...skipping 18 matching lines...) Expand all Loading... |
29 // A bridge class to act as the modal delegate to the save/open sheet and send | 29 // A bridge class to act as the modal delegate to the save/open sheet and send |
30 // the results to the C++ class. | 30 // the results to the C++ class. |
31 @interface SelectFileDialogBridge : NSObject<NSOpenSavePanelDelegate> { | 31 @interface SelectFileDialogBridge : NSObject<NSOpenSavePanelDelegate> { |
32 @private | 32 @private |
33 SelectFileDialogImpl* selectFileDialogImpl_; // WEAK; owns us | 33 SelectFileDialogImpl* selectFileDialogImpl_; // WEAK; owns us |
34 } | 34 } |
35 | 35 |
36 - (id)initWithSelectFileDialogImpl:(SelectFileDialogImpl*)s; | 36 - (id)initWithSelectFileDialogImpl:(SelectFileDialogImpl*)s; |
37 - (void)endedPanel:(NSSavePanel*)panel | 37 - (void)endedPanel:(NSSavePanel*)panel |
38 withReturn:(int)returnCode | 38 withReturn:(int)returnCode |
39 context:(void *)context; | 39 context:(void*)context; |
40 | 40 |
41 // NSSavePanel delegate method | 41 // NSSavePanel delegate method |
42 - (BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename; | 42 - (BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename; |
43 | 43 |
44 @end | 44 @end |
45 | 45 |
46 // Implementation of SelectFileDialog that shows Cocoa dialogs for choosing a | 46 // Implementation of SelectFileDialog that shows Cocoa dialogs for choosing a |
47 // file or folder. | 47 // file or folder. |
48 class SelectFileDialogImpl : public SelectFileDialog { | 48 class SelectFileDialogImpl : public SelectFileDialog { |
49 public: | 49 public: |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
119 // to hold the pointers, since we can't delete from the map as we're iterating | 119 // to hold the pointers, since we can't delete from the map as we're iterating |
120 // through it. | 120 // through it. |
121 std::vector<NSSavePanel*> panels; | 121 std::vector<NSSavePanel*> panels; |
122 for (std::map<NSSavePanel*, void*>::iterator it = params_map_.begin(); | 122 for (std::map<NSSavePanel*, void*>::iterator it = params_map_.begin(); |
123 it != params_map_.end(); ++it) { | 123 it != params_map_.end(); ++it) { |
124 panels.push_back(it->first); | 124 panels.push_back(it->first); |
125 } | 125 } |
126 | 126 |
127 for (std::vector<NSSavePanel*>::iterator it = panels.begin(); | 127 for (std::vector<NSSavePanel*>::iterator it = panels.begin(); |
128 it != panels.end(); ++it) { | 128 it != panels.end(); ++it) { |
129 [(*it) cancel:nil]; | 129 [*it cancel:*it]; |
130 } | 130 } |
131 } | 131 } |
132 | 132 |
133 bool SelectFileDialogImpl::IsRunning(gfx::NativeWindow parent_window) const { | 133 bool SelectFileDialogImpl::IsRunning(gfx::NativeWindow parent_window) const { |
134 return parents_.find(parent_window) != parents_.end(); | 134 return parents_.find(parent_window) != parents_.end(); |
135 } | 135 } |
136 | 136 |
137 void SelectFileDialogImpl::ListenerDestroyed() { | 137 void SelectFileDialogImpl::ListenerDestroyed() { |
138 listener_ = NULL; | 138 listener_ = NULL; |
139 } | 139 } |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 | 209 |
210 if (!default_extension.empty()) | 210 if (!default_extension.empty()) |
211 [dialog setRequiredFileType:base::SysUTF8ToNSString(default_extension)]; | 211 [dialog setRequiredFileType:base::SysUTF8ToNSString(default_extension)]; |
212 | 212 |
213 params_map_[dialog] = params; | 213 params_map_[dialog] = params; |
214 type_map_[dialog] = type; | 214 type_map_[dialog] = type; |
215 | 215 |
216 SheetContext* context = new SheetContext; | 216 SheetContext* context = new SheetContext; |
217 | 217 |
218 // |context| should never be NULL, but we are seeing indications otherwise. | 218 // |context| should never be NULL, but we are seeing indications otherwise. |
219 // |This CHECK is here to confirm if we are actually getting NULL | 219 // This CHECK is here to confirm if we are actually getting NULL |
220 // ||context|s. http://crbug.com/58959 | 220 // |context|s. http://crbug.com/58959 |
221 CHECK(context); | 221 CHECK(context); |
222 context->type = type; | 222 context->type = type; |
223 context->owning_window = owning_window; | 223 context->owning_window = owning_window; |
224 | 224 |
225 if (type == SELECT_SAVEAS_FILE) { | 225 if (type == SELECT_SAVEAS_FILE) { |
226 [dialog beginSheetForDirectory:default_dir | 226 [dialog beginSheetForDirectory:default_dir |
227 file:default_filename | 227 file:default_filename |
228 modalForWindow:owning_window | 228 modalForWindow:owning_window |
229 modalDelegate:bridge_.get() | 229 modalDelegate:bridge_.get() |
230 didEndSelector:@selector(endedPanel:withReturn:context:) | 230 didEndSelector:@selector(endedPanel:withReturn:context:) |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 - (id)initWithSelectFileDialogImpl:(SelectFileDialogImpl*)s { | 354 - (id)initWithSelectFileDialogImpl:(SelectFileDialogImpl*)s { |
355 self = [super init]; | 355 self = [super init]; |
356 if (self != nil) { | 356 if (self != nil) { |
357 selectFileDialogImpl_ = s; | 357 selectFileDialogImpl_ = s; |
358 } | 358 } |
359 return self; | 359 return self; |
360 } | 360 } |
361 | 361 |
362 - (void)endedPanel:(NSSavePanel*)panel | 362 - (void)endedPanel:(NSSavePanel*)panel |
363 withReturn:(int)returnCode | 363 withReturn:(int)returnCode |
364 context:(void *)context { | 364 context:(void*)context { |
365 // |context| should never be NULL, but we are seeing indications otherwise. | 365 // |context| should never be NULL, but we are seeing indications otherwise. |
366 // |This CHECK is here to confirm if we are actually getting NULL | 366 // |This CHECK is here to confirm if we are actually getting NULL |
367 // ||context|s. http://crbug.com/58959 | 367 // ||context|s. http://crbug.com/58959 |
368 CHECK(context); | 368 CHECK(context); |
369 | 369 |
370 int index = 0; | 370 int index = 0; |
371 SelectFileDialogImpl::SheetContext* context_struct = | 371 SelectFileDialogImpl::SheetContext* context_struct = |
372 (SelectFileDialogImpl::SheetContext*)context; | 372 (SelectFileDialogImpl::SheetContext*)context; |
373 | 373 |
374 SelectFileDialog::Type type = context_struct->type; | 374 SelectFileDialog::Type type = context_struct->type; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
408 paths, | 408 paths, |
409 index); | 409 index); |
410 [panel release]; | 410 [panel release]; |
411 } | 411 } |
412 | 412 |
413 - (BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename { | 413 - (BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename { |
414 return selectFileDialogImpl_->ShouldEnableFilename(sender, filename); | 414 return selectFileDialogImpl_->ShouldEnableFilename(sender, filename); |
415 } | 415 } |
416 | 416 |
417 @end | 417 @end |
OLD | NEW |