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

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/slic3r/GUI/GUI_ObjectList.hpp')
-rw-r--r--src/slic3r/GUI/GUI_ObjectList.hpp46
1 files changed, 39 insertions, 7 deletions
diff --git a/src/slic3r/GUI/GUI_ObjectList.hpp b/src/slic3r/GUI/GUI_ObjectList.hpp
index 7631782df..060659049 100644
--- a/src/slic3r/GUI/GUI_ObjectList.hpp
+++ b/src/slic3r/GUI/GUI_ObjectList.hpp
@@ -14,6 +14,7 @@
class wxBoxSizer;
class wxMenuItem;
class PrusaObjectDataViewModel;
+class PrusaMenu;
namespace Slic3r {
class ConfigOptionsGroup;
@@ -56,22 +57,38 @@ class ObjectList : public wxDataViewCtrl
struct dragged_item_data
{
- void init(const int obj_idx, const int vol_idx) {
+ void init(const int obj_idx, const int subobj_idx, const ItemType type) {
m_obj_idx = obj_idx;
- m_vol_idx = vol_idx;
+ m_type = type;
+ if (m_type&itVolume)
+ m_vol_idx = subobj_idx;
+ else
+ m_inst_idxs.insert(subobj_idx);
+ }
+
+ void init(const int obj_idx, const ItemType type) {
+ m_obj_idx = obj_idx;
+ m_type = type;
}
void clear() {
m_obj_idx = -1;
- m_vol_idx = -1;
+ m_vol_idx = -1;
+ m_inst_idxs.clear();
+ m_type = itUndef;
}
int obj_idx() const { return m_obj_idx; }
- int vol_idx() const { return m_vol_idx; }
+ int sub_obj_idx() const { return m_vol_idx; }
+ ItemType type() const { return m_type; }
+ std::set<int>& inst_idxs() { return m_inst_idxs; }
private:
int m_obj_idx = -1;
int m_vol_idx = -1;
+ std::set<int> m_inst_idxs{};
+ ItemType m_type = itUndef;
+
} m_dragged_data;
wxBoxSizer *m_sizer {nullptr};
@@ -88,12 +105,14 @@ class ObjectList : public wxDataViewCtrl
wxBitmap m_bmp_cog;
wxBitmap m_bmp_split;
- wxMenu m_menu_object;
- wxMenu m_menu_part;
- wxMenu m_menu_sla_object;
+ PrusaMenu m_menu_object;
+ PrusaMenu m_menu_part;
+ PrusaMenu m_menu_sla_object;
+ PrusaMenu m_menu_instance;
wxMenuItem* m_menu_item_split { nullptr };
wxMenuItem* m_menu_item_split_part { nullptr };
wxMenuItem* m_menu_item_settings { nullptr };
+ wxMenuItem* m_menu_item_split_instances { nullptr };
std::vector<wxBitmap*> m_bmp_vector;
@@ -143,15 +162,21 @@ public:
void key_event(wxKeyEvent& event);
void get_settings_choice(const wxString& category_name);
+ void get_freq_settings_choice(const wxString& bundle_name);
+ void update_settings_item();
+
void append_menu_item_add_generic(wxMenuItem* menu, const int type);
void append_menu_items_add_volume(wxMenu* menu);
wxMenuItem* append_menu_item_split(wxMenu* menu);
wxMenuItem* append_menu_item_settings(wxMenu* menu);
wxMenuItem* append_menu_item_change_type(wxMenu* menu);
+ wxMenuItem* append_menu_item_instance_to_object(wxMenu* menu);
void create_object_popupmenu(wxMenu *menu);
void create_sla_object_popupmenu(wxMenu*menu);
void create_part_popupmenu(wxMenu*menu);
+ void create_instance_popupmenu(wxMenu*menu);
wxMenu* create_settings_popupmenu(wxMenu *parent_menu);
+ void create_freq_settings_popupmenu(wxMenu *parent_menu);
void update_opt_keys(t_config_option_keys& t_optopt_keys);
@@ -166,6 +191,8 @@ public:
void split();
bool get_volume_by_item(const wxDataViewItem& item, ModelVolume*& volume);
bool is_splittable();
+ bool selected_instances_of_same_object();
+ bool can_split_instances();
wxPoint get_mouse_position_in_control();
wxBoxSizer* get_sizer() {return m_sizer;}
@@ -221,6 +248,10 @@ public:
void last_volume_is_deleted(const int obj_idx);
bool has_multi_part_objects();
void update_settings_items();
+ void update_object_menu();
+
+ void instances_to_separated_object(const int obj_idx, const std::set<int>& inst_idx);
+ void split_instances();
private:
void OnChar(wxKeyEvent& event);
@@ -229,6 +260,7 @@ private:
void OnBeginDrag(wxDataViewEvent &event);
void OnDropPossible(wxDataViewEvent &event);
void OnDrop(wxDataViewEvent &event);
+ bool can_drop(const wxDataViewItem& item) const ;
void ItemValueChanged(wxDataViewEvent &event);
void OnEditingDone(wxDataViewEvent &event);