diff --git a/resources/web/dialog/PresetBundleDialog/index.js b/resources/web/dialog/PresetBundleDialog/index.js index b370fe8018..4ff3167d07 100644 --- a/resources/web/dialog/PresetBundleDialog/index.js +++ b/resources/web/dialog/PresetBundleDialog/index.js @@ -2,7 +2,7 @@ const bundlesById = new Map(); // bundleId -> bundle object const printersByBundle = new Map(); // bundleId -> Map(index -> printerName) const filamentsByBundle = new Map(); // bundleId -> Map(index -> filamentName) -const presetsByBundle = new Map(); // bundleId -> Map(index -> presetName) +const processesByBundle = new Map(); // bundleId -> Map(index -> presetName) const UPDATE_TOOLTIP = "Update available"; const UNAUTHORIZED_TOOLTIP = "Unauthorized bundle"; @@ -193,7 +193,7 @@ function unpackPayload(payload) { bundlesById.clear(); printersByBundle.clear(); filamentsByBundle.clear(); - presetsByBundle.clear(); + processesByBundle.clear(); const list = payload?.data || []; for (const bundle of list) { @@ -212,7 +212,7 @@ function unpackPayload(payload) { printersByBundle.set(id, new Map((bundle.printers || []).map((name, i) => [i, name]))); filamentsByBundle.set(id, new Map((bundle.filaments || []).map((name, i) => [i, name]))); - presetsByBundle.set(id, new Map((bundle.presets || []).map((name, i) => [i, name]))); + processesByBundle.set(id, new Map((bundle.processes || []).map((name, i) => [i, name]))); } } @@ -277,14 +277,14 @@ function renderBottomForBundle(bundleId) { const key = String(bundleId || ""); const printers = printersByBundle.get(key) || new Map(); const filaments = filamentsByBundle.get(key) || new Map(); - const presets = presetsByBundle.get(key) || new Map(); + const processes = processesByBundle.get(key) || new Map(); // Convert to a flat list of rows { typeLabel, name } const rows = []; for (const [, name] of printers) rows.push({ type: "Printer", name }); for (const [, name] of filaments) rows.push({ type: "Filament", name }); - for (const [, name] of presets) rows.push({ type: "Preset", name }); + for (const [, name] of processes) rows.push({ type: "Process", name }); bottomList.innerHTML = rows.map((r, idx) => `
diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index b6ab6dc706..18a2723800 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -304,6 +304,9 @@ public: m_bg_color = StateColor::darkModeColorFor(wxColour("#FFFFFF")); m_fg_color = StateColor::darkModeColorFor(wxColour("#6B6A6A")); + m_progress_bg_color = StateColor::darkModeColorFor(wxColour("#DFDFDF")); + m_progress_fg_color = StateColor::darkModeColorFor(wxColour("#009688")); + m_progress_h = FromDIP(6); bool dark_mode = m_fg_color != wxColour("#6B6A6A"); wxSize sz = m_window->GetClientSize(); BitmapCache bmp_cache; @@ -333,20 +336,34 @@ public: dc.DrawLabel(m_text_version, rc, wxALIGN_CENTER); dc.SetFont(m_font_action); - rc.y = c_sz.GetHeight() * 0.88; + rc.y = c_sz.GetHeight() * 0.85; rc.height = dc.GetTextExtent(m_text_action).GetHeight(); dc.DrawLabel(m_text_action, rc, wxALIGN_CENTER); + + const wxRect progress_rc(0, c_sz.GetHeight() - m_progress_h, c_sz.GetWidth(), m_progress_h); + + dc.SetPen(*wxTRANSPARENT_PEN); + dc.SetBrush(wxBrush(m_progress_bg_color)); + dc.DrawRectangle(progress_rc); + + const int fill_width = progress_rc.GetWidth() * m_progress * 0.01; + if (fill_width > 0) { + dc.SetBrush(wxBrush(m_progress_fg_color)); + dc.DrawRectangle(0, progress_rc.GetTop(), fill_width, m_progress_h); + } } - void SetText(const wxString& text) + void SetText(const wxString& text, int progress) { - if (!text.empty()) { + int calc_progress = std::max(m_progress, std::clamp(progress, 0, 100)); + if (m_text_action != text || m_progress != calc_progress){ m_text_action = text; + m_progress = calc_progress; m_window->Refresh(); m_window->Update(); #ifdef __WXOSX__ - // without this code splash screen wouldn't be updated under OSX - wxYield(); + // without this code splash screen wouldn't be updated under OSX + wxYield(); #endif } } @@ -383,9 +400,13 @@ private: wxBitmap m_logo_bmp; wxColour m_fg_color; wxColour m_bg_color; + wxColour m_progress_bg_color; + wxColour m_progress_fg_color; wxString m_text_version = GUI_App::format_display_version(); wxString m_text_action = _L("Loading configuration") + dots; + int m_progress = 0; + int m_progress_h = 6; wxFont m_font_version = Label::Body_16; wxFont m_font_action = Label::Body_16; @@ -2856,7 +2877,7 @@ bool GUI_App::on_init_inner() //BBS use BBL splashScreen scrn = new SplashScreen(splashscreen_pos); wxYield(); - scrn->SetText(_L("Loading configuration") + dots); + scrn->SetText(_L("Loading configuration") + dots, 5); } BOOST_LOG_TRIVIAL(info) << "loading systen presets..."; @@ -3035,7 +3056,7 @@ bool GUI_App::on_init_inner() // Enable all substitutions (in both user and system profiles), but log the substitutions in user profiles only. // If there are substitutions in system profiles, then a "reconfigure" event shall be triggered, which will force // installation of a compatible system preset, thus nullifying the system preset substitutions. - if (scrn) { scrn->SetText(_L("Loading printer & filament profiles") + dots); wxYield(); } + if (scrn) { scrn->SetText(_L("Loading printer & filament profiles") + dots, 30); wxYield(); } init_params->preset_substitutions = preset_bundle->load_presets(*app_config, ForwardCompatibilitySubstitutionRule::EnableSystemSilent); } catch (const std::exception& ex) { @@ -3066,7 +3087,7 @@ bool GUI_App::on_init_inner() if (scrn) { const auto scrn_txt = _L("Creating main window") + dots; - scrn->SetText(scrn_txt); + scrn->SetText(scrn_txt, 70); wxYield(); } BOOST_LOG_TRIVIAL(info) << "create the main window"; @@ -3094,7 +3115,7 @@ bool GUI_App::on_init_inner() plater_->set_printer_technology(ptFFF); } else { - if (scrn) { scrn->SetText(_L("Loading current preset") + dots); wxYield(); } + if (scrn) { scrn->SetText(_L("Loading current preset") + dots, 85); wxYield(); } load_current_presets(); } @@ -3108,10 +3129,10 @@ bool GUI_App::on_init_inner() #ifdef __WINDOWS__ mainframe->topbar()->SaveNormalRect(); #endif - if (scrn) { scrn->SetText(_L("Showing main window") + dots); wxYield(); } + if (scrn) { scrn->SetText(_L("Showing main window") + dots, 95); wxYield(); } mainframe->Show(true); // Close the splash now that the main UI is visible. - if (scrn) { scrn->Destroy(); scrn = nullptr; } + if (scrn) { scrn->SetText(_L("Showing main window") + dots, 100); scrn->Destroy(); scrn = nullptr; } BOOST_LOG_TRIVIAL(info) << "main frame firstly shown"; //#if BBL_HAS_FIRST_PAGE diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 77ca0ad4e0..af589a127e 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -2110,8 +2110,15 @@ Sidebar::Sidebar(Plater *parent) p->m_panel_filament_title->SetBackgroundColor(title_bg); p->m_panel_filament_title->SetBackgroundColor2(0xF1F1F1); p->m_panel_filament_title->Bind(wxEVT_LEFT_UP, [this](wxMouseEvent &e) { - if (e.GetPosition().x > (p->m_flushing_volume_btn->IsShown() - ? p->m_flushing_volume_btn->GetPosition().x : (p->m_bpButton_add_filament->GetPosition().x - FromDIP(30)))) // ORCA exclude area of del button from titlebar collapse/expand feature to fix undesired collapse when user spams del filament button + if (!p || !p->m_panel_filament_content || !m_scrolled_sizer || !p->m_bpButton_set_filament || !p->m_flushing_volume_btn || !p->m_bpButton_add_filament || !ams_btn) + return; + // ORCA exclude area of del button from titlebar collapse/expand feature to fix undesired collapse when user spams del filament button + // also block fold/unfold feature when user clicks to spacing between icons + int exclude_pt = p->m_bpButton_set_filament->GetPosition().x; // maximum fixed item + if (p->m_flushing_volume_btn->IsShown()) exclude_pt = p->m_flushing_volume_btn->GetPosition().x; + else if (p->m_bpButton_add_filament->IsShown()) exclude_pt = p->m_bpButton_add_filament->GetPosition().x - FromDIP(30); // reserve spacing for delete button + else if (ams_btn->IsShown()) exclude_pt = ams_btn->GetPosition().x; + if (e.GetPosition().x > exclude_pt) return; p->m_panel_filament_content->Show(!p->m_panel_filament_content->IsShown()); m_scrolled_sizer->Layout(); diff --git a/src/slic3r/GUI/PresetBundleDialog.cpp b/src/slic3r/GUI/PresetBundleDialog.cpp index c94695c175..ac1b33dd1e 100644 --- a/src/slic3r/GUI/PresetBundleDialog.cpp +++ b/src/slic3r/GUI/PresetBundleDialog.cpp @@ -387,7 +387,7 @@ void PresetBundleDialog::ListBundles() temp["printers"] = strip_prefix(metadata.printer_presets); temp["filaments"] = strip_prefix(metadata.filament_presets); - temp["presets"] = strip_prefix(metadata.print_presets); + temp["processes"] = strip_prefix(metadata.print_presets); temp["update_available"] = metadata.update_available; temp["unauthorized"] = metadata.unauthorized;