mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-05-17 10:32:20 +00:00
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 (cherry picked from commit 481ebc4a4b9353d8c9ef9d6bf64cb0006364e839)
This commit is contained in:
@@ -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
|
||||
@@ -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:
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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; }
|
||||
|
||||
@@ -1607,6 +1607,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();
|
||||
@@ -1635,10 +1636,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());
|
||||
|
||||
@@ -15379,6 +15379,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
|
||||
);
|
||||
|
||||
|
||||
@@ -42,6 +42,7 @@ static std::map<wxColour, wxColour> gDarkColors{
|
||||
{"#2B3436", "#808080"}, // rgb(43, 52, 54) Not Used anymore // Leftover from BBS. Was used as main fill color of icons
|
||||
{"#ABABAB", "#ABABAB"},
|
||||
{"#D9D9D9", "#2D2D32"}, // rgb(217, 217, 217) Sidebar > Toggle button track color
|
||||
{"#EBF9F0", "#293F34"}
|
||||
//{"#F0F0F0", "#4C4C54"},
|
||||
// ORCA
|
||||
{"#BFE1DE", "#223C3C"}, // rgb(191, 225, 222) Dropdown checked item background color > ORCA color with %25 opacity
|
||||
|
||||
Reference in New Issue
Block a user