mirror of
https://github.com/house-of-abbey/GarminHomeAssistant.git
synced 2025-10-31 23:48:13 +00:00
89 lines
3.0 KiB
MonkeyC
89 lines
3.0 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
|
|
//
|
|
//------------------------------------------------------------
|
|
|
|
import Toybox.Graphics;
|
|
import Toybox.Lang;
|
|
import Toybox.WatchUi;
|
|
|
|
//! Factory that controls which numbers can be picked
|
|
class HomeAssistantNumericFactory extends WatchUi.PickerFactory {
|
|
// define default values in case not contained in data
|
|
private var mStart as Lang.Float = 0.0;
|
|
private var mStop as Lang.Float = 100.0;
|
|
private var mStep as Lang.Float = 1.0;
|
|
private var mFormatString as Lang.String = "%.2f";
|
|
|
|
//! Class Constructor
|
|
//!
|
|
public function initialize(data as Lang.Dictionary) {
|
|
PickerFactory.initialize();
|
|
|
|
// Get values from data
|
|
|
|
var val = data.get("start");
|
|
if (val != null) {
|
|
mStart = val.toString().toFloat();
|
|
}
|
|
val = data.get("stop");
|
|
if (val != null) {
|
|
mStop = val.toString().toFloat();
|
|
}
|
|
val = data.get("step");
|
|
if (val != null) {
|
|
mStep = val.toString().toFloat();
|
|
}
|
|
val = data.get("formatString");
|
|
if (val != null) {
|
|
mFormatString = val.toString();
|
|
}
|
|
|
|
}
|
|
|
|
//! Get the index of a number item
|
|
//! @param value The number to get the index of
|
|
//! @return The index of the number
|
|
public function getIndex(value as Float) as Number {
|
|
return ((value / mStep) - mStart).toNumber();
|
|
}
|
|
|
|
//! Generate a Drawable instance for an item
|
|
//! @param index The item index
|
|
//! @param selected true if the current item is selected, false otherwise
|
|
//! @return Drawable for the item
|
|
public function getDrawable(index as Number, selected as Boolean) as Drawable? {
|
|
var value = getValue(index);
|
|
var text = "No item";
|
|
if (value instanceof Float) {
|
|
text = value.format(mFormatString);
|
|
}
|
|
return new WatchUi.Text({:text=>text, :color=>Graphics.COLOR_WHITE,
|
|
:locX=>WatchUi.LAYOUT_HALIGN_CENTER, :locY=>WatchUi.LAYOUT_VALIGN_CENTER});
|
|
}
|
|
|
|
//! Get the value of the item at the given index
|
|
//! @param index Index of the item to get the value of
|
|
//! @return Value of the item
|
|
public function getValue(index as Number) as Object? {
|
|
return mStart + (index * mStep);
|
|
}
|
|
|
|
//! Get the number of picker items
|
|
//! @return Number of items
|
|
public function getSize() as Number {
|
|
return ((mStop - mStart) / mStep).toNumber() + 1;
|
|
}
|
|
|
|
}
|