104 lines
3.9 KiB
Go
104 lines
3.9 KiB
Go
package dialog
|
|
|
|
import (
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/container"
|
|
"fyne.io/fyne/v2/theme"
|
|
"fyne.io/fyne/v2/widget"
|
|
)
|
|
|
|
var _ Dialog = (*CustomDialog)(nil)
|
|
|
|
// CustomDialog implements a custom dialog.
|
|
//
|
|
// Since: 2.4
|
|
type CustomDialog struct {
|
|
*dialog
|
|
}
|
|
|
|
// NewCustom creates and returns a dialog over the specified application using custom
|
|
// content. The button will have the dismiss text set.
|
|
// The MinSize() of the CanvasObject passed will be used to set the size of the window.
|
|
func NewCustom(title, dismiss string, content fyne.CanvasObject, parent fyne.Window) *CustomDialog {
|
|
d := &dialog{content: content, title: title, parent: parent}
|
|
|
|
d.dismiss = &widget.Button{Text: dismiss, OnTapped: d.Hide}
|
|
d.create(container.NewGridWithColumns(1, d.dismiss))
|
|
|
|
return &CustomDialog{dialog: d}
|
|
}
|
|
|
|
// ShowCustom shows a dialog over the specified application using custom
|
|
// content. The button will have the dismiss text set.
|
|
// The MinSize() of the CanvasObject passed will be used to set the size of the window.
|
|
func ShowCustom(title, dismiss string, content fyne.CanvasObject, parent fyne.Window) {
|
|
NewCustom(title, dismiss, content, parent).Show()
|
|
}
|
|
|
|
// NewCustomWithoutButtons creates a new custom dialog without any buttons.
|
|
// The MinSize() of the CanvasObject passed will be used to set the size of the window.
|
|
//
|
|
// Since: 2.4
|
|
func NewCustomWithoutButtons(title string, content fyne.CanvasObject, parent fyne.Window) *CustomDialog {
|
|
d := &dialog{content: content, title: title, parent: parent}
|
|
d.create(container.NewGridWithColumns(1))
|
|
|
|
return &CustomDialog{dialog: d}
|
|
}
|
|
|
|
// SetButtons sets the row of buttons at the bottom of the dialog.
|
|
// Passing an empty slice will result in a dialog with no buttons.
|
|
//
|
|
// Since: 2.4
|
|
func (d *CustomDialog) SetButtons(buttons []fyne.CanvasObject) {
|
|
d.dismiss = nil // New button row invalidates possible dismiss button.
|
|
d.setButtons(container.NewGridWithRows(1, buttons...))
|
|
}
|
|
|
|
// SetIcon sets an icon to be shown in the top right of the dialog.
|
|
// Passing a nil resource will remove the icon from the dialog.
|
|
//
|
|
// Since: 2.6
|
|
func (d *CustomDialog) SetIcon(icon fyne.Resource) {
|
|
d.setIcon(icon)
|
|
}
|
|
|
|
// ShowCustomWithoutButtons shows a dialog, without buttons, over the specified application
|
|
// using custom content.
|
|
// The MinSize() of the CanvasObject passed will be used to set the size of the window.
|
|
//
|
|
// Since: 2.4
|
|
func ShowCustomWithoutButtons(title string, content fyne.CanvasObject, parent fyne.Window) {
|
|
NewCustomWithoutButtons(title, content, parent).Show()
|
|
}
|
|
|
|
// NewCustomConfirm creates and returns a dialog over the specified application using
|
|
// custom content. The cancel button will have the dismiss text set and the "OK" will
|
|
// use the confirm text. The response callback is called on user action.
|
|
// The MinSize() of the CanvasObject passed will be used to set the size of the window.
|
|
func NewCustomConfirm(title, confirm, dismiss string, content fyne.CanvasObject,
|
|
callback func(bool), parent fyne.Window) *ConfirmDialog {
|
|
d := &dialog{content: content, title: title, parent: parent, callback: callback}
|
|
|
|
d.dismiss = &widget.Button{Text: dismiss, Icon: theme.CancelIcon(),
|
|
OnTapped: d.Hide,
|
|
}
|
|
ok := &widget.Button{Text: confirm, Icon: theme.ConfirmIcon(), Importance: widget.HighImportance,
|
|
OnTapped: func() {
|
|
d.hideWithResponse(true)
|
|
},
|
|
}
|
|
d.create(container.NewGridWithColumns(2, d.dismiss, ok))
|
|
|
|
return &ConfirmDialog{dialog: d, confirm: ok}
|
|
}
|
|
|
|
// ShowCustomConfirm shows a dialog over the specified application using custom
|
|
// content. The cancel button will have the dismiss text set and the "OK" will use
|
|
// the confirm text. The response callback is called on user action.
|
|
// The MinSize() of the CanvasObject passed will be used to set the size of the window.
|
|
func ShowCustomConfirm(title, confirm, dismiss string, content fyne.CanvasObject,
|
|
callback func(bool), parent fyne.Window) {
|
|
NewCustomConfirm(title, confirm, dismiss, content, callback, parent).Show()
|
|
}
|