Hide sliced info and action buttons when autoslicing

This commit is contained in:
Martin Šach 2024-12-04 13:47:42 +01:00 committed by Lukas Matena
parent dbb12e9537
commit 62f5fafe15
6 changed files with 102 additions and 22 deletions

View File

@ -416,14 +416,15 @@ void MultipleBeds::start_autoslice(std::function<void(int, bool)> select_bed_fn)
void MultipleBeds::stop_autoslice(bool restore_original)
bool MultipleBeds::stop_autoslice(bool restore_original)
{
if (! is_autoslicing())
return;
return false;
m_autoslicing = false;
if (restore_original)
m_select_bed_fn(m_autoslicing_original_bed, false);
return true;
}

View File

@ -75,7 +75,7 @@ public:
void ensure_wipe_towers_on_beds(Model& model, const std::vector<std::unique_ptr<Print>>& prints);
void start_autoslice(std::function<void(int,bool)>);
void stop_autoslice(bool restore_original);
bool stop_autoslice(bool restore_original);
bool is_autoslicing() const { return m_autoslicing; }
void autoslice_next_bed();

View File

@ -143,8 +143,10 @@ void GLCanvas3D::select_bed(int i, bool triggered_by_user)
}
wxGetApp().plater()->schedule_background_process();
wxGetApp().plater()->object_list_changed(); // Updates Slice Now / Export buttons.
if (s_multiple_beds.is_autoslicing() && triggered_by_user)
if (s_multiple_beds.is_autoslicing() && triggered_by_user) {
s_multiple_beds.stop_autoslice(false);
wxGetApp().sidebar().switch_from_autoslicing_mode();
}
});
}
@ -6716,8 +6718,10 @@ void Slic3r::GUI::GLCanvas3D::_render_bed_selector()
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2());
if (imgui.image_button(ImGui::SliceAllBtnIcon, "Slice All")) {
if (!s_multiple_beds.is_autoslicing())
if (!s_multiple_beds.is_autoslicing()) {
s_multiple_beds.start_autoslice([this](int i, bool user) { this->select_bed(i, user); });
wxGetApp().sidebar().switch_to_autoslicing_mode();
}
}
ImGui::SameLine();

View File

