diff --git a/src/slic3r/GUI/ObjectDataViewModel.cpp b/src/slic3r/GUI/ObjectDataViewModel.cpp
index a82153c1f..623a4aa38 100644
--- a/src/slic3r/GUI/ObjectDataViewModel.cpp
+++ b/src/slic3r/GUI/ObjectDataViewModel.cpp
@@ -1514,6 +1514,9 @@ void ObjectDataViewModel::assembly_name(ObjectDataViewModelNode* item, wxString
wxString str = name + ":" + item->GetName();
assembly_name_list.push_back(std::make_pair(item, str));
}
+ else {
+ assembly_name_list.push_back(std::make_pair(item, name));
+ }
for (size_t i = 0; i < item->GetChildCount(); ++i) {
wxString str_name = name + ":" + item->GetName();
if (type == itPlate) {
@@ -1532,18 +1535,27 @@ void ObjectDataViewModel::search_object(wxString search_text)
search_found_list.clear();
search_text = search_text.MakeLower();
- for (auto pair : assembly_name_list) {
- wxString need_str = pair.second.AfterFirst(':');
- need_str = need_str.MakeLower();
- size_t pos = need_str.find(search_text);
- if ( pos != wxString::npos) {
- size_t len = search_text.length();
- size_t before_size = pair.second.BeforeFirst(':').length();
- wxString new_search_str = "" + pair.second.Mid(before_size + pos + 1, len) + "";
- wxString new_str = pair.second.Mid(0, before_size + pos + 1) + new_search_str + pair.second.Mid(before_size + pos + len + 1, wxString::npos);
+ for (const auto& pair : assembly_name_list) {
+ wxString sub_str = pair.second;
+ sub_str = sub_str.MakeLower();
- search_found_list.push_back(std::make_pair(pair.first, new_str));
+ wxString new_str = "";
+ size_t search_text_len = search_text.length();
+ size_t curr_str_len = 0;
+ size_t pos = sub_str.find(search_text);
+ while (pos != wxString::npos) {
+ wxString new_search_str = "" + pair.second.Mid(curr_str_len + pos, search_text_len) + "";
+ new_str += pair.second.Mid(curr_str_len, pos) + new_search_str;
+ curr_str_len += search_text_len + pos;
+ sub_str = sub_str.substr(pos + 1);
+ pos = sub_str.find(search_text);
}
+
+ if (curr_str_len > 0 && curr_str_len < pair.second.length()) {
+ new_str += pair.second.substr(curr_str_len);
+ }
+ if (!new_str.empty())
+ search_found_list.push_back(std::make_pair(pair.first, new_str));
}
}
}