mirror of
https://github.com/house-of-abbey/GarminHomeAssistant.git
synced 2025-10-31 23:48:13 +00:00
103 lines
3.1 KiB
MonkeyC
103 lines
3.1 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 start = 0.0;
|
|
var val = data.get("start");
|
|
if (val != null) {
|
|
start = val.toString().toFloat();
|
|
}
|
|
var step = 1.0;
|
|
val = data.get("step");
|
|
if (val != null) {
|
|
step = val.toString().toFloat();
|
|
}
|
|
val = haItem.getSubLabel().toFloat();
|
|
var index = ((val -start) / 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);
|
|
WatchUi.popView(WatchUi.SLIDE_RIGHT);
|
|
return true;
|
|
}
|
|
}
|