diff --git a/bin/SnapshotWatch-settings.json b/bin/SnapshotWatch-settings.json
index 653123f..c74c2ba 100644
--- a/bin/SnapshotWatch-settings.json
+++ b/bin/SnapshotWatch-settings.json
@@ -1 +1 @@
-{"settings":[{"key":"code","valueType":"string","defaultValue":"get code at app store page","configTitle":"CodeLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"alphaNumeric","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"showHeartRate","valueType":"boolean","defaultValue":true,"configTitle":"ShowHeartRateLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"graphColour","valueType":"number","defaultValue":0,"configTitle":"GraphColourLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"list","configReadonly":false,"configRequired":true,"configOptions":[{"display":"DK_GRAY","value":0},{"display":"RED","value":1},{"display":"DK_RED","value":2},{"display":"ORANGE","value":3},{"display":"YELLOW","value":4},{"display":"GREEN","value":5},{"display":"DK_GREEN","value":6},{"display":"BLUE","value":7},{"display":"DK_BLUE","value":8},{"display":"PURPLE","value":9},{"display":"PINK","value":10}],"configMin":null,"configMax":null,"configMaxLength":null},{"key":"useZonesColour","valueType":"boolean","defaultValue":true,"configTitle":"UseZonesColourLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"showMoveBar","valueType":"boolean","defaultValue":false,"configTitle":"ShowMoveBarLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"showSteps","valueType":"boolean","defaultValue":false,"configTitle":"ShowStepsLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"showRiseSet","valueType":"boolean","defaultValue":false,"configTitle":"ShowRiseSetLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"showSecondTime","valueType":"boolean","defaultValue":false,"configTitle":"ShowSecondTimeLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"secondTimeOffset","valueType":"number","defaultValue":0,"configTitle":"SecondTimeOffsetLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"numeric","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null}],"languages":{"valyrian":{"UseZonesColourLabel":"Additionally colour code graph by profile heart rate zones","ShowRiseSetLabel":"[PRO] Show sunrise/sunset","DK_GRAY":"Dark Gray","DK_GREEN":"Dark Green","BLUE":"Blue","SecondTimeOffsetLabel":"[PRO] Second (digital) time hour offset (integer, +-24)","PURPLE":"Purple","GREEN":"Green","ShowMoveBarLabel":"Colour graph red when move bar alert is on (or orange if red set above)","DK_RED":"Dark Red","DK_BLUE":"Dark Blue","AppName":"SnapshotWatch","RED":"Red","PINK":"Pink","CodeLabel":"Activation code for PRO features","ShowHeartRateLabel":"Show heart rate, graph, and min/max values","GraphColourLabel":"Heart rate graph colour","ShowSecondTimeLabel":"[PRO] Show second (digital) time","YELLOW":"Yellow","ORANGE":"Orange","ShowStepsLabel":"[PRO] Show steps/step goal"}}}
\ No newline at end of file
+{"settings":[{"key":"code","valueType":"string","defaultValue":"get code at app store page","configTitle":"CodeLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"alphaNumeric","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"showHeartRate","valueType":"boolean","defaultValue":true,"configTitle":"ShowHeartRateLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"graphLength","valueType":"number","defaultValue":240,"configTitle":"GraphLengthLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"numeric","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"graphColour","valueType":"number","defaultValue":0,"configTitle":"GraphColourLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"list","configReadonly":false,"configRequired":true,"configOptions":[{"display":"DK_GRAY","value":0},{"display":"RED","value":1},{"display":"DK_RED","value":2},{"display":"ORANGE","value":3},{"display":"YELLOW","value":4},{"display":"GREEN","value":5},{"display":"DK_GREEN","value":6},{"display":"BLUE","value":7},{"display":"DK_BLUE","value":8},{"display":"PURPLE","value":9},{"display":"PINK","value":10}],"configMin":null,"configMax":null,"configMaxLength":null},{"key":"useZonesColour","valueType":"boolean","defaultValue":true,"configTitle":"UseZonesColourLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"showMoveBar","valueType":"boolean","defaultValue":false,"configTitle":"ShowMoveBarLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"showSteps","valueType":"boolean","defaultValue":false,"configTitle":"ShowStepsLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"showRiseSet","valueType":"boolean","defaultValue":false,"configTitle":"ShowRiseSetLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"showSecondTime","valueType":"boolean","defaultValue":false,"configTitle":"ShowSecondTimeLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"secondTimeOffset","valueType":"number","defaultValue":0,"configTitle":"SecondTimeOffsetLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"numeric","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null}],"languages":{"valyrian":{"UseZonesColourLabel":"Additionally colour code graph by profile heart rate zones","ShowRiseSetLabel":"[PRO] Show sunrise/sunset","DK_GRAY":"Dark Gray","DK_GREEN":"Dark Green","BLUE":"Blue","SecondTimeOffsetLabel":"[PRO] Second (digital) time hour offset (integer, +-24)","PURPLE":"Purple","GREEN":"Green","ShowMoveBarLabel":"Colour graph red when move bar alert is on (or orange if red set above)","DK_RED":"Dark Red","DK_BLUE":"Dark Blue","AppName":"SnapshotWatch","RED":"Red","PINK":"Pink","CodeLabel":"Activation code for PRO features","ShowHeartRateLabel":"Show heart rate, graph, and min/max values","GraphLengthLabel":"Number of past minutes to show in heart rate graph (minimum 15, maximum 240)","GraphColourLabel":"Heart rate graph colour","ShowSecondTimeLabel":"[PRO] Show second (digital) time","YELLOW":"Yellow","ORANGE":"Orange","ShowStepsLabel":"[PRO] Show steps/step goal"}}}
\ No newline at end of file
diff --git a/bin/SnapshotWatch.prg b/bin/SnapshotWatch.prg
index 55099ee..0391353 100644
Binary files a/bin/SnapshotWatch.prg and b/bin/SnapshotWatch.prg differ
diff --git a/bin/SnapshotWatch.prg.debug.xml b/bin/SnapshotWatch.prg.debug.xml
index f8f7fcd..b30c06f 100644
--- a/bin/SnapshotWatch.prg.debug.xml
+++ b/bin/SnapshotWatch.prg.debug.xml
@@ -35,410 +35,421 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
+
-
+
+
-
+
-
+
-
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
-
+
-
+
-
-
+
+
-
-
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
-
+
-
+
-
+
-
-
+
+
-
+
-
-
-
+
+
+
-
+
-
+
-
+
-
-
-
-
-
+
+
+
+
+
@@ -455,99 +466,101 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -671,8 +684,8 @@
-
-
-
+
+
+
diff --git a/resources/resources.xml b/resources/resources.xml
index f82312d..714493b 100644
--- a/resources/resources.xml
+++ b/resources/resources.xml
@@ -3,6 +3,7 @@
get code at app store page
true
+ 240
0
true
false
@@ -15,6 +16,7 @@
Activation code for PRO features
Show heart rate, graph, and min/max values
+ Number of past minutes to show in heart rate graph (minimum 15, maximum 240)
Heart rate graph colour
Dark Gray
Red
@@ -42,6 +44,9 @@
+
+
+
@Strings.DK_GRAY
diff --git a/source/SnapshotWatchView.mc b/source/SnapshotWatchView.mc
index 8f319b8..e2da70b 100644
--- a/source/SnapshotWatchView.mc
+++ b/source/SnapshotWatchView.mc
@@ -27,6 +27,7 @@ class SnapshotWatchView extends Ui.WatchFace {
var showSecondTime = false;
var secondTimeOffset = 0;
+ var graphLength = 240;
var arrayColours = new [11];
var graphColour = 0;
var useZonesColour = true;
@@ -41,8 +42,8 @@ class SnapshotWatchView extends Ui.WatchFace {
var hashMarksArray = new [60];
var heartNow;
- var heartMin;
- var heartMax;
+ var heartMin = 1000;
+ var heartMax = 0;
var proFeatures;
@@ -88,6 +89,7 @@ class SnapshotWatchView extends Ui.WatchFace {
{
code = Application.getApp().getProperty("code");
showHeartRate = Application.getApp().getProperty("showHeartRate");
+ graphLength = Application.getApp().getProperty("graphLength");
graphColour = Application.getApp().getProperty("graphColour");
useZonesColour = Application.getApp().getProperty("useZonesColour");
showMoveBar = Application.getApp().getProperty("showMoveBar");
@@ -118,14 +120,12 @@ class SnapshotWatchView extends Ui.WatchFace {
secondTimeOffset = 0;
}
}
-
+
// Clear screen
dc.setColor(background_color, Gfx.COLOR_WHITE);
dc.fillRectangle(0,0, width_screen, height_screen);
heartNow = 0;
- heartMin = 0;
- heartMax = 0;
// Plot heart rate graph
plotHRgraph(dc);
@@ -222,6 +222,9 @@ class SnapshotWatchView extends Ui.WatchFace {
function plotHRgraph(dc) {
+ var curHeartMin = 0;
+ var curHeartMax = 0;
+
var sample = Sensor.getHeartRateHistory( {:order=>Sensor.ORDER_NEWEST_FIRST} );
if (sample != null)
{
@@ -231,13 +234,17 @@ class SnapshotWatchView extends Ui.WatchFace {
if (showHeartRate)
{
- if (sample.getMin() != null)
- { heartMin = sample.getMin(); }
-
- if (sample.getMax() != null)
- { heartMax = sample.getMax(); }
-
- var maxSecs = 14355; //14400 = 4 hours
+ curHeartMin = heartMin;
+ curHeartMax = heartMax;
+ heartMin = 1000;
+ heartMax = 0;
+
+ var maxSecs = graphLength * 60;
+ if (maxSecs < 900)
+ { maxSecs = 900; } // 900sec = 15min
+ else if (maxSecs > 14355)
+ { maxSecs = 14355; } // 14400sec = 4hrs
+
var totHeight = 44;
var totWidth = 165;
var binPixels = 1;
@@ -312,23 +319,31 @@ class SnapshotWatchView extends Ui.WatchFace {
// only plot bar if we have valid values
if (heartBinMax > 0 && heartBinMax >= heartBinMin)
{
- var heartBinMid = (heartBinMax+heartBinMin)/2;
- var height = (heartBinMid-heartMin*0.9) / (heartMax-heartMin*0.9) * totHeight;
- var xVal = (width_screen-totWidth)/2 + totWidth - i*binPixels -2;
- var yVal = height_screen/2+28 + totHeight - height;
-
- if (showMoveBar && ActMon.getInfo().moveBarLevel > 0)
- {
- if (graphColour == 1)
- { dc.setColor(Gfx.COLOR_ORANGE, Gfx.COLOR_TRANSPARENT); }
- else
- { dc.setColor(Gfx.COLOR_RED, Gfx.COLOR_TRANSPARENT); }
- } else
+ if (curHeartMax > 0 && curHeartMax > curHeartMin)
{
- dc.setColor(arrayColours[getHRColour(heartBinMid)], Gfx.COLOR_TRANSPARENT);
+ var heartBinMid = (heartBinMax+heartBinMin)/2;
+ var height = (heartBinMid-curHeartMin*0.9) / (curHeartMax-curHeartMin*0.9) * totHeight;
+ var xVal = (width_screen-totWidth)/2 + totWidth - i*binPixels -2;
+ var yVal = height_screen/2+28 + totHeight - height;
+
+ if (showMoveBar && ActMon.getInfo().moveBarLevel > 0)
+ {
+ if (graphColour == 1)
+ { dc.setColor(Gfx.COLOR_ORANGE, Gfx.COLOR_TRANSPARENT); }
+ else
+ { dc.setColor(Gfx.COLOR_RED, Gfx.COLOR_TRANSPARENT); }
+ } else
+ {
+ dc.setColor(arrayColours[getHRColour(heartBinMid)], Gfx.COLOR_TRANSPARENT);
+ }
+
+ dc.fillRectangle(xVal, yVal, binPixels, height);
}
-
- dc.fillRectangle(xVal, yVal, binPixels, height);
+
+ if (heartBinMin < heartMin)
+ { heartMin = heartBinMin; }
+ if (heartBinMax > heartMax)
+ { heartMax = heartBinMax; }
// Sys.println(i + ": " + binWidthSecs + " " + secsBin + " " + heartBinMin + " " + heartBinMax);
}