253 lines
8.0 KiB
Go
253 lines
8.0 KiB
Go
// +build dialog all
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"runtime"
|
|
"time"
|
|
|
|
"github.com/gen2brain/dlgs"
|
|
)
|
|
|
|
const dialogIsOn = true
|
|
|
|
var dialogLib = vars{
|
|
"gui-choose-file": func(a ...expression) expression {
|
|
if len(a) < 1 {
|
|
return exception("'gui-choose-file' expected a title string, too few arguments were given")
|
|
}
|
|
title := String(a[0], false)
|
|
filter := ""
|
|
if len(a) > 1 {
|
|
filter = String(a[1], false)
|
|
}
|
|
dir := false
|
|
if len(a) > 2 {
|
|
dir = AnythingToBool(a[2]).(bool)
|
|
}
|
|
str, b, err := dlgs.File(title, filter, dir)
|
|
if err != nil {
|
|
return makeDialogException("gui-choose-file", err)
|
|
}
|
|
if b {
|
|
return str
|
|
}
|
|
return false
|
|
},
|
|
"gui-choose-files": func(a ...expression) expression {
|
|
if len(a) < 1 {
|
|
return exception("'gui-choose-files' expected a title string, too few arguments were given")
|
|
}
|
|
title := String(a[0], false)
|
|
filter := ""
|
|
if len(a) > 1 {
|
|
filter = String(a[1], false)
|
|
}
|
|
strs, b, err := dlgs.FileMulti(title, filter)
|
|
if err != nil {
|
|
return makeDialogException("gui-choose-files", err)
|
|
}
|
|
if b {
|
|
return StringSliceToExpressionSlice(strs)
|
|
}
|
|
return false
|
|
},
|
|
"gui-choose-color": func(a ...expression) expression {
|
|
if len(a) < 1 {
|
|
return exception("'gui-choose-color' expected a title string, too few arguments were given")
|
|
}
|
|
title := String(a[0], false)
|
|
defaultHex := "#FFFFFF"
|
|
if len(a) > 1 {
|
|
defaultHex = String(a[1], false)
|
|
}
|
|
clr, b, err := dlgs.Color(title, defaultHex)
|
|
if err != nil {
|
|
return makeDialogException("gui-choose-color", err)
|
|
}
|
|
if b {
|
|
r, g, b, _ := clr.RGBA()
|
|
return fmt.Sprintf("#%02x%02x%02x", r, g, b)
|
|
}
|
|
return false
|
|
},
|
|
"gui-choose-date": func(a ...expression) expression {
|
|
if len(a) < 2 {
|
|
return exception("'gui-choose-date' expected a title string and a message string, too few arguments were given")
|
|
}
|
|
title := String(a[0], false)
|
|
msg := String(a[1], false)
|
|
d, b, err := dlgs.Date(title, msg, time.Now())
|
|
if err != nil {
|
|
return makeDialogException("gui-choose-date", err)
|
|
}
|
|
if b {
|
|
return d.Format("%w %f %d %g:%I:%S %O %Z %Y")
|
|
}
|
|
return false
|
|
},
|
|
"gui-show-info": func(a ...expression) expression {
|
|
if len(a) < 2 {
|
|
return exception("'gui-show-info' expected a title string and a message string, too few arguments were given")
|
|
}
|
|
title := String(a[0], false)
|
|
msg := String(a[1], false)
|
|
_, err := dlgs.Info(title, msg)
|
|
if err != nil {
|
|
return makeDialogException("gui-show-info", err)
|
|
}
|
|
return true
|
|
},
|
|
"gui-show-warning": func(a ...expression) expression {
|
|
if len(a) < 2 {
|
|
return exception("'gui-show-warning' expected a title string and a message string, too few arguments were given")
|
|
}
|
|
title := String(a[0], false)
|
|
msg := String(a[1], false)
|
|
_, err := dlgs.Warning(title, msg)
|
|
if err != nil {
|
|
return makeDialogException("gui-show-warning", err)
|
|
}
|
|
return true
|
|
},
|
|
"gui-show-message": func(a ...expression) expression {
|
|
if len(a) < 2 {
|
|
return exception("'gui-show-message' expected a title string and a message string, too few arguments were given")
|
|
}
|
|
title := String(a[0], false)
|
|
msg := String(a[1], false)
|
|
_, err := dlgs.MessageBox(title, msg)
|
|
if err != nil {
|
|
return makeDialogException("gui-show-message", err)
|
|
}
|
|
return true
|
|
|
|
},
|
|
"gui-show-error": func(a ...expression) expression {
|
|
if len(a) < 2 {
|
|
return exception("'gui-show-error' expected a title string and a message string, too few arguments were given")
|
|
}
|
|
title := String(a[0], false)
|
|
msg := String(a[1], false)
|
|
_, err := dlgs.Error(title, msg)
|
|
if err != nil {
|
|
return makeDialogException("gui-show-error", err)
|
|
}
|
|
return true
|
|
},
|
|
"gui-get-text": func(a ...expression) expression {
|
|
if len(a) < 2 {
|
|
return exception("'gui-get-text' expected a title string and a message string, too few arguments were given")
|
|
}
|
|
title := String(a[0], false)
|
|
msg := String(a[1], false)
|
|
defaultText := ""
|
|
if len(a) > 2 {
|
|
defaultText = String(a[2], false)
|
|
}
|
|
s, b, err := dlgs.Entry(title, msg, defaultText)
|
|
if err != nil {
|
|
return makeDialogException("gui-get-text", err)
|
|
}
|
|
if b {
|
|
return s
|
|
}
|
|
return false
|
|
},
|
|
"gui-get-password": func(a ...expression) expression {
|
|
if len(a) < 2 {
|
|
return exception("'gui-get-password' expected a title string and a message string, too few arguments were given")
|
|
}
|
|
title := String(a[0], false)
|
|
msg := String(a[1], false)
|
|
s, b, err := dlgs.Password(title, msg)
|
|
if err != nil {
|
|
return makeDialogException("gui-get-password", err)
|
|
}
|
|
if b {
|
|
return s
|
|
}
|
|
return false
|
|
},
|
|
"gui-get-confirm": func(a ...expression) expression {
|
|
if len(a) < 2 {
|
|
return exception("'gui-get-confirm' expected a title string and a message string, too few arguments were given")
|
|
}
|
|
title := String(a[0], false)
|
|
msg := String(a[1], false)
|
|
defaultCancel := false
|
|
if len(a) > 2 {
|
|
defaultCancel = AnythingToBool(a[2]).(bool)
|
|
}
|
|
b, err := dlgs.Question(title, msg, defaultCancel)
|
|
if err != nil {
|
|
return makeDialogException("gui-get-password", err)
|
|
}
|
|
return b
|
|
},
|
|
"gui-select": func(a ...expression) expression {
|
|
if len(a) < 3 {
|
|
return exception("'gui-select' expected a title string, a message string, and a list of options; too few arguments were given")
|
|
}
|
|
title := String(a[0], false)
|
|
msg := String(a[1], false)
|
|
exSlice, ok := a[2].([]expression)
|
|
if !ok {
|
|
return exception("'gui-select' expected a list as its third argument; a non-list value was given")
|
|
}
|
|
list := ExpressionSliceToStringSlice(exSlice)
|
|
s, b, err := dlgs.List(title, msg, list)
|
|
if err != nil {
|
|
return makeDialogException("gui-select", err)
|
|
}
|
|
if b {
|
|
return s
|
|
}
|
|
return false
|
|
},
|
|
"gui-select-multiple": func(a ...expression) expression {
|
|
if len(a) < 3 {
|
|
return exception("'gui-select-multiple' expected a title string, a message string, and a list of options; too few arguments were given")
|
|
}
|
|
title := String(a[0], false)
|
|
msg := String(a[1], false)
|
|
exSlice, ok := a[2].([]expression)
|
|
if !ok {
|
|
return exception("'gui-select-multiple' expected a list as its third argument; a non-list value was given")
|
|
}
|
|
list := ExpressionSliceToStringSlice(exSlice)
|
|
sSlice, b, err := dlgs.ListMulti(title, msg, list)
|
|
if err != nil {
|
|
return makeDialogException("gui-select-multiple", err)
|
|
}
|
|
if b {
|
|
return StringSliceToExpressionSlice(sSlice)
|
|
}
|
|
return false
|
|
},
|
|
}
|
|
|
|
var dialogUsageStrings = map[string]string{
|
|
"gui-choose-file": "(gui-choose-file [title: string] [filter: string] [[directory-only?: bool]]) => string|#f",
|
|
"gui-choose-files": "(gui-choose-files [title: string] [filter: string]) => list|#f",
|
|
"gui-choose-color": "(gui-choose-color [title: string] [[default: string]]) => string|#f\n\nWill default to #FFFFFF unless a default is given. The default should be a string formatted like: \"#FF0022\". The returned string will be in the same format",
|
|
"gui-choose-date": "(gui-choose-date [title: string] [message: string]) => string|#f\n\nThe starting date defaults to the current date. Returns a date string in the slope default format, or #f if the window is closed or cancelled",
|
|
"gui-show-info": "(gui-show-info [title: string] [message: string]) => #t",
|
|
"gui-show-warning": "(gui-show-info [title: string] [message: string]) => #t",
|
|
"gui-show-error": "(gui-show-info [title: string] [message: string]) => #t",
|
|
"gui-show-message": "(gui-show-info [title: string] [message: string]) => #t",
|
|
"gui-get-text": "(gui-get-text [title: string] [message: string] [[default: string]]) => string|#f",
|
|
"gui-get-password": "(gui-get-text [title: string] [message: string]) => string|#f",
|
|
"gui-get-confirm": "(gui-show-info [title: string] [message: string]) => bool",
|
|
"gui-select": "(gui-select [title: string] [message: string] [options: list]) => string|#f",
|
|
"gui-select-multiple": "(gui-select-multiple [title: string] [message: string] [options: list]) => list|#f",
|
|
}
|
|
|
|
func makeDialogException(procName string, e error) exception {
|
|
if e == dlgs.ErrUnsupported {
|
|
return exception("The gui-* procedures have not been implemented for " + runtime.GOOS)
|
|
}
|
|
return exception(fmt.Sprintf("'%s' not available for %s", procName, runtime.GOOS))
|
|
}
|