From b387993723fb816a9b5e8fea415996994ad54e94 Mon Sep 17 00:00:00 2001 From: nakabonne Date: Wed, 29 Apr 2020 12:19:37 +0900 Subject: [PATCH] Make it possible to render grid view --- go.mod | 1 + go.sum | 22 ++++++++++++++++++++++ pkg/app/app.go | 4 ++-- pkg/gui/gui.go | 46 +++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 70 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 1f69a67..25e665b 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/nakabonne/golintui go 1.14 require ( + github.com/rivo/tview v0.0.0-20200414130344-8e06c826b3a5 github.com/shibukawa/configdir v0.0.0-20170330084843-e180dbdc8da0 github.com/sirupsen/logrus v1.5.0 ) diff --git a/go.sum b/go.sum index 27f395d..acabb50 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,21 @@ +github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= +github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= +github.com/gdamore/tcell v1.3.0 h1:r35w0JBADPZCVQijYebl6YMWWtHRqVEGt7kL2eBADRM= +github.com/gdamore/tcell v1.3.0/go.mod h1:Hjvr+Ofd+gLglo7RYKxxnzCBmev3BzsS67MebKS4zMM= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/lucasb-eyer/go-colorful v1.0.2/go.mod h1:0MS4r+7BZKSJ5mw4/S5MPN+qHFF1fYclkSPilDOKW0s= +github.com/lucasb-eyer/go-colorful v1.0.3 h1:QIbQXiugsb+q10B+MI+7DI1oQLdmnep86tWFlaaUAac= +github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.8 h1:3tS41NlGYSmhhe/8fhGRzc+z3AYCw1Fe1WAyLuujKs0= +github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rivo/tview v0.0.0-20200414130344-8e06c826b3a5 h1:7Suev+ewwyOLkitf4/NTKQDMWfRCC6LNAt2p8H2goS4= +github.com/rivo/tview v0.0.0-20200414130344-8e06c826b3a5/go.mod h1:6lkG1x+13OShEf0EaOCaTQYyB7d5nSbb181KtjlS+84= +github.com/rivo/uniseg v0.1.0 h1:+2KBaVoUmb9XzDsrx/Ct0W/EYOSFf/nWTauy++DprtY= +github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/shibukawa/configdir v0.0.0-20170330084843-e180dbdc8da0 h1:Xuk8ma/ibJ1fOy4Ee11vHhUFHQNpHhrBneOCNHVXS5w= github.com/shibukawa/configdir v0.0.0-20170330084843-e180dbdc8da0/go.mod h1:7AwjWCpdPhkSmNAgUv5C7EJ4AbmjEB3r047r3DXWu3Y= github.com/sirupsen/logrus v1.5.0 h1:1N5EYkVAPEywqZRJd7cwnRtCb6xJx7NH3T3WUTF980Q= @@ -8,3 +23,10 @@ github.com/sirupsen/logrus v1.5.0/go.mod h1:+F7Ogzej0PZc/94MaYx/nvG9jOFMD2osvC3s github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/pU5OE2C0WrNTOYK1Uuc= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4 h1:sfkvUWPNGwSV+8/fNqctR5lS2AqCSqYwXdrjCxp/dXo= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/app/app.go b/pkg/app/app.go index f3b4b59..59454df 100644 --- a/pkg/app/app.go +++ b/pkg/app/app.go @@ -25,10 +25,10 @@ func New(conf *config.Config) (*App, error) { closers: []io.Closer{}, Config: conf, Log: newLogger(conf), - Gui: nil, + Gui: gui.New(), }, nil } func (a *App) Run() error { - return a.Gui.RunWithSubprocesses() + return a.Gui.Run() } diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go index 4e83e69..14b7730 100644 --- a/pkg/gui/gui.go +++ b/pkg/gui/gui.go @@ -1,8 +1,52 @@ package gui +import "github.com/rivo/tview" + type Gui struct { + application *tview.Application + //checkbox *tview.Checkbox +} + +func New() *Gui { + return &Gui{ + application: tview.NewApplication(), + } } -func (g *Gui) RunWithSubprocesses() error { +func (g *Gui) Run() error { + g.initPrimitive() + if err := g.application.Run(); err != nil { + return err + } return nil } + +func (g *Gui) initPrimitive() { + newPrimitive := func(text string) tview.Primitive { + return tview.NewTextView(). + SetTextAlign(tview.AlignCenter). + SetText(text) + } + menu := newPrimitive("Menu") + main := newPrimitive("Main content") + sideBar := newPrimitive("Side Bar") + + grid := tview.NewGrid(). + SetRows(3, 0, 3). + SetColumns(30, 0, 30). + SetBorders(true). + AddItem(newPrimitive("Header"), 0, 0, 1, 3, 0, 0, false). + AddItem(newPrimitive("Footer"), 2, 0, 1, 3, 0, 0, false) + + // Layout for screens narrower than 100 cells (menu and side bar are hidden). + grid.AddItem(menu, 0, 0, 0, 0, 0, 0, false). + AddItem(main, 1, 0, 1, 3, 0, 0, false). + AddItem(sideBar, 0, 0, 0, 0, 0, 0, false) + + // Layout for screens wider than 100 cells. + grid.AddItem(menu, 1, 0, 1, 1, 0, 100, false). + AddItem(main, 1, 1, 1, 1, 0, 100, false). + AddItem(sideBar, 1, 2, 1, 1, 0, 100, false) + + g.application.SetRoot(grid, true) +}