153 lines
4.4 KiB
Go
153 lines
4.4 KiB
Go
package views
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"esdi/devices/cdashdisplay"
|
|
"esdi/telemetry"
|
|
|
|
"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
|
|
TelemetryField *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("Win Type").
|
|
SetOptions(cdashdisplay.WinTYPES, func(s string, id int) {}).
|
|
SetCurrentOption(int(cdashdisplay.WinTypeSTRING))
|
|
|
|
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.TelemetryField = tview.NewDropDown().SetLabel("Telemetry Field")
|
|
for _, fieldName := range telemetry.FieldNames {
|
|
view.TelemetryField.AddOption(fieldName, blankDropdownOptionCallback)
|
|
}
|
|
view.TelemetryField.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).
|
|
AddFormItem(view.TelemetryField)
|
|
|
|
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(),
|
|
}
|
|
|
|
// NOTE: is this variable actually used anywhere
|
|
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
|
|
WinID int16
|
|
UpdateBtn *tview.Button
|
|
}
|
|
|
|
func NewWindowFormView(win *cdashdisplay.DesktopUIWindow) *WindowFormView {
|
|
view := &WindowFormView{
|
|
Form: NewCDashDisplayWindowFormView(),
|
|
WinID: win.UIData.IDX,
|
|
}
|
|
view.Form.Form.SetTitle(windowEditFormTitle(win.UIData.IDX, win.Title.String()))
|
|
|
|
view.UpdateBtn = tview.NewButton("Update")
|
|
// Need to inject the button functionality later
|
|
|
|
// Set the fields data
|
|
view.SetValues(win)
|
|
|
|
view.Form.Form.AddButton("Update", func() {})
|
|
|
|
return view
|
|
}
|
|
|
|
func (fv *WindowFormView) SetValues(win *cdashdisplay.DesktopUIWindow) {
|
|
fv.Form.X.SetText(fmt.Sprintf("%d", win.Dims.X0))
|
|
fv.Form.Y.SetText(fmt.Sprintf("%d", win.Dims.Y0))
|
|
fv.Form.Width.SetText(fmt.Sprintf("%d", win.Dims.Width))
|
|
fv.Form.Height.SetText(fmt.Sprintf("%d", win.Dims.Height))
|
|
fv.Form.Title.SetText(win.Title.String())
|
|
fv.Form.PreviewValue.SetText(win.Opts.PreviewValue.String())
|
|
fv.Form.ShowID.SetChecked(win.Opts.ShowID == 1)
|
|
fv.Form.WinType.SetCurrentOption(int(win.Opts.WinType)) // NOTE: this needs to set the correct option
|
|
fv.Form.TitleSize.SetCurrentOption(int(win.Decor.TitleSize))
|
|
fv.Form.TextSize.SetCurrentOption(int(win.Decor.TextSize))
|
|
|
|
telemFieldID, ok := telemetry.GetFieldID(win.UIData.TelemetryField)
|
|
if !ok {
|
|
telemFieldID = 9999
|
|
}
|
|
fv.Form.TelemetryField.SetCurrentOption(int(telemFieldID))
|
|
}
|
|
|
|
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)
|
|
}
|
|
|
|
func windowEditFormTitle(idx int16, title string) string {
|
|
return fmt.Sprintf("[%2d] %s", idx, title)
|
|
}
|