mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-12-26 17:48:35 -07:00
NEW:change mapping popup layout for multi nozzles.
jira:[Popup for multi nozzles] Change-Id: I07e6d8f0469d2dcf0037d53e2ca8e22de78ca233 (cherry picked from commit 0924fce6858654c331eafcb91e43252f62e703bf)
This commit is contained in:
parent
22ce2ebc9a
commit
8a491cd55a
4 changed files with 154 additions and 45 deletions
|
|
@ -283,13 +283,13 @@ void MaterialItem::doRender(wxDC &dc)
|
|||
|
||||
}
|
||||
|
||||
AmsMapingPopup::AmsMapingPopup(wxWindow *parent)
|
||||
AmsMapingPopup::AmsMapingPopup(wxWindow *parent)
|
||||
: PopupWindow(parent, wxBORDER_NONE)
|
||||
{
|
||||
Bind(wxEVT_PAINT, &AmsMapingPopup::paintEvent, this);
|
||||
|
||||
#if __APPLE__
|
||||
Bind(wxEVT_LEFT_DOWN, &AmsMapingPopup::on_left_down, this);
|
||||
Bind(wxEVT_LEFT_DOWN, &AmsMapingPopup::on_left_down, this);
|
||||
#endif
|
||||
|
||||
|
||||
|
|
@ -324,7 +324,7 @@ void MaterialItem::doRender(wxDC &dc)
|
|||
m_left_marea_panel = new wxPanel(this);
|
||||
m_right_marea_panel = new wxPanel(this);
|
||||
|
||||
|
||||
auto sizer_temp = new wxBoxSizer(wxHORIZONTAL);
|
||||
/*left ext*/
|
||||
m_left_extra_slot = new MappingItem(m_left_marea_panel);
|
||||
m_left_extra_slot->m_ams_id = VIRTUAL_TRAY_DEPUTY_ID;
|
||||
|
|
@ -332,8 +332,14 @@ void MaterialItem::doRender(wxDC &dc)
|
|||
m_left_extra_slot->SetSize(wxSize(FromDIP(48), FromDIP(60)));
|
||||
m_left_extra_slot->SetMinSize(wxSize(FromDIP(48), FromDIP(60)));
|
||||
m_left_extra_slot->SetMaxSize(wxSize(FromDIP(48), FromDIP(60)));
|
||||
|
||||
|
||||
|
||||
auto left_panel = new wxPanel(m_left_marea_panel);
|
||||
left_panel->SetSize(wxSize(FromDIP(182), FromDIP(60)));
|
||||
left_panel->SetMinSize(wxSize(FromDIP(182), FromDIP(60)));
|
||||
left_panel->SetMaxSize(wxSize(FromDIP(182), FromDIP(60)));
|
||||
|
||||
sizer_temp->Add(m_left_extra_slot);
|
||||
sizer_temp->Add(left_panel);
|
||||
|
||||
/*right ext*/
|
||||
m_right_extra_slot = new MappingItem(m_right_marea_panel);
|
||||
|
|
@ -342,11 +348,37 @@ void MaterialItem::doRender(wxDC &dc)
|
|||
m_right_extra_slot->SetSize(wxSize(FromDIP(48), FromDIP(60)));
|
||||
m_right_extra_slot->SetMinSize(wxSize(FromDIP(48), FromDIP(60)));
|
||||
m_right_extra_slot->SetMaxSize(wxSize(FromDIP(48), FromDIP(60)));
|
||||
|
||||
m_sizer_ams_left->Add(create_split_sizer(m_left_marea_panel, _L("Left Ams")), 0, wxEXPAND, 0);
|
||||
|
||||
m_sizer_split_ams_left = new wxBoxSizer(wxHORIZONTAL);
|
||||
auto ams_title_text = new Label(parent, _L("Left Ams"));
|
||||
ams_title_text->SetFont(::Label::Body_13);
|
||||
ams_title_text->SetForegroundColour(0x909090);
|
||||
auto m_split_left_line = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
|
||||
m_split_left_line->SetBackgroundColour(0xeeeeee);
|
||||
m_split_left_line->SetMinSize(wxSize(-1, 1));
|
||||
m_split_left_line->SetMaxSize(wxSize(-1, 1));
|
||||
m_sizer_split_ams_left->Add(0, 0, 0, wxEXPAND, 0);
|
||||
m_sizer_split_ams_left->Add(ams_title_text, 0, wxALIGN_CENTER, 0);
|
||||
m_sizer_split_ams_left->Add(m_split_left_line, 1, wxALIGN_CENTER_VERTICAL, 0);
|
||||
m_sizer_ams_left->Add(m_sizer_split_ams_left, 0, wxEXPAND, 0);
|
||||
|
||||
m_sizer_split_ams_right = new wxBoxSizer(wxHORIZONTAL);
|
||||
ams_title_text = new Label(parent, _L("Right Ams"));
|
||||
ams_title_text->SetFont(::Label::Body_13);
|
||||
ams_title_text->SetForegroundColour(0x909090);
|
||||
auto m_split_right_line = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
|
||||
m_split_right_line->SetBackgroundColour(0xeeeeee);
|
||||
m_split_right_line->SetMinSize(wxSize(-1, 1));
|
||||
m_split_right_line->SetMaxSize(wxSize(-1, 1));
|
||||
m_sizer_split_ams_right->Add(0, 0, 0, wxEXPAND, 0);
|
||||
m_sizer_split_ams_right->Add(ams_title_text, 0, wxALIGN_CENTER, 0);
|
||||
m_sizer_split_ams_right->Add(m_split_left_line, 1, wxALIGN_CENTER_VERTICAL, 0);
|
||||
m_sizer_ams_right->Add(m_sizer_split_ams_right, 0, wxEXPAND, 0);
|
||||
|
||||
m_sizer_ams_left->Add(m_sizer_ams_basket_left, 0, wxEXPAND|wxTOP, FromDIP(8));
|
||||
m_sizer_ams_left->Add(create_split_sizer(m_left_marea_panel, _L("External")), 0, wxEXPAND|wxTOP, FromDIP(8));
|
||||
m_sizer_ams_left->Add(m_left_extra_slot, 0, wxEXPAND|wxTOP, FromDIP(8));
|
||||
//m_sizer_ams_left->Add(m_left_extra_slot, 0, wxEXPAND|wxTOP, FromDIP(8));
|
||||
m_sizer_ams_left->Add(sizer_temp, 0, wxEXPAND | wxTOP, FromDIP(8));
|
||||
|
||||
m_sizer_ams_right->Add(create_split_sizer(m_right_marea_panel, _L("Right Ams")), 0, wxEXPAND, 0);
|
||||
m_sizer_ams_right->Add(m_sizer_ams_basket_right, 0, wxEXPAND|wxTOP, FromDIP(8));
|
||||
|
|
@ -357,7 +389,8 @@ void MaterialItem::doRender(wxDC &dc)
|
|||
m_left_marea_panel->SetSizer(m_sizer_ams_left);
|
||||
m_right_marea_panel->SetSizer(m_sizer_ams_right);
|
||||
|
||||
m_sizer_ams->Add(m_left_marea_panel, 0, wxEXPAND, FromDIP(0));
|
||||
//m_sizer_ams->Add(m_left_marea_panel, 0, wxEXPAND, FromDIP(0));
|
||||
m_sizer_ams->Add(m_left_marea_panel, 0, wxRIGHT, FromDIP(10));
|
||||
m_sizer_ams->Add(0, 0, 0, wxEXPAND, FromDIP(15));
|
||||
m_sizer_ams->Add(m_right_marea_panel, 0, wxEXPAND, FromDIP(0));
|
||||
|
||||
|
|
@ -367,8 +400,10 @@ void MaterialItem::doRender(wxDC &dc)
|
|||
m_warning_text->SetFont(::Label::Body_12);
|
||||
auto cant_not_match_tip = _L("Note: Only the AMS slots loaded with the same material type can be selected.");
|
||||
m_warning_text->SetLabel(format_text(cant_not_match_tip));
|
||||
m_warning_text->SetMinSize(wxSize(FromDIP(248), FromDIP(-1)));
|
||||
m_warning_text->Wrap(FromDIP(248));
|
||||
/*m_warning_text->SetMinSize(wxSize(FromDIP(248), FromDIP(-1)));
|
||||
m_warning_text->Wrap(FromDIP(248));*/
|
||||
/*m_warning_text->SetMinSize(wxSize(FromDIP(496), FromDIP(-1)));
|
||||
m_warning_text->Wrap(FromDIP(496));*/
|
||||
|
||||
m_sizer_main->Add(title_panel, 0, wxEXPAND | wxALL, FromDIP(2));
|
||||
m_sizer_main->Add(m_sizer_ams, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(14));
|
||||
|
|
@ -389,18 +424,18 @@ void MaterialItem::doRender(wxDC &dc)
|
|||
|
||||
wxBoxSizer* AmsMapingPopup::create_split_sizer(wxWindow* parent, wxString text)
|
||||
{
|
||||
wxBoxSizer* sizer_split_left_ams = new wxBoxSizer(wxHORIZONTAL);
|
||||
auto left_ams_title_text = new Label(parent, text);
|
||||
left_ams_title_text->SetFont(::Label::Body_13);
|
||||
left_ams_title_text->SetForegroundColour(0x909090);
|
||||
auto m_split_left_line = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
|
||||
m_split_left_line->SetBackgroundColour(0xeeeeee);
|
||||
m_split_left_line->SetMinSize(wxSize(-1, 1));
|
||||
m_split_left_line->SetMaxSize(wxSize(-1, 1));
|
||||
sizer_split_left_ams->Add(0, 0, 0, wxEXPAND, 0);
|
||||
sizer_split_left_ams->Add(left_ams_title_text, 0, wxALIGN_CENTER, 0);
|
||||
sizer_split_left_ams->Add(m_split_left_line, 1, wxALIGN_CENTER_VERTICAL, 0);
|
||||
return sizer_split_left_ams;
|
||||
wxBoxSizer* sizer_split_ams = new wxBoxSizer(wxHORIZONTAL);
|
||||
auto ams_title_text = new Label(parent, text);
|
||||
ams_title_text->SetFont(::Label::Body_13);
|
||||
ams_title_text->SetForegroundColour(0x909090);
|
||||
auto m_split_left_line = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
|
||||
m_split_left_line->SetBackgroundColour(0xeeeeee);
|
||||
m_split_left_line->SetMinSize(wxSize(-1, 1));
|
||||
m_split_left_line->SetMaxSize(wxSize(-1, 1));
|
||||
sizer_split_ams->Add(0, 0, 0, wxEXPAND, 0);
|
||||
sizer_split_ams->Add(ams_title_text, 0, wxALIGN_CENTER, 0);
|
||||
sizer_split_ams->Add(m_split_left_line, 1, wxALIGN_CENTER_VERTICAL, 0);
|
||||
return sizer_split_ams;
|
||||
}
|
||||
|
||||
wxString AmsMapingPopup::format_text(wxString &m_msg)
|
||||
|
|
@ -497,14 +532,14 @@ void AmsMapingPopup::update_ams_data_multi_machines()
|
|||
Fit();
|
||||
}
|
||||
|
||||
void AmsMapingPopup::update(MachineObject* obj)
|
||||
{
|
||||
void AmsMapingPopup::update(MachineObject* obj)
|
||||
{
|
||||
//BOOST_LOG_TRIVIAL(info) << "ams_mapping nozzle count " << obj->m_extder_data.nozzle.size();
|
||||
BOOST_LOG_TRIVIAL(info) << "ams_mapping total count " << obj->amsList.size();
|
||||
|
||||
|
||||
if (!obj) {return;}
|
||||
|
||||
|
||||
for (auto& ams_container : m_amsmapping_container_list) {
|
||||
ams_container->Destroy();
|
||||
}
|
||||
|
|
@ -513,15 +548,52 @@ void AmsMapingPopup::update(MachineObject* obj)
|
|||
m_amsmapping_container_sizer_list.clear();
|
||||
m_mapping_item_list.clear();
|
||||
|
||||
|
||||
/*ext*/
|
||||
if (obj->vt_slot.size() == 1) {
|
||||
const auto& full_config = wxGetApp().preset_bundle->full_config();
|
||||
size_t nozzle_nums = full_config.option<ConfigOptionFloats>("nozzle_diameter")->values.size();
|
||||
if (nozzle_nums == 1) {
|
||||
m_warning_text->SetMinSize(wxSize(FromDIP(248), FromDIP(-1)));
|
||||
m_warning_text->Wrap(FromDIP(248));
|
||||
m_left_marea_panel->Hide();
|
||||
m_right_extra_slot->Hide();
|
||||
}
|
||||
else if (obj->vt_slot.size() > 1) {
|
||||
m_left_marea_panel->Show();
|
||||
m_left_extra_slot->Hide();
|
||||
//m_left_marea_panel->Show();
|
||||
m_right_marea_panel->Show();
|
||||
m_right_extra_slot->Show();
|
||||
}
|
||||
else if (nozzle_nums > 1) {
|
||||
m_left_marea_panel->Hide();
|
||||
m_right_marea_panel->Hide();
|
||||
m_left_extra_slot->Hide();
|
||||
m_right_extra_slot->Hide();
|
||||
if (m_show_type != ShowType::LEFT_AND_RIGHT)
|
||||
{
|
||||
m_warning_text->SetMinSize(wxSize(FromDIP(248), FromDIP(-1)));
|
||||
m_warning_text->Wrap(FromDIP(248));
|
||||
}
|
||||
if (m_show_type == ShowType::LEFT)
|
||||
{
|
||||
m_sizer_split_ams_left->Show(false);
|
||||
m_left_marea_panel->Show();
|
||||
m_left_extra_slot->Show();
|
||||
}
|
||||
else if (m_show_type == ShowType::RIGHT)
|
||||
{
|
||||
m_sizer_split_ams_right->Show(false);
|
||||
m_right_marea_panel->Show();
|
||||
m_right_extra_slot->Show();
|
||||
}
|
||||
else if (m_show_type == ShowType::LEFT_AND_RIGHT)
|
||||
{
|
||||
m_warning_text->SetMinSize(wxSize(FromDIP(496), FromDIP(-1)));
|
||||
m_warning_text->Wrap(FromDIP(496));
|
||||
m_left_marea_panel->Show();
|
||||
m_left_extra_slot->Show();
|
||||
m_right_marea_panel->Show();
|
||||
m_right_extra_slot->Show();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
for (int i = 0; i < obj->vt_slot.size(); i++) {
|
||||
|
||||
|
|
|
|||
|
|
@ -51,6 +51,12 @@ enum TrayType {
|
|||
EMPTY
|
||||
};
|
||||
|
||||
enum ShowType {
|
||||
LEFT, // only show left ams and left ext
|
||||
RIGHT, //only show right ams and right ext
|
||||
LEFT_AND_RIGHT //show left and right ams at the same time
|
||||
};
|
||||
|
||||
struct TrayData
|
||||
{
|
||||
TrayType type;
|
||||
|
|
@ -147,32 +153,36 @@ public:
|
|||
AmsMapingPopup(wxWindow *parent);
|
||||
~AmsMapingPopup() {};
|
||||
|
||||
wxWindow* send_win{nullptr};
|
||||
wxStaticText * m_warning_text{nullptr};
|
||||
wxWindow* send_win{ nullptr };
|
||||
wxStaticText * m_warning_text{nullptr};
|
||||
std::vector<std::string> m_materials_list;
|
||||
std::vector<wxBoxSizer*> m_amsmapping_container_sizer_list;
|
||||
std::vector<wxWindow*> m_amsmapping_container_list;
|
||||
std::vector<MappingItem*> m_mapping_item_list;
|
||||
|
||||
bool m_has_unmatch_filament {false};
|
||||
bool m_supporting_mix_print {false};
|
||||
bool m_supporting_mix_print {false}; //For single extruder, can ams and ext print together?
|
||||
int m_current_filament_id;
|
||||
ShowType m_show_type;
|
||||
std::string m_tag_material;
|
||||
wxBoxSizer *m_sizer_main{nullptr};
|
||||
wxBoxSizer *m_sizer_ams{nullptr};
|
||||
wxBoxSizer *m_sizer_ams_left{nullptr};
|
||||
wxBoxSizer *m_sizer_ams_right{nullptr};
|
||||
wxBoxSizer *m_sizer_main{nullptr};
|
||||
wxBoxSizer *m_sizer_ams{nullptr};
|
||||
wxBoxSizer *m_sizer_ams_left{nullptr};
|
||||
wxBoxSizer *m_sizer_ams_right{nullptr};
|
||||
wxBoxSizer* m_sizer_ams_basket_left{ nullptr };
|
||||
wxBoxSizer* m_sizer_ams_basket_right{ nullptr };
|
||||
wxBoxSizer *m_sizer_list{nullptr};
|
||||
wxBoxSizer *m_sizer_list{nullptr};
|
||||
wxWindow *m_parent_item{nullptr};
|
||||
|
||||
MappingItem* m_left_extra_slot{nullptr};
|
||||
MappingItem* m_left_extra_slot{nullptr};
|
||||
MappingItem* m_right_extra_slot{nullptr};
|
||||
|
||||
wxPanel* m_left_marea_panel;
|
||||
wxPanel* m_right_marea_panel;
|
||||
|
||||
wxBoxSizer* m_sizer_split_ams_left;
|
||||
wxBoxSizer* m_sizer_split_ams_right;
|
||||
|
||||
wxBoxSizer* create_split_sizer(wxWindow* parent, wxString text);
|
||||
wxString format_text(wxString &m_msg);
|
||||
void set_send_win(wxWindow* win) {send_win = win;};
|
||||
|
|
@ -190,6 +200,7 @@ public:
|
|||
virtual bool ProcessLeftDown(wxMouseEvent &event) wxOVERRIDE;
|
||||
void paintEvent(wxPaintEvent &evt);
|
||||
void set_parent_item(wxWindow* item) {m_parent_item = item;};
|
||||
void set_show_type(ShowType type) { m_show_type = type; };
|
||||
std::vector<TrayData> parse_ams_mapping(std::map<std::string, Ams*> amsList);
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -918,11 +918,11 @@ int MachineObject::ams_filament_mapping(std::vector<FilamentInfo> filaments, std
|
|||
{
|
||||
tray_filaments.emplace(std::make_pair(tray_index, info));
|
||||
}
|
||||
else if (ams->second->nozzle == 0 && ext_first)
|
||||
else if (ams->second->nozzle == 0 && ext_second)
|
||||
{
|
||||
tray_filaments.emplace(std::make_pair(tray_index, info));
|
||||
}
|
||||
else if (ams->second->nozzle == 1 && ext_second)
|
||||
else if (ams->second->nozzle == 1 && ext_first)
|
||||
{
|
||||
tray_filaments.emplace(std::make_pair(tray_index, info));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1311,6 +1311,9 @@ bool SelectMachineDialog::build_nozzles_info(std::string& nozzles_info)
|
|||
}
|
||||
|
||||
bool SelectMachineDialog::is_two_nozzle_same() {
|
||||
//if two extruder are same and can be mix-used, return true
|
||||
//else return false
|
||||
//wait to fill
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -2927,7 +2930,9 @@ void SelectMachineDialog::update_show_status()
|
|||
do_ams_mapping(obj_);
|
||||
}
|
||||
|
||||
if (!m_mapping_popup.m_supporting_mix_print)
|
||||
const auto& full_config = wxGetApp().preset_bundle->full_config();
|
||||
size_t nozzle_nums = full_config.option<ConfigOptionFloats>("nozzle_diameter")->values.size();
|
||||
if (!m_mapping_popup.m_supporting_mix_print && nozzle_nums == 1)
|
||||
{
|
||||
bool useAms = false;
|
||||
bool useExt = false;
|
||||
|
|
@ -3440,7 +3445,24 @@ void SelectMachineDialog::reset_and_sync_ams_list()
|
|||
DeviceManager *dev_manager = Slic3r::GUI::wxGetApp().getDeviceManager();
|
||||
if (!dev_manager) return;
|
||||
MachineObject *obj_ = dev_manager->get_selected_machine();
|
||||
|
||||
const auto& full_config = wxGetApp().preset_bundle->full_config();
|
||||
size_t nozzle_nums = full_config.option<ConfigOptionFloats>("nozzle_diameter")->values.size();
|
||||
if (nozzle_nums > 1)
|
||||
{
|
||||
if (is_two_nozzle_same())
|
||||
{
|
||||
m_mapping_popup.set_show_type(ShowType::LEFT_AND_RIGHT);
|
||||
}
|
||||
else if (m_filaments_map[extruder] == 1)
|
||||
{
|
||||
m_mapping_popup.set_show_type(ShowType::LEFT);
|
||||
}
|
||||
else if(m_filaments_map[extruder] == 2)
|
||||
{
|
||||
m_mapping_popup.set_show_type(ShowType::RIGHT);
|
||||
}
|
||||
}
|
||||
//m_mapping_popup.set_show_type(ShowType::RIGHT);
|
||||
if (obj_ && obj_->is_support_ams_mapping()) {
|
||||
if (m_mapping_popup.IsShown()) return;
|
||||
wxPoint pos = item->ClientToScreen(wxPoint(0, 0));
|
||||
|
|
@ -3494,11 +3516,15 @@ void SelectMachineDialog::reset_and_sync_ams_list()
|
|||
}
|
||||
else
|
||||
{
|
||||
m_filament_left_panel->Hide();
|
||||
m_filament_right_panel->Hide();
|
||||
m_filament_panel->Show();
|
||||
//m_filament_panel_left_sizer->Layout();
|
||||
m_sizer_ams_mapping->SetCols(8);
|
||||
m_sizer_ams_mapping->Layout();
|
||||
m_filament_panel_sizer->Layout();
|
||||
}
|
||||
|
||||
|
||||
// reset_ams_material();//show "-"
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue