NEW:AMS supports ams filament backup

Change-Id: I0bc84f52bcd88dbbc1b9614b15474433c748cc14
This commit is contained in:
tao wang 2023-03-24 16:08:20 +08:00 committed by Lane.Wei
parent f596a822e2
commit 00e1c50947
17 changed files with 585 additions and 38 deletions

View file

@ -1107,4 +1107,382 @@ void MappingContainer::doRender(wxDC& dc)
dc.DrawBitmap(ams_mapping_item_container, 0, 0);
}
AmsReplaceMaterialDialog::AmsReplaceMaterialDialog(wxWindow* parent)
: DPIDialog(parent, wxID_ANY, _L("Filaments replace"), wxDefaultPosition, wxDefaultSize, wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX)
{
SetBackgroundColour(*wxWHITE);
create();
wxGetApp().UpdateDlgDarkUI(this);
}
void AmsReplaceMaterialDialog::create()
{
SetSize(wxSize(FromDIP(376), -1));
SetMinSize(wxSize(FromDIP(376), -1));
SetMaxSize(wxSize(FromDIP(376), -1));
// set icon for dialog
std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str();
SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO));
SetSizeHints(wxDefaultSize, wxDefaultSize);
m_main_sizer = new wxBoxSizer(wxVERTICAL);
auto m_top_line = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL);
m_top_line->SetBackgroundColour(wxColour(166, 169, 170));
m_main_sizer->Add(m_top_line, 0, wxEXPAND, 0);
auto m_button_sizer = new wxBoxSizer(wxHORIZONTAL);
StateColor btn_bg_white(std::pair<wxColour, int>(AMS_CONTROL_DISABLE_COLOUR, StateColor::Disabled),
std::pair<wxColour, int>(AMS_CONTROL_DISABLE_COLOUR, StateColor::Pressed),
std::pair<wxColour, int>(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, StateColor::Hovered),
std::pair<wxColour, int>(AMS_CONTROL_WHITE_COLOUR, StateColor::Normal));
StateColor btn_bd_white(std::pair<wxColour, int>(wxColour(255, 255, 254), StateColor::Disabled),
std::pair<wxColour, int>(wxColour(38, 46, 48), StateColor::Enabled));
StateColor btn_text_white(std::pair<wxColour, int>(wxColour(255, 255, 254), StateColor::Disabled),
std::pair<wxColour, int>(wxColour(38, 46, 48), StateColor::Enabled));
auto m_button_close = new Button(this, _L("Close"));
m_button_close->SetCornerRadius(FromDIP(11));
m_button_close->SetBackgroundColor(btn_bg_white);
m_button_close->SetBorderColor(btn_bd_white);
m_button_close->SetTextColor(btn_text_white);
m_button_close->SetFont(Label::Body_13);
m_button_close->SetMinSize(wxSize(FromDIP(42), FromDIP(24)));
m_button_close->Bind(wxEVT_BUTTON, [this](auto& e) {
EndModal(wxCLOSE);
});
m_button_sizer->Add( 0, 0, 1, wxEXPAND, 0 );
m_button_sizer->Add(m_button_close, 0, wxALIGN_CENTER, 0);
m_groups_sizer = new wxBoxSizer(wxVERTICAL);
m_main_sizer->Add(0,0,0, wxTOP, FromDIP(12));
m_main_sizer->Add(m_groups_sizer,0,wxEXPAND|wxLEFT|wxRIGHT, FromDIP(16));
m_main_sizer->Add(0,0,0, wxTOP, FromDIP(20));
m_main_sizer->Add(m_button_sizer,0,wxEXPAND|wxLEFT|wxRIGHT, FromDIP(16));
m_main_sizer->Add(0,0,0, wxTOP, FromDIP(20));
CenterOnParent();
SetSizer(m_main_sizer);
Layout();
Fit();
}
std::vector<bool> AmsReplaceMaterialDialog::GetStatus(unsigned int status)
{
std::vector<bool> listStatus;
bool current = false;
for (int i = 0; i < 16; i++) {
if (status & (1 << i)) {
current = true;
}
else {
current = false;
}
listStatus.push_back(current);
}
return listStatus;
}
void AmsReplaceMaterialDialog::update_machine_obj(MachineObject* obj)
{
if (obj) {m_obj = obj;}
else {return;}
AmsTray* tray_list[4*4];
for (auto i = 0; i < 4*4; i++) {
tray_list[i] = nullptr;
}
try {
for (auto ams_info : obj->amsList) {
int ams_id_int = atoi(ams_info.first.c_str()) * 4;
for (auto tray_info : ams_info.second->trayList) {
int tray_id_int = atoi(tray_info.first.c_str());
tray_id_int = ams_id_int + tray_id_int;
tray_list[tray_id_int] = tray_info.second;
}
}
}
catch (...) {}
//creat group
int group_index = 1;
for (int filam : m_obj->filam_bak) {
auto status_list = GetStatus(filam);
wxColour group_color;
std::string group_material;
//get color & material
for (auto i = 0; i < status_list.size(); i++) {
if (status_list[i] && tray_list[i] != nullptr) {
group_color = AmsTray::decode_color(tray_list[i]->color);
group_material = tray_list[i]->get_display_filament_type();
}
}
m_groups_sizer->Add(create_split_line(wxString::Format("%s%d", _L("Group"), group_index), group_color, group_material, status_list), 0, wxEXPAND, 0);
m_groups_sizer->Add(0, 0, 0, wxTOP, FromDIP(12));
group_index++;
}
Layout();
Fit();
}
wxWindow* AmsReplaceMaterialDialog::create_split_line(wxString gname, wxColour col, wxString material, std::vector<bool> status_list)
{
wxColour background_color = wxColour(0xF4F4F4);
if (abs(col.Red() - background_color.Red()) <= 5 &&
abs(col.Green() - background_color.Green()) <= 5 &&
abs(col.Blue() - background_color.Blue()) <= 5) {
background_color = wxColour(0xE6E6E6);
}
auto m_panel_group = new StaticBox(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE);
m_panel_group->SetCornerRadius(FromDIP(4));
m_panel_group->SetBackgroundColor(StateColor(std::pair<wxColour, int>(background_color, StateColor::Normal)));
m_panel_group->SetSize(wxSize(FromDIP(344), -1));
m_panel_group->SetMinSize(wxSize(FromDIP(344), -1));
m_panel_group->SetMaxSize(wxSize(FromDIP(344), -1));
wxBoxSizer* group_sizer = new wxBoxSizer(wxVERTICAL);
//group title
wxBoxSizer* title_sizer = new wxBoxSizer(wxHORIZONTAL);
auto group_name = new Label(m_panel_group, gname);
group_name->SetFont(::Label::Head_12);
Button* material_info = new Button(m_panel_group, material);
material_info->SetFont(Label::Head_12);
material_info->SetCornerRadius(FromDIP(2));
material_info->SetBorderColor(background_color);
if (col.GetLuminance() < 0.5)
material_info->SetTextColor(*wxWHITE);
else
material_info->SetTextColor(0x6B6B6B);
material_info->SetMinSize(wxSize(-1, FromDIP(24)));
material_info->SetBackgroundColor(col);
title_sizer->Add(group_name, 0, wxALIGN_CENTER, 0);
title_sizer->Add(0, 0, 0, wxLEFT, FromDIP(10));
title_sizer->Add(material_info, 0, wxALIGN_CENTER, 0);
//group item
wxGridSizer* grid_Sizer = new wxGridSizer(0, 8, 0, 0);
for (int i = 0; i < status_list.size(); i++) {
if (status_list[i]) {
AmsRMItem* amsitem = new AmsRMItem(m_panel_group, wxID_ANY, wxDefaultPosition, wxDefaultSize);
amsitem->set_color(col);
//set current tray
if (!m_obj->m_tray_now.empty() && m_obj->m_tray_now == std::to_string(i)) {
amsitem->set_focus(true);
}
amsitem->set_type(RMTYPE_NORMAL);
amsitem->set_index(wxGetApp().transition_tridid(i).ToStdString());
amsitem->SetBackgroundColour(background_color);
grid_Sizer->Add(amsitem, 0, wxALIGN_CENTER | wxTOP | wxBottom, FromDIP(10));
}
}
//add the first tray
for (int i = 0; i < status_list.size(); i++) {
if (status_list[i]) {
AmsRMItem* amsitem = new AmsRMItem(m_panel_group, wxID_ANY, wxDefaultPosition, wxDefaultSize);
amsitem->set_color(col);
amsitem->set_type(RMTYPE_VIRTUAL);
amsitem->set_index(wxGetApp().transition_tridid(i).ToStdString());
amsitem->SetBackgroundColour(background_color);
grid_Sizer->Add(amsitem, 0, wxALIGN_CENTER | wxTOP | wxBottom, FromDIP(10));
break;
}
}
group_sizer->Add(0, 0, 0, wxTOP, FromDIP(10));
group_sizer->Add(title_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(12));
group_sizer->Add(grid_Sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(12));
group_sizer->Add(0, 0, 0, wxTOP, FromDIP(10));
m_panel_group->SetSizer(group_sizer);
m_panel_group->Layout();
group_sizer->Fit(m_panel_group);
return m_panel_group;
}
void AmsReplaceMaterialDialog::paintEvent(wxPaintEvent& evt)
{
wxPaintDC dc(this);
dc.SetPen(wxColour(0xAC, 0xAC, 0xAC));
dc.SetBrush(*wxTRANSPARENT_BRUSH);
dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y, 0);
}
void AmsReplaceMaterialDialog::on_dpi_changed(const wxRect& suggested_rect)
{
}
AmsRMItem::AmsRMItem(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size)
{
wxWindow::Create(parent, id, pos, size);
SetSize(wxSize(FromDIP(42), FromDIP(32)));
SetMinSize(wxSize(FromDIP(42), FromDIP(32)));
SetMaxSize(wxSize(FromDIP(42), FromDIP(32)));
SetBackgroundColour(*wxWHITE);
Bind(wxEVT_PAINT, &AmsRMItem::paintEvent, this);
}
void AmsRMItem::paintEvent(wxPaintEvent& evt)
{
wxPaintDC dc(this);
render(dc);
}
void AmsRMItem::render(wxDC& dc)
{
#ifdef __WXMSW__
wxSize size = GetSize();
wxMemoryDC memdc;
wxBitmap bmp(size.x, size.y);
memdc.SelectObject(bmp);
memdc.Blit({ 0, 0 }, size, &dc, { 0, 0 });
{
wxGCDC dc2(memdc);
doRender(dc2);
}
memdc.SelectObject(wxNullBitmap);
dc.DrawBitmap(bmp, 0, 0);
#else
doRender(dc);
#endif
}
void AmsRMItem::doRender(wxDC& dc)
{
wxSize size = GetSize();
if (m_type == RMTYPE_NORMAL) {
dc.SetPen(wxPen(m_color, 2));
dc.SetBrush(*wxTRANSPARENT_BRUSH);
}
else {
dc.SetPen(wxPen(m_color, 2, wxSHORT_DASH));
dc.SetBrush(*wxTRANSPARENT_BRUSH);
}
//top bottom line
dc.DrawLine(FromDIP(0), FromDIP(4), size.x - FromDIP(5), FromDIP(4));
dc.DrawLine(FromDIP(0), size.y - FromDIP(4), size.x - FromDIP(5), size.y - FromDIP(4));
//left right line
dc.DrawLine(FromDIP(1), FromDIP(4), FromDIP(1), FromDIP(11));
dc.DrawLine(FromDIP(1), FromDIP(22), FromDIP(1), size.y - FromDIP(4));
dc.DrawLine(size.x - FromDIP(5), FromDIP(4), size.x - FromDIP(5), FromDIP(11));
dc.DrawLine(size.x - FromDIP(5), FromDIP(22), size.x - FromDIP(5), size.y - FromDIP(4));
//delta
dc.DrawLine(FromDIP(0), FromDIP(11), FromDIP(5), size.y / 2);
dc.DrawLine(FromDIP(0), FromDIP(22), FromDIP(5), size.y / 2);
dc.DrawLine(size.x - FromDIP(5), FromDIP(11), size.x - FromDIP(1), size.y / 2);
dc.DrawLine(size.x - FromDIP(5), FromDIP(22), size.x - FromDIP(1), size.y / 2);
if (m_focus) {
dc.SetPen(wxPen(wxColour(0x00AE42), 2));
dc.SetBrush(*wxTRANSPARENT_BRUSH);
dc.DrawLine(FromDIP(0), FromDIP(1), size.x - FromDIP(5), FromDIP(1));
dc.DrawLine(FromDIP(0), size.y - FromDIP(1), size.x - FromDIP(5), size.y - FromDIP(1));
}
if (m_selected) {
}
auto tsize = dc.GetMultiLineTextExtent(m_index);
auto tpot = wxPoint((size.x - tsize.x) / 2 - FromDIP(2), (size.y - tsize.y) / 2 + FromDIP(2));
dc.SetTextForeground(wxColour(0x6B6B6B));
dc.SetFont(::Label::Head_12);
dc.DrawText(m_index, tpot);
}
AmsRMArrow::AmsRMArrow(wxWindow* parent)
{
wxWindow::Create(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize);
SetBackgroundColour(*wxWHITE);
Bind(wxEVT_PAINT, &AmsRMArrow::paintEvent, this);
m_bitmap_left = ScalableBitmap(this, "replace_arrow_left", 7);
m_bitmap_right = ScalableBitmap(this, "replace_arrow_right", 7);
m_bitmap_down = ScalableBitmap(this, "replace_arrow_down", 7);
SetSize(wxSize(FromDIP(16), FromDIP(32)));
SetMinSize(wxSize(FromDIP(16), FromDIP(32)));
SetMaxSize(wxSize(FromDIP(16), FromDIP(32)));
}
void AmsRMArrow::paintEvent(wxPaintEvent& evt)
{
wxPaintDC dc(this);
render(dc);
}
void AmsRMArrow::render(wxDC& dc)
{
#ifdef __WXMSW__
wxSize size = GetSize();
wxMemoryDC memdc;
wxBitmap bmp(size.x, size.y);
memdc.SelectObject(bmp);
memdc.Blit({ 0, 0 }, size, &dc, { 0, 0 });
{
wxGCDC dc2(memdc);
doRender(dc2);
}
memdc.SelectObject(wxNullBitmap);
dc.DrawBitmap(bmp, 0, 0);
#else
doRender(dc);
#endif
}
void AmsRMArrow::doRender(wxDC& dc)
{
wxSize size = GetSize();
dc.SetPen(wxPen(wxColour(0, 174, 66)));
dc.SetBrush(*wxTRANSPARENT_BRUSH);
dc.SetPen(wxPen(wxColour(0xACACAC)));
dc.SetBrush(wxBrush(wxColour(0xACACAC)));
dc.DrawCircle(size.x / 2, size.y / 2, FromDIP(7));
}
}} // namespace Slic3r::GUI

View file

@ -239,6 +239,75 @@ public:
};
class AmsReplaceMaterialDialog : public DPIDialog
{
public:
AmsReplaceMaterialDialog(wxWindow* parent);
~AmsReplaceMaterialDialog() {};
public:
wxWindow* create_split_line(wxString gname, wxColour col, wxString material, std::vector<bool> status_list);
void create();
void update_machine_obj(MachineObject* obj);
void on_left_down(wxMouseEvent& evt);
void paintEvent(wxPaintEvent& evt);
void on_dpi_changed(const wxRect &suggested_rect) override;
std::vector<bool> GetStatus(unsigned int status);
public:
wxBoxSizer* m_main_sizer{nullptr};
wxBoxSizer* m_groups_sizer{nullptr};
MachineObject* m_obj{nullptr};
};
enum RMTYPE {
RMTYPE_NORMAL = 0,
RMTYPE_VIRTUAL = 1,
};
class AmsRMItem : public wxWindow
{
public:
AmsRMItem(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize);
~AmsRMItem() {};
public:
void set_color(wxColour col) {m_color = col;};
void set_type(RMTYPE type) {m_type = type;};
void set_index(std::string index) {m_index = index;};
void set_focus(bool focus) {m_focus = focus;};
void paintEvent(wxPaintEvent& evt);
void render(wxDC& dc);
void doRender(wxDC& dc);
private:
RMTYPE m_type;
wxColour m_color;
std::string m_index;
bool m_focus = false;
bool m_selected = false;
};
class AmsRMArrow : public wxWindow
{
public:
AmsRMArrow(wxWindow* parent);
~AmsRMArrow() {};
public:
void paintEvent(wxPaintEvent& evt);
void render(wxDC& dc);
void doRender(wxDC& dc);
private:
ScalableBitmap m_bitmap_left;
ScalableBitmap m_bitmap_right;
ScalableBitmap m_bitmap_down;
};
wxDECLARE_EVENT(EVT_SET_FINISH_MAPPING, wxCommandEvent);
}} // namespace Slic3r::GUI

