mirror of
https://github.com/mum4k/termdash.git
synced 2025-04-27 13:48:49 +08:00
Termdashdemo shows both grid and container layout patterns.
This commit is contained in:
parent
0469007a4c
commit
45ce014546
@ -28,6 +28,7 @@ import (
|
|||||||
"github.com/mum4k/termdash/align"
|
"github.com/mum4k/termdash/align"
|
||||||
"github.com/mum4k/termdash/cell"
|
"github.com/mum4k/termdash/cell"
|
||||||
"github.com/mum4k/termdash/container"
|
"github.com/mum4k/termdash/container"
|
||||||
|
"github.com/mum4k/termdash/container/grid"
|
||||||
"github.com/mum4k/termdash/linestyle"
|
"github.com/mum4k/termdash/linestyle"
|
||||||
"github.com/mum4k/termdash/terminal/termbox"
|
"github.com/mum4k/termdash/terminal/termbox"
|
||||||
"github.com/mum4k/termdash/terminal/terminalapi"
|
"github.com/mum4k/termdash/terminal/terminalapi"
|
||||||
@ -44,9 +45,12 @@ import (
|
|||||||
// redrawInterval is how often termdash redraws the screen.
|
// redrawInterval is how often termdash redraws the screen.
|
||||||
const redrawInterval = 250 * time.Millisecond
|
const redrawInterval = 250 * time.Millisecond
|
||||||
|
|
||||||
// layout prepares the screen layout by creating the container and placing
|
// gridLayout prepares the screen layout by creating the container and placing
|
||||||
// widgets.
|
// widgets.
|
||||||
func layout(ctx context.Context, t terminalapi.Terminal) (*container.Container, error) {
|
// This function demonstrates the use of the grid builder.
|
||||||
|
// gridLayout() and contLayout() demonstrate the two available layout APIs and
|
||||||
|
// both produce equivalent layouts.
|
||||||
|
func gridLayout(ctx context.Context, t terminalapi.Terminal) (*container.Container, error) {
|
||||||
sd, err := newSegmentDisplay(ctx)
|
sd, err := newSegmentDisplay(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -59,6 +63,167 @@ func layout(ctx context.Context, t terminalapi.Terminal) (*container.Container,
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
g, err := newGauge(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
heartLC, err := newHeartbeat(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
bc, err := newBarChart(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
don, err := newDonut(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
leftB, rightB, sineLC, err := newSines(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
builder := grid.New()
|
||||||
|
builder.Add(
|
||||||
|
grid.ColWidthPerc(70,
|
||||||
|
grid.RowHeightPerc(25,
|
||||||
|
grid.Widget(sd,
|
||||||
|
container.Border(linestyle.Light),
|
||||||
|
container.BorderTitle("Press Q to quit"),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
grid.RowHeightPerc(26,
|
||||||
|
grid.ColWidthPerc(50,
|
||||||
|
grid.Widget(rollT,
|
||||||
|
container.Border(linestyle.Light),
|
||||||
|
container.BorderTitle("A rolling text"),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
grid.RowHeightPerc(50,
|
||||||
|
grid.Widget(spGreen,
|
||||||
|
container.Border(linestyle.Light),
|
||||||
|
container.BorderTitle("Green SparkLine"),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
grid.RowHeightPerc(50,
|
||||||
|
grid.Widget(spRed,
|
||||||
|
container.Border(linestyle.Light),
|
||||||
|
container.BorderTitle("Red SparkLine"),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
grid.RowHeightPerc(10,
|
||||||
|
grid.Widget(g,
|
||||||
|
container.Border(linestyle.Light),
|
||||||
|
container.BorderTitle("A Gauge"),
|
||||||
|
container.BorderColor(cell.ColorNumber(39)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
grid.RowHeightPerc(39,
|
||||||
|
grid.Widget(heartLC,
|
||||||
|
container.Border(linestyle.Light),
|
||||||
|
container.BorderTitle("A LineChart"),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
builder.Add(
|
||||||
|
grid.ColWidthPerc(30,
|
||||||
|
grid.RowHeightPerc(30,
|
||||||
|
grid.Widget(bc,
|
||||||
|
container.Border(linestyle.Light),
|
||||||
|
container.BorderTitle("BarChart"),
|
||||||
|
container.BorderTitleAlignRight(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
grid.RowHeightPerc(21,
|
||||||
|
grid.Widget(don,
|
||||||
|
container.Border(linestyle.Light),
|
||||||
|
container.BorderTitle("A Donut"),
|
||||||
|
container.BorderTitleAlignRight(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
grid.RowHeightPerc(40,
|
||||||
|
grid.Widget(sineLC,
|
||||||
|
container.Border(linestyle.Light),
|
||||||
|
container.BorderTitle("Multiple series"),
|
||||||
|
container.BorderTitleAlignRight(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
grid.RowHeightPerc(9,
|
||||||
|
grid.ColWidthPerc(50,
|
||||||
|
grid.Widget(leftB,
|
||||||
|
container.AlignHorizontal(align.HorizontalRight),
|
||||||
|
container.PaddingRight(1),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
grid.ColWidthPerc(50,
|
||||||
|
grid.Widget(rightB,
|
||||||
|
container.AlignHorizontal(align.HorizontalLeft),
|
||||||
|
container.PaddingLeft(1),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
gridOpts, err := builder.Build()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
c, err := container.New(t, gridOpts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return c, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// contLayout prepares the screen layout by creating the container and placing
|
||||||
|
// widgets.
|
||||||
|
// This function demonstrates the direct use of the container API.
|
||||||
|
// gridLayout() and contLayout() demonstrate the two available layout APIs and
|
||||||
|
// both produce equivalent layouts.
|
||||||
|
func contLayout(ctx context.Context, t terminalapi.Terminal) (*container.Container, error) {
|
||||||
|
sd, err := newSegmentDisplay(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
rollT, err := newRollText(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
spGreen, spRed, err := newSparkLines(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
g, err := newGauge(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
heartLC, err := newHeartbeat(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
bc, err := newBarChart(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
don, err := newDonut(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
leftB, rightB, sineLC, err := newSines(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
segmentTextSpark := []container.Option{
|
segmentTextSpark := []container.Option{
|
||||||
container.SplitHorizontal(
|
container.SplitHorizontal(
|
||||||
container.Top(
|
container.Top(
|
||||||
@ -74,13 +239,18 @@ func layout(ctx context.Context, t terminalapi.Terminal) (*container.Container,
|
|||||||
container.PlaceWidget(rollT),
|
container.PlaceWidget(rollT),
|
||||||
),
|
),
|
||||||
container.Right(
|
container.Right(
|
||||||
container.Border(linestyle.Light),
|
|
||||||
container.BorderTitle("A SparkLine group"),
|
|
||||||
container.SplitHorizontal(
|
container.SplitHorizontal(
|
||||||
container.Top(container.PlaceWidget(spGreen)),
|
container.Top(
|
||||||
container.Bottom(container.PlaceWidget(spRed)),
|
container.Border(linestyle.Light),
|
||||||
|
container.BorderTitle("Green SparkLine"),
|
||||||
|
container.PlaceWidget(spGreen),
|
||||||
|
),
|
||||||
|
container.Bottom(
|
||||||
|
container.Border(linestyle.Light),
|
||||||
|
container.BorderTitle("Red SparkLine"),
|
||||||
|
container.PlaceWidget(spRed),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
container.MarginLeft(1),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -88,15 +258,6 @@ func layout(ctx context.Context, t terminalapi.Terminal) (*container.Container,
|
|||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
g, err := newGauge(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
heartLC, err := newHeartbeat(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
gaugeAndHeartbeat := []container.Option{
|
gaugeAndHeartbeat := []container.Option{
|
||||||
container.SplitHorizontal(
|
container.SplitHorizontal(
|
||||||
container.Top(
|
container.Top(
|
||||||
@ -122,20 +283,6 @@ func layout(ctx context.Context, t terminalapi.Terminal) (*container.Container,
|
|||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
bc, err := newBarChart(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
don, err := newDonut(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
leftB, rightB, sineLC, err := newSines(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
lcAndButtons := []container.Option{
|
lcAndButtons := []container.Option{
|
||||||
container.SplitHorizontal(
|
container.SplitHorizontal(
|
||||||
container.Top(
|
container.Top(
|
||||||
@ -208,7 +355,8 @@ func main() {
|
|||||||
defer t.Close()
|
defer t.Close()
|
||||||
|
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
c, err := layout(ctx, t)
|
|
||||||
|
c, err := gridLayout(ctx, t) // equivalent to contLayout(ctx, t)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
@ -302,7 +450,6 @@ func newRollText(ctx context.Context) (*text.Text, error) {
|
|||||||
// newSparkLines creates two new sparklines displaying random values.
|
// newSparkLines creates two new sparklines displaying random values.
|
||||||
func newSparkLines(ctx context.Context) (*sparkline.SparkLine, *sparkline.SparkLine, error) {
|
func newSparkLines(ctx context.Context) (*sparkline.SparkLine, *sparkline.SparkLine, error) {
|
||||||
spGreen, err := sparkline.New(
|
spGreen, err := sparkline.New(
|
||||||
sparkline.Label("Green SparkLine", cell.FgColor(cell.ColorBlue)),
|
|
||||||
sparkline.Color(cell.ColorGreen),
|
sparkline.Color(cell.ColorGreen),
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -316,7 +463,6 @@ func newSparkLines(ctx context.Context) (*sparkline.SparkLine, *sparkline.SparkL
|
|||||||
})
|
})
|
||||||
|
|
||||||
spRed, err := sparkline.New(
|
spRed, err := sparkline.New(
|
||||||
sparkline.Label("Red SparkLine", cell.FgColor(cell.ColorBlue)),
|
|
||||||
sparkline.Color(cell.ColorRed),
|
sparkline.Color(cell.ColorRed),
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user