Copy and paste -> Disabled paste of volumes when nothing is selected and fixed enabling/disabling of paste item in toolbar and edit menu
This commit is contained in:
parent
4718c839f6
commit
4046d517c9
@ -3711,10 +3711,12 @@ void Plater::paste_from_clipboard()
|
||||
{
|
||||
p->view3D->get_canvas3d()->get_selection().paste_from_clipboard();
|
||||
}
|
||||
|
||||
bool Plater::is_selection_clipboard_empty() const
|
||||
bool Plater::can_paste_from_clipboard() const
|
||||
{
|
||||
return p->view3D->get_canvas3d()->get_selection().is_clipboard_empty();
|
||||
const Selection& selection = p->view3D->get_canvas3d()->get_selection();
|
||||
const Selection::Clipboard& clipboard = selection.get_clipboard();
|
||||
Selection::EMode mode = clipboard.get_mode();
|
||||
return !clipboard.is_empty() && ((mode == Selection::Instance) || selection.is_from_single_instance());
|
||||
}
|
||||
|
||||
bool Plater::can_delete() const { return p->can_delete(); }
|
||||
@ -3726,6 +3728,6 @@ bool Plater::can_split_to_volumes() const { return p->can_split_to_volumes(); }
|
||||
bool Plater::can_arrange() const { return p->can_arrange(); }
|
||||
bool Plater::can_layers_editing() const { return p->can_layers_editing(); }
|
||||
bool Plater::can_copy() const { return !is_selection_empty(); }
|
||||
bool Plater::can_paste() const { return !is_selection_clipboard_empty(); }
|
||||
bool Plater::can_paste() const { return can_paste_from_clipboard(); }
|
||||
|
||||
}} // namespace Slic3r::GUI
|
||||
|
@ -184,7 +184,7 @@ public:
|
||||
|
||||
void copy_selection_to_clipboard();
|
||||
void paste_from_clipboard();
|
||||
bool is_selection_clipboard_empty() const;
|
||||
bool can_paste_from_clipboard() const;
|
||||
|
||||
bool can_delete() const;
|
||||
bool can_delete_all() const;
|
||||
|
@ -1067,15 +1067,21 @@ void Selection::paste_from_clipboard()
|
||||
if (!m_valid || m_clipboard.is_empty())
|
||||
return;
|
||||
|
||||
if ((m_clipboard.get_mode() == Volume) && is_from_single_instance())
|
||||
switch (m_clipboard.get_mode())
|
||||
{
|
||||
case Volume:
|
||||
{
|
||||
if (is_from_single_instance())
|
||||
paste_volumes_from_clipboard();
|
||||
else
|
||||
paste_objects_from_clipboard();
|
||||
}
|
||||
|
||||
bool Selection::is_clipboard_empty()
|
||||
{
|
||||
return m_clipboard.is_empty();
|
||||
break;
|
||||
}
|
||||
case Instance:
|
||||
{
|
||||
paste_objects_from_clipboard();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Selection::update_valid()
|
||||
|
@ -138,19 +138,6 @@ public:
|
||||
typedef std::set<int> InstanceIdxsList;
|
||||
typedef std::map<int, InstanceIdxsList> ObjectIdxsToInstanceIdxsMap;
|
||||
|
||||
private:
|
||||
struct Cache
|
||||
{
|
||||
// Cache of GLVolume derived transformation matrices, valid during mouse dragging.
|
||||
VolumesCache volumes_data;
|
||||
// Center of the dragged selection, valid during mouse dragging.
|
||||
Vec3d dragging_center;
|
||||
// Map from indices of ModelObject instances in Model::objects
|
||||
// to a set of indices of ModelVolume instances in ModelObject::instances
|
||||
// Here the index means a position inside the respective std::vector, not ModelID.
|
||||
ObjectIdxsToInstanceIdxsMap content;
|
||||
};
|
||||
|
||||
class Clipboard
|
||||
{
|
||||
Model m_model;
|
||||
@ -168,6 +155,19 @@ private:
|
||||
void set_mode(Selection::EMode mode) { m_mode = mode; }
|
||||
};
|
||||
|
||||
private:
|
||||
struct Cache
|
||||
{
|
||||
// Cache of GLVolume derived transformation matrices, valid during mouse dragging.
|
||||
VolumesCache volumes_data;
|
||||
// Center of the dragged selection, valid during mouse dragging.
|
||||
Vec3d dragging_center;
|
||||
// Map from indices of ModelObject instances in Model::objects
|
||||
// to a set of indices of ModelVolume instances in ModelObject::instances
|
||||
// Here the index means a position inside the respective std::vector, not ModelID.
|
||||
ObjectIdxsToInstanceIdxsMap content;
|
||||
};
|
||||
|
||||
// Volumes owned by GLCanvas3D.
|
||||
GLVolumePtrs* m_volumes;
|
||||
// Model, not owned.
|
||||
@ -287,7 +287,8 @@ public:
|
||||
|
||||
void copy_to_clipboard();
|
||||
void paste_from_clipboard();
|
||||
bool is_clipboard_empty();
|
||||
|
||||
const Clipboard& get_clipboard() const { return m_clipboard; }
|
||||
|
||||
private:
|
||||
void update_valid();
|
||||
|
Loading…
Reference in New Issue
Block a user