From e20b4684729f6278bfb7fe60c68f2b80626fe062 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Sun, 2 Mar 2014 18:37:25 -0500 Subject: [PATCH] Added the Mac OS X implementation of messageboxes. --- dialog_darwin.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ uitask_darwin.go | 4 ---- 2 files changed, 52 insertions(+), 4 deletions(-) create mode 100644 dialog_darwin.go diff --git a/dialog_darwin.go b/dialog_darwin.go new file mode 100644 index 0000000..ff7e166 --- /dev/null +++ b/dialog_darwin.go @@ -0,0 +1,52 @@ +// 2 march 2014 +package ui + +import ( + // ... +) + +// #cgo LDFLAGS: -lobjc -framework Foundation -framework AppKit +// #include "objc_darwin.h" +import "C" + +// NSAlert styles. +const ( + _NSWarningAlertStyle = 0 // default + _NSInformationalAlertStyle = 1 + _NSCriticalAlertStyle = 2 +) + +var ( + _NSAlert = objc_getClass("NSAlert") + + _setMessageText = sel_getUid("setMessageText:") + _setInformativeText = sel_getUid("setInformativeText:") + _setAlertStyle = sel_getUid("setAlertStyle:") + _addButtonWithTitle = sel_getUid("addButtonWithTitle:") + _runModal = sel_getUid("runModal") +) + +func _msgBox(title string, text string, style uintptr, button0 string) { + ret := make(chan struct{}) + defer close(ret) + uitask <- func() { + box := objc_new(_NSAlert) + // TODO is this appropriate for title? + C.objc_msgSend_id(box, _setMessageText, toNSString(title)) + C.objc_msgSend_id(box, _setInformativeText, toNSString(text)) + objc_msgSend_uint(box, _setAlertStyle, style) + C.objc_msgSend_id(box, _addButtonWithTitle, toNSString(button0)) + C.objc_msgSend_noargs(box, _runModal) + ret <- struct{}{} + } + <-ret +} + +func msgBox(title string, text string) { + // TODO _NSInformationalAlertStyle? + _msgBox(title, text, _NSWarningAlertStyle, "OK") +} + +func msgBoxError(title string, text string) { + _msgBox(title, text, _NSCriticalAlertStyle, "OK") +} diff --git a/uitask_darwin.go b/uitask_darwin.go index 0d0e377..8a77dfa 100644 --- a/uitask_darwin.go +++ b/uitask_darwin.go @@ -11,10 +11,6 @@ import ( // #include "objc_darwin.h" import "C" -// temporary for now -func msgBox(string, string){} -func msgBoxError(string, string){} - var uitask chan func() var (