mirror of https://github.com/rivo/tview.git
Flex must know where to delegate focus.
This commit is contained in:
parent
6751475a74
commit
f6f32eec04
|
@ -7,12 +7,12 @@ import (
|
||||||
func main() {
|
func main() {
|
||||||
app := tview.NewApplication()
|
app := tview.NewApplication()
|
||||||
flex := tview.NewFlex().
|
flex := tview.NewFlex().
|
||||||
AddItem(tview.NewBox().SetBorder(true).SetTitle("Left (1/2 x width of Top)"), 0, 1).
|
AddItem(tview.NewBox().SetBorder(true).SetTitle("Left (1/2 x width of Top)"), 0, 1, false).
|
||||||
AddItem(tview.NewFlex().SetDirection(tview.FlexRow).
|
AddItem(tview.NewFlex().SetDirection(tview.FlexRow).
|
||||||
AddItem(tview.NewBox().SetBorder(true).SetTitle("Top"), 0, 1).
|
AddItem(tview.NewBox().SetBorder(true).SetTitle("Top"), 0, 1, false).
|
||||||
AddItem(tview.NewBox().SetBorder(true).SetTitle("Middle (3 x height of Top)"), 0, 3).
|
AddItem(tview.NewBox().SetBorder(true).SetTitle("Middle (3 x height of Top)"), 0, 3, false).
|
||||||
AddItem(tview.NewBox().SetBorder(true).SetTitle("Bottom (5 rows)"), 5, 1), 0, 2).
|
AddItem(tview.NewBox().SetBorder(true).SetTitle("Bottom (5 rows)"), 5, 1, false), 0, 2, false).
|
||||||
AddItem(tview.NewBox().SetBorder(true).SetTitle("Right (20 cols)"), 20, 1)
|
AddItem(tview.NewBox().SetBorder(true).SetTitle("Right (20 cols)"), 20, 1, false)
|
||||||
if err := app.SetRoot(flex, true).SetFocus(flex).Run(); err != nil {
|
if err := app.SetRoot(flex, true).SetFocus(flex).Run(); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
17
flex.go
17
flex.go
|
@ -13,6 +13,7 @@ type flexItem struct {
|
||||||
Item Primitive // The item to be positioned.
|
Item Primitive // The item to be positioned.
|
||||||
FixedSize int // The item's fixed size which may not be changed, 0 if it has no fixed size.
|
FixedSize int // The item's fixed size which may not be changed, 0 if it has no fixed size.
|
||||||
Proportion int // The item's proportion.
|
Proportion int // The item's proportion.
|
||||||
|
Focus bool // Whether or not this item attracts the layout's focus.
|
||||||
}
|
}
|
||||||
|
|
||||||
// Flex is a basic implementation of a flexbox layout.
|
// Flex is a basic implementation of a flexbox layout.
|
||||||
|
@ -61,8 +62,13 @@ func (f *Flex) SetFullScreen(fullScreen bool) *Flex {
|
||||||
// that its size is flexible and may be changed. The "proportion" argument
|
// that its size is flexible and may be changed. The "proportion" argument
|
||||||
// defines the relative size of the item compared to other flexible-size items.
|
// defines the relative size of the item compared to other flexible-size items.
|
||||||
// For example, items with a proportion of 2 will be twice as large as items
|
// For example, items with a proportion of 2 will be twice as large as items
|
||||||
// with a proportion of 1. Must be at least 1. Ignored if fixedSize > 0.
|
// with a proportion of 1. Must be at least 1 if fixedSize > 0 (ignored
|
||||||
func (f *Flex) AddItem(item Primitive, fixedSize, proportion int) *Flex {
|
// otherwise)
|
||||||
|
//
|
||||||
|
// If "focus" is set to true, the item will receive focus when the Flex
|
||||||
|
// primitive receives focus. If multiple items have the "focus" flag set to
|
||||||
|
// true, the first one will receive focus.
|
||||||
|
func (f *Flex) AddItem(item Primitive, fixedSize, proportion int, focus bool) *Flex {
|
||||||
f.items = append(f.items, flexItem{Item: item, FixedSize: fixedSize, Proportion: proportion})
|
f.items = append(f.items, flexItem{Item: item, FixedSize: fixedSize, Proportion: proportion})
|
||||||
return f
|
return f
|
||||||
}
|
}
|
||||||
|
@ -124,8 +130,11 @@ func (f *Flex) Draw(screen tcell.Screen) {
|
||||||
|
|
||||||
// Focus is called when this primitive receives focus.
|
// Focus is called when this primitive receives focus.
|
||||||
func (f *Flex) Focus(delegate func(p Primitive)) {
|
func (f *Flex) Focus(delegate func(p Primitive)) {
|
||||||
if len(f.items) > 0 {
|
for _, item := range f.items {
|
||||||
delegate(f.items[0].Item)
|
if item.Focus {
|
||||||
|
delegate(item.Item)
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue