diff --git a/CYD-Klipper/src/core/klipper/klipper_printer_parsers.cpp b/CYD-Klipper/src/core/klipper/klipper_printer_parsers.cpp index 96de5a3..5e2ed95 100644 --- a/CYD-Klipper/src/core/klipper/klipper_printer_parsers.cpp +++ b/CYD-Klipper/src/core/klipper/klipper_printer_parsers.cpp @@ -134,7 +134,7 @@ void KlipperPrinter::parse_state(JsonDocument &in) printer_data.print_progress = status["display_status"]["progress"]; const char *message = status["display_status"]["message"]; - if (message != NULL && (printer_data.popup_message == NULL || strcmp(printer_data.popup_message, message))) + if (!global_config.disable_m117_messaging && message != NULL && (printer_data.popup_message == NULL || strcmp(printer_data.popup_message, message))) { printer_data.popup_message = (char *)malloc(strlen(message) + 1); strcpy(printer_data.popup_message, message); @@ -248,12 +248,6 @@ Macros KlipperPrinter::parse_macros(JsonDocument &in) } } - if (global_config.sort_macros) - { - std::sort(macros.macros, macros.macros + macros.count, [](const char *a, const char *b) - { return strcmp(a, b) < 0; }); - } - return macros; } diff --git a/CYD-Klipper/src/core/printer_integration.cpp b/CYD-Klipper/src/core/printer_integration.cpp index 05d1460..a76ae38 100644 --- a/CYD-Klipper/src/core/printer_integration.cpp +++ b/CYD-Klipper/src/core/printer_integration.cpp @@ -94,6 +94,11 @@ BasePrinter* get_printer(int idx) return registered_printers[idx]; } +bool BasePrinter::supports_feature(PrinterFeatures feature) +{ + return supported_features & feature == feature; +} + int get_current_printer_index() { return current_printer_index; diff --git a/CYD-Klipper/src/core/printer_integration.hpp b/CYD-Klipper/src/core/printer_integration.hpp index 220aa5f..a731e34 100644 --- a/CYD-Klipper/src/core/printer_integration.hpp +++ b/CYD-Klipper/src/core/printer_integration.hpp @@ -181,6 +181,7 @@ class BasePrinter BasePrinter(unsigned char index); PrinterData* AnnouncePrinterData(); + bool supports_feature(PrinterFeatures feature); }; #define DATA_PRINTER_STATE 1 diff --git a/CYD-Klipper/src/ui/macros.cpp b/CYD-Klipper/src/ui/macros.cpp index af176d3..9afa22e 100644 --- a/CYD-Klipper/src/ui/macros.cpp +++ b/CYD-Klipper/src/ui/macros.cpp @@ -27,6 +27,12 @@ int macros_add_macros_to_panel(lv_obj_t * root_panel, BasePrinter* printer) return 0; } + if (global_config.sort_macros) + { + std::sort(macros.macros, macros.macros + macros.count, [](const char *a, const char *b) + { return strcmp(a, b) < 0; }); + } + for (int i = 0; i < macros.count; i++) { const char* macro = macros.macros[i]; diff --git a/CYD-Klipper/src/ui/panels/progress_panel.cpp b/CYD-Klipper/src/ui/panels/progress_panel.cpp index 60442c0..e44a420 100644 --- a/CYD-Klipper/src/ui/panels/progress_panel.cpp +++ b/CYD-Klipper/src/ui/panels/progress_panel.cpp @@ -79,7 +79,7 @@ void progress_panel_init(lv_obj_t* panel){ const auto button_size_mult = 1.3f; // Emergency Stop - if (global_config.show_estop){ + if (global_config.show_estop && (get_current_printer()->supports_feature(PrinterFeatureEmergencyStop))){ lv_obj_t * btn = lv_btn_create(panel); lv_obj_add_event_cb(btn, btn_click_estop, LV_EVENT_CLICKED, NULL); diff --git a/CYD-Klipper/src/ui/panels/settings_panel.cpp b/CYD-Klipper/src/ui/panels/settings_panel.cpp index 204626b..88755ce 100644 --- a/CYD-Klipper/src/ui/panels/settings_panel.cpp +++ b/CYD-Klipper/src/ui/panels/settings_panel.cpp @@ -189,11 +189,23 @@ void settings_section_theming(lv_obj_t* panel) void settings_section_behaviour(lv_obj_t* panel) { + PrinterType printer_type = get_current_printer()->printer_config->printer_type; + bool is_klipper = printer_type == PrinterTypeKlipper || printer_type == PrinterTypeKlipperSerial; + bool is_octo = printer_type == PrinterTypeOctoprint; + bool is_bambu = printer_type == PrinterTypeBambuLocal; + lv_obj_t * label = lv_label_create(panel); lv_label_set_text(label, "\nBehaviour"); - lv_create_custom_menu_dropdown("Estimated Time", panel, estimated_time_dropdown, estimated_time_options, get_current_printer()->printer_config->remaining_time_calc_mode, NULL, PRINTER_SPECIFIC_SETTING); - lv_create_custom_menu_dropdown("Stats in Progress Screen", panel, show_stats_on_progress_panel_dropdown, "None\nLayers\nPartial\nAll", get_current_printer()->printer_config->show_stats_on_progress_panel, NULL, PRINTER_SPECIFIC_SETTING); + if (is_klipper) + { + lv_create_custom_menu_dropdown("Estimated Time", panel, estimated_time_dropdown, estimated_time_options, get_current_printer()->printer_config->remaining_time_calc_mode, NULL, PRINTER_SPECIFIC_SETTING); + lv_create_custom_menu_dropdown("Stats in Progress Screen", panel, show_stats_on_progress_panel_dropdown, "None\nLayers\nPartial\nAll", get_current_printer()->printer_config->show_stats_on_progress_panel, NULL, PRINTER_SPECIFIC_SETTING); + } + else if (is_bambu) + { + lv_create_custom_menu_dropdown("Stats in Progress Screen", panel, show_stats_on_progress_panel_dropdown, "None\nLayers", get_current_printer()->printer_config->show_stats_on_progress_panel, NULL, PRINTER_SPECIFIC_SETTING); + } #ifndef CYD_SCREEN_DISABLE_TIMEOUT int wake_timeout_settings_index = 0; @@ -212,17 +224,22 @@ void settings_section_behaviour(lv_obj_t* panel) #endif lv_create_custom_menu_switch("Multi Printer Mode", panel, multi_printer_switch, global_config.multi_printer_mode); - lv_create_custom_menu_switch("Disable M117 Messaging", panel, disable_m117_messaging_switch, global_config.disable_m117_messaging); - lv_create_custom_menu_button("Configure Printer IP", panel, reset_ip_click, "Restart"); + + if (is_klipper) + { + lv_create_custom_menu_switch("Disable M117 Messaging", panel, disable_m117_messaging_switch, global_config.disable_m117_messaging); - lv_create_custom_menu_switch("Custom Filament Move Macros", panel, filament_move_mode_switch, get_current_printer()->printer_config->custom_filament_move_macros, NULL, - global_config.multi_printer_mode - ? "Calls FILAMENT_RETRACT and\nFILAMENT_EXTRUDE in temperature menu\nwhen enabled. Stored per printer." - : "Calls FILAMENT_RETRACT and\nFILAMENT_EXTRUDE in temperature menu\nwhen enabled"); + lv_create_custom_menu_switch("Custom Filament Move Macros", panel, filament_move_mode_switch, get_current_printer()->printer_config->custom_filament_move_macros, NULL, + global_config.multi_printer_mode + ? "Calls FILAMENT_RETRACT and\nFILAMENT_EXTRUDE in temperature menu\nwhen enabled. Stored per printer." + : "Calls FILAMENT_RETRACT and\nFILAMENT_EXTRUDE in temperature menu\nwhen enabled"); + + lv_create_custom_menu_switch("Show Emergency Stop", panel, show_estop_switch, global_config.show_estop); + } lv_create_custom_menu_switch("Sort Macros A->Z", panel, sort_macros_switch, global_config.sort_macros); - lv_create_custom_menu_switch("Show Emergency Stop", panel, show_estop_switch, global_config.show_estop); lv_create_custom_menu_switch("Show Full Filenames", panel, full_filenames_switch, global_config.full_filenames); + lv_create_custom_menu_button("Configure Printer Host", panel, reset_ip_click, "Restart"); } void settings_section_device(lv_obj_t* panel) diff --git a/test_printer/config.json b/test_printer/config.json new file mode 100644 index 0000000..e59e526 --- /dev/null +++ b/test_printer/config.json @@ -0,0 +1,6 @@ +{ + "instancesDB": "json", + "instances": [ + { "hostname": "localhost", "port": 7125 } + ] + } \ No newline at end of file diff --git a/test_printer/docker-compose.yml b/test_printer/docker-compose.yml new file mode 100644 index 0000000..25b176b --- /dev/null +++ b/test_printer/docker-compose.yml @@ -0,0 +1,14 @@ +services: + printer: + container_name: printer + ports: + - "7125:7125" + - "8110:8110" + image: ghcr.io/mainsail-crew/virtual-klipper-printer:master + webui: + container_name: mainsail + volumes: + - ./config.json:/usr/share/nginx/html/config.json:ro + ports: + - 6969:80 + image: ghcr.io/mainsail-crew/mainsail \ No newline at end of file