aboutsummaryrefslogtreecommitdiffstats
path: root/i_ui.go
diff options
context:
space:
mode:
Diffstat (limited to 'i_ui.go')
-rw-r--r--i_ui.go70
1 files changed, 64 insertions, 6 deletions
diff --git a/i_ui.go b/i_ui.go
index 6bc11ff..133f276 100644
--- a/i_ui.go
+++ b/i_ui.go
@@ -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()
}
}