Skip to content

Commit 205d867

Browse files
committed
🎨 Standard material presets behavior
1 parent 84f9490 commit 205d867

7 files changed

Lines changed: 178 additions & 239 deletions

File tree

Marlin/src/lcd/e3v2/creality/dwin.cpp

Lines changed: 113 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,14 @@ typedef struct {
166166

167167
select_t select_page{0}, select_file{0}, select_print{0}, select_prepare{0}
168168
, select_control{0}, select_axis{0}, select_temp{0}, select_motion{0}, select_tune{0}
169-
, select_advset{0}, select_PLA{0}, select_ABS{0}
170-
, select_speed{0}, select_acc{0}, select_jerk{0}, select_step{0}, select_item{0};
169+
, select_advset{0}, select_speed{0}, select_acc{0}, select_jerk{0}, select_step{0}, select_item{0};
170+
171+
#if HAS_PREHEAT
172+
select_t select_PLA{0};
173+
#if PREHEAT_COUNT > 1
174+
select_t select_ABS{0};
175+
#endif
176+
#endif
171177

172178
uint8_t index_file = MROWS,
173179
index_prepare = MROWS,
@@ -492,8 +498,8 @@ inline bool Apply_Encoder(const EncoderState &encoder_diffState, T &valref) {
492498
#define PREPARE_CASE_DISA 2
493499
#define PREPARE_CASE_HOME 3
494500
#define PREPARE_CASE_ZOFF (PREPARE_CASE_HOME + ENABLED(HAS_ZOFFSET_ITEM))
495-
#define PREPARE_CASE_PLA (PREPARE_CASE_ZOFF + ENABLED(HAS_HOTEND))
496-
#define PREPARE_CASE_ABS (PREPARE_CASE_PLA + ENABLED(HAS_HOTEND))
501+
#define PREPARE_CASE_PLA (PREPARE_CASE_ZOFF + ENABLED(HAS_PREHEAT))
502+
#define PREPARE_CASE_ABS (PREPARE_CASE_PLA + (TERN0(HAS_PREHEAT, PREHEAT_COUNT > 1)))
497503
#define PREPARE_CASE_COOL (PREPARE_CASE_ABS + EITHER(HAS_HOTEND, HAS_HEATED_BED))
498504
#define PREPARE_CASE_LANG (PREPARE_CASE_COOL + 1)
499505
#define PREPARE_CASE_TOTAL PREPARE_CASE_LANG
@@ -517,8 +523,8 @@ inline bool Apply_Encoder(const EncoderState &encoder_diffState, T &valref) {
517523
#define TEMP_CASE_TEMP (0 + ENABLED(HAS_HOTEND))
518524
#define TEMP_CASE_BED (TEMP_CASE_TEMP + ENABLED(HAS_HEATED_BED))
519525
#define TEMP_CASE_FAN (TEMP_CASE_BED + ENABLED(HAS_FAN))
520-
#define TEMP_CASE_PLA (TEMP_CASE_FAN + ENABLED(HAS_HOTEND))
521-
#define TEMP_CASE_ABS (TEMP_CASE_PLA + ENABLED(HAS_HOTEND))
526+
#define TEMP_CASE_PLA (TEMP_CASE_FAN + ENABLED(HAS_PREHEAT))
527+
#define TEMP_CASE_ABS (TEMP_CASE_PLA + (TERN0(HAS_PREHEAT, PREHEAT_COUNT > 1)))
522528
#define TEMP_CASE_TOTAL TEMP_CASE_ABS
523529

524530
#define PREHEAT_CASE_TEMP (0 + ENABLED(HAS_HOTEND))
@@ -785,6 +791,8 @@ void Draw_Prepare_Menu() {
785791
#if PREHEAT_COUNT > 1
786792
if (PVISI(PREPARE_CASE_ABS)) Item_Prepare_ABS(PSCROL(PREPARE_CASE_ABS)); // Preheat ABS
787793
#endif
794+
#endif
795+
#if HAS_HOTEND || HAS_HEATED_BED
788796
if (PVISI(PREPARE_CASE_COOL)) Item_Prepare_Cool(PSCROL(PREPARE_CASE_COOL)); // Cooldown
789797
#endif
790798
if (PVISI(PREPARE_CASE_LANG)) Item_Prepare_Lang(PSCROL(PREPARE_CASE_LANG)); // Language CN/EN
@@ -2664,10 +2672,10 @@ void HMI_Prepare() {
26642672
// Draw "More" icon for sub-menus
26652673
if (index_prepare < 7) Draw_More_Icon(MROWS - index_prepare + 1);
26662674

2667-
#if HAS_HOTEND
2675+
#if PREHEAT_COUNT > 1
26682676
if (index_prepare == PREPARE_CASE_ABS) Item_Prepare_ABS(MROWS);
26692677
#endif
2670-
#if HAS_PREHEAT
2678+
#if HAS_HOTEND || HAS_HEATED_BED
26712679
if (index_prepare == PREPARE_CASE_COOL) Item_Prepare_Cool(MROWS);
26722680
#endif
26732681
if (index_prepare == PREPARE_CASE_LANG) Item_Prepare_Lang(MROWS);
@@ -2743,23 +2751,21 @@ void HMI_Prepare() {
27432751
break;
27442752
#endif
27452753
#if HAS_PREHEAT
2746-
case PREPARE_CASE_PLA:
2747-
TERN_(HAS_HOTEND, thermalManager.setTargetHotend(ui.material_preset[0].hotend_temp, 0));
2748-
TERN_(HAS_HEATED_BED, thermalManager.setTargetBed(ui.material_preset[0].bed_temp));
2749-
TERN_(HAS_FAN, thermalManager.set_fan_speed(0, ui.material_preset[0].fan_speed));
2750-
break;
2751-
case PREPARE_CASE_ABS:
2752-
TERN_(HAS_HOTEND, thermalManager.setTargetHotend(ui.material_preset[1].hotend_temp, 0));
2753-
TERN_(HAS_HEATED_BED, thermalManager.setTargetBed(ui.material_preset[1].bed_temp));
2754-
TERN_(HAS_FAN, thermalManager.set_fan_speed(0, ui.material_preset[1].fan_speed));
2755-
break;
2754+
case PREPARE_CASE_PLA: ui.preheat_all(0); break;
2755+
#if PREHEAT_COUNT > 1
2756+
case PREPARE_CASE_ABS: ui.preheat_all(1); break;
2757+
#endif
2758+
#endif
2759+
2760+
#if HAS_HOTEND || HAS_HEATED_BED
27562761
case PREPARE_CASE_COOL:
27572762
TERN_(HAS_FAN, thermalManager.zero_fan_speeds());
27582763
#if HAS_HOTEND || HAS_HEATED_BED
27592764
thermalManager.disable_all_heaters();
27602765
#endif
27612766
break;
27622767
#endif
2768+
27632769
case PREPARE_CASE_LANG:
27642770
HMI_ToggleLanguage();
27652771
Draw_Prepare_Menu();
@@ -2784,9 +2790,11 @@ void Draw_Temperature_Menu() {
27842790
#if HAS_FAN
27852791
Item_AreaCopy(115, 134, 170, 146, TEMP_CASE_FAN);
27862792
#endif
2787-
#if HAS_HOTEND
2793+
#if HAS_PREHEAT
27882794
Item_AreaCopy(100, 89, 178, 101, TEMP_CASE_PLA);
2789-
Item_AreaCopy(180, 89, 260, 100, TEMP_CASE_ABS);
2795+
#if PREHEAT_COUNT > 1
2796+
Item_AreaCopy(180, 89, 260, 100, TEMP_CASE_ABS);
2797+
#endif
27902798
#endif
27912799
}
27922800
else {
@@ -2805,30 +2813,33 @@ void Draw_Temperature_Menu() {
28052813
#if HAS_FAN
28062814
DWIN_Draw_Label(TEMP_CASE_FAN, GET_TEXT_F(MSG_FAN_SPEED));
28072815
#endif
2808-
#if HAS_HOTEND
2816+
#if HAS_PREHEAT
28092817
DWIN_Draw_Label(TEMP_CASE_PLA, F(PREHEAT_1_LABEL " Preheat Settings"));
2810-
DWIN_Draw_Label(TEMP_CASE_ABS, F(PREHEAT_2_LABEL " Preheat Settings"));
2818+
#if PREHEAT_COUNT > 1
2819+
DWIN_Draw_Label(TEMP_CASE_ABS, F(PREHEAT_2_LABEL " Preheat Settings"));
2820+
#endif
28112821
#endif
28122822
#else
28132823
#if HAS_HOTEND
2814-
Item_AreaCopy(197, 104, 238, 114, TEMP_CASE_TEMP); // "Nozzle"
2815-
Item_AreaCopy(1, 89, 83, 101, TEMP_CASE_TEMP, 44); // "Temperature"
2824+
Item_AreaCopy(197, 104, 238, 114, TEMP_CASE_TEMP); // "Nozzle"
2825+
Item_AreaCopy(1, 89, 83, 101, TEMP_CASE_TEMP, 44); // "Temperature"
28162826
#endif
28172827
#if HAS_HEATED_BED
2818-
Item_AreaCopy(240, 104, 264, 114, TEMP_CASE_BED); // "Bed"
2819-
Item_AreaCopy(1, 89, 83, 101, TEMP_CASE_BED, 27); // "Temperature"
2828+
Item_AreaCopy(240, 104, 264, 114, TEMP_CASE_BED); // "Bed"
2829+
Item_AreaCopy(1, 89, 83, 101, TEMP_CASE_BED, 27); // "Temperature"
28202830
#endif
28212831
#if HAS_FAN
2822-
Item_AreaCopy( 1, 119, 61, 132, TEMP_CASE_FAN); // "Fan speed"
2832+
Item_AreaCopy( 1, 119, 61, 132, TEMP_CASE_FAN); // "Fan speed"
28232833
#endif
2824-
#if HAS_HOTEND
2825-
Item_AreaCopy(107, 76, 156, 86, TEMP_CASE_PLA); // "Preheat"
2826-
say_pla_en(52, TEMP_CASE_PLA); // "PLA"
2827-
Item_AreaCopy(150, 135, 202, 148, TEMP_CASE_PLA, 79); // "Settings"
2828-
2829-
Item_AreaCopy(107, 76, 156, 86, TEMP_CASE_ABS); // "Preheat"
2830-
say_abs_en(52, TEMP_CASE_ABS); // "ABS"
2831-
Item_AreaCopy(150, 135, 202, 148, TEMP_CASE_ABS, 81); // "Settings"
2834+
#if HAS_PREHEAT
2835+
Item_AreaCopy(107, 76, 156, 86, TEMP_CASE_PLA); // "Preheat"
2836+
say_pla_en(52, TEMP_CASE_PLA); // "PLA"
2837+
Item_AreaCopy(150, 135, 202, 148, TEMP_CASE_PLA, 79); // "Settings"
2838+
#if PREHEAT_COUNT > 1
2839+
Item_AreaCopy(107, 76, 156, 86, TEMP_CASE_ABS); // "Preheat"
2840+
say_abs_en(52, TEMP_CASE_ABS); // "ABS"
2841+
Item_AreaCopy(150, 135, 202, 148, TEMP_CASE_ABS, 81); // "Settings"
2842+
#endif
28322843
#endif
28332844
#endif
28342845
}
@@ -2851,12 +2862,12 @@ void Draw_Temperature_Menu() {
28512862
_TMENU_ICON(TEMP_CASE_FAN);
28522863
Draw_Edit_Integer3(i, thermalManager.fan_speed[0]);
28532864
#endif
2854-
#if HAS_HOTEND
2865+
#if HAS_PREHEAT
28552866
// PLA/ABS items have submenus
2856-
_TMENU_ICON(TEMP_CASE_PLA);
2857-
Draw_More_Icon(i);
2858-
_TMENU_ICON(TEMP_CASE_ABS);
2859-
Draw_More_Icon(i);
2867+
_TMENU_ICON(TEMP_CASE_PLA); Draw_More_Icon(i);
2868+
#if PREHEAT_COUNT > 1
2869+
_TMENU_ICON(TEMP_CASE_ABS); Draw_More_Icon(i);
2870+
#endif
28602871
#endif
28612872
}
28622873

@@ -3076,6 +3087,7 @@ void HMI_Temperature() {
30763087
EncoderRate.enabled = true;
30773088
break;
30783089
#endif
3090+
30793091
#if HAS_PREHEAT
30803092
case TEMP_CASE_PLA: {
30813093
checkkey = PLAPreheat;
@@ -3153,7 +3165,8 @@ void HMI_Temperature() {
31533165
Draw_Menu_Line(++i, ICON_WriteEEPROM);
31543166
#endif
31553167
} break;
3156-
#endif
3168+
#endif // HAS_PREHEAT
3169+
31573170
#if PREHEAT_COUNT > 1
31583171
case TEMP_CASE_ABS: { // ABS preheat setting
31593172
checkkey = ABSPreheat;
@@ -3236,7 +3249,7 @@ void HMI_Temperature() {
32363249

32373250
} break;
32383251

3239-
#endif // HAS_HOTEND
3252+
#endif // PREHEAT_COUNT > 1
32403253
}
32413254
}
32423255
DWIN_UpdateLCD();
@@ -3579,14 +3592,12 @@ void HMI_AdvSet() {
35793592

35803593
#if HAS_HOTEND
35813594
case ADVSET_CASE_HEPID:
3582-
thermalManager.setTargetHotend(ui.material_preset[0].hotend_temp, 0);
35833595
thermalManager.PID_autotune(ui.material_preset[0].hotend_temp, H_E0, 10, true);
35843596
break;
35853597
#endif
35863598

35873599
#if HAS_HEATED_BED
35883600
case ADVSET_CASE_BEDPID:
3589-
thermalManager.setTargetBed(ui.material_preset[0].bed_temp);
35903601
thermalManager.PID_autotune(ui.material_preset[0].bed_temp, H_BED, 10, true);
35913602
break;
35923603
#endif
@@ -3881,63 +3892,65 @@ void HMI_Tune() {
38813892
DWIN_UpdateLCD();
38823893
}
38833894

3884-
// ABS Preheat
3885-
void HMI_ABSPreheatSetting() {
3886-
EncoderState encoder_diffState = get_encoder_state();
3887-
if (encoder_diffState == ENCODER_DIFF_NO) return;
3888-
3889-
// Avoid flicker by updating only the previous menu
3890-
if (encoder_diffState == ENCODER_DIFF_CW) {
3891-
if (select_ABS.inc(1 + PREHEAT_CASE_TOTAL)) Move_Highlight(1, select_ABS.now);
3892-
}
3893-
else if (encoder_diffState == ENCODER_DIFF_CCW) {
3894-
if (select_ABS.dec()) Move_Highlight(-1, select_ABS.now);
3895-
}
3896-
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
3897-
switch (select_ABS.now) {
3898-
case CASE_BACK:
3899-
checkkey = TemperatureID;
3900-
select_temp.now = TEMP_CASE_ABS;
3901-
HMI_ValueStruct.show_mode = -1;
3902-
Draw_Temperature_Menu();
3903-
break;
3904-
#if HAS_HOTEND
3905-
case PREHEAT_CASE_TEMP:
3906-
checkkey = ETemp;
3907-
HMI_ValueStruct.E_Temp = ui.material_preset[1].hotend_temp;
3908-
Draw_Edit_Integer3(PREHEAT_CASE_TEMP, ui.material_preset[1].hotend_temp, true);
3909-
EncoderRate.enabled = true;
3910-
break;
3911-
#endif
3912-
#if HAS_HEATED_BED
3913-
case PREHEAT_CASE_BED:
3914-
checkkey = BedTemp;
3915-
HMI_ValueStruct.Bed_Temp = ui.material_preset[1].bed_temp;
3916-
Draw_Edit_Integer3(PREHEAT_CASE_BED, ui.material_preset[1].bed_temp, true);
3917-
EncoderRate.enabled = true;
3918-
break;
3919-
#endif
3920-
#if HAS_FAN
3921-
case PREHEAT_CASE_FAN:
3922-
checkkey = FanSpeed;
3923-
HMI_ValueStruct.Fan_speed = ui.material_preset[1].fan_speed;
3924-
Draw_Edit_Integer3(PREHEAT_CASE_FAN, ui.material_preset[1].fan_speed, true);
3925-
EncoderRate.enabled = true;
3895+
#if PREHEAT_COUNT > 1
3896+
// ABS Preheat
3897+
void HMI_ABSPreheatSetting() {
3898+
EncoderState encoder_diffState = get_encoder_state();
3899+
if (encoder_diffState == ENCODER_DIFF_NO) return;
3900+
3901+
// Avoid flicker by updating only the previous menu
3902+
if (encoder_diffState == ENCODER_DIFF_CW) {
3903+
if (select_ABS.inc(1 + PREHEAT_CASE_TOTAL)) Move_Highlight(1, select_ABS.now);
3904+
}
3905+
else if (encoder_diffState == ENCODER_DIFF_CCW) {
3906+
if (select_ABS.dec()) Move_Highlight(-1, select_ABS.now);
3907+
}
3908+
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
3909+
switch (select_ABS.now) {
3910+
case CASE_BACK:
3911+
checkkey = TemperatureID;
3912+
select_temp.now = TEMP_CASE_ABS;
3913+
HMI_ValueStruct.show_mode = -1;
3914+
Draw_Temperature_Menu();
39263915
break;
3927-
#endif
3928-
#if ENABLED(EEPROM_SETTINGS)
3929-
case PREHEAT_CASE_SAVE: {
3930-
const bool success = settings.save();
3931-
HMI_AudioFeedback(success);
3932-
} break;
3933-
#endif
3934-
default: break;
3916+
#if HAS_HOTEND
3917+
case PREHEAT_CASE_TEMP:
3918+
checkkey = ETemp;
3919+
HMI_ValueStruct.E_Temp = ui.material_preset[1].hotend_temp;
3920+
Draw_Edit_Integer3(PREHEAT_CASE_TEMP, ui.material_preset[1].hotend_temp, true);
3921+
EncoderRate.enabled = true;
3922+
break;
3923+
#endif
3924+
#if HAS_HEATED_BED
3925+
case PREHEAT_CASE_BED:
3926+
checkkey = BedTemp;
3927+
HMI_ValueStruct.Bed_Temp = ui.material_preset[1].bed_temp;
3928+
Draw_Edit_Integer3(PREHEAT_CASE_BED, ui.material_preset[1].bed_temp, true);
3929+
EncoderRate.enabled = true;
3930+
break;
3931+
#endif
3932+
#if HAS_FAN
3933+
case PREHEAT_CASE_FAN:
3934+
checkkey = FanSpeed;
3935+
HMI_ValueStruct.Fan_speed = ui.material_preset[1].fan_speed;
3936+
Draw_Edit_Integer3(PREHEAT_CASE_FAN, ui.material_preset[1].fan_speed, true);
3937+
EncoderRate.enabled = true;
3938+
break;
3939+
#endif
3940+
#if ENABLED(EEPROM_SETTINGS)
3941+
case PREHEAT_CASE_SAVE: {
3942+
const bool success = settings.save();
3943+
HMI_AudioFeedback(success);
3944+
} break;
3945+
#endif
3946+
default: break;
3947+
}
39353948
}
3949+
DWIN_UpdateLCD();
39363950
}
3937-
DWIN_UpdateLCD();
3938-
}
3951+
#endif // PREHEAT_COUNT > 1
39393952

3940-
#endif
3953+
#endif // HAS_PREHEAT
39413954

39423955
// Max Speed
39433956
void HMI_MaxSpeed() {
@@ -4241,7 +4254,9 @@ void DWIN_HandleScreen() {
42414254
case Tune: HMI_Tune(); break;
42424255
#if HAS_PREHEAT
42434256
case PLAPreheat: HMI_PLAPreheatSetting(); break;
4244-
case ABSPreheat: HMI_ABSPreheatSetting(); break;
4257+
#if PREHEAT_COUNT > 1
4258+
case ABSPreheat: HMI_ABSPreheatSetting(); break;
4259+
#endif
42454260
#endif
42464261
case MaxSpeed: HMI_MaxSpeed(); break;
42474262
case MaxAcceleration: HMI_MaxAcceleration(); break;

Marlin/src/lcd/e3v2/enhanced/dwin.cpp

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2116,21 +2116,15 @@ void SetHome() {
21162116
#endif
21172117

21182118
#if HAS_PREHEAT
2119-
void SetPreheat(const uint8_t i) {
2120-
TERN_(HAS_HOTEND, thermalManager.setTargetHotend(ui.material_preset[i].hotend_temp, 0));
2121-
TERN_(HAS_HEATED_BED, thermalManager.setTargetBed(ui.material_preset[i].bed_temp));
2122-
TERN_(HAS_FAN, thermalManager.set_fan_speed(0, ui.material_preset[i].fan_speed));
2123-
}
2124-
void SetPreheat0() { SetPreheat(0); }
2125-
void SetPreheat1() { SetPreheat(1); }
2126-
void SetPreheat2() { SetPreheat(2); }
2127-
21282119
void SetCoolDown() {
21292120
TERN_(HAS_FAN, thermalManager.zero_fan_speeds());
21302121
#if HAS_HOTEND || HAS_HEATED_BED
21312122
thermalManager.disable_all_heaters();
21322123
#endif
21332124
}
2125+
void DoPreheat0() { ui.preheat_all(0); }
2126+
void DoPreheat1() { ui.preheat_all(1); }
2127+
void DoPreheat2() { ui.preheat_all(2); }
21342128
#endif
21352129

21362130
void SetLanguage() {
@@ -3125,12 +3119,12 @@ void Draw_Prepare_Menu() {
31253119
#endif
31263120
#endif
31273121
#if HAS_PREHEAT
3128-
ADDMENUITEM(ICON_PLAPreheat, GET_TEXT_F(MSG_PREHEAT_1), onDrawPreheat1, SetPreheat0);
3122+
ADDMENUITEM(ICON_PLAPreheat, GET_TEXT_F(MSG_PREHEAT_1), onDrawPreheat1, DoPreheat0);
31293123
#if PREHEAT_COUNT > 1
3130-
ADDMENUITEM(ICON_ABSPreheat, PSTR("Preheat " PREHEAT_2_LABEL), onDrawPreheat2, SetPreheat1);
3124+
ADDMENUITEM(ICON_ABSPreheat, PSTR("Preheat " PREHEAT_2_LABEL), onDrawPreheat2, DoPreheat1);
31313125
#endif
31323126
#if PREHEAT_COUNT > 2
3133-
ADDMENUITEM(ICON_CustomPreheat, GET_TEXT_F(MSG_PREHEAT_CUSTOM), onDrawMenuItem, SetPreheat2);
3127+
ADDMENUITEM(ICON_CustomPreheat, GET_TEXT_F(MSG_PREHEAT_CUSTOM), onDrawMenuItem, DoPreheat2);
31343128
#endif
31353129
ADDMENUITEM(ICON_Cool, GET_TEXT_F(MSG_COOLDOWN), onDrawCooldown, SetCoolDown);
31363130
#endif

0 commit comments

Comments
 (0)