Added an example that shows how to update the UI
This commit is contained in:
parent
867a9e5a49
commit
f9ad173d6a
|
@ -0,0 +1,119 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/andlabs/ui"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Example showing how to update the UI using the QueueMain function
|
||||||
|
// especially if the update is coming from another goroutine
|
||||||
|
//
|
||||||
|
// see QueueMain in 'main.go' for detailed description
|
||||||
|
|
||||||
|
var countLabel *ui.Label
|
||||||
|
var count int
|
||||||
|
|
||||||
|
func setupUI() {
|
||||||
|
mainWindow := ui.NewWindow("libui Updating UI", 640, 480, true)
|
||||||
|
mainWindow.OnClosing(func(*ui.Window) bool {
|
||||||
|
ui.Quit()
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
ui.OnShouldQuit(func() bool {
|
||||||
|
mainWindow.Destroy()
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
|
||||||
|
vbContainer := ui.NewVerticalBox()
|
||||||
|
vbContainer.SetPadded(true)
|
||||||
|
|
||||||
|
inputGroup := ui.NewGroup("Input")
|
||||||
|
inputGroup.SetMargined(true)
|
||||||
|
|
||||||
|
vbInput := ui.NewVerticalBox()
|
||||||
|
vbInput.SetPadded(true)
|
||||||
|
|
||||||
|
inputForm := ui.NewForm()
|
||||||
|
inputForm.SetPadded(true)
|
||||||
|
|
||||||
|
message := ui.NewEntry()
|
||||||
|
message.SetText("Hello World")
|
||||||
|
inputForm.Append("What message do you want to show?", message, false)
|
||||||
|
|
||||||
|
showMessageButton := ui.NewButton("Show message")
|
||||||
|
clearMessageButton := ui.NewButton("Clear message")
|
||||||
|
|
||||||
|
vbInput.Append(inputForm, false)
|
||||||
|
vbInput.Append(showMessageButton, false)
|
||||||
|
vbInput.Append(clearMessageButton, false)
|
||||||
|
|
||||||
|
inputGroup.SetChild(vbInput)
|
||||||
|
|
||||||
|
messageGroup := ui.NewGroup("Message")
|
||||||
|
messageGroup.SetMargined(true)
|
||||||
|
|
||||||
|
vbMessage := ui.NewVerticalBox()
|
||||||
|
vbMessage.SetPadded(true)
|
||||||
|
|
||||||
|
messageLabel := ui.NewLabel("")
|
||||||
|
|
||||||
|
vbMessage.Append(messageLabel, false)
|
||||||
|
|
||||||
|
messageGroup.SetChild(vbMessage)
|
||||||
|
|
||||||
|
countGroup := ui.NewGroup("Counter")
|
||||||
|
countGroup.SetMargined(true)
|
||||||
|
|
||||||
|
vbCounter := ui.NewVerticalBox()
|
||||||
|
vbCounter.SetPadded(true)
|
||||||
|
|
||||||
|
countLabel = ui.NewLabel(fmt.Sprintf("%d", count))
|
||||||
|
|
||||||
|
vbCounter.Append(countLabel, false)
|
||||||
|
countGroup.SetChild(vbCounter)
|
||||||
|
|
||||||
|
vbContainer.Append(inputGroup, false)
|
||||||
|
vbContainer.Append(messageGroup, false)
|
||||||
|
vbContainer.Append(countGroup, false)
|
||||||
|
|
||||||
|
mainWindow.SetChild(vbContainer)
|
||||||
|
|
||||||
|
showMessageButton.OnClicked(func(*ui.Button) {
|
||||||
|
// Update the UI using the QueueMain function
|
||||||
|
ui.QueueMain(func() {
|
||||||
|
messageLabel.SetText(message.Text())
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
clearMessageButton.OnClicked(func(*ui.Button) {
|
||||||
|
// Update the UI using the QueueMain function
|
||||||
|
ui.QueueMain(func() {
|
||||||
|
messageLabel.SetText("")
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
mainWindow.Show()
|
||||||
|
}
|
||||||
|
|
||||||
|
func counter() {
|
||||||
|
for {
|
||||||
|
time.Sleep(1 * time.Second)
|
||||||
|
count++
|
||||||
|
|
||||||
|
// Update the UI using the QueueMain function
|
||||||
|
ui.QueueMain(func() {
|
||||||
|
countLabel.SetText(fmt.Sprintf("%d", count))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
count = 0
|
||||||
|
|
||||||
|
// Counting and updating the UI from another goroutine
|
||||||
|
go counter()
|
||||||
|
|
||||||
|
ui.Main(setupUI)
|
||||||
|
}
|
Loading…
Reference in New Issue