mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 04:31:15 -06:00 
			
		
		
		
	Merge branch 'master' of https://github.com/Prusa3d/Slic3r
This commit is contained in:
		
						commit
						c6bdf45323
					
				
					 4 changed files with 51 additions and 33 deletions
				
			
		|  | @ -78,6 +78,10 @@ ObjectList::ObjectList(wxWindow* parent) : | ||||||
|     Bind(wxEVT_DATAVIEW_ITEM_VALUE_CHANGED, &ObjectList::ItemValueChanged,  this); |     Bind(wxEVT_DATAVIEW_ITEM_VALUE_CHANGED, &ObjectList::ItemValueChanged,  this); | ||||||
| 
 | 
 | ||||||
|     Bind(wxCUSTOMEVT_LAST_VOLUME_IS_DELETED, [this](wxCommandEvent& e)   { last_volume_is_deleted(e.GetInt()); }); |     Bind(wxCUSTOMEVT_LAST_VOLUME_IS_DELETED, [this](wxCommandEvent& e)   { last_volume_is_deleted(e.GetInt()); }); | ||||||
|  | 
 | ||||||
|  | #ifdef __WXOSX__ | ||||||
|  |     Bind(wxEVT_KEY_DOWN, &ObjectList::OnChar, this); | ||||||
|  | #endif //__WXOSX__
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ObjectList::~ObjectList() | ObjectList::~ObjectList() | ||||||
|  | @ -93,10 +97,6 @@ void ObjectList::create_objects_ctrl() | ||||||
|     // 2. change it to the normal min value (200) after first whole App updating/layouting
 |     // 2. change it to the normal min value (200) after first whole App updating/layouting
 | ||||||
|     SetMinSize(wxSize(-1, 1500));   // #ys_FIXME 
 |     SetMinSize(wxSize(-1, 1500));   // #ys_FIXME 
 | ||||||
| 
 | 
 | ||||||
| #ifdef __WXOSX__ |  | ||||||
|     Connect(wxEVT_CHAR, wxKeyEventHandler(ObjectList::OnChar), NULL, this); |  | ||||||
| #endif //__WXOSX__
 |  | ||||||
| 
 |  | ||||||
|     m_sizer = new wxBoxSizer(wxVERTICAL); |     m_sizer = new wxBoxSizer(wxVERTICAL); | ||||||
|     m_sizer->Add(this, 1, wxGROW | wxLEFT, 20); |     m_sizer->Add(this, 1, wxGROW | wxLEFT, 20); | ||||||
| 
 | 
 | ||||||
|  | @ -337,14 +337,15 @@ void ObjectList::selection_changed() | ||||||
| 
 | 
 | ||||||
| void ObjectList::OnChar(wxKeyEvent& event) | void ObjectList::OnChar(wxKeyEvent& event) | ||||||
| { | { | ||||||
|     if (event.GetKeyCode() == WXK_DELETE && event.GetKeyCode() == WXK_BACK){ |     printf("KeyDown event\n"); | ||||||
|  |     if (event.GetKeyCode() == WXK_BACK){ | ||||||
|         printf("WXK_BACK\n"); |         printf("WXK_BACK\n"); | ||||||
|         remove(); |         remove(); | ||||||
|     } |     } | ||||||
|     else if (wxGetKeyState(wxKeyCode('A')) && wxGetKeyState(WXK_SHIFT)) |     else if (wxGetKeyState(wxKeyCode('A')) && wxGetKeyState(WXK_SHIFT)) | ||||||
|         select_item_all_children(); |         select_item_all_children(); | ||||||
|     else | 
 | ||||||
|         event.Skip(); |     event.Skip(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void ObjectList::OnContextMenu(wxDataViewEvent&) | void ObjectList::OnContextMenu(wxDataViewEvent&) | ||||||
|  | @ -424,12 +425,6 @@ void ObjectList::key_event(wxKeyEvent& event) | ||||||
|         event.Skip(); |         event.Skip(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| struct draging_item_data |  | ||||||
| { |  | ||||||
|     int obj_idx; |  | ||||||
|     int vol_idx; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| void ObjectList::OnBeginDrag(wxDataViewEvent &event) | void ObjectList::OnBeginDrag(wxDataViewEvent &event) | ||||||
| { | { | ||||||
|     wxDataViewItem item(event.GetItem()); |     wxDataViewItem item(event.GetItem()); | ||||||
|  | @ -449,10 +444,10 @@ void ObjectList::OnBeginDrag(wxDataViewEvent &event) | ||||||
|     **/ |     **/ | ||||||
|     m_prevent_list_events = true;//it's needed for GTK
 |     m_prevent_list_events = true;//it's needed for GTK
 | ||||||
| 
 | 
 | ||||||
|     wxTextDataObject *obj = new wxTextDataObject; |     m_dragged_data.init(m_objects_model->GetObjectIdByItem(item), m_objects_model->GetVolumeIdByItem(item)); | ||||||
|     obj->SetText(wxString::Format("%d", m_objects_model->GetVolumeIdByItem(item))); | 
 | ||||||
|     event.SetDataObject(obj); |     event.SetDataObject(new wxTextDataObject); | ||||||
|     event.SetDragFlags(/*wxDrag_AllowMove*/wxDrag_DefaultMove); // allows both copy and move;
 |     event.SetDragFlags(wxDrag_DefaultMove); // allows both copy and move;
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void ObjectList::OnDropPossible(wxDataViewEvent &event) | void ObjectList::OnDropPossible(wxDataViewEvent &event) | ||||||
|  | @ -460,8 +455,10 @@ void ObjectList::OnDropPossible(wxDataViewEvent &event) | ||||||
|     wxDataViewItem item(event.GetItem()); |     wxDataViewItem item(event.GetItem()); | ||||||
| 
 | 
 | ||||||
|     // only allow drags for item or background, not containers
 |     // only allow drags for item or background, not containers
 | ||||||
|     if (event.GetDataFormat() != wxDF_UNICODETEXT || item.IsOk() &&  |     if (item.IsOk() && | ||||||
|         (m_objects_model->GetParent(item) == wxDataViewItem(0) || m_objects_model->GetItemType(item) != itVolume)) |         (m_objects_model->GetParent(item) == wxDataViewItem(0) ||  | ||||||
|  |         m_objects_model->GetItemType(item) != itVolume || | ||||||
|  |         m_dragged_data.obj_idx() != m_objects_model->GetObjectIdByItem(item))) | ||||||
|         event.Veto(); |         event.Veto(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -469,20 +466,16 @@ void ObjectList::OnDrop(wxDataViewEvent &event) | ||||||
| { | { | ||||||
|     wxDataViewItem item(event.GetItem()); |     wxDataViewItem item(event.GetItem()); | ||||||
| 
 | 
 | ||||||
|     if (m_selected_object_id < 0 || event.GetDataFormat() != wxDF_UNICODETEXT ||  |     if (item.IsOk() && ( m_objects_model->GetParent(item) == wxDataViewItem(0) || | ||||||
|         item.IsOk() && ( m_objects_model->GetParent(item) == wxDataViewItem(0) || |                          m_objects_model->GetItemType(item) != itVolume) || | ||||||
|                          m_objects_model->GetItemType(item) != itVolume) ) { |                          m_dragged_data.obj_idx() != m_objects_model->GetObjectIdByItem(item)) { | ||||||
|         event.Veto(); |         event.Veto(); | ||||||
|  |         m_dragged_data.clear(); | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     wxTextDataObject obj; |     const int from_volume_id = m_dragged_data.vol_idx(); | ||||||
|     obj.SetData(wxDF_UNICODETEXT, event.GetDataSize(), event.GetDataBuffer()); |  | ||||||
|     printf("Drop\n"); |  | ||||||
| 
 |  | ||||||
|     int from_volume_id = std::stoi(obj.GetText().ToStdString()); |  | ||||||
|     int to_volume_id = m_objects_model->GetVolumeIdByItem(item); |     int to_volume_id = m_objects_model->GetVolumeIdByItem(item); | ||||||
|     printf("from %d to %d\n", from_volume_id, to_volume_id); |  | ||||||
| 
 | 
 | ||||||
| #ifdef __WXGTK__ | #ifdef __WXGTK__ | ||||||
|     /* Under GTK, DnD moves an item between another two items.
 |     /* Under GTK, DnD moves an item between another two items.
 | ||||||
|  | @ -497,16 +490,14 @@ void ObjectList::OnDrop(wxDataViewEvent &event) | ||||||
|     int cnt = 0; |     int cnt = 0; | ||||||
|     for (int id = from_volume_id; cnt < abs(from_volume_id - to_volume_id); id += delta, cnt++) |     for (int id = from_volume_id; cnt < abs(from_volume_id - to_volume_id); id += delta, cnt++) | ||||||
|         std::swap(volumes[id], volumes[id + delta]); |         std::swap(volumes[id], volumes[id + delta]); | ||||||
|     printf("Volumes are swapped\n"); |  | ||||||
| 
 | 
 | ||||||
|     select_item(m_objects_model->ReorganizeChildren(from_volume_id, to_volume_id, |     select_item(m_objects_model->ReorganizeChildren(from_volume_id, to_volume_id, | ||||||
|                                                     m_objects_model->GetParent(item))); |                                                     m_objects_model->GetParent(item))); | ||||||
| 
 | 
 | ||||||
|     printf("ItemChildren are Reorganized\n"); |  | ||||||
|     m_parts_changed = true; |     m_parts_changed = true; | ||||||
|     parts_changed(m_selected_object_id); |     parts_changed(m_selected_object_id); | ||||||
| 
 | 
 | ||||||
|     printf("DropCompleted\n"); |     m_dragged_data.clear(); | ||||||
| 
 | 
 | ||||||
| //     m_prevent_list_events = false;
 | //     m_prevent_list_events = false;
 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -53,6 +53,27 @@ struct ItemForDelete | ||||||
| 
 | 
 | ||||||
| class ObjectList : public wxDataViewCtrl | class ObjectList : public wxDataViewCtrl | ||||||
| { | { | ||||||
|  | 
 | ||||||
|  |     struct dragged_item_data | ||||||
|  |     { | ||||||
|  |         void init(const int obj_idx, const int vol_idx) { | ||||||
|  |             m_obj_idx = obj_idx; | ||||||
|  |             m_vol_idx = vol_idx;             | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         void clear() { | ||||||
|  |             m_obj_idx = -1; | ||||||
|  |             m_vol_idx = -1;             | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         int obj_idx() const  { return m_obj_idx; } | ||||||
|  |         int vol_idx() const  { return m_vol_idx; } | ||||||
|  | 
 | ||||||
|  |     private: | ||||||
|  |         int m_obj_idx = -1; | ||||||
|  |         int m_vol_idx = -1; | ||||||
|  |     } m_dragged_data; | ||||||
|  | 
 | ||||||
|     wxBoxSizer          *m_sizer {nullptr}; |     wxBoxSizer          *m_sizer {nullptr}; | ||||||
| 
 | 
 | ||||||
|     DynamicPrintConfig  *m_default_config {nullptr}; |     DynamicPrintConfig  *m_default_config {nullptr}; | ||||||
|  |  | ||||||
|  | @ -891,7 +891,7 @@ wxDataViewItem PrusaObjectDataViewModel::GetItemByInstanceId(int obj_idx, int in | ||||||
|     return wxDataViewItem(0); |     return wxDataViewItem(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int PrusaObjectDataViewModel::GetIdByItem(const wxDataViewItem& item) | int PrusaObjectDataViewModel::GetIdByItem(const wxDataViewItem& item) const | ||||||
| { | { | ||||||
| 	wxASSERT(item.IsOk()); | 	wxASSERT(item.IsOk()); | ||||||
| 
 | 
 | ||||||
|  | @ -913,6 +913,11 @@ int PrusaObjectDataViewModel::GetIdByItemAndType(const wxDataViewItem& item, con | ||||||
| 	return node->GetIdx(); | 	return node->GetIdx(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | int PrusaObjectDataViewModel::GetObjectIdByItem(const wxDataViewItem& item) const | ||||||
|  | { | ||||||
|  |     return GetIdByItem(GetTopParent(item)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| int PrusaObjectDataViewModel::GetVolumeIdByItem(const wxDataViewItem& item) const | int PrusaObjectDataViewModel::GetVolumeIdByItem(const wxDataViewItem& item) const | ||||||
| { | { | ||||||
|     return GetIdByItemAndType(item, itVolume); |     return GetIdByItemAndType(item, itVolume); | ||||||
|  |  | ||||||
|  | @ -457,8 +457,9 @@ public: | ||||||
| 	wxDataViewItem GetItemById(int obj_idx); | 	wxDataViewItem GetItemById(int obj_idx); | ||||||
| 	wxDataViewItem GetItemByVolumeId(int obj_idx, int volume_idx); | 	wxDataViewItem GetItemByVolumeId(int obj_idx, int volume_idx); | ||||||
| 	wxDataViewItem GetItemByInstanceId(int obj_idx, int inst_idx); | 	wxDataViewItem GetItemByInstanceId(int obj_idx, int inst_idx); | ||||||
| 	int GetIdByItem(const wxDataViewItem& item); | 	int GetIdByItem(const wxDataViewItem& item) const; | ||||||
|     int GetIdByItemAndType(const wxDataViewItem& item, const ItemType type) const; |     int GetIdByItemAndType(const wxDataViewItem& item, const ItemType type) const; | ||||||
|  |     int GetObjectIdByItem(const wxDataViewItem& item) const; | ||||||
|     int GetVolumeIdByItem(const wxDataViewItem& item) const; |     int GetVolumeIdByItem(const wxDataViewItem& item) const; | ||||||
|     int GetInstanceIdByItem(const wxDataViewItem& item) const; |     int GetInstanceIdByItem(const wxDataViewItem& item) const; | ||||||
|     void GetItemInfo(const wxDataViewItem& item, ItemType& type, int& obj_idx, int& idx); |     void GetItemInfo(const wxDataViewItem& item, ItemType& type, int& obj_idx, int& idx); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 bubnikv
						bubnikv