Files
terminalface/source/terminalfaceView.mc
2022-07-11 20:41:12 +02:00

153 lines
4.3 KiB
MonkeyC

import Toybox.Graphics;
import Toybox.Lang;
import Toybox.System;
import Toybox.WatchUi;
import Toybox.Time.Gregorian;
using Toybox.ActivityMonitor;
class terminalfaceView extends WatchUi.WatchFace {
private var font as FontResource?;
private var curY as Number?;
private var lineSpace as Number?;
private var blinking as Boolean?;
private var lastBlink as Boolean?;
function initialize() {
WatchFace.initialize();
font = WatchUi.loadResource(Rez.Fonts.id_font_input) as FontResource;
lineSpace = 23;
blinking = false;
lastBlink = false;
}
// Load your resources here
function onLayout(dc as Dc) as Void {
setLayout(Rez.Layouts.WatchFace(dc));
}
// Called when this View is brought to the foreground. Restore
// the state of this View and prepare it to be shown. This includes
// loading resources into memory.
function onShow() as Void {
}
private function prompt(dc as Dc, cmd as String) as Void {
dc.setColor(Graphics.COLOR_GREEN, Graphics.COLOR_TRANSPARENT);
dc.drawText(25, curY, font, "si", Graphics.TEXT_JUSTIFY_LEFT);
dc.setColor(Graphics.COLOR_BLUE, Graphics.COLOR_TRANSPARENT);
dc.drawText(50, curY, font, "@", Graphics.TEXT_JUSTIFY_LEFT);
dc.setColor(Graphics.COLOR_RED, Graphics.COLOR_TRANSPARENT);
dc.drawText(63, curY, font, "fnx", Graphics.TEXT_JUSTIFY_LEFT);
dc.setColor(Graphics.COLOR_BLUE, Graphics.COLOR_TRANSPARENT);
dc.drawText(113, curY, font, "~>", Graphics.TEXT_JUSTIFY_LEFT);
dc.setColor(Graphics.COLOR_WHITE, Graphics.COLOR_TRANSPARENT);
dc.drawText(150, curY, font, Lang.format("$1$", [cmd]), Graphics.TEXT_JUSTIFY_LEFT);
curY += lineSpace;
}
private function response(dc as Dc, text as String) as Void {
dc.setColor(Graphics.COLOR_WHITE, Graphics.COLOR_TRANSPARENT);
dc.drawText(25, curY, font, text, Graphics.TEXT_JUSTIFY_LEFT);
curY += lineSpace;
}
private function makeBatteryString() {
var stats = System.getSystemStats();
var batteryLevel = stats.battery;
var batteryDays = stats.batteryInDays;
var bar = new [10];
for (var i = 0; i < 10; i += 1)
{
if (batteryLevel > i*10)
{
bar[i] = '#';
}
else
{
bar[i] = '-';
}
}
bar.add(batteryDays.toNumber());
return Lang.format("[$1$$2$$3$$4$$5$$6$$7$$8$$9$$10$] ($11$d)", bar);
}
// Update the view
function onUpdate(dc as Dc) as Void {
curY = 45;
dc.setColor(Graphics.COLOR_TRANSPARENT, Graphics.COLOR_BLACK);
dc.clear();
prompt(dc, "date");
var today = Gregorian.info(Time.now(), Time.FORMAT_MEDIUM);
var dateString = Lang.format("$1$ $2$ $3$ $4$:$5$",
[
today.day_of_week,
today.month,
today.day,
today.hour.format("%02d"),
today.min.format("%02d"),
]);
response(dc, dateString);
prompt(dc, "steps");
var info = ActivityMonitor.getInfo();
var steps = info.steps.toFloat();
var stepGoal = info.stepGoal.toFloat();
var ratio = (steps/stepGoal)*100;
response(dc, Lang.format("$1$/$2$ ($3$%)", [steps.toNumber(), stepGoal.toNumber(), ratio.toNumber()]));
prompt(dc, "battery");
var batteryString = makeBatteryString();
response(dc, batteryString);
if (blinking)
{
if (lastBlink)
{
prompt(dc, "");
lastBlink = false;
}
else
{
prompt(dc, "_");
lastBlink = true;
}
}
else
{
prompt(dc, "_");
}
}
// Called when this View is removed from the screen. Save the
// state of this View here. This includes freeing resources from
// memory.
function onHide() as Void {
}
// The user has just looked at their watch. Timers and animations may be started here.
function onExitSleep() as Void {
blinking = true;
}
// Terminate any active timers and prepare for slow updates.
function onEnterSleep() as Void {
blinking = false;
}
}