Undo / Redo fixes

This commit is contained in:
bubnikv 2019-07-05 19:06:19 +02:00
parent 6a3fc5bde3
commit 4e2fda3315
11 changed files with 151 additions and 89 deletions
src/slic3r/GUI

View file

@ -2116,7 +2116,7 @@ void ObjectList::part_selection_changed()
panel.Thaw();
}
void ObjectList::add_object_to_list(size_t obj_idx)
void ObjectList::add_object_to_list(size_t obj_idx, bool call_selection_changed)
{
auto model_object = (*m_objects)[obj_idx];
const wxString& item_name = from_u8(model_object->name);
@ -2137,7 +2137,9 @@ void ObjectList::add_object_to_list(size_t obj_idx)
false);
auto opt_keys = volume->config.keys();
if (!opt_keys.empty() && !(opt_keys.size() == 1 && opt_keys[0] == "extruder")) {
select_item(m_objects_model->AddSettingsChild(vol_item));
const wxDataViewItem &settings_item = m_objects_model->AddSettingsChild(vol_item);
if (call_selection_changed)
select_item(settings_item);
Expand(vol_item);
}
}
@ -2151,7 +2153,9 @@ void ObjectList::add_object_to_list(size_t obj_idx)
// add settings to the object, if it has those
auto opt_keys = model_object->config.keys();
if (!opt_keys.empty() && !(opt_keys.size() == 1 && opt_keys[0] == "extruder")) {
select_item(m_objects_model->AddSettingsChild(item));
const wxDataViewItem &settings_item = m_objects_model->AddSettingsChild(item);
if (call_selection_changed)
select_item(settings_item);
Expand(item);
}
@ -2159,7 +2163,8 @@ void ObjectList::add_object_to_list(size_t obj_idx)
add_layer_root_item(item);
#ifndef __WXOSX__
selection_changed();
if (call_selection_changed)
selection_changed();
#endif //__WXMSW__
}
@ -2963,11 +2968,10 @@ void ObjectList::change_part_type()
void ObjectList::last_volume_is_deleted(const int obj_idx)
{
if (obj_idx < 0 || m_objects->empty() ||
obj_idx <= m_objects->size() ||
(*m_objects)[obj_idx]->volumes.empty())
if (obj_idx < 0 || obj_idx >= m_objects->size() || (*m_objects)[obj_idx]->volumes.empty())
return;
auto volume = (*m_objects)[obj_idx]->volumes[0];
auto volume = (*m_objects)[obj_idx]->volumes.front();
// clear volume's config values
volume->config.clear();
@ -3388,14 +3392,20 @@ void ObjectList::recreate_object_list()
m_prevent_list_events = true;
m_prevent_canvas_selection_update = true;
// Unselect all objects before deleting them, so that no change of selection is emitted during deletion.
this->UnselectAll();
m_objects_model->DeleteAll();
size_t obj_idx = 0;
while (obj_idx < m_objects->size()) {
add_object_to_list(obj_idx);
add_object_to_list(obj_idx, false);
++obj_idx;
}
#ifndef __WXOSX__
selection_changed();
#endif /* __WXOSX__ */
m_prevent_canvas_selection_update = false;
m_prevent_list_events = false;
}