Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYuSanka <yusanka@gmail.com>2019-08-13 10:37:44 +0300
committerYuSanka <yusanka@gmail.com>2019-08-20 10:52:00 +0300
commit3e62d7ae64f1f09f08a21708f5b21794ce2b12b5 (patch)
treeb9be4714850e666190c7c6d1212291bca8751b62 /src
parenta83da0f72cda17120cff27a0ed569d99d8e3157d (diff)
Implemented button "Reset to Filament Color"
Diffstat (limited to 'src')
-rw-r--r--src/slic3r/GUI/Field.cpp55
-rw-r--r--src/slic3r/GUI/Field.hpp10
-rw-r--r--src/slic3r/GUI/Tab.cpp28
-rw-r--r--src/slic3r/GUI/Tab.hpp1
4 files changed, 81 insertions, 13 deletions
diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp
index 19a54016e..2bee0018c 100644
--- a/src/slic3r/GUI/Field.cpp
+++ b/src/slic3r/GUI/Field.cpp
@@ -1033,11 +1033,12 @@ void ColourPicker::BUILD()
// Validate the color
wxString clr_str(m_opt.get_default_value<ConfigOptionStrings>()->get_at(m_opt_idx));
wxColour clr(clr_str);
- if (! clr.IsOk()) {
+ if (clr_str.IsEmpty() || !clr.IsOk()) {
clr = wxTransparentColour;
}
auto temp = new wxColourPickerCtrl(m_parent, wxID_ANY, clr, wxDefaultPosition, size);
+ temp->SetFont(Slic3r::GUI::wxGetApp().normal_font());
temp->SetBackgroundStyle(wxBG_STYLE_PAINT);
// // recast as a wxWindow to fit the calling convention
@@ -1048,17 +1049,59 @@ void ColourPicker::BUILD()
temp->SetToolTip(get_tooltip_text(clr_str));
}
-boost::any& ColourPicker::get_value()
+void ColourPicker::set_undef_value(wxColourPickerCtrl* field)
{
-// boost::any m_value;
+ field->SetColour(wxTransparentColour);
- auto colour = static_cast<wxColourPickerCtrl*>(window)->GetColour();
- auto clr_str = wxString::Format(wxT("#%02X%02X%02X"), colour.Red(), colour.Green(), colour.Blue());
- m_value = clr_str.ToStdString();
+ wxButton* btn = dynamic_cast<wxButton*>(field->GetPickerCtrl());
+ wxBitmap bmp = btn->GetBitmap();
+ wxMemoryDC dc(bmp);
+ dc.SetTextForeground(*wxWHITE);
+ dc.SetFont(wxGetApp().normal_font());
+
+ const wxRect rect = wxRect(0, 0, bmp.GetWidth(), bmp.GetHeight());
+ dc.DrawLabel("undef", rect, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL);
+
+ dc.SelectObject(wxNullBitmap);
+ btn->SetBitmapLabel(bmp);
+}
+
+void ColourPicker::set_value(const boost::any& value, bool change_event)
+{
+ m_disable_change_event = !change_event;
+ const wxString clr_str(boost::any_cast<wxString>(value));
+ auto field = dynamic_cast<wxColourPickerCtrl*>(window);
+
+ wxColour clr(clr_str);
+ if (clr_str.IsEmpty() || !clr.IsOk())
+ set_undef_value(field);
+ else
+ field->SetColour(clr);
+
+ m_disable_change_event = false;
+}
+boost::any& ColourPicker::get_value()
+{
+ auto colour = static_cast<wxColourPickerCtrl*>(window)->GetColour();
+ if (colour == wxTransparentColour)
+ m_value = std::string("");
+ else {
+ auto clr_str = wxString::Format(wxT("#%02X%02X%02X"), colour.Red(), colour.Green(), colour.Blue());
+ m_value = clr_str.ToStdString();
+ }
return m_value;
}
+void ColourPicker::msw_rescale()
+{
+ Field::msw_rescale();
+
+ wxColourPickerCtrl* field = dynamic_cast<wxColourPickerCtrl*>(window);
+ if (field->GetColour() == wxTransparentColour)
+ set_undef_value(field);
+}
+
void PointCtrl::BUILD()
{
auto temp = new wxBoxSizer(wxHORIZONTAL);
diff --git a/src/slic3r/GUI/Field.hpp b/src/slic3r/GUI/Field.hpp
index 6c16f90f2..761b99ed8 100644
--- a/src/slic3r/GUI/Field.hpp
+++ b/src/slic3r/GUI/Field.hpp
@@ -404,6 +404,8 @@ public:
class ColourPicker : public Field {
using Field::Field;
+
+ void set_undef_value(wxColourPickerCtrl* field);
public:
ColourPicker(const ConfigOptionDef& opt, const t_config_option_key& id) : Field(opt, id) {}
ColourPicker(wxWindow* parent, const ConfigOptionDef& opt, const t_config_option_key& id) : Field(parent, opt, id) {}
@@ -417,13 +419,9 @@ public:
dynamic_cast<wxColourPickerCtrl*>(window)->SetColour(value);
m_disable_change_event = false;
}
- void set_value(const boost::any& value, bool change_event = false) {
- m_disable_change_event = !change_event;
- dynamic_cast<wxColourPickerCtrl*>(window)->SetColour(boost::any_cast<wxString>(value));
- m_disable_change_event = false;
- }
-
+ void set_value(const boost::any& value, bool change_event = false) override;
boost::any& get_value() override;
+ void msw_rescale() override;
void enable() override { dynamic_cast<wxColourPickerCtrl*>(window)->Enable(); };
void disable() override{ dynamic_cast<wxColourPickerCtrl*>(window)->Disable(); };
diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp
index a7d178e72..4afd3a116 100644
--- a/src/slic3r/GUI/Tab.cpp
+++ b/src/slic3r/GUI/Tab.cpp
@@ -2558,7 +2558,33 @@ void TabPrinter::build_unregular_pages()
optgroup->append_single_option_line("retract_restart_extra_toolchange", extruder_idx);
optgroup = page->new_optgroup(_(L("Preview")));
- optgroup->append_single_option_line("extruder_colour", extruder_idx);
+
+ auto reset_to_filament_color = [this, extruder_idx](wxWindow* parent) {
+ add_scaled_button(parent, &m_reset_to_filament_color, "undo",
+ _(L("Reset to Filament Color")), wxBU_LEFT | wxBU_EXACTFIT);
+ ScalableButton* btn = m_reset_to_filament_color;
+ btn->SetFont(Slic3r::GUI::wxGetApp().normal_font());
+ auto sizer = new wxBoxSizer(wxHORIZONTAL);
+ sizer->Add(btn);
+
+ btn->Bind(wxEVT_BUTTON, [this, extruder_idx](wxCommandEvent& e)
+ {
+ std::vector<std::string> colors = static_cast<const ConfigOptionStrings*>(m_config->option("extruder_colour"))->values;
+ colors[extruder_idx] = "";
+
+ DynamicPrintConfig new_conf = *m_config;
+ new_conf.set_key_value("extruder_colour", new ConfigOptionStrings(colors));
+ load_config(new_conf);
+
+ update_dirty();
+ update();
+ });
+
+ return sizer;
+ };
+ line = optgroup->create_single_option_line("extruder_colour", extruder_idx);
+ line.append_widget(reset_to_filament_color);
+ optgroup->append_line(line);
#ifdef __WXMSW__
layout_page(page);
diff --git a/src/slic3r/GUI/Tab.hpp b/src/slic3r/GUI/Tab.hpp
index efefc47c5..0a9070700 100644
--- a/src/slic3r/GUI/Tab.hpp
+++ b/src/slic3r/GUI/Tab.hpp
@@ -371,6 +371,7 @@ public:
wxButton* m_serial_test_btn = nullptr;
ScalableButton* m_print_host_test_btn = nullptr;
ScalableButton* m_printhost_browse_btn = nullptr;
+ ScalableButton* m_reset_to_filament_color = nullptr;
size_t m_extruders_count;
size_t m_extruders_count_old = 0;