forked from Elara6331/itd
63 lines
1.4 KiB
Go
63 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/container"
|
|
"fyne.io/fyne/v2/widget"
|
|
"go.elara.ws/itd/api"
|
|
)
|
|
|
|
func motionTab(ctx context.Context, client *api.Client, w fyne.Window) fyne.CanvasObject {
|
|
// Create titledText for each coordinate
|
|
xText := newTitledText("X Coordinate", "0")
|
|
yText := newTitledText("Y Coordinate", "0")
|
|
zText := newTitledText("Z Coordinate", "0")
|
|
|
|
var ctxCancel func()
|
|
|
|
// Create start button
|
|
toggleBtn := widget.NewButton("Start", nil)
|
|
// Set button's on tapped callback
|
|
toggleBtn.OnTapped = func() {
|
|
switch toggleBtn.Text {
|
|
case "Start":
|
|
// Create new context for motion
|
|
motionCtx, cancel := context.WithCancel(ctx)
|
|
// Set ctxCancel to function so that stop button can run it
|
|
ctxCancel = cancel
|
|
// Watch motion
|
|
motionCh, err := client.WatchMotion(motionCtx)
|
|
if err != nil {
|
|
guiErr(err, "Error watching motion", false, w)
|
|
return
|
|
}
|
|
go func() {
|
|
// For every motion event
|
|
for motion := range motionCh {
|
|
// Set coordinates
|
|
xText.SetBody(fmt.Sprint(motion.X))
|
|
yText.SetBody(fmt.Sprint(motion.Y))
|
|
zText.SetBody(fmt.Sprint(motion.Z))
|
|
}
|
|
}()
|
|
// Set button text to "Stop"
|
|
toggleBtn.SetText("Stop")
|
|
case "Stop":
|
|
// Cancel motion context
|
|
ctxCancel()
|
|
// Set button text to "Start"
|
|
toggleBtn.SetText("Start")
|
|
}
|
|
}
|
|
|
|
return container.NewVScroll(container.NewVBox(
|
|
toggleBtn,
|
|
xText,
|
|
yText,
|
|
zText,
|
|
))
|
|
}
|