mirror of
				https://github.com/house-of-abbey/GarminHomeAssistant.git
				synced 2025-10-31 07:48:13 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			108 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			MonkeyC
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			MonkeyC
		
	
	
	
	
	
| //-----------------------------------------------------------------------------------
 | |
| //
 | |
| // Distributed under MIT Licence
 | |
| //   See https://github.com/house-of-abbey/GarminHomeAssistant/blob/main/LICENSE.
 | |
| //
 | |
| //-----------------------------------------------------------------------------------
 | |
| //
 | |
| // GarminHomeAssistant is a Garmin IQ application written in Monkey C and routinely
 | |
| // tested on a Venu 2 device. The source code is provided at:
 | |
| //            https://github.com/house-of-abbey/GarminHomeAssistant.
 | |
| //
 | |
| // P A Abbey & J D Abbey & Someone0nEarth, 31 October 2023
 | |
| //
 | |
| //------------------------------------------------------------
 | |
| 
 | |
| using Toybox.Application;
 | |
| using Toybox.Lang;
 | |
| using Toybox.Graphics;
 | |
| using Toybox.System;
 | |
| using Toybox.WatchUi;
 | |
| 
 | |
| //! Picker that allows the user to choose a float value
 | |
| class HomeAssistantNumericPicker extends WatchUi.Picker {
 | |
| 
 | |
|     private var mFactory as HomeAssistantNumericFactory;
 | |
|     private var mItem as HomeAssistantNumericMenuItem;
 | |
| 
 | |
|     //! Constructor
 | |
|     public function initialize(factory as HomeAssistantNumericFactory, haItem as HomeAssistantNumericMenuItem) {
 | |
| 
 | |
|         mFactory = factory;
 | |
| 
 | |
| 
 | |
|         var pickerOptions = {:pattern=>[mFactory]};
 | |
|         mItem=haItem;
 | |
| 
 | |
| 
 | |
|         var data = mItem.getData();
 | |
| 
 | |
|         var min = 0.0;
 | |
|         var val = data.get("min");
 | |
|         if (val != null) {
 | |
|             min = val.toString().toFloat();
 | |
|         } 
 | |
|         var step = 1.0;
 | |
|         val = data.get("step");
 | |
|         if (val != null) {
 | |
|             step = val.toString().toFloat();
 | |
|         } 
 | |
|         val = haItem.getValue();
 | |
|         if (val != null) {
 | |
|             val = val.toString().toFloat();
 | |
|         } else {
 | |
|             // catch missing state to avoid crash
 | |
|             val = min;
 | |
|         }
 | |
|         var index = ((val -min) / step).toNumber();
 | |
| 
 | |
|         pickerOptions[:defaults]  =[index];
 | |
| 
 | |
|         var title = new WatchUi.Text({:text=>haItem.getLabel(), :locX=>WatchUi.LAYOUT_HALIGN_CENTER,
 | |
|                 :locY=>WatchUi.LAYOUT_VALIGN_BOTTOM});
 | |
|         pickerOptions[:title] = title;
 | |
| 
 | |
| 
 | |
|         Picker.initialize(pickerOptions);
 | |
| 
 | |
|     }
 | |
| 
 | |
| 
 | |
|     //! Get whether the user is done picking
 | |
|     //! @param value Value user selected
 | |
|     //! @return true if user is done, false otherwise
 | |
|     public function onConfirm(value as Lang.String) as Void {
 | |
|         mItem.setValue(value);
 | |
|         mItem.callService();
 | |
|     }
 | |
| 
 | |
|     
 | |
| }
 | |
| 
 | |
| //! Responds to a numeric  picker selection or cancellation
 | |
| class HomeAssistantNumericPickerDelegate extends WatchUi.PickerDelegate {
 | |
|     private var mPicker as HomeAssistantNumericPicker;
 | |
| 
 | |
|     //! Constructor
 | |
|     public function initialize(picker as HomeAssistantNumericPicker) {
 | |
|         PickerDelegate.initialize();
 | |
|         mPicker = picker;
 | |
|     }
 | |
| 
 | |
|     //! Handle a cancel event from the picker
 | |
|     //! @return true if handled, false otherwise
 | |
|     public function onCancel() as Lang.Boolean {
 | |
|         WatchUi.popView(WatchUi.SLIDE_RIGHT);
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     //! Handle a confirm event from the picker
 | |
|     //! @param values The values chosen in the picker
 | |
|     //! @return true if handled, false otherwise
 | |
|     public function onAccept(values as Lang.Array) as Lang.Boolean {
 | |
|         var chosenValue = values[0].toString();
 | |
|         mPicker.onConfirm(chosenValue);
 | |
|         return true;
 | |
|     }
 | |
| }
 |