ENH: optimize object list

1. remove min size logic
2. remove some not used code
3. fix the current item not visible issue after size change

Change-Id: Ibf39cc4f9e330faadb5d552e7b8a94c0b601513b
Signed-off-by: yifan.wu <yifan.wu@bambulab.com>
This commit is contained in:
yifan.wu 2022-08-04 22:36:56 +08:00 committed by Lane.Wei
parent ea7aaf7a8d
commit 97de939674
2 changed files with 8 additions and 34 deletions

View file

@ -71,9 +71,6 @@ static void take_snapshot(const std::string& snapshot_name)
plater->take_snapshot(snapshot_name);
}
#define ID_OBJECT_ORG_MENU_ITEM_MODULE 11000
#define ID_OBJECT_ORG_MENU_ITEM_PLATE 11001
ObjectList::ObjectList(wxWindow* parent) :
wxDataViewCtrl(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxDV_MULTIPLE)
{
@ -85,17 +82,6 @@ ObjectList::ObjectList(wxWindow* parent) :
//BBS: add part plate related event
//Bind(EVT_PARTPLATE_LIST_PLATE_SELECT, &ObjectList::on_select_plate, this);
// BBS
wxMenuItem* org_by_plate = new wxMenuItem(&m_object_org_menu, ID_OBJECT_ORG_MENU_ITEM_PLATE, "Organize By Plate");
m_object_org_menu.Append(org_by_plate);
wxMenuItem* org_by_module = new wxMenuItem(&m_object_org_menu, ID_OBJECT_ORG_MENU_ITEM_MODULE, "Organize By Module");
m_object_org_menu.Append(org_by_module);
//Bind(wxEVT_DATAVIEW_COLUMN_HEADER_CLICK, &ObjectList::OnColumnHeadClicked, this);
Bind(wxEVT_MENU, [this](wxCommandEvent& evt) { this->OnOrganizeObjects(ortByPlate); }, ID_OBJECT_ORG_MENU_ITEM_PLATE);
Bind(wxEVT_MENU, [this](wxCommandEvent& evt) { this->OnOrganizeObjects(ortByModule); }, ID_OBJECT_ORG_MENU_ITEM_MODULE);
// describe control behavior
Bind(wxEVT_DATAVIEW_SELECTION_CHANGED, [this](wxDataViewEvent& event) {
// detect the current mouse position here, to pass it to list_manipulation() method
@ -266,7 +252,8 @@ ObjectList::ObjectList(wxWindow* parent) :
#else
update_name_column_width();
ensure_current_item_visible();
// BBS
this->CallAfter([this]() { ensure_current_item_visible(); });
#endif
e.Skip();
}));
@ -278,10 +265,13 @@ ObjectList::~ObjectList()
void ObjectList::set_min_height()
{
// BBS
#if 0
if (m_items_count == size_t(-1))
m_items_count = 7;
int list_min_height = lround(2.25 * (m_items_count + 1) * wxGetApp().em_unit()); // +1 is for height of control header
this->SetMinSize(wxSize(1, list_min_height));
#endif
}
void ObjectList::update_min_height()
@ -308,11 +298,14 @@ void ObjectList::update_min_height()
void ObjectList::create_objects_ctrl()
{
// BBS
#if 0
/* Temporary workaround for the correct behavior of the Scrolled sidebar panel:
* 1. set a height of the list to some big value
* 2. change it to the normal(meaningful) min value after first whole Mainframe updating/layouting
*/
SetMinSize(wxSize(-1, 3000));
#endif
m_objects_model = new ObjectDataViewModel;
AssociateModel(m_objects_model);
@ -665,20 +658,6 @@ void ObjectList::update_name_for_items()
wxGetApp().plater()->update();
}
// BBS
void ObjectList::OnColumnHeadClicked(wxDataViewEvent& event)
{
int col = event.GetColumn();
if (col == 0) {
this->PopupMenu(&m_object_org_menu, 0, FromDIP(20));
}
}
void ObjectList::OnOrganizeObjects(OBJECT_ORGANIZE_TYPE type)
{
printf("%d\n", type);
}
void ObjectList::object_config_options_changed(const ObjectVolumeID& ov_id)
{
if (ov_id.object == nullptr)

View file

@ -450,11 +450,6 @@ private:
void OnEditingStarted(wxDataViewEvent &event);
void OnEditingDone(wxDataViewEvent &event);
// BBS
void OnColumnHeadClicked(wxDataViewEvent& event);
void OnOrganizeObjects(OBJECT_ORGANIZE_TYPE type);
wxMenu m_object_org_menu;
std::vector<int> m_columns_width;
};