mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-10 08:17:51 -06:00
Implemented disabling of Add buttons if next layer range couldn't be added
+ Fixed "Layer ranges" expand.
This commit is contained in:
parent
c145d60df4
commit
6a6790b8e7
3 changed files with 41 additions and 5 deletions
|
@ -156,8 +156,11 @@ void ObjectLayers::create_layers_list()
|
||||||
const t_layer_height_range& range = layer.first;
|
const t_layer_height_range& range = layer.first;
|
||||||
auto del_btn = new PlusMinusButton(m_parent, m_bmp_delete, range);
|
auto del_btn = new PlusMinusButton(m_parent, m_bmp_delete, range);
|
||||||
del_btn->SetToolTip(_(L("Remove layer range")));
|
del_btn->SetToolTip(_(L("Remove layer range")));
|
||||||
|
|
||||||
auto add_btn = new PlusMinusButton(m_parent, m_bmp_add, 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);
|
auto sizer = create_layer(range, del_btn, add_btn);
|
||||||
sizer->Add(del_btn, 0, wxRIGHT | wxLEFT, em_unit(m_parent));
|
sizer->Add(del_btn, 0, wxRIGHT | wxLEFT, em_unit(m_parent));
|
||||||
|
|
|
@ -2978,6 +2978,40 @@ void ObjectList::add_layer_range_after_current(const t_layer_height_range curren
|
||||||
select_item(layers_item);
|
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,
|
void ObjectList::add_layer_item(const t_layer_height_range& range,
|
||||||
const wxDataViewItem layers_item,
|
const wxDataViewItem layers_item,
|
||||||
const int layer_idx /* = -1*/)
|
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);
|
add_layer_item(r.first, root_item);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dont_update_ui)
|
if (!dont_update_ui)
|
||||||
return true;
|
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);
|
Expand(root_item);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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.
|
// 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.
|
// 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);
|
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,
|
void add_layer_item (const t_layer_height_range& range,
|
||||||
const wxDataViewItem layers_item,
|
const wxDataViewItem layers_item,
|
||||||
const int layer_idx = -1);
|
const int layer_idx = -1);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue