Work
This commit is contained in:
@@ -103,8 +103,11 @@ func (w *LinearLayout) HandleKey(ev *tcell.EventKey) bool {
|
|||||||
if ev.Key() == tcell.KeyTab {
|
if ev.Key() == tcell.KeyTab {
|
||||||
if active == nil && len(w.widgets) > 0 {
|
if active == nil && len(w.widgets) > 0 {
|
||||||
// No widget is active
|
// No widget is active
|
||||||
w.widgets[0].SetActive(true)
|
if w.widgets[0].Tabbable() {
|
||||||
return true
|
w.widgets[0].SetActive(true)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
return w.activateNext()
|
return w.activateNext()
|
||||||
}
|
}
|
||||||
@@ -243,7 +246,6 @@ func (w *LinearLayout) activateNext() bool {
|
|||||||
var found bool
|
var found bool
|
||||||
for i := range w.widgets {
|
for i := range w.widgets {
|
||||||
if found && w.widgets[i].Tabbable() {
|
if found && w.widgets[i].Tabbable() {
|
||||||
w.Log("%s.activeNext Setting Next Active: %s", w.Id(), w.widgets[i].Id())
|
|
||||||
w.widgets[i].SetActive(true)
|
w.widgets[i].SetActive(true)
|
||||||
return true
|
return true
|
||||||
} else if w.widgets[i].Active() {
|
} else if w.widgets[i].Active() {
|
||||||
@@ -251,7 +253,6 @@ func (w *LinearLayout) activateNext() bool {
|
|||||||
w.widgets[i].SetActive(false)
|
w.widgets[i].SetActive(false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
w.Log("%s.activeNext Hit End", w.Id())
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -318,6 +319,13 @@ func (w *LinearLayout) Insert(n Widget, idx int) {
|
|||||||
w.updateTotalWeight()
|
w.updateTotalWeight()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remove all children from this widget
|
||||||
|
func (w *LinearLayout) Clear() {
|
||||||
|
w.widgets = []Widget{}
|
||||||
|
w.layoutFlags = make(map[Widget]LayoutFlag)
|
||||||
|
w.layoutWeights = make(map[Widget]int)
|
||||||
|
}
|
||||||
|
|
||||||
func (w *LinearLayout) Delete(n Widget) {
|
func (w *LinearLayout) Delete(n Widget) {
|
||||||
for i := 0; i < len(w.widgets); i++ {
|
for i := 0; i < len(w.widgets); i++ {
|
||||||
if w.widgets[i] == n {
|
if w.widgets[i] == n {
|
||||||
@@ -357,6 +365,17 @@ func (w *LinearLayout) RemoveFlag(wd Widget, f LayoutFlag) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (w *LinearLayout) GetWeight(wd Widget) int {
|
||||||
|
if !w.Contains(wd) {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
wght := w.layoutWeights[wd]
|
||||||
|
if wght == 0 {
|
||||||
|
wght = 1
|
||||||
|
}
|
||||||
|
return wght
|
||||||
|
}
|
||||||
|
|
||||||
func (w *LinearLayout) SetWeight(wd Widget, wt int) {
|
func (w *LinearLayout) SetWeight(wd Widget, wt int) {
|
||||||
if !w.Contains(wd) {
|
if !w.Contains(wd) {
|
||||||
return
|
return
|
||||||
@@ -399,13 +418,6 @@ func (w *LinearLayout) updateLLVWidgetSize(wd Widget) {
|
|||||||
rW := w.w
|
rW := w.w
|
||||||
if w.stacked {
|
if w.stacked {
|
||||||
rW = wd.MinW()
|
rW = wd.MinW()
|
||||||
} else {
|
|
||||||
if wd == w.widgets[len(w.widgets)-1] {
|
|
||||||
wrk := float64(w.w) / float64(w.totalWeight)
|
|
||||||
if wrk == float64((w.w / w.totalWeight)) {
|
|
||||||
rW -= 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
wd.HandleResize((&Coord{X: rW, Y: w.getWeightedH(wd)}).ResizeEvent())
|
wd.HandleResize((&Coord{X: rW, Y: w.getWeightedH(wd)}).ResizeEvent())
|
||||||
}
|
}
|
||||||
@@ -414,17 +426,8 @@ func (w *LinearLayout) updateLLHWidgetSize(wd Widget) {
|
|||||||
rH := w.h
|
rH := w.h
|
||||||
if w.stacked {
|
if w.stacked {
|
||||||
rH = wd.MinH()
|
rH = wd.MinH()
|
||||||
} else {
|
|
||||||
if wd == w.widgets[len(w.widgets)-1] {
|
|
||||||
wrk := float64(w.h) / float64(w.totalWeight)
|
|
||||||
if wrk == float64((w.h / w.totalWeight)) {
|
|
||||||
rH -= 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
c := &Coord{X: w.getWeightedW(wd), Y: rH}
|
wd.HandleResize((&Coord{X: w.getWeightedW(wd), Y: rH}).ResizeEvent())
|
||||||
w.Log("%s.updateLLHWidgetSize(%s) { %d, %d }", w.Id(), wd.Id(), c.X, c.Y)
|
|
||||||
wd.HandleResize(c.ResizeEvent())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// The Layout should have a static Size set at this point that we can use
|
// The Layout should have a static Size set at this point that we can use
|
||||||
@@ -440,7 +443,7 @@ func (w *LinearLayout) updateLLVWidgetPos(wd Widget) {
|
|||||||
if w.widgets[i] == wd {
|
if w.widgets[i] == wd {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
c.Y += w.getWeightedH(w.widgets[i])
|
c.Y = w.widgets[i].GetY() + w.widgets[i].GetH()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do we have a layout flag for this widget?
|
// Do we have a layout flag for this widget?
|
||||||
@@ -481,7 +484,7 @@ func (w *LinearLayout) updateLLHWidgetPos(wd Widget) {
|
|||||||
}
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
c.X += w.getWeightedW(w.widgets[i]) + 2
|
c.X = w.widgets[i].GetX() + w.widgets[i].GetW()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do we have a layout flag for this widget?
|
// Do we have a layout flag for this widget?
|
||||||
@@ -501,6 +504,8 @@ func (w *LinearLayout) updateLLHWidgetPos(wd Widget) {
|
|||||||
c.X += (w.getWeightedW(wd) / 2) - (wd.GetW() / 2)
|
c.X += (w.getWeightedW(wd) / 2) - (wd.GetW() / 2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Is the Y of this tricky?
|
||||||
c.Y = 0
|
c.Y = 0
|
||||||
if wd.GetW() < w.h {
|
if wd.GetW() < w.h {
|
||||||
// We have extra vertical space.
|
// We have extra vertical space.
|
||||||
@@ -520,17 +525,7 @@ func (w *LinearLayout) getWeightedH(wd Widget) int {
|
|||||||
} else if w.stacked {
|
} else if w.stacked {
|
||||||
return wd.MinH()
|
return wd.MinH()
|
||||||
}
|
}
|
||||||
wght := w.layoutWeights[wd]
|
return int(float64(w.h)*(float64(w.GetWeight(wd))/float64(w.totalWeight))) - 1
|
||||||
if wght == 0 {
|
|
||||||
wght = 1
|
|
||||||
}
|
|
||||||
retF := float64(w.h) * (float64(wght) / float64(w.totalWeight))
|
|
||||||
retI := int(retF)
|
|
||||||
if retF-float64(retI) >= 0.5 {
|
|
||||||
return retI + 1
|
|
||||||
} else {
|
|
||||||
return retI
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *LinearLayout) getWeightedW(wd Widget) int {
|
func (w *LinearLayout) getWeightedW(wd Widget) int {
|
||||||
@@ -539,20 +534,11 @@ func (w *LinearLayout) getWeightedW(wd Widget) int {
|
|||||||
} else if w.stacked {
|
} else if w.stacked {
|
||||||
return wd.MinW()
|
return wd.MinW()
|
||||||
}
|
}
|
||||||
wght := w.layoutWeights[wd]
|
return int(float64(w.w)*(float64(w.GetWeight(wd))/float64(w.totalWeight))) - 1
|
||||||
if wght == 0 {
|
|
||||||
wght = 1
|
|
||||||
}
|
|
||||||
retF := float64(w.w) * (float64(wght) / float64(w.totalWeight))
|
|
||||||
retI := int(retF)
|
|
||||||
if retF-float64(retI) >= 0.5 {
|
|
||||||
return retI + 1
|
|
||||||
} else {
|
|
||||||
return retI
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *LinearLayout) SetStacked(s bool) { w.stacked = s }
|
func (w *LinearLayout) SetStacked(s bool) { w.stacked = s }
|
||||||
|
func (w *LinearLayout) SetTabDisabled(b bool) { w.disableTab = b }
|
||||||
func (w *LinearLayout) SetBordered(b bool) { w.insetBorder = b }
|
func (w *LinearLayout) SetBordered(b bool) { w.insetBorder = b }
|
||||||
func (w *LinearLayout) SetLogger(l func(string, ...any)) { w.logger = l }
|
func (w *LinearLayout) SetLogger(l func(string, ...any)) { w.logger = l }
|
||||||
func (w *LinearLayout) Log(txt string, args ...any) {
|
func (w *LinearLayout) Log(txt string, args ...any) {
|
||||||
|
|||||||
@@ -235,7 +235,7 @@ func (w *List) SetItem(idx int, txt string) {
|
|||||||
w.list[idx] = txt
|
w.list[idx] = txt
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func (w *List) GetIdx() int { return w.cursor }
|
func (w *List) SelectedIndex() int { return w.cursor }
|
||||||
func (w *List) ClearBorder() { w.border = []rune{} }
|
func (w *List) ClearBorder() { w.border = []rune{} }
|
||||||
func (w *List) SetOnSelect(s func(int, string) bool) { w.onSelect = s }
|
func (w *List) SetOnSelect(s func(int, string) bool) { w.onSelect = s }
|
||||||
func (w *List) SetVimMode(b bool) { w.vimMode = b }
|
func (w *List) SetVimMode(b bool) { w.vimMode = b }
|
||||||
|
|||||||
Reference in New Issue
Block a user