mirror of
https://github.com/VladimirMarkelov/clui.git
synced 2025-04-26 13:49:01 +08:00
83 lines
1.9 KiB
Go
83 lines
1.9 KiB
Go
package clui
|
|
|
|
import (
|
|
term "github.com/nsf/termbox-go"
|
|
)
|
|
|
|
type OkCancelDialog struct {
|
|
view View
|
|
parent *Composer
|
|
result int
|
|
onClose func()
|
|
}
|
|
|
|
func NewOkCancelDialog(c *Composer, title, question string, buttonTitles []string) *OkCancelDialog {
|
|
dlg := new(OkCancelDialog)
|
|
|
|
cw, ch := term.Size()
|
|
|
|
dlg.parent = c
|
|
dlg.view = c.CreateView(cw/2-12, ch/2-8, 20, 10, title)
|
|
dlg.view.SetModal(true)
|
|
dlg.view.SetPack(Vertical)
|
|
NewFrame(dlg.view, dlg.view, 1, 1, BorderNone, DoNotScale)
|
|
|
|
fbtn := NewFrame(dlg.view, dlg.view, 1, 1, BorderNone, 1)
|
|
NewFrame(dlg.view, fbtn, 1, 1, BorderNone, DoNotScale)
|
|
lb := NewLabel(dlg.view, fbtn, 10, 3, question, 1)
|
|
NewFrame(dlg.view, fbtn, 1, 1, BorderNone, DoNotScale)
|
|
lb.SetMultiline(true)
|
|
|
|
NewFrame(dlg.view, dlg.view, 1, 1, BorderNone, DoNotScale)
|
|
frm1 := NewFrame(dlg.view, dlg.view, 16, 4, BorderNone, DoNotScale)
|
|
NewFrame(dlg.view, frm1, 1, 1, BorderNone, 1)
|
|
bText := "OK"
|
|
if len(buttonTitles) > 0 {
|
|
bText = buttonTitles[0]
|
|
}
|
|
btnOk := NewButton(dlg.view, frm1, AutoSize, AutoSize, bText, DoNotScale)
|
|
if len(buttonTitles) > 1 {
|
|
bText = buttonTitles[1]
|
|
} else {
|
|
bText = "Cancel"
|
|
}
|
|
NewFrame(dlg.view, frm1, 1, 1, BorderNone, 1)
|
|
btnCancel := NewButton(dlg.view, frm1, AutoSize, AutoSize, bText, DoNotScale)
|
|
NewFrame(dlg.view, frm1, 1, 1, BorderNone, 1)
|
|
dlg.view.ActivateControl(btnCancel)
|
|
|
|
dlg.view.OnClose(func(ev Event) {
|
|
if dlg.result == DialogAlive {
|
|
dlg.result = DialogClosed
|
|
c.DestroyView(dlg.view)
|
|
if dlg.onClose != nil {
|
|
go dlg.onClose()
|
|
}
|
|
}
|
|
})
|
|
btnOk.OnClick(func(ev Event) {
|
|
dlg.result = DialogOK
|
|
c.DestroyView(dlg.view)
|
|
if dlg.onClose != nil {
|
|
go dlg.onClose()
|
|
}
|
|
})
|
|
btnCancel.OnClick(func(ev Event) {
|
|
dlg.result = DialogCancel
|
|
c.DestroyView(dlg.view)
|
|
if dlg.onClose != nil {
|
|
go dlg.onClose()
|
|
}
|
|
})
|
|
|
|
return dlg
|
|
}
|
|
|
|
func (d *OkCancelDialog) OnClose(fn func()) {
|
|
d.onClose = fn
|
|
}
|
|
|
|
func (d *OkCancelDialog) Result() int {
|
|
return d.result
|
|
}
|