Fix AMS update

This commit is contained in:
Noisyfox
2025-05-21 21:18:53 +08:00
parent cee7041b4d
commit 4425f91caa
4 changed files with 157 additions and 104 deletions

View File

@@ -123,8 +123,8 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
m_sizer_cans->Add(m_simplebook_ams, 0, wxLEFT | wxLEFT, FromDIP(10));
// ams mode
m_simplebook_generic_cans = new wxSimplebook(m_simplebook_ams, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0);
m_simplebook_generic_cans->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR);
m_simplebook_generic_ams = new wxSimplebook(m_simplebook_ams, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0);
m_simplebook_generic_ams->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR);
// none ams mode
m_none_ams_panel = new wxPanel(m_simplebook_ams, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0);
@@ -145,12 +145,12 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
m_none_ams_panel->Layout();
//extra ams mode
m_simplebook_extra_cans = new wxSimplebook(m_simplebook_ams, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0);
m_simplebook_extra_cans->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR);
m_simplebook_extra_ams = new wxSimplebook(m_simplebook_ams, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0);
m_simplebook_extra_ams->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR);
m_simplebook_ams->AddPage(m_none_ams_panel, wxEmptyString, false);
m_simplebook_ams->AddPage(m_simplebook_generic_cans, wxEmptyString, false);
m_simplebook_ams->AddPage(m_simplebook_extra_cans, wxEmptyString, false);
m_simplebook_ams->AddPage(m_simplebook_generic_ams, wxEmptyString, false);
m_simplebook_ams->AddPage(m_simplebook_extra_ams, wxEmptyString, false);
m_panel_can->SetSizer(m_sizer_cans);
m_panel_can->Layout();
@@ -594,8 +594,6 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
post_event(wxCommandEvent(EVT_AMS_RETRY));
});
CreateAms();
SetSelection(0);
EnterNoneAMSMode();
}
@@ -905,24 +903,52 @@ void AMSControl::CreateAms()
Thaw();
}
void AMSControl::ClearAms() {
m_simplebook_generic_ams->DeleteAllPages();
m_simplebook_extra_ams->DeleteAllPages();
m_simplebook_generic_ams->DestroyChildren();
m_simplebook_extra_ams->DestroyChildren();
m_simplebook_generic_ams->Layout();
m_simplebook_extra_ams->Layout();
m_simplebook_generic_ams->Refresh();
m_simplebook_extra_ams->Refresh();
for (auto it : m_ams_preview_list) {
delete it.second;
}
m_ams_preview_list.clear();
m_current_show_ams = "";
m_current_ams = "";
m_current_select = "";
m_ams_item_list.clear();
m_sizer_prv->Clear();
}
void AMSControl::CreateAmsSingleNozzle()
{
//add ams data
for (auto ams_info = m_ams_info.begin(); ams_info != m_ams_info.end(); ams_info++) {
if (ams_info->cans.size() == GENERIC_AMS_SLOT_NUM) {
AddAmsPreview(*ams_info);
AddAms(*ams_info);
AddExtraAms(*ams_info);
}
else if (ams_info->cans.size() == 1) {
AddAmsPreview(*ams_info);
AddAms(*ams_info);
}
}
}
void AMSControl::Reset()
{
auto caninfo0_0 = Caninfo{"0", "", *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE};
auto caninfo0_1 = Caninfo{"1", "", *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE};
auto caninfo0_2 = Caninfo{"2", "", *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE};
auto caninfo0_3 = Caninfo{"3", "", *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE};
m_ams_info.clear();
ClearAms();
AMSinfo ams1 = AMSinfo{"0", std::vector<Caninfo>{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}};
AMSinfo ams2 = AMSinfo{"1", std::vector<Caninfo>{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}};
AMSinfo ams3 = AMSinfo{"2", std::vector<Caninfo>{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}};
AMSinfo ams4 = AMSinfo{"3", std::vector<Caninfo>{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}};
std::vector<AMSinfo> ams_info{ams1, ams2, ams3, ams4};
std::vector<AMSinfo>::iterator it;
UpdateAms(ams_info, true);
m_current_show_ams = "";
m_current_ams = "";
m_current_select = "";
Layout();
}
void AMSControl::show_noams_mode()
@@ -1007,79 +1033,102 @@ void AMSControl::reset_vams()
}
void AMSControl::UpdateAms(std::vector<AMSinfo> info, bool is_reset)
void AMSControl::UpdateAms(std::vector<AMSinfo> ams_info, bool is_reset)
{
std::string curr_ams_id = GetCurentAms();
std::string curr_can_id = GetCurrentCan(curr_ams_id);
m_button_area->Layout();
m_button_area->Fit();
m_button_area->Fit();
// update item
m_ams_info = info;
if (m_ams_model == AMSModel::GENERIC_AMS){
m_ams_item_list = m_ams_generic_item_list;
}
else if (m_ams_model == AMSModel::AMS_LITE) {
m_ams_item_list = m_ams_extra_item_list;
}
/*if (!test)*/{
// update item
bool fresh = false;
if (info.size() > 1) {
m_simplebook_amsprvs->Show();
m_amswin->Layout();
m_amswin->Fit();
SetSize(m_amswin->GetSize());
SetMinSize(m_amswin->GetSize());
} else {
m_simplebook_amsprvs->Hide();
m_amswin->Layout();
m_amswin->Fit();
SetSize(m_amswin->GetSize());
SetMinSize(m_amswin->GetSize());
}
size_t i = 0;
for (auto prv_it : m_ams_preview_list) {
AMSPreview* prv = prv_it.second;
if (i < info.size() && info.size() > 1) {
prv->Update(m_ams_info[i]);
prv->Open();
} else {
prv->Close();
}
i++;
}
// update cans
for (auto ams_item : m_ams_item_list) {
if (ams_item.second == nullptr) {
continue;
}
std::string ams_id = ams_item.second->get_ams_id();
AmsItem* cans = ams_item.second;
for (auto ifo : m_ams_info) {
if (ifo.ams_id == ams_id) {
cans->Update(ifo);
cans->show_sn_value(m_ams_model == AMSModel::AMS_LITE?false:true);
// basic check
if (m_ams_info.size() == ams_info.size() ) {
for (int i = 0; i < m_ams_info.size(); i++){
if (m_ams_info[i].ams_id != ams_info[i].ams_id){
fresh = true;
}
}
}
}
if ( m_current_show_ams.empty() && !is_reset ) {
if (info.size() > 0) {
SwitchAms(info[0].ams_id);
else{
fresh = true;
}
}
if (m_ams_model == AMSModel::EXT_AMS && !m_vams_lib->is_selected()) {
m_vams_lib->OnSelected();
m_ams_info.clear();
m_ams_info = ams_info;
if (fresh){
ClearAms();
//if (m_extder_data.total_extder_count >= 2){
// CreateAmsDoubleNozzle(series_name, printer_type);
//}else{
CreateAmsSingleNozzle();
//}
SetSize(wxSize(FromDIP(578), -1));
SetMinSize(wxSize(FromDIP(578), -1));
Layout();
}
if (m_ams_model == AMSModel::GENERIC_AMS){
m_ams_item_list = m_ams_generic_item_list;
}
else if (m_ams_model == AMSModel::AMS_LITE) {
m_ams_item_list = m_ams_extra_item_list;
}
if (ams_info.size() > 1) {
m_simplebook_amsprvs->Show();
m_amswin->Layout();
m_amswin->Fit();
SetSize(m_amswin->GetSize());
SetMinSize(m_amswin->GetSize());
} else {
m_simplebook_amsprvs->Hide();
m_amswin->Layout();
m_amswin->Fit();
SetSize(m_amswin->GetSize());
SetMinSize(m_amswin->GetSize());
}
// update cans
for (auto ams_item : m_ams_item_list) {
if (ams_item.second == nullptr){
continue;
}
std::string ams_id = ams_item.second->get_ams_id();
AmsItem* cans = ams_item.second;
for (auto ifo : m_ams_info) {
if (ifo.ams_id == ams_id) {
cans->Update(ifo);
cans->show_sn_value(m_ams_model == AMSModel::AMS_LITE?false:true);
}
}
}
for (auto ams_prv : m_ams_preview_list) {
std::string id = ams_prv.second->get_ams_id();
auto item = m_ams_item_list.find(id);
if (item != m_ams_item_list.end())
{ ams_prv.second->Update(item->second->get_ams_info());
}
}
if ( m_current_show_ams.empty() && !is_reset ) {
if (ams_info.size() > 0) {
SwitchAms(ams_info[0].ams_id);
}
}
if (m_ams_model == AMSModel::EXT_AMS && !m_vams_lib->is_selected()) {
m_vams_lib->OnSelected();
}
}
/*update humidity popup*/
if (m_percent_humidity_dry_popup->IsShown())
{
string target_id = m_percent_humidity_dry_popup->get_owner_ams_id();
for (const auto& the_info : info)
for (const auto& the_info : ams_info)
{
if (target_id == the_info.ams_id)
{
@@ -1110,18 +1159,18 @@ void AMSControl::AddAmsPreview(AMSinfo info)
void AMSControl::AddAms(AMSinfo info)
{
auto ams_item = new AmsItem(m_simplebook_generic_cans, info, AMSModel::GENERIC_AMS);
m_simplebook_generic_cans->AddPage(ams_item, wxEmptyString, false);
ams_item->set_selection(m_simplebook_generic_cans->GetPageCount() - 1);
auto ams_item = new AmsItem(m_simplebook_generic_ams, info, AMSModel::GENERIC_AMS);
m_simplebook_generic_ams->AddPage(ams_item, wxEmptyString, false);
ams_item->set_selection(m_simplebook_generic_ams->GetPageCount() - 1);
m_ams_generic_item_list[info.ams_id] = ams_item;
}
void AMSControl::AddExtraAms(AMSinfo info)
{
auto ams_item = new AmsItem(m_simplebook_extra_cans, info, AMSModel::AMS_LITE);
m_simplebook_extra_cans->AddPage(ams_item, wxEmptyString, false);
ams_item->set_selection(m_simplebook_extra_cans->GetPageCount() - 1);
auto ams_item = new AmsItem(m_simplebook_extra_ams, info, AMSModel::AMS_LITE);
m_simplebook_extra_ams->AddPage(ams_item, wxEmptyString, false);
ams_item->set_selection(m_simplebook_extra_ams->GetPageCount() - 1);
m_ams_extra_item_list[info.ams_id] = ams_item;
}
@@ -1177,10 +1226,10 @@ void AMSControl::SwitchAms(std::string ams_id)
if (item->get_ams_id() == ams_id) {
if (m_ams_model == AMSModel::GENERIC_AMS) {
m_simplebook_generic_cans->SetSelection(item->get_selection());
m_simplebook_generic_ams->SetSelection(item->get_selection());
}
else if (m_ams_model == AMSModel::AMS_LITE) {
m_simplebook_extra_cans->SetSelection(item->get_selection());
m_simplebook_extra_ams->SetSelection(item->get_selection());
}
}
}

View File

@@ -48,9 +48,8 @@ protected:
wxSimplebook *m_simplebook_calibration = {nullptr};
wxSimplebook *m_simplebook_amsprvs = {nullptr};
wxSimplebook *m_simplebook_ams = {nullptr};
wxSimplebook *m_simplebook_generic_cans= {nullptr};
wxSimplebook *m_simplebook_extra_cans = {nullptr};
wxSimplebook* m_simplebook_generic_ams = {nullptr};
wxSimplebook* m_simplebook_extra_ams = {nullptr};
wxSimplebook *m_simplebook_bottom = {nullptr};
@@ -133,6 +132,8 @@ public:
void UpdateStepCtrl(bool is_extrusion_exist);
void CreateAms();
void CreateAmsSingleNozzle();
void ClearAms();
void UpdateAms(std::vector<AMSinfo> info, bool is_reset = true);
void AddAms(AMSinfo info);
void AddAmsPreview(AMSinfo info);

View File

@@ -151,7 +151,7 @@ AMSrefresh::AMSrefresh(wxWindow *parent, int number, Caninfo info, const wxPoint
void AMSrefresh::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size)
{
wxWindow::Create(parent, id, pos, size, wxBORDER_NONE);
SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR);
SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR));
Bind(wxEVT_TIMER, &AMSrefresh::on_timer, this);
Bind(wxEVT_PAINT, &AMSrefresh::paintEvent, this);
@@ -249,7 +249,7 @@ void AMSrefresh::paintEvent(wxPaintEvent &evt)
wxPaintDC dc(this);
auto colour = StateColor::darkModeColorFor(AMS_CONTROL_GRAY700);
if (!wxWindow::IsEnabled()) { colour = AMS_CONTROL_GRAY500; }
if (!wxWindow::IsEnabled()) { colour = StateColor::darkModeColorFor(AMS_CONTROL_GRAY500); }
auto pot = wxPoint((size.x - m_bitmap_selected.GetBmpSize().x) / 2, (size.y - m_bitmap_selected.GetBmpSize().y) / 2);
@@ -277,6 +277,7 @@ void AMSrefresh::paintEvent(wxPaintEvent &evt)
dc.SetPen(wxPen(colour));
dc.SetBrush(wxBrush(colour));
dc.SetFont(Label::Body_11);
//dc.SetTextForeground(StateColor::darkModeColorFor(AMS_CONTROL_BLACK_COLOUR));
dc.SetTextForeground(colour);
auto tsize = dc.GetTextExtent(m_refresh_id);
pot = wxPoint((size.x - tsize.x) / 2, (size.y - tsize.y) / 2);
@@ -388,7 +389,7 @@ void AMSextruderImage::doRender(wxDC &dc)
AMSextruderImage::AMSextruderImage(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size)
{
wxWindow::Create(parent, id, pos, AMS_EXTRUDER_BITMAP_SIZE);
SetBackgroundColour(*wxWHITE);
SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE));
m_ams_extruder = ScalableBitmap(this, "monitor_ams_extruder",55);
SetSize(AMS_EXTRUDER_BITMAP_SIZE);
@@ -568,7 +569,7 @@ void AMSVirtualRoad::OnVamsLoading(bool load, wxColour col)
void AMSVirtualRoad::create(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size)
{
wxWindow::Create(parent, id, pos, wxDefaultSize, wxBORDER_NONE);
SetBackgroundColour(AMS_CONTROL_WHITE_COLOUR);
SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_WHITE_COLOUR));
Layout();
Bind(wxEVT_PAINT, &AMSVirtualRoad::paintEvent, this);
}
@@ -638,7 +639,7 @@ AMSLib::AMSLib(wxWindow *parent, std::string ams_idx, Caninfo info)
{
m_border_color = (wxColour(130, 130, 128));
m_road_def_color = AMS_CONTROL_GRAY500;
wxWindow::SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR);
wxWindow::SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR));
create(parent);
Bind(wxEVT_PAINT, &AMSLib::paintEvent, this);
@@ -1024,7 +1025,7 @@ void AMSLib::render_lite_lib(wxDC& dc)
//draw def background
dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
dc.SetBrush(wxBrush(AMS_CONTROL_DEF_LIB_BK_COLOUR));
dc.SetBrush(wxBrush(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)));
dc.DrawRoundedRectangle(FromDIP(10), FromDIP(10), size.x - FromDIP(20), size.y - FromDIP(20), 0);
if (tmp_lib_colour.GetLuminance() < 0.6) {
@@ -1421,7 +1422,7 @@ AMSRoad::AMSRoad(wxWindow *parent, wxWindowID id, Caninfo info, int canindex, in
}
Bind(wxEVT_PAINT, &AMSRoad::paintEvent, this);
wxWindow::SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR);
wxWindow::SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR));
}
void AMSRoad::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size) { wxWindow::Create(parent, id, pos, size); }
@@ -1659,7 +1660,7 @@ void AMSPreview::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, con
wxWindow::Create(parent, id, pos, size);
SetMinSize(AMS_ITEM_SIZE);
SetMaxSize(AMS_ITEM_SIZE);
SetBackgroundColour(AMS_CONTROL_WHITE_COLOUR);
SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_WHITE_COLOUR));
Refresh();
}
@@ -2042,14 +2043,13 @@ AmsItem::AmsItem(wxWindow *parent,AMSinfo info, AMSModel model) : AmsItem()
create(parent);
SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR));
Bind(wxEVT_PAINT, &AmsItem::paintEvent, this);
}
void AmsItem::create(wxWindow *parent)
{
Freeze();
SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR);
if (m_ams_model == AMSModel::GENERIC_AMS || m_ams_model == AMSModel::N3F_AMS || m_ams_model == AMSModel::N3S_AMS) {
sizer_can = new wxBoxSizer(wxHORIZONTAL);
sizer_item = new wxBoxSizer(wxVERTICAL);
@@ -2106,7 +2106,7 @@ void AmsItem::AddCan(Caninfo caninfo, int canindex, int maxcan, wxBoxSizer* size
{
auto amscan = new wxWindow(this, wxID_ANY);
amscan->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR);
amscan->SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR));
wxBoxSizer* m_sizer_ams = new wxBoxSizer(wxVERTICAL);

View File

@@ -137,6 +137,7 @@ enum FilamentStepType {
#define AMS_HUMIDITY_NO_PERCENT_SIZE wxSize(FromDIP(60), FromDIP(26))
#define AMS_HUMIDITY_DRY_WIDTH FromDIP(35)
#define GENERIC_AMS_SLOT_NUM 4
struct Caninfo
{
@@ -575,6 +576,8 @@ public:
std::string GetCurrentCan();
public:
AMSinfo get_ams_info() const { return m_info; };
std::string get_ams_id() const { return m_info.ams_id; };
std::map<std::string, AMSLib*> get_can_lib_list() const { return m_can_lib_list; };