forked from Elara6331/itd
		
	Add motion service to itgui
This commit is contained in:
		| @@ -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, | ||||||
|  | 	) | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user