diff options
Diffstat (limited to 'i_ui.go')
-rw-r--r-- | i_ui.go | 70 |
1 files changed, 64 insertions, 6 deletions
@@ -39,7 +39,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * hardflip: src/c_hardflip.go - * Mon, 18 Dec 2023 16:50:31 +0100 + * Mon, 18 Dec 2023 17:59:45 +0100 * Joe * * interfacing with the user @@ -50,9 +50,12 @@ package main import ( "os" "github.com/gdamore/tcell/v2" + "golang.org/x/term" ) -func i_draw_text(s tcell.Screen, x1, y1, x2, y2 int, style tcell.Style, text string) { +func i_draw_text(s tcell.Screen, + x1, y1, x2, y2 int, + style tcell.Style, text string) { row := y1 col := x1 for _, r := range []rune(text) { @@ -68,7 +71,56 @@ func i_draw_text(s tcell.Screen, x1, y1, x2, y2 int, style tcell.Style, text str } } -func i_ui() { +func i_draw_box(s tcell.Screen, + x1, y1, x2, y2 int, + title string, content string) { + style := tcell.StyleDefault.Background(tcell.ColorReset).Foreground(tcell.ColorReset) + + if y2 < y1 { + y1, y2 = y2, y1 + } + if x2 < x1 { + x1, x2 = x2, x1 + } + // Draw borders + for col := x1; col <= x2; col++ { + s.SetContent(col, y1, tcell.RuneHLine, nil, style) + s.SetContent(col, y2, tcell.RuneHLine, nil, style) + } + for row := y1 + 1; row < y2; row++ { + s.SetContent(x1, row, tcell.RuneVLine, nil, style) + s.SetContent(x2, row, tcell.RuneVLine, nil, style) + } + + // Only draw corners if necessary + if y1 != y2 && x1 != x2 { + s.SetContent(x1, y1, tcell.RuneULCorner, nil, style) + s.SetContent(x2, y1, tcell.RuneURCorner, nil, style) + s.SetContent(x1, y2, tcell.RuneLLCorner, nil, style) + s.SetContent(x2, y2, tcell.RuneLRCorner, nil, style) + } + + i_draw_text(s, x1 + 1, y1, x2 - 1, y2 - 1, style, title) + i_draw_text(s, x1 + 1, y1 + 1, x2 - 1, y2 - 1, style, content) +} + +func i_bottom_text(s tcell.Screen, term_w, term_h int, style tcell.Style) { + i_draw_text(s, 0, term_h - 1, term_w - 1, term_h, style, "(q) Quit") +} + +func i_hosts_panel(s tcell.Screen, term_w, term_h int, lhost *HostList) { + i_draw_box(s, 0, 0, + term_w / 3, term_h - 2, + " hosts ", "") +} + +func i_info_panel(s tcell.Screen, term_w, term_h int) { + i_draw_box(s, (term_w / 3) + 1, 0, + term_w - 1, term_h - 2, + " infos ", "") +} + +func i_ui(lhost *HostList) { screen, err := tcell.NewScreen() if err != nil { c_die("view", err) @@ -76,21 +128,27 @@ func i_ui() { if err := screen.Init(); err != nil { c_die("view", err) } - def_style := tcell.StyleDefault.Background(tcell.ColorReset).Foreground(tcell.ColorReset) + def_style := tcell.StyleDefault. + Background(tcell.ColorReset). + Foreground(tcell.ColorReset) screen.SetStyle(def_style) quit := func() { screen.Fini() os.Exit(0) } for { - i_draw_text(screen, 0, 0, 30, 0, def_style, "hey fuck you") + term_w, term_h, _ := term.GetSize(0) + screen.Clear() + i_bottom_text(screen, term_w, term_h, def_style) + i_hosts_panel(screen, term_w, term_h, lhost) + i_info_panel(screen, term_w, term_h) screen.Show() ev := screen.PollEvent() switch ev := ev.(type) { case *tcell.EventResize: screen.Sync() case *tcell.EventKey: - if ev.Key() == tcell.KeyEscape || ev.Key() == tcell.KeyCtrlC { + if ev.Key() == tcell.KeyEscape || ev.Key() == tcell.KeyCtrlC || ev.Rune() == 'q' || ev.Rune() == 'Q' { quit() } } |