103 lines
2.5 KiB
Go
103 lines
2.5 KiB
Go
// Package views
|
|
package views
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/gdamore/tcell/v2"
|
|
"github.com/rivo/tview"
|
|
)
|
|
|
|
const (
|
|
MainFlexID = "main-flex"
|
|
APIToolPagesID = "api-tool-pages"
|
|
RightFlexID = "right-flex"
|
|
OutputPaneID = "output-window"
|
|
DeviceAPIListID = "device-api-list"
|
|
)
|
|
|
|
const (
|
|
EmptyPageName = "empty-page"
|
|
)
|
|
|
|
type DeviceAPIToolView struct {
|
|
Pages *tview.Pages
|
|
ChangedFn func()
|
|
}
|
|
|
|
func NewDeviceAPIToolView() *DeviceAPIToolView {
|
|
// We need to build a set of pages with an empty page
|
|
emptyPage := tview.NewTextView().
|
|
SetTextAlign(tview.AlignCenter).
|
|
SetChangedFunc(func() {
|
|
// bus.Emit(ui.RedrawEv{})
|
|
})
|
|
emptyPage.SetBorder(true).SetTitle("-- Tool Area --")
|
|
fmt.Fprintf(emptyPage, "No Tool Selected")
|
|
|
|
apiToolPages := tview.NewPages().AddPage(EmptyPageName, emptyPage, true, true)
|
|
|
|
return &DeviceAPIToolView{
|
|
Pages: apiToolPages,
|
|
ChangedFn: func() {}, // blank function to be hooked on
|
|
}
|
|
}
|
|
|
|
type DeviceAPIListView struct {
|
|
List *tview.List
|
|
InputCapture func(*tcell.EventKey) *tcell.EventKey
|
|
ItemOnSelect func()
|
|
}
|
|
|
|
func NewDeviceAPIListView() *DeviceAPIListView {
|
|
deviceAPIList := tview.NewList()
|
|
deviceAPIList.SetBorder(true).SetTitle("list")
|
|
|
|
return &DeviceAPIListView{
|
|
List: deviceAPIList,
|
|
InputCapture: func(ev *tcell.EventKey) *tcell.EventKey { return ev },
|
|
ItemOnSelect: func() {}, // blank functions, they have to be hooked on by the controller
|
|
}
|
|
}
|
|
|
|
type DeviceAPIView struct {
|
|
MainFlex *tview.Flex
|
|
DevAPIList *DeviceAPIListView
|
|
DevAPIToolView *DeviceAPIToolView
|
|
OutputWindow *OutputWinView
|
|
}
|
|
|
|
func (dl *DeviceAPIListView) AddItem(name, description string, onSelect func()) {
|
|
dl.List.AddItem(name, description, 0, onSelect)
|
|
}
|
|
|
|
func NewDeviceAPIView() (*DeviceAPIView, error) {
|
|
mainFlex := tview.NewFlex().SetDirection(tview.FlexColumn)
|
|
|
|
deviceAPIList := NewDeviceAPIListView()
|
|
|
|
apiToolPages := NewDeviceAPIToolView()
|
|
|
|
mainFlex.
|
|
AddItem(deviceAPIList.List, 0, 1, false).
|
|
AddItem(apiToolPages.Pages, 0, 4, false)
|
|
|
|
// Output window
|
|
outputWin := NewOutputWinView()
|
|
|
|
// Flex with debug window
|
|
// --------------------------------------------------------------------------
|
|
flexWithOutputWindow := tview.NewFlex().SetDirection(tview.FlexRow)
|
|
flexWithOutputWindow.
|
|
AddItem(mainFlex, 0, 5, true).
|
|
AddItem(outputWin.TextArea, 0, 2, false)
|
|
// --------------------------------------------------------------------------
|
|
|
|
return &DeviceAPIView{
|
|
MainFlex: flexWithOutputWindow,
|
|
DevAPIList: deviceAPIList,
|
|
DevAPIToolView: apiToolPages,
|
|
OutputWindow: outputWin,
|
|
}, nil
|
|
}
|