add app icon, file list menu control
This commit is contained in:
2
Makefile
2
Makefile
@@ -2,5 +2,5 @@ why: *.go go.mod go.sum noise.png
|
||||
go build .
|
||||
|
||||
why.app: why
|
||||
go tool appify -author "David Ashby" -id "in.yetaga.why" -name "why" ./why
|
||||
go tool appify -author "David Ashby" -id "in.yetaga.why" -name "why" -icon ./icon.png ./why
|
||||
rm why.app/Contents/README
|
||||
|
26
go.mod
26
go.mod
@@ -4,7 +4,7 @@ go 1.24.0
|
||||
|
||||
require (
|
||||
github.com/disintegration/imaging v1.6.2
|
||||
modernc.org/tk9.0 v0.68.2-0.20250417123848-ef9ac7c6aea1
|
||||
modernc.org/tk9.0 v0.69.2-0.20250422161729-57986fe43019
|
||||
)
|
||||
|
||||
require (
|
||||
@@ -22,7 +22,7 @@ require (
|
||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect
|
||||
github.com/pkg/errors v0.9.1 // indirect
|
||||
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
|
||||
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect
|
||||
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 // indirect
|
||||
golang.org/x/image v0.26.0 // indirect
|
||||
golang.org/x/net v0.39.0 // indirect
|
||||
golang.org/x/sys v0.32.0 // indirect
|
||||
@@ -30,29 +30,29 @@ require (
|
||||
modernc.org/fsm v1.3.2 // indirect
|
||||
modernc.org/gc/v3 v3.0.0-20250225134559-fd9931328834 // indirect
|
||||
modernc.org/knuth v0.5.4 // indirect
|
||||
modernc.org/libX11 v0.11.14 // indirect
|
||||
modernc.org/libXau v0.9.9 // indirect
|
||||
modernc.org/libXdmcp v0.12.9 // indirect
|
||||
modernc.org/libX11 v0.11.15 // indirect
|
||||
modernc.org/libXau v0.9.14 // indirect
|
||||
modernc.org/libXdmcp v0.12.13 // indirect
|
||||
modernc.org/libXft v0.10.19 // indirect
|
||||
modernc.org/libXrender v0.9.13 // indirect
|
||||
modernc.org/libbsd v0.11.8 // indirect
|
||||
modernc.org/libc v1.62.1 // indirect
|
||||
modernc.org/libbsd v0.11.9 // indirect
|
||||
modernc.org/libc v1.63.0 // indirect
|
||||
modernc.org/libexpat v0.10.12 // indirect
|
||||
modernc.org/libfontconfig v0.8.11 // indirect
|
||||
modernc.org/libfreetype v0.9.18 // indirect
|
||||
modernc.org/libmd v0.12.15 // indirect
|
||||
modernc.org/libtcl9.0 v0.16.3 // indirect
|
||||
modernc.org/libtk9.0 v0.16.2 // indirect
|
||||
modernc.org/libxcb v0.11.3 // indirect
|
||||
modernc.org/libmd v0.12.16 // indirect
|
||||
modernc.org/libtcl9.0 v0.16.4 // indirect
|
||||
modernc.org/libtk9.0 v0.16.3 // indirect
|
||||
modernc.org/libxcb v0.12.0 // indirect
|
||||
modernc.org/libz v0.16.15 // indirect
|
||||
modernc.org/mathutil v1.7.1 // indirect
|
||||
modernc.org/memory v1.9.1 // indirect
|
||||
modernc.org/memory v1.10.0 // indirect
|
||||
modernc.org/ngrab v0.1.0 // indirect
|
||||
modernc.org/rec v0.3.3 // indirect
|
||||
modernc.org/regexp v1.7.9 // indirect
|
||||
modernc.org/sortutil v1.2.1 // indirect
|
||||
modernc.org/strutil v1.2.1 // indirect
|
||||
modernc.org/tcl9.0 v0.16.0 // indirect
|
||||
modernc.org/tcl9.0 v0.16.1 // indirect
|
||||
modernc.org/token v1.1.0 // indirect
|
||||
)
|
||||
|
||||
|
32
go.sum
32
go.sum
@@ -38,6 +38,8 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT
|
||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw=
|
||||
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM=
|
||||
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM=
|
||||
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0/go.mod h1:S9Xr4PYopiDyqSyp5NjCrhFrqg6A5zA2E/iPHPhqnS8=
|
||||
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||
golang.org/x/image v0.26.0 h1:4XjIFEZWQmCZi6Wv8BoxsDhRU3RVnLX04dToTDAEPlY=
|
||||
golang.org/x/image v0.26.0/go.mod h1:lcxbMFAovzpnJxzXS3nyL83K27tmqtKzIJpctK8YO5c=
|
||||
@@ -47,18 +49,22 @@ golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY=
|
||||
golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E=
|
||||
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
|
||||
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
||||
golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
|
||||
golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU=
|
||||
golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ=
|
||||
golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
modernc.org/cc/v4 v4.25.2 h1:T2oH7sZdGvTaie0BRNFbIYsabzCxUQg8nLqCdQ2i0ic=
|
||||
modernc.org/cc/v4 v4.25.2/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0=
|
||||
modernc.org/cc/v4 v4.26.0 h1:QMYvbVduUGH0rrO+5mqF/PSPPRZNpRtg2CLELy7vUpA=
|
||||
modernc.org/ccgo/v4 v4.25.2 h1:OIXoYwU8LU+niNKTi3OyfgQacetOpgrEJMGMsDZQt4g=
|
||||
modernc.org/ccgo/v4 v4.25.2/go.mod h1:Cf2zhnyzU8MivGJl/asSCJ7T9COaAWpenv0lnf1XY+U=
|
||||
modernc.org/ccgo/v4 v4.26.0 h1:gVzXaDzGeBYJ2uXTOpR8FR7OlksDOe9jxnjhIKCsiTc=
|
||||
modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE=
|
||||
modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ=
|
||||
modernc.org/fsm v1.3.2 h1:f58HBydnAmLhugDKOlNniDYfKRcOH/3T4xQTO1AZXag=
|
||||
@@ -71,18 +77,28 @@ modernc.org/knuth v0.5.4 h1:F8mDs7ME3oN9eyx01n6/xVmJ4F5U/qEhSYPnPXaZrps=
|
||||
modernc.org/knuth v0.5.4/go.mod h1:e5SBb35HQBj2aFwbBO3ClPcViLY3Wi0LzaOd7c/3qMk=
|
||||
modernc.org/libX11 v0.11.14 h1:PgPms46sSh2DcvyoKiN6b4P/C8oWRK3wY7UjBW63CJc=
|
||||
modernc.org/libX11 v0.11.14/go.mod h1:81woNnAmSSwxSbzcWvusNsQjWkZFqxhJGdJn1r/KVh4=
|
||||
modernc.org/libX11 v0.11.15 h1:3D3NQXOmbORMmn++s04I5VsKs8wZemf2J3NyYVSNFVg=
|
||||
modernc.org/libX11 v0.11.15/go.mod h1:qgN+KhFg1QCVsPv3iM7M0BBbZTgFI975YK3wr1zndA4=
|
||||
modernc.org/libXau v0.9.9 h1:M+I0tAYSU5/xZEvGH9yCpMOyFy1fbuixrONJX0XJTUk=
|
||||
modernc.org/libXau v0.9.9/go.mod h1:CQMi6xKr4ejSzktdkI+p6hKmE+ibvHMpaH5XWyIu5ic=
|
||||
modernc.org/libXau v0.9.14 h1:BA1gpF6ekuRxpg1ae9Pej5qaoaqe1gTLMVZSanD99W0=
|
||||
modernc.org/libXau v0.9.14/go.mod h1:SBL9NzJwYtmzTM4E60ACsYYJ+9mpkpi8Sx+VEM7dnOw=
|
||||
modernc.org/libXdmcp v0.12.9 h1:VdL/KAY0F+hVcxwR0GIgClPlKjc9OMCSRC1NXyIyllQ=
|
||||
modernc.org/libXdmcp v0.12.9/go.mod h1:ggxs82DX1F9+SArhp8/PcJM4qmES47pnV0AHtKF9giI=
|
||||
modernc.org/libXdmcp v0.12.13 h1:ZyMSTJcuUNtfFs/tIQULB57LPDA7DZogn85o8oC5jJI=
|
||||
modernc.org/libXdmcp v0.12.13/go.mod h1:oFUZJ4Gwa2E1g0p6FYUeUsBCJozmg2eSE2UV0heIdb8=
|
||||
modernc.org/libXft v0.10.19 h1:GuMqRxQBBC3feRH7TMkCC6EIeY8j7+HLm5oQlNSxAIw=
|
||||
modernc.org/libXft v0.10.19/go.mod h1:x7wcmlnUzG9SLfXZMG1DbMN6bRwNV+eZT4xN+iQSLkQ=
|
||||
modernc.org/libXrender v0.9.13 h1:aTH9Ii0TepPm1MmC9aDr06UXNw5XvrIHC45y+3ULeRY=
|
||||
modernc.org/libXrender v0.9.13/go.mod h1:6K3VytTIn9aA8WOZQY0ZjB172pVI0VR66WLOsVW7sLo=
|
||||
modernc.org/libbsd v0.11.8 h1:lBSRhXYUMjuiYUfYWF1VcT9kTIFH8j/aaDYF+Pck964=
|
||||
modernc.org/libbsd v0.11.8/go.mod h1:g8wcLe7VT2dSI0R4z0xIF4UHZRMIpjIQPIpRJN6td7o=
|
||||
modernc.org/libbsd v0.11.9 h1:pSlbW7odcLV3VkbvaRem+VfWakCzEvIF5GkCGfJcW1I=
|
||||
modernc.org/libbsd v0.11.9/go.mod h1:djHSKwma0pxO46lWLEoJdHyQQGw3y57lXs3UejXpNFc=
|
||||
modernc.org/libc v1.62.1 h1:s0+fv5E3FymN8eJVmnk0llBe6rOxCu/DEU+XygRbS8s=
|
||||
modernc.org/libc v1.62.1/go.mod h1:iXhATfJQLjG3NWy56a6WVU73lWOcdYVxsvwCgoPljuo=
|
||||
modernc.org/libc v1.63.0 h1:wKzb61wOGCzgahQBORb1b0dZonh8Ufzl/7r4Yf1D5YA=
|
||||
modernc.org/libc v1.63.0/go.mod h1:wDzH1mgz1wUIEwottFt++POjGRO9sgyQKrpXaz3x89E=
|
||||
modernc.org/libexpat v0.10.12 h1:SNjo4U5z7Uu01qId6RTDH5uYT1+T94Z1JJ0s8g1FB2o=
|
||||
modernc.org/libexpat v0.10.12/go.mod h1:E4er4v37XcC813LkDSqbt7SB1Jj071/ceIorg1kRjzI=
|
||||
modernc.org/libfontconfig v0.8.11 h1:Tqz8Ooi0qgLvD6JUbNzamqlyOwq3NPAE2N4cOF3ymYw=
|
||||
@@ -91,18 +107,28 @@ modernc.org/libfreetype v0.9.18 h1:RBCWzuMAmxt7Wqq/oCS08nFCscqYUDFbRPuCkTYqHCo=
|
||||
modernc.org/libfreetype v0.9.18/go.mod h1:wHJJk5gn2Dw93JBGwLeSB5mAaxF6sKTbsM/p1ygQudQ=
|
||||
modernc.org/libmd v0.12.15 h1:LgXokdUq+nawxNPSSce/0FvmM3atr62JOqLq9LDmY7U=
|
||||
modernc.org/libmd v0.12.15/go.mod h1:HwP6ekjVbbTn5t/xJHRi2aK47fY6vs1bSPqunl8mVt4=
|
||||
modernc.org/libmd v0.12.16 h1:ZN/zuLI/1XWziYETHscTfZS8Y2y9+QNO1M/cNLeSaKM=
|
||||
modernc.org/libmd v0.12.16/go.mod h1:FNkvT9ZLG4azbJ0evioCCMlESfjcp4h/9b0Chptf3hk=
|
||||
modernc.org/libtcl9.0 v0.16.3 h1:/zRNPpQwuI4g6RymMnk+WMcUVsw7ubb3Su1HmAz0pRk=
|
||||
modernc.org/libtcl9.0 v0.16.3/go.mod h1:yci8r8dmrCHyiAD/6uUnU33FHgDcD5zpjI2o8geI8wg=
|
||||
modernc.org/libtcl9.0 v0.16.4 h1:2l89BUqhERtlwlooikMJIexh7lDplaE66IPdtBPgAsA=
|
||||
modernc.org/libtcl9.0 v0.16.4/go.mod h1:wS8cDFpEeEFNAk2dwTXX3xfRj6Ro2xBEahgwSUbFsX8=
|
||||
modernc.org/libtk9.0 v0.16.2 h1:deSs6jHnQA8cigX2CLzvWrpTMWuruQKB2Q3B7uzAdRw=
|
||||
modernc.org/libtk9.0 v0.16.2/go.mod h1:6oy9MEoR04AUHCAKQ0hYVlcZWbWAiMaXlHCu7Ig2AU4=
|
||||
modernc.org/libtk9.0 v0.16.3 h1:MUnf4JrLFb1xLqlHxp6WzlVdhSvh9R25xLKVaJ8YgHU=
|
||||
modernc.org/libtk9.0 v0.16.3/go.mod h1:pSLpdqe6Ioc+OcGABQXlxvfMWk+Lmwp/WUMxE24ezQ0=
|
||||
modernc.org/libxcb v0.11.3 h1:N7DIx5UPn6xpWTkCGQ5SY/wKWaDWaixRMHCPA/4SPMs=
|
||||
modernc.org/libxcb v0.11.3/go.mod h1:Gv8miMFngEJMKsMA5zSCGgLDE/o85OWAKrdOiZY8hbk=
|
||||
modernc.org/libxcb v0.12.0 h1:y7BhbYeJRdJIv4VxmW2uhY9vSY8yqIHtuB2QAoJrdzw=
|
||||
modernc.org/libxcb v0.12.0/go.mod h1:eP7i7d5NBjWNq8njt3u1l6PoDfTU/R5i+cLuIOldbKY=
|
||||
modernc.org/libz v0.16.15 h1:E1JHwmF+LYxE97PgZqlVoiNM3JletNYy8lM4rQuWhWg=
|
||||
modernc.org/libz v0.16.15/go.mod h1:ZEfDnPewNb6xrSxZwAnRckDsC0C7cObJqIsDCmhl9ko=
|
||||
modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU=
|
||||
modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg=
|
||||
modernc.org/memory v1.9.1 h1:V/Z1solwAVmMW1yttq3nDdZPJqV1rM05Ccq6KMSZ34g=
|
||||
modernc.org/memory v1.9.1/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw=
|
||||
modernc.org/memory v1.10.0 h1:fzumd51yQ1DxcOxSO+S6X7+QTuVU+n8/Aj7swYjFfC4=
|
||||
modernc.org/memory v1.10.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw=
|
||||
modernc.org/ngrab v0.1.0 h1:21cX4tAIfLNjR4ax7JMfHTz2ztnjVGcCSsztoG6EFMk=
|
||||
modernc.org/ngrab v0.1.0/go.mod h1:dDGjUip6IXmb5Y5M8RPYD7Sg4S/VdfG5akxK34uYtOE=
|
||||
modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8=
|
||||
@@ -117,9 +143,15 @@ modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0=
|
||||
modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A=
|
||||
modernc.org/tcl9.0 v0.16.0 h1:Me5on7SpLPIv3yEkUiFVG14YR1AbvzHrZGkEu4s696s=
|
||||
modernc.org/tcl9.0 v0.16.0/go.mod h1:RMBQkc0bU2Sl7et9IoZjFG3Bcehh+6ARJgVBpKJ48+4=
|
||||
modernc.org/tcl9.0 v0.16.1 h1:D9WYmjBavBhtXHSQ06NAwO8ij9nRJ1eCgygdHzyxpTg=
|
||||
modernc.org/tcl9.0 v0.16.1/go.mod h1:d8Ifo4FINBlgfztjJisQjom2QsoAJJE6RNxW/+5goj8=
|
||||
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/tk9.0 v0.69.1 h1:XKrpVqmSu5Mm8nKqMrIrHak+xiNHWCMleT5xkN0GXi4=
|
||||
modernc.org/tk9.0 v0.69.1/go.mod h1:5+l1KGhaMWL3ORkSFykTb5sZIKRNcsRAKJWOLr0qJLI=
|
||||
modernc.org/tk9.0 v0.69.2-0.20250422161729-57986fe43019 h1:o3qrJ0Axl5wRplB4AzTy9q6wrIRdJkS8cRsPFhz7F/Q=
|
||||
modernc.org/tk9.0 v0.69.2-0.20250422161729-57986fe43019/go.mod h1:Mz1RSwwp5yLex7Z+DKJ4rgPZ4Q8tx1AlbdIUFvES58w=
|
||||
modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
|
||||
modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
|
||||
|
74
main.go
74
main.go
@@ -19,6 +19,11 @@ import (
|
||||
//go:embed noise.png
|
||||
var noise []byte
|
||||
|
||||
// this is the app icon
|
||||
//
|
||||
//go:embed icon.png
|
||||
var icon []byte
|
||||
|
||||
var validFileTypes = []tk.FileType{
|
||||
{TypeName: "BMP", Extensions: []string{".bmp"}},
|
||||
{TypeName: "JPEG", Extensions: []string{".jpg", ".jpeg"}},
|
||||
@@ -137,11 +142,53 @@ func main() {
|
||||
|
||||
menubar := tk.Menu()
|
||||
fileMenu := menubar.Menu()
|
||||
fileMenu.AddCommand(tk.Lbl("Open File"), tk.Underline(0), tk.Accelerator("Meta+O"), tk.Command(newFileInDirectory(img)))
|
||||
fileMenu.AddCommand(tk.Lbl("Open Directory"), tk.Underline(0), tk.Command(newDirectory(img)))
|
||||
fileMenu.AddCommand(tk.Lbl("Open File"), tk.Accelerator("Meta+O"), tk.Command(newFileInDirectory(img)))
|
||||
fileMenu.AddCommand(tk.Lbl("Open Directory"), tk.Command(newDirectory(img)))
|
||||
fileMenu.AddSeparator()
|
||||
checkbox := fileMenu.AddCheckbutton(tk.Lbl("Show Filelist"))
|
||||
bindVar := tk.Variable("FileList")
|
||||
fileMenu.EntryConfigure(checkbox, bindVar)
|
||||
menubar.AddCascade(tk.Lbl("File"), tk.Underline(0), tk.Mnu(fileMenu))
|
||||
tk.App.Configure(tk.Mnu(menubar))
|
||||
|
||||
destroyFileList := func(destroy bool) {
|
||||
if destroy {
|
||||
tk.Destroy(fileList)
|
||||
}
|
||||
fileList = nil
|
||||
lb = nil
|
||||
bindVar.Set("0")
|
||||
}
|
||||
constructFileList := func() {
|
||||
fileList = tk.Toplevel()
|
||||
fileList.WmTitle("Files")
|
||||
lb = fileList.Listbox(tk.Height(0))
|
||||
for i := range directoryState.images {
|
||||
lb.Insert("end", directoryState.images[i])
|
||||
if i == slices.Index(directoryState.images, directoryState.currentFile) {
|
||||
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>
|
||||
destroyFileList(false)
|
||||
}))
|
||||
bindVar.Set("1")
|
||||
}
|
||||
|
||||
tk.Bind(fileMenu, "<<MenuSelect>>", tk.Command(func() {
|
||||
if bindVar.Get() == "1" && fileList == nil {
|
||||
constructFileList()
|
||||
} else if bindVar.Get() == "0" && fileList != nil {
|
||||
destroyFileList(true)
|
||||
}
|
||||
}))
|
||||
|
||||
// TODO: if someone presses the Meta key again after the openfile dialog box closes,
|
||||
// it triggers a _release_ event instead of a press event. The second time afterward, it works correctly.
|
||||
tk.Bind(tk.App, "<KeyPress>", tk.Command(func(e *tk.Event) {
|
||||
@@ -158,28 +205,10 @@ func main() {
|
||||
case "a":
|
||||
if metaActive {
|
||||
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
|
||||
}))
|
||||
constructFileList()
|
||||
} else {
|
||||
// list closed by Meta-a
|
||||
tk.Destroy(fileList)
|
||||
destroyFileList(true)
|
||||
}
|
||||
}
|
||||
case "Up":
|
||||
@@ -212,5 +241,6 @@ func main() {
|
||||
// }))
|
||||
|
||||
tk.Pack(img)
|
||||
tk.App.IconPhoto(tk.NewPhoto(tk.Data(icon)))
|
||||
tk.App.Wait()
|
||||
}
|
||||
|
16
readme.md
16
readme.md
@@ -12,11 +12,15 @@ So, what comes before Z? Y.
|
||||
|
||||
This is being created to scratch an itch for me and only me.
|
||||
|
||||
## Image credit
|
||||
|
||||
Generated via <https://gopherize.me/gopher/ab6a409adff6140f25080835e82384f25bfe15c5>. Renee French designed the original Gopher; see <https://go.dev/blog/gopher> for his history.
|
||||
|
||||
## TODO
|
||||
|
||||
* image resizing
|
||||
* file sorting options
|
||||
* display a list of filenames
|
||||
* skip file load if direction key is repeated
|
||||
* cache loaded files for quick back-and-forth
|
||||
* preload next file for performance
|
||||
[ ] image resizing
|
||||
[ ] file sorting options
|
||||
[x] display a list of filenames
|
||||
[ ] skip file load if direction key is repeated
|
||||
[ ] cache loaded files for quick back-and-forth
|
||||
[ ] preload next file for performance
|
||||
|
Reference in New Issue
Block a user