zenity/msg_darwin.go

102 lines
2.2 KiB
Go
Raw Normal View History

2020-01-04 22:21:39 -05:00
package zenity
import (
"os/exec"
2020-01-05 07:37:45 -05:00
2020-01-19 06:57:05 -05:00
"github.com/ncruces/zenity/internal/zenutil"
2020-01-04 22:21:39 -05:00
)
2020-01-23 06:44:28 -05:00
func message(kind messageKind, text string, options []Option) (bool, error) {
2020-01-24 07:52:45 -05:00
opts := applyOptions(options)
2021-02-19 12:46:47 -05:00
var data zenutil.Msg
data.Text = text
data.Options.Timeout = zenutil.Timeout
2020-01-23 06:44:28 -05:00
dialog := kind == questionKind || opts.icon != 0
2020-01-04 22:21:39 -05:00
2020-01-06 07:01:51 -05:00
if dialog {
2020-01-09 20:46:53 -05:00
data.Operation = "displayDialog"
2021-02-19 12:46:47 -05:00
data.Options.Title = opts.title
2020-01-04 22:21:39 -05:00
switch opts.icon {
case ErrorIcon:
2021-02-19 12:46:47 -05:00
data.Options.Icon = "stop"
2020-01-04 22:21:39 -05:00
case WarningIcon:
2021-02-19 12:46:47 -05:00
data.Options.Icon = "caution"
2020-01-12 18:09:11 -05:00
case InfoIcon, QuestionIcon:
2021-02-19 12:46:47 -05:00
data.Options.Icon = "note"
2020-01-04 22:21:39 -05:00
}
} else {
2020-01-09 20:46:53 -05:00
data.Operation = "displayAlert"
if opts.title != "" {
2021-02-19 12:46:47 -05:00
data.Options.Message = text
2020-01-09 20:46:53 -05:00
data.Text = opts.title
}
2020-01-23 06:44:28 -05:00
switch kind {
case infoKind:
2021-02-19 12:46:47 -05:00
data.Options.As = "informational"
2020-01-23 06:44:28 -05:00
case warningKind:
2021-02-19 12:46:47 -05:00
data.Options.As = "warning"
2020-01-23 06:44:28 -05:00
case errorKind:
2021-02-19 12:46:47 -05:00
data.Options.As = "critical"
2020-01-04 22:21:39 -05:00
}
}
2020-01-23 06:44:28 -05:00
if kind != questionKind {
2020-01-06 07:01:51 -05:00
if dialog {
2020-01-24 07:52:45 -05:00
opts.okLabel = "OK"
2020-01-04 22:21:39 -05:00
}
2020-01-24 07:52:45 -05:00
opts.cancelLabel = ""
2020-01-04 22:21:39 -05:00
}
2020-01-24 07:52:45 -05:00
if opts.okLabel != "" || opts.cancelLabel != "" || opts.extraButton != "" {
if opts.okLabel == "" {
opts.okLabel = "OK"
2020-01-04 22:21:39 -05:00
}
2020-01-24 07:52:45 -05:00
if opts.cancelLabel == "" {
opts.cancelLabel = "Cancel"
2020-01-04 22:21:39 -05:00
}
2020-01-23 06:44:28 -05:00
if kind == questionKind {
2020-01-24 07:52:45 -05:00
if opts.extraButton == "" {
2021-02-19 12:46:47 -05:00
data.Options.Buttons = []string{opts.cancelLabel, opts.okLabel}
data.Options.Default = 2
data.Options.Cancel = 1
2020-01-04 22:21:39 -05:00
} else {
2021-02-19 12:46:47 -05:00
data.Options.Buttons = []string{opts.extraButton, opts.cancelLabel, opts.okLabel}
data.Options.Default = 3
data.Options.Cancel = 2
2020-01-04 22:21:39 -05:00
}
} else {
2020-01-24 07:52:45 -05:00
if opts.extraButton == "" {
2021-02-19 12:46:47 -05:00
data.Options.Buttons = []string{opts.okLabel}
data.Options.Default = 1
2020-01-04 22:21:39 -05:00
} else {
2021-02-19 12:46:47 -05:00
data.Options.Buttons = []string{opts.extraButton, opts.okLabel}
data.Options.Default = 2
2020-01-04 22:21:39 -05:00
}
}
2020-01-24 07:52:45 -05:00
data.Extra = opts.extraButton
2020-01-04 22:21:39 -05:00
}
2020-01-24 07:52:45 -05:00
if opts.defaultCancel {
2021-02-19 12:46:47 -05:00
if data.Options.Cancel != 0 {
data.Options.Default = data.Options.Cancel
2020-01-04 22:21:39 -05:00
}
2021-02-19 12:46:47 -05:00
if dialog && data.Options.Buttons == nil {
data.Options.Default = 1
2020-01-04 22:21:39 -05:00
}
}
2020-01-28 07:46:43 -05:00
out, err := zenutil.Run(opts.ctx, "msg", data)
2020-01-04 22:21:39 -05:00
if err, ok := err.(*exec.ExitError); ok && err.ExitCode() == 1 {
return false, nil
}
if err != nil {
return false, err
}
2020-01-24 07:52:45 -05:00
if len(out) > 0 && string(out[:len(out)-1]) == opts.extraButton {
2020-01-06 07:01:51 -05:00
return false, ErrExtraButton
}
2020-01-04 22:21:39 -05:00
return true, err
}