Files
esdi/tui/internal/views/layoutTool_NewWindow.go
T

145 lines
4.2 KiB
Go

package views
import (
"fmt"
"esdi/cdashdisplay"
"github.com/rivo/tview"
)
type CDashDisplayWindowFormView struct {
Form *tview.Form
X *tview.InputField
Y *tview.InputField
Width *tview.InputField
Height *tview.InputField
Title *tview.InputField
PreviewValue *tview.InputField
ShowID *tview.Checkbox
WinType *tview.DropDown
TitleSize *tview.DropDown
TextSize *tview.DropDown
}
func NewCDashDisplayWindowFormView() *CDashDisplayWindowFormView {
view := &CDashDisplayWindowFormView{}
view.X = tview.NewInputField().SetLabel("x")
view.Y = tview.NewInputField().SetLabel("y")
view.Width = tview.NewInputField().SetLabel("width")
view.Height = tview.NewInputField().SetLabel("height")
view.Title = tview.NewInputField().SetLabel("title")
view.PreviewValue = tview.NewInputField().SetLabel("preview value")
view.ShowID = tview.NewCheckbox().SetLabel("show ID").SetChecked(true)
view.WinType = tview.NewDropDown().SetLabel("type").
SetOptions([]string{"string", "bar"}, func(s string, id int) {}).
SetCurrentOption(0)
view.TitleSize = tview.NewDropDown().SetLabel("Title Size").SetCurrentOption(0)
for k := range 20 {
view.TitleSize.AddOption(fmt.Sprintf("%d", k+1), blankDropdownOptionCallback)
}
view.TitleSize.SetCurrentOption(0)
view.TextSize = tview.NewDropDown().SetLabel("Text Size")
for k := range 20 {
view.TextSize.AddOption(fmt.Sprintf("%d", k+1), blankDropdownOptionCallback)
}
view.TextSize.SetCurrentOption(0)
view.Form = tview.NewForm().
AddFormItem(view.X).
AddFormItem(view.Y).
AddFormItem(view.Width).
AddFormItem(view.Height).
AddFormItem(view.Title).
AddFormItem(view.PreviewValue).
AddFormItem(view.ShowID).
AddFormItem(view.WinType).
AddFormItem(view.TitleSize).
AddFormItem(view.TextSize)
view.Form.SetBorder(true).
SetTitle("New Window Form").
SetTitleAlign(tview.AlignLeft)
// Need to inject the event capture later
return view
}
type CreateWindowFormView struct {
Form *CDashDisplayWindowFormView
CreateBtn *tview.Button
}
func NewCreateWindowFormView() *CreateWindowFormView {
view := &CreateWindowFormView{
Form: NewCDashDisplayWindowFormView(),
}
view.CreateBtn = tview.NewButton("Create")
// Need to inject the button functionality later
view.Form.Form.AddButton("Create", func() {})
return view
}
type WindowFormView struct {
Form *CDashDisplayWindowFormView
UpdateBtn *tview.Button
}
func NewWindowFormView(win *cdashdisplay.UIWindow) *WindowFormView {
view := &WindowFormView{
Form: NewCDashDisplayWindowFormView(),
}
view.UpdateBtn = tview.NewButton("Update")
// Need to inject the button functionality later
// In case the window is moved we need to update this form
// bus.On(ui.WindowMovedEv{}, func(e any) {
// data := e.(ui.WindowMovedEv)
// // Only update the fields if the event is for this thing
// if data.ID != idx {
// return
// }
//
// // Get the current window-info-page
// elem := doc.GetElemByID(windowInfoPageID(data.ID))
// if elem == nil {
// bus.Emit(ui.LogEv{Log: "could't get hold of info page"})
// return
// }
//
// x0.SetText(fmt.Sprintf("%d", data.Dims.X0))
// x0.SetText(fmt.Sprintf("%d", data.Dims.Y0))
// width.SetText(fmt.Sprintf("%d", data.Dims.Width))
// height.SetText(fmt.Sprintf("%d", data.Dims.Height))
// })
// Set the fields data
view.Form.X.SetText(fmt.Sprintf("%d", win.Dims.X0))
view.Form.Y.SetText(fmt.Sprintf("%d", win.Dims.Y0))
view.Form.Width.SetText(fmt.Sprintf("%d", win.Dims.Width))
view.Form.Height.SetText(fmt.Sprintf("%d", win.Dims.Height))
view.Form.Title.SetText(win.Title.String())
view.Form.PreviewValue.SetText(win.Opts.PreviewValue.String())
view.Form.ShowID.SetChecked(win.Opts.ShowID == 1)
view.Form.WinType.SetCurrentOption(0) // NOTE: this needs to set the correct option
view.Form.TitleSize.SetCurrentOption(int(win.Decor.TitleSize))
view.Form.TextSize.SetCurrentOption(int(win.Decor.TextSize))
view.Form.Form.AddButton("Update", func() {})
return view
}
func windowInfoPageID(idx int16) string {
return fmt.Sprintf("layout-tool-win-info-%d", idx)
}
func windowInfoPageTitle(idx int16, title string) string {
return fmt.Sprintf("%s [%02d]", title, idx)
}