Skip to content

Commit a30ecb7

Browse files
author
dave
committed
#134 ensure that 1dp large numbers work as expected
1 parent abdfed3 commit a30ecb7

File tree

6 files changed

+61
-7
lines changed

6 files changed

+61
-7
lines changed

examples/esp32SimHub/esp32SimHub.emf

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,12 +105,12 @@
105105
"parentId": 4,
106106
"type": "analogItem",
107107
"item": {
108-
"maxValue": 100,
109-
"offset": 0,
108+
"maxValue": 255,
109+
"offset": -180,
110110
"divisor": 2,
111-
"unitName": "",
111+
"unitName": "dB",
112112
"name": "Test Item 1",
113-
"variableName": "",
113+
"variableName": "SettingsTestItem1",
114114
"id": 5,
115115
"eepromAddress": -1,
116116
"readOnly": false,
@@ -175,6 +175,22 @@
175175
"visible": true
176176
}
177177
},
178+
{
179+
"parentId": 4,
180+
"type": "largeNumItem",
181+
"item": {
182+
"digitsAllowed": 4,
183+
"decimalPlaces": 1,
184+
"negativeAllowed": true,
185+
"name": "New Large Number",
186+
"variableName": "SettingsNewLargeNumber",
187+
"id": 15,
188+
"eepromAddress": -1,
189+
"readOnly": false,
190+
"localOnly": false,
191+
"visible": true
192+
}
193+
},
178194
{
179195
"parentId": 0,
180196
"type": "enumItem",
@@ -283,6 +299,11 @@
283299
"latestValue": "-1",
284300
"subsystem": "DISPLAY"
285301
},
302+
{
303+
"name": "ST7735_TAB_TYPE",
304+
"latestValue": "INITR_BLACKTAB",
305+
"subsystem": "DISPLAY"
306+
},
286307
{
287308
"name": "DISPLAY_ROTATION",
288309
"latestValue": "1",

examples/esp32SimHub/esp32SimHub.ino

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
* Touch Up=5, Down=7, Sel=6
2929
*/
3030

31+
#include <Adafruit_ILI9341.h>
3132
#include "esp32SimHub_menu.h"
3233
#include <Wire.h>
3334
#include <IoLogging.h>
@@ -72,6 +73,13 @@ void setup() {
7273

7374
menuGear.setTextValue("N");
7475

76+
//menuSettingsNewLargeNumber.setLargeNumberFromString("12.1");
77+
auto largeNum = menuSettingsNewLargeNumber.getLargeNumber();
78+
//largeNum->setFromFloat(12.1f);
79+
largeNum->setValue(12, 1, false);
80+
//menuSettingsNewLargeNumber.setLargeNumberFromString("12.1");
81+
menuSettingsTestItem1.setFromFloatingPointValue(21.5F);
82+
7583
analogDevice.initPin(dacPin, DIR_OUT);
7684
taskManager.scheduleFixedRate(10, [] {
7785
ledLevel += ledAdjustment;

examples/esp32SimHub/esp32SimHub_menu.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,17 @@ const char enumStrDashboard_2[] PROGMEM = "Custom";
3535
const char* const enumStrDashboard[] PROGMEM = { enumStrDashboard_0, enumStrDashboard_1, enumStrDashboard_2 };
3636
const PROGMEM EnumMenuInfo minfoDashboard = { "Dashboard", 8, 0xffff, 2, onDashChanged, enumStrDashboard };
3737
EnumMenuItem menuDashboard(&minfoDashboard, 0, &menuLap);
38+
RENDERING_CALLBACK_NAME_INVOKE(fnSettingsNewLargeNumberRtCall, largeNumItemRenderFn, "New Large Number", -1, NO_CALLBACK)
39+
EditableLargeNumberMenuItem menuSettingsNewLargeNumber(fnSettingsNewLargeNumberRtCall, 15, 4, 1, true, NULL);
3840
const PROGMEM char pgmStrSettingsIoTMonitorText[] = { "IoT Monitor" };
39-
RemoteMenuItem menuSettingsIoTMonitor(pgmStrSettingsIoTMonitorText, 14, NULL);
41+
RemoteMenuItem menuSettingsIoTMonitor(pgmStrSettingsIoTMonitorText, 14, &menuSettingsNewLargeNumber);
4042
RENDERING_CALLBACK_NAME_INVOKE(fnSettingsLargeTestRtCall, largeNumItemRenderFn, "LargeTest", -1, NO_CALLBACK)
4143
EditableLargeNumberMenuItem menuSettingsLargeTest(fnSettingsLargeTestRtCall, 13, 12, 4, true, &menuSettingsIoTMonitor);
4244
const PROGMEM BooleanMenuInfo minfoSettingsOverboost = { "Overboost", 12, 0xffff, 1, NO_CALLBACK, NAMING_ON_OFF };
4345
BooleanMenuItem menuSettingsOverboost(&minfoSettingsOverboost, false, &menuSettingsLargeTest);
4446
const PROGMEM AnyMenuInfo minfoSettingsShowDialogs = { "Show Dialogs", 11, 0xffff, 0, onShowDialogs };
4547
ActionMenuItem menuSettingsShowDialogs(&minfoSettingsShowDialogs, &menuSettingsOverboost);
46-
const PROGMEM AnalogMenuInfo minfoSettingsTestItem1 = { "Test Item 1", 5, 0xffff, 100, NO_CALLBACK, 0, 2, "" };
48+
const PROGMEM AnalogMenuInfo minfoSettingsTestItem1 = { "Test Item 1", 5, 0xffff, 255, NO_CALLBACK, -180, 2, "dB" };
4749
AnalogMenuItem menuSettingsTestItem1(&minfoSettingsTestItem1, 0, &menuSettingsShowDialogs);
4850
RENDERING_CALLBACK_NAME_INVOKE(fnSettingsRtCall, backSubItemRenderFn, "Settings", -1, NO_CALLBACK)
4951
const PROGMEM SubMenuInfo minfoSettings = { "Settings", 4, 0xffff, 0, NO_CALLBACK };

examples/esp32SimHub/esp32SimHub_menu.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616
#include "tcMenuAdaFruitGfx.h"
1717
#include "ESP32TouchKeysAbstraction.h"
1818
#include "SimhubConnector.h"
19-
#include <RemoteMenuItem.h>
2019
#include <RuntimeMenuItem.h>
2120
#include <EditableLargeNumberMenuItem.h>
21+
#include <RemoteMenuItem.h>
2222
#include <IoAbstraction.h>
2323

2424
// variables we declare that you may need to access
@@ -38,6 +38,7 @@ extern const GFXfont FreeSans12pt7b;
3838
extern ActionMenuItem menuShowDashboard;
3939
extern AnalogMenuItem menuLap;
4040
extern EnumMenuItem menuDashboard;
41+
extern EditableLargeNumberMenuItem menuSettingsNewLargeNumber;
4142
extern RemoteMenuItem menuSettingsIoTMonitor;
4243
extern EditableLargeNumberMenuItem menuSettingsLargeTest;
4344
extern BooleanMenuItem menuSettingsOverboost;

src/tcUtil.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ long dpToDivisor(int dp) {
2828
case 3: return 1000;
2929
case 2: return 100;
3030
case 1: return 10;
31+
case 0: return 1;
3132
default:
3233
case 9: return 1000000000L;
3334
}

tests/tcMenuCoreTests/LargeNumberItemTests.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,4 +282,25 @@ test(LargeNumWithNegativeNotAllowed) {
282282
assertStringCaseEqual("15265", sz);
283283
}
284284

285+
test(LargeNumberWithOneDecimalPlace) {
286+
EditableLargeNumberMenuItem editable(largeNumTestCb, 101, 4, 1, false);
287+
editable.setLargeNumberFromString("12.1");
288+
assertEqual(editable.getLargeNumber()->getWhole(), (uint32_t)12);
289+
assertEqual(editable.getLargeNumber()->getFraction(), (uint32_t)1);
290+
assertNear(editable.getLargeNumber()->getAsFloat(), 12.1F, 0.00001);
291+
assertFalse(editable.getLargeNumber()->isNegative());
292+
293+
editable.getLargeNumber()->setFromFloat(14.1F);
294+
assertEqual(editable.getLargeNumber()->getWhole(), (uint32_t)14);
295+
assertEqual(editable.getLargeNumber()->getFraction(), (uint32_t)1);
296+
assertNear(editable.getLargeNumber()->getAsFloat(), 14.1F, 0.00001);
297+
assertFalse(editable.getLargeNumber()->isNegative());
298+
299+
editable.getLargeNumber()->setValue(13, 5, false);
300+
assertEqual(editable.getLargeNumber()->getWhole(), (uint32_t)13);
301+
assertEqual(editable.getLargeNumber()->getFraction(), (uint32_t)5);
302+
assertNear(editable.getLargeNumber()->getAsFloat(), 13.5F, 0.00001);
303+
assertFalse(editable.getLargeNumber()->isNegative());
304+
}
305+
285306
#endif // LARGE_NUMBER_ITEM_TESTS_H

0 commit comments

Comments
 (0)