ENH: Revert "[STUDIO-3980] drag object accross plate in ObjectList"
This reverts commit 3c723583743938848db8392bddffc31ae7e68b6d. Change-Id: Ie2500ede6c1839b88fd89666596a7d16957a2443 Jira: STUDIO-3980
This commit is contained in:
parent
24e672a0f1
commit
d1ed562622
|
@ -28,7 +28,6 @@
|
||||||
#include <wx/listbook.h>
|
#include <wx/listbook.h>
|
||||||
#include <wx/numformatter.h>
|
#include <wx/numformatter.h>
|
||||||
#include <wx/headerctrl.h>
|
#include <wx/headerctrl.h>
|
||||||
#include <wx/scrolwin.h>
|
|
||||||
|
|
||||||
#include "slic3r/Utils/FixModelByWin10.hpp"
|
#include "slic3r/Utils/FixModelByWin10.hpp"
|
||||||
#include "libslic3r/Format/bbs_3mf.hpp"
|
#include "libslic3r/Format/bbs_3mf.hpp"
|
||||||
|
@ -97,8 +96,6 @@ ObjectList::ObjectList(wxWindow* parent) :
|
||||||
GenericGetHeader()->SetFont(Label::sysFont(13));
|
GenericGetHeader()->SetFont(Label::sysFont(13));
|
||||||
static auto render = new wxRenderer;
|
static auto render = new wxRenderer;
|
||||||
wxRendererNative::Set(render);
|
wxRendererNative::Set(render);
|
||||||
|
|
||||||
ShowScrollbars(wxSHOW_SB_NEVER, wxSHOW_SB_DEFAULT);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// create control
|
// create control
|
||||||
|
@ -1553,30 +1550,6 @@ void ObjectList::key_event(wxKeyEvent& event)
|
||||||
}
|
}
|
||||||
#endif /* __WXOSX__ */
|
#endif /* __WXOSX__ */
|
||||||
|
|
||||||
bool ObjectList::dragged_item_data::set_cur_plate(int plate)
|
|
||||||
{
|
|
||||||
if (m_last_plate == plate)
|
|
||||||
return m_last_plate_time + wxTimeSpan::Seconds(1) < wxDateTime::Now();
|
|
||||||
m_last_plate = plate;
|
|
||||||
m_last_plate_time = wxDateTime::Now();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct ObjectList_TextDataObject : wxTextDataObject
|
|
||||||
{
|
|
||||||
ObjectList *list;
|
|
||||||
ObjectList_TextDataObject(ObjectList *list) : list(list) {}
|
|
||||||
virtual ~ObjectList_TextDataObject() { list->cancel_drag(); }
|
|
||||||
};
|
|
||||||
|
|
||||||
void GUI::ObjectList::cancel_drag()
|
|
||||||
{
|
|
||||||
if (is_dragging()) {
|
|
||||||
m_dragged_data.clear();
|
|
||||||
part_selection_changed();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ObjectList::OnBeginDrag(wxDataViewEvent &event)
|
void ObjectList::OnBeginDrag(wxDataViewEvent &event)
|
||||||
{
|
{
|
||||||
const bool mult_sel = multiple_selection();
|
const bool mult_sel = multiple_selection();
|
||||||
|
@ -1592,18 +1565,28 @@ void ObjectList::OnBeginDrag(wxDataViewEvent &event)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int from_plate = -1;
|
|
||||||
if (type & itObject) {
|
if (type & itObject) {
|
||||||
int curr_obj_id = m_objects_model->GetIdByItem(event.GetItem());
|
int curr_obj_id = m_objects_model->GetIdByItem(event.GetItem());
|
||||||
PartPlateList& partplate_list = wxGetApp().plater()->get_partplate_list();
|
PartPlateList& partplate_list = wxGetApp().plater()->get_partplate_list();
|
||||||
from_plate = partplate_list.find_instance(curr_obj_id, 0);
|
int from_plate = partplate_list.find_instance(curr_obj_id, 0);
|
||||||
if (from_plate == -1) {
|
if (from_plate == -1) {
|
||||||
event.Veto();
|
event.Veto();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
auto curr_plate_seq = partplate_list.get_plate(from_plate)->get_print_seq();
|
||||||
|
if (curr_plate_seq == PrintSequence::ByDefault) {
|
||||||
|
auto curr_preset_config = wxGetApp().preset_bundle->prints.get_edited_preset().config;
|
||||||
|
if (curr_preset_config.has("print_sequence"))
|
||||||
|
curr_plate_seq = curr_preset_config.option<ConfigOptionEnum<PrintSequence>>("print_sequence")->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (curr_plate_seq != PrintSequence::ByObject) {
|
||||||
|
//drag forbidden under bylayer mode
|
||||||
|
event.Veto();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
m_dragged_data.init(m_objects_model->GetIdByItem(item), type);
|
m_dragged_data.init(m_objects_model->GetIdByItem(item), type);
|
||||||
m_dragged_data.set_cur_plate(from_plate);
|
|
||||||
}
|
}
|
||||||
else if (type & itVolume){
|
else if (type & itVolume){
|
||||||
m_dragged_data.init(m_objects_model->GetObjectIdByItem(item), m_objects_model->GetVolumeIdByItem(item), type);
|
m_dragged_data.init(m_objects_model->GetObjectIdByItem(item), m_objects_model->GetVolumeIdByItem(item), type);
|
||||||
|
@ -1648,22 +1631,11 @@ void ObjectList::OnBeginDrag(wxDataViewEvent &event)
|
||||||
/* Under GTK, DnD requires to the wxTextDataObject been initialized with some valid value,
|
/* Under GTK, DnD requires to the wxTextDataObject been initialized with some valid value,
|
||||||
* so set some nonempty string
|
* so set some nonempty string
|
||||||
*/
|
*/
|
||||||
wxTextDataObject *obj = new ObjectList_TextDataObject(this);
|
wxTextDataObject* obj = new wxTextDataObject;
|
||||||
obj->SetText("Some text");//it's needed for GTK
|
obj->SetText("Some text");//it's needed for GTK
|
||||||
|
|
||||||
event.SetDataObject(obj);
|
event.SetDataObject(obj);
|
||||||
event.SetDragFlags(wxDrag_DefaultMove); // allows both copy and move;
|
event.SetDragFlags(wxDrag_DefaultMove); // allows both copy and move;
|
||||||
|
|
||||||
this->part_selection_changed();
|
|
||||||
|
|
||||||
if (from_plate >= 0 && (GetScrollPos(wxVERTICAL) > 0 || GetScrollPos(wxVERTICAL) + 1 < GetScrollRange(wxVERTICAL))) {
|
|
||||||
PartPlateList &partplate_list = wxGetApp().plater()->get_partplate_list();
|
|
||||||
for (int plate_id = 0; plate_id < partplate_list.get_plate_count(); ++plate_id)
|
|
||||||
if (plate_id != from_plate)
|
|
||||||
Collapse(m_objects_model->GetItemByPlateId(plate_id));
|
|
||||||
wxIdleEvent evt;
|
|
||||||
SendIdleEvents(evt);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ObjectList::can_drop(const wxDataViewItem& item, int& src_obj_id, int& src_plate, int& dest_obj_id, int& dest_plate) const
|
bool ObjectList::can_drop(const wxDataViewItem& item, int& src_obj_id, int& src_plate, int& dest_obj_id, int& dest_plate) const
|
||||||
|
@ -1682,7 +1654,7 @@ bool ObjectList::can_drop(const wxDataViewItem& item, int& src_obj_id, int& src_
|
||||||
if (from_plate == -1)
|
if (from_plate == -1)
|
||||||
return false;
|
return false;
|
||||||
int to_plate = partplate_list.find_instance(to_obj_id, 0);
|
int to_plate = partplate_list.find_instance(to_obj_id, 0);
|
||||||
if (to_plate == -1)
|
if ((to_plate == -1) || (from_plate != to_plate))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
src_obj_id = from_obj_id;
|
src_obj_id = from_obj_id;
|
||||||
|
@ -1740,35 +1712,9 @@ void ObjectList::OnDropPossible(wxDataViewEvent &event)
|
||||||
|
|
||||||
int src_obj_id, src_plate, dest_obj_id, dest_plate;
|
int src_obj_id, src_plate, dest_obj_id, dest_plate;
|
||||||
if (!can_drop(item, src_obj_id, src_plate, dest_obj_id, dest_plate)) {
|
if (!can_drop(item, src_obj_id, src_plate, dest_obj_id, dest_plate)) {
|
||||||
if (m_objects_model->GetItemType(item) == itPlate) {
|
|
||||||
ObjectDataViewModelNode *node = static_cast<ObjectDataViewModelNode *>(item.GetID());
|
|
||||||
if (m_dragged_data.set_cur_plate(node->GetPlateIdx()) && !IsExpanded(item)) {
|
|
||||||
Expand(item);
|
|
||||||
wxIdleEvent evt;
|
|
||||||
SendIdleEvents(evt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
event.Veto();
|
event.Veto();
|
||||||
m_prevent_list_events = false;
|
m_prevent_list_events = false;
|
||||||
}
|
}
|
||||||
#ifdef __WXMSW__
|
|
||||||
auto m = GetMainWindow();
|
|
||||||
wxPoint mouse_pos = wxGetMousePosition();
|
|
||||||
m->ScreenToClient(&mouse_pos.x, &mouse_pos.y);
|
|
||||||
int offset = mouse_pos.y;
|
|
||||||
int height = m->GetSize().y;
|
|
||||||
GetScrollPixelsPerUnit(&mouse_pos.x, &mouse_pos.y);
|
|
||||||
auto u = mouse_pos.y;
|
|
||||||
if (offset < u) {
|
|
||||||
offset = std::min(4 * (u - offset) / u, GetScrollPos(wxVERTICAL) - 0);
|
|
||||||
} else if (offset + u > height) {
|
|
||||||
offset = std::max(4 * (height - u - offset) / u, GetScrollPos(wxVERTICAL) + 1 - GetScrollRange(wxVERTICAL));
|
|
||||||
} else {
|
|
||||||
offset = 0;
|
|
||||||
}
|
|
||||||
if (offset != 0)
|
|
||||||
Scroll(0, GetScrollPos(wxVERTICAL) - offset);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjectList::OnDrop(wxDataViewEvent &event)
|
void ObjectList::OnDrop(wxDataViewEvent &event)
|
||||||
|
@ -1780,7 +1726,6 @@ void ObjectList::OnDrop(wxDataViewEvent &event)
|
||||||
{
|
{
|
||||||
event.Veto();
|
event.Veto();
|
||||||
m_dragged_data.clear();
|
m_dragged_data.clear();
|
||||||
part_selection_changed();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1813,13 +1758,6 @@ void ObjectList::OnDrop(wxDataViewEvent &event)
|
||||||
|
|
||||||
select_item(m_objects_model->ReorganizeObjects(src_obj_id, dest_obj_id));
|
select_item(m_objects_model->ReorganizeObjects(src_obj_id, dest_obj_id));
|
||||||
|
|
||||||
if (dest_plate != src_plate) {
|
|
||||||
// TODO: move object
|
|
||||||
auto start_origin = partplate_list.get_plate(src_plate)->get_origin();
|
|
||||||
auto dest_origin = partplate_list.get_plate(dest_plate)->get_origin();
|
|
||||||
(*m_objects)[dest_obj_id]->translate(dest_origin - start_origin);
|
|
||||||
partplate_list.reload_all_objects(false, dest_plate);
|
|
||||||
}
|
|
||||||
partplate_list.reload_all_objects(false, src_plate);
|
partplate_list.reload_all_objects(false, src_plate);
|
||||||
changed_object(src_obj_id);
|
changed_object(src_obj_id);
|
||||||
}
|
}
|
||||||
|
@ -1839,7 +1777,6 @@ void ObjectList::OnDrop(wxDataViewEvent &event)
|
||||||
}
|
}
|
||||||
|
|
||||||
m_dragged_data.clear();
|
m_dragged_data.clear();
|
||||||
part_selection_changed();
|
|
||||||
|
|
||||||
wxGetApp().plater()->set_current_canvas_as_dirty();
|
wxGetApp().plater()->set_current_canvas_as_dirty();
|
||||||
}
|
}
|
||||||
|
|
|
@ -144,12 +144,9 @@ private:
|
||||||
m_type = type;
|
m_type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool set_cur_plate(int plate);
|
|
||||||
|
|
||||||
void clear() {
|
void clear() {
|
||||||
m_obj_idx = -1;
|
m_obj_idx = -1;
|
||||||
m_vol_idx = -1;
|
m_vol_idx = -1;
|
||||||
m_last_plate = -1;
|
|
||||||
m_inst_idxs.clear();
|
m_inst_idxs.clear();
|
||||||
m_type = itUndef;
|
m_type = itUndef;
|
||||||
}
|
}
|
||||||
|
@ -162,10 +159,8 @@ private:
|
||||||
private:
|
private:
|
||||||
int m_obj_idx = -1;
|
int m_obj_idx = -1;
|
||||||
int m_vol_idx = -1;
|
int m_vol_idx = -1;
|
||||||
int m_last_plate = -1;
|
|
||||||
std::set<int> m_inst_idxs{};
|
std::set<int> m_inst_idxs{};
|
||||||
ItemType m_type = itUndef;
|
ItemType m_type = itUndef;
|
||||||
wxDateTime m_last_plate_time;
|
|
||||||
|
|
||||||
} m_dragged_data;
|
} m_dragged_data;
|
||||||
|
|
||||||
|
@ -463,9 +458,6 @@ public:
|
||||||
void object_config_options_changed(const ObjectVolumeID& ov_id);
|
void object_config_options_changed(const ObjectVolumeID& ov_id);
|
||||||
void printable_state_changed(const std::vector<ObjectVolumeID>& ov_ids);
|
void printable_state_changed(const std::vector<ObjectVolumeID>& ov_ids);
|
||||||
|
|
||||||
bool is_dragging() const { return m_dragged_data.type() != itUndef; }
|
|
||||||
void cancel_drag();
|
|
||||||
|
|
||||||
// search objectlist
|
// search objectlist
|
||||||
void search_object_list();
|
void search_object_list();
|
||||||
void append_found_list(wxString current_search_text, wxDataViewItem item);
|
void append_found_list(wxString current_search_text, wxDataViewItem item);
|
||||||
|
|
|
@ -197,8 +197,7 @@ bool ObjectSettings::update_settings_list()
|
||||||
auto objects_model = wxGetApp().obj_list()->GetModel();
|
auto objects_model = wxGetApp().obj_list()->GetModel();
|
||||||
|
|
||||||
wxDataViewItemArray items;
|
wxDataViewItemArray items;
|
||||||
if (!objects_ctrl->is_dragging())
|
objects_ctrl->GetSelections(items);
|
||||||
objects_ctrl->GetSelections(items);
|
|
||||||
|
|
||||||
std::map<ObjectBase *, ModelConfig *> object_configs;
|
std::map<ObjectBase *, ModelConfig *> object_configs;
|
||||||
bool is_object_settings = false;
|
bool is_object_settings = false;
|
||||||
|
|
|
@ -1811,10 +1811,8 @@ wxDataViewItem ObjectDataViewModel::ReorganizeObjects( const int current_id, co
|
||||||
|
|
||||||
m_objects.erase(m_objects.begin() + current_id);
|
m_objects.erase(m_objects.begin() + current_id);
|
||||||
plate_node->GetChildren().Remove(deleted_node);
|
plate_node->GetChildren().Remove(deleted_node);
|
||||||
ItemDeleted(wxDataViewItem(plate_node), wxDataViewItem(deleted_node));
|
ItemDeleted(wxDataViewItem(deleted_node->m_parent), wxDataViewItem(deleted_node));
|
||||||
|
|
||||||
bool change_plate = plate_node != new_node->m_parent;
|
|
||||||
plate_node = deleted_node->m_parent = new_node->m_parent;
|
|
||||||
m_objects.emplace(m_objects.begin() + new_id, deleted_node);
|
m_objects.emplace(m_objects.begin() + new_id, deleted_node);
|
||||||
int plate_child_index = plate_node->GetChildIndex(new_node);
|
int plate_child_index = plate_node->GetChildIndex(new_node);
|
||||||
if (current_id < new_id)
|
if (current_id < new_id)
|
||||||
|
@ -1823,7 +1821,7 @@ wxDataViewItem ObjectDataViewModel::ReorganizeObjects( const int current_id, co
|
||||||
//should not happen
|
//should not happen
|
||||||
plate_node->Insert(deleted_node, plate_child_index);
|
plate_node->Insert(deleted_node, plate_child_index);
|
||||||
}
|
}
|
||||||
ItemAdded(wxDataViewItem(plate_node), wxDataViewItem(deleted_node));
|
ItemAdded(wxDataViewItem(deleted_node->m_parent), wxDataViewItem(deleted_node));
|
||||||
|
|
||||||
//ItemChanged(wxDataViewItem(nullptr));
|
//ItemChanged(wxDataViewItem(nullptr));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue