main.go 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // Package main provides various examples of Fyne API capabilities
  2. package main
  3. import (
  4. "fmt"
  5. "net/url"
  6. "fyne.io/fyne"
  7. "fyne.io/fyne/app"
  8. "fyne.io/fyne/canvas"
  9. "fyne.io/fyne/layout"
  10. "fyne.io/fyne/theme"
  11. "fyne.io/fyne/widget"
  12. "github.com/cnlh/nps/gui/fyne_demo/data"
  13. "github.com/cnlh/nps/gui/fyne_demo/screens"
  14. )
  15. const preferenceCurrentTab = "currentTab"
  16. func welcomeScreen(a fyne.App) fyne.CanvasObject {
  17. logo := canvas.NewImageFromResource(data.FyneScene)
  18. logo.SetMinSize(fyne.NewSize(228, 167))
  19. link, err := url.Parse("https://fyne.io/")
  20. if err != nil {
  21. fyne.LogError("Could not parse URL", err)
  22. }
  23. return widget.NewVBox(
  24. widget.NewLabelWithStyle("Welcome to the Fyne toolkit demo app", fyne.TextAlignCenter, fyne.TextStyle{Bold: true}),
  25. layout.NewSpacer(),
  26. widget.NewHBox(layout.NewSpacer(), logo, layout.NewSpacer()),
  27. widget.NewHyperlinkWithStyle("fyne.io", link, fyne.TextAlignCenter, fyne.TextStyle{}),
  28. layout.NewSpacer(),
  29. widget.NewGroup("Theme",
  30. fyne.NewContainerWithLayout(layout.NewGridLayout(2),
  31. widget.NewButton("Dark", func() {
  32. a.Settings().SetTheme(theme.DarkTheme())
  33. }),
  34. widget.NewButton("Light", func() {
  35. a.Settings().SetTheme(theme.LightTheme())
  36. }),
  37. ),
  38. ),
  39. )
  40. }
  41. func main() {
  42. a := app.NewWithID("io.fyne.demo")
  43. a.SetIcon(theme.FyneLogo())
  44. w := a.NewWindow("Fyne Demo")
  45. w.SetMainMenu(fyne.NewMainMenu(fyne.NewMenu("File",
  46. fyne.NewMenuItem("New", func() { fmt.Println("Menu New") }),
  47. // a quit item will be appended to our first menu
  48. ), fyne.NewMenu("Edit",
  49. fyne.NewMenuItem("Cut", func() { fmt.Println("Menu Cut") }),
  50. fyne.NewMenuItem("Copy", func() { fmt.Println("Menu Copy") }),
  51. fyne.NewMenuItem("Paste", func() { fmt.Println("Menu Paste") }),
  52. )))
  53. w.SetMaster()
  54. tabs := widget.NewTabContainer(
  55. widget.NewTabItemWithIcon("Welcome", theme.HomeIcon(), welcomeScreen(a)),
  56. widget.NewTabItemWithIcon("Widgets", theme.ContentCopyIcon(), screens.WidgetScreen()),
  57. widget.NewTabItemWithIcon("Graphics", theme.DocumentCreateIcon(), screens.GraphicsScreen()),
  58. widget.NewTabItemWithIcon("Windows", theme.ViewFullScreenIcon(), screens.DialogScreen(w)),
  59. widget.NewTabItemWithIcon("Advanced", theme.SettingsIcon(), screens.AdvancedScreen(w)))
  60. tabs.SetTabLocation(widget.TabLocationLeading)
  61. tabs.SelectTabIndex(a.Preferences().Int(preferenceCurrentTab))
  62. w.SetContent(tabs)
  63. w.ShowAndRun()
  64. a.Preferences().SetInt(preferenceCurrentTab, tabs.CurrentTabIndex())
  65. }