View file

@ -2673,6 +2673,21 @@ int MachineObject::parse_json(std::string payload)
;
}
/*get filam_bak*/
try {
if (jj.contains("filam_bak")) {
filam_bak.clear();
if (jj["filam_bak"].is_array()) {
for (auto it = jj["filam_bak"].begin(); it != jj["filam_bak"].end(); it++) {
filam_bak.push_back(it.value().get<int>());
}
}
}
}
catch (...) {
;
}
/* get fimware type */
try {
if (jj.contains("lifecycle")) {

View file

@ -433,6 +433,8 @@ public:
std::string get_printer_thumbnail_img_str();
std::string product_name; // set by iot service, get /user/print
std::vector<int> filam_bak;
std::string bind_user_name;
std::string bind_user_id;
std::string bind_state; /* free | occupied */

View file

@ -1197,8 +1197,28 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater)
m_sizer_prepare->Add(hyperlink_sizer, 0, wxALIGN_CENTER | wxALL, 5);
auto m_sizer_backup = new wxBoxSizer(wxHORIZONTAL);
auto m_ams_backup_tip = new Label(m_panel_prepare, _L("Ams filament backup"));
m_ams_backup_tip->SetFont(::Label::Head_12);
m_ams_backup_tip->SetForegroundColour(wxColour(0x00AE42));
m_ams_backup_tip->SetBackgroundColour(*wxWHITE);
auto img_ams_backup = new wxStaticBitmap(m_panel_prepare, wxID_ANY, create_scaled_bitmap("automatic_material_renewal", this, 16), wxDefaultPosition, wxSize(FromDIP(16), FromDIP(16)), 0);
img_ams_backup->SetBackgroundColour(*wxWHITE);
m_sizer_backup->Add(0, 0, 1, wxEXPAND, 0);
m_sizer_backup->Add(img_ams_backup, 0, wxALL, FromDIP(3));
m_sizer_backup->Add(m_ams_backup_tip, 0, wxTOP, FromDIP(5));
m_ams_backup_tip->Bind(wxEVT_ENTER_WINDOW, [this, img_amsmapping_tip](auto& e) {SetCursor(wxCURSOR_HAND); });
img_ams_backup->Bind(wxEVT_ENTER_WINDOW, [this, img_amsmapping_tip](auto& e) {SetCursor(wxCURSOR_HAND); });
m_ams_backup_tip->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); });
img_ams_backup->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); });
m_ams_backup_tip->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {popup_filament_backup();});
img_ams_backup->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {popup_filament_backup();});
m_sizer_pcont->Add(0, 0, 1, wxEXPAND, 0);
m_button_ensure = new Button(m_panel_prepare, _L("Send"));
m_button_ensure->SetBackgroundColor(btn_bg_enable);
m_button_ensure->SetBorderColor(btn_bg_enable);
@ -1206,9 +1226,13 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater)
m_button_ensure->SetSize(SELECT_MACHINE_DIALOG_BUTTON_SIZE);
m_button_ensure->SetMinSize(SELECT_MACHINE_DIALOG_BUTTON_SIZE);
m_button_ensure->SetCornerRadius(FromDIP(12));
m_button_ensure->Bind(wxEVT_BUTTON, &SelectMachineDialog::on_ok_btn, this);
m_sizer_pcont->Add(m_sizer_backup, 0, wxEXPAND | wxBOTTOM, FromDIP(10));
m_sizer_pcont->Add(0, 0, 1, wxEXPAND, 0);
m_sizer_pcont->Add(m_button_ensure, 0, wxEXPAND | wxBOTTOM, FromDIP(10));
m_sizer_prepare->Add(m_sizer_pcont, 0, wxEXPAND, 0);
m_panel_prepare->SetSizer(m_sizer_prepare);
m_panel_prepare->Layout();
@ -1335,6 +1359,17 @@ void SelectMachineDialog::check_fcous_state(wxWindow* window)
}
}
void SelectMachineDialog::popup_filament_backup()
{
DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager();
if (!dev) return;
if (dev->get_selected_machine() && dev->get_selected_machine()->filam_bak.size() > 0) {
AmsReplaceMaterialDialog* m_replace_material_popup = new AmsReplaceMaterialDialog(this);
m_replace_material_popup->update_machine_obj(dev->get_selected_machine());
m_replace_material_popup->ShowModal();
}
}
wxWindow *SelectMachineDialog::create_ams_checkbox(wxString title, wxWindow *parent, wxString tooltip)
{
auto checkbox = new wxWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);

