diff --git a/src/PanelDue.cpp b/src/PanelDue.cpp index 4701dbf9..625a1dbd 100755 --- a/src/PanelDue.cpp +++ b/src/PanelDue.cpp @@ -294,6 +294,7 @@ enum ReceivedDataEvent rcvMoveAxesHomed, rcvMoveAxesLetter, rcvMoveAxesMachinePosition, + rcvMoveAxesMax, rcvMoveAxesUserPosition, rcvMoveAxesVisible, rcvMoveAxesWorkplaceOffsets, @@ -409,6 +410,7 @@ static FieldTableEntry fieldTable[] = { rcvMoveAxesHomed, "move:axes^:homed" }, { rcvMoveAxesLetter, "move:axes^:letter" }, { rcvMoveAxesMachinePosition, "move:axes^:machinePosition" }, + { rcvMoveAxesMax, "move:axes^:max" }, { rcvMoveAxesUserPosition, "move:axes^:userPosition" }, { rcvMoveAxesVisible, "move:axes^:visible" }, { rcvMoveAxesWorkplaceOffsets, "move:axes^:workplaceOffsets^" }, @@ -1461,6 +1463,16 @@ static void ProcessReceivedValue(StringRef id, const char data[], const size_t i } break; + case rcvMoveAxesMax: + { + float val; + if (GetFloat(data, val)) + { + UI::SetAxisMax(indices[0], val); + } + } + break; + case rcvMoveAxesUserPosition: { float fval; diff --git a/src/UI/Display.hpp b/src/UI/Display.hpp index d7742340..34c881c7 100644 --- a/src/UI/Display.hpp +++ b/src/UI/Display.hpp @@ -288,6 +288,16 @@ class FloatField : public FieldWithText changed = true; } + void SetNumDecimals(uint8_t decimals) + { + if (numDecimals == decimals) + { + return; + } + numDecimals = decimals; + changed = true; + } + void SetLabel(const char* _ecv_array s) { if (strcmp(label, s) == 0) diff --git a/src/UI/UserInterface.cpp b/src/UI/UserInterface.cpp index 4616b225..62de0384 100755 --- a/src/UI/UserInterface.cpp +++ b/src/UI/UserInterface.cpp @@ -84,6 +84,8 @@ static StaticTextField *areYouSureTextField, *areYouSureQueryField; static DisplayField *emptyRoot, *baseRoot, *commonRoot, *controlRoot, *printRoot, *messageRoot, *setupRoot; static SingleButton *homeAllButton, *bedCompButton; static IconButtonWithText *homeButtons[MaxDisplayableAxes], *toolButtons[MaxSlots]; + +static float axisMaxVal = 0.0; static FloatField *controlTabAxisPos[MaxDisplayableAxes]; #if DISPLAY_X == 800 static FloatField *printTabAxisPos[MaxDisplayableAxes]; @@ -388,6 +390,18 @@ static void ChangeBrightness(bool up) SetBrightness(nvData.GetBrightness() + adjust); } + +void UI::SetAxisMax(size_t index, float val) +{ + if (index >= MaxTotalAxes) + { + return; + } + + axisMaxVal = max(axisMaxVal, val); +} + + // Cycle through available display dimmer types static void ChangeDisplayDimmerType() { @@ -1326,6 +1340,16 @@ namespace UI if (axis != nullptr && axis->slot < MaxDisplayableAxes) { size_t slot = axis->slot; + + if (axisMaxVal > 1000) + { + controlTabAxisPos[slot]->SetNumDecimals(1); +#if DISPLAY_X == 800 + printTabAxisPos[slot]->SetNumDecimals(1); +#endif + movePopupAxisPos[slot]->SetNumDecimals(1); + } + controlTabAxisPos[slot]->SetValue(fval); #if DISPLAY_X == 800 printTabAxisPos[slot]->SetValue(fval); diff --git a/src/UI/UserInterface.hpp b/src/UI/UserInterface.hpp index a1b6c19c..7686af3a 100644 --- a/src/UI/UserInterface.hpp +++ b/src/UI/UserInterface.hpp @@ -103,6 +103,7 @@ namespace UI extern void SetBabystepOffset(size_t index, float f); extern void SetAxisLetter(size_t index, char l); + extern void SetAxisMax(size_t index, float val); extern void SetAxisVisible(size_t index, bool v); extern void SetAxisWorkplaceOffset(size_t axisIndex, size_t workplaceIndex, float offset); extern void SetCurrentWorkplaceNumber(uint8_t workplaceNumber);