Files
OrcaSlicer/src/slic3r/GUI/PurgeModeDialog.hpp
SoftFever 93a81179a1 feat(gui): add purge mode selector dialog
The engine already implements prime_volume_mode (Default/Saving/Fast)
but nothing in the UI could set it, leaving prime-saving unreachable on
multi-sub-nozzle extruders and fast purge unreachable on printers that
support it.

- new PurgeModeDialog with selectable Standard/Fast or
  Standard/Prime Saving cards depending on printer capability
- "Purge mode" sidebar button next to Flushing volumes; opens the
  dialog and stores the choice in the project config
- printer preset-load gating: button shown only when the printer has
  multiple sub-nozzles per extruder or sets support_fast_purge_mode;
  stale project values the printer cannot honor reset to Default
- enable fast purge on A2L 0.4 (support_fast_purge_mode), explicit
  default 0 in the common machine base
- new dialog strings added to OrcaSlicer.pot

Printers without these capabilities never show the button and their
projects keep prime_volume_mode at Default, so slicing output is
unchanged.
2026-07-10 15:41:57 +08:00

70 lines
1.5 KiB
C++

#pragma once
#include <wx/dialog.h>
#include <wx/panel.h>
#include "GUI_Utils.hpp"
#include "libslic3r/PrintConfig.hpp"
#include "Widgets/Label.hpp"
class wxStaticText;
class wxStaticBitmap;
namespace Slic3r {
namespace GUI {
class PurgeModeBtnPanel : public wxPanel
{
public:
PurgeModeBtnPanel(wxWindow *parent, const wxString &label, const wxString &detail, const std::string &icon_path);
void Select(bool selected);
protected:
void OnPaint(wxPaintEvent &event);
private:
void OnEnterWindow(wxMouseEvent &event);
void OnLeaveWindow(wxMouseEvent &event);
void UpdateStatus();
wxBitmap icon;
wxBitmap check_icon;
wxStaticBitmap *m_btn;
wxStaticBitmap *m_check_btn;
wxStaticText *m_label;
Label *m_detail;
bool m_hover{false};
bool m_selected{false};
};
enum class PurgeModeDialogType {
MultiNozzle,
FastMode
};
class PurgeModeDialog : public DPIDialog
{
public:
PurgeModeDialog(wxWindow *parent, PurgeModeDialogType dialog_type = PurgeModeDialogType::MultiNozzle);
PrimeVolumeMode get_selected_mode() const { return m_selected_mode; }
protected:
void on_dpi_changed(const wxRect &suggested_rect) override;
private:
void select_option(PrimeVolumeMode mode);
void update_panel_selection();
PurgeModeBtnPanel *m_standard_panel;
PurgeModeBtnPanel *m_saving_panel;
PrimeVolumeMode m_selected_mode;
PurgeModeDialogType m_dialog_type;
};
} // namespace GUI
} // namespace Slic3r