123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- package main
- import (
- "fmt"
- "log"
- "net/url"
- "fyne.io/fyne/v2"
- "fyne.io/fyne/v2/app"
- "fyne.io/fyne/v2/cmd/fyne_settings/settings"
- "fyne.io/fyne/v2/container"
- "fyne.io/fyne/v2/theme"
- "fyne.io/fyne/v2/widget"
- )
- var Version string
- var UseWake bool // WOL
- var TvStatus string = "Disconnected" // Need refresh
- var TvIp string
- var TvMac string // Used for WOL
- func setup_prefs(pref fyne.Preferences) {
- Version = pref.StringWithFallback("version", "")
- if Version == "" {
- pref.SetString("version", "1.0-dev")
- Version = "1.0-dev"
- }
- UseWake = pref.BoolWithFallback("wake_on_lan", false)
- }
- // Depreciated as mobile users will use the settings button rather than the menu
- /*func make_mainMnu(a fyne.App, w fyne.Window) *fyne.MainMenu {
- var settingsItem *fyne.MenuItem = fyne.NewMenuItem("Settings", func() {
- var w2 fyne.Window = a.NewWindow("myRoku Settings")
- w2.SetContent(settings.NewSettings().LoadAppearanceScreen(w2))
- w2.CenterOnScreen()
- w2.Resize(fyne.NewSize(480, 480))
- w2.Show()
- })
- var mnu *fyne.MainMenu = fyne.NewMainMenu(fyne.NewMenu("File", settingsItem, fyne.NewMenuItemSeparator()))
- return mnu
- }*/
- func main() {
- var a fyne.App = app.NewWithID("my-roku")
- var pref fyne.Preferences = a.Preferences()
- setup_prefs(pref)
- log.Printf("myRoku v%s wol=%t", Version, UseWake)
- var home fyne.Window = a.NewWindow("myRoku")
- /*if a.Driver().Device().HasKeyboard() { // Desktop only
- home.SetMainMenu(make_mainMnu(a, home))
- } */
- home.CenterOnScreen()
- home.Resize(fyne.Size{Width: 400, Height: 600})
- home.SetContent(container.NewVBox(
- container.NewHBox(
- widget.NewLabel(fmt.Sprintf("myRoku - v%s", Version)),
- widget.NewButtonWithIcon("", theme.SettingsIcon(), func() {
- var w2 fyne.Window = a.NewWindow("myRoku Settings")
- w2.SetContent(container.NewVBox(
- settings.NewSettings().LoadAppearanceScreen(w2),
- widget.NewButton("Quit", func() {
- w2.Close()
- }),
- ))
- w2.CenterOnScreen()
- w2.Resize(fyne.NewSize(480, 480))
- w2.Show()
- }),
- ),
- container.NewHBox(
- widget.NewLabel(TvStatus),
- widget.NewButtonWithIcon("", theme.MediaReplayIcon(), func() {
- if UseWake {
- log.Println("Requested refresh of status")
- } else {
- log.Println("WOL disabled")
- }
- }),
- widget.NewButtonWithIcon("Connections", theme.ComputerIcon(), func() {
- var w2 fyne.Window = a.NewWindow("myRoku Connections")
- var ip_entry *widget.Entry = widget.NewEntry()
- ip_entry.SetText(TvIp)
- ip_entry.OnSubmitted = func(s string) {
- if TvIp != s { // It's the same thing!?!
- log.Printf("TvIp='%s' Now '%s'", TvIp, s)
- TvIp = s
- ip_entry.Refresh()
- }
- ip_entry.FocusLost() // Lose focus so the user can enter the next field
- }
- var mac_entry *widget.Entry = widget.NewEntry()
- mac_entry.SetText(TvMac)
- mac_entry.OnSubmitted = func(s string) {
- if TvMac != s { // It's the same thing!?!
- log.Printf("TvMac='%s' Now '%s'", TvMac, s)
- TvMac = s
- mac_entry.Refresh()
- }
- mac_entry.FocusLost() // Lose focus so the user can enter the next field
- }
- w2.SetContent(container.NewVBox(
- container.NewHBox(
- widget.NewLabel("Tv Ip Address"),
- widget.NewButtonWithIcon("", theme.HelpIcon(), func() {
- var u *url.URL
- var err error
- u, err = url.Parse("https://en.wikipedia.org/wiki/IP_address")
- if err != nil {
- log.Println("Failed sending the user to Wiki=IP_address", err)
- return
- }
- a.OpenURL(u)
- }),
- ),
- ip_entry,
- container.NewHBox(
- widget.NewLabel("Tv Mac Address"),
- widget.NewButtonWithIcon("", theme.HelpIcon(), func() {
- var u *url.URL
- var err error
- u, err = url.Parse("https://en.wikipedia.org/wiki/MAC_address")
- if err != nil {
- log.Println("Failed sending the user to Wiki=MAC_address", err)
- return
- }
- a.OpenURL(u)
- }),
- ),
- mac_entry,
- widget.NewButtonWithIcon("Back", theme.NavigateBackIcon(), func() {
- w2.Close()
- }),
- ))
- w2.CenterOnScreen()
- w2.Resize(fyne.NewSize(480, 480))
- w2.Show()
- }),
- ),
- widget.NewButton("Debug", func() {
- log.Printf("myRoku v%s wol=%t", Version, UseWake)
- log.Printf("TvStatus='%s' TvIp='%s' TvMac='%s'", TvStatus, TvIp, TvMac)
- log.Printf("driver=(mobile:%t, desktop:%t, browser:%t)", a.Driver().Device().IsMobile(), a.Driver().Device().HasKeyboard(), a.Driver().Device().IsBrowser())
- }),
- ))
- home.Show()
- a.Run()
- }
|