widget.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. package screens
  2. import (
  3. "fmt"
  4. "time"
  5. "fyne.io/fyne"
  6. "fyne.io/fyne/canvas"
  7. "fyne.io/fyne/layout"
  8. "fyne.io/fyne/theme"
  9. "fyne.io/fyne/widget"
  10. )
  11. func makeButtonTab() fyne.Widget {
  12. disabled := widget.NewButton("Disabled", func() {})
  13. disabled.Disable()
  14. return widget.NewVBox(
  15. widget.NewLabel("Text label"),
  16. widget.NewButton("Text button", func() { fmt.Println("tapped text button") }),
  17. widget.NewButtonWithIcon("With icon", theme.ConfirmIcon(), func() { fmt.Println("tapped icon button") }),
  18. disabled,
  19. )
  20. }
  21. func makeInputTab() fyne.Widget {
  22. entry := widget.NewEntry()
  23. entry.SetPlaceHolder("Entry")
  24. entryReadOnly := widget.NewEntry()
  25. entryReadOnly.SetText("Entry (disabled)")
  26. entryReadOnly.Disable()
  27. disabledCheck := widget.NewCheck("Disabled check", func(bool) {})
  28. disabledCheck.Disable()
  29. radio := widget.NewRadio([]string{"Radio Item 1", "Radio Item 2"}, func(s string) { fmt.Println("selected", s) })
  30. radio.Horizontal = true
  31. disabledRadio := widget.NewRadio([]string{"Disabled radio"}, func(string) {})
  32. disabledRadio.Disable()
  33. return widget.NewVBox(
  34. entry,
  35. entryReadOnly,
  36. widget.NewSelect([]string{"Option 1", "Option 2", "Option 3"}, func(s string) { fmt.Println("selected", s) }),
  37. widget.NewCheck("Check", func(on bool) { fmt.Println("checked", on) }),
  38. disabledCheck,
  39. radio,
  40. disabledRadio,
  41. widget.NewSlider(0, 100),
  42. )
  43. }
  44. func makeProgressTab() fyne.Widget {
  45. progress := widget.NewProgressBar()
  46. infProgress := widget.NewProgressBarInfinite()
  47. go func() {
  48. num := 0.0
  49. for num < 1.0 {
  50. time.Sleep(100 * time.Millisecond)
  51. progress.SetValue(num)
  52. num += 0.01
  53. }
  54. progress.SetValue(1)
  55. }()
  56. return widget.NewVBox(
  57. widget.NewLabel("Percent"), progress,
  58. widget.NewLabel("Infinite"), infProgress)
  59. }
  60. func makeFormTab() fyne.Widget {
  61. name := widget.NewEntry()
  62. name.SetPlaceHolder("John Smith")
  63. email := widget.NewEntry()
  64. email.SetPlaceHolder("test@example.com")
  65. password := widget.NewPasswordEntry()
  66. password.SetPlaceHolder("Password")
  67. largeText := widget.NewMultiLineEntry()
  68. form := &widget.Form{
  69. OnCancel: func() {
  70. fmt.Println("Cancelled")
  71. },
  72. OnSubmit: func() {
  73. fmt.Println("Form submitted")
  74. fmt.Println("Name:", name.Text)
  75. fmt.Println("Email:", email.Text)
  76. fmt.Println("Password:", password.Text)
  77. fmt.Println("Message:", largeText.Text)
  78. },
  79. }
  80. form.Append("Name", name)
  81. form.Append("Email", email)
  82. form.Append("Password", password)
  83. form.Append("Message", largeText)
  84. return form
  85. }
  86. func makeScrollTab() fyne.CanvasObject {
  87. logo := canvas.NewImageFromResource(theme.FyneLogo())
  88. logo.SetMinSize(fyne.NewSize(320, 320))
  89. list := widget.NewHBox()
  90. list2 := widget.NewVBox()
  91. for i := 1; i <= 20; i++ {
  92. index := i // capture
  93. list.Append(widget.NewButton(fmt.Sprintf("Button %d", index), func() {
  94. fmt.Println("Tapped", index)
  95. }))
  96. list2.Append(widget.NewButton(fmt.Sprintf("Button %d", index), func() {
  97. fmt.Println("Tapped", index)
  98. }))
  99. }
  100. scroll := widget.NewScrollContainer(list)
  101. scroll.Resize(fyne.NewSize(200, 300))
  102. scroll2 := widget.NewScrollContainer(list2)
  103. scroll2.Resize(fyne.NewSize(200, 100))
  104. return fyne.NewContainerWithLayout(layout.NewGridLayout(1), scroll, scroll2)
  105. }
  106. func makeScrollBothTab() fyne.CanvasObject {
  107. logo := canvas.NewImageFromResource(theme.FyneLogo())
  108. logo.SetMinSize(fyne.NewSize(800, 800))
  109. scroll := widget.NewScrollContainer(logo)
  110. scroll.Resize(fyne.NewSize(400, 400))
  111. return scroll
  112. }
  113. // WidgetScreen shows a panel containing widget demos
  114. func WidgetScreen() fyne.CanvasObject {
  115. toolbar := widget.NewToolbar(widget.NewToolbarAction(theme.MailComposeIcon(), func() { fmt.Println("New") }),
  116. widget.NewToolbarSeparator(),
  117. widget.NewToolbarSpacer(),
  118. widget.NewToolbarAction(theme.ContentCutIcon(), func() { fmt.Println("Cut") }),
  119. widget.NewToolbarAction(theme.ContentCopyIcon(), func() { fmt.Println("Copy") }),
  120. widget.NewToolbarAction(theme.ContentPasteIcon(), func() { fmt.Println("Paste") }),
  121. )
  122. return fyne.NewContainerWithLayout(layout.NewBorderLayout(toolbar, nil, nil, nil),
  123. toolbar,
  124. widget.NewTabContainer(
  125. widget.NewTabItem("Buttons", makeButtonTab()),
  126. widget.NewTabItem("Input", makeInputTab()),
  127. widget.NewTabItem("Progress", makeProgressTab()),
  128. widget.NewTabItem("Form", makeFormTab()),
  129. widget.NewTabItem("Scroll", makeScrollTab()),
  130. widget.NewTabItem("Full Scroll", makeScrollBothTab()),
  131. ),
  132. )
  133. }