Artem Chernyshev 63e0d02aa9 feat: add TUI for configuring network interfaces settings
Allows configuring:
- cidr.
- dhcp enable/disable.
- MTU.
- Ignore.
- Dhcp metric.

Signed-off-by: Artem Chernyshev <artem.0xD2@gmail.com>
2020-12-03 11:05:55 -08:00

77 lines
1.6 KiB
Go

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package components
import "github.com/rivo/tview"
// NewGroup creates new Group.
func NewGroup(app *tview.Application) *Group {
return &Group{
app: app,
current: -1,
elements: []tview.Primitive{},
}
}
// Group is an attempt to straighten out built-in tview TAB focus sequence.
type Group struct {
app *tview.Application
elements []tview.Primitive
current int
focus tview.Primitive
}
// AddElement to the group.
func (eg *Group) AddElement(element tview.Primitive) tview.Primitive {
eg.elements = append(eg.elements, element)
return element
}
// FocusFirst sets focus to the first element.
func (eg *Group) FocusFirst() {
if len(eg.elements) == 0 {
return
}
eg.current = 0
eg.focus = eg.elements[eg.current]
eg.app.SetFocus(eg.focus)
}
// NextFocus switch focus to the next element.
func (eg *Group) NextFocus() {
eg.detectFocus()
eg.current = (eg.current + 1) % (len(eg.elements))
eg.focus = eg.elements[eg.current]
eg.app.SetFocus(eg.focus)
}
// PrevFocus switch focus to the prev element.
func (eg *Group) PrevFocus() {
eg.detectFocus()
eg.current--
if eg.current < 0 {
eg.current = len(eg.elements) - 1
}
eg.focus = eg.elements[eg.current]
eg.app.SetFocus(eg.focus)
}
func (eg *Group) detectFocus() {
focused := eg.app.GetFocus()
if eg.focus == nil || focused != eg.focus {
for i, e := range eg.elements {
if e == focused {
eg.current = i
break
}
}
}
}