Keep instance mode selection when at least one instance is already selected

This commit is contained in:
Enrico Turri 2019-04-03 15:28:09 +02:00
parent 7d488e3424
commit 28ec3415eb

View File

@ -108,21 +108,26 @@ void Selection::add(unsigned int volume_idx, bool as_single_selection)
if (is_wipe_tower() && volume->is_wipe_tower) if (is_wipe_tower() && volume->is_wipe_tower)
return; return;
bool keep_instance_mode = (m_mode == Instance) && !as_single_selection && (is_single_full_instance() || is_multiple_full_instance());
// resets the current list if needed // resets the current list if needed
bool needs_reset = as_single_selection; bool needs_reset = as_single_selection;
needs_reset |= volume->is_wipe_tower; needs_reset |= volume->is_wipe_tower;
needs_reset |= is_wipe_tower() && !volume->is_wipe_tower; needs_reset |= is_wipe_tower() && !volume->is_wipe_tower;
needs_reset |= !is_modifier() && volume->is_modifier; needs_reset |= !keep_instance_mode && !is_modifier() && volume->is_modifier;
needs_reset |= is_modifier() && !volume->is_modifier; needs_reset |= is_modifier() && !volume->is_modifier;
if (needs_reset) if (needs_reset)
clear(); clear();
if (!contains_volume(volume_idx)) if (!contains_volume(volume_idx))
m_mode = volume->is_modifier ? Volume : Instance; {
if (!keep_instance_mode)
m_mode = volume->is_modifier ? Volume : Instance;
}
else else
// keep current mode // keep current mode
return; return;
switch (m_mode) switch (m_mode)
{ {