Add motion service to itgui
This commit is contained in:
parent
2a07dd3d1c
commit
2b75e64daf
@ -30,6 +30,7 @@ func main() {
|
|||||||
// Create new app tabs container
|
// Create new app tabs container
|
||||||
tabs := container.NewAppTabs(
|
tabs := container.NewAppTabs(
|
||||||
container.NewTabItem("Info", infoTab(window, client)),
|
container.NewTabItem("Info", infoTab(window, client)),
|
||||||
|
container.NewTabItem("Motion", motionTab(window, client)),
|
||||||
container.NewTabItem("Notify", notifyTab(window, client)),
|
container.NewTabItem("Notify", notifyTab(window, client)),
|
||||||
container.NewTabItem("Set Time", timeTab(window, client)),
|
container.NewTabItem("Set Time", timeTab(window, client)),
|
||||||
container.NewTabItem("Upgrade", upgradeTab(window, client)),
|
container.NewTabItem("Upgrade", upgradeTab(window, client)),
|
||||||
|
105
cmd/itgui/motion.go
Normal file
105
cmd/itgui/motion.go
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"image/color"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"fyne.io/fyne/v2"
|
||||||
|
"fyne.io/fyne/v2/canvas"
|
||||||
|
"fyne.io/fyne/v2/container"
|
||||||
|
"fyne.io/fyne/v2/theme"
|
||||||
|
"fyne.io/fyne/v2/widget"
|
||||||
|
"go.arsenm.dev/itd/api"
|
||||||
|
)
|
||||||
|
|
||||||
|
func motionTab(parent fyne.Window, client *api.Client) *fyne.Container {
|
||||||
|
// Create label for heart rate
|
||||||
|
xCoordLbl := newText("0", 24)
|
||||||
|
// Creae container to store heart rate section
|
||||||
|
xCoordSect := container.NewVBox(
|
||||||
|
newText("X Coordinate", 12),
|
||||||
|
xCoordLbl,
|
||||||
|
canvas.NewLine(theme.ShadowColor()),
|
||||||
|
)
|
||||||
|
|
||||||
|
// Create label for heart rate
|
||||||
|
yCoordLbl := newText("0", 24)
|
||||||
|
// Creae container to store heart rate section
|
||||||
|
yCoordSect := container.NewVBox(
|
||||||
|
newText("Y Coordinate", 12),
|
||||||
|
yCoordLbl,
|
||||||
|
canvas.NewLine(theme.ShadowColor()),
|
||||||
|
)
|
||||||
|
// Create label for heart rate
|
||||||
|
zCoordLbl := newText("0", 24)
|
||||||
|
// Creae container to store heart rate section
|
||||||
|
zCoordSect := container.NewVBox(
|
||||||
|
newText("Z Coordinate", 12),
|
||||||
|
zCoordLbl,
|
||||||
|
canvas.NewLine(theme.ShadowColor()),
|
||||||
|
)
|
||||||
|
|
||||||
|
// Create variable to keep track of whether motion started
|
||||||
|
started := false
|
||||||
|
|
||||||
|
// Create button to stop motion
|
||||||
|
stopBtn := widget.NewButton("Stop", nil)
|
||||||
|
// Create button to start motion
|
||||||
|
startBtn := widget.NewButton("Start", func() {
|
||||||
|
// if motion is started
|
||||||
|
if started {
|
||||||
|
// Do nothing
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// Set motion started
|
||||||
|
started = true
|
||||||
|
// Watch motion values
|
||||||
|
motionCh, cancel, err := client.WatchMotion()
|
||||||
|
if err != nil {
|
||||||
|
guiErr(err, "Error getting heart rate channel", true, parent)
|
||||||
|
}
|
||||||
|
// Create done channel
|
||||||
|
done := make(chan struct{}, 1)
|
||||||
|
go func() {
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-done:
|
||||||
|
return
|
||||||
|
case motion := <-motionCh:
|
||||||
|
// Set labels to new values
|
||||||
|
xCoordLbl.Text = strconv.Itoa(int(motion.X))
|
||||||
|
yCoordLbl.Text = strconv.Itoa(int(motion.Y))
|
||||||
|
zCoordLbl.Text = strconv.Itoa(int(motion.Z))
|
||||||
|
// Refresh labels to display new values
|
||||||
|
xCoordLbl.Refresh()
|
||||||
|
yCoordLbl.Refresh()
|
||||||
|
zCoordLbl.Refresh()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
// Create stop function
|
||||||
|
stopBtn.OnTapped = func() {
|
||||||
|
done <- struct{}{}
|
||||||
|
started = false
|
||||||
|
cancel()
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
// Run stop button function on close if possible
|
||||||
|
onClose = append(onClose, func() {
|
||||||
|
if stopBtn.OnTapped != nil {
|
||||||
|
stopBtn.OnTapped()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// Return new container containing all elements
|
||||||
|
return container.NewVBox(
|
||||||
|
// Add rectangle for a bit of padding
|
||||||
|
canvas.NewRectangle(color.Transparent),
|
||||||
|
startBtn,
|
||||||
|
stopBtn,
|
||||||
|
xCoordSect,
|
||||||
|
yCoordSect,
|
||||||
|
zCoordSect,
|
||||||
|
)
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user