Fixed the list widget
This commit is contained in:
parent
dce0321e9b
commit
981c11bd44
@ -110,9 +110,22 @@ func (element *List) redo () {
|
|||||||
// via scrolling. If an entry's width goes beyond the forced size, its text will
|
// via scrolling. If an entry's width goes beyond the forced size, its text will
|
||||||
// be truncated so that it fits.
|
// be truncated so that it fits.
|
||||||
func (element *List) Collapse (width, height int) {
|
func (element *List) Collapse (width, height int) {
|
||||||
|
if
|
||||||
|
element.forcedMinimumWidth == width &&
|
||||||
|
element.forcedMinimumHeight == height {
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
element.forcedMinimumWidth = width
|
element.forcedMinimumWidth = width
|
||||||
element.forcedMinimumHeight = height
|
element.forcedMinimumHeight = height
|
||||||
element.updateMinimumSize()
|
element.updateMinimumSize()
|
||||||
|
|
||||||
|
for index, entry := range element.entries {
|
||||||
|
element.entries[index] = element.resizeEntryToFit(entry)
|
||||||
|
}
|
||||||
|
|
||||||
|
element.redo()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (element *List) HandleMouseDown (x, y int, button input.Button) {
|
func (element *List) HandleMouseDown (x, y int, button input.Button) {
|
||||||
@ -236,7 +249,7 @@ func (element *List) CountEntries () (count int) {
|
|||||||
// Append adds an entry to the end of the list.
|
// Append adds an entry to the end of the list.
|
||||||
func (element *List) Append (entry ListEntry) {
|
func (element *List) Append (entry ListEntry) {
|
||||||
// append
|
// append
|
||||||
entry.Collapse(element.forcedMinimumWidth)
|
entry = element.resizeEntryToFit(entry)
|
||||||
entry.SetTheme(element.theme.Theme)
|
entry.SetTheme(element.theme.Theme)
|
||||||
entry.SetConfig(element.config)
|
entry.SetConfig(element.config)
|
||||||
element.entries = append(element.entries, entry)
|
element.entries = append(element.entries, entry)
|
||||||
@ -271,7 +284,7 @@ func (element *List) Insert (index int, entry ListEntry) {
|
|||||||
element.entries = append (
|
element.entries = append (
|
||||||
element.entries[:index + 1],
|
element.entries[:index + 1],
|
||||||
element.entries[index:]...)
|
element.entries[index:]...)
|
||||||
entry.Collapse(element.forcedMinimumWidth)
|
entry = element.resizeEntryToFit(entry)
|
||||||
element.entries[index] = entry
|
element.entries[index] = entry
|
||||||
|
|
||||||
// recalculate, redraw, notify
|
// recalculate, redraw, notify
|
||||||
@ -316,7 +329,7 @@ func (element *List) Replace (index int, entry ListEntry) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// replace
|
// replace
|
||||||
entry.Collapse(element.forcedMinimumWidth)
|
entry = element.resizeEntryToFit(entry)
|
||||||
element.entries[index] = entry
|
element.entries[index] = entry
|
||||||
|
|
||||||
// redraw
|
// redraw
|
||||||
@ -381,8 +394,9 @@ func (element *List) changeSelectionBy (delta int) (updated bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (element *List) resizeEntryToFit (entry ListEntry) (resized ListEntry) {
|
func (element *List) resizeEntryToFit (entry ListEntry) (resized ListEntry) {
|
||||||
|
bounds := element.Bounds()
|
||||||
inset := element.theme.Inset(theme.PatternSunken)
|
inset := element.theme.Inset(theme.PatternSunken)
|
||||||
entry.Collapse(element.forcedMinimumWidth - inset[3] - inset[1])
|
entry.Resize(inset.Apply(bounds).Dx())
|
||||||
return entry
|
return entry
|
||||||
}
|
}
|
||||||
|
|
||||||