diff --git a/cmd/gosdn-tview/app/app.go b/cmd/gosdn-tview/app/app.go index d8e9772d64646567ea861a49c708ed164e18b4d1..e65af13c574abbc01551afc45e88323d4b36c2da 100644 --- a/cmd/gosdn-tview/app/app.go +++ b/cmd/gosdn-tview/app/app.go @@ -5,8 +5,10 @@ import "github.com/rivo/tview" type view interface { GetContent() tview.Primitive } + type App struct { - app *tview.Application + app *tview.Application + pages *tview.Pages } func NewApp() *App { @@ -16,8 +18,19 @@ func NewApp() *App { return a } -func (a *App) SetView(v view) { - a.app.SetRoot(v.GetContent(), true) +func (a *App) SetRoot(v view) { + a.pages = v.GetContent().(*tview.Pages) + a.app.SetRoot(a.pages, true) +} + +func (a *App) SwitchPage(s string) { + if a.pages.HasPage(s) { + a.pages.SwitchToPage(s) + } +} + +func (a *App) AddPage(name string, p view) { + a.pages.AddPage(name, p.GetContent(), true, false) } func (a *App) Run() error { diff --git a/cmd/gosdn-tview/main.go b/cmd/gosdn-tview/main.go index 36570d4941e3363c9cbe9cf47eb8279570585a7c..ef8c54ef9c799e70f0471414f67bcc0f339ec22f 100644 --- a/cmd/gosdn-tview/main.go +++ b/cmd/gosdn-tview/main.go @@ -14,7 +14,11 @@ func main() { } app := app.NewApp() - app.SetView(views.NewMainView(app, conn)) + mainView := views.NewMainView(app, conn) + addPNDView := views.NewAddPNDView(app) + + app.SetRoot(mainView) + app.AddPage("PND", addPNDView) app.Run() defer app.Stop() diff --git a/cmd/gosdn-tview/views/addPNDView.go b/cmd/gosdn-tview/views/addPNDView.go new file mode 100644 index 0000000000000000000000000000000000000000..0060852eeb51293b9a76b5784680a6b726cdb9b3 --- /dev/null +++ b/cmd/gosdn-tview/views/addPNDView.go @@ -0,0 +1,35 @@ +package views + +import ( + "code.fbi.h-da.de/cocsn/gosdn/cmd/gosdn-tview/app" + "github.com/rivo/tview" +) + +type AddPNDView struct { + addPNDView *tview.Form +} + +func NewAddPNDView(app *app.App) *AddPNDView { + pndv := &AddPNDView{ + addPNDView: tview.NewForm(), + } + pndv.addPNDView. + AddInputField("Name", "", 20, nil, nil). + AddInputField("description", "", 20, nil, nil). + AddDropDown("SI", []string{"Southbound 1", "Southbound 2", "Southbound 3", "Southbound 4"}, 0, nil). + AddButton("Send", func() { + //TODO: call grpc function here + }). + AddButton("Abort", func() { + app.SwitchPage("main") + }). + SetCancelFunc(func() { + app.SwitchPage("main") + }) + + return pndv +} + +func (pndv *AddPNDView) GetContent() tview.Primitive { + return pndv.addPNDView +} diff --git a/cmd/gosdn-tview/views/commandsListView.go b/cmd/gosdn-tview/views/commandsListView.go index 8e4009a968d073e70c5da41474daa43ce6e481b2..16ff032ba64f44947ebccd07134ab5f82e59597d 100644 --- a/cmd/gosdn-tview/views/commandsListView.go +++ b/cmd/gosdn-tview/views/commandsListView.go @@ -28,6 +28,11 @@ func (cv *CommandListView) GetContent() tview.Primitive { func (cv *CommandListView) GetCommands(app *app.App, rv *ResultAndInputView, conn *grpc.ClientConn) { + //TODO: create own command in grpc -> commands + cv.commandsList.AddItem("AddPND", "closes the application", '!', func() { + app.SwitchPage("PND") + }) + for i, command := range commands.CommandList { f := command.Function cv.commandsList.