Skip to content

Commit

Permalink
changed behavior of the pause menu
Browse files Browse the repository at this point in the history
  • Loading branch information
TinkerGnome committed Feb 15, 2015
1 parent c844371 commit 49eb0a5
Show file tree
Hide file tree
Showing 6 changed files with 309 additions and 174 deletions.
178 changes: 157 additions & 21 deletions Marlin/UltiLCD2_menu_print.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,11 +91,6 @@ static void userAbortPrint()

static void checkPrintFinished()
{
if (pauseRequested)
{
lcd_print_pause();
}

if (!card.sdprinting && !is_command_queued())
{
abortPrint();
Expand All @@ -105,6 +100,11 @@ static void checkPrintFinished()
abortPrint();
menu.replace_menu(menu_t(lcd_menu_print_error, MAIN_MENU_ITEM_POS(0)));
}
// else if (pauseRequested)
// {
// menu.add_menu(menu_t(lcd_select_first_submenu, lcd_menu_print_resume, NULL, MAIN_MENU_ITEM_POS(0)), !pauseRequested);
// lcd_print_pause();
// }
}

void doStartPrint()
Expand Down Expand Up @@ -552,11 +552,11 @@ static void lcd_menu_print_printing()
// else
if (card.pause)
{
menu.add_menu(menu_t(lcd_menu_print_pause, MAIN_MENU_ITEM_POS(0)), true);
menu.add_menu(menu_t(lcd_select_first_submenu, lcd_menu_print_resume, NULL, MAIN_MENU_ITEM_POS(0)), true);
}
else
{
lcd_question_screen(lcd_menu_print_tune, NULL, PSTR("TUNE"), NULL, lcd_print_pause, PSTR("PAUSE"));
lcd_question_screen(lcd_menu_print_tune, NULL, PSTR("TUNE"), lcd_menu_print_pause, lcd_select_first_submenu, PSTR("PAUSE"));
uint8_t progress = card.getFilePos() / ((card.getFileSize() + 123) / 124);
char* c;
switch(printing_state)
Expand Down Expand Up @@ -945,18 +945,18 @@ void lcd_print_pause()
if (movesplanned() > 0 && commands_queued() < BUFSIZE)
{
card.pause = true;
menu.add_menu(menu_t(lcd_menu_print_pause, MAIN_MENU_ITEM_POS(0)), !pauseRequested);
// menu.add_menu(menu_t(lcd_menu_print_resume, MAIN_MENU_ITEM_POS(0)), !pauseRequested);
pauseRequested = false;
if (current_position[Z_AXIS] < Z_MAX_POS - 60)
enquecommand_P(PSTR("M601 X10 Y200 Z20 L20"));
enquecommand_P(PSTR("M601 X10 Y20 Z20 L20"));
else if (current_position[Z_AXIS] < Z_MAX_POS - 30)
enquecommand_P(PSTR("M601 X10 Y200 Z2 L20"));
enquecommand_P(PSTR("M601 X10 Y20 Z2 L20"));
else
enquecommand_P(PSTR("M601 X10 Y200 Z0 L20"));
enquecommand_P(PSTR("M601 X10 Y20 Z0 L20"));
}
else if (!pauseRequested)
{
lcd_lib_beep();
// lcd_lib_beep();
pauseRequested = true;
}
}
Expand All @@ -982,6 +982,7 @@ void lcd_print_abort()
static void lcd_print_resume()
{
card.pause = false;
pauseRequested = false;
menu.return_to_previous();
}

Expand All @@ -991,24 +992,30 @@ static void lcd_print_change_material()
menu.add_menu(menu_t(lcd_menu_change_material_preheat));
}

static void lcd_show_pause_menu()
{
lcd_print_pause();
menu.replace_menu(menu_t(lcd_select_first_submenu, lcd_menu_print_resume, NULL, MAIN_MENU_ITEM_POS(0)));
}

static const menu_t & get_pause_menuoption(uint8_t nr, menu_t &opt)
{
menu_index = 0;
if (nr == menu_index++)
{
opt.setData(MENU_NORMAL, lcd_print_resume);
opt.setData(MENU_NORMAL, lcd_show_pause_menu);
}
else if (nr == menu_index++)
{
opt.setData(MENU_NORMAL, lcd_print_change_material);
opt.setData(MENU_NORMAL, lcd_print_abort);
}
else if (nr == menu_index++)
{
opt.setData(MENU_NORMAL, lcd_print_tune);
}
else if (nr == menu_index++)
{
opt.setData(MENU_NORMAL, lcd_print_abort);
opt.setData(MENU_NORMAL, lcd_change_to_previous_menu);
}
return opt;
}
Expand All @@ -1022,16 +1029,141 @@ static void drawPauseSubmenu(uint8_t nr, uint8_t &flags)
, LCD_LINE_HEIGHT
, 52
, LCD_LINE_HEIGHT*4
, PSTR("RESUME|")
, PSTR("PAUSE|")
, ALIGN_CENTER
, flags);
if (flags & MENU_SELECTED)
{
lcd_lib_clear_gfx(LCD_CHAR_MARGIN_LEFT+26, LCD_LINE_HEIGHT*3+2, pauseGfx);
}
else
{
lcd_lib_draw_gfx(LCD_CHAR_MARGIN_LEFT+26, LCD_LINE_HEIGHT*3+2, pauseGfx);
}
}
else if (nr == index++)
{
LCDMenu::drawMenuString_P(LCD_GFX_WIDTH/2 + LCD_CHAR_MARGIN_LEFT+3
, LCD_LINE_HEIGHT
, 52
, LCD_LINE_HEIGHT*4
, PSTR("ABORT|")
, ALIGN_CENTER
, flags);
if (flags & MENU_SELECTED)
{
lcd_lib_clear_gfx(LCD_CHAR_MARGIN_LEFT+26, LCD_LINE_HEIGHT*3+2, startGfx);
lcd_lib_clear_gfx(LCD_GFX_WIDTH/2 + LCD_CHAR_MARGIN_LEFT+26, LCD_LINE_HEIGHT*3+2, standbyGfx);
}
else
{
lcd_lib_draw_gfx(LCD_CHAR_MARGIN_LEFT+26, LCD_LINE_HEIGHT*3+2, startGfx);
lcd_lib_draw_gfx(LCD_GFX_WIDTH/2 + LCD_CHAR_MARGIN_LEFT+26, LCD_LINE_HEIGHT*3+2, standbyGfx);
}
}
else if (nr == index++)
{
LCDMenu::drawMenuString_P(LCD_CHAR_MARGIN_LEFT+3
, BOTTOM_MENU_YPOS
, 52
, LCD_CHAR_HEIGHT
, PSTR("TUNE")
, ALIGN_CENTER
, flags);
}
else if (nr == index++)
{
LCDMenu::drawMenuBox(LCD_GFX_WIDTH/2 + LCD_CHAR_MARGIN_LEFT + 1
, BOTTOM_MENU_YPOS
, 52
, LCD_CHAR_HEIGHT
, flags);
if (flags & MENU_SELECTED)
{
lcd_lib_clear_stringP(LCD_GFX_WIDTH/2 + LCD_CHAR_MARGIN_LEFT + 3*LCD_CHAR_SPACING+1, BOTTOM_MENU_YPOS, PSTR("BACK"));
lcd_lib_clear_gfx(LCD_GFX_WIDTH/2 + 2*LCD_CHAR_SPACING, BOTTOM_MENU_YPOS, backGfx);
}
else
{
lcd_lib_draw_stringP(LCD_GFX_WIDTH/2 + LCD_CHAR_MARGIN_LEFT + 3*LCD_CHAR_SPACING+1, BOTTOM_MENU_YPOS, PSTR("BACK"));
lcd_lib_draw_gfx(LCD_GFX_WIDTH/2 + 2*LCD_CHAR_SPACING, BOTTOM_MENU_YPOS, backGfx);
}
}
}

void lcd_menu_print_pause()
{
lcd_lib_clear();
lcd_lib_draw_vline(64, 5, 46);
lcd_lib_draw_hline(3, 124, 50);

menu.process_submenu(get_pause_menuoption, 4);

for (uint8_t index=0; index<4; ++index)
{
menu.drawSubMenu(drawPauseSubmenu, index);
}
lcd_lib_update_screen();
}

static const menu_t & get_resume_menuoption(uint8_t nr, menu_t &opt)
{
menu_index = 0;
if (nr == menu_index++)
{
opt.setData(MENU_NORMAL, lcd_print_resume);
}
else if (nr == menu_index++)
{
opt.setData(MENU_NORMAL, lcd_print_change_material);
}
else if (nr == menu_index++)
{
opt.setData(MENU_NORMAL, lcd_print_tune);
}
else if (nr == menu_index++)
{
opt.setData(MENU_NORMAL, lcd_print_abort);
}
return opt;
}

static void drawResumeSubmenu(uint8_t nr, uint8_t &flags)
{
uint8_t index(0);
if (nr == index++)
{
if (card.pause && (movesplanned() == 0))
{
LCDMenu::drawMenuString_P(LCD_CHAR_MARGIN_LEFT+3
, LCD_LINE_HEIGHT
, 52
, LCD_LINE_HEIGHT*4
, PSTR("RESUME|")
, ALIGN_CENTER
, flags);
if (flags & MENU_SELECTED)
{
lcd_lib_clear_gfx(LCD_CHAR_MARGIN_LEFT+26, LCD_LINE_HEIGHT*3+2, startGfx);
}
else
{
lcd_lib_draw_gfx(LCD_CHAR_MARGIN_LEFT+26, LCD_LINE_HEIGHT*3+2, startGfx);
}
} else {
LCDMenu::drawMenuString_P(LCD_CHAR_MARGIN_LEFT+3
, LCD_LINE_HEIGHT
, 52
, LCD_LINE_HEIGHT*4
, PSTR("PAUSING|")
, ALIGN_CENTER
, flags);
if (flags & MENU_SELECTED)
{
lcd_lib_clear_gfx(LCD_CHAR_MARGIN_LEFT+26, LCD_LINE_HEIGHT*3+2, hourglassGfx);
}
else
{
lcd_lib_draw_gfx(LCD_CHAR_MARGIN_LEFT+26, LCD_LINE_HEIGHT*3+2, hourglassGfx);
}
}
}
else if (nr == index++)
Expand Down Expand Up @@ -1074,17 +1206,21 @@ static void drawPauseSubmenu(uint8_t nr, uint8_t &flags)
}
}

