ENH: add ams control logic for main interface

jira: none
Change-Id: Iac75cdfc1b3ccd406a59e8b4e1eb75162b5239e8
This commit is contained in:
zhimin.zeng 2024-11-29 21:16:21 +08:00 committed by lane.wei
parent 0d55524fca
commit 5407c58de8
2 changed files with 115 additions and 6 deletions

View File

@ -320,7 +320,23 @@ struct ExtruderGroup : StaticGroup
ScalableButton * btn_edit = nullptr;
ComboBox * combo_nozzle = nullptr;
AMSPreview * ams[4] = {nullptr};
void Rescale()
wxStaticText *ams_not_installed_msg{nullptr};
ScalableButton *up_down_btn{nullptr};
wxBoxSizer *hsizer_ams { nullptr };
bool is_upward{false};
int ams_n4 = 0;
int ams_n1 = 0;
void set_ams_count(int n4, int n1)
{
ams_n4 = n4;
ams_n1 = n1;
update_ams();
}
void update_ams();
void Rescale()
{
if (btn_edit)
btn_edit->msw_rescale();
@ -791,8 +807,8 @@ public:
if (ams_map.find(1) == ams_map.end()) {
ams_map[1] = 0;
}
std::string ams_info = std::to_string(ams_map[4]) + "/" + std::to_string(ams_map[1]);
//*extruder = from_u8(ams_info);
extruder->set_ams_count(ams_map[4], ams_map[1]);
}
};
@ -839,11 +855,29 @@ ExtruderGroup::ExtruderGroup(wxWindow * parent, int index, wxString const &title
}
}
wxBoxSizer * hsizer_ams = new wxBoxSizer(wxHORIZONTAL);
hsizer_ams->Add(label_ams, 1, wxALIGN_CENTER);
// AMS not installed message
ams_not_installed_msg = new wxStaticText(this, wxID_ANY, _L("Not installed"));
label_ams->SetFont(Label::Body_14);
label_ams->SetForegroundColour("#262E30");
// AMS group
for (size_t i = 0; i < 4; ++i) {
ams[i] = new AMSPreview(this, wxID_ANY, AMSinfo(), AMSModel::GENERIC_AMS);
ams[i]->Close();
}
hsizer_ams = new wxBoxSizer(wxHORIZONTAL);
hsizer_ams->SetMinSize(0, ams[0]->GetMinHeight());
hsizer_ams->Add(label_ams, 0, wxALIGN_CENTER);
if (btn_edit)
hsizer_ams->Add(btn_edit, 0, 0);
hsizer_ams->AddStretchSpacer(2);
up_down_btn = new ScalableButton(this, wxID_ANY, "dot");
up_down_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this, index](auto &evt) {
is_upward = !is_upward;
update_ams();
});
wxBoxSizer * hsizer_nozzle = new wxBoxSizer(wxHORIZONTAL);
hsizer_nozzle->Add(label_nozzle, 2, wxALIGN_CENTER);
hsizer_nozzle->Add(combo_nozzle, 3, wxEXPAND);
@ -859,6 +893,80 @@ ExtruderGroup::ExtruderGroup(wxWindow * parent, int index, wxString const &title
vsizer->Add(hsizer_nozzle, 0, wxEXPAND | wxALL, FromDIP(4));
this->sizer = vsizer;
}
AMSCountPopupWindow::UpdateAMSCount(index < 0 ? 0 : index, this);
}
void ExtruderGroup::update_ams()
{
int display_capacity = 8;
bool display_front_ams = !is_upward;
size_t i = 0;
for (; i < ams_n4 && i < 4; ++i) {
display_capacity -= 4;
bool show_this_ams = (display_capacity >= 0) && display_front_ams;
show_this_ams |= (display_capacity < 0) && !display_front_ams;
if (show_this_ams) {
AMSinfo ams_info;
ams_info.ams_type = AMSModel::GENERIC_AMS;
for (size_t i = 0; i < 4; ++i) ams_info.cans.emplace_back(Caninfo());
ams[i]->Update(ams_info);
ams[i]->Refresh();
ams[i]->Open();
} else {
ams[i]->Close();
}
}
for (; i < ams_n4 + ams_n1 && i < 4; ++i) {
display_capacity -= 2;
bool show_this_ams = (display_capacity >= 0) && display_front_ams;
show_this_ams |= (display_capacity < 0) && !display_front_ams;
if (show_this_ams) {
AMSinfo ams_info;
ams_info.ams_type = AMSModel::N3S_AMS;
ams_info.cans.emplace_back(Caninfo());
ams[i]->Update(ams_info);
ams[i]->Refresh();
ams[i]->Open();
} else {
ams[i]->Close();
}
}
if (i == 0) {
ams_not_installed_msg->Show();
up_down_btn->Hide();
for (AMSPreview *a : ams) {
a->Close();
}
} else {
ams_not_installed_msg->Hide();
for (; i < 4; ++i) { ams[i]->Close(); }
if (display_capacity < 0) {
up_down_btn->Show();
} else {
up_down_btn->Hide();
}
}
while (hsizer_ams->GetItemCount() > 2)
hsizer_ams->Remove(2);
if (ams_not_installed_msg->IsShown()) {
hsizer_ams->AddStretchSpacer(1);
hsizer_ams->Add(ams_not_installed_msg, 0, wxALIGN_CENTER);
hsizer_ams->AddStretchSpacer(1);
}
for (size_t i = 0; i < 4; ++i) {
if (ams[i]->IsShown())
hsizer_ams->Add(this->ams[i], 0, wxLEFT, FromDIP(4));
}
if (up_down_btn->IsShown()) {
hsizer_ams->AddStretchSpacer(1);
hsizer_ams->Add(up_down_btn, 0, wxALIGN_CENTER);
}
sizer->Layout();
}
void Sidebar::priv::sync_extruder_list()

View File

@ -2522,6 +2522,7 @@ void AMSPreview::Close()
void AMSPreview::Update(AMSinfo amsinfo)
{
m_amsinfo = amsinfo;
m_ams_item_type = amsinfo.ams_type;
}
void AMSPreview::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size)