mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-11-02 04:31:17 -07:00
NEW:AMS supports ams filament backup
Change-Id: I0bc84f52bcd88dbbc1b9614b15474433c748cc14
This commit is contained in:
parent
f596a822e2
commit
00e1c50947
17 changed files with 585 additions and 38 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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")) {
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue