Browse Source

long press in non-modal mode

PavelSindler 8 years ago
parent
commit
04f8e6d61e
1 changed files with 36 additions and 52 deletions
  1. 36 52
      Firmware/ultralcd.cpp

+ 36 - 52
Firmware/ultralcd.cpp

@@ -106,13 +106,9 @@ int farm_status = 0;
 unsigned long allert_timer = millis();
 bool printer_connected = true;
 
-bool long_press = false;
+
 bool long_press_active = false;
 long long_press_timer = millis();
-long long_press_delay = millis();
-int long_press_count = 0;
-bool goto_move_z = false;
-bool move_z_flag = false;
 bool button_pressed = false;
 
 bool menuExiting = false;
@@ -282,6 +278,7 @@ bool lcd_oldcardstatus;
 #endif //ULTIPANEL
 
 menuFunc_t currentMenu = lcd_status_screen; /* function pointer to the currently active menu */
+menuFunc_t savedMenu;
 uint32_t lcd_next_update_millis;
 uint8_t lcd_status_update_delay;
 bool ignore_click = false;
@@ -1231,11 +1228,6 @@ static void _lcd_move(const char *name, int axis, int min, int max) {
   }
   if (lcdDrawUpdate) lcd_implementation_drawedit(name, ftostr31(current_position[axis]));
   if (LCD_CLICKED) lcd_goto_menu(lcd_move_menu_axis); {
-	  /*if(!long_press_active) lcd_goto_menu(lcd_move_menu_axis);
-	  else {
-		  long_press_active = false;
-		  lcd_return_to_status();
-	  }*/
   }
 }
 
@@ -4284,9 +4276,8 @@ static void lcd_quick_feedback()
 {
   lcdDrawUpdate = 2;
   blocking_enc = millis() + 500;
-  //if (button_pressed && long_press_active) long_press_active = false;
-  button_pressed = false;
 
+  button_pressed = false;
   lcd_implementation_quick_feedback();
 }
 
@@ -4638,54 +4629,47 @@ void lcd_buttons_update()
   if (READ(BTN_EN1) == 0)  newbutton |= EN_A;
   if (READ(BTN_EN2) == 0)  newbutton |= EN_B;
 #if BTN_ENC > 0
- /* if (READ(BTN_ENC) == 0) { //button pressed
-	  if (button_pressed == false) {
-		  button_pressed = true;
-		  long_press_delay = millis();
-	  }
-	  if (((millis() - long_press_delay) > 2000) && long_press_active == false) {
-		  long_press_active = true;
-		  lcd_goto_menu(lcd_move_z);
-	  }
-  }
-  else { //button not pressed
-	  if (button_pressed) {
-		  button_pressed = false;
-		  if (long_press_active)
-		  {
-			  long_press_active = false;
+  if (lcd_update_enabled == true) { //if we are in non-modal mode, long press can be used and short press triggers with button release
+	  if (READ(BTN_ENC) == 0) { //button is pressed	  
+
+		  if (button_pressed == false && long_press_active == false) {
+			  long_press_timer = millis();
+			  button_pressed = true;
 		  }
 		  else {
-			  newbutton |= EN_C;
+			  if (millis() - long_press_timer > 500) { //long press activated
+				  long_press_active = true;
+				  move_menu_scale = 1.0;
+				  savedMenu = currentMenu;
+				  lcd_goto_menu(lcd_move_z);
+			  }
 		  }
 	  }
-
-  }*/
-  if (READ(BTN_ENC) == 0) {
-	  if (button_pressed == false) {
-		  long_press_delay = millis();
-		  //long_press_count = 0;
-		  //if (blocking_enc < millis()) 
-			  button_pressed = true;
-	  }
-	  if (((millis() - long_press_delay) > 2000) && long_press_active == false) {
-
-	//	  blocking_enc = millis() + 500;
-		  long_press_active = true;
-		  //lcd_ignore_click(true);
-		  lcd_goto_menu(lcd_move_z);		  
+	  else { //button not pressed
+		  if (button_pressed) { //button was released
+			  if (long_press_active == false) { //button released before long press gets activated
+				  if (currentMenu == lcd_move_z) {
+					  //return to previously active menu
+					  //lcd_goto_menu(savedMenu);
+					  lcd_goto_menu(lcd_main_menu);
+					  lcd_return_to_status();
+				  }
+				  else {
+					  newbutton |= EN_C;
+				  }
+			  }
+			  //button_pressed is set back to false via lcd_quick_feedback function
+		  }
+		  else {
+			  long_press_active = false;
+		  }
 	  }
-	  
   }
-  else if(button_pressed){
-	  if (long_press_active == false) {
+  else { //we are in modal mode
+	  if (READ(BTN_ENC) == 0)
 		  newbutton |= EN_C;
-	  }
-	  /*else {
-		  long_press_active = false;
-	  }*/
   }
-
+  
 #endif  
   buttons = newbutton;
 #ifdef LCD_HAS_SLOW_BUTTONS