@ -2314,6 +2314,7 @@ unsigned int Plater::priv::update_background_process(bool force_validation, bool
notification_manager->set_slicing_progress_hidden();
}
if ((invalidated != Print::APPLY_STATUS_UNCHANGED || force_validation) && ! background_process.empty()) {
// The delayed error message is no more valid.
delayed_error_message.clear();
@ -2970,11 +2971,13 @@ void Plater::priv::set_current_panel(wxPanel* panel)
#endif // __WXMAC__
ScopeGuard guard([]() { s_reload_preview_after_switching_beds = false; });
if (current_panel == panel) {
if (! s_reload_preview_after_switching_beds)
return;
else
else {
update_background_process();
}
}
wxPanel* old_panel = current_panel;
@ -3004,7 +3007,10 @@ void Plater::priv::set_current_panel(wxPanel* panel)
if (current_panel == view3D) {
s_multiple_beds.stop_autoslice(true);
if(s_multiple_beds.stop_autoslice(true)) {
sidebar->switch_from_autoslicing_mode();
update_background_process();
}
if (old_panel == preview)
preview->get_canvas3d()->unbind_event_handlers();

View File

@ -500,20 +500,20 @@ Sidebar::Sidebar(Plater *parent)
enable_buttons(false);
auto *btns_sizer = new wxBoxSizer(wxVERTICAL);
m_btns_sizer = new wxBoxSizer(wxVERTICAL);
auto* complect_btns_sizer = new wxBoxSizer(wxHORIZONTAL);
auto *complect_btns_sizer = new wxBoxSizer(wxHORIZONTAL);
complect_btns_sizer->Add(m_btn_export_gcode, 1, wxEXPAND);
complect_btns_sizer->Add(m_btn_connect_gcode, 1, wxEXPAND | wxLEFT, margin_5);
complect_btns_sizer->Add(m_btn_send_gcode, 0, wxLEFT, margin_5);
complect_btns_sizer->Add(m_btn_export_gcode_removable, 0, wxLEFT, margin_5);
btns_sizer->Add(m_btn_reslice, 0, wxEXPAND | wxTOP, margin_5);
btns_sizer->Add(complect_btns_sizer, 0, wxEXPAND | wxTOP, margin_5);
m_btns_sizer->Add(m_btn_reslice, 0, wxEXPAND | wxTOP, margin_5);
m_btns_sizer->Add(complect_btns_sizer, 0, wxEXPAND | wxTOP, margin_5);
auto *sizer = new wxBoxSizer(wxVERTICAL);
sizer->Add(m_scrolled_panel, 1, wxEXPAND);
sizer->Add(btns_sizer, 0, wxEXPAND | wxLEFT | wxBOTTOM
sizer->Add(m_btns_sizer, 0, wxEXPAND | wxLEFT | wxBOTTOM
#ifndef _WIN32
| wxRIGHT
#endif // __linux__
@ -856,11 +856,17 @@ void Sidebar::show_info_sizer()
const int obj_idx = selection.get_object_idx();
const int inst_idx = selection.get_instance_idx();
if (m_mode < comExpert || objects.empty() || obj_idx < 0 || int(objects.size()) <= obj_idx ||
inst_idx < 0 || int(objects[obj_idx]->instances.size()) <= inst_idx ||
objects[obj_idx]->volumes.empty() || // hack to avoid crash when deleting the last object on the bed
(selection.is_single_full_object() && objects[obj_idx]->instances.size()> 1) ||
!(selection.is_single_full_instance() || selection.is_single_volume())) {
if (
m_mode < comExpert
|| objects.empty()
|| obj_idx < 0
|| int(objects.size()) <= obj_idx
|| inst_idx < 0
|| int(objects[obj_idx]->instances.size()) <= inst_idx
|| objects[obj_idx]->volumes.empty() // hack to avoid crash when deleting the last object on the bed
|| (selection.is_single_full_object() && objects[obj_idx]->instances.size()> 1)
|| !(selection.is_single_full_instance() || selection.is_single_volume())
) {
m_object_info->Show(false);
return;
}
@ -1065,6 +1071,10 @@ void Sidebar::update_sliced_info_sizer()
void Sidebar::show_sliced_info_sizer(const bool show)
{
if (m_autoslicing_mode) {
return;
}
wxWindowUpdateLocker freeze_guard(this);
m_sliced_info->Show(show);
@ -1075,6 +1085,19 @@ void Sidebar::show_sliced_info_sizer(const bool show)
m_scrolled_panel->Refresh();
}
void Sidebar::show_btns_sizer(const bool show)
{
if (m_autoslicing_mode) {
return;
}
wxWindowUpdateLocker freeze_guard(this);
m_btns_sizer->Show(show);
Layout();
m_scrolled_panel->Refresh();
}
void Sidebar::enable_buttons(bool enable)
{
m_btn_reslice->Enable(enable);
@ -1084,11 +1107,50 @@ void Sidebar::enable_buttons(bool enable)
m_btn_connect_gcode->Enable(enable);
}
bool Sidebar::show_reslice(bool show) const { return m_btn_reslice->Show(show); }
bool Sidebar::show_export(bool show) const { return m_btn_export_gcode->Show(show); }
bool Sidebar::show_send(bool show) const { return m_btn_send_gcode->Show(show); }
bool Sidebar::show_export_removable(bool show) const { return m_btn_export_gcode_removable->Show(show); }
bool Sidebar::show_connect(bool show) const { return m_btn_connect_gcode->Show(show); }
bool Sidebar::show_reslice(bool show) const {
if (this->m_autoslicing_mode) {
return false;
}
return m_btn_reslice->Show(show);
}
bool Sidebar::show_export(bool show) const {
if (this->m_autoslicing_mode) {
return false;
}
return m_btn_export_gcode->Show(show);
}
bool Sidebar::show_send(bool show) const {
if (this->m_autoslicing_mode) {
return false;
}
return m_btn_send_gcode->Show(show);
}
bool Sidebar::show_export_removable(bool show) const {
if (this->m_autoslicing_mode) {
return false;
}
return m_btn_export_gcode_removable->Show(show);
}
bool Sidebar::show_connect(bool show) const {
if (this->m_autoslicing_mode) {
return false;
}
return m_btn_connect_gcode->Show(show);
}
void Sidebar::switch_to_autoslicing_mode() {
this->show_sliced_info_sizer(false);
this->show_btns_sizer(false);
this->m_autoslicing_mode = true;
}
void Sidebar::switch_from_autoslicing_mode() {
if (!this->m_autoslicing_mode) {
return;
}
this->m_autoslicing_mode = false;
this->show_sliced_info_sizer(true);
}
void Sidebar::update_mode()

View File

@ -75,6 +75,7 @@ class Sidebar : public wxPanel
ObjectList* m_object_list { nullptr };
ObjectInfo* m_object_info { nullptr };
SlicedInfo* m_sliced_info { nullptr };
wxBoxSizer* m_btns_sizer { nullptr };
wxButton* m_btn_export_gcode { nullptr };
wxButton* m_btn_reslice { nullptr };
@ -87,6 +88,7 @@ class Sidebar : public wxPanel
std::unique_ptr<ObjectSettings> m_object_settings;
std::unique_ptr<ObjectLayers> m_object_layers;
bool m_autoslicing_mode{ false };
#ifdef _WIN32
wxString m_reslice_btn_tooltip;
#endif
@ -117,6 +119,8 @@ public:
void show_info_sizer();
void show_sliced_info_sizer(const bool show);
void show_btns_sizer(const bool show);
void update_sliced_info_sizer();
void enable_buttons(bool enable);
@ -127,6 +131,9 @@ public:
bool show_export_removable(bool show) const;
bool show_connect(bool show) const;
void switch_to_autoslicing_mode();
void switch_from_autoslicing_mode();
void collapse(bool collapse);
void set_extruders_count(size_t extruders_count);