OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::GUI::FilamentMapDialog Class Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/FilamentMapDialog.hpp>

Inheritance diagram for Slic3r::GUI::FilamentMapDialog:
Collaboration diagram for Slic3r::GUI::FilamentMapDialog:

Public Member Functions

 FilamentMapDialog (wxWindow *parent, const std::vector< std::string > &filament_color, const std::vector< std::string > &filament_type, const std::vector< int > &filament_map, const std::vector< int > &filament_volume_map, const std::vector< int > &filaments, const FilamentMapMode mode, bool machine_synced, bool show_default=true, bool with_checkbox=false)
FilamentMapMode get_mode ()
std::vector< int > get_filament_maps () const
std::vector< int > get_filament_volume_maps () const
int ShowModal ()
void set_modal_btn_labels (const wxString &left_label, const wxString &right_label)

Private Types

enum  PageType { ptAuto , ptManual , ptDefault }

Private Member Functions

void on_ok (wxCommandEvent &event)
void on_cancel (wxCommandEvent &event)
void on_switch_mode (wxCommandEvent &event)
void on_checkbox (wxCommandEvent &event)
void update_panel_status (PageType page)

Private Attributes

FilamentMapManualPanel * m_manual_map_panel
FilamentMapAutoPanel * m_auto_map_panel
FilamentMapDefaultPanel * m_default_map_panel
CapsuleButton * m_auto_btn
CapsuleButton * m_manual_btn
CapsuleButton * m_default_btn
Button * m_ok_btn
Button * m_cancel_btn
CheckBox * m_checkbox
SmartFilamentPanel * m_smart_filament {nullptr}
bool m_fila_switch_ready {false}
PageType m_page_type
std::vector< int > m_filament_map
std::vector< int > m_filament_volume_map
std::vector< std::string > m_filament_color
std::vector< std::string > m_filament_type

Detailed Description

Member Enumeration Documentation

◆ PageType

Enumerator
ptAuto 
ptManual 
ptDefault 
40 {
41 ptAuto,
44 };
@ ptManual
Definition FilamentMapDialog.hpp:42
@ ptAuto
Definition FilamentMapDialog.hpp:41
@ ptDefault
Definition FilamentMapDialog.hpp:43

Constructor & Destructor Documentation

◆ FilamentMapDialog()

