renamed group in layout

This commit is contained in:
Timon Ringwald 2022-04-02 15:21:17 +02:00
parent b797dc0b2c
commit 841e22e8de
6 changed files with 72 additions and 72 deletions

View File

@ -10,7 +10,7 @@ import (
"github.com/gdamore/tcell"
)
func TestFlowGroup(t *testing.T) {
func TestFlowLayout(t *testing.T) {
textView := views.NewTextView("hello world!")
textView.SetStyle(tui.StyleDefault.Background(tcell.ColorRed).Foreground(tcell.ColorBlack))
@ -28,10 +28,10 @@ func TestFlowGroup(t *testing.T) {
growView2 := views.NewGrowView()
growView2.SetStyle(tui.StyleDefault.Background(tcell.ColorYellow))
flowGroup := views.NewFlowGroup(tui.Vertical)
flowGroup.AppendViews(marginView, growView, textView2)
flowLayout := views.NewFlowLayout(tui.Vertical)
flowLayout.AppendViews(marginView, growView, textView2)
constrainView := views.NewConstrainView(flowGroup)
constrainView := views.NewConstrainView(flowLayout)
constrainView.SetStyle(tui.StyleDefault.Background(tcell.ColorPurple))
constrainView.Constrain(-1, -1)
@ -55,7 +55,7 @@ func TestFlowGroup(t *testing.T) {
fmt.Println(err)
}
func TestSeparatorGroup(t *testing.T) {
func TestSeparatorLayout(t *testing.T) {
textView := views.NewTextView("hello world!")
textView.SetStyle(tui.StyleDefault.Background(tcell.ColorRed).Foreground(tcell.ColorBlack))
@ -70,12 +70,12 @@ func TestSeparatorGroup(t *testing.T) {
growView2 := views.NewGrowView()
growView2.SetStyle(tui.StyleDefault.Background(tcell.ColorYellow))
separatorGroup := views.NewSeparatorGroup(tui.Vertical)
separatorGroup.AppendView(frameView, 1)
separatorGroup.AppendView(growView, 1)
separatorGroup.AppendView(textView2, 1)
separatorLayout := views.NewSeparatorLayout(tui.Vertical)
separatorLayout.AppendView(frameView, 1)
separatorLayout.AppendView(growView, 1)
separatorLayout.AppendView(textView2, 1)
screen, err := tui.NewScreen(separatorGroup)
screen, err := tui.NewScreen(separatorLayout)
if err != nil {
t.Error(err)
return
@ -95,7 +95,7 @@ func TestSeparatorGroup(t *testing.T) {
fmt.Println(err)
}
func TestBorderGroup(t *testing.T) {
func TestBorderLayout(t *testing.T) {
topView := views.NewConstrainView(nil)
topView.SetStyle(tui.StyleDefault.Background(tcell.ColorBlue))
topView.Constrain(10, 10)
@ -116,15 +116,15 @@ func TestBorderGroup(t *testing.T) {
centerView.SetStyle(tui.StyleDefault.Background(tcell.ColorPurple))
centerView.Constrain(10, 10)
borderGroup := views.NewBorderGroup()
borderGroup.SetStyle(tui.StyleDefault.Background(tcell.ColorPurple))
borderGroup.SetView(topView, views.Top)
borderGroup.SetView(bottomView, views.Bottom)
borderGroup.SetView(leftView, views.Left)
borderGroup.SetView(rightView, views.Right)
borderGroup.SetView(centerView, views.Center)
borderLayout := views.NewBorderLayout()
borderLayout.SetStyle(tui.StyleDefault.Background(tcell.ColorPurple))
borderLayout.SetView(topView, views.Top)
borderLayout.SetView(bottomView, views.Bottom)
borderLayout.SetView(leftView, views.Left)
borderLayout.SetView(rightView, views.Right)
borderLayout.SetView(centerView, views.Center)
screen, err := tui.NewScreen(borderGroup)
screen, err := tui.NewScreen(borderLayout)
if err != nil {
t.Error(err)
return

View File

@ -21,19 +21,19 @@ type View interface {
Draw(buf *ViewBuffer)
}
// Group defines the behavior of a View which can hold multiple sub views
type Group interface {
// Layout defines the behavior of a View which can hold multiple sub views
type Layout interface {
View
Views() []View
}
// Wrapper defines the behavior of a GroupView which can hold exactly one sub view.
// Wrapper defines the behavior of a Layout which can hold exactly one sub view.
// To define custom Wrappers, it is recommended to add WrapperTmpl
// as the promoted anonymous field for your custom Wrapper struct.
// It implements the Wrapper interface with useful default behavior
type Wrapper interface {
Group
Layout
SetView(View)
View() View

View File

@ -4,23 +4,23 @@ import (
"git.tordarus.net/Tordarus/tui"
)
// BorderGroup ia a tui.Group which places its children onto a given tui.Side
type BorderGroup struct {
// BorderLayout ia a tui.Layout which places its children onto a given tui.Side
type BorderLayout struct {
tui.ViewTmpl
views map[Slot]tui.View
horizontalLayout *LayoutResult
verticalLayout *LayoutResult
}
var _ tui.Group = &BorderGroup{}
var _ tui.Layout = &BorderLayout{}
func NewBorderGroup() *BorderGroup {
return &BorderGroup{
func NewBorderLayout() *BorderLayout {
return &BorderLayout{
views: map[Slot]tui.View{},
}
}
func (g *BorderGroup) Views() []tui.View {
func (g *BorderLayout) Views() []tui.View {
s := make([]tui.View, 0, len(g.views))
for _, view := range g.views {
s = append(s, view)
@ -28,15 +28,15 @@ func (g *BorderGroup) Views() []tui.View {
return s
}
func (g *BorderGroup) SetView(v tui.View, slot Slot) {
func (g *BorderLayout) SetView(v tui.View, slot Slot) {
g.views[slot] = v
}
func (g *BorderGroup) View(slot Slot) tui.View {
func (g *BorderLayout) View(slot Slot) tui.View {
return g.views[slot]
}
func (g *BorderGroup) Draw(buf *tui.ViewBuffer) {
func (g *BorderLayout) Draw(buf *tui.ViewBuffer) {
g.ViewTmpl.Draw(buf)
if g.verticalLayout == nil {
@ -123,13 +123,13 @@ func (g *BorderGroup) Draw(buf *tui.ViewBuffer) {
g.horizontalLayout = nil
}
func (g *BorderGroup) Layout() (prefWidth, prefHeight int) {
func (g *BorderLayout) Layout() (prefWidth, prefHeight int) {
g.verticalLayout = CalculateLayoutResult([]tui.View{g.View(Top), g.View(Center), g.View(Bottom)})
g.horizontalLayout = CalculateLayoutResult([]tui.View{g.View(Left), g.View(Center), g.View(Right)})
return -1, -1
}
func (g *BorderGroup) OnKeyPressed(event *tui.KeyEvent) (consumed bool) {
func (g *BorderLayout) OnKeyPressed(event *tui.KeyEvent) (consumed bool) {
for _, view := range g.Views() {
if view.OnKeyPressed(event) {
return true

View File

@ -2,21 +2,21 @@ package views
import "git.tordarus.net/Tordarus/tui"
// CoordGroup is a tui.Group which places its children on predefined coordinates
type CoordGroup struct {
// CoordLayout is a tui.Layout which places its children on predefined coordinates
type CoordLayout struct {
tui.ViewTmpl
views map[tui.View]tui.Dimension
}
var _ tui.Group = &CoordGroup{}
var _ tui.Layout = &CoordLayout{}
func NewCoordGroup() *CoordGroup {
return &CoordGroup{
func NewCoordLayout() *CoordLayout {
return &CoordLayout{
views: map[tui.View]tui.Dimension{},
}
}
func (g *CoordGroup) Views() []tui.View {
func (g *CoordLayout) Views() []tui.View {
s := make([]tui.View, 0, len(g.views))
for v := range g.views {
s = append(s, v)
@ -26,20 +26,20 @@ func (g *CoordGroup) Views() []tui.View {
// SetView places v at the given coordinates with the given dimensions.
// v will be added to g's children if not already added before
func (g *CoordGroup) SetView(v tui.View, x, y, width, height int) {
func (g *CoordLayout) SetView(v tui.View, x, y, width, height int) {
g.views[v] = tui.Dimension{Point: tui.Point{X: x, Y: y}, Size: tui.Size{Width: width, Height: height}}
}
func (g *CoordGroup) Draw(buf *tui.ViewBuffer) {
func (g *CoordLayout) Draw(buf *tui.ViewBuffer) {
for v, d := range g.views {
v.Draw(buf.Sub(d.X, d.Y, d.Width, d.Height))
}
}
func (v *CoordGroup) Layout() (prefWidth, prefHeight int) {
func (v *CoordLayout) Layout() (prefWidth, prefHeight int) {
return -1, -1
}
func (g *CoordGroup) OnKeyPressed(event *tui.KeyEvent) (consumed bool) {
func (g *CoordLayout) OnKeyPressed(event *tui.KeyEvent) (consumed bool) {
for _, view := range g.Views() {
if view.OnKeyPressed(event) {
return true

View File

@ -4,8 +4,8 @@ import (
"git.tordarus.net/Tordarus/tui"
)
// FlowGroup ia a tui.Group which places its children in a linear layout
type FlowGroup struct {
// FlowLayout ia a tui.Layout which places its children in a linear layout
type FlowLayout struct {
tui.ViewTmpl
views []tui.View
lastLayoutPhase *LayoutResult
@ -14,32 +14,32 @@ type FlowGroup struct {
Orientation tui.Orientation
}
var _ tui.Group = &FlowGroup{}
var _ tui.Layout = &FlowLayout{}
func NewFlowGroup(orientation tui.Orientation) *FlowGroup {
return &FlowGroup{
func NewFlowLayout(orientation tui.Orientation) *FlowLayout {
return &FlowLayout{
views: make([]tui.View, 0),
Orientation: orientation,
}
}
func (g *FlowGroup) Views() []tui.View {
func (g *FlowLayout) Views() []tui.View {
return g.views[:]
}
func (g *FlowGroup) AppendViews(v ...tui.View) {
func (g *FlowLayout) AppendViews(v ...tui.View) {
g.views = append(g.views, v...)
}
func (g *FlowGroup) PrependViews(v ...tui.View) {
func (g *FlowLayout) PrependViews(v ...tui.View) {
g.views = append(v, g.views...)
}
func (g *FlowGroup) InsertView(v tui.View, index int) {
func (g *FlowLayout) InsertView(v tui.View, index int) {
g.views = append(g.views[:index], append([]tui.View{v}, g.views[index:]...)...)
}
func (g *FlowGroup) RemoveView(v tui.View) {
func (g *FlowLayout) RemoveView(v tui.View) {
for index, view := range g.Views() {
if view == v {
g.views = append(g.views[:index], g.views[index:]...)
@ -48,7 +48,7 @@ func (g *FlowGroup) RemoveView(v tui.View) {
}
}
func (g *FlowGroup) Draw(buf *tui.ViewBuffer) {
func (g *FlowLayout) Draw(buf *tui.ViewBuffer) {
g.ViewTmpl.Draw(buf)
if g.lastLayoutPhase == nil {
@ -97,7 +97,7 @@ func (g *FlowGroup) Draw(buf *tui.ViewBuffer) {
g.lastLayoutPhase = nil
}
func (g *FlowGroup) Layout() (prefWidth, prefHeight int) {
func (g *FlowLayout) Layout() (prefWidth, prefHeight int) {
layout := CalculateLayoutResult(g.Views())
g.lastLayoutPhase = layout
@ -113,7 +113,7 @@ func (g *FlowGroup) Layout() (prefWidth, prefHeight int) {
return
}
func (g *FlowGroup) OnKeyPressed(event *tui.KeyEvent) (consumed bool) {
func (g *FlowLayout) OnKeyPressed(event *tui.KeyEvent) (consumed bool) {
for _, view := range g.Views() {
if view.OnKeyPressed(event) {
return true

View File

@ -4,8 +4,8 @@ import (
"git.tordarus.net/Tordarus/tui"
)
// SeperatorGroup ia a tui.Group which separates
type SeperatorGroup struct {
// SeperatorLayout ia a tui.Layout which separates
type SeperatorLayout struct {
tui.ViewTmpl
views []tui.View
@ -15,39 +15,39 @@ type SeperatorGroup struct {
Orientation tui.Orientation
}
var _ tui.Group = &SeperatorGroup{}
var _ tui.Layout = &SeperatorLayout{}
func NewSeparatorGroup(orientation tui.Orientation) *SeperatorGroup {
return &SeperatorGroup{
func NewSeparatorLayout(orientation tui.Orientation) *SeperatorLayout {
return &SeperatorLayout{
views: make([]tui.View, 0),
gravity: map[tui.View]int{},
Orientation: orientation,
}
}
func (g *SeperatorGroup) Views() []tui.View {
func (g *SeperatorLayout) Views() []tui.View {
return g.views[:]
}
func (g *SeperatorGroup) AppendView(v tui.View, gravity int) {
func (g *SeperatorLayout) AppendView(v tui.View, gravity int) {
g.views = append(g.views, v)
g.gravitySum += gravity
g.gravity[v] = gravity
}
func (g *SeperatorGroup) PrependView(v tui.View, gravity int) {
func (g *SeperatorLayout) PrependView(v tui.View, gravity int) {
g.views = append([]tui.View{v}, g.views...)
g.gravitySum += gravity
g.gravity[v] = gravity
}
func (g *SeperatorGroup) InsertView(v tui.View, index int, gravity int) {
func (g *SeperatorLayout) InsertView(v tui.View, index int, gravity int) {
g.views = append(g.views[:index], append([]tui.View{v}, g.views[index:]...)...)
g.gravitySum += gravity
g.gravity[v] = gravity
}
func (g *SeperatorGroup) SetGravity(v tui.View, gravity int) {
func (g *SeperatorLayout) SetGravity(v tui.View, gravity int) {
for _, view := range g.Views() {
if view == v {
g.gravitySum += gravity - g.gravity[v]
@ -57,7 +57,7 @@ func (g *SeperatorGroup) SetGravity(v tui.View, gravity int) {
}
}
func (g *SeperatorGroup) RemoveView(v tui.View) {
func (g *SeperatorLayout) RemoveView(v tui.View) {
for index, view := range g.Views() {
if view == v {
g.views = append(g.views[:index], g.views[index:]...)
@ -68,11 +68,11 @@ func (g *SeperatorGroup) RemoveView(v tui.View) {
}
}
func (g *SeperatorGroup) View(slot Slot) tui.View {
func (g *SeperatorLayout) View(slot Slot) tui.View {
return g.views[slot]
}
func (g *SeperatorGroup) Draw(buf *tui.ViewBuffer) {
func (g *SeperatorLayout) Draw(buf *tui.ViewBuffer) {
g.ViewTmpl.Draw(buf)
if g.Orientation == tui.Horizontal {
@ -97,11 +97,11 @@ func (g *SeperatorGroup) Draw(buf *tui.ViewBuffer) {
}
func (g *SeperatorGroup) Layout() (prefWidth, prefHeight int) {
func (g *SeperatorLayout) Layout() (prefWidth, prefHeight int) {
return -1, -1
}
func (g *SeperatorGroup) OnKeyPressed(event *tui.KeyEvent) (consumed bool) {
func (g *SeperatorLayout) OnKeyPressed(event *tui.KeyEvent) (consumed bool) {
for _, view := range g.Views() {
if view.OnKeyPressed(event) {
return true