void lcd_menu_print_pause()
void lcd_menu_print_resume()
{
if (pauseRequested)
{
lcd_print_pause();
}
lcd_lib_clear();
lcd_lib_draw_vline(64, 5, 46);
lcd_lib_draw_hline(3, 124, 50);

menu.process_submenu(get_pause_menuoption, 4);
menu.process_submenu(get_resume_menuoption, 4);

for (uint8_t index=0; index<4; ++index)
{
menu.drawSubMenu(drawPauseSubmenu, index);
menu.drawSubMenu(drawResumeSubmenu, index);
}
lcd_lib_update_screen();
}
Expand Down
1 change: 1 addition & 0 deletions Marlin/UltiLCD2_menu_print.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ void lcd_menu_print_tune_heatup_nozzle1();
void doStartPrint();
void lcd_change_to_menu_change_material_return();
void lcd_menu_print_pause();
void lcd_menu_print_resume();

//extern bool primed;

Expand Down
9 changes: 9 additions & 0 deletions Marlin/UltiLCD2_menu_utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ void LCDMenu::replace_menu(menu_t nextMenu, bool beep)
init_menu_switch(beep);
menuStack[currentIndex] = nextMenu;
lastEncoderPos = lcd_lib_encoder_pos = nextMenu.encoderPos;
lcd_lib_button_pressed = false;
// menu initialization
if (nextMenu.initMenuFunc)
{
Expand All @@ -82,6 +83,7 @@ void LCDMenu::return_to_previous(bool beep)
// switch back to previous menu
--currentIndex;
lastEncoderPos = lcd_lib_encoder_pos = menuStack[currentIndex].encoderPos;
lcd_lib_button_pressed = false;
if (menuStack[currentIndex].initMenuFunc)
{
menuStack[currentIndex].initMenuFunc();
Expand All @@ -106,6 +108,7 @@ void LCDMenu::return_to_main(bool beep)
--currentIndex;
}
lastEncoderPos = lcd_lib_encoder_pos = menuStack[currentIndex].encoderPos;
lcd_lib_button_pressed = false;
if (menuStack[currentIndex].initMenuFunc)
{
menuStack[currentIndex].initMenuFunc();
Expand All @@ -130,6 +133,7 @@ void LCDMenu::reset_submenu()
lastEncoderPos = lcd_lib_encoder_pos = menuStack[currentIndex].encoderPos;
activeSubmenu = menu_t();
selectedSubmenu = -1;
lcd_lib_button_pressed = false;
}

void LCDMenu::drawMenuBox(uint8_t left, uint8_t top, uint8_t width, uint8_t height, uint8_t flags)
Expand Down Expand Up @@ -345,5 +349,10 @@ void LCDMenu::reset_selection()
lcd_lib_button_pressed = lcd_lib_button_down = false;
}

void LCDMenu::set_selection(int8_t index)
{
lcd_lib_encoder_pos = MAIN_MENU_ITEM_POS(index);
lastEncoderPos = lcd_lib_encoder_pos-1;
}

#endif
3 changes: 3 additions & 0 deletions Marlin/UltiLCD2_menu_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ class LCDMenu

void process_submenu(menuItemCallback_t getMenuItem, uint8_t len);
void reset_submenu();
void set_selection(int8_t index);
void drawSubMenu(menuDrawCallback_t drawFunc, uint8_t nr, uint8_t &flags);
void drawSubMenu(menuDrawCallback_t drawFunc, uint8_t nr);
FORCE_INLINE bool isSubmenuSelected() const { return (selectedSubmenu >= 0); }
Expand Down Expand Up @@ -152,5 +153,7 @@ extern uint8_t menu_index;
FORCE_INLINE void lcd_change_to_previous_menu() { menu.return_to_previous(); }
FORCE_INLINE void lcd_return_to_main_menu() { menu.return_to_main(); }
FORCE_INLINE void lcd_remove_menu() { menu.return_to_previous(false); }
FORCE_INLINE void lcd_select_first_submenu() { menu.set_selection(0); }
FORCE_INLINE void lcd_reset_submenu() { menu.reset_submenu(); }

#endif
Loading

0 comments on commit 49eb0a5

Please sign in to comment.