View file

@ -365,7 +365,8 @@ public:
void check_focus(wxWindow* window);
void check_fcous_state(wxWindow* window);
wxWindow *create_ams_checkbox(wxString title, wxWindow *parent, wxString tooltip);
void popup_filament_backup();
wxWindow* create_ams_checkbox(wxString title, wxWindow* parent, wxString tooltip);
wxWindow* create_item_checkbox(wxString title, wxWindow* parent, wxString tooltip, std::string param);
void update_select_layout(MachineObject *obj);
void prepare_mode();

View file

@ -1266,6 +1266,7 @@ StatusPanel::StatusPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, co
Bind(EVT_AMS_EXTRUSION_CALI, &StatusPanel::on_filament_extrusion_cali, this);
Bind(EVT_AMS_LOAD, &StatusPanel::on_ams_load, this);
Bind(EVT_AMS_UNLOAD, &StatusPanel::on_ams_unload, this);
Bind(EVT_AMS_FILAMENT_BACKUP, &StatusPanel::on_ams_filament_backup, this);
Bind(EVT_AMS_SETTINGS, &StatusPanel::on_ams_setting_click, this);
Bind(EVT_AMS_REFRESH_RFID, &StatusPanel::on_ams_refresh_rfid, this);
Bind(EVT_AMS_ON_SELECTED, &StatusPanel::on_ams_selected, this);
@ -2651,6 +2652,15 @@ void StatusPanel::on_ams_unload(SimpleEvent &event)
if (obj) { obj->command_ams_switch(255); }
}
void StatusPanel::on_ams_filament_backup(SimpleEvent& event)
{
if (obj && obj->filam_bak.size() > 0) {
AmsReplaceMaterialDialog* m_replace_material_popup = new AmsReplaceMaterialDialog(this);
m_replace_material_popup->update_machine_obj(obj);
m_replace_material_popup->ShowModal();
}
}
void StatusPanel::on_ams_setting_click(SimpleEvent &event)
{
if (!m_ams_setting_dlg) m_ams_setting_dlg = new AMSSetting((wxWindow *) this, wxID_ANY);

View file

@ -277,6 +277,7 @@ protected:
SecondaryCheckDialog* con_load_dlg = nullptr;
SecondaryCheckDialog* ctrl_e_hint_dlg = nullptr;
SecondaryCheckDialog* sdcard_hint_dlg = nullptr;
FanControlPopup* m_fan_control_popup{nullptr};
ExtrusionCalibration *m_extrusion_cali_dlg{nullptr};
@ -340,7 +341,8 @@ protected:
void on_ams_load(SimpleEvent &event);
void on_ams_load_curr();
void on_ams_unload(SimpleEvent &event);
void on_ams_setting_click(SimpleEvent &event);
void on_ams_filament_backup(SimpleEvent& event);
void on_ams_setting_click(SimpleEvent& event);
void on_filament_edit(wxCommandEvent &event);
void on_ext_spool_edit(wxCommandEvent &event);
void on_filament_extrusion_cali(wxCommandEvent &event);

View file

@ -19,6 +19,7 @@ wxDEFINE_EVENT(EVT_AMS_EXTRUSION_CALI, wxCommandEvent);
wxDEFINE_EVENT(EVT_AMS_LOAD, SimpleEvent);
wxDEFINE_EVENT(EVT_AMS_UNLOAD, SimpleEvent);
wxDEFINE_EVENT(EVT_AMS_SETTINGS, SimpleEvent);
wxDEFINE_EVENT(EVT_AMS_FILAMENT_BACKUP, SimpleEvent);
wxDEFINE_EVENT(EVT_AMS_REFRESH_RFID, wxCommandEvent);
wxDEFINE_EVENT(EVT_AMS_ON_SELECTED, wxCommandEvent);
wxDEFINE_EVENT(EVT_AMS_ON_FILAMENT_EDIT, wxCommandEvent);
@ -1769,14 +1770,16 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
wxBoxSizer *m_sizer_bottom = new wxBoxSizer(wxHORIZONTAL);
wxBoxSizer *m_sizer_left = new wxBoxSizer(wxVERTICAL);
//ams tip
m_sizer_ams_tips = new wxBoxSizer(wxHORIZONTAL);
auto m_ams_tip = new wxStaticText(m_amswin, wxID_ANY, _L("AMS"));
auto m_ams_tip = new Label(m_amswin, _L("AMS"));
m_ams_tip->SetFont(::Label::Body_12);
m_ams_tip->SetBackgroundColour(*wxWHITE);
auto img_amsmapping_tip = new wxStaticBitmap(m_amswin, wxID_ANY, create_scaled_bitmap("enable_ams", this, 16), wxDefaultPosition, wxSize(FromDIP(16), FromDIP(16)), 0);
img_amsmapping_tip->SetBackgroundColour(*wxWHITE);
m_sizer_ams_tips->Add(m_ams_tip, 0, wxALIGN_CENTER, 0);
m_sizer_ams_tips->Add(img_amsmapping_tip, 0, wxALL, FromDIP(2));
m_sizer_ams_tips->Add(m_ams_tip, 0, wxTOP, FromDIP(5));
m_sizer_ams_tips->Add(img_amsmapping_tip, 0, wxALL, FromDIP(3));
img_amsmapping_tip->Bind(wxEVT_ENTER_WINDOW, [this, img_amsmapping_tip](auto& e) {
wxPoint img_pos = img_amsmapping_tip->ClientToScreen(wxPoint(0, 0));
@ -1785,12 +1788,34 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
m_ams_introduce_popup.Position(popup_pos, wxSize(0, 0));
m_ams_introduce_popup.Popup();
});
img_amsmapping_tip->Bind(wxEVT_LEAVE_WINDOW, [this](wxMouseEvent& e) {
img_amsmapping_tip->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {
m_ams_introduce_popup.Dismiss();
});
//backup tips
auto m_ams_backup_tip = new Label(m_amswin, _L("Ams filament backup"));
m_ams_backup_tip->SetFont(::Label::Head_12);
m_ams_backup_tip->SetForegroundColour(wxColour(0x00AE42));
m_ams_backup_tip->SetBackgroundColour(*wxWHITE);
auto img_ams_backup = new wxStaticBitmap(m_amswin, wxID_ANY, create_scaled_bitmap("automatic_material_renewal", this, 16), wxDefaultPosition, wxSize(FromDIP(16), FromDIP(16)), 0);
img_ams_backup->SetBackgroundColour(*wxWHITE);
m_sizer_ams_tips->Add( 0, 0, 1, wxEXPAND, 0 );
m_sizer_ams_tips->Add(img_ams_backup, 0, wxALL, FromDIP(3));
m_sizer_ams_tips->Add(m_ams_backup_tip, 0, wxTOP, FromDIP(5));
m_ams_backup_tip->Bind(wxEVT_ENTER_WINDOW, [this, img_amsmapping_tip](auto& e) {SetCursor(wxCURSOR_HAND);});
img_ams_backup->Bind(wxEVT_ENTER_WINDOW, [this, img_amsmapping_tip](auto& e) {SetCursor(wxCURSOR_HAND);});
m_ams_backup_tip->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW);});
img_ams_backup->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW);});
m_ams_backup_tip->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {post_event(SimpleEvent(EVT_AMS_FILAMENT_BACKUP));});
img_ams_backup->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {post_event(SimpleEvent(EVT_AMS_FILAMENT_BACKUP));});
//ams cans
m_panel_can = new StaticBox(m_amswin, wxID_ANY, wxDefaultPosition, AMS_CANS_SIZE, wxBORDER_NONE);
m_panel_can->SetMinSize(AMS_CANS_SIZE);
m_panel_can->SetCornerRadius(FromDIP(10));
@ -1825,20 +1850,6 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
m_none_ams_panel->SetSizer(sizer_ams_panel_h);
m_none_ams_panel->Layout();
/*wxBoxSizer *sizer_ams_panel = new wxBoxSizer(wxHORIZONTAL);
AMSinfo none_ams = AMSinfo{ "0", std::vector<Caninfo>{Caninfo{"0", wxEmptyString, *wxWHITE, AMSCanType::AMS_CAN_TYPE_EMPTY}} };
auto amscans = new AmsCans(m_none_ams_panel, wxID_ANY, none_ams);
sizer_ams_panel->Add(amscans, 0, wxALL, 0);
sizer_ams_panel->Add(0, 0, 0, wxLEFT, 20);
auto m_tip_none_ams = new wxStaticText(m_none_ams_panel, wxID_ANY, _L("Click the pencil icon to edit the filament."), wxDefaultPosition, wxDefaultSize, 0);
m_tip_none_ams->Wrap(150);
m_tip_none_ams->SetFont(::Label::Body_13);
m_tip_none_ams->SetForegroundColour(AMS_CONTROL_GRAY500);
m_tip_none_ams->SetMinSize({150, -1});
sizer_ams_panel->Add(m_tip_none_ams, 0, wxALIGN_CENTER, 0);
m_none_ams_panel->SetSizer(sizer_ams_panel);
m_none_ams_panel->Layout();*/
m_simplebook_ams->AddPage(m_simplebook_cans, wxEmptyString, true);
m_simplebook_ams->AddPage(m_none_ams_panel, wxEmptyString, false);
@ -1846,7 +1857,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
m_panel_can->Layout();
m_sizer_cans->Fit(m_panel_can);
m_sizer_left->Add(m_sizer_ams_tips, 0, wxALIGN_CENTER, 0);
m_sizer_left->Add(m_sizer_ams_tips, 0, wxEXPAND, 0);
m_sizer_left->Add(m_panel_can, 1, wxEXPAND, 0);
wxBoxSizer *m_sizer_left_bottom = new wxBoxSizer(wxHORIZONTAL);
@ -1888,6 +1899,9 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
m_button_area = new wxWindow(m_amswin, wxID_ANY);
m_button_area->SetBackgroundColour(m_amswin->GetBackgroundColour());
wxBoxSizer *m_sizer_button = new wxBoxSizer(wxVERTICAL);
wxBoxSizer *m_sizer_button_area = new wxBoxSizer(wxHORIZONTAL);
m_button_extrusion_cali = new Button(m_button_area, _L("Cali"));
@ -1914,7 +1928,9 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
m_sizer_button_area->Add(m_button_extruder_back, 0, wxLEFT, FromDIP(6));
m_sizer_button_area->Add(m_button_extruder_feed, 0, wxLEFT, FromDIP(6));
m_button_area->SetSizer(m_sizer_button_area);
m_sizer_button->Add(m_sizer_button_area, 0, 1, wxEXPAND, 0);
m_button_area->SetSizer(m_sizer_button);
m_button_area->Layout();
m_button_area->Fit();
@ -2002,8 +2018,8 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
m_ams_introduce_popup.Dismiss();
});
m_sizer_vams_tips->Add(m_vams_tip, 0, wxALIGN_CENTER, 0);
m_sizer_vams_tips->Add(img_vams_tip, 0, wxALL, FromDIP(2));
m_sizer_vams_tips->Add(m_vams_tip, 0, wxTOP, FromDIP(5));
m_sizer_vams_tips->Add(img_vams_tip, 0, wxALL, FromDIP(3));
m_vams_extra_road = new AMSVirtualRoad(m_amswin, wxID_ANY);
m_vams_extra_road->SetMinSize(wxSize(m_panel_virtual->GetSize().x + FromDIP(16), -1));

