diff --git a/go.mod b/go.mod index ba87377..8ed051b 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require fyne.io/fyne/v2 v2.7.2 require ( fyne.io/systray v1.12.0 // indirect - github.com/BurntSushi/toml v1.5.0 // indirect + github.com/BurntSushi/toml v1.6.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/fredbi/uri v1.1.1 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect @@ -15,26 +15,26 @@ require ( github.com/fyne-io/image v0.1.1 // indirect github.com/fyne-io/oksvg v0.2.0 // indirect github.com/go-gl/gl v0.0.0-20231021071112-07e5d0ea2e71 // indirect - github.com/go-gl/glfw/v3.3/glfw v0.0.0-20240506104042-037f3cc74f2a // indirect + github.com/go-gl/glfw/v3.3/glfw v0.0.0-20250301202403-da16c1255728 // indirect github.com/go-text/render v0.2.0 // indirect - github.com/go-text/typesetting v0.2.1 // indirect - github.com/godbus/dbus/v5 v5.1.0 // indirect + github.com/go-text/typesetting v0.3.2 // indirect + github.com/godbus/dbus/v5 v5.2.2 // indirect github.com/hack-pad/go-indexeddb v0.3.2 // indirect - github.com/hack-pad/safejs v0.1.0 // indirect + github.com/hack-pad/safejs v0.1.1 // indirect github.com/jeandeaual/go-locale v0.0.0-20250612000132-0ef82f21eade // indirect github.com/jsummers/gobmp v0.0.0-20230614200233-a9de23ed2e25 // indirect github.com/kr/text v0.1.0 // indirect github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect - github.com/nicksnyder/go-i18n/v2 v2.5.1 // indirect + github.com/nicksnyder/go-i18n/v2 v2.6.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rymdport/portal v0.4.2 // indirect github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c // indirect github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef // indirect github.com/stretchr/testify v1.11.1 // indirect - github.com/yuin/goldmark v1.7.8 // indirect - golang.org/x/image v0.24.0 // indirect - golang.org/x/net v0.47.0 // indirect - golang.org/x/sys v0.39.0 // indirect + github.com/yuin/goldmark v1.7.16 // indirect + golang.org/x/image v0.34.0 // indirect + golang.org/x/net v0.48.0 // indirect + golang.org/x/sys v0.40.0 // indirect golang.org/x/text v0.32.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 337e83e..f9b78bf 100644 --- a/go.sum +++ b/go.sum @@ -2,8 +2,8 @@ fyne.io/fyne/v2 v2.7.2 h1:XiNpWkn0PzX43ZCjbb0QYGg1RCxVbugwfVgikWZBCMw= fyne.io/fyne/v2 v2.7.2/go.mod h1:PXbqY3mQmJV3J1NRUR2VbVgUUx3vgvhuFJxyjRK/4Ug= fyne.io/systray v1.12.0 h1:CA1Kk0e2zwFlxtc02L3QFSiIbxJ/P0n582YrZHT7aTM= fyne.io/systray v1.12.0/go.mod h1:RVwqP9nYMo7h5zViCBHri2FgjXF7H2cub7MAq4NSoLs= -github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= -github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk= +github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g= @@ -22,22 +22,22 @@ github.com/fyne-io/oksvg v0.2.0 h1:mxcGU2dx6nwjJsSA9PCYZDuoAcsZ/OuJlvg/Q9Njfo8= github.com/fyne-io/oksvg v0.2.0/go.mod h1:dJ9oEkPiWhnTFNCmRgEze+YNprJF7YRbpjgpWS4kzoI= github.com/go-gl/gl v0.0.0-20231021071112-07e5d0ea2e71 h1:5BVwOaUSBTlVZowGO6VZGw2H/zl9nrd3eCZfYV+NfQA= github.com/go-gl/gl v0.0.0-20231021071112-07e5d0ea2e71/go.mod h1:9YTyiznxEY1fVinfM7RvRcjRHbw2xLBJ3AAGIT0I4Nw= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20240506104042-037f3cc74f2a h1:vxnBhFDDT+xzxf1jTJKMKZw3H0swfWk9RpWbBbDK5+0= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20240506104042-037f3cc74f2a/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20250301202403-da16c1255728 h1:RkGhqHxEVAvPM0/R+8g7XRwQnHatO0KAuVcwHo8q9W8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20250301202403-da16c1255728/go.mod h1:SyRD8YfuKk+ZXlDqYiqe1qMSqjNgtHzBTG810KUagMc= github.com/go-text/render v0.2.0 h1:LBYoTmp5jYiJ4NPqDc2pz17MLmA3wHw1dZSVGcOdeAc= github.com/go-text/render v0.2.0/go.mod h1:CkiqfukRGKJA5vZZISkjSYrcdtgKQWRa2HIzvwNN5SU= -github.com/go-text/typesetting v0.2.1 h1:x0jMOGyO3d1qFAPI0j4GSsh7M0Q3Ypjzr4+CEVg82V8= -github.com/go-text/typesetting v0.2.1/go.mod h1:mTOxEwasOFpAMBjEQDhdWRckoLLeI/+qrQeBCTGEt6M= -github.com/go-text/typesetting-utils v0.0.0-20241103174707-87a29e9e6066 h1:qCuYC+94v2xrb1PoS4NIDe7DGYtLnU2wWiQe9a1B1c0= -github.com/go-text/typesetting-utils v0.0.0-20241103174707-87a29e9e6066/go.mod h1:DDxDdQEnB70R8owOx3LVpEFvpMK9eeH1o2r0yZhFI9o= -github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= -github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/go-text/typesetting v0.3.2 h1:OUOFxp9Rx5PiO0/rh2IY+5gmyXjXsVG8+LfEyk9NMcE= +github.com/go-text/typesetting v0.3.2/go.mod h1:vIRUT25mLQaSh4C8H/lIsKppQz/Gdb8Pu/tNwpi52ts= +github.com/go-text/typesetting-utils v0.0.0-20250618110550-c820a94c77b8 h1:4KCscI9qYWMGTuz6BpJtbUSRzcBrUSSE0ENMJbNSrFs= +github.com/go-text/typesetting-utils v0.0.0-20250618110550-c820a94c77b8/go.mod h1:3/62I4La/HBRX9TcTpBj4eipLiwzf+vhI+7whTc9V7o= +github.com/godbus/dbus/v5 v5.2.2 h1:TUR3TgtSVDmjiXOgAAyaZbYmIeP3DPkld3jgKGV8mXQ= +github.com/godbus/dbus/v5 v5.2.2/go.mod h1:3AAv2+hPq5rdnr5txxxRwiGjPXamgoIHgz9FPBfOp3c= github.com/google/pprof v0.0.0-20211214055906-6f57359322fd h1:1FjCyPC+syAzJ5/2S8fqdZK1R22vvA0J7JZKcuOIQ7Y= github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg= github.com/hack-pad/go-indexeddb v0.3.2 h1:DTqeJJYc1usa45Q5r52t01KhvlSN02+Oq+tQbSBI91A= github.com/hack-pad/go-indexeddb v0.3.2/go.mod h1:QvfTevpDVlkfomY498LhstjwbPW6QC4VC/lxYb0Kom0= -github.com/hack-pad/safejs v0.1.0 h1:qPS6vjreAqh2amUqj4WNG1zIw7qlRQJ9K10eDKMCnE8= -github.com/hack-pad/safejs v0.1.0/go.mod h1:HdS+bKF1NrE72VoXZeWzxFOVQVUSqZJAG0xNCnb+Tio= +github.com/hack-pad/safejs v0.1.1 h1:d5qPO0iQ7h2oVtpzGnLExE+Wn9AtytxIfltcS2b9KD8= +github.com/hack-pad/safejs v0.1.1/go.mod h1:HdS+bKF1NrE72VoXZeWzxFOVQVUSqZJAG0xNCnb+Tio= github.com/jeandeaual/go-locale v0.0.0-20250612000132-0ef82f21eade h1:FmusiCI1wHw+XQbvL9M+1r/C3SPqKrmBaIOYwVfQoDE= github.com/jeandeaual/go-locale v0.0.0-20250612000132-0ef82f21eade/go.mod h1:ZDXo8KHryOWSIqnsb/CiDq7hQUYryCgdVnxbj8tDG7o= github.com/jsummers/gobmp v0.0.0-20230614200233-a9de23ed2e25 h1:YLvr1eE6cdCqjOe972w/cYF+FjW34v27+9Vo5106B4M= @@ -47,8 +47,8 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= -github.com/nicksnyder/go-i18n/v2 v2.5.1 h1:IxtPxYsR9Gp60cGXjfuR/llTqV8aYMsC472zD0D1vHk= -github.com/nicksnyder/go-i18n/v2 v2.5.1/go.mod h1:DrhgsSDZxoAfvVrBVLXoxZn/pN5TXqaDbq7ju94viiQ= +github.com/nicksnyder/go-i18n/v2 v2.6.1 h1:JDEJraFsQE17Dut9HFDHzCoAWGEQJom5s0TRd17NIEQ= +github.com/nicksnyder/go-i18n/v2 v2.6.1/go.mod h1:Vee0/9RD3Quc/NmwEjzzD7VTZ+Ir7QbXocrkhOzmUKA= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/pkg/profile v1.7.0 h1:hnbDkaNWPCLMO9wGLdBFTIZvzDrDfBM2072E1S9gJkA= @@ -63,14 +63,16 @@ github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef h1:Ch6Q+AZUxDBCVqd github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef/go.mod h1:nXTWP6+gD5+LUJ8krVhhoeHjvHTutPxMYl5SvkcnJNE= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -github.com/yuin/goldmark v1.7.8 h1:iERMLn0/QJeHFhxSt3p6PeN9mGnvIKSpG9YYorDMnic= -github.com/yuin/goldmark v1.7.8/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= -golang.org/x/image v0.24.0 h1:AN7zRgVsbvmTfNyqIbbOraYL8mSwcKncEj8ofjgzcMQ= -golang.org/x/image v0.24.0/go.mod h1:4b/ITuLfqYq1hqZcjofwctIhi7sZh2WaCjvsBNjjya8= -golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= -golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= -golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= -golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +github.com/yuin/goldmark v1.7.16 h1:n+CJdUxaFMiDUNnWC3dMWCIQJSkxH4uz3ZwQBkAlVNE= +github.com/yuin/goldmark v1.7.16/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg= +go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= +golang.org/x/image v0.34.0 h1:33gCkyw9hmwbZJeZkct8XyR11yH889EQt/QH4VmXMn8= +golang.org/x/image v0.34.0/go.mod h1:2RNFBZRB+vnwwFil8GkMdRvrJOFd1AzdZI6vOY+eJVU= +golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= +golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= +golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= +golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/src/action.go b/src/action.go new file mode 100644 index 0000000..75cc460 --- /dev/null +++ b/src/action.go @@ -0,0 +1,5 @@ +package main + +func connect() { + +} diff --git a/src/draw.go b/src/draw.go new file mode 100644 index 0000000..c14b39b --- /dev/null +++ b/src/draw.go @@ -0,0 +1,219 @@ +package main + +import ( + "image/color" + "log" + + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/canvas" + "fyne.io/fyne/v2/container" + "fyne.io/fyne/v2/dialog" + "fyne.io/fyne/v2/layout" + "fyne.io/fyne/v2/widget" +) + +func drawSeparator(trailNewLine bool) *fyne.Container { + emptyLabel := widget.NewLabel("") // Give it some space at the bottom with an empty line + separatorLine := canvas.NewLine(color.Gray{Y: 128}) + + var separContainer *fyne.Container + if trailNewLine { + separContainer = container.NewVBox( + emptyLabel, + separatorLine, + emptyLabel, + ) + } else { + separContainer = container.NewVBox( + emptyLabel, + separatorLine, + ) + } + + return separContainer +} + +func drawButtonRow(targetMode *int) *fyne.Container { + actionText := widget.NewLabel("Select Mode") + // targetMode is defined as: + // 0 undefined / not used + // 1 presentation (PowerPoint, Impress) + // 2 video (mp4, mkv) + var presModeBtn *widget.Button + var videoModeBtn *widget.Button + presModeBtn = widget.NewButton("Presentation", func() { + *targetMode = 1 + presModeBtn.Importance = widget.HighImportance + videoModeBtn.Importance = widget.LowImportance + log.Println("Set mode to presentation", *targetMode) + refreshButtons(presModeBtn, videoModeBtn) + }) + presWide := container.NewGridWrap( + buttonSize, + presModeBtn, + ) + + videoModeBtn = widget.NewButton("Video", func() { + *targetMode = 2 + presModeBtn.Importance = widget.LowImportance + videoModeBtn.Importance = widget.HighImportance + log.Println("Set mode to video", *targetMode) + refreshButtons(presModeBtn, videoModeBtn) + }) + videoWide := container.NewGridWrap( + buttonSize, + videoModeBtn, + ) + + modeRow := container.NewHBox( + presWide, + widget.NewLabel(""), + videoWide, + ) + + modeCol := container.NewVBox( + actionText, + modeRow, + ) + + return modeCol +} + +func drawTargetSection(raspiNames []string, raspiTarget *string) *fyne.Container { + actionText := widget.NewLabel("Select Target") + + // Left side for selection of target + piSelection := widget.NewRadioGroup(raspiNames, func(selected string) { + if len(selected) != 0 { + *raspiTarget = selected + log.Println("Selected target:", selected) + } else { + log.Println("Deselected Target") + } + }) + + // Right side authentication + userLabel := widget.NewLabel("Username") + passLabel := widget.NewLabel("Password") + + userEntry := widget.NewEntry() + userEntry.SetPlaceHolder("") + + passEntry := widget.NewEntry() + passEntry.SetPlaceHolder("") + + expander := canvas.NewRectangle(color.Transparent) + expander.SetMinSize(fyne.NewSize(150, 0)) + targetAuth := container.NewVBox( + container.NewGridWithColumns(2, userLabel, expander), + userEntry, + container.NewGridWithColumns(2, passLabel, expander), + passEntry, + ) + + divider := canvas.NewRectangle(color.Transparent) + divider.SetMinSize(fyne.NewSize(300, 0)) + + selecCol := container.NewVBox( + actionText, + piSelection, + ) + + targetRow := container.NewHBox( + selecCol, + divider, + targetAuth, + ) + + var verifyBtn *widget.Button + verifyBtn = widget.NewButton("Verify Credentials", func() { + verifyBtn.Importance = widget.HighImportance + log.Println("Verifying credentials...") + refreshButtons(verifyBtn) + }) + verifyWide := container.NewGridWrap( + buttonSize, + verifyBtn, + ) + + wholeCol := container.NewVBox( + targetRow, + widget.NewLabel(""), + verifyWide, + ) + + return wholeCol +} + +func drawFileSelection(localPath *string, parentWindow *fyne.Window) *fyne.Container { + actionText := widget.NewLabel("Select File") + pathLabel := widget.NewLabel("No File Selected Yet...") + + uploadBtn := widget.NewButton("Click to Select File", func() { + // Stupid dialog error on 'headless' servers... + log.Println("Ignore the next error. ~Refer: https://github.com/fyne-io/fyne/issues/4110") + + // Use NewFileOpen to get the dialog object + uploadDiag := dialog.NewFileOpen(func(r fyne.URIReadCloser, err error) { + if r != nil { + defer r.Close() + + pathLabel.SetText(r.URI().Name()) + *localPath = r.URI().Path() + + log.Println("Local path of selected file:", *localPath) + } + }, *parentWindow) + + //fileFilter := storage.NewExtensionFileFilter() // <- needs a list[str] of extensions if we want to filter + //uploadDiag.SetFilter(fileFilter) + + // Resize the dialog to the whole window, if it wants to do that - + uploadDiag.Resize(dialogSize) + uploadDiag.Show() + }) + uploadWide := container.NewGridWrap( + buttonSize, + uploadBtn, + ) + + fileSelecRow := container.NewHBox( + uploadWide, + pathLabel, + ) + + fileSelecCol := container.NewVBox( + actionText, + fileSelecRow, + ) + + return fileSelecCol +} + +func drawFooter(app fyne.App, targetMode *int) *fyne.Container { + // Configuration of the bottom of the application + showBtn := widget.NewButton("Print Current Value", func() { + log.Println(*targetMode) + }) + showWide := container.NewGridWrap( + buttonSize, + showBtn, + ) + + cancelBtn := widget.NewButton("Exit", func() { + log.Println("Quitting") + app.Quit() + }) + cancelWide := container.NewGridWrap( + buttonSize, + cancelBtn, + ) + + bottom := container.NewHBox( + showWide, // left + layout.NewSpacer(), // flexible space + cancelWide, // right + ) + + return bottom +} diff --git a/src/main.go b/src/main.go index 3f1b418..b001065 100644 --- a/src/main.go +++ b/src/main.go @@ -6,51 +6,69 @@ import ( "fyne.io/fyne/v2" "fyne.io/fyne/v2/app" "fyne.io/fyne/v2/container" - "fyne.io/fyne/v2/layout" "fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/widget" ) +const ( + appName string = "RPi Charon Configuration Tool" +) + var ( - windowSize fyne.Size = fyne.NewSize(700, 600) + windowSize fyne.Size = fyne.NewSize(700, 650) // Default Window size + dialogSize fyne.Size = fyne.NewSize(750, 700) // For some reason when we use windowSize for that, its still smaller, this is also smaller. But a better fit + buttonSize fyne.Size = fyne.NewSize(200, 50) // Default button size + entrySize fyne.Size = fyne.NewSize(200, 40) ) func main() { - a := app.NewWithID("nl.systemec.rpi-charon") - a.Settings().SetTheme(theme.DefaultTheme()) + app := app.NewWithID("nl.systemec.rpi-charon") + app.Settings().SetTheme(theme.DefaultTheme()) - w := a.NewWindow("rpi-charon") + w := app.NewWindow(appName) w.Resize(windowSize) raspiNames := getRaspiNames() + // Define variables and print them out for debug + var targetMode int = 0 var raspiTarget string - piSelection := widget.NewRadioGroup(raspiNames, func(selected string) { - if len(selected) != 0 { - log.Println(selected) - raspiTarget = selected - } else { - log.Println("Deselected Target") - } - }) + var localUploadPath string + log.Println("Current mode:", targetMode) + log.Println("Current target:", raspiTarget) - bottom := container.NewHBox( - actionWide, // left - layout.NewSpacer(), // flexible space - exitWide, // right + // Call the draw functions -> ./src/draw.go + modeBtnRow := drawButtonRow(&targetMode) + drawSelecRow := drawTargetSection(raspiNames, &raspiTarget) + fileSelectRow := drawFileSelection(&localUploadPath, &w) + footerRow := drawFooter(app, &targetMode) + + center := container.NewVBox( + modeBtnRow, + drawSeparator(true), + drawSelecRow, + drawSeparator(false), + fileSelectRow, ) content := container.NewBorder( - widget.NewLabel("Select relevant files."), // top - bottom, // bottom - nil, nil, // left, right - centerContent, + widget.NewLabel(appName), // top + footerRow, // bottom + nil, nil, // left, right + center, //center ) + log.Println(raspiTarget) w.SetContent(content) w.ShowAndRun() } +func refreshButtons(givenButtons ...*widget.Button) { + for _, btn := range givenButtons { + btn.Refresh() + } +} + // The raspiList is defined in the other go file, must me maintained separately func getRaspiNames() []string { raspiNames := make([]string, 0, len(raspiList))