ENH: refine some ui logics with filament map

1. Optimize performance with pop up
2. Optimize display in dark mode

jira:NONE

Signed-off-by: xun.zhang <xun.zhang@bambulab.com>
Change-Id: Ic0f72a42e791fb58b84e7a88d7a34ced3a9e8c38
This commit is contained in:
xun.zhang 2024-12-28 16:21:29 +08:00 committed by lane.wei
parent 77abf5ad6e
commit 481ebc4a4b
12 changed files with 175 additions and 112 deletions

View File

@ -0,0 +1,3 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.1255 0.670677C18.8837 0.604357 18.6134 0.624806 18.3591 0.763978L1.53067 9.97419C0.602193 10.4823 0.720428 11.8517 1.72227 12.1932L6.22492 13.728C6.6254 13.8645 7.06071 13.6505 7.19722 13.25C7.33372 12.8495 7.11973 12.4142 6.71925 12.2777L2.89496 10.9742L15.9998 3.80188L8.41683 12.895C8.03177 13.3567 7.82088 13.9389 7.82088 14.5401V18.5996C7.82088 19.0227 8.16388 19.3657 8.58698 19.3657C9.01008 19.3657 9.35307 19.0227 9.35307 18.5996V14.5401C9.35307 14.2975 9.43817 14.0626 9.59354 13.8763L17.9751 3.82563L15.8547 15.8879L11.3484 14.228C10.9513 14.0818 10.5109 14.2851 10.3647 14.6821C10.2185 15.0791 10.4218 15.5195 10.8188 15.6658L15.6795 17.4562C16.3914 17.7184 17.1671 17.2723 17.2984 16.5251L19.8776 1.85264C19.949 1.44649 19.7824 1.08673 19.5062 0.865349C19.495 0.854897 19.4835 0.844711 19.4717 0.834808C19.3683 0.748615 19.249 0.694265 19.1255 0.670677Z" fill="#CECECE"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -4,6 +4,16 @@
#include "Widgets/Label.hpp"
namespace Slic3r { namespace GUI {
static const wxColour BgNormalColor = wxColour("#FFFFFF");
static const wxColour BgSelectColor = wxColour("#EBF9F0");
static const wxColour TextNormalColor = wxColour("#000000");
static const wxColour TextSelectColor = wxColour("#00AE42");
static const wxColour BorderNormalColor = wxColour("#CECECE");
static const wxColour BorderSelectColor = wxColour("#00AE42");
CapsuleButton::CapsuleButton(wxWindow *parent, wxWindowID id, const wxString &label, bool selected) : wxPanel(parent, id)
{
SetBackgroundColour(*wxWHITE);
@ -58,12 +68,12 @@ void CapsuleButton::OnPaint(wxPaintEvent &event)
wxRect rect = GetClientRect();
gc->SetBrush(wxTransparentColour);
gc->DrawRoundedRectangle(0, 0, rect.width, rect.height, 0);
wxColour bg_color = m_selected ? wxColour("#EBF9F0") : wxColour("#FFFFFF");
wxColour border_color = m_hovered || m_selected ? wxColour("#00AE42") : wxColour("#CECECE");
wxColour bg_color = m_selected ? BgSelectColor : BgNormalColor;
wxColour border_color = m_hovered || m_selected ? BorderSelectColor : BorderNormalColor;
bg_color = StateColor::darkModeColorFor(bg_color);
border_color = StateColor::darkModeColorFor(border_color);
gc->SetBrush(wxBrush(bg_color));
gc->SetPen(wxPen(border_color, 2));
gc->SetPen(wxPen(border_color, 1));
gc->DrawRoundedRectangle(1, 1, rect.width - 2, rect.height - 2, 5);
delete gc;
}
@ -99,19 +109,20 @@ void CapsuleButton::OnLeaveWindow(wxMouseEvent &event)
void CapsuleButton::UpdateStatus()
{
wxColour selected_color = StateColor::darkModeColorFor(wxColour("#EBF9F0"));
wxColour normal_color = StateColor::darkModeColorFor(wxColour("#FFFFFF"));
std::string icon_name = m_selected ? "capsule_tag_on" : "capsule_tag_off";
auto bmp = create_scaled_bitmap(icon_name, nullptr, FromDIP(16));
m_btn->SetBitmap(bmp);
if (m_selected) {
m_label->SetBackgroundColour(selected_color);
m_btn->SetBackgroundColour(selected_color);
m_label->SetForegroundColour(TextSelectColor);
m_label->SetBackgroundColour(BgSelectColor);
m_btn->SetBackgroundColour(BgSelectColor);
} else {
m_label->SetBackgroundColour(normal_color);
m_btn->SetBackgroundColour(normal_color);
m_label->SetForegroundColour(TextNormalColor);
m_label->SetBackgroundColour(BgNormalColor);
m_btn->SetBackgroundColour(BgNormalColor);
}
GUI::wxGetApp().UpdateDarkUIWin(this);
}
}} // namespace Slic3r::GUI

