Enumerate hotends for display in panel temperature settings
[clinton/Smoothieware.git] / src / modules / utils / panel / screens / PrepareScreen.cpp
index 6e46d2c..cb45b34 100644 (file)
@@ -1,8 +1,8 @@
-/*  
+/*
       This file is part of Smoothie (http://smoothieware.org/). The motion control part is heavily based on Grbl (https://github.com/simen/grbl).
       Smoothie 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.
       Smoothie 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.
-      You should have received a copy of the GNU General Public License along with Smoothie. If not, see <http://www.gnu.org/licenses/>. 
+      You should have received a copy of the GNU General Public License along with Smoothie. If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "libs/Kernel.h"
 #include "ExtruderScreen.h"
 #include "libs/nuts_bolts.h"
 #include "libs/utils.h"
-#include "libs/SerialMessage.h"
+#include "checksumm.h"
+#include "ModifyValuesScreen.h"
 #include "PublicDataRequest.h"
-#include "modules/tools/temperaturecontrol/TemperatureControlPublicAccess.h"
+#include "PublicData.h"
+#include "TemperatureControlPublicAccess.h"
 
 #include <string>
 using namespace std;
 
-PrepareScreen::PrepareScreen(){
+PrepareScreen::PrepareScreen()
+{
     // Children screens
     this->extruder_screen = (new ExtruderScreen()  )->set_parent(this);
-//    this->temp_screen     = (new TempScreen()      )->set_parent(this);
+    THEPANEL->temperature_screen->set_parent(this);
 }
 
-void PrepareScreen::on_enter(){
-    this->panel->enter_menu_mode();
-    this->panel->setup_menu(7);  // 7 menu items
-    this->refresh_screen();
+void PrepareScreen::on_enter()
+{
+    THEPANEL->enter_menu_mode();
+    THEPANEL->setup_menu(9);
+    this->refresh_menu();
 }
 
-void PrepareScreen::on_refresh(){
-    if( this->panel->menu_change() ){
-        this->refresh_screen();
+void PrepareScreen::on_refresh()
+{
+    if ( THEPANEL->menu_change() ) {
+        this->refresh_menu();
     }
-    if( this->panel->click() ){
-        this->clicked_menu_entry(this->panel->menu_current_line());
+    if ( THEPANEL->click() ) {
+        this->clicked_menu_entry(THEPANEL->get_menu_current_line());
     }
 }
 
-void PrepareScreen::refresh_screen(){
-    this->refresh_menu();
-}
-
-void PrepareScreen::display_menu_line(uint16_t line){
-    switch( line ){
-        case 0: this->panel->lcd->printf("Back"           ); break;  
-        case 1: this->panel->lcd->printf("Home All Axis"  ); break; 
-        case 2: this->panel->lcd->printf("Set Home"       ); break; 
-        case 3: this->panel->lcd->printf("Pre Heat"       ); break; 
-        case 4: this->panel->lcd->printf("Cool Down"      ); break; 
-        case 5: this->panel->lcd->printf("Extrude"        ); break; 
-        case 6: this->panel->lcd->printf("Motors off"     ); break; 
-        //case 7: this->panel->lcd->printf("Set Temperature"); break; 
+void PrepareScreen::display_menu_line(uint16_t line)
+{
+    switch ( line ) {
+        case 0: THEPANEL->lcd->printf("Back"           ); break;
+        case 1: THEPANEL->lcd->printf("Home All Axis"  ); break;
+        case 2: THEPANEL->lcd->printf("Set Home"       ); break;
+        case 3: THEPANEL->lcd->printf("Set Z0"         ); break;
+        case 4: THEPANEL->lcd->printf("Pre Heat"       ); break;
+        case 5: THEPANEL->lcd->printf("Cool Down"      ); break;
+        case 6: THEPANEL->lcd->printf("Extrude"        ); break;
+        case 7: THEPANEL->lcd->printf("Motors off"     ); break;
+        case 8: THEPANEL->lcd->printf("Set Temperature"); break;
     }
 }
 
-void PrepareScreen::clicked_menu_entry(uint16_t line){
-    switch( line ){
-        case 0: this->panel->enter_screen(this->parent); break;
-        case 1: send_command("G28"); break;
-        case 2: send_command("G92 X0 Y0 Z0"); break;
-        case 3: this->preheat(); break;
-        case 4: this->cooldown(); break;
-        case 5: this->panel->enter_screen(this->extruder_screen); break;
-        case 6: send_command("M84"); break;
-        //case 7: this->panel->enter_screen(this->temp_screen      ); break;
+void PrepareScreen::clicked_menu_entry(uint16_t line)
+{
+    switch ( line ) {
+        case 0: THEPANEL->enter_screen(this->parent); break;
+        case 1: command = "G28"; break;
+        case 2: command = "G92 X0 Y0 Z0"; break;
+        case 3: command = "G92 Z0"; break;
+        case 4: this->preheat(); break;
+        case 5: this->cooldown(); break;
+        case 6: THEPANEL->enter_screen(this->extruder_screen); break;
+        case 7: command = "M84"; break;
+        case 8: THEPANEL->enter_screen(THEPANEL->temperature_screen); break;
     }
-
 }
 
-void PrepareScreen::preheat() {
-    double t= panel->get_default_hotend_temp();
+void PrepareScreen::preheat()
+{
+    float t = THEPANEL->get_default_hotend_temp();
     THEKERNEL->public_data->set_value( temperature_control_checksum, hotend_checksum, &t );
-    t= panel->get_default_bed_temp();
+    t = THEPANEL->get_default_bed_temp();
     THEKERNEL->public_data->set_value( temperature_control_checksum, bed_checksum, &t );
 }
 
-void PrepareScreen::cooldown() {
-    double t= 0;
+void PrepareScreen::cooldown()
+{
+    float t = 0;
     THEKERNEL->public_data->set_value( temperature_control_checksum, hotend_checksum, &t );
     THEKERNEL->public_data->set_value( temperature_control_checksum, bed_checksum, &t );
 }
 
-void PrepareScreen::send_command(const char* gcstr) {
-    string cmd(gcstr);
-    struct SerialMessage message;
-    message.message = cmd;
-    message.stream = &(StreamOutput::NullStream);
-    THEKERNEL->call_event(ON_CONSOLE_LINE_RECEIVED, &message );
+// queuing commands needs to be done from main loop
+void PrepareScreen::on_main_loop()
+{
+    // change actual axis value
+    if (this->command.empty()) return;
+    send_command(this->command.c_str());
+    this->command.clear();
 }
+