};
typedef base::Callback<void(
- bool result, std::vector<base::FilePath> paths)> OpenDialogCallback;
+ bool result, const std::vector<base::FilePath>& paths)> OpenDialogCallback;
+
+typedef base::Callback<void(
+ bool result, const base::FilePath& path)> SaveDialogCallback;
bool ShowOpenDialog(atom::NativeWindow* parent_window,
const std::string& title,
const base::FilePath& default_path,
base::FilePath* path);
+void ShowSaveDialog(atom::NativeWindow* parent_window,
+ const std::string& title,
+ const base::FilePath& default_path,
+ const SaveDialogCallback& callback);
+
} // namespace file_dialog
#endif // BROWSER_UI_FILE_DIALOG_H_
return true;
}
+void ShowSaveDialog(atom::NativeWindow* parent_window,
+ const std::string& title,
+ const base::FilePath& default_path,
+ const SaveDialogCallback& c) {
+ NSSavePanel* dialog = [NSSavePanel savePanel];
+
+ SetupDialog(dialog, title, default_path);
+
+ __block SaveDialogCallback callback = c;
+
+ NSWindow* window = parent_window ? parent_window->GetNativeWindow() : NULL;
+ [dialog beginSheetModalForWindow:window
+ completionHandler:^(NSInteger chosen) {
+ if (chosen == NSFileHandlingPanelCancelButton) {
+ callback.Run(false, base::FilePath());
+ } else {
+ std::string path = base::SysNSStringToUTF8([[dialog URL] path]);
+ callback.Run(true, base::FilePath(path));
+ }
+ }];
+}
+
} // namespace file_dialog