1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
#if defined(Hiro_MessageWindow)
namespace hiro {
enum class MessageWindowType : uint { Error, Information, Question, Warning };
auto MessageWindow_dialog(MessageWindow::State& state, MessageWindowType type) -> MessageWindow::Response {
@autoreleasepool {
NSAlert* alert = [[[NSAlert alloc] init] autorelease];
if(state.title) [alert setMessageText:[NSString stringWithUTF8String:state.title]];
[alert setInformativeText:[NSString stringWithUTF8String:state.text]];
switch(state.buttons) {
case MessageWindow::Buttons::Ok:
[alert addButtonWithTitle:@"Ok"];
break;
case MessageWindow::Buttons::OkCancel:
[alert addButtonWithTitle:@"Ok"];
[alert addButtonWithTitle:@"Cancel"];
break;
case MessageWindow::Buttons::YesNo:
[alert addButtonWithTitle:@"Yes"];
[alert addButtonWithTitle:@"No"];
break;
case MessageWindow::Buttons::YesNoCancel:
[alert addButtonWithTitle:@"Yes"];
[alert addButtonWithTitle:@"No"];
[alert addButtonWithTitle:@"Cancel"];
break;
}
switch(type) {
case MessageWindowType::Error: [alert setAlertStyle:NSCriticalAlertStyle]; break;
case MessageWindowType::Information: [alert setAlertStyle:NSInformationalAlertStyle]; break;
case MessageWindowType::Question: [alert setAlertStyle:NSInformationalAlertStyle]; break;
case MessageWindowType::Warning: [alert setAlertStyle:NSWarningAlertStyle]; break;
}
NSInteger response = [alert runModal];
//[alert beginSheetModalForWindow:parent.p.cocoaWindow modalDelegate:self didEndSelector:@selector(...) contextInfo:nil];
switch(state.buttons) {
case MessageWindow::Buttons::Ok:
if(response == NSAlertFirstButtonReturn) return MessageWindow::Response::Ok;
break;
case MessageWindow::Buttons::OkCancel:
if(response == NSAlertFirstButtonReturn) return MessageWindow::Response::Ok;
if(response == NSAlertSecondButtonReturn) return MessageWindow::Response::Cancel;
break;
case MessageWindow::Buttons::YesNo:
if(response == NSAlertFirstButtonReturn) return MessageWindow::Response::Yes;
if(response == NSAlertSecondButtonReturn) return MessageWindow::Response::No;
break;
case MessageWindow::Buttons::YesNoCancel:
if(response == NSAlertFirstButtonReturn) return MessageWindow::Response::Yes;
if(response == NSAlertSecondButtonReturn) return MessageWindow::Response::No;
if(response == NSAlertThirdButtonReturn) return MessageWindow::Response::Cancel;
break;
}
}
throw;
}
auto pMessageWindow::error(MessageWindow::State& state) -> MessageWindow::Response {
return MessageWindow_dialog(state, MessageWindowType::Error);
}
auto pMessageWindow::information(MessageWindow::State& state) -> MessageWindow::Response {
return MessageWindow_dialog(state, MessageWindowType::Information);
}
auto pMessageWindow::question(MessageWindow::State& state) -> MessageWindow::Response {
return MessageWindow_dialog(state, MessageWindowType::Question);
}
auto pMessageWindow::warning(MessageWindow::State& state) -> MessageWindow::Response {
return MessageWindow_dialog(state, MessageWindowType::Warning);
}
}
#endif
|