View file

@ -627,6 +627,7 @@ wxDECLARE_EVENT(EVT_AMS_EXTRUSION_CALI, wxCommandEvent);
wxDECLARE_EVENT(EVT_AMS_LOAD, SimpleEvent);
wxDECLARE_EVENT(EVT_AMS_UNLOAD, SimpleEvent);
wxDECLARE_EVENT(EVT_AMS_SETTINGS, SimpleEvent);
wxDECLARE_EVENT(EVT_AMS_FILAMENT_BACKUP, SimpleEvent);
wxDECLARE_EVENT(EVT_AMS_REFRESH_RFID, wxCommandEvent);
wxDECLARE_EVENT(EVT_AMS_ON_SELECTED, wxCommandEvent);
wxDECLARE_EVENT(EVT_AMS_ON_FILAMENT_EDIT, wxCommandEvent);

View file

@ -29,6 +29,7 @@ wxFont Label::Head_15;
wxFont Label::Head_14;
wxFont Label::Head_13;
wxFont Label::Head_12;
wxFont Label::Head_11;
wxFont Label::Head_10;
wxFont Label::Body_16;
@ -62,6 +63,7 @@ void Label::initSysFont()
Head_14 = Label::sysFont(14, true);
Head_13 = Label::sysFont(13, true);
Head_12 = Label::sysFont(12, true);
Head_11 = Label::sysFont(11, true);
Head_10 = Label::sysFont(10, true);
Body_16 = Label::sysFont(16, false);

View file

@ -33,6 +33,7 @@ public:
static wxFont Head_14;
static wxFont Head_13;
static wxFont Head_12;
static wxFont Head_11;
static wxFont Head_10;
static wxFont Body_16;