basic listbox selection working

This commit is contained in:
2025-04-17 20:56:27 -04:00
parent 8c8bddce44
commit b5f670ead7
3 changed files with 25 additions and 1 deletions

2
go.mod
View File

@@ -4,7 +4,7 @@ go 1.24.0
require (
github.com/disintegration/imaging v1.6.2
modernc.org/tk9.0 v0.68.0
modernc.org/tk9.0 v0.68.2-0.20250417123848-ef9ac7c6aea1
)
require (

2
go.sum
View File

@@ -119,5 +119,7 @@ modernc.org/tcl9.0 v0.16.0 h1:Me5on7SpLPIv3yEkUiFVG14YR1AbvzHrZGkEu4s696s=
modernc.org/tcl9.0 v0.16.0/go.mod h1:RMBQkc0bU2Sl7et9IoZjFG3Bcehh+6ARJgVBpKJ48+4=
modernc.org/tk9.0 v0.68.0 h1:Qt6ENHG774ZYsDpMq5R1VKR0S5PQdyuQXFtMol6WJyg=
modernc.org/tk9.0 v0.68.0/go.mod h1:YAR5KsxdaU5uTL+1PLEXrQN+rrhJ+Sz+suwXM7piwFU=
modernc.org/tk9.0 v0.68.2-0.20250417123848-ef9ac7c6aea1 h1:Gg+D6aT+sW5zTGjRspRv2HPnWAJvamXpDwEx+ea1GzA=
modernc.org/tk9.0 v0.68.2-0.20250417123848-ef9ac7c6aea1/go.mod h1:YAR5KsxdaU5uTL+1PLEXrQN+rrhJ+Sz+suwXM7piwFU=
modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=

22
main.go
View File

@@ -31,6 +31,7 @@ var validFileTypes = []tk.FileType{
var metaActive bool
var fileList *tk.ToplevelWidget
var lb *tk.ListboxWidget
var directoryState struct {
currentDirectory string
@@ -159,9 +160,22 @@ func main() {
if fileList == nil {
fileList = tk.Toplevel()
fileList.WmTitle("files")
lb = fileList.Listbox(tk.Height(0))
for i := range directoryState.images {
lb.Insert("end", directoryState.images[i])
if directoryState.currentFile == directoryState.images[i] {
lb.SelectionSet(i)
}
}
tk.Pack(lb)
tk.Bind(lb, "<<ListboxSelect>>", tk.Command(func() {
selection := lb.Curselection()
updateImage(filepath.Join(directoryState.currentDirectory, directoryState.images[selection[0]]), img)
}))
tk.Bind(fileList, "<Destroy>", tk.Command(func(e *tk.Event) {
// list closed by user click on <x>
fileList = nil
lb = nil
}))
} else {
// list closed by Meta-a
@@ -171,10 +185,18 @@ func main() {
case "Up":
if curr > 0 {
updateImage(filepath.Join(directoryState.currentDirectory, directoryState.images[curr-1]), img)
if lb != nil {
lb.SelectionClear("0", "end")
lb.SelectionSet(curr - 1)
}
}
case "Down":
if curr < len(directoryState.images)-1 && curr != -1 {
updateImage(filepath.Join(directoryState.currentDirectory, directoryState.images[curr+1]), img)
if lb != nil {
lb.SelectionClear("0", "end")
lb.SelectionSet(curr + 1)
}
}
}
}))