diff --git a/cmd/repl.go b/cmd/repl.go index 33ffe13..f4044f9 100644 --- a/cmd/repl.go +++ b/cmd/repl.go @@ -1,7 +1,7 @@ package cmd import ( - "esdi/t" + "esdi/tui" "github.com/spf13/cobra" ) @@ -98,9 +98,7 @@ import ( func replCmdAction(cmd *cobra.Command, args []string) { // repl.Run() - // tui.Run() - // teatui.Run() - t.Run() + tui.Run() } // removeLabelCmd represents the removeLabel command diff --git a/t/tui.go b/t/tui.go deleted file mode 100644 index b894445..0000000 --- a/t/tui.go +++ /dev/null @@ -1,9 +0,0 @@ -// Package t -package t - -import "esdi/t/internal/tui" - -func Run() error { - app := tui.NewTUI() - return app.Start() -} diff --git a/teaTui/main.go b/teaTui/main.go deleted file mode 100644 index f5c4987..0000000 --- a/teaTui/main.go +++ /dev/null @@ -1,106 +0,0 @@ -// Package teatui -package teatui - -import ( - "fmt" - "os" - - tea "github.com/charmbracelet/bubbletea" -) - -type model struct { - choices []string - cursor int - selected map[int]struct{} -} - -func initialModel() model { - return model{ - choices: []string{"Buy carrots", "Buy celery", "Buy holhrabi"}, - selected: make(map[int]struct{}), - } -} - -func (m model) Init() tea.Cmd { - return nil -} - -func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { - switch msg := msg.(type) { - - // Is it a key press? - case tea.KeyMsg: - - // Cool, what was the actual key pressed? - switch msg.String() { - - // These keys should exit the program. - case "ctrl+c", "q": - return m, tea.Quit - - // The "up" and "k" keys move the cursor up - case "up", "k": - if m.cursor > 0 { - m.cursor-- - } - - // The "down" and "j" keys move the cursor down - case "down", "j": - if m.cursor < len(m.choices)-1 { - m.cursor++ - } - - // The "enter" key and the spacebar (a literal space) toggle - // the selected state for the item that the cursor is pointing at. - case "enter", " ": - _, ok := m.selected[m.cursor] - if ok { - delete(m.selected, m.cursor) - } else { - m.selected[m.cursor] = struct{}{} - } - } - } - - // Return the updated model to the Bubble Tea runtime for processing. - // Note that we're not returning a command. - return m, nil -} - -func (m model) View() string { - // The header - s := "What should we buy at the market?\n\n" - - // Iterate over our choices - for i, choice := range m.choices { - - // Is the cursor pointing at this choice? - cursor := " " // no cursor - if m.cursor == i { - cursor = ">" // cursor! - } - - // Is this choice selected? - checked := " " // not selected - if _, ok := m.selected[i]; ok { - checked = "x" // selected! - } - - // Render the row - s += fmt.Sprintf("%s [%s] %s\n", cursor, checked, choice) - } - - // The footer - s += "\nPress q to quit.\n" - - // Send the UI for rendering - return s -} - -func Run() { - p := tea.NewProgram(initialModel(), tea.WithAltScreen()) - if _, err := p.Run(); err != nil { - fmt.Printf("Alas, there's been an error: %v", err) - os.Exit(1) - } -} diff --git a/tui/backend.go b/tui/backend.go deleted file mode 100644 index 1656de7..0000000 --- a/tui/backend.go +++ /dev/null @@ -1,13 +0,0 @@ -package tui - -import "github.com/rivo/tview" - -func createWindow(t *tui, x, y, width, height, title string, tree *tview.TreeView) { - t.log("x : %s\n", x) - t.log("y : %s\n", y) - t.log("width : %s\n", width) - t.log("height: %s\n", height) - t.log("title : %s\n", title) - - newWindow := tview.NewTreeNode(title) -} diff --git a/tui/createLayoutUI.go b/tui/createLayoutUI.go deleted file mode 100644 index be847bf..0000000 --- a/tui/createLayoutUI.go +++ /dev/null @@ -1,103 +0,0 @@ -package tui - -import ( - "github.com/gdamore/tcell/v2" - "github.com/rivo/tview" -) - -type cDashWinLayout struct { - tree *tview.TreeView -} - -func createNewWindowForm(t *tui, dp *devicePane, tree *tview.TreeView, f *tview.Pages) { - x0 := tview.NewInputField().SetLabel("x") - y0 := tview.NewInputField().SetLabel("y") - width := tview.NewInputField().SetLabel("width") - height := tview.NewInputField().SetLabel("height") - title := tview.NewInputField().SetLabel("title") - - form := tview.NewForm(). - AddFormItem(x0). - AddFormItem(y0). - AddFormItem(width). - AddFormItem(height). - AddFormItem(title). - AddButton("Create", func() { - createWindow( - t, - x0.GetText(), - y0.GetText(), - width.GetText(), - height.GetText(), - title.GetText(), - tree, - ) - }) - - form.SetBorder(true). - SetTitle("new window form"). - SetTitleAlign(tview.AlignLeft). - SetInputCapture(func(ev *tcell.EventKey) *tcell.EventKey { - switch ev.Key() { - case tcell.KeyEscape: - f.RemovePage("new-window-form") - t.app.SetFocus(tree) - } - - return ev - }) - - f.RemovePage("new-window-form") - f.AddPage("new-window-form", form, true, true) - - t.app.SetFocus(form) -} - -func createLayoutUIFormKeybinds(t *tui, dp *devicePane, - tree *tview.TreeView, f *tview.Pages) func(*tcell.EventKey) *tcell.EventKey { - return func(ev *tcell.EventKey) *tcell.EventKey { - switch ev.Key() { - case tcell.KeyEscape: - t.app.SetFocus(dp.apiPane) - } - - switch ev.Rune() { - case 'N': - // Create a new screen - case 'n': - // Create a new window - t.log("calling new window form\n") - createNewWindowForm(t, dp, tree, f) - case 'x': - // Delete selected window - case 'm': - // Go into move mode - case 'e': - // Go into edit mode - } - - return ev - } -} - -func createLayoutUI(t *tui, dp *devicePane) { - layoutTree := tview.NewTreeView() - actionPages := tview.NewPages() - - flex := tview.NewFlex().SetDirection(tview.FlexRow). - AddItem(layoutTree, 0, 1, true). - AddItem(actionPages, 0, 2, true) - - root := tview.NewTreeNode("Root").SetColor(tcell.ColorRed) - layoutTree.SetRoot(root).SetCurrentNode(root) - layoutTree. - SetBorder(true). - SetTitle("Tree"). - SetTitleAlign(tview.AlignLeft). - SetInputCapture(createLayoutUIFormKeybinds(t, dp, layoutTree, actionPages)) - - dp.actionPane.RemovePage("action") - dp.actionPane.AddPage("action", flex, true, true) - - t.app.SetFocus(layoutTree) -} diff --git a/tui/internal/controllers/mainc.go b/tui/internal/controllers/mainc.go new file mode 100644 index 0000000..097da54 --- /dev/null +++ b/tui/internal/controllers/mainc.go @@ -0,0 +1,5 @@ +// Package controllers defines our controller layer +package controllers + +type MainController struct { +} diff --git a/t/internal/controllers/windowing.go b/tui/internal/controllers/windowing.go similarity index 93% rename from t/internal/controllers/windowing.go rename to tui/internal/controllers/windowing.go index 7fa7142..e76a464 100644 --- a/t/internal/controllers/windowing.go +++ b/tui/internal/controllers/windowing.go @@ -2,9 +2,9 @@ package controllers import ( - "esdi/t/internal/events" - "esdi/t/internal/models" - "esdi/t/internal/ui" + "esdi/tui/internal/events" + "esdi/tui/internal/models" + "esdi/tui/internal/ui" "strconv" ) diff --git a/t/internal/dom/dom.go b/tui/internal/dom/dom.go similarity index 100% rename from t/internal/dom/dom.go rename to tui/internal/dom/dom.go diff --git a/t/internal/dom/uinode.go b/tui/internal/dom/uinode.go similarity index 100% rename from t/internal/dom/uinode.go rename to tui/internal/dom/uinode.go diff --git a/t/internal/events/bus.go b/tui/internal/events/bus.go similarity index 100% rename from t/internal/events/bus.go rename to tui/internal/events/bus.go diff --git a/t/internal/events/events.go b/tui/internal/events/events.go similarity index 80% rename from t/internal/events/events.go rename to tui/internal/events/events.go index ef57006..3e78b95 100644 --- a/t/internal/events/events.go +++ b/tui/internal/events/events.go @@ -1,7 +1,7 @@ package events import ( - "esdi/t/internal/models" + "esdi/tui/internal/models" ) type Error struct { diff --git a/t/internal/events/helper.go b/tui/internal/events/helper.go similarity index 100% rename from t/internal/events/helper.go rename to tui/internal/events/helper.go diff --git a/t/internal/models/window.go b/tui/internal/models/window.go similarity index 100% rename from t/internal/models/window.go rename to tui/internal/models/window.go diff --git a/t/internal/tui/tui.go b/tui/internal/tui/tui.go similarity index 93% rename from t/internal/tui/tui.go rename to tui/internal/tui/tui.go index e19f255..f4ca56f 100644 --- a/t/internal/tui/tui.go +++ b/tui/internal/tui/tui.go @@ -2,11 +2,11 @@ package tui import ( - "esdi/t/internal/controllers" - dom "esdi/t/internal/dom" - "esdi/t/internal/events" - "esdi/t/internal/ui" - "esdi/t/internal/views" + "esdi/tui/internal/controllers" + "esdi/tui/internal/dom" + "esdi/tui/internal/events" + "esdi/tui/internal/ui" + "esdi/tui/internal/views" "fmt" "github.com/gdamore/tcell/v2" diff --git a/t/internal/ui/context.go b/tui/internal/ui/context.go similarity index 100% rename from t/internal/ui/context.go rename to tui/internal/ui/context.go diff --git a/t/internal/views/aux.go b/tui/internal/views/aux.go similarity index 91% rename from t/internal/views/aux.go rename to tui/internal/views/aux.go index 084392b..28f911e 100644 --- a/t/internal/views/aux.go +++ b/tui/internal/views/aux.go @@ -1,8 +1,8 @@ package views import ( - "esdi/t/internal/dom" - "esdi/t/internal/ui" + "esdi/tui/internal/dom" + "esdi/tui/internal/ui" "slices" "github.com/rivo/tview" diff --git a/t/internal/views/layoutTool.go b/tui/internal/views/layoutTool.go similarity index 98% rename from t/internal/views/layoutTool.go rename to tui/internal/views/layoutTool.go index f48f582..220790c 100644 --- a/t/internal/views/layoutTool.go +++ b/tui/internal/views/layoutTool.go @@ -1,10 +1,10 @@ package views import ( - "esdi/t/internal/controllers" - "esdi/t/internal/dom" - "esdi/t/internal/events" - "esdi/t/internal/ui" + "esdi/tui/internal/controllers" + "esdi/tui/internal/dom" + "esdi/tui/internal/events" + "esdi/tui/internal/ui" "github.com/gdamore/tcell/v2" "github.com/rivo/tview" diff --git a/t/internal/views/mainFlex.go b/tui/internal/views/mainFlex.go similarity index 96% rename from t/internal/views/mainFlex.go rename to tui/internal/views/mainFlex.go index b8fe706..c015ee6 100644 --- a/t/internal/views/mainFlex.go +++ b/tui/internal/views/mainFlex.go @@ -4,9 +4,9 @@ package views import ( "fmt" - "esdi/t/internal/controllers" - "esdi/t/internal/dom" - "esdi/t/internal/ui" + "esdi/tui/internal/controllers" + "esdi/tui/internal/dom" + "esdi/tui/internal/ui" "github.com/rivo/tview" ) diff --git a/t/internal/views/outputWin.go b/tui/internal/views/outputWin.go similarity index 89% rename from t/internal/views/outputWin.go rename to tui/internal/views/outputWin.go index eac218d..6308b3c 100644 --- a/t/internal/views/outputWin.go +++ b/tui/internal/views/outputWin.go @@ -1,8 +1,8 @@ package views import ( - "esdi/t/internal/dom" - "esdi/t/internal/ui" + "esdi/tui/internal/dom" + "esdi/tui/internal/ui" "github.com/rivo/tview" ) diff --git a/tui/layout.go b/tui/layout.go deleted file mode 100644 index f458441..0000000 --- a/tui/layout.go +++ /dev/null @@ -1,20 +0,0 @@ -package tui - -import "github.com/rivo/tview" - -type ui struct { - Elements map[string]*view -} - -func NewUI() *ui { - return &ui{ - Elements: make(map[string]*view), - } -} - -type view struct { - ID string - Title string - Root tview.Primitive - Children []*view -} diff --git a/tui/tui.go b/tui/tui.go index 66e767b..2dbc207 100644 --- a/tui/tui.go +++ b/tui/tui.go @@ -1,126 +1,9 @@ // Package tui package tui -import ( - "fmt" - - "github.com/gdamore/tcell/v2" - "github.com/rivo/tview" -) - -type layout struct { - root *tview.Flex -} - -type devicePane struct { - apiPane *tview.List - actionPane *tview.Pages - flexPane *tview.Flex -} - -func NewDevicePane(t *tui) *devicePane { - dp := &devicePane{} - - dp.actionPane = tview.NewPages() - - dp.apiPane = tview.NewList(). - AddItem("destroy-window", "", 0, func() { - dp.actionPane.RemovePage("action") - dp.actionPane.AddPage("action", - tview.NewBox().SetBorder(true).SetTitle("destroy"), - true, true, - ) - }). - AddItem("layout", "", 0, func() { - createLayoutUI(t, dp) - }) - - dp.apiPane.SetBorder(true).SetTitle("API") - - dp.flexPane = tview.NewFlex(). - SetDirection(tview.FlexColumn). - AddItem(dp.apiPane, 0, 1, true). - AddItem(dp.actionPane, 0, 4, false) - - return dp -} - -type debugPane struct { - view *tview.TextView -} - -func NewDebugPane(t *tui) *debugPane { - output := tview.NewTextView(). - SetDynamicColors(true). - SetRegions(true). - SetChangedFunc(func() { - t.debug.view.ScrollToEnd() - t.app.Draw() - }) - output.SetBorder(true).SetTitle("Output:") - - return &debugPane{ - view: output, - } -} - -type tui struct { - app *tview.Application - layout *layout - debug *debugPane - device *devicePane -} - -func (t *tui) log(formatter string, args ...any) { - fmt.Fprintf(t.debug.view, formatter, args...) -} - -func NewTUI() *tui { - t := &tui{} - - debug := NewDebugPane(t) - device := NewDevicePane(t) - - // tui.registerDevices() - // - // tui.esdi.PeripheralClerk.FindDevices() - // tui.populateDeviceList() - - mainFlex := tview.NewFlex().SetDirection(tview.FlexRow). - AddItem(device.flexPane, 0, 2, true). - AddItem(debug.view, 0, 1, false) - - t.app = tview.NewApplication() - t.layout = &layout{ - root: mainFlex, - } - t.debug = debug - t.device = device - - return t -} - -func (t *tui) Start() error { - t.app.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey { - if event.Key() == tcell.KeyCtrlC || event.Rune() == 'q' { - t.app.Stop() - return nil - } - - return event - }) - - err := t.app.SetRoot(t.layout.root, true). - SetFocus(t.device.apiPane).Run() - if err != nil { - return err - } - - return nil -} +import "esdi/tui/internal/tui" func Run() error { - // Prepare the UI here - newTui := NewTUI() - return newTui.Start() + app := tui.NewTUI() + return app.Start() }