nps/gui/fyne_demo/screens/widget.go
2019-12-16 10:43:46 +08:00

158 lines
4.3 KiB
Go

package screens
import (
"fmt"
"time"
"fyne.io/fyne"
"fyne.io/fyne/canvas"
"fyne.io/fyne/layout"
"fyne.io/fyne/theme"
"fyne.io/fyne/widget"
)
func makeButtonTab() fyne.Widget {
disabled := widget.NewButton("Disabled", func() {})
disabled.Disable()
return widget.NewVBox(
widget.NewLabel("Text label"),
widget.NewButton("Text button", func() { fmt.Println("tapped text button") }),
widget.NewButtonWithIcon("With icon", theme.ConfirmIcon(), func() { fmt.Println("tapped icon button") }),
disabled,
)
}
func makeInputTab() fyne.Widget {
entry := widget.NewEntry()
entry.SetPlaceHolder("Entry")
entryReadOnly := widget.NewEntry()
entryReadOnly.SetText("Entry (disabled)")
entryReadOnly.Disable()
disabledCheck := widget.NewCheck("Disabled check", func(bool) {})
disabledCheck.Disable()
radio := widget.NewRadio([]string{"Radio Item 1", "Radio Item 2"}, func(s string) { fmt.Println("selected", s) })
radio.Horizontal = true
disabledRadio := widget.NewRadio([]string{"Disabled radio"}, func(string) {})
disabledRadio.Disable()
return widget.NewVBox(
entry,
entryReadOnly,
widget.NewSelect([]string{"Option 1", "Option 2", "Option 3"}, func(s string) { fmt.Println("selected", s) }),
widget.NewCheck("Check", func(on bool) { fmt.Println("checked", on) }),
disabledCheck,
radio,
disabledRadio,
widget.NewSlider(0, 100),
)
}
func makeProgressTab() fyne.Widget {
progress := widget.NewProgressBar()
infProgress := widget.NewProgressBarInfinite()
go func() {
num := 0.0
for num < 1.0 {
time.Sleep(100 * time.Millisecond)
progress.SetValue(num)
num += 0.01
}
progress.SetValue(1)
}()
return widget.NewVBox(
widget.NewLabel("Percent"), progress,
widget.NewLabel("Infinite"), infProgress)
}
func makeFormTab() fyne.Widget {
name := widget.NewEntry()
name.SetPlaceHolder("John Smith")
email := widget.NewEntry()
email.SetPlaceHolder("test@example.com")
password := widget.NewPasswordEntry()
password.SetPlaceHolder("Password")
largeText := widget.NewMultiLineEntry()
form := &widget.Form{
OnCancel: func() {
fmt.Println("Cancelled")
},
OnSubmit: func() {
fmt.Println("Form submitted")
fmt.Println("Name:", name.Text)
fmt.Println("Email:", email.Text)
fmt.Println("Password:", password.Text)
fmt.Println("Message:", largeText.Text)
},
}
form.Append("Name", name)
form.Append("Email", email)
form.Append("Password", password)
form.Append("Message", largeText)
return form
}
func makeScrollTab() fyne.CanvasObject {
logo := canvas.NewImageFromResource(theme.FyneLogo())
logo.SetMinSize(fyne.NewSize(320, 320))
list := widget.NewHBox()
list2 := widget.NewVBox()
for i := 1; i <= 20; i++ {
index := i // capture
list.Append(widget.NewButton(fmt.Sprintf("Button %d", index), func() {
fmt.Println("Tapped", index)
}))
list2.Append(widget.NewButton(fmt.Sprintf("Button %d", index), func() {
fmt.Println("Tapped", index)
}))
}
scroll := widget.NewScrollContainer(list)
scroll.Resize(fyne.NewSize(200, 300))
scroll2 := widget.NewScrollContainer(list2)
scroll2.Resize(fyne.NewSize(200, 100))
return fyne.NewContainerWithLayout(layout.NewGridLayout(1), scroll, scroll2)
}
func makeScrollBothTab() fyne.CanvasObject {
logo := canvas.NewImageFromResource(theme.FyneLogo())
logo.SetMinSize(fyne.NewSize(800, 800))
scroll := widget.NewScrollContainer(logo)
scroll.Resize(fyne.NewSize(400, 400))
return scroll
}
// WidgetScreen shows a panel containing widget demos
func WidgetScreen() fyne.CanvasObject {
toolbar := widget.NewToolbar(widget.NewToolbarAction(theme.MailComposeIcon(), func() { fmt.Println("New") }),
widget.NewToolbarSeparator(),
widget.NewToolbarSpacer(),
widget.NewToolbarAction(theme.ContentCutIcon(), func() { fmt.Println("Cut") }),
widget.NewToolbarAction(theme.ContentCopyIcon(), func() { fmt.Println("Copy") }),
widget.NewToolbarAction(theme.ContentPasteIcon(), func() { fmt.Println("Paste") }),
)
return fyne.NewContainerWithLayout(layout.NewBorderLayout(toolbar, nil, nil, nil),
toolbar,
widget.NewTabContainer(
widget.NewTabItem("Buttons", makeButtonTab()),
widget.NewTabItem("Input", makeInputTab()),
widget.NewTabItem("Progress", makeProgressTab()),
widget.NewTabItem("Form", makeFormTab()),
widget.NewTabItem("Scroll", makeScrollTab()),
widget.NewTabItem("Full Scroll", makeScrollBothTab()),
),
)
}