Slic3r::GUI::FilamentMapDialog::FilamentMapDialog ( wxWindow * parent,
const std::vector< std::string > & filament_color,
const std::vector< std::string > & filament_type,
const std::vector< int > & filament_map,
const std::vector< int > & filament_volume_map,
const std::vector< int > & filaments,
const FilamentMapMode mode,
bool machine_synced,
bool show_default = true,
bool with_checkbox = false )
227 : wxDialog(parent, wxID_ANY, _L("Filament grouping"), wxDefaultPosition, wxDefaultSize,wxDEFAULT_DIALOG_STYLE)
228 , m_filament_color(filament_color)
231 , m_filament_volume_map(filament_volume_map)
232{
233 SetBackgroundColour(*wxWHITE);
234
235 SetMinSize(wxSize(FromDIP(580), -1));
236 SetMaxSize(wxSize(FromDIP(580), -1));
237
238 // Orca: when a filament track switch is ready, every AMS filament reaches both nozzles, so the
239 // Match/Convenience sub-mode is dropped and Auto is presented purely as a filament-saving mode.
240 // Orca has no fmmAutoForQuality, so "only saving" collapses to "switch ready" and the remaining
241 // auto mode set is { fmmAutoForFlush }.
242 m_fila_switch_ready = wxGetApp().sidebar().is_fila_switch_ready();
243 const bool only_saving_mode = m_fila_switch_ready;
244 const bool auto_match_available = machine_synced && !m_fila_switch_ready;
245
246 if (mode < fmmManual)
248 else if (mode == fmmManual || mode == fmmNozzleManual)
249 // Orca: there is no dedicated nozzle-manual page, so treat an fmmNozzleManual plate as a manual variant and show the Custom page instead of misfiling it as "Same as Global".
251 else
253
254 wxBoxSizer *main_sizer = new wxBoxSizer(wxVERTICAL);
255 main_sizer->AddSpacer(FromDIP(22));
256
257 wxBoxSizer *mode_sizer = new wxBoxSizer(wxHORIZONTAL);
258
259 m_auto_btn = new CapsuleButton(this, PageType::ptAuto, only_saving_mode ? _L("File Saving") : _L("Auto"), false);
260 m_manual_btn = new CapsuleButton(this, PageType::ptManual, _L("Custom"), false);
261 if (show_default)
262 m_default_btn = new CapsuleButton(this, PageType::ptDefault, _L("Same as Global"), true);
263 else
264 m_default_btn = nullptr;
265
266 const int button_padding = FromDIP(2);
267 mode_sizer->AddStretchSpacer();
268 mode_sizer->Add(m_auto_btn, 1, wxALIGN_CENTER | wxLEFT | wxRIGHT, button_padding);
269 mode_sizer->Add(m_manual_btn, 1, wxALIGN_CENTER | wxLEFT | wxRIGHT, button_padding);
270 if (show_default) mode_sizer->Add(m_default_btn, 1, wxALIGN_CENTER | wxLEFT | wxRIGHT, button_padding);
271 mode_sizer->AddStretchSpacer();
272
273 main_sizer->Add(mode_sizer, 0, wxEXPAND);
274 main_sizer->AddSpacer(FromDIP(24));
275
276 auto panel_sizer = new wxBoxSizer(wxHORIZONTAL);
277
278 // Orca: fall back to the saving mode whenever Match is unavailable, which now also covers the
279 // filament-track-switch-ready case (auto_match_available folds in !m_fila_switch_ready).
280 FilamentMapMode default_auto_mode = mode >= fmmManual ? fmmAutoForFlush :
281 mode == fmmAutoForMatch && !auto_match_available ? fmmAutoForFlush :
282 mode;
283
284 m_manual_map_panel = new FilamentMapManualPanel(this, m_filament_color, m_filament_type, filaments, filament_map, filament_volume_map);
285 // A manual grouping can point filaments at a nozzle volume the extruder does not physically
286 // carry; the panel's validation timer reports that here so OK is gated on a printable map.
287 m_manual_map_panel->Bind(wxEVT_INVALID_MANUAL_MAP, [this](wxCommandEvent &event) {
289 if (!m_ok_btn->IsEnabled()) { m_ok_btn->Enable(); }
290 return;
291 }
292 if (event.GetInt()) {
293 if (!m_ok_btn->IsEnabled()) { m_ok_btn->Enable(); }
294 } else {
295 if (m_ok_btn->IsEnabled()) { m_ok_btn->Disable(); }
296 }
297 });
298 m_auto_map_panel = new FilamentMapAutoPanel(this, default_auto_mode, auto_match_available);
299 if (show_default)
300 m_default_map_panel = new FilamentMapDefaultPanel(this);
301 else
302 m_default_map_panel = nullptr;
303
304 panel_sizer->Add(m_manual_map_panel, 0, wxEXPAND);
305 panel_sizer->Add(m_auto_map_panel, 0, wxEXPAND);
306 if (show_default) panel_sizer->Add(m_default_map_panel, 0, wxEXPAND);
307 main_sizer->Add(panel_sizer, 0, wxEXPAND);
308
309 // Smart filament section, shown only in filament-saving (flush) mode when the switch is ready.
311 m_smart_filament = new SmartFilamentPanel(this);
313 main_sizer->Add(m_smart_filament, 0, wxEXPAND);
314 }
315
316 wxPanel* bottom_panel = new wxPanel(this);
317 bottom_panel->SetBackgroundColour(*wxWHITE);
318 wxBoxSizer *bottom_sizer = new wxBoxSizer(wxHORIZONTAL);
319 bottom_panel->SetSizer(bottom_sizer);
320 bottom_sizer->Fit(bottom_panel);
321
322 if(with_checkbox)
323 {
324 auto* checkbox_sizer = new wxBoxSizer(wxHORIZONTAL);
325 m_checkbox = new CheckBox(bottom_panel);
326 m_checkbox->Bind(wxEVT_TOGGLEBUTTON, &FilamentMapDialog::on_checkbox, this);
327 checkbox_sizer->Add(m_checkbox, 0, wxALIGN_CENTER, 0);
328
329 auto* checkbox_label = new Label(bottom_panel, _L("Don't remind me again"));
330 checkbox_label->SetFont(Label::Body_12);
331 checkbox_sizer->Add(checkbox_label, 0, wxLEFT| wxALIGN_CENTER , FromDIP(3));
332
333 bottom_sizer->Add(checkbox_sizer, 0 , wxALIGN_CENTER | wxALL, FromDIP(15));
334 }
335
336 bottom_sizer->AddStretchSpacer();
337
338 {
339 auto dlg_btns = new DialogButtons(bottom_panel, {"OK", "Cancel"});
340 m_ok_btn = dlg_btns->GetOK();
341 m_cancel_btn = dlg_btns->GetCANCEL();
342
343 bottom_sizer->Add(dlg_btns, 0, wxEXPAND);
344 }
345 main_sizer->Add(bottom_panel, 0, wxEXPAND | wxTOP, FromDIP(15));
346
347 m_ok_btn->Bind(wxEVT_BUTTON, &FilamentMapDialog::on_ok, this);
348 m_cancel_btn->Bind(wxEVT_BUTTON, &FilamentMapDialog::on_cancel, this);
349 SetEscapeId(wxID_CANCEL);
350 Bind(wxEVT_CHAR_HOOK, [this](wxKeyEvent& e) {
351 if (e.GetKeyCode() == WXK_ESCAPE) {
352 if (IsModal())
353 EndModal(wxID_CANCEL);
354 else
355 Close();
356 return;
357 }
358 e.Skip();
359 });
360
361 m_auto_btn->Bind(wxEVT_BUTTON, &FilamentMapDialog::on_switch_mode, this);
362 m_manual_btn->Bind(wxEVT_BUTTON, &FilamentMapDialog::on_switch_mode, this);
363 if (show_default) m_default_btn->Bind(wxEVT_BUTTON, &FilamentMapDialog::on_switch_mode, this);
364
365 SetSizer(main_sizer);
366 Layout();
367 Fit();
368
369 CenterOnParent();
370 wxGetApp().UpdateDlgDarkUI(this);
371}
#define _L(s)
Definition OBJ.cpp:34
static wxFont Body_12
Definition Label.hpp:55
CheckBox * m_checkbox
Definition FilamentMapDialog.hpp:92
std::vector< int > m_filament_volume_map
Definition FilamentMapDialog.hpp:101
FilamentMapDefaultPanel * m_default_map_panel
Definition FilamentMapDialog.hpp:84
FilamentMapAutoPanel * m_auto_map_panel
Definition FilamentMapDialog.hpp:83
void on_cancel(wxCommandEvent &event)
Definition FilamentMapDialog.cpp:418
SmartFilamentPanel * m_smart_filament
Definition FilamentMapDialog.hpp:93
Button * m_ok_btn
Definition FilamentMapDialog.hpp:90
Button * m_cancel_btn
Definition FilamentMapDialog.hpp:91
std::vector< std::string > m_filament_type
Definition FilamentMapDialog.hpp:103
PageType m_page_type
Definition FilamentMapDialog.hpp:97
std::vector< std::string > m_filament_color
Definition FilamentMapDialog.hpp:102
CapsuleButton * m_auto_btn
Definition FilamentMapDialog.hpp:86
bool m_fila_switch_ready
Definition FilamentMapDialog.hpp:95
void on_ok(wxCommandEvent &event)
Definition FilamentMapDialog.cpp:408
void on_switch_mode(wxCommandEvent &event)
Definition FilamentMapDialog.cpp:462
CapsuleButton * m_default_btn
Definition FilamentMapDialog.hpp:88
FilamentMapMode get_mode()
Definition FilamentMapDialog.cpp:373
std::vector< int > m_filament_map
Definition FilamentMapDialog.hpp:100
FilamentMapManualPanel * m_manual_map_panel
Definition FilamentMapDialog.hpp:82
void on_checkbox(wxCommandEvent &event)
Definition FilamentMapDialog.cpp:393
CapsuleButton * m_manual_btn
Definition FilamentMapDialog.hpp:87
zaa_minimize_perimeter_height filament_type((ConfigOptionBools, filament_soluble))((ConfigOptionStrings
zaa_minimize_perimeter_height filament_map((ConfigOptionInts, filament_volume_map))((ConfigOptionInts
FilamentMapMode
Definition PrintConfig.hpp:632
@ fmmAutoForMatch
Definition PrintConfig.hpp:634
@ fmmNozzleManual
Definition PrintConfig.hpp:636
@ fmmAutoForFlush
Definition PrintConfig.hpp:633
@ fmmManual
Definition PrintConfig.hpp:635

References _L, Label::Body_12, Slic3r::filament_map(), Slic3r::filament_type(), Slic3r::fmmAutoForFlush, Slic3r::fmmAutoForMatch, Slic3r::fmmManual, Slic3r::fmmNozzleManual, get_mode(), m_auto_btn, m_auto_map_panel, m_cancel_btn, m_checkbox, m_default_btn, m_default_map_panel, m_fila_switch_ready, m_filament_color, m_filament_map, m_filament_type, m_filament_volume_map, m_manual_btn, m_manual_map_panel, m_ok_btn, m_page_type, m_smart_filament, on_cancel(), on_checkbox(), on_ok(), on_switch_mode(), ptAuto, ptDefault, and ptManual.

Here is the call graph for this function:

Member Function Documentation

◆ get_filament_maps()

std::vector< int > Slic3r::GUI::FilamentMapDialog::get_filament_maps ( ) const
inline
59 {
61 return m_filament_map;
62 return {};
63 }

References m_filament_map, m_page_type, and ptManual.

Referenced by Slic3r::GUI::Plater::open_filament_map_setting_dialog(), and Slic3r::GUI::try_pop_up_before_slice().

Here is the caller graph for this function:

◆ get_filament_volume_maps()

std::vector< int > Slic3r::GUI::FilamentMapDialog::get_filament_volume_maps ( ) const
inline
65 {
68 return {};
69 }

References m_filament_volume_map, m_page_type, and ptManual.

Referenced by Slic3r::GUI::Plater::open_filament_map_setting_dialog(), and Slic3r::GUI::try_pop_up_before_slice().

Here is the caller graph for this function:

◆ get_mode()

FilamentMapMode Slic3r::GUI::FilamentMapDialog::get_mode ( )
374{
375 if (m_page_type == PageType::ptAuto) return m_auto_map_panel->GetMode();
377 return fmmDefault;
378}
@ fmmDefault
Definition PrintConfig.hpp:637

References Slic3r::fmmDefault, Slic3r::fmmManual, m_auto_map_panel, m_page_type, ptAuto, and ptManual.

Referenced by FilamentMapDialog(), Slic3r::GUI::Plater::open_filament_map_setting_dialog(), Slic3r::GUI::try_pop_up_before_slice(), and update_panel_status().

Here is the caller graph for this function:

◆ on_cancel()

void Slic3r::GUI::FilamentMapDialog::on_cancel ( wxCommandEvent & event)
private
418{ EndModal(wxID_CANCEL); }

Referenced by FilamentMapDialog().

Here is the caller graph for this function:

◆ on_checkbox()

void Slic3r::GUI::FilamentMapDialog::on_checkbox ( wxCommandEvent & event)
private
394{
395 bool is_checked = m_checkbox->GetValue();
396 m_checkbox->SetValue(is_checked);
397 set_pop_up_remind_flag(!is_checked);
398
399 if (is_checked) {
400 MessageDialog dialog(nullptr, _L("No further pop-up will appear. You can reopen it in 'Preferences'"), _L("Tips"), wxICON_INFORMATION | wxOK);
401 dialog.ShowModal();
402 this->Close();
403 }
404
405 event.Skip();
406}
static void set_pop_up_remind_flag(bool remind)
Definition FilamentMapDialog.cpp:34

References _L, m_checkbox, Slic3r::GUI::set_pop_up_remind_flag(), and Slic3r::GUI::DPIAware< P >::ShowModal().

Referenced by FilamentMapDialog().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ on_ok()

void Slic3r::GUI::FilamentMapDialog::on_ok ( wxCommandEvent & event)
private
409{
411 m_filament_map = m_manual_map_panel->GetFilamentMaps();
412 m_filament_volume_map = m_manual_map_panel->GetFilamentVolumeMaps();
413 }
414
415 EndModal(wxID_OK);
416}

References m_filament_map, m_filament_volume_map, m_manual_map_panel, m_page_type, and ptManual.

Referenced by FilamentMapDialog().

Here is the caller graph for this function:

◆ on_switch_mode()

void Slic3r::GUI::FilamentMapDialog::on_switch_mode ( wxCommandEvent & event)
private
463{
464 int win_id = event.GetId();
465 m_page_type = PageType(win_id);
466
468 event.Skip();
469}
void update_panel_status(PageType page)
Definition FilamentMapDialog.cpp:420
PageType
Definition FilamentMapDialog.hpp:40

References m_page_type, and update_panel_status().

Referenced by FilamentMapDialog().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ set_modal_btn_labels()

void Slic3r::GUI::FilamentMapDialog::set_modal_btn_labels ( const wxString & left_label,
const wxString & right_label )
472{
473 m_ok_btn->SetLabel(ok_label);
474 m_cancel_btn->SetLabel(cancel_label);
475}

References m_cancel_btn, and m_ok_btn.

◆ ShowModal()

int Slic3r::GUI::FilamentMapDialog::ShowModal ( )
381{
382 // The Slice-plate hover popup is a transient popup that keeps grabbing the mouse
383 // capture while shown. Left behind this modal dialog it would starve the dialog of
384 // mouse events, so close it synchronously first, whichever path opened the dialog.
385 if (MainFrame* frame = wxGetApp().mainframe;
386 frame && frame->m_filament_group_popup && frame->m_filament_group_popup->IsShown())
387 frame->m_filament_group_popup->Dismiss();
388
390 return wxDialog::ShowModal();
391}

References Slic3r::GUI::MainFrame::m_filament_group_popup, m_page_type, and update_panel_status().

Referenced by Slic3r::GUI::Plater::open_filament_map_setting_dialog(), and Slic3r::GUI::try_pop_up_before_slice().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ update_panel_status()

void Slic3r::GUI::FilamentMapDialog::update_panel_status ( PageType page)
private
421{
422 std::vector<CapsuleButton*>button_list = { m_default_btn,m_manual_btn,m_auto_btn };
423 for (auto p : button_list) {
424 if (p && p->IsSelected()) {
425 p->Select(false);
426 }
427 }
428 std::vector<wxPanel*>panel_list = { m_default_map_panel,m_manual_map_panel,m_auto_map_panel };
429 for (auto p : panel_list) {
430 if (p && p->IsShown()) {
431 p->Hide();
432 }
433 }
434
435 if (page == PageType::ptDefault) {
437 m_default_btn->Select(true);
438 m_default_map_panel->Show();
439 }
440 }
441 if (page == PageType::ptManual) {
442 m_manual_btn->Select(true);
443 m_manual_map_panel->Show();
444 }
445 if (page == PageType::ptAuto) {
446 m_auto_btn->Select(true);
447 m_auto_map_panel->Show();
448 }
449
450 // The nozzle-availability gate only constrains manual grouping; every other page must
451 // leave OK usable even if the manual page had disabled it.
452 if (page != PageType::ptManual && m_ok_btn && !m_ok_btn->IsEnabled())
453 m_ok_btn->Enable();
454
457
458 Layout();
459 Fit();
460}

References Slic3r::fmmAutoForFlush, get_mode(), m_auto_btn, m_auto_map_panel, m_default_btn, m_default_map_panel, m_manual_btn, m_manual_map_panel, m_ok_btn, m_smart_filament, ptAuto, ptDefault, and ptManual.

Referenced by on_switch_mode(), and ShowModal().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ m_auto_btn

CapsuleButton* Slic3r::GUI::FilamentMapDialog::m_auto_btn
private

◆ m_auto_map_panel

FilamentMapAutoPanel* Slic3r::GUI::FilamentMapDialog::m_auto_map_panel
private

◆ m_cancel_btn

Button* Slic3r::GUI::FilamentMapDialog::m_cancel_btn
private

◆ m_checkbox

CheckBox* Slic3r::GUI::FilamentMapDialog::m_checkbox
private

Referenced by FilamentMapDialog(), and on_checkbox().

◆ m_default_btn

CapsuleButton* Slic3r::GUI::FilamentMapDialog::m_default_btn
private

◆ m_default_map_panel

FilamentMapDefaultPanel* Slic3r::GUI::FilamentMapDialog::m_default_map_panel
private

◆ m_fila_switch_ready

bool Slic3r::GUI::FilamentMapDialog::m_fila_switch_ready {false}
private
95{false};

Referenced by FilamentMapDialog().

◆ m_filament_color

std::vector<std::string> Slic3r::GUI::FilamentMapDialog::m_filament_color
private

Referenced by FilamentMapDialog().

◆ m_filament_map

std::vector<int> Slic3r::GUI::FilamentMapDialog::m_filament_map
private

◆ m_filament_type

std::vector<std::string> Slic3r::GUI::FilamentMapDialog::m_filament_type
private

Referenced by FilamentMapDialog().

◆ m_filament_volume_map

std::vector<int> Slic3r::GUI::FilamentMapDialog::m_filament_volume_map
private

◆ m_manual_btn

CapsuleButton* Slic3r::GUI::FilamentMapDialog::m_manual_btn
private

◆ m_manual_map_panel

FilamentMapManualPanel* Slic3r::GUI::FilamentMapDialog::m_manual_map_panel
private

◆ m_ok_btn

Button* Slic3r::GUI::FilamentMapDialog::m_ok_btn
private

◆ m_page_type

PageType Slic3r::GUI::FilamentMapDialog::m_page_type
private

◆ m_smart_filament

SmartFilamentPanel* Slic3r::GUI::FilamentMapDialog::m_smart_filament {nullptr}
private
93{nullptr};

Referenced by FilamentMapDialog(), and update_panel_status().


The documentation for this class was generated from the following files: