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

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuSanka <yusanka@gmail.com>2020-03-12 16:50:20 +0300
committerYuSanka <yusanka@gmail.com>2020-03-12 17:11:31 +0300
commit6a6790b8e76848a1cebf6fcb4db250948b448b7a (patch)
treec768ece15539ff7bb86d7e8ce746a0570bdc4ca0 /src/slic3r/GUI
parentc145d60df437447f16d06be9b85fa90df0e58185 (diff)
Implemented disabling of Add buttons if next layer range couldn't be added
+ Fixed "Layer ranges" expand.
Diffstat (limited to 'src/slic3r/GUI')
-rw-r--r--src/slic3r/GUI/GUI_ObjectLayers.cpp5
-rw-r--r--src/slic3r/GUI/GUI_ObjectList.cpp40
-rw-r--r--src/slic3r/GUI/GUI_ObjectList.hpp1
3 files changed, 41 insertions, 5 deletions
diff --git a/src/slic3r/GUI/GUI_ObjectLayers.cpp b/src/slic3r/GUI/GUI_ObjectLayers.cpp
index d62bb2727..157e45ab4 100644
--- a/src/slic3r/GUI/GUI_ObjectLayers.cpp
+++ b/src/slic3r/GUI/GUI_ObjectLayers.cpp
@@ -156,8 +156,11 @@ void ObjectLayers::create_layers_list()
const t_layer_height_range& range = layer.first;
auto del_btn = new PlusMinusButton(m_parent, m_bmp_delete, range);
del_btn->SetToolTip(_(L("Remove layer range")));
+
auto add_btn = new PlusMinusButton(m_parent, m_bmp_add, range);
- add_btn->SetToolTip(_(L("Add layer range")));
+ wxString tooltip = wxGetApp().obj_list()->can_add_new_range_after_current(range);
+ add_btn->SetToolTip(tooltip.IsEmpty() ? _(L("Add layer range")) : tooltip);
+ add_btn->Enable(tooltip.IsEmpty());
auto sizer = create_layer(range, del_btn, add_btn);
sizer->Add(del_btn, 0, wxRIGHT | wxLEFT, em_unit(m_parent));
diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp
index 80c1ce364..5ac22e54a 100644
--- a/src/slic3r/GUI/GUI_ObjectList.cpp
+++ b/src/slic3r/GUI/GUI_ObjectList.cpp
@@ -2978,6 +2978,40 @@ void ObjectList::add_layer_range_after_current(const t_layer_height_range curren
select_item(layers_item);
}
+wxString ObjectList::can_add_new_range_after_current(const t_layer_height_range current_range)
+{
+ wxString ret;
+ const int obj_idx = get_selected_obj_idx();
+ if (obj_idx < 0)
+ // This should not happen.
+ return ret;
+
+ t_layer_config_ranges& ranges = object(obj_idx)->layer_config_ranges;
+ auto it_range = ranges.find(current_range);
+ assert(it_range != ranges.end());
+ if (it_range == ranges.end())
+ // This shoudl not happen.
+ return ret;
+
+ auto it_next_range = it_range;
+ if (++it_next_range == ranges.end())
+ return ret;
+
+ if (const std::pair<coordf_t, coordf_t>& next_range = it_next_range->first; current_range.second <= next_range.first)
+ {
+ if (current_range.second == next_range.first &&
+ next_range.second - next_range.first < get_min_layer_height(ranges.at(next_range).opt_int("extruder")))
+ ret = _(L("A difference between ranges is a less than minimum layer height."));
+ }
+ else
+ ret = _(L("End of current range is bigger then next one."));
+
+ if (!ret.IsEmpty())
+ ret += "\n" + _(L("New range between them couldn't be added."));
+
+ return ret;
+}
+
void ObjectList::add_layer_item(const t_layer_height_range& range,
const wxDataViewItem layers_item,
const int layer_idx /* = -1*/)
@@ -3048,12 +3082,10 @@ bool ObjectList::edit_layer_range(const t_layer_height_range& range, const t_lay
add_layer_item(r.first, root_item);
}
- if (dont_update_ui)
- return true;
+ if (!dont_update_ui)
+ select_item(sel_type&itLayer ? m_objects_model->GetItemByLayerRange(obj_idx, new_range) : root_item);
- select_item(sel_type&itLayer ? m_objects_model->GetItemByLayerRange(obj_idx, new_range) : root_item);
Expand(root_item);
-
return true;
}
diff --git a/src/slic3r/GUI/GUI_ObjectList.hpp b/src/slic3r/GUI/GUI_ObjectList.hpp
index 0f067d116..adaa31242 100644
--- a/src/slic3r/GUI/GUI_ObjectList.hpp
+++ b/src/slic3r/GUI/GUI_ObjectList.hpp
@@ -327,6 +327,7 @@ public:
// may have been postponed from the "kill focus" event of a text field, if the focus was lost for the "add layer" button.
// Rather providing the range by a value than by a reference, so that the memory referenced cannot be invalidated.
void add_layer_range_after_current(const t_layer_height_range current_range);
+ wxString can_add_new_range_after_current( t_layer_height_range current_range);
void add_layer_item (const t_layer_height_range& range,
const wxDataViewItem layers_item,
const int layer_idx = -1);