mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-10 16:27:54 -06:00
Changed logic of the PrusaObjectDataViewModelNode:
now each node has: * name, * type, * id (-1, if type == itSettings OR itInstanceRoot), * bmp, * action_bmp * extruder
This commit is contained in:
parent
fb6c1a885c
commit
37a320c79e
5 changed files with 169 additions and 110 deletions
|
@ -58,7 +58,7 @@ ObjectList::ObjectList(wxWindow* parent) :
|
||||||
Bind(wxEVT_CHOICE, [this](wxCommandEvent& event) { update_extruder_in_config(event.GetString()); });
|
Bind(wxEVT_CHOICE, [this](wxCommandEvent& event) { update_extruder_in_config(event.GetString()); });
|
||||||
|
|
||||||
GetMainWindow()->Bind(wxEVT_MOTION, [this](wxMouseEvent& event) {
|
GetMainWindow()->Bind(wxEVT_MOTION, [this](wxMouseEvent& event) {
|
||||||
set_tooltip_for_item(event.GetPosition());
|
set_tooltip_for_item(/*event.GetPosition()*/get_mouse_position_in_control());
|
||||||
event.Skip();
|
event.Skip();
|
||||||
});
|
});
|
||||||
#else
|
#else
|
||||||
|
@ -118,7 +118,7 @@ void ObjectList::set_tooltip_for_item(const wxPoint& pt)
|
||||||
if (col->GetTitle() == " " && GetSelectedItemsCount()<2)
|
if (col->GetTitle() == " " && GetSelectedItemsCount()<2)
|
||||||
GetMainWindow()->SetToolTip(_(L("Right button click the icon to change the object settings")));
|
GetMainWindow()->SetToolTip(_(L("Right button click the icon to change the object settings")));
|
||||||
else if (col->GetTitle() == _("Name") &&
|
else if (col->GetTitle() == _("Name") &&
|
||||||
m_objects_model->GetIcon(item).GetRefData() == m_icon_manifold_warning.GetRefData()) {
|
m_objects_model->GetBitmap(item).GetRefData() == m_bmp_manifold_warning.GetRefData()) {
|
||||||
int obj_idx = m_objects_model->GetIdByItem(item);
|
int obj_idx = m_objects_model->GetIdByItem(item);
|
||||||
auto& stats = (*m_objects)[obj_idx]->volumes[0]->mesh.stl.stats;
|
auto& stats = (*m_objects)[obj_idx]->volumes[0]->mesh.stl.stats;
|
||||||
int errors = stats.degenerate_facets + stats.edges_fixed + stats.facets_removed +
|
int errors = stats.degenerate_facets + stats.edges_fixed + stats.facets_removed +
|
||||||
|
@ -214,11 +214,11 @@ void ObjectList::update_extruder_in_config(const wxString& selection)
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjectList::init_icons(){
|
void ObjectList::init_icons(){
|
||||||
m_icon_modifiermesh = wxBitmap(Slic3r::GUI::from_u8(Slic3r::var("lambda.png")), wxBITMAP_TYPE_PNG);//(Slic3r::var("plugin.png")), wxBITMAP_TYPE_PNG);
|
m_bmp_modifiermesh = wxBitmap(Slic3r::GUI::from_u8(Slic3r::var("lambda.png")), wxBITMAP_TYPE_PNG);//(Slic3r::var("plugin.png")), wxBITMAP_TYPE_PNG);
|
||||||
m_icon_solidmesh = wxBitmap(Slic3r::GUI::from_u8(Slic3r::var("object.png")), wxBITMAP_TYPE_PNG);//(Slic3r::var("package.png")), wxBITMAP_TYPE_PNG);
|
m_bmp_solidmesh = wxBitmap(Slic3r::GUI::from_u8(Slic3r::var("object.png")), wxBITMAP_TYPE_PNG);//(Slic3r::var("package.png")), wxBITMAP_TYPE_PNG);
|
||||||
|
|
||||||
// init icon for manifold warning
|
// init icon for manifold warning
|
||||||
m_icon_manifold_warning = wxBitmap(Slic3r::GUI::from_u8(Slic3r::var("exclamation_mark_.png")), wxBITMAP_TYPE_PNG);//(Slic3r::var("error.png")), wxBITMAP_TYPE_PNG);
|
m_bmp_manifold_warning = wxBitmap(Slic3r::GUI::from_u8(Slic3r::var("exclamation_mark_.png")), wxBITMAP_TYPE_PNG);//(Slic3r::var("error.png")), wxBITMAP_TYPE_PNG);
|
||||||
|
|
||||||
// init bitmap for "Split to sub-objects" context menu
|
// init bitmap for "Split to sub-objects" context menu
|
||||||
m_bmp_split = wxBitmap(Slic3r::GUI::from_u8(Slic3r::var("split.png")), wxBITMAP_TYPE_PNG);
|
m_bmp_split = wxBitmap(Slic3r::GUI::from_u8(Slic3r::var("split.png")), wxBITMAP_TYPE_PNG);
|
||||||
|
@ -268,7 +268,7 @@ void ObjectList::context_menu()
|
||||||
show_context_menu();
|
show_context_menu();
|
||||||
|
|
||||||
else if (title == _("Name") && pt.x >15 &&
|
else if (title == _("Name") && pt.x >15 &&
|
||||||
m_objects_model->GetIcon(item).GetRefData() == m_icon_manifold_warning.GetRefData())
|
m_objects_model->GetBitmap(item).GetRefData() == m_bmp_manifold_warning.GetRefData())
|
||||||
{
|
{
|
||||||
if (is_windows10())
|
if (is_windows10())
|
||||||
/*fix_through_netfabb()*/;// #ys_FIXME
|
/*fix_through_netfabb()*/;// #ys_FIXME
|
||||||
|
@ -325,14 +325,20 @@ void ObjectList::item_value_change(wxDataViewEvent& event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct draging_item_data
|
||||||
|
{
|
||||||
|
int obj_idx;
|
||||||
|
int vol_idx;
|
||||||
|
};
|
||||||
|
|
||||||
void ObjectList::on_begin_drag(wxDataViewEvent &event)
|
void ObjectList::on_begin_drag(wxDataViewEvent &event)
|
||||||
{
|
{
|
||||||
wxDataViewItem item(event.GetItem());
|
wxDataViewItem item(event.GetItem());
|
||||||
|
|
||||||
// only allow drags for item, not containers
|
// only allow drags for item, not containers
|
||||||
if (multiple_selection() ||
|
if (multiple_selection() ||
|
||||||
m_objects_model->GetParent(item) == wxDataViewItem(0) ||
|
m_objects_model->GetParent(item) == wxDataViewItem(0) ||
|
||||||
m_objects_model->IsSettingsItem(item) ) {
|
m_objects_model->GetItemType(item) != itVolume ) {
|
||||||
event.Veto();
|
event.Veto();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -356,7 +362,7 @@ void ObjectList::on_drop_possible(wxDataViewEvent &event)
|
||||||
|
|
||||||
// only allow drags for item or background, not containers
|
// only allow drags for item or background, not containers
|
||||||
if (item.IsOk() && m_objects_model->GetParent(item) == wxDataViewItem(0) ||
|
if (item.IsOk() && m_objects_model->GetParent(item) == wxDataViewItem(0) ||
|
||||||
event.GetDataFormat() != wxDF_UNICODETEXT || m_objects_model->IsSettingsItem(item))
|
event.GetDataFormat() != wxDF_UNICODETEXT || m_objects_model->GetItemType(item) != itVolume)
|
||||||
event.Veto();
|
event.Veto();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -366,7 +372,7 @@ void ObjectList::on_drop(wxDataViewEvent &event)
|
||||||
|
|
||||||
// only allow drops for item, not containers
|
// only allow drops for item, not containers
|
||||||
if (item.IsOk() && m_objects_model->GetParent(item) == wxDataViewItem(0) ||
|
if (item.IsOk() && m_objects_model->GetParent(item) == wxDataViewItem(0) ||
|
||||||
event.GetDataFormat() != wxDF_UNICODETEXT || m_objects_model->IsSettingsItem(item)) {
|
event.GetDataFormat() != wxDF_UNICODETEXT || m_objects_model->GetItemType(item) != itVolume) {
|
||||||
event.Veto();
|
event.Veto();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -495,7 +501,7 @@ void ObjectList::get_settings_choice(wxMenu *menu, int id, bool is_part)
|
||||||
// Add settings item for object
|
// Add settings item for object
|
||||||
const auto item = GetSelection();
|
const auto item = GetSelection();
|
||||||
if (item) {
|
if (item) {
|
||||||
const auto settings_item = m_objects_model->HasSettings(item);
|
const auto settings_item = m_objects_model->GetSettingsItem(item);
|
||||||
select_item(settings_item ? settings_item :
|
select_item(settings_item ? settings_item :
|
||||||
m_objects_model->AddSettingsChild(item));
|
m_objects_model->AddSettingsChild(item));
|
||||||
#ifndef __WXOSX__
|
#ifndef __WXOSX__
|
||||||
|
@ -547,7 +553,7 @@ wxMenu* ObjectList::create_add_part_popupmenu()
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (auto& item : menu_items) {
|
for (auto& item : menu_items) {
|
||||||
auto menu_item = new wxMenuItem(menu, config_id_base + i, _(item));
|
auto menu_item = new wxMenuItem(menu, config_id_base + i, _(item));
|
||||||
menu_item->SetBitmap(i == 0 ? m_icon_solidmesh : m_icon_modifiermesh);
|
menu_item->SetBitmap(i == 0 ? m_bmp_solidmesh : m_bmp_modifiermesh);
|
||||||
if (item == "Add generic")
|
if (item == "Add generic")
|
||||||
menu_item_add_generic(menu_item, config_id_base + i);
|
menu_item_add_generic(menu_item, config_id_base + i);
|
||||||
menu->Append(menu_item);
|
menu->Append(menu_item);
|
||||||
|
@ -667,7 +673,7 @@ void ObjectList::load_subobject(bool is_modifier /*= false*/, bool is_lambda/* =
|
||||||
|
|
||||||
for (int i = 0; i < part_names.size(); ++i) {
|
for (int i = 0; i < part_names.size(); ++i) {
|
||||||
const wxDataViewItem sel_item = m_objects_model->AddChild(item, part_names.Item(i),
|
const wxDataViewItem sel_item = m_objects_model->AddChild(item, part_names.Item(i),
|
||||||
is_modifier ? m_icon_modifiermesh : m_icon_solidmesh);
|
is_modifier ? m_bmp_modifiermesh : m_bmp_solidmesh);
|
||||||
|
|
||||||
if (i == part_names.size() - 1)
|
if (i == part_names.size() - 1)
|
||||||
select_item(sel_item);
|
select_item(sel_item);
|
||||||
|
@ -817,7 +823,7 @@ void ObjectList::load_lambda(const std::string& type_name)
|
||||||
parts_changed(m_selected_object_id);
|
parts_changed(m_selected_object_id);
|
||||||
|
|
||||||
select_item(m_objects_model->AddChild(GetSelection(),
|
select_item(m_objects_model->AddChild(GetSelection(),
|
||||||
name, m_icon_modifiermesh));
|
name, m_bmp_modifiermesh));
|
||||||
#ifndef __WXOSX__ //#ifdef __WXMSW__ // #ys_FIXME
|
#ifndef __WXOSX__ //#ifdef __WXMSW__ // #ys_FIXME
|
||||||
selection_changed();
|
selection_changed();
|
||||||
#endif //no __WXOSX__ //__WXMSW__
|
#endif //no __WXOSX__ //__WXMSW__
|
||||||
|
@ -830,15 +836,20 @@ void ObjectList::del_subobject_item(wxDataViewItem& item)
|
||||||
{
|
{
|
||||||
if (!item) return;
|
if (!item) return;
|
||||||
|
|
||||||
int obj_idx, vol_idx;
|
int obj_idx, idx;
|
||||||
m_objects_model->GetObjectAndVolumeIdsByItem(item, obj_idx, vol_idx);
|
ItemType type;
|
||||||
|
|
||||||
if (vol_idx == -1)
|
m_objects_model->GetItemInfo(item, type, obj_idx, idx);
|
||||||
|
if (type == itUndef)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (vol_idx == -2)
|
if (type == itSettings)
|
||||||
del_settings_from_config();
|
del_settings_from_config();
|
||||||
else if (!del_subobject_from_object(obj_idx, vol_idx))
|
else if (type == itInstanceRoot && obj_idx != -1)
|
||||||
|
del_instances_from_object(obj_idx);
|
||||||
|
else if (idx == -1)
|
||||||
|
return;
|
||||||
|
else if (!del_subobject_from_object(obj_idx, idx, type))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_objects_model->Delete(item);
|
m_objects_model->Delete(item);
|
||||||
|
@ -859,21 +870,43 @@ void ObjectList::del_settings_from_config()
|
||||||
m_config->set_key_value("extruder", new ConfigOptionInt(extruder));
|
m_config->set_key_value("extruder", new ConfigOptionInt(extruder));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ObjectList::del_subobject_from_object(const int obj_idx, const int vol_idx)
|
void ObjectList::del_instances_from_object(const int obj_idx)
|
||||||
{
|
{
|
||||||
const auto volume = (*m_objects)[obj_idx]->volumes[vol_idx];
|
auto instances = (*m_objects)[obj_idx]->instances;
|
||||||
|
if (instances.size() <= 1)
|
||||||
|
return;
|
||||||
|
|
||||||
// if user is deleting the last solid part, throw error
|
while ( instances.size()> 1)
|
||||||
int solid_cnt = 0;
|
instances.pop_back();
|
||||||
for (auto vol : (*m_objects)[obj_idx]->volumes)
|
|
||||||
if (vol->is_model_part())
|
(*m_objects)[obj_idx]->invalidate_bounding_box(); // ? #ys_FIXME
|
||||||
++solid_cnt;
|
|
||||||
if (volume->is_model_part() && solid_cnt == 1) {
|
m_parts_changed = true;
|
||||||
Slic3r::GUI::show_error(nullptr, _(L("You can't delete the last solid part from this object.")));
|
parts_changed(obj_idx);
|
||||||
return false;
|
}
|
||||||
|
|
||||||
|
bool ObjectList::del_subobject_from_object(const int obj_idx, const int idx, const int type)
|
||||||
|
{
|
||||||
|
if (type == itVolume) {
|
||||||
|
const auto volume = (*m_objects)[obj_idx]->volumes[idx];
|
||||||
|
|
||||||
|
// if user is deleting the last solid part, throw error
|
||||||
|
int solid_cnt = 0;
|
||||||
|
for (auto vol : (*m_objects)[obj_idx]->volumes)
|
||||||
|
if (vol->is_model_part())
|
||||||
|
++solid_cnt;
|
||||||
|
if (volume->is_model_part() && solid_cnt == 1) {
|
||||||
|
Slic3r::GUI::show_error(nullptr, _(L("You can't delete the last solid part from this object.")));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
(*m_objects)[obj_idx]->delete_volume(idx);
|
||||||
}
|
}
|
||||||
|
else if (type == itInstance)
|
||||||
|
(*m_objects)[obj_idx]->delete_instance(idx);
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
|
||||||
(*m_objects)[obj_idx]->delete_volume(vol_idx);
|
|
||||||
m_parts_changed = true;
|
m_parts_changed = true;
|
||||||
parts_changed(obj_idx);
|
parts_changed(obj_idx);
|
||||||
|
|
||||||
|
@ -902,7 +935,7 @@ void ObjectList::split(const bool split_part)
|
||||||
|
|
||||||
for (auto id = 0; id < model_object->volumes.size(); id++)
|
for (auto id = 0; id < model_object->volumes.size(); id++)
|
||||||
m_objects_model->AddChild(parent, model_object->volumes[id]->name,
|
m_objects_model->AddChild(parent, model_object->volumes[id]->name,
|
||||||
model_object->volumes[id]->is_modifier() ? m_icon_modifiermesh : m_icon_solidmesh,
|
model_object->volumes[id]->is_modifier() ? m_bmp_modifiermesh : m_bmp_solidmesh,
|
||||||
model_object->volumes[id]->config.has("extruder") ?
|
model_object->volumes[id]->config.has("extruder") ?
|
||||||
model_object->volumes[id]->config.option<ConfigOptionInt>("extruder")->value : 0,
|
model_object->volumes[id]->config.option<ConfigOptionInt>("extruder")->value : 0,
|
||||||
false);
|
false);
|
||||||
|
@ -912,7 +945,7 @@ void ObjectList::split(const bool split_part)
|
||||||
else {
|
else {
|
||||||
for (auto id = 0; id < model_object->volumes.size(); id++)
|
for (auto id = 0; id < model_object->volumes.size(); id++)
|
||||||
m_objects_model->AddChild(item, model_object->volumes[id]->name,
|
m_objects_model->AddChild(item, model_object->volumes[id]->name,
|
||||||
m_icon_solidmesh,
|
m_bmp_solidmesh,
|
||||||
model_object->volumes[id]->config.has("extruder") ?
|
model_object->volumes[id]->config.has("extruder") ?
|
||||||
model_object->volumes[id]->config.option<ConfigOptionInt>("extruder")->value : 0,
|
model_object->volumes[id]->config.option<ConfigOptionInt>("extruder")->value : 0,
|
||||||
false);
|
false);
|
||||||
|
@ -1049,7 +1082,7 @@ void ObjectList::add_object_to_list(size_t obj_idx)
|
||||||
stats.facets_added + stats.facets_reversed + stats.backwards_edges;
|
stats.facets_added + stats.facets_reversed + stats.backwards_edges;
|
||||||
if (errors > 0) {
|
if (errors > 0) {
|
||||||
wxVariant variant;
|
wxVariant variant;
|
||||||
variant << PrusaDataViewBitmapText(item_name, m_icon_manifold_warning);
|
variant << PrusaDataViewBitmapText(item_name, m_bmp_manifold_warning);
|
||||||
m_objects_model->SetValue(variant, item, 0);
|
m_objects_model->SetValue(variant, item, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1057,7 +1090,7 @@ void ObjectList::add_object_to_list(size_t obj_idx)
|
||||||
for (auto id = 0; id < model_object->volumes.size(); id++)
|
for (auto id = 0; id < model_object->volumes.size(); id++)
|
||||||
m_objects_model->AddChild(item,
|
m_objects_model->AddChild(item,
|
||||||
model_object->volumes[id]->name,
|
model_object->volumes[id]->name,
|
||||||
m_icon_solidmesh,
|
m_bmp_solidmesh,
|
||||||
model_object->volumes[id]->config.option<ConfigOptionInt>("extruder")->value,
|
model_object->volumes[id]->config.option<ConfigOptionInt>("extruder")->value,
|
||||||
false);
|
false);
|
||||||
Expand(item);
|
Expand(item);
|
||||||
|
|
|
@ -22,9 +22,9 @@ class ObjectList : public wxDataViewCtrl
|
||||||
|
|
||||||
DynamicPrintConfig *m_default_config {nullptr};
|
DynamicPrintConfig *m_default_config {nullptr};
|
||||||
|
|
||||||
wxBitmap m_icon_modifiermesh;
|
wxBitmap m_bmp_modifiermesh;
|
||||||
wxBitmap m_icon_solidmesh;
|
wxBitmap m_bmp_solidmesh;
|
||||||
wxBitmap m_icon_manifold_warning;
|
wxBitmap m_bmp_manifold_warning;
|
||||||
wxBitmap m_bmp_cog;
|
wxBitmap m_bmp_cog;
|
||||||
wxBitmap m_bmp_split;
|
wxBitmap m_bmp_split;
|
||||||
|
|
||||||
|
@ -87,7 +87,8 @@ public:
|
||||||
void load_lambda(const std::string& type_name);
|
void load_lambda(const std::string& type_name);
|
||||||
void del_subobject_item(wxDataViewItem& item);
|
void del_subobject_item(wxDataViewItem& item);
|
||||||
void del_settings_from_config();
|
void del_settings_from_config();
|
||||||
bool del_subobject_from_object(const int obj_idx, const int vol_idx);
|
void del_instances_from_object(const int obj_idx);
|
||||||
|
bool del_subobject_from_object(const int obj_idx, const int idx, const int type);
|
||||||
void split(const bool split_part);
|
void split(const bool split_part);
|
||||||
bool get_volume_by_item(const bool split_part, const wxDataViewItem& item, ModelVolume*& volume);
|
bool get_volume_by_item(const bool split_part, const wxDataViewItem& item, ModelVolume*& volume);
|
||||||
bool is_splittable_object(const bool split_part);
|
bool is_splittable_object(const bool split_part);
|
||||||
|
|
|
@ -2019,6 +2019,7 @@ void Plater::changed_object_settings(int obj_idx)
|
||||||
_3DScene::set_objects_selections(p->canvas3D, selections);
|
_3DScene::set_objects_selections(p->canvas3D, selections);
|
||||||
#endif // !ENABLE_EXTENDED_SELECTION
|
#endif // !ENABLE_EXTENDED_SELECTION
|
||||||
_3DScene::reload_scene(p->canvas3D, false);
|
_3DScene::reload_scene(p->canvas3D, false);
|
||||||
|
_3DScene::zoom_to_volumes(p->canvas3D);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// schedule_background_process();
|
// schedule_background_process();
|
||||||
|
|
|
@ -362,12 +362,13 @@ void PrusaObjectDataViewModelNode::set_part_action_icon() {
|
||||||
Slic3r::GUI::BitmapCache *m_bitmap_cache = nullptr;
|
Slic3r::GUI::BitmapCache *m_bitmap_cache = nullptr;
|
||||||
bool PrusaObjectDataViewModelNode::update_settings_digest(const std::vector<std::string>& categories)
|
bool PrusaObjectDataViewModelNode::update_settings_digest(const std::vector<std::string>& categories)
|
||||||
{
|
{
|
||||||
if (m_type != "settings" || m_opt_categories == categories)
|
if (m_type != itSettings || m_opt_categories == categories)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
m_opt_categories = categories;
|
m_opt_categories = categories;
|
||||||
m_name = wxEmptyString;
|
m_name = wxEmptyString;
|
||||||
m_icon = m_empty_icon;
|
// m_icon = m_empty_icon;
|
||||||
|
m_bmp = m_empty_bmp;
|
||||||
|
|
||||||
std::map<std::string, wxBitmap>& categories_icon = Slic3r::GUI::wxGetApp().obj_list()->CATEGORY_ICON;//Slic3r::GUI::get_category_icon();
|
std::map<std::string, wxBitmap>& categories_icon = Slic3r::GUI::wxGetApp().obj_list()->CATEGORY_ICON;//Slic3r::GUI::get_category_icon();
|
||||||
|
|
||||||
|
@ -440,7 +441,7 @@ wxDataViewItem PrusaObjectDataViewModel::AddChild( const wxDataViewItem &parent_
|
||||||
const wxString extruder_str = extruder == 0 ? "default" : wxString::Format("%d", extruder);
|
const wxString extruder_str = extruder == 0 ? "default" : wxString::Format("%d", extruder);
|
||||||
|
|
||||||
if (create_frst_child && (root->GetChildren().Count() == 0 ||
|
if (create_frst_child && (root->GetChildren().Count() == 0 ||
|
||||||
(root->GetChildren().Count() == 1 && root->GetNthChild(0)->m_type == "settings")))
|
(root->GetChildren().Count() == 1 && root->GetNthChild(0)->m_type == itSettings)))
|
||||||
{
|
{
|
||||||
const auto icon_solid_mesh = wxIcon(Slic3r::GUI::from_u8(Slic3r::var("object.png")), wxBITMAP_TYPE_PNG);
|
const auto icon_solid_mesh = wxIcon(Slic3r::GUI::from_u8(Slic3r::var("object.png")), wxBITMAP_TYPE_PNG);
|
||||||
const auto node = new PrusaObjectDataViewModelNode(root, root->m_name, icon_solid_mesh, extruder_str, 0);
|
const auto node = new PrusaObjectDataViewModelNode(root, root->m_name, icon_solid_mesh, extruder_str, 0);
|
||||||
|
@ -450,7 +451,7 @@ wxDataViewItem PrusaObjectDataViewModel::AddChild( const wxDataViewItem &parent_
|
||||||
ItemAdded(parent_item, child);
|
ItemAdded(parent_item, child);
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto volume_id = root->GetChildCount() > 0 && root->GetNthChild(0)->m_type == "settings" ?
|
const auto volume_id = root->GetChildCount() > 0 && root->GetNthChild(0)->m_type == itSettings ?
|
||||||
root->GetChildCount() - 1 : root->GetChildCount();
|
root->GetChildCount() - 1 : root->GetChildCount();
|
||||||
|
|
||||||
const auto node = new PrusaObjectDataViewModelNode(root, name, icon, extruder_str, volume_id);
|
const auto node = new PrusaObjectDataViewModelNode(root, name, icon, extruder_str, volume_id);
|
||||||
|
@ -489,20 +490,20 @@ wxDataViewItem PrusaObjectDataViewModel::Delete(const wxDataViewItem &item)
|
||||||
// thus removing the node from it doesn't result in freeing it
|
// thus removing the node from it doesn't result in freeing it
|
||||||
if (node_parent){
|
if (node_parent){
|
||||||
auto id = node_parent->GetChildren().Index(node);
|
auto id = node_parent->GetChildren().Index(node);
|
||||||
auto v_id = node->GetVolumeId();
|
auto idx = node->GetIdx();
|
||||||
node_parent->GetChildren().Remove(node);
|
node_parent->GetChildren().Remove(node);
|
||||||
if (id > 0){
|
if (id > 0){
|
||||||
if(id == node_parent->GetChildCount()) id--;
|
if(id == node_parent->GetChildCount()) id--;
|
||||||
ret_item = wxDataViewItem(node_parent->GetChildren().Item(id));
|
ret_item = wxDataViewItem(node_parent->GetChildren().Item(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
//update volume_id value for remaining child-nodes
|
//update idx value for remaining child-nodes
|
||||||
auto children = node_parent->GetChildren();
|
auto children = node_parent->GetChildren();
|
||||||
for (size_t i = 0; i < node_parent->GetChildCount() && v_id>=0; i++)
|
for (size_t i = 0; i < node_parent->GetChildCount() && idx>=0; i++)
|
||||||
{
|
{
|
||||||
auto volume_id = children[i]->GetVolumeId();
|
auto cur_idx = children[i]->GetIdx();
|
||||||
if (volume_id > v_id)
|
if (cur_idx > idx)
|
||||||
children[i]->SetVolumeId(volume_id-1);
|
children[i]->SetIdx(cur_idx-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -592,7 +593,7 @@ wxDataViewItem PrusaObjectDataViewModel::GetItemByVolumeId(int obj_idx, int volu
|
||||||
|
|
||||||
auto parent = m_objects[obj_idx];
|
auto parent = m_objects[obj_idx];
|
||||||
if (parent->GetChildCount() == 0 ||
|
if (parent->GetChildCount() == 0 ||
|
||||||
(parent->GetChildCount() == 1 && parent->GetNthChild(0)->m_volume_id == -2)) {
|
(parent->GetChildCount() == 1 && parent->GetNthChild(0)->GetType() & itSettings )) {
|
||||||
if (volume_idx == 0)
|
if (volume_idx == 0)
|
||||||
return GetItemById(obj_idx);
|
return GetItemById(obj_idx);
|
||||||
|
|
||||||
|
@ -601,13 +602,13 @@ wxDataViewItem PrusaObjectDataViewModel::GetItemByVolumeId(int obj_idx, int volu
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < parent->GetChildCount(); i++)
|
for (size_t i = 0; i < parent->GetChildCount(); i++)
|
||||||
if (parent->GetNthChild(i)->m_volume_id == volume_idx)
|
if (parent->GetNthChild(i)->m_idx == volume_idx && parent->GetNthChild(0)->GetType() & itVolume)
|
||||||
return wxDataViewItem(parent->GetNthChild(i));
|
return wxDataViewItem(parent->GetNthChild(i));
|
||||||
|
|
||||||
return wxDataViewItem(0);
|
return wxDataViewItem(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int PrusaObjectDataViewModel::GetIdByItem(wxDataViewItem& item)
|
int PrusaObjectDataViewModel::GetIdByItem(const wxDataViewItem& item)
|
||||||
{
|
{
|
||||||
wxASSERT(item.IsOk());
|
wxASSERT(item.IsOk());
|
||||||
|
|
||||||
|
@ -624,22 +625,27 @@ int PrusaObjectDataViewModel::GetVolumeIdByItem(const wxDataViewItem& item)
|
||||||
wxASSERT(item.IsOk());
|
wxASSERT(item.IsOk());
|
||||||
|
|
||||||
PrusaObjectDataViewModelNode *node = (PrusaObjectDataViewModelNode*)item.GetID();
|
PrusaObjectDataViewModelNode *node = (PrusaObjectDataViewModelNode*)item.GetID();
|
||||||
if (!node) // happens if item.IsOk()==false
|
if (!node || node->m_type != itVolume)
|
||||||
return -1;
|
return -1;
|
||||||
return node->GetVolumeId();
|
return node->GetIdx();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PrusaObjectDataViewModel::GetObjectAndVolumeIdsByItem(const wxDataViewItem& item, int& obj_idx, int& vol_idx)
|
void PrusaObjectDataViewModel::GetItemInfo(const wxDataViewItem& item, ItemType& type, int& obj_idx, int& idx)
|
||||||
{
|
{
|
||||||
wxASSERT(item.IsOk());
|
wxASSERT(item.IsOk());
|
||||||
obj_idx = vol_idx = -1;
|
type = itUndef;
|
||||||
|
|
||||||
PrusaObjectDataViewModelNode *node = (PrusaObjectDataViewModelNode*)item.GetID();
|
PrusaObjectDataViewModelNode *node = (PrusaObjectDataViewModelNode*)item.GetID();
|
||||||
if (!node) return;
|
if (!node) return;
|
||||||
vol_idx = node->GetVolumeId();
|
|
||||||
|
type = node->GetType();
|
||||||
|
idx = node->GetIdx();
|
||||||
|
|
||||||
PrusaObjectDataViewModelNode *parent_node = node->GetParent();
|
PrusaObjectDataViewModelNode *parent_node = node->GetParent();
|
||||||
if (!parent_node) return;
|
if (!parent_node) return;
|
||||||
|
if (type == itInstance)
|
||||||
|
parent_node = node->GetParent()->GetParent();
|
||||||
|
if (!parent_node) return;
|
||||||
|
|
||||||
auto it = find(m_objects.begin(), m_objects.end(), parent_node);
|
auto it = find(m_objects.begin(), m_objects.end(), parent_node);
|
||||||
if (it != m_objects.end())
|
if (it != m_objects.end())
|
||||||
|
@ -664,11 +670,11 @@ wxString PrusaObjectDataViewModel::GetCopy(const wxDataViewItem &item) const
|
||||||
return node->m_copy;
|
return node->m_copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxIcon& PrusaObjectDataViewModel::GetIcon(const wxDataViewItem &item) const
|
// wxIcon& PrusaObjectDataViewModel::GetIcon(const wxDataViewItem &item) const
|
||||||
{
|
// {
|
||||||
PrusaObjectDataViewModelNode *node = (PrusaObjectDataViewModelNode*)item.GetID();
|
// PrusaObjectDataViewModelNode *node = (PrusaObjectDataViewModelNode*)item.GetID();
|
||||||
return node->m_icon;
|
// return node->m_icon;
|
||||||
}
|
// }
|
||||||
|
|
||||||
wxBitmap& PrusaObjectDataViewModel::GetBitmap(const wxDataViewItem &item) const
|
wxBitmap& PrusaObjectDataViewModel::GetBitmap(const wxDataViewItem &item) const
|
||||||
{
|
{
|
||||||
|
@ -715,7 +721,7 @@ bool PrusaObjectDataViewModel::SetValue(const wxVariant &variant, const int item
|
||||||
|
|
||||||
return m_objects[item_idx]->SetValue(variant, col);
|
return m_objects[item_idx]->SetValue(variant, col);
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
wxDataViewItem PrusaObjectDataViewModel::MoveChildUp(const wxDataViewItem &item)
|
wxDataViewItem PrusaObjectDataViewModel::MoveChildUp(const wxDataViewItem &item)
|
||||||
{
|
{
|
||||||
auto ret_item = wxDataViewItem(0);
|
auto ret_item = wxDataViewItem(0);
|
||||||
|
@ -763,7 +769,7 @@ wxDataViewItem PrusaObjectDataViewModel::MoveChildDown(const wxDataViewItem &ite
|
||||||
ret_item = wxDataViewItem(node_parent->GetNthChild(node_parent->GetChildCount()-1));
|
ret_item = wxDataViewItem(node_parent->GetNthChild(node_parent->GetChildCount()-1));
|
||||||
return ret_item;
|
return ret_item;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
wxDataViewItem PrusaObjectDataViewModel::ReorganizeChildren(int current_volume_id, int new_volume_id, const wxDataViewItem &parent)
|
wxDataViewItem PrusaObjectDataViewModel::ReorganizeChildren(int current_volume_id, int new_volume_id, const wxDataViewItem &parent)
|
||||||
{
|
{
|
||||||
auto ret_item = wxDataViewItem(0);
|
auto ret_item = wxDataViewItem(0);
|
||||||
|
@ -774,14 +780,14 @@ wxDataViewItem PrusaObjectDataViewModel::ReorganizeChildren(int current_volume_i
|
||||||
if (!node_parent) // happens if item.IsOk()==false
|
if (!node_parent) // happens if item.IsOk()==false
|
||||||
return ret_item;
|
return ret_item;
|
||||||
|
|
||||||
const size_t shift = node_parent->GetChildren().Item(0)->m_type == "settings" ? 1 : 0;
|
const size_t shift = node_parent->GetChildren().Item(0)->m_type == itSettings ? 1 : 0;
|
||||||
|
|
||||||
PrusaObjectDataViewModelNode *deleted_node = node_parent->GetNthChild(current_volume_id+shift);
|
PrusaObjectDataViewModelNode *deleted_node = node_parent->GetNthChild(current_volume_id+shift);
|
||||||
node_parent->GetChildren().Remove(deleted_node);
|
node_parent->GetChildren().Remove(deleted_node);
|
||||||
ItemDeleted(parent, wxDataViewItem(deleted_node));
|
ItemDeleted(parent, wxDataViewItem(deleted_node));
|
||||||
node_parent->Insert(deleted_node, new_volume_id+shift);
|
node_parent->Insert(deleted_node, new_volume_id+shift);
|
||||||
ItemAdded(parent, wxDataViewItem(deleted_node));
|
ItemAdded(parent, wxDataViewItem(deleted_node));
|
||||||
const auto settings_item = HasSettings(wxDataViewItem(deleted_node));
|
const auto settings_item = GetSettingsItem(wxDataViewItem(deleted_node));
|
||||||
if (settings_item)
|
if (settings_item)
|
||||||
ItemAdded(wxDataViewItem(deleted_node), settings_item);
|
ItemAdded(wxDataViewItem(deleted_node), settings_item);
|
||||||
|
|
||||||
|
@ -790,7 +796,7 @@ wxDataViewItem PrusaObjectDataViewModel::ReorganizeChildren(int current_volume_i
|
||||||
int id_frst = current_volume_id < new_volume_id ? current_volume_id : new_volume_id;
|
int id_frst = current_volume_id < new_volume_id ? current_volume_id : new_volume_id;
|
||||||
int id_last = current_volume_id > new_volume_id ? current_volume_id : new_volume_id;
|
int id_last = current_volume_id > new_volume_id ? current_volume_id : new_volume_id;
|
||||||
for (int id = id_frst; id <= id_last; ++id)
|
for (int id = id_frst; id <= id_last; ++id)
|
||||||
children[id+shift]->SetVolumeId(id);
|
children[id+shift]->SetIdx(id);
|
||||||
|
|
||||||
return wxDataViewItem(node_parent->GetNthChild(new_volume_id+shift));
|
return wxDataViewItem(node_parent->GetNthChild(new_volume_id+shift));
|
||||||
}
|
}
|
||||||
|
@ -854,7 +860,15 @@ unsigned int PrusaObjectDataViewModel::GetChildren(const wxDataViewItem &parent,
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxDataViewItem PrusaObjectDataViewModel::HasSettings(const wxDataViewItem &item) const
|
ItemType PrusaObjectDataViewModel::GetItemType(const wxDataViewItem &item) const
|
||||||
|
{
|
||||||
|
if (!item.IsOk())
|
||||||
|
return itUndef;
|
||||||
|
PrusaObjectDataViewModelNode *node = (PrusaObjectDataViewModelNode*)item.GetID();
|
||||||
|
return node->m_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataViewItem PrusaObjectDataViewModel::GetSettingsItem(const wxDataViewItem &item) const
|
||||||
{
|
{
|
||||||
if (!item.IsOk())
|
if (!item.IsOk())
|
||||||
return wxDataViewItem(0);
|
return wxDataViewItem(0);
|
||||||
|
@ -863,9 +877,8 @@ wxDataViewItem PrusaObjectDataViewModel::HasSettings(const wxDataViewItem &item)
|
||||||
if (node->GetChildCount() == 0)
|
if (node->GetChildCount() == 0)
|
||||||
return wxDataViewItem(0);
|
return wxDataViewItem(0);
|
||||||
|
|
||||||
auto& children = node->GetChildren();
|
if (node->GetNthChild(0)->m_type == itSettings)
|
||||||
if (children[0]->m_type == "settings")
|
return wxDataViewItem((void*)node->GetNthChild(0));
|
||||||
return wxDataViewItem((void*)children[0]);;
|
|
||||||
|
|
||||||
return wxDataViewItem(0);
|
return wxDataViewItem(0);
|
||||||
}
|
}
|
||||||
|
@ -875,7 +888,7 @@ bool PrusaObjectDataViewModel::IsSettingsItem(const wxDataViewItem &item) const
|
||||||
if (!item.IsOk())
|
if (!item.IsOk())
|
||||||
return false;
|
return false;
|
||||||
PrusaObjectDataViewModelNode *node = (PrusaObjectDataViewModelNode*)item.GetID();
|
PrusaObjectDataViewModelNode *node = (PrusaObjectDataViewModelNode*)item.GetID();
|
||||||
return node->m_type == "settings";
|
return node->m_type == itSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -194,6 +194,15 @@ DECLARE_VARIANT_OBJECT(PrusaDataViewBitmapText)
|
||||||
// PrusaObjectDataViewModelNode: a node inside PrusaObjectDataViewModel
|
// PrusaObjectDataViewModelNode: a node inside PrusaObjectDataViewModel
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
enum ItemType{
|
||||||
|
itUndef,
|
||||||
|
itObject,
|
||||||
|
itVolume,
|
||||||
|
itInstanceRoot,
|
||||||
|
itInstance,
|
||||||
|
itSettings
|
||||||
|
};
|
||||||
|
|
||||||
class PrusaObjectDataViewModelNode;
|
class PrusaObjectDataViewModelNode;
|
||||||
WX_DEFINE_ARRAY_PTR(PrusaObjectDataViewModelNode*, MyObjectTreeModelNodePtrArray);
|
WX_DEFINE_ARRAY_PTR(PrusaObjectDataViewModelNode*, MyObjectTreeModelNodePtrArray);
|
||||||
|
|
||||||
|
@ -201,7 +210,6 @@ class PrusaObjectDataViewModelNode
|
||||||
{
|
{
|
||||||
PrusaObjectDataViewModelNode* m_parent;
|
PrusaObjectDataViewModelNode* m_parent;
|
||||||
MyObjectTreeModelNodePtrArray m_children;
|
MyObjectTreeModelNodePtrArray m_children;
|
||||||
wxIcon m_empty_icon;
|
|
||||||
wxBitmap m_empty_bmp;
|
wxBitmap m_empty_bmp;
|
||||||
std::vector< std::string > m_opt_categories;
|
std::vector< std::string > m_opt_categories;
|
||||||
public:
|
public:
|
||||||
|
@ -209,8 +217,7 @@ public:
|
||||||
m_parent = NULL;
|
m_parent = NULL;
|
||||||
m_name = name;
|
m_name = name;
|
||||||
m_copy = wxString::Format("%d", instances_count);
|
m_copy = wxString::Format("%d", instances_count);
|
||||||
m_type = "object";
|
m_type = itObject;
|
||||||
m_volume_id = -1;
|
|
||||||
#ifdef __WXGTK__
|
#ifdef __WXGTK__
|
||||||
// it's necessary on GTK because of control have to know if this item will be container
|
// it's necessary on GTK because of control have to know if this item will be container
|
||||||
// in another case you couldn't to add subitem for this item
|
// in another case you couldn't to add subitem for this item
|
||||||
|
@ -224,13 +231,13 @@ public:
|
||||||
const wxString& sub_obj_name,
|
const wxString& sub_obj_name,
|
||||||
const wxBitmap& bmp,
|
const wxBitmap& bmp,
|
||||||
const wxString& extruder,
|
const wxString& extruder,
|
||||||
const int volume_id=-1) {
|
const int idx = -1 ) {
|
||||||
m_parent = parent;
|
m_parent = parent;
|
||||||
m_name = sub_obj_name;
|
m_name = sub_obj_name;
|
||||||
m_copy = wxEmptyString;
|
m_copy = wxEmptyString;
|
||||||
m_bmp = bmp;
|
m_bmp = bmp;
|
||||||
m_type = "volume";
|
m_type = itVolume;
|
||||||
m_volume_id = volume_id;
|
m_idx = idx;
|
||||||
m_extruder = extruder;
|
m_extruder = extruder;
|
||||||
#ifdef __WXGTK__
|
#ifdef __WXGTK__
|
||||||
// it's necessary on GTK because of control have to know if this item will be container
|
// it's necessary on GTK because of control have to know if this item will be container
|
||||||
|
@ -241,12 +248,23 @@ public:
|
||||||
set_part_action_icon();
|
set_part_action_icon();
|
||||||
}
|
}
|
||||||
|
|
||||||
PrusaObjectDataViewModelNode( PrusaObjectDataViewModelNode* parent) :
|
PrusaObjectDataViewModelNode( PrusaObjectDataViewModelNode* parent, const ItemType type = itSettings) :
|
||||||
m_parent(parent),
|
m_parent(parent),
|
||||||
m_name("Settings to modified"),
|
|
||||||
m_copy(wxEmptyString),
|
m_copy(wxEmptyString),
|
||||||
m_type("settings"),
|
m_type(type),
|
||||||
m_extruder(wxEmptyString) {}
|
m_extruder(wxEmptyString)
|
||||||
|
{
|
||||||
|
if (type == itSettings) {
|
||||||
|
m_name = "Settings to modified";
|
||||||
|
}
|
||||||
|
else if (type == itInstanceRoot) {
|
||||||
|
m_name = "Instances";
|
||||||
|
}
|
||||||
|
else if (type == itInstance) {
|
||||||
|
m_name = wxString::Format("Instances_%d", parent->GetChildCount() + 1);
|
||||||
|
m_idx = parent->GetChildCount();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
~PrusaObjectDataViewModelNode()
|
~PrusaObjectDataViewModelNode()
|
||||||
{
|
{
|
||||||
|
@ -260,11 +278,10 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString m_name;
|
wxString m_name;
|
||||||
wxIcon& m_icon = m_empty_icon;
|
|
||||||
wxBitmap& m_bmp = m_empty_bmp;
|
wxBitmap& m_bmp = m_empty_bmp;
|
||||||
wxString m_copy;
|
wxString m_copy;
|
||||||
std::string m_type;
|
ItemType m_type;
|
||||||
int m_volume_id = -2;
|
int m_idx = -1;
|
||||||
bool m_container = false;
|
bool m_container = false;
|
||||||
wxString m_extruder = "default";
|
wxString m_extruder = "default";
|
||||||
wxBitmap m_action_icon;
|
wxBitmap m_action_icon;
|
||||||
|
@ -341,28 +358,21 @@ public:
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
void SetIcon(const wxIcon &icon)
|
|
||||||
{
|
|
||||||
m_icon = icon;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetBitmap(const wxBitmap &icon)
|
void SetBitmap(const wxBitmap &icon)
|
||||||
{
|
{
|
||||||
m_bmp = icon;
|
m_bmp = icon;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetType(const std::string& type){
|
|
||||||
m_type = type;
|
|
||||||
}
|
|
||||||
const std::string& GetType(){
|
|
||||||
return m_type;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetVolumeId(const int& volume_id){
|
ItemType GetType() const {
|
||||||
m_volume_id = volume_id;
|
return m_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetIdx(const int& idx) {
|
||||||
|
m_idx = idx;
|
||||||
}
|
}
|
||||||
const int& GetVolumeId(){
|
int GetIdx() const {
|
||||||
return m_volume_id;
|
return m_idx;
|
||||||
}
|
}
|
||||||
|
|
||||||
// use this function only for childrens
|
// use this function only for childrens
|
||||||
|
@ -370,9 +380,10 @@ public:
|
||||||
{
|
{
|
||||||
// ! Don't overwrite other values because of equality of this values for all children --
|
// ! Don't overwrite other values because of equality of this values for all children --
|
||||||
m_name = from_node.m_name;
|
m_name = from_node.m_name;
|
||||||
m_icon = from_node.m_icon;
|
m_bmp = from_node.m_bmp;
|
||||||
m_volume_id = from_node.m_volume_id;
|
m_idx = from_node.m_idx;
|
||||||
m_extruder = from_node.m_extruder;
|
m_extruder = from_node.m_extruder;
|
||||||
|
m_type = from_node.m_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SwapChildrens(int frst_id, int scnd_id) {
|
bool SwapChildrens(int frst_id, int scnd_id) {
|
||||||
|
@ -384,8 +395,8 @@ public:
|
||||||
PrusaObjectDataViewModelNode new_scnd = *GetNthChild(frst_id);
|
PrusaObjectDataViewModelNode new_scnd = *GetNthChild(frst_id);
|
||||||
PrusaObjectDataViewModelNode new_frst = *GetNthChild(scnd_id);
|
PrusaObjectDataViewModelNode new_frst = *GetNthChild(scnd_id);
|
||||||
|
|
||||||
new_scnd.m_volume_id = m_children.Item(scnd_id)->m_volume_id;
|
new_scnd.m_idx = m_children.Item(scnd_id)->m_idx;
|
||||||
new_frst.m_volume_id = m_children.Item(frst_id)->m_volume_id;
|
new_frst.m_idx = m_children.Item(frst_id)->m_idx;
|
||||||
|
|
||||||
m_children.Item(frst_id)->AssignAllVal(new_frst);
|
m_children.Item(frst_id)->AssignAllVal(new_frst);
|
||||||
m_children.Item(scnd_id)->AssignAllVal(new_scnd);
|
m_children.Item(scnd_id)->AssignAllVal(new_scnd);
|
||||||
|
@ -422,16 +433,15 @@ public:
|
||||||
void DeleteChildren(wxDataViewItem& parent);
|
void DeleteChildren(wxDataViewItem& parent);
|
||||||
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);
|
||||||
int GetIdByItem(wxDataViewItem& item);
|
int GetIdByItem(const wxDataViewItem& item);
|
||||||
int GetVolumeIdByItem(const wxDataViewItem& item);
|
int GetVolumeIdByItem(const wxDataViewItem& item);
|
||||||
void GetObjectAndVolumeIdsByItem(const wxDataViewItem& item, int& obj_idx, int& vol_idx);
|
void GetItemInfo(const wxDataViewItem& item, ItemType& type, int& obj_idx, int& idx);
|
||||||
bool IsEmpty() { return m_objects.empty(); }
|
bool IsEmpty() { return m_objects.empty(); }
|
||||||
|
|
||||||
// helper method for wxLog
|
// helper method for wxLog
|
||||||
|
|
||||||
wxString GetName(const wxDataViewItem &item) const;
|
wxString GetName(const wxDataViewItem &item) const;
|
||||||
wxString GetCopy(const wxDataViewItem &item) const;
|
wxString GetCopy(const wxDataViewItem &item) const;
|
||||||
wxIcon& GetIcon(const wxDataViewItem &item) const;
|
|
||||||
wxBitmap& GetBitmap(const wxDataViewItem &item) const;
|
wxBitmap& GetBitmap(const wxDataViewItem &item) const;
|
||||||
|
|
||||||
// helper methods to change the model
|
// helper methods to change the model
|
||||||
|
@ -445,8 +455,8 @@ public:
|
||||||
const wxDataViewItem &item, unsigned int col) override;
|
const wxDataViewItem &item, unsigned int col) override;
|
||||||
bool SetValue(const wxVariant &variant, const int item_idx, unsigned int col);
|
bool SetValue(const wxVariant &variant, const int item_idx, unsigned int col);
|
||||||
|
|
||||||
wxDataViewItem MoveChildUp(const wxDataViewItem &item);
|
// wxDataViewItem MoveChildUp(const wxDataViewItem &item);
|
||||||
wxDataViewItem MoveChildDown(const wxDataViewItem &item);
|
// wxDataViewItem MoveChildDown(const wxDataViewItem &item);
|
||||||
// For parent move child from cur_volume_id place to new_volume_id
|
// For parent move child from cur_volume_id place to new_volume_id
|
||||||
// Remaining items will moved up/down accordingly
|
// Remaining items will moved up/down accordingly
|
||||||
wxDataViewItem ReorganizeChildren(int cur_volume_id,
|
wxDataViewItem ReorganizeChildren(int cur_volume_id,
|
||||||
|
@ -464,7 +474,8 @@ public:
|
||||||
// In our case it is an item with all columns
|
// In our case it is an item with all columns
|
||||||
virtual bool HasContainerColumns(const wxDataViewItem& WXUNUSED(item)) const override { return true; }
|
virtual bool HasContainerColumns(const wxDataViewItem& WXUNUSED(item)) const override { return true; }
|
||||||
|
|
||||||
wxDataViewItem HasSettings(const wxDataViewItem &item) const;
|
ItemType GetItemType(const wxDataViewItem &item) const ;
|
||||||
|
wxDataViewItem GetSettingsItem(const wxDataViewItem &item) const;
|
||||||
bool IsSettingsItem(const wxDataViewItem &item) const;
|
bool IsSettingsItem(const wxDataViewItem &item) const;
|
||||||
void UpdateSettingsDigest(const wxDataViewItem &item, const std::vector<std::string>& categories);
|
void UpdateSettingsDigest(const wxDataViewItem &item, const std::vector<std::string>& categories);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue