75 lines
2.6 KiB
Go
75 lines
2.6 KiB
Go
// 7 february 2014
|
|
|
|
package ui
|
|
|
|
// Dialog is an interface adopted by all dialogs.
|
|
type Dialog struct {
|
|
Response() Response // response code from the dialog
|
|
Selection() interface{} // currently nil
|
|
}
|
|
|
|
// Response denotes a response from the user to a Dialog.
|
|
type Response uint
|
|
const (
|
|
NotDone Response = iota
|
|
OK
|
|
)
|
|
|
|
// basic return
|
|
type dialogret struct {
|
|
res Response
|
|
sel interface{}
|
|
}
|
|
func (d *dialogret) Response() Response { return d.res }
|
|
func (d *dialogret) Selection() interface{} { return d.sel }
|
|
|
|
// sentinel (not nil so programmer errors don't go undetected)
|
|
// this window is invalid and cannot be used directly
|
|
// notice the support it uses
|
|
var dialogWindow = &Window{
|
|
sysData: &sysData{
|
|
winhandler: dh,
|
|
}
|
|
}
|
|
type dhandler chan *dialogret
|
|
func (d dhandler) Event(e Event, dat interface{}) {
|
|
d <- dat.(*dialogret)
|
|
}
|
|
var dh = make(dhandler)
|
|
|
|
// MsgBox displays an informational message box to the user with just an OK button.
|
|
// primaryText should be a short string describing the message, and will be displayed with additional emphasis on platforms that support it.
|
|
// Optionally, secondaryText can be used to show additional information.
|
|
// If you pass an empty string for secondaryText, neither additional information nor space for additional information will be shown.
|
|
// On platforms that allow for the message box window to have a title, os.Args[0] is used.
|
|
//
|
|
// See "On Dialogs" in the package overview for behavioral information.
|
|
func MsgBox(primaryText string, secondaryText string) Response {
|
|
dialogWindow.msgBox(primaryText, secondaryText)
|
|
return (<-dh).res
|
|
}
|
|
|
|
// MsgBox is the Window method version of the package-scope function MsgBox.
|
|
// See that function's documentation and "On Dialogs" in the package overview for more information.
|
|
func (w *Window) MsgBox(primaryText string, secondaryText string) Dialog {
|
|
if !w.created {
|
|
panic("parent window passed to Window.MsgBox() before it was created")
|
|
}
|
|
return w.msgBox(primaryText, secondaryText)
|
|
}
|
|
|
|
// MsgBoxError displays a message box to the user with just an OK button and an icon indicating an error.
|
|
// Otherwise, it behaves like MsgBox.
|
|
//
|
|
// See "On Dialogs" in the package overview for more information.
|
|
func MsgBoxError(primaryText string, secondaryText string) Dialog {
|
|
dialogWindow.msgBoxError(primaryText, secondaryText)
|
|
return (<-dh).res
|
|
}
|
|
|
|
// MsgBoxError is the Window method version of the package-scope function MsgBoxError.
|
|
// See that function's documentation and "On Dialogs" in the package overview for more information.
|
|
func (w *Window) MsgBoxError(primaryText string, secondaryText string) Dialog {
|
|
return w.msgBoxError(primaryText, secondaryText)
|
|
}
|