Work
This commit is contained in:
@@ -103,8 +103,11 @@ func (w *LinearLayout) HandleKey(ev *tcell.EventKey) bool {
|
||||
if ev.Key() == tcell.KeyTab {
|
||||
if active == nil && len(w.widgets) > 0 {
|
||||
// No widget is active
|
||||
w.widgets[0].SetActive(true)
|
||||
return true
|
||||
if w.widgets[0].Tabbable() {
|
||||
w.widgets[0].SetActive(true)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
return w.activateNext()
|
||||
}
|
||||
@@ -243,7 +246,6 @@ func (w *LinearLayout) activateNext() bool {
|
||||
var found bool
|
||||
for i := range w.widgets {
|
||||
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)
|
||||
return true
|
||||
} else if w.widgets[i].Active() {
|
||||
@@ -251,7 +253,6 @@ func (w *LinearLayout) activateNext() bool {
|
||||
w.widgets[i].SetActive(false)
|
||||
}
|
||||
}
|
||||
w.Log("%s.activeNext Hit End", w.Id())
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -318,6 +319,13 @@ func (w *LinearLayout) Insert(n Widget, idx int) {
|
||||
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) {
|
||||
for i := 0; i < len(w.widgets); i++ {
|
||||
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) {
|
||||
if !w.Contains(wd) {
|
||||
return
|
||||
@@ -399,13 +418,6 @@ func (w *LinearLayout) updateLLVWidgetSize(wd Widget) {
|
||||
rW := w.w
|
||||
if w.stacked {
|
||||
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())
|
||||
}
|
||||
@@ -414,17 +426,8 @@ func (w *LinearLayout) updateLLHWidgetSize(wd Widget) {
|
||||
rH := w.h
|
||||
if w.stacked {
|
||||
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}
|
||||
w.Log("%s.updateLLHWidgetSize(%s) { %d, %d }", w.Id(), wd.Id(), c.X, c.Y)
|
||||
wd.HandleResize(c.ResizeEvent())
|
||||
wd.HandleResize((&Coord{X: w.getWeightedW(wd), Y: rH}).ResizeEvent())
|
||||
}
|
||||
|
||||
// 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 {
|
||||
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?
|
||||
@@ -481,7 +484,7 @@ func (w *LinearLayout) updateLLHWidgetPos(wd Widget) {
|
||||
}
|
||||
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?
|
||||
@@ -501,6 +504,8 @@ func (w *LinearLayout) updateLLHWidgetPos(wd Widget) {
|
||||
c.X += (w.getWeightedW(wd) / 2) - (wd.GetW() / 2)
|
||||
}
|
||||
}
|
||||
|
||||
// Is the Y of this tricky?
|
||||
c.Y = 0
|
||||
if wd.GetW() < w.h {
|
||||
// We have extra vertical space.
|
||||
@@ -520,17 +525,7 @@ func (w *LinearLayout) getWeightedH(wd Widget) int {
|
||||
} else if w.stacked {
|
||||
return wd.MinH()
|
||||
}
|
||||
wght := w.layoutWeights[wd]
|
||||
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
|
||||
}
|
||||
return int(float64(w.h)*(float64(w.GetWeight(wd))/float64(w.totalWeight))) - 1
|
||||
}
|
||||
|
||||
func (w *LinearLayout) getWeightedW(wd Widget) int {
|
||||
@@ -539,20 +534,11 @@ func (w *LinearLayout) getWeightedW(wd Widget) int {
|
||||
} else if w.stacked {
|
||||
return wd.MinW()
|
||||
}
|
||||
wght := w.layoutWeights[wd]
|
||||
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
|
||||
}
|
||||
return int(float64(w.w)*(float64(w.GetWeight(wd))/float64(w.totalWeight))) - 1
|
||||
}
|
||||
|
||||
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) SetLogger(l func(string, ...any)) { w.logger = l }
|
||||
func (w *LinearLayout) Log(txt string, args ...any) {
|
||||
|
||||
Reference in New Issue
Block a user