mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2026-03-16 08:15:36 -06:00
Merge 6147d81e4e into 494601eea5
This commit is contained in:
commit
5431156483
3 changed files with 61 additions and 2 deletions
|
|
@ -858,7 +858,9 @@ namespace Slic3r
|
|||
{
|
||||
if (MachineObject* obj_ = get_selected_machine()) {
|
||||
GUI::wxGetApp().sidebar().update_sync_status(obj_);
|
||||
if(m_agent->get_filament_sync_mode() == FilamentSyncMode::subscription)
|
||||
// Load AMS list for both subscription and pull-mode agents
|
||||
auto sync_mode = m_agent->get_filament_sync_mode();
|
||||
if(sync_mode == FilamentSyncMode::subscription || sync_mode == FilamentSyncMode::pull)
|
||||
{
|
||||
GUI::wxGetApp().sidebar().load_ams_list(obj_);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -485,6 +485,7 @@ struct Sidebar::priv
|
|||
ScalableButton* m_printer_icon = nullptr;
|
||||
ScalableButton* m_printer_connect = nullptr;
|
||||
ScalableButton* m_printer_bbl_sync = nullptr;
|
||||
ScalableButton* m_printer_sync = nullptr; // Sync button for non-BBL printers with pull-mode
|
||||
ScalableButton* m_printer_setting = nullptr;
|
||||
wxStaticText * m_text_printer_settings = nullptr;
|
||||
wxPanel* m_panel_printer_content = nullptr;
|
||||
|
|
@ -578,6 +579,15 @@ void Sidebar::priv::layout_printer(bool isBBL, bool isDual)
|
|||
//btn_sync_printer->Show(isBBL);
|
||||
m_printer_bbl_sync->Show(isBBL);
|
||||
|
||||
// Show sync button for non-BBL printers with pull-mode filament sync
|
||||
bool has_pull_mode_agent = false;
|
||||
if (auto* dev_manager = GUI::wxGetApp().getDeviceManager()) {
|
||||
if (auto* agent = dev_manager->get_agent()) {
|
||||
has_pull_mode_agent = agent->get_filament_sync_mode() == FilamentSyncMode::pull;
|
||||
}
|
||||
}
|
||||
m_printer_sync->Show(!isBBL && has_pull_mode_agent);
|
||||
|
||||
// ORCA show plate type combo box only when its supported
|
||||
PresetBundle &preset_bundle = *wxGetApp().preset_bundle;
|
||||
auto cfg = preset_bundle.printers.get_edited_preset().config;
|
||||
|
|
@ -1646,6 +1656,18 @@ Sidebar::Sidebar(Plater *parent)
|
|||
deal_btn_sync();
|
||||
});
|
||||
|
||||
// Sync button for non-BBL printers with pull-mode filament sync
|
||||
p->m_printer_sync = new ScalableButton(p->m_panel_printer_title, wxID_ANY, "printer_sync");
|
||||
p->m_printer_sync->SetToolTip(_L("Refresh filament information from printer"));
|
||||
p->m_printer_sync->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) {
|
||||
// Reload AMS list from currently selected device
|
||||
if (auto* dev_manager = GUI::wxGetApp().getDeviceManager()) {
|
||||
if (MachineObject* obj = dev_manager->get_selected_machine()) {
|
||||
load_ams_list(obj);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
p->m_printer_setting = new ScalableButton(p->m_panel_printer_title, wxID_ANY, "settings");
|
||||
p->m_printer_setting->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) {
|
||||
// p->editing_filament = -1;
|
||||
|
|
@ -1661,6 +1683,7 @@ Sidebar::Sidebar(Plater *parent)
|
|||
h_sizer_title->AddStretchSpacer();
|
||||
h_sizer_title->Add(p->m_printer_connect , 0, wxALIGN_CENTER | wxRIGHT, FromDIP(SidebarProps::WideSpacing())); // used larger margin to prevent accidental clicks
|
||||
h_sizer_title->Add(p->m_printer_bbl_sync, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(SidebarProps::WideSpacing())); // used larger margin to prevent accidental clicks
|
||||
h_sizer_title->Add(p->m_printer_sync, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(SidebarProps::WideSpacing())); // sync for non-BBL printers
|
||||
h_sizer_title->Add(p->m_printer_setting, 0, wxALIGN_CENTER);
|
||||
h_sizer_title->AddSpacer(FromDIP(SidebarProps::TitlebarMargin()));
|
||||
h_sizer_title->SetMinSize(-1, 3 * em);
|
||||
|
|
@ -2643,6 +2666,26 @@ void Sidebar::update_presets(Preset::Type preset_type)
|
|||
if (GUI::wxGetApp().plater())
|
||||
GUI::wxGetApp().plater()->update_machine_sync_status();
|
||||
|
||||
// Reload AMS filament list for non-BBL devices with pull-mode when switching presets
|
||||
// BBL devices handle their own sync, but non-BBL devices need explicit reload
|
||||
if (auto* dev_manager = GUI::wxGetApp().getDeviceManager()) {
|
||||
MachineObject* selected_device = dev_manager->get_selected_machine();
|
||||
if (selected_device && dev_manager->get_agent()) {
|
||||
// Keep filaments for non-BBL (pull-mode) devices
|
||||
if (dev_manager->get_agent()->get_filament_sync_mode() == FilamentSyncMode::pull) {
|
||||
load_ams_list(selected_device);
|
||||
} else {
|
||||
// BBL device (subscription mode), clear list
|
||||
load_ams_list(nullptr);
|
||||
}
|
||||
} else {
|
||||
// No device selected, clear AMS list
|
||||
load_ams_list(nullptr);
|
||||
}
|
||||
} else {
|
||||
load_ams_list(nullptr);
|
||||
}
|
||||
|
||||
Layout();
|
||||
|
||||
break;
|
||||
|
|
@ -2785,6 +2828,7 @@ void Sidebar::msw_rescale()
|
|||
p->m_printer_icon->msw_rescale();
|
||||
p->m_printer_connect->msw_rescale();
|
||||
p->m_printer_bbl_sync->msw_rescale();
|
||||
p->m_printer_sync->msw_rescale();
|
||||
p->m_printer_icon->msw_rescale();
|
||||
p->m_printer_setting->msw_rescale();
|
||||
|
||||
|
|
@ -2891,6 +2935,7 @@ void Sidebar::sys_color_changed()
|
|||
#endif
|
||||
//p->btn_sync_printer->SetIcon("printer_sync");
|
||||
p->m_printer_bbl_sync->msw_rescale();
|
||||
p->m_printer_sync->msw_rescale();
|
||||
p->m_printer_connect->msw_rescale();
|
||||
// for (wxWindow* btn : std::vector<wxWindow*>{ p->btn_reslice, p->btn_export_gcode })
|
||||
// wxGetApp().UpdateDarkUI(btn, true);
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@
|
|||
#include "wxExtensions.hpp"
|
||||
|
||||
#include "DeviceCore/DevManager.h"
|
||||
#include "../Utils/IPrinterAgent.hpp"
|
||||
|
||||
// A workaround for a set of issues related to text fitting into gtk widgets:
|
||||
#if defined(__WXGTK20__) || defined(__WXGTK3__)
|
||||
|
|
@ -498,7 +499,18 @@ bool PresetComboBox::add_ams_filaments(std::string selected, bool alias_name)
|
|||
{
|
||||
bool selected_in_ams = false;
|
||||
bool is_bbl_vendor_preset = m_preset_bundle->is_bbl_vendor();
|
||||
if (is_bbl_vendor_preset && !m_preset_bundle->filament_ams_list.empty()) {
|
||||
|
||||
// Also allow pull-mode printer agents (e.g., Moonraker) to show AMS filaments
|
||||
bool has_pull_mode_agent = false;
|
||||
auto* dev_manager = wxGetApp().getDeviceManager();
|
||||
if (dev_manager) {
|
||||
auto* agent = dev_manager->get_agent();
|
||||
if (agent && agent->get_filament_sync_mode() == FilamentSyncMode::pull) {
|
||||
has_pull_mode_agent = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ((is_bbl_vendor_preset || has_pull_mode_agent) && !m_preset_bundle->filament_ams_list.empty()) {
|
||||
bool dual_extruder = (m_preset_bundle->filament_ams_list.begin()->first & 0x10000) == 0;
|
||||
set_label_marker(Append(dual_extruder ? _L("Left filaments") : _L("AMS filaments"), wxNullBitmap, DD_ITEM_STYLE_SPLIT_ITEM));
|
||||
m_first_ams_filament = GetCount();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue