mirror of
https://github.com/MarlinFirmware/Marlin.git
synced 2024-11-27 22:08:02 +00:00
🎨 Fix and enhance FTDI Eve Touch UI (#22189)
This commit is contained in:
parent
b6d8fec6cc
commit
0f5126acb2
@ -0,0 +1,91 @@
|
|||||||
|
/*********************************
|
||||||
|
* cocoa_press/leveling_menu.cpp *
|
||||||
|
*********************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Written By Mark Pelletier 2017 - Aleph Objects, Inc. *
|
||||||
|
* Written By Marcio Teixeira 2018 - Aleph Objects, Inc. *
|
||||||
|
* *
|
||||||
|
* This program is free software: you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* To view a copy of the GNU General Public License, go to the following *
|
||||||
|
* location: <https://www.gnu.org/licenses/>. *
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "../config.h"
|
||||||
|
#include "../screens.h"
|
||||||
|
|
||||||
|
#ifdef COCOA_LEVELING_MENU
|
||||||
|
|
||||||
|
#if BOTH(HAS_BED_PROBE,BLTOUCH)
|
||||||
|
#include "../../../../feature/bltouch.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
using namespace FTDI;
|
||||||
|
using namespace ExtUI;
|
||||||
|
using namespace Theme;
|
||||||
|
|
||||||
|
#define GRID_ROWS 5
|
||||||
|
#define GRID_COLS 3
|
||||||
|
#define BED_MESH_TITLE_POS BTN_POS(1,1), BTN_SIZE(3,1)
|
||||||
|
#define PROBE_BED_POS BTN_POS(1,2), BTN_SIZE(1,1)
|
||||||
|
#define SHOW_MESH_POS BTN_POS(2,2), BTN_SIZE(1,1)
|
||||||
|
#define EDIT_MESH_POS BTN_POS(3,2), BTN_SIZE(1,1)
|
||||||
|
#define BLTOUCH_TITLE_POS BTN_POS(1,3), BTN_SIZE(3,1)
|
||||||
|
#define BLTOUCH_RESET_POS BTN_POS(1,4), BTN_SIZE(1,1)
|
||||||
|
#define BLTOUCH_TEST_POS BTN_POS(2,4), BTN_SIZE(1,1)
|
||||||
|
#define BACK_POS BTN_POS(1,5), BTN_SIZE(3,1)
|
||||||
|
|
||||||
|
void LevelingMenu::onRedraw(draw_mode_t what) {
|
||||||
|
if (what & BACKGROUND) {
|
||||||
|
CommandProcessor cmd;
|
||||||
|
cmd.cmd(CLEAR_COLOR_RGB(Theme::bg_color))
|
||||||
|
.cmd(CLEAR(true,true,true))
|
||||||
|
.tag(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (what & FOREGROUND) {
|
||||||
|
CommandProcessor cmd;
|
||||||
|
cmd.font(font_large)
|
||||||
|
.cmd(COLOR_RGB(bg_text_enabled))
|
||||||
|
.text(BED_MESH_TITLE_POS, GET_TEXT_F(MSG_BED_LEVELING))
|
||||||
|
.text(BLTOUCH_TITLE_POS, GET_TEXT_F(MSG_BLTOUCH))
|
||||||
|
.font(font_medium).colors(normal_btn)
|
||||||
|
.tag(2).button(PROBE_BED_POS, GET_TEXT_F(MSG_PROBE_BED))
|
||||||
|
.enabled(ENABLED(HAS_MESH))
|
||||||
|
.tag(3).button(SHOW_MESH_POS, GET_TEXT_F(MSG_SHOW_MESH))
|
||||||
|
.enabled(ENABLED(HAS_MESH))
|
||||||
|
.tag(4).button(EDIT_MESH_POS, GET_TEXT_F(MSG_EDIT_MESH))
|
||||||
|
#undef GRID_COLS
|
||||||
|
#define GRID_COLS 2
|
||||||
|
.tag(5).button(BLTOUCH_RESET_POS, GET_TEXT_F(MSG_BLTOUCH_RESET))
|
||||||
|
.tag(6).button(BLTOUCH_TEST_POS, GET_TEXT_F(MSG_BLTOUCH_SELFTEST))
|
||||||
|
#undef GRID_COLS
|
||||||
|
#define GRID_COLS 3
|
||||||
|
.colors(action_btn)
|
||||||
|
.tag(1).button(BACK_POS, GET_TEXT_F(MSG_BACK));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LevelingMenu::onTouchEnd(uint8_t tag) {
|
||||||
|
switch (tag) {
|
||||||
|
case 1: GOTO_PREVIOUS(); break;
|
||||||
|
case 2: BedMeshViewScreen::doProbe(); break;
|
||||||
|
case 3: BedMeshViewScreen::show(); break;
|
||||||
|
case 4: BedMeshEditScreen::show(); break;
|
||||||
|
case 5: injectCommands_P(PSTR("M280 P0 S60")); break;
|
||||||
|
case 6: SpinnerDialogBox::enqueueAndWait_P(F("M280 P0 S90\nG4 P100\nM280 P0 S120")); break;
|
||||||
|
default: return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // COCOA_LEVELING_MENU
|
@ -0,0 +1,32 @@
|
|||||||
|
/*******************************
|
||||||
|
* cocoa_press/leveling_menu.h *
|
||||||
|
******************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Written By Mark Pelletier 2017 - Aleph Objects, Inc. *
|
||||||
|
* Written By Marcio Teixeira 2018 - Aleph Objects, Inc. *
|
||||||
|
* *
|
||||||
|
* This program is free software: you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* To view a copy of the GNU General Public License, go to the following *
|
||||||
|
* location: <https://www.gnu.org/licenses/>. *
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define COCOA_LEVELING_MENU
|
||||||
|
#define COCOA_LEVELING_MENU_CLASS LevelingMenu
|
||||||
|
|
||||||
|
class LevelingMenu : public BaseScreen, public CachedScreen<LEVELING_SCREEN_CACHE> {
|
||||||
|
public:
|
||||||
|
static void onRedraw(draw_mode_t);
|
||||||
|
static bool onTouchEnd(uint8_t tag);
|
||||||
|
};
|
@ -88,7 +88,7 @@ bool MainMenu::onTouchEnd(uint8_t tag) {
|
|||||||
case 8: GOTO_SCREEN(AdvancedSettingsMenu); break;
|
case 8: GOTO_SCREEN(AdvancedSettingsMenu); break;
|
||||||
case 9: injectCommands_P(PSTR("M84")); break;
|
case 9: injectCommands_P(PSTR("M84")); break;
|
||||||
#if HAS_LEVELING
|
#if HAS_LEVELING
|
||||||
case 10: GOTO_SCREEN(LevelingMenu); break;
|
case 10: GOTO_SCREEN(LevelingMenu); break;
|
||||||
#endif
|
#endif
|
||||||
case 11: GOTO_SCREEN(AboutScreen); break;
|
case 11: GOTO_SCREEN(AboutScreen); break;
|
||||||
default:
|
default:
|
||||||
|
@ -132,4 +132,3 @@ bool LevelingMenu::onTouchEnd(uint8_t tag) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif // FTDI_LEVELING_MENU
|
#endif // FTDI_LEVELING_MENU
|
||||||
|
|
||||||
|
@ -34,28 +34,53 @@
|
|||||||
* Formats a temperature string (e.g. "100°C")
|
* Formats a temperature string (e.g. "100°C")
|
||||||
*/
|
*/
|
||||||
void format_temp(char *str, const_celsius_float_t t1) {
|
void format_temp(char *str, const_celsius_float_t t1) {
|
||||||
sprintf_P(str, PSTR("%3d" S_FMT), ROUND(t1), GET_TEXT(MSG_UNITS_C));
|
#ifdef TOUCH_UI_LCD_TEMP_PRECISION
|
||||||
|
char num1[7];
|
||||||
|
dtostrf(t1, 4 + TOUCH_UI_LCD_TEMP_PRECISION, TOUCH_UI_LCD_TEMP_PRECISION, num1);
|
||||||
|
sprintf_P(str, PSTR("%s" S_FMT), num1, GET_TEXT(MSG_UNITS_C));
|
||||||
|
#else
|
||||||
|
sprintf_P(str, PSTR("%3d" S_FMT), ROUND(t1), GET_TEXT(MSG_UNITS_C));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Formats a temperature string for an idle heater (e.g. "100 °C / idle")
|
* Formats a temperature string for an idle heater (e.g. "100 °C / idle")
|
||||||
*/
|
*/
|
||||||
void format_temp_and_idle(char *str, const_celsius_float_t t1) {
|
void format_temp_and_idle(char *str, const_celsius_float_t t1) {
|
||||||
sprintf_P(str, PSTR("%3d" S_FMT " / " S_FMT), ROUND(t1), GET_TEXT(MSG_UNITS_C), GET_TEXT(MSG_IDLE));
|
#ifdef TOUCH_UI_LCD_TEMP_PRECISION
|
||||||
|
char num1[7];
|
||||||
|
dtostrf(t1, 4 + TOUCH_UI_LCD_TEMP_PRECISION, TOUCH_UI_LCD_TEMP_PRECISION, num1);
|
||||||
|
sprintf_P(str, PSTR("%s" S_FMT " / " S_FMT), num1, GET_TEXT(MSG_UNITS_C), GET_TEXT(MSG_IDLE));
|
||||||
|
#else
|
||||||
|
sprintf_P(str, PSTR("%3d" S_FMT " / " S_FMT), ROUND(t1), GET_TEXT(MSG_UNITS_C), GET_TEXT(MSG_IDLE));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Formats a temperature string for an active heater (e.g. "100 / 200°C")
|
* Formats a temperature string for an active heater (e.g. "100 / 200°C")
|
||||||
*/
|
*/
|
||||||
void format_temp_and_temp(char *str, const_celsius_float_t t1, const_celsius_float_t t2) {
|
void format_temp_and_temp(char *str, const_celsius_float_t t1, const_celsius_float_t t2) {
|
||||||
sprintf_P(str, PSTR("%3d / %3d" S_FMT), ROUND(t1), ROUND(t2), GET_TEXT(MSG_UNITS_C));
|
#ifdef TOUCH_UI_LCD_TEMP_PRECISION
|
||||||
|
char num1[7], num2[7];
|
||||||
|
dtostrf(t1, 4 + TOUCH_UI_LCD_TEMP_PRECISION, TOUCH_UI_LCD_TEMP_PRECISION, num1);
|
||||||
|
dtostrf(t2, 4 + TOUCH_UI_LCD_TEMP_PRECISION, TOUCH_UI_LCD_TEMP_PRECISION, num2);
|
||||||
|
sprintf_P(str, PSTR("%s / %s" S_FMT), num1, num2, GET_TEXT(MSG_UNITS_C));
|
||||||
|
#else
|
||||||
|
sprintf_P(str, PSTR("%3d / %3d" S_FMT), ROUND(t1), ROUND(t2), GET_TEXT(MSG_UNITS_C));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Formats a temperature string for a material (e.g. "100°C (PLA)")
|
* Formats a temperature string for a material (e.g. "100°C (PLA)")
|
||||||
*/
|
*/
|
||||||
void format_temp_and_material(char *str, const_celsius_float_t t1, const char *material) {
|
void format_temp_and_material(char *str, const_celsius_float_t t1, const char *material) {
|
||||||
sprintf_P(str, PSTR("%3d" S_FMT " (" S_FMT ")"), ROUND(t1), GET_TEXT(MSG_UNITS_C), material);
|
#ifdef TOUCH_UI_LCD_TEMP_PRECISION
|
||||||
|
char num1[7];
|
||||||
|
dtostrf(t1, 4 + TOUCH_UI_LCD_TEMP_PRECISION, TOUCH_UI_LCD_TEMP_PRECISION, num1);
|
||||||
|
sprintf_P(str, PSTR("%s" S_FMT " (" S_FMT ")"), num1, GET_TEXT(MSG_UNITS_C), material);
|
||||||
|
#else
|
||||||
|
sprintf_P(str, PSTR("%3d" S_FMT " (" S_FMT ")"), ROUND(t1), GET_TEXT(MSG_UNITS_C), material);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -36,7 +36,14 @@ constexpr static ZOffsetScreenData &mydata = screen_data.ZOffsetScreen;
|
|||||||
|
|
||||||
void ZOffsetScreen::onEntry() {
|
void ZOffsetScreen::onEntry() {
|
||||||
mydata.z = SHEET_THICKNESS;
|
mydata.z = SHEET_THICKNESS;
|
||||||
|
mydata.softEndstopState = getSoftEndstopState();
|
||||||
BaseNumericAdjustmentScreen::onEntry();
|
BaseNumericAdjustmentScreen::onEntry();
|
||||||
|
if (wizardRunning())
|
||||||
|
setSoftEndstopState(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ZOffsetScreen::onExit() {
|
||||||
|
setSoftEndstopState(mydata.softEndstopState);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZOffsetScreen::onRedraw(draw_mode_t what) {
|
void ZOffsetScreen::onRedraw(draw_mode_t what) {
|
||||||
@ -50,17 +57,13 @@ void ZOffsetScreen::onRedraw(draw_mode_t what) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ZOffsetScreen::move(float mm, int16_t steps) {
|
void ZOffsetScreen::move(float mm, int16_t steps) {
|
||||||
// We can't store state after the call to the AlertBox, so
|
if (wizardRunning()) {
|
||||||
// check whether the current position equal mydata.z in order
|
|
||||||
// to know whether the user started the wizard.
|
|
||||||
if (getAxisPosition_mm(Z) == mydata.z) {
|
|
||||||
// In the wizard
|
|
||||||
mydata.z += mm;
|
mydata.z += mm;
|
||||||
setAxisPosition_mm(mydata.z, Z);
|
setAxisPosition_mm(mydata.z, Z);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Otherwise doing a manual adjustment, possibly during a print.
|
// Otherwise doing a manual adjustment, possibly during a print.
|
||||||
babystepAxis_steps(steps, Z);
|
TERN(BABYSTEPPING, babystepAxis_steps(steps, Z), UNUSED(steps));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,9 +87,16 @@ void ZOffsetScreen::runWizard() {
|
|||||||
AlertDialogBox::show(PSTR("After the printer finishes homing, adjust the Z Offset so that a sheet of paper can pass between the nozzle and bed with slight resistance."));
|
AlertDialogBox::show(PSTR("After the printer finishes homing, adjust the Z Offset so that a sheet of paper can pass between the nozzle and bed with slight resistance."));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ZOffsetScreen::wizardRunning() {
|
||||||
|
// We can't store state after the call to the AlertBox, so
|
||||||
|
// check whether the current Z position equals mydata.z in order
|
||||||
|
// to know whether the user started the wizard.
|
||||||
|
return getAxisPosition_mm(Z) == mydata.z;
|
||||||
|
}
|
||||||
|
|
||||||
bool ZOffsetScreen::onTouchHeld(uint8_t tag) {
|
bool ZOffsetScreen::onTouchHeld(uint8_t tag) {
|
||||||
const int16_t steps = mmToWholeSteps(getIncrement(), Z);
|
const int16_t steps = TERN(BABYSTEPPING, mmToWholeSteps(getIncrement(), Z), 0);
|
||||||
const float increment = mmFromWholeSteps(steps, Z);
|
const float increment = TERN(BABYSTEPPING, mmFromWholeSteps(steps, Z), getIncrement());
|
||||||
switch (tag) {
|
switch (tag) {
|
||||||
case 2: runWizard(); break;
|
case 2: runWizard(); break;
|
||||||
case 4: UI_DECREMENT(ZOffset_mm); move(-increment, -steps); break;
|
case 4: UI_DECREMENT(ZOffset_mm); move(-increment, -steps); break;
|
||||||
|
@ -27,14 +27,17 @@
|
|||||||
|
|
||||||
struct ZOffsetScreenData : public BaseNumericAdjustmentScreenData {
|
struct ZOffsetScreenData : public BaseNumericAdjustmentScreenData {
|
||||||
float z;
|
float z;
|
||||||
|
bool softEndstopState;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ZOffsetScreen : public BaseNumericAdjustmentScreen, public CachedScreen<ZOFFSET_SCREEN_CACHE> {
|
class ZOffsetScreen : public BaseNumericAdjustmentScreen, public CachedScreen<ZOFFSET_SCREEN_CACHE> {
|
||||||
private:
|
private:
|
||||||
static void move(float mm, int16_t steps);
|
static void move(float mm, int16_t steps);
|
||||||
static void runWizard();
|
static void runWizard();
|
||||||
|
static bool wizardRunning();
|
||||||
public:
|
public:
|
||||||
static void onEntry();
|
static void onEntry();
|
||||||
|
static void onExit();
|
||||||
static void onRedraw(draw_mode_t);
|
static void onRedraw(draw_mode_t);
|
||||||
static bool onTouchHeld(uint8_t tag);
|
static bool onTouchHeld(uint8_t tag);
|
||||||
};
|
};
|
||||||
|
@ -113,6 +113,7 @@ SCREEN_TABLE {
|
|||||||
DECL_SCREEN_IF_INCLUDED(COCOA_PREHEAT_MENU)
|
DECL_SCREEN_IF_INCLUDED(COCOA_PREHEAT_MENU)
|
||||||
DECL_SCREEN_IF_INCLUDED(COCOA_PREHEAT_SCREEN)
|
DECL_SCREEN_IF_INCLUDED(COCOA_PREHEAT_SCREEN)
|
||||||
DECL_SCREEN_IF_INCLUDED(COCOA_LOAD_CHOCOLATE_SCREEN)
|
DECL_SCREEN_IF_INCLUDED(COCOA_LOAD_CHOCOLATE_SCREEN)
|
||||||
|
DECL_SCREEN_IF_INCLUDED(COCOA_LEVELING_MENU)
|
||||||
DECL_SCREEN_IF_INCLUDED(COCOA_MOVE_XYZ_SCREEN)
|
DECL_SCREEN_IF_INCLUDED(COCOA_MOVE_XYZ_SCREEN)
|
||||||
DECL_SCREEN_IF_INCLUDED(COCOA_MOVE_E_SCREEN)
|
DECL_SCREEN_IF_INCLUDED(COCOA_MOVE_E_SCREEN)
|
||||||
};
|
};
|
||||||
|
@ -157,6 +157,7 @@ enum {
|
|||||||
#include "cocoa_press/load_chocolate.h"
|
#include "cocoa_press/load_chocolate.h"
|
||||||
#include "cocoa_press/move_xyz_screen.h"
|
#include "cocoa_press/move_xyz_screen.h"
|
||||||
#include "cocoa_press/move_e_screen.h"
|
#include "cocoa_press/move_e_screen.h"
|
||||||
|
#include "cocoa_press/leveling_menu.h"
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#include "generic/status_screen.h"
|
#include "generic/status_screen.h"
|
||||||
@ -206,7 +207,9 @@ enum {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAS_LEVELING
|
#if HAS_LEVELING
|
||||||
#include "generic/leveling_menu.h"
|
#if DISABLED(TOUCH_UI_COCOA_PRESS)
|
||||||
|
#include "generic/leveling_menu.h"
|
||||||
|
#endif
|
||||||
#if HAS_BED_PROBE
|
#if HAS_BED_PROBE
|
||||||
#include "generic/z_offset_screen.h"
|
#include "generic/z_offset_screen.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -108,6 +108,7 @@ namespace Theme {
|
|||||||
|
|
||||||
constexpr uint32_t bed_mesh_lines_rgb = accent_color_6;
|
constexpr uint32_t bed_mesh_lines_rgb = accent_color_6;
|
||||||
constexpr uint32_t bed_mesh_shadow_rgb = 0x444444;
|
constexpr uint32_t bed_mesh_shadow_rgb = 0x444444;
|
||||||
|
#define BED_MESH_POINTS_GRAY
|
||||||
#else
|
#else
|
||||||
constexpr uint32_t theme_darkest = gray_color_1;
|
constexpr uint32_t theme_darkest = gray_color_1;
|
||||||
constexpr uint32_t theme_dark = gray_color_2;
|
constexpr uint32_t theme_dark = gray_color_2;
|
||||||
|
@ -1033,10 +1033,10 @@ namespace ExtUI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool isPrintingFromMediaPaused() {
|
bool isPrintingFromMediaPaused() {
|
||||||
return TERN0(SDSUPPORT, isPrintingFromMedia() && printingIsPaused());
|
return TERN0(SDSUPPORT, IS_SD_PAUSED());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isPrintingFromMedia() { return IS_SD_PRINTING(); }
|
bool isPrintingFromMedia() { return TERN0(SDSUPPORT, IS_SD_PRINTING() || IS_SD_PAUSED()); }
|
||||||
|
|
||||||
bool isPrinting() {
|
bool isPrinting() {
|
||||||
return commandsInQueue() || isPrintingFromMedia() || printJobOngoing() || printingIsPaused();
|
return commandsInQueue() || isPrintingFromMedia() || printJobOngoing() || printingIsPaused();
|
||||||
|
Loading…
Reference in New Issue
Block a user