Implemented delete_layers_from_object()

This commit is contained in:
YuSanka 2019-05-30 16:53:17 +02:00
parent a516f76f94
commit e531d224e8
4 changed files with 42 additions and 13 deletions

View file

@ -46,7 +46,7 @@ ObjectLayers::ObjectLayers(wxWindow* parent) :
m_og->append_line(line);
m_bmp_delete = ScalableBitmap(parent, "cross");
m_bmp_delete = ScalableBitmap(parent, "remove_copies"/*"cross"*/);
m_bmp_add = ScalableBitmap(parent, "add_copies");
}

View file

@ -1141,7 +1141,7 @@ wxMenuItem* ObjectList::append_menu_item_split(wxMenu* menu)
wxMenuItem* ObjectList::append_menu_item_layers_editing(wxMenu* menu)
{
return append_menu_item(menu, wxID_ANY, _(L("Edit Layers")), "",
[this](wxCommandEvent&) { layers_editing(); }, "table.png", menu);
[this](wxCommandEvent&) { layers_editing(); }, "layers", menu);
}
wxMenuItem* ObjectList::append_menu_item_settings(wxMenu* menu_)
@ -1650,7 +1650,7 @@ void ObjectList::del_subobject_item(wxDataViewItem& item)
else if (type == itInstanceRoot && obj_idx != -1)
del_instances_from_object(obj_idx);
else if ((type & itLayerRoot) && obj_idx != -1)
/*del_layers_from_object(obj_idx)*/;
del_layers_from_object(obj_idx);
else if (idx == -1)
return;
else if (!del_subobject_from_object(obj_idx, idx, type))
@ -1692,6 +1692,13 @@ void ObjectList::del_instances_from_object(const int obj_idx)
changed_object(obj_idx);
}
void ObjectList::del_layers_from_object(const int obj_idx)
{
object(obj_idx)->layer_height_ranges.clear(); // ? #ys_FIXME
changed_object(obj_idx);
}
bool ObjectList::del_subobject_from_object(const int obj_idx, const int idx, const int type)
{
if (obj_idx == 1000)
@ -1732,6 +1739,13 @@ bool ObjectList::del_subobject_from_object(const int obj_idx, const int idx, con
object->delete_instance(idx);
}
else if (type == itLayer) {
t_layer_height_ranges::iterator layer_range = object->layer_height_ranges.begin();
int id = idx;
while (id > 0 && layer_range != object->layer_height_ranges.end()) {
layer_range++;
id--;
}
object->layer_height_ranges.erase(layer_range);
}
else
return false;
@ -1808,13 +1822,13 @@ void ObjectList::layers_editing()
// ---<<<--- Just for testing
layers_item = m_objects_model->AddLayersRoot(obj_item);
}
for (const auto range : object(obj_idx)->layer_height_ranges)
{
const std::string label = (boost::format("(%.2f-%.2f)") % range.first.first % range.first.second).str();
const std::string label = (boost::format(" %.2f-%.2f ") % range.first.first % range.first.second).str();
m_objects_model->AddLayersChild(layers_item, label);
}
}
select_item(layers_item);
}
@ -2168,9 +2182,22 @@ void ObjectList::remove()
if (m_objects_model->GetParent(item) == wxDataViewItem(0))
delete_from_model_and_list(itObject, m_objects_model->GetIdByItem(item), -1);
else {
if (sels.size() == 1)
select_item(m_objects_model->GetParent(item));
// if (sels.size() == 1)
// select_item(m_objects_model->GetParent(item));
wxDataViewItem parent = m_objects_model->GetParent(item);
if (sels.size() == 1) {
if (!(m_objects_model->GetItemType(item) & itLayer)) {
select_item(parent);
parent = wxDataViewItem(0);
}
else if (m_objects_model->GetChildren(parent, wxDataViewItemArray()) == 1)
parent = m_objects_model->GetTopParent(item);
}
del_subobject_item(item);
if (sels.size() == 1 && parent)
select_item(parent);
}
}
}

View file

@ -227,6 +227,7 @@ public:
void del_subobject_item(wxDataViewItem& item);
void del_settings_from_config();
void del_instances_from_object(const int obj_idx);
void del_layers_from_object(const int obj_idx);
bool del_subobject_from_object(const int obj_idx, const int idx, const int type);
void split();
void layers_editing();

View file

@ -450,7 +450,7 @@ ObjectDataViewModelNode::ObjectDataViewModelNode(ObjectDataViewModelNode* parent
}
else if (type == itLayerRoot)
{
m_bmp = create_scaled_bitmap(nullptr, "table.png"); // FIXME: pass window ptr
m_bmp = create_scaled_bitmap(nullptr, "layers"); // FIXME: pass window ptr
m_name = _(L("Layers"));
}
@ -473,8 +473,9 @@ ObjectDataViewModelNode::ObjectDataViewModelNode(ObjectDataViewModelNode* parent
m_extruder(extruder)
{
m_idx = parent->GetChildCount();
m_name = wxString::Format(_(L("Layer %s")), label_range);
m_bmp = create_scaled_bitmap(nullptr, "row.png"); // FIXME: pass window ptr
// m_name = wxString::Format(_(L("Layer %s (mm)")), label_range);
m_name = _(L("Range")) + label_range + "(" + _(L("mm")) + ")";
m_bmp = create_scaled_bitmap(nullptr, "layers_white"); // FIXME: pass window ptr
#ifdef __WXGTK__
// it's necessary on GTK because of control have to know if this item will be container