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
diff options
context:
space:
mode:
authorYuSanka <yusanka@gmail.com>2019-11-03 21:34:34 +0300
committerYuSanka <yusanka@gmail.com>2019-11-03 21:34:34 +0300
commitc564f693e906d1764fffadba7bf7a29aecfb6742 (patch)
tree762edc1a458bd72090cd83b624234e19bce5e3be /src/slic3r/GUI
parent674c6ce1c53f4b0cf9b3340de5f5e75087a8f5a1 (diff)
parentbb8d59391fdd21317a68e4b83c54fc3f3fe88c0a (diff)
Merge remote-tracking branch 'origin/master' into ys_color_print_extension
Diffstat (limited to 'src/slic3r/GUI')
-rw-r--r--src/slic3r/GUI/BackgroundSlicingProcess.cpp1
-rw-r--r--src/slic3r/GUI/Field.cpp40
-rw-r--r--src/slic3r/GUI/GLCanvas3D.cpp2
-rw-r--r--src/slic3r/GUI/GUI_App.hpp9
-rw-r--r--src/slic3r/GUI/GUI_ObjectList.cpp4
-rw-r--r--src/slic3r/GUI/GUI_ObjectManipulation.cpp6
-rw-r--r--src/slic3r/GUI/GUI_Preview.cpp2
-rw-r--r--src/slic3r/GUI/Gizmos/GLGizmosManager.hpp9
-rw-r--r--src/slic3r/GUI/OptionsGroup.cpp2
-rw-r--r--src/slic3r/GUI/Plater.cpp4
-rw-r--r--src/slic3r/GUI/wxExtensions.cpp2
11 files changed, 61 insertions, 20 deletions
diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
index a1db6884e..6c138d4d0 100644
--- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp
+++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
@@ -55,6 +55,7 @@ bool BackgroundSlicingProcess::select_technology(PrinterTechnology tech)
switch (tech) {
case ptFFF: m_print = m_fff_print; break;
case ptSLA: m_print = m_sla_print; break;
+ default: assert(false); break;
}
changed = true;
}
diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp
index 07d75c947..42e3448fc 100644
--- a/src/slic3r/GUI/Field.cpp
+++ b/src/slic3r/GUI/Field.cpp
@@ -150,7 +150,13 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
case coFloat:{
if (m_opt.type == coPercent && !str.IsEmpty() && str.Last() == '%')
str.RemoveLast();
- else if (check_value && !str.IsEmpty() && str.Last() == '%') {
+ else if (!str.IsEmpty() && str.Last() == '%')
+ {
+ if (!check_value) {
+ m_value.clear();
+ break;
+ }
+
wxString label = m_Label->GetLabel();
if (label.Last() == '\n') label.RemoveLast();
while (label.Last() == ' ') label.RemoveLast();
@@ -169,13 +175,21 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
{
if (m_opt.nullable && str == na_value())
val = ConfigOptionFloatsNullable::nil_value();
- else if (check_value && !str.ToCDouble(&val))
+ else if (!str.ToCDouble(&val))
{
+ if (!check_value) {
+ m_value.clear();
+ break;
+ }
show_error(m_parent, _(L("Invalid numeric input.")));
set_value(double_to_string(val), true);
}
- if (check_value && (m_opt.min > val || val > m_opt.max))
+ if (m_opt.min > val || val > m_opt.max)
{
+ if (!check_value) {
+ m_value.clear();
+ break;
+ }
show_error(m_parent, _(L("Input value is out of range")));
if (m_opt.min > val) val = m_opt.min;
if (val > m_opt.max) val = m_opt.max;
@@ -192,15 +206,24 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
double val = 0.;
// Replace the first occurence of comma in decimal number.
str.Replace(",", ".", false);
- if (check_value && !str.ToCDouble(&val))
+ if (!str.ToCDouble(&val))
{
+ if (!check_value) {
+ m_value.clear();
+ break;
+ }
show_error(m_parent, _(L("Invalid numeric input.")));
set_value(double_to_string(val), true);
}
- else if (check_value && ((m_opt.sidetext.rfind("mm/s") != std::string::npos && val > m_opt.max) ||
+ else if (((m_opt.sidetext.rfind("mm/s") != std::string::npos && val > m_opt.max) ||
(m_opt.sidetext.rfind("mm ") != std::string::npos && val > 1)) &&
(m_value.empty() || std::string(str.ToUTF8().data()) != boost::any_cast<std::string>(m_value)))
{
+ if (!check_value) {
+ m_value.clear();
+ break;
+ }
+
const std::string sidetext = m_opt.sidetext.rfind("mm/s") != std::string::npos ? "mm/s" : "mm";
const wxString stVal = double_to_string(val, 2);
const wxString msg_text = wxString::Format(_(L("Do you mean %s%% instead of %s %s?\n"
@@ -351,6 +374,7 @@ bool TextCtrl::value_was_changed()
boost::any val = m_value;
wxString ret_str = static_cast<wxTextCtrl*>(window)->GetValue();
// update m_value!
+ // ret_str might be changed inside get_value_by_opt_type
get_value_by_opt_type(ret_str);
switch (m_opt.type) {
@@ -396,8 +420,10 @@ void TextCtrl::set_value(const boost::any& value, bool change_event/* = false*/)
if (!change_event) {
wxString ret_str = static_cast<wxTextCtrl*>(window)->GetValue();
- // update m_value to correct work of next value_was_changed(),
- // but don't check/change inputed value and don't show a warning message
+ /* Update m_value to correct work of next value_was_changed().
+ * But after checking of entered value, don't fix the "incorrect" value and don't show a warning message,
+ * just clear m_value in this case.
+ */
get_value_by_opt_type(ret_str, false);
}
}
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 6b9232e1d..7e782dee3 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -1949,7 +1949,7 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re
if (it->new_geometry()) {
// New volume.
unsigned int old_id = find_old_volume_id(it->composite_id);
- if (old_id != -1)
+ if (old_id != (unsigned int)-1)
map_glvolume_old_to_new[old_id] = m_volumes.volumes.size();
m_volumes.load_object_volume(&model_object, obj_idx, volume_idx, instance_idx, m_color_by, m_initialized);
m_volumes.volumes.back()->geometry_id = key.geometry_id;
diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp
index c5ddc0152..9bfc34543 100644
--- a/src/slic3r/GUI/GUI_App.hpp
+++ b/src/slic3r/GUI/GUI_App.hpp
@@ -87,7 +87,7 @@ class GUI_App : public wxApp
wxFont m_bold_font;
wxFont m_normal_font;
- size_t m_em_unit; // width of a "m"-symbol in pixels for current system font
+ int m_em_unit; // width of a "m"-symbol in pixels for current system font
// Note: for 100% Scale m_em_unit = 10 -> it's a good enough coefficient for a size setting of controls
std::unique_ptr<wxLocale> m_wxLocale;
@@ -105,7 +105,7 @@ public:
bool initialized() const { return m_initialized; }
GUI_App();
- ~GUI_App();
+ ~GUI_App() override;
static unsigned get_colour_approx_luma(const wxColour &colour);
static bool dark_mode();
@@ -124,8 +124,7 @@ public:
const wxFont& small_font() { return m_small_font; }
const wxFont& bold_font() { return m_bold_font; }
const wxFont& normal_font() { return m_normal_font; }
- size_t em_unit() const { return m_em_unit; }
- void set_em_unit(const size_t em_unit) { m_em_unit = em_unit; }
+ int em_unit() const { return m_em_unit; }
float toolbar_icon_scale(const bool is_limited = false) const;
void recreate_GUI();
@@ -155,7 +154,7 @@ public:
// Translate the language code to a code, for which Prusa Research maintains translations. Defaults to "en_US".
wxString current_language_code_safe() const;
- virtual bool OnExceptionInMainLoop();
+ virtual bool OnExceptionInMainLoop() override;
#ifdef __APPLE__
// wxWidgets override to get an event on open files.
diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp
index 377c26e79..1cbfc2bdf 100644
--- a/src/slic3r/GUI/GUI_ObjectList.cpp
+++ b/src/slic3r/GUI/GUI_ObjectList.cpp
@@ -445,7 +445,7 @@ void ObjectList::update_extruder_values_for_items(const size_t max_extruder)
auto object = (*m_objects)[i];
wxString extruder;
if (!object->config.has("extruder") ||
- object->config.option<ConfigOptionInt>("extruder")->value > max_extruder)
+ size_t(object->config.option<ConfigOptionInt>("extruder")->value) > max_extruder)
extruder = _(L("default"));
else
extruder = wxString::Format("%d", object->config.option<ConfigOptionInt>("extruder")->value);
@@ -457,7 +457,7 @@ void ObjectList::update_extruder_values_for_items(const size_t max_extruder)
item = m_objects_model->GetItemByVolumeId(i, id);
if (!item) continue;
if (!object->volumes[id]->config.has("extruder") ||
- object->volumes[id]->config.option<ConfigOptionInt>("extruder")->value > max_extruder)
+ size_t(object->volumes[id]->config.option<ConfigOptionInt>("extruder")->value) > max_extruder)
extruder = _(L("default"));
else
extruder = wxString::Format("%d", object->volumes[id]->config.option<ConfigOptionInt>("extruder")->value);
diff --git a/src/slic3r/GUI/GUI_ObjectManipulation.cpp b/src/slic3r/GUI/GUI_ObjectManipulation.cpp
index d1cb1348c..5e939cb71 100644
--- a/src/slic3r/GUI/GUI_ObjectManipulation.cpp
+++ b/src/slic3r/GUI/GUI_ObjectManipulation.cpp
@@ -634,7 +634,11 @@ void ObjectManipulation::update_reset_buttons_visibility()
show_drop_to_bed = (std::abs(min_z) > EPSILON);
}
- wxGetApp().CallAfter([this, show_rotation, show_scale, show_drop_to_bed]{
+ wxGetApp().CallAfter([this, show_rotation, show_scale, show_drop_to_bed] {
+ // There is a case (under OSX), when this function is called after the Manipulation panel is hidden
+ // So, let check if Manipulation panel is still shown for this moment
+ if (!this->IsShown())
+ return;
m_reset_rotation_button->Show(show_rotation);
m_reset_scale_button->Show(show_scale);
m_drop_to_bed_button->Show(show_drop_to_bed);
diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp
index 064fcb5c5..81367081f 100644
--- a/src/slic3r/GUI/GUI_Preview.cpp
+++ b/src/slic3r/GUI/GUI_Preview.cpp
@@ -375,6 +375,8 @@ void Preview::load_print(bool keep_z_range)
load_print_as_fff(keep_z_range);
else if (tech == ptSLA)
load_print_as_sla();
+
+ Layout();
}
void Preview::reload_print(bool keep_volumes)
diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp
index f649c98b2..0defb1348 100644
--- a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp
+++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp
@@ -114,8 +114,17 @@ public:
m_serializing = true;
+ // Following is needed to know which to be turn on, but not actually modify
+ // m_current prematurely, so activate_gizmo is not confused.
+ EType old_current = m_current;
ar(m_current);
+ EType new_current = m_current;
+ m_current = old_current;
+ // activate_gizmo call sets m_current and calls set_state for the gizmo
+ // it does nothing in case the gizmo is already activated
+ // it can safely be called for Undefined gizmo
+ activate_gizmo(new_current);
if (m_current != Undefined)
m_gizmos[m_current]->load(ar);
}
diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp
index 698c1e034..8b6f5bc30 100644
--- a/src/slic3r/GUI/OptionsGroup.cpp
+++ b/src/slic3r/GUI/OptionsGroup.cpp
@@ -233,7 +233,7 @@ void OptionsGroup::append_line(const Line& line, wxStaticText** full_Label/* = n
add_undo_buttuns_to_sizer(sizer, field);
if (is_window_field(field))
- sizer->Add(field->getWindow(), option.opt.full_width ? 1 : 0, //(option.opt.full_width ? wxEXPAND : 0) |
+ sizer->Add(field->getWindow(), option.opt.full_width ? 1 : 0, //(option.opt.full_width ? wxEXPAND : 0) |
wxBOTTOM | wxTOP | (option.opt.full_width ? wxEXPAND : wxALIGN_CENTER_VERTICAL), (wxOSX || !staticbox) ? 0 : 2);
if (is_sizer_field(field))
sizer->Add(field->getSizer(), 1, /*(*/option.opt.full_width ? wxEXPAND : /*0) |*/ wxALIGN_CENTER_VERTICAL, 0);
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 5b1fdc91c..14fbdf72c 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -4794,7 +4794,7 @@ bool Plater::undo_redo_string_getter(const bool is_undo, int idx, const char** o
const std::vector<UndoRedo::Snapshot>& ss_stack = p->undo_redo_stack().snapshots();
const int idx_in_ss_stack = p->get_active_snapshot_index() + (is_undo ? -(++idx) : idx);
- if (0 < idx_in_ss_stack && idx_in_ss_stack < ss_stack.size() - 1) {
+ if (0 < idx_in_ss_stack && (size_t)idx_in_ss_stack < ss_stack.size() - 1) {
*out_text = ss_stack[idx_in_ss_stack].name.c_str();
return true;
}
@@ -4807,7 +4807,7 @@ void Plater::undo_redo_topmost_string_getter(const bool is_undo, std::string& ou
const std::vector<UndoRedo::Snapshot>& ss_stack = p->undo_redo_stack().snapshots();
const int idx_in_ss_stack = p->get_active_snapshot_index() + (is_undo ? -1 : 0);
- if (0 < idx_in_ss_stack && idx_in_ss_stack < ss_stack.size() - 1) {
+ if (0 < idx_in_ss_stack && (size_t)idx_in_ss_stack < ss_stack.size() - 1) {
out_text = ss_stack[idx_in_ss_stack].name;
return;
}
diff --git a/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp
index 238860ce7..40f509ad7 100644
--- a/src/slic3r/GUI/wxExtensions.cpp
+++ b/src/slic3r/GUI/wxExtensions.cpp
@@ -1061,7 +1061,7 @@ wxDataViewItem ObjectDataViewModel::Delete(const wxDataViewItem &item)
node_parent->GetChildren().Remove(node);
if (id > 0) {
- if(id == node_parent->GetChildCount()) id--;
+ if (size_t(id) == node_parent->GetChildCount()) id--;
ret_item = wxDataViewItem(node_parent->GetChildren().Item(id));
}