View File

@ -10,6 +10,7 @@ class CapsuleButton : public wxPanel
public:
CapsuleButton(wxWindow *parent, wxWindowID id, const wxString &label, bool selected);
void Select(bool selected);
bool IsSelected() const { return m_selected; }
protected:
void OnPaint(wxPaintEvent &event);
private:

View File

@ -1,5 +1,4 @@
#include "FilamentGroupPopup.hpp"
#include "FilamentMapDialog.hpp"
#include "GUI_App.hpp"
#include "MsgDialog.hpp"
#include "wx/dcgraph.h"
@ -264,10 +263,18 @@ void FilamentGroupPopup::tryPopup(bool connect_status)
};
if (canPopup()) {
m_connected = connect_status;
Init();
ResetTimer();
PopupWindow::Popup();
if (m_active) {
if (m_connected != connect_status) { Init(); }
m_connected = connect_status;
ResetTimer();
}
else {
m_connected = connect_status;
m_active = true;
Init();
ResetTimer();
PopupWindow::Popup();
}
}
}
@ -311,6 +318,12 @@ void FilamentGroupPopup::OnRemindBtn(wxCommandEvent &event)
void FilamentGroupPopup::OnTimer(wxTimerEvent &event) { Dismiss(); }
void FilamentGroupPopup::Dismiss() {
m_active = false;
PopupWindow::Dismiss();
m_timer->Stop();
}
void FilamentGroupPopup::OnLeaveWindow(wxMouseEvent &)
{
wxPoint pos = this->ScreenToClient(wxGetMousePosition());

View File

@ -18,7 +18,6 @@ public:
void tryClose();
FilamentMapMode GetSelectedMode() const { return m_mode; }
private:
void OnPaint(wxPaintEvent&event);
void StartTimer();
@ -29,6 +28,7 @@ private:
void OnEnterWindow(wxMouseEvent &);
void OnTimer(wxTimerEvent &event);
void OnRemindBtn(wxCommandEvent &event);
void Dismiss();
void Init();
void UpdateButtonStatus(int hover_idx = -1);
@ -42,6 +42,7 @@ private:
FilamentMapMode m_mode;
bool m_connected{ false };
wxTimer *m_timer;
bool m_active{ false };
std::vector<wxBitmapButton *> radio_btns;
std::vector<Label *> button_labels;

View File

@ -9,48 +9,35 @@
namespace Slic3r { namespace GUI {
static const StateColor btn_bg_green(
std::pair<wxColour, int>(wxColour(27, 136, 68), StateColor::Pressed),
std::pair<wxColour, int>(wxColour(61, 203, 115), StateColor::Hovered),
std::pair<wxColour, int>(wxColour(0, 174, 66), StateColor::Normal)
);
static const StateColor btn_bg_green(std::pair<wxColour, int>(wxColour(27, 136, 68), StateColor::Pressed),
std::pair<wxColour, int>(wxColour(61, 203, 115), StateColor::Hovered),
std::pair<wxColour, int>(wxColour(0, 174, 66), StateColor::Normal));
static const StateColor btn_bd_green(
std::pair<wxColour, int>(wxColour(0, 174, 66), StateColor::Normal)
);
static const StateColor btn_bd_green(std::pair<wxColour, int>(wxColour(0, 174, 66), StateColor::Normal));
static const StateColor btn_text_green(
std::pair<wxColour, int>(wxColour(255, 255, 254), StateColor::Normal)
);
static const StateColor btn_text_green(std::pair<wxColour, int>(wxColour(255, 255, 254), StateColor::Normal));
static const StateColor btn_bg_white(
std::pair<wxColour, int>(wxColour(206, 206, 206), StateColor::Pressed),
std::pair<wxColour, int>(wxColour(238, 238, 238), StateColor::Hovered),
std::pair<wxColour, int>(wxColour(255, 255, 255), StateColor::Normal)
);
static const StateColor btn_bg_white(std::pair<wxColour, int>(wxColour(206, 206, 206), StateColor::Pressed),
std::pair<wxColour, int>(wxColour(238, 238, 238), StateColor::Hovered),
std::pair<wxColour, int>(wxColour(255, 255, 255), StateColor::Normal));
static const StateColor btn_bd_white(
std::pair<wxColour, int>(wxColour(38, 46, 48), StateColor::Normal)
);
static const StateColor btn_bd_white(std::pair<wxColour, int>(wxColour(38, 46, 48), StateColor::Normal));
static const StateColor btn_text_white(
std::pair<wxColour, int>(wxColour(38, 46, 48), StateColor::Normal)
);
static const StateColor btn_text_white(std::pair<wxColour, int>(wxColour(38, 46, 48), StateColor::Normal));
FilamentMapDialog::FilamentMapDialog(wxWindow *parent,
const std::vector<std::string> &filament_color,
const std::vector<int> &filament_map,
const std::vector<int> &filaments,
const FilamentMapMode mode,
bool machine_synced,
bool show_default)
: wxDialog(parent, wxID_ANY, _L("Filament arrangement method"), wxDefaultPosition, wxSize(2000, 1500))
, m_filament_color(filament_color)
, m_filament_map(filament_map)
: wxDialog(parent, wxID_ANY, _L("Filament arrangement method"), wxDefaultPosition, wxDefaultSize,wxDEFAULT_DIALOG_STYLE), m_filament_color(filament_color), m_filament_map(filament_map)
{
SetBackgroundColour(*wxWHITE);
SetMinSize(wxSize(FromDIP(580), -1));
SetMaxSize(wxSize(FromDIP(580), -1));
SetMinSize(wxSize(FromDIP(550), -1));
SetMaxSize(wxSize(FromDIP(550), -1));
if (mode < fmmManual)
m_page_type = PageType::ptAuto;
@ -82,9 +69,13 @@ FilamentMapDialog::FilamentMapDialog(wxWindow *parent,
main_sizer->AddSpacer(FromDIP(24));
auto panel_sizer = new wxBoxSizer(wxHORIZONTAL);
FilamentMapMode default_auto_mode = (mode < FilamentMapMode::fmmManual ? mode : FilamentMapMode::fmmAutoForFlush);
FilamentMapMode default_auto_mode = mode >= fmmManual ? fmmAutoForFlush :
mode == fmmAutoForMatch && !machine_synced ? fmmAutoForFlush :
mode;
m_manual_map_panel = new FilamentMapManualPanel(this, m_filament_color, filaments, filament_map);
m_auto_map_panel = new FilamentMapAutoPanel(this, default_auto_mode);
m_auto_map_panel = new FilamentMapAutoPanel(this, default_auto_mode, machine_synced);
if (show_default)
m_default_map_panel = new FilamentMapDefaultPanel(this);
else
@ -131,10 +122,8 @@ FilamentMapDialog::FilamentMapDialog(wxWindow *parent,
FilamentMapMode FilamentMapDialog::get_mode()
{
if (m_page_type == PageType::ptAuto)
return m_auto_map_panel->GetMode();
if (m_page_type == PageType::ptManual)
return fmmManual;
if (m_page_type == PageType::ptAuto) return m_auto_map_panel->GetMode();
if (m_page_type == PageType::ptManual) return fmmManual;
return fmmDefault;
}
@ -147,14 +136,13 @@ int FilamentMapDialog::ShowModal()
void FilamentMapDialog::on_ok(wxCommandEvent &event)
{
if (m_page_type == PageType::ptManual) {
std::vector<int> left_filaments = m_manual_map_panel->GetLeftFilaments();
std::vector<int> left_filaments = m_manual_map_panel->GetLeftFilaments();
std::vector<int> right_filaments = m_manual_map_panel->GetRightFilaments();
for (int i = 0; i < m_filament_map.size(); ++i) {
if (std::find(left_filaments.begin(), left_filaments.end(), i + 1) != left_filaments.end()) {
m_filament_map[i] = 1;
}
else if (std::find(right_filaments.begin(), right_filaments.end(), i + 1) != right_filaments.end()) {
} else if (std::find(right_filaments.begin(), right_filaments.end(), i + 1) != right_filaments.end()) {
m_filament_map[i] = 2;
}
}
@ -167,48 +155,42 @@ void FilamentMapDialog::on_cancle(wxCommandEvent &event) { EndModal(wxID_CANCEL)
void FilamentMapDialog::update_panel_status(PageType page)
{
std::vector<CapsuleButton*>button_list = { m_default_btn,m_manual_btn,m_auto_btn };
for (auto p : button_list) {
if (p && p->IsSelected()) {
p->Select(false);
}
}
std::vector<wxPanel*>panel_list = { m_default_map_panel,m_manual_map_panel,m_auto_map_panel };
for (auto p : panel_list) {
if (p && p->IsShown()) {
p->Hide();
}
}
if (page == PageType::ptDefault) {
if (m_default_btn && m_default_map_panel) {
m_default_btn->Select(true);
m_default_map_panel->Show();
}
m_manual_btn->Select(false);
m_manual_map_panel->Hide();
m_auto_btn->Select(false);
m_auto_map_panel->Hide();
}
if (page == PageType::ptManual) {
if (m_default_btn && m_default_map_panel) {
m_default_btn->Select(false);
m_default_map_panel->Hide();
}
m_manual_btn->Select(true);
m_manual_map_panel->Show();
m_auto_btn->Select(false);
m_auto_map_panel->Hide();
}
if (page == PageType::ptAuto) {
if (m_default_btn && m_default_map_panel) {
m_default_btn->Select(false);
m_default_map_panel->Hide();
}
m_manual_btn->Select(false);
m_manual_map_panel->Hide();
m_auto_btn->Select(true);
m_auto_map_panel->Show();
}
Layout();
Fit();
}
void FilamentMapDialog::on_switch_mode(wxCommandEvent &event)
{
int win_id = event.GetId();
m_page_type = PageType(win_id);
int win_id = event.GetId();
m_page_type = PageType(win_id);
update_panel_status(m_page_type);
event.Skip();
@ -220,5 +202,4 @@ void FilamentMapDialog::set_modal_btn_labels(const wxString &ok_label, const wxS
m_cancel_btn->SetLabel(cancel_label);
}
}} // namespace Slic3r::GUI

View File

@ -29,6 +29,7 @@ public:
const std::vector<int> &filament_map,
const std::vector<int> &filaments,
const FilamentMapMode mode,
bool machine_synced,
bool show_default=true
);

View File

@ -3,13 +3,26 @@
#include "wx/graphics.h"
namespace Slic3r { namespace GUI {
static const wxColour BgNormalColor = wxColour("#FFFFFF");
static const wxColour BgSelectColor = wxColour("#EBF9F0");
static const wxColour BgDisableColor = wxColour("#CECECE");
static const wxColour BorderNormalColor = wxColour("#CECECE");
static const wxColour BorderSelectedColor = wxColour("#00AE42");
static const wxColour BorderDisableColor = wxColour("#EEEEEE");
static const wxColour TextNormalBlackColor = wxColour("#262E30");
static const wxColour TextNormalGreyColor = wxColour("#6B6B6B");
static const wxColour TextDisableColor = wxColour("#CECECE");
FilamentMapManualPanel::FilamentMapManualPanel(wxWindow *parent,
const std::vector<std::string> &color,
const std::vector<int> &filament_list,
const std::vector<int> &filament_map)
: wxPanel(parent), m_filament_map(filament_map), m_filament_color(color), m_filament_list(filament_list)
{
SetBackgroundColour(wxColor(255, 255, 255));
SetBackgroundColour(BgNormalColor);
auto top_sizer = new wxBoxSizer(wxVERTICAL);
@ -40,12 +53,12 @@ FilamentMapManualPanel::FilamentMapManualPanel(wxWindow *p
drag_sizer->AddSpacer(FromDIP(7));
drag_sizer->Add(m_right_panel, 1, wxALIGN_CENTER | wxEXPAND | wxRIGHT, FromDIP(20));
top_sizer->Add(drag_sizer, 0, wxALIGN_CENTER|wxEXPAND);
top_sizer->Add(drag_sizer, 0, wxALIGN_CENTER | wxEXPAND);
m_tips = new Label(this, _L("Tips: You can drag the filaments to reassign them to different nozzles.\n"
"But your filament arrangement may not be the most efficient for filament usage."));
m_tips->SetFont(Label::Body_14);
m_tips->SetForegroundColour(wxColour("#6B6B6B"));
m_tips->SetForegroundColour(TextNormalGreyColor);
top_sizer->AddSpacer(FromDIP(8));
top_sizer->Add(m_tips, 0, wxALIGN_LEFT | wxLEFT, FromDIP(15));
@ -102,17 +115,19 @@ GUI::FilamentMapBtnPanel::FilamentMapBtnPanel(wxWindow *parent, const wxString &
auto sizer = new wxBoxSizer(wxVERTICAL);
m_icon_path = icon;
auto bmp = create_scaled_bitmap(icon, nullptr, 20);
m_btn = new wxBitmapButton(this, wxID_ANY, bmp, wxDefaultPosition, wxDefaultSize, wxNO_BORDER);
m_btn->SetBackgroundColour(*wxWHITE);
m_label = new wxStaticText(this, wxID_ANY, label);
m_label->SetFont(Label::Head_14);
m_label->SetForegroundColour(TextNormalBlackColor);
auto label_sizer = new wxBoxSizer(wxHORIZONTAL);
label_sizer->AddStretchSpacer();
label_sizer->Add(m_btn, 0, wxALIGN_CENTER|wxEXPAND);
label_sizer->Add(m_label, 0, wxALIGN_CENTER|wxEXPAND);
label_sizer->Add(m_btn, 0, wxALIGN_CENTER | wxEXPAND);
label_sizer->Add(m_label, 0, wxALIGN_CENTER | wxEXPAND);
label_sizer->AddStretchSpacer();
sizer->AddSpacer(FromDIP(32));
@ -120,9 +135,9 @@ GUI::FilamentMapBtnPanel::FilamentMapBtnPanel(wxWindow *parent, const wxString &
sizer->AddSpacer(FromDIP(24));
auto detail_sizer = new wxBoxSizer(wxHORIZONTAL);
m_detail = new Label(this, detail);
m_detail = new Label(this, detail);
m_detail->SetFont(Label::Body_12);
m_detail->SetForegroundColour(wxColour("#6B6B6B"));
m_detail->SetForegroundColour(TextNormalGreyColor);
m_detail->Wrap(FromDIP(180));
detail_sizer->AddStretchSpacer();
@ -163,12 +178,14 @@ void FilamentMapBtnPanel::OnPaint(wxPaintEvent &event)
wxRect rect = GetClientRect();
gc->SetBrush(wxTransparentColour);
gc->DrawRoundedRectangle(0, 0, rect.width, rect.height, 0);
wxColour bg_color = m_selected ? wxColour("#EBF9F0") : wxColour("#FFFFFF");
wxColour border_color = m_hover || m_selected ? wxColour("#00AE42") : wxColour("#CECECE");
bg_color = StateColor::darkModeColorFor(bg_color);
wxColour bg_color = m_selected ? BgSelectColor : BgNormalColor;
wxColour border_color = m_hover || m_selected ? BorderSelectedColor : BorderNormalColor;
bg_color = StateColor::darkModeColorFor(bg_color);
border_color = StateColor::darkModeColorFor(border_color);
gc->SetBrush(wxBrush(bg_color));
gc->SetPen(wxPen(border_color, 2));
gc->SetPen(wxPen(border_color, 1));
gc->DrawRoundedRectangle(1, 1, rect.width - 2, rect.height - 2, 8);
delete gc;
}
@ -176,23 +193,34 @@ void FilamentMapBtnPanel::OnPaint(wxPaintEvent &event)
void FilamentMapBtnPanel::UpdateStatus()
{
const wxColour selected_color = StateColor::darkModeColorFor(wxColour("#EBF9F0"));
const wxColour normal_color = StateColor::darkModeColorFor(wxColour("#FFFFFF"));
if (m_selected) {
m_btn->SetBackgroundColour(selected_color);
m_label->SetBackgroundColour(selected_color);
m_detail->SetBackgroundColour(selected_color);
} else {
m_btn->SetBackgroundColour(normal_color);
m_label->SetBackgroundColour(normal_color);
m_detail->SetBackgroundColour(normal_color);
m_btn->SetBackgroundColour(BgSelectColor);
m_label->SetBackgroundColour(BgSelectColor);
m_detail->SetBackgroundColour(BgSelectColor);
}
else {
m_btn->SetBackgroundColour(BgNormalColor);
m_label->SetBackgroundColour(BgNormalColor);
m_detail->SetBackgroundColour(BgNormalColor);
}
if (!m_enabled) {
m_btn->SetBitmap(create_scaled_bitmap(m_icon_path + "_disabled", nullptr, 20));
m_btn->SetForegroundColour(BgDisableColor);
m_label->SetForegroundColour(TextDisableColor);
m_detail->SetForegroundColour(TextDisableColor);
}
else {
m_btn->SetBitmap(create_scaled_bitmap(m_icon_path, nullptr, 20));
m_btn->SetForegroundColour(BgNormalColor);
m_label->SetForegroundColour(TextNormalBlackColor);
m_detail->SetForegroundColour(TextNormalGreyColor);
}
GUI::wxGetApp().UpdateDarkUIWin(this);
}
void FilamentMapBtnPanel::OnEnterWindow(wxMouseEvent &event)
{
if (!m_hover) {
if (!m_hover && m_enabled) {
m_hover = true;
UpdateStatus();
Refresh();
@ -212,6 +240,14 @@ void FilamentMapBtnPanel::OnLeaveWindow(wxMouseEvent &event)
}
}
bool FilamentMapBtnPanel::Enable(bool enable)
{
m_enabled = enable;
UpdateStatus();
Refresh();
return true;
}
void FilamentMapBtnPanel::Select(bool selected)
{
m_selected = selected;
@ -234,27 +270,37 @@ void GUI::FilamentMapBtnPanel::Show()
wxPanel::Show();
}
FilamentMapAutoPanel::FilamentMapAutoPanel(wxWindow *parent, FilamentMapMode mode) : wxPanel(parent)
FilamentMapAutoPanel::FilamentMapAutoPanel(wxWindow *parent, FilamentMapMode mode, bool machine_synced) : wxPanel(parent)
{
static const wxString AutoForFlushDetail = _L("Disregrad the filaments in AMS. Optimize filament usage "
"by calculating the best arrangement for the left and right "
"nozzles. Arrange the filaments on the printer based on "
"the slicing results.");
"by calculating the best arrangement for the left and right "
"nozzles. Arrange the filaments on the printer based on "
"the slicing results.");
static const wxString AutoForMatchDetail = _L("Based on the current filaments in the AMS, arrange the "
"filaments to the left and right nozzles.");
auto sizer = new wxBoxSizer(wxHORIZONTAL);
m_flush_panel = new FilamentMapBtnPanel(this, _L("Filament-Saving Mode"), AutoForFlushDetail, "flush_mode_panel_icon");
m_match_panel = new FilamentMapBtnPanel(this, _L("Convenient Mode"), AutoForMatchDetail,"match_mode_panel_icon");
"filaments to the left and right nozzles.");
auto sizer = new wxBoxSizer(wxHORIZONTAL);
m_flush_panel = new FilamentMapBtnPanel(this, _L("Filament-Saving Mode"), AutoForFlushDetail, "flush_mode_panel_icon");
m_match_panel = new FilamentMapBtnPanel(this, _L("Convenient Mode"), AutoForMatchDetail, "match_mode_panel_icon");
if (!machine_synced) m_match_panel->Enable(false);
sizer->AddStretchSpacer();
sizer->Add(m_flush_panel, 1, wxEXPAND);
sizer->Add(m_flush_panel, 1, wxEXPAND);
sizer->AddSpacer(FromDIP(12));
sizer->Add(m_match_panel, 1, wxEXPAND);
sizer->AddStretchSpacer();
m_flush_panel->Bind(wxEVT_LEFT_DOWN, [this](auto &event) { this->OnModeSwitch(FilamentMapMode::fmmAutoForFlush); });
m_flush_panel->Bind(wxEVT_LEFT_DOWN, [this](auto& event) {
if (m_flush_panel->IsEnabled()) {
this->OnModeSwitch(FilamentMapMode::fmmAutoForFlush);
}
});
m_match_panel->Bind(wxEVT_LEFT_DOWN, [this](auto &event) { this->OnModeSwitch(FilamentMapMode::fmmAutoForMatch); });
m_match_panel->Bind(wxEVT_LEFT_DOWN, [this](auto &event) {
if (m_match_panel->IsEnabled()) {
this->OnModeSwitch(FilamentMapMode::fmmAutoForMatch);
}
});
m_mode = mode;
UpdateStatus();
@ -303,7 +349,7 @@ FilamentMapDefaultPanel::FilamentMapDefaultPanel(wxWindow *parent) : wxPanel(par
m_label->SetBackgroundColour(*wxWHITE);
sizer->AddStretchSpacer();
sizer->Add(m_label, 1, wxEXPAND|wxALIGN_CENTER);
sizer->Add(m_label, 1, wxEXPAND | wxALIGN_CENTER);
sizer->AddStretchSpacer();
SetSizerAndFit(sizer);

View File

@ -42,6 +42,8 @@ public:
void Hide();
void Show();
void Select(bool selected);
bool Enable(bool enable);
bool IsEnabled() const { return m_enabled; }
protected:
void OnPaint(wxPaintEvent &event);
private:
@ -53,6 +55,8 @@ private:
wxBitmapButton *m_btn;
wxStaticText *m_label;
Label *m_detail;
std::string m_icon_path;
bool m_enabled{ true };
bool m_hover{false};
bool m_selected{false};
};
@ -60,7 +64,7 @@ private:
class FilamentMapAutoPanel : public wxPanel
{
public:
FilamentMapAutoPanel(wxWindow *parent, FilamentMapMode mode);
FilamentMapAutoPanel(wxWindow *parent, FilamentMapMode mode, bool machine_synced);
void Hide();
void Show();
FilamentMapMode GetMode() const { return m_mode; }

View File

@ -1622,6 +1622,7 @@ wxBoxSizer* MainFrame::create_side_tools()
g_filament_map,
filament_lists,
FilamentMapMode::fmmManual,
m_plater->get_machine_sync_status(),
false
);
auto ret = filament_dlg.ShowModal();
@ -1650,10 +1651,9 @@ wxBoxSizer* MainFrame::create_side_tools()
});
m_slice_btn->Bind(wxEVT_ENTER_WINDOW, [this](wxMouseEvent& event) {
m_filament_group_popup->SetSize(wxSize(FromDIP(380),-1));
wxPoint pos = m_slice_btn->ClientToScreen(wxPoint(0, 0));
pos.y += m_slice_btn->GetRect().height * 1.25;
pos.x -= (m_slice_option_btn->GetRect().width + m_filament_group_popup->GetRect().width * 0.6);
pos.x -= (m_slice_option_btn->GetRect().width + FromDIP(380) * 0.6);
m_filament_group_popup->SetPosition(pos);
m_filament_group_popup->tryPopup(m_plater->get_machine_sync_status());

View File

@ -15405,6 +15405,7 @@ void Plater::open_filament_map_setting_dialog(wxCommandEvent &evt)
plate_filament_maps,
curr_plate->get_extruders(true),
display_mode,
this->get_machine_sync_status(),
true
);

View File

@ -38,6 +38,7 @@ static std::map<wxColour, wxColour> gDarkColors{
{"#2B3436", "#808080"},
{"#ABABAB", "#ABABAB"},
{"#D9D9D9", "#2D2D32"},
{"#EBF9F0", "#293F34"}
//{"#F0F0F0", "#4C4C54"},
};