Allow showing message dialog as sheet.

This commit is contained in:
Cheng Zhao 2013-06-07 15:59:12 +08:00
Родитель a897d5b715
Коммит dfbbaa9efb
4 изменённых файлов: 32 добавлений и 7 удалений

Просмотреть файл

@ -49,6 +49,15 @@ v8::Handle<v8::Value> ShowMessageBox(const v8::Arguments &args) {
!args[4]->IsString()) // detail !args[4]->IsString()) // detail
return node::ThrowTypeError("Bad argument"); return node::ThrowTypeError("Bad argument");
NativeWindow* native_window = NULL;
if (args[5]->IsObject()) {
Window* window = Window::Unwrap<Window>(args[5]->ToObject());
if (!window || !window->window())
return node::ThrowError("Invalid window");
native_window = window->window();
}
MessageBoxType type = (MessageBoxType)(args[0]->IntegerValue()); MessageBoxType type = (MessageBoxType)(args[0]->IntegerValue());
std::vector<std::string> buttons; std::vector<std::string> buttons;
@ -60,7 +69,8 @@ v8::Handle<v8::Value> ShowMessageBox(const v8::Arguments &args) {
std::string message(*v8::String::Utf8Value(args[3])); std::string message(*v8::String::Utf8Value(args[3]));
std::string detail(*v8::String::Utf8Value(args[4])); std::string detail(*v8::String::Utf8Value(args[4]));
int chosen = atom::ShowMessageBox(type, buttons, title, message, detail); int chosen = atom::ShowMessageBox(
native_window, type, buttons, title, message, detail);
return scope.Close(v8::Integer::New(chosen)); return scope.Close(v8::Integer::New(chosen));
} }

Просмотреть файл

@ -30,7 +30,11 @@ module.exports =
binding.showSaveDialog window, options.title, options.defaultPath binding.showSaveDialog window, options.title, options.defaultPath
showMessageBox: (options) -> showMessageBox: (window, options) ->
if window?.constructor isnt BrowserWindow
options = window
window = null
options = type: 'none' unless options? options = type: 'none' unless options?
options.type = options.type ? 'none' options.type = options.type ? 'none'
options.type = messageBoxTypes.indexOf options.type options.type = messageBoxTypes.indexOf options.type
@ -42,7 +46,9 @@ module.exports =
options.message = options.message ? '' options.message = options.message ? ''
options.detail = options.detail ? '' options.detail = options.detail ? ''
binding.showMessageBox options.type, options.buttons, binding.showMessageBox options.type,
options.buttons,
String(options.title), String(options.title),
String(options.message), String(options.message),
String(options.detail) String(options.detail),
window

Просмотреть файл

@ -10,13 +10,16 @@
namespace atom { namespace atom {
class NativeWindow;
enum MessageBoxType { enum MessageBoxType {
MESSAGE_BOX_TYPE_NONE = 0, MESSAGE_BOX_TYPE_NONE = 0,
MESSAGE_BOX_TYPE_INFORMATION, MESSAGE_BOX_TYPE_INFORMATION,
MESSAGE_BOX_TYPE_WARNING MESSAGE_BOX_TYPE_WARNING
}; };
int ShowMessageBox(MessageBoxType type, int ShowMessageBox(NativeWindow* parent_window,
MessageBoxType type,
const std::vector<std::string>& buttons, const std::vector<std::string>& buttons,
const std::string& title, const std::string& title,
const std::string& message, const std::string& message,

Просмотреть файл

@ -7,10 +7,13 @@
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>
#include "base/strings/sys_string_conversions.h" #include "base/strings/sys_string_conversions.h"
#include "browser/native_window.h"
#include "browser/nsalert_synchronous_sheet.h"
namespace atom { namespace atom {
int ShowMessageBox(MessageBoxType type, int ShowMessageBox(NativeWindow* parent_window,
MessageBoxType type,
const std::vector<std::string>& buttons, const std::vector<std::string>& buttons,
const std::string& title, const std::string& title,
const std::string& message, const std::string& message,
@ -37,7 +40,10 @@ int ShowMessageBox(MessageBoxType type,
[button setTag:i]; [button setTag:i];
} }
return [alert runModal]; if (parent_window)
return [alert runModalSheetForWindow:parent_window->GetNativeWindow()];
else
return [alert runModal];
} }
} // namespace atom } // namespace atom