From f561b44463edbb4e8afc177194c055036b3faf35 Mon Sep 17 00:00:00 2001 From: adrian w kirk Date: Mon, 27 Jun 2022 18:04:45 +0100 Subject: [PATCH] disabling screen controls on the sliding text GUI for the bangle2 --- apps/slidingtext/metadata.json | 6 ++- apps/slidingtext/slidingtext.js | 45 ++++++++++++----- apps/slidingtext/slidingtext.settings.js | 61 ++++++++++++++++++++++++ 3 files changed, 98 insertions(+), 14 deletions(-) create mode 100644 apps/slidingtext/slidingtext.settings.js diff --git a/apps/slidingtext/metadata.json b/apps/slidingtext/metadata.json index 2937a618b..15707c1ad 100644 --- a/apps/slidingtext/metadata.json +++ b/apps/slidingtext/metadata.json @@ -1,7 +1,7 @@ { "id": "slidingtext", "name": "Sliding Clock", - "version": "0.08", + "version": "0.09", "description": "Inspired by the Pebble sliding clock, old times are scrolled off the screen and new times on. You are also able to change language on the fly so you can see the time written in other languages using button 1. Currently English, French, Japanese, Spanish and German are supported", "icon": "slidingtext.png", "type": "clock", @@ -12,6 +12,7 @@ "allow_emulator": false, "storage": [ {"name":"slidingtext.app.js","url":"slidingtext.js"}, + {"name":"slidingtext.settings.js","url":"slidingtext.settings.js"}, {"name":"slidingtext.img","url":"slidingtext-icon.js","evaluate":true}, {"name":"slidingtext.locale.en.js","url":"slidingtext.locale.en.js"}, {"name":"slidingtext.locale.en2.js","url":"slidingtext.locale.en2.js"}, @@ -21,5 +22,6 @@ {"name":"slidingtext.locale.jp.js","url":"slidingtext.locale.jp.js"}, {"name":"slidingtext.locale.de.js","url":"slidingtext.locale.de.js"}, {"name":"slidingtext.dtfmt.js","url":"slidingtext.dtfmt.js"} - ] + ], + "data": [{"name": "slidingtext.settings.json"}] } diff --git a/apps/slidingtext/slidingtext.js b/apps/slidingtext/slidingtext.js index 7b56af1a1..5eabed247 100644 --- a/apps/slidingtext/slidingtext.js +++ b/apps/slidingtext/slidingtext.js @@ -5,11 +5,17 @@ */ const color_schemes = [ + { + name: "white", + background : [1.0,1.0,1.0], + main_bar: [0.0,0.0,0.0], + other_bars: [0.25,0.25,0.25], + }, { name: "black", background : [0.0,0.0,0.0], main_bar: [1.0,1.0,1.0], - other_bars: [0.85,0.85,0.85], + other_bars: [1.0,1.0,1.0], }, { name: "red", @@ -81,7 +87,7 @@ function reset_commands(){ function has_commands(){ return command_stack_high_priority.length > 0 || - command_stack_low_priority.lenth > 0; + command_stack_low_priority.length > 0; } class ShiftText { @@ -244,7 +250,12 @@ function setRowDisplays(y, heights) { y += heights[i]; } } -if (g.getHeight()>200) + +function bangleVersion(){ + return (g.getHeight()>200)? 1 : 2; +} + +if (bangleVersion()>1) setRowDisplays(50, [40,30,30,30,40]); else setRowDisplays(34, [35,25,25,25,35]); @@ -411,8 +422,7 @@ function draw_clock(){ reset_commands(); date = display_time(date); console.log("draw_clock:" + last_draw_time.toISOString() + " display:" + date.toISOString()); - // for debugging only - //date.setMinutes(37); + var rows = date_formatter.formatDate(date); var display; for (var i = 0; i < rows.length; i++) { @@ -503,6 +513,7 @@ function set_dateformat(dateformat_name){ } } +var enable_live_controls = false; const PREFERENCE_FILE = "slidingtext.settings.json"; /** * Called on startup to set the watch to the last preference settings @@ -510,7 +521,7 @@ const PREFERENCE_FILE = "slidingtext.settings.json"; function load_settings(){ var setScheme = false; try{ - settings = require("Storage").readJSON(PREFERENCE_FILE); + var settings = require("Storage").readJSON(PREFERENCE_FILE); if(settings != null){ console.log("loaded:" + JSON.stringify(settings)); if(settings.color_scheme != null){ @@ -520,6 +531,10 @@ function load_settings(){ if(settings.date_format != null){ set_dateformat(settings.date_format); } + if(settings.enable_live_controls == null){ + settings.enable_live_controls = (bangleVersion() <= 1); + } + enable_live_controls = settings.enable_live_controls; } else { console.log("no settings to load"); } @@ -538,22 +553,28 @@ function save_settings(){ var settings = { date_format : date_formatter.name(), color_scheme : color_schemes[color_scheme_index].name, + enable_live_controls: enable_live_controls }; console.log("saving:" + JSON.stringify(settings)); require("Storage").writeJSON(PREFERENCE_FILE,settings); } function button1pressed() { - changeFormatter(); - save_settings(); + console.log("button1pressed"); + if (enable_live_controls) { + changeFormatter(); + save_settings(); + } } function button3pressed() { console.log("button3pressed"); - nextColorTheme(); - reset_clock(true); - draw_clock(); - save_settings(); + if (enable_live_controls) { + nextColorTheme(); + reset_clock(true); + draw_clock(); + save_settings(); + } } // The interval reference for updating the clock diff --git a/apps/slidingtext/slidingtext.settings.js b/apps/slidingtext/slidingtext.settings.js new file mode 100644 index 000000000..40ebb0b9b --- /dev/null +++ b/apps/slidingtext/slidingtext.settings.js @@ -0,0 +1,61 @@ +(function(back) { + const PREFERENCE_FILE = "slidingtext.settings.json"; + var settings = Object.assign({ + secondsOnUnlock: false, + }, require('Storage').readJSON(PREFERENCE_FILE, true) || {}); + console.log("loaded:" + JSON.stringify(settings)); + + const LANGUAGES_FILE = "slidingtext.languages.json"; + const LANGUAGES_DEFAULT = ["en","en2"]; + var locales = null; + try { + locales = require("Storage").readJSON(LANGUAGES_FILE); + } catch(e) { + console.log("failed to load languages:" + e); + } + if(locales == null || locales.length == 0){ + locales = LANGUAGES_DEFAULT; + console.log("defaulting languages to locale:" + locales); + } + + function writeSettings() { + require('Storage').writeJSON(PREFERENCE_FILE, settings); + } + + // Helper method which uses int-based menu item for set of string values + function stringItems(startvalue, writer, values) { + return { + value: (startvalue === undefined ? 0 : values.indexOf(startvalue)), + format: v => values[v], + min: 0, + max: values.length - 1, + wrap: true, + step: 1, + onchange: v => { + writer(values[v]); + writeSettings(); + } + }; + } + + // Helper method which breaks string set settings down to local settings object + function stringInSettings(name, values) { + return stringItems(settings[name], v => settings[name] = v, values); + } + + // Show the menu + E.showMenu({ + "" : { "title" : "Sliding Text" }, + "< Back" : () => back(), + "Colour": stringInSettings("color_scheme", ["white", "black", "red","grey","purple","blue"]), + "Languages": stringInSettings("date_format", locales), + "Live Control": { + value: (settings.enable_live_controls !== undefined ? settings.enable_live_controls : true), + format: v => v ? "On" : "Off", + onchange: v => { + settings.enable_live_controls = v; + writeSettings(); + } + }, + }); +}) \ No newline at end of file