std::vector<std::string> MultiComboBox(const char* label, std::vector<std::string> selectedItems, int num_items, const char* const items[]) {
ImGui::PushID(label);
std::vector<std::string> newItems = selectedItems;
std::string selected_label;
bool first_selected = true;
for (int i = 0; i < num_items; ++i) {
if (std::find(newItems.begin(), newItems.end(), items[i]) != newItems.end()) {
if (!first_selected)
selected_label += ", ";
selected_label += items[i];
first_selected = false;
}
}
if (selected_label.empty())
selected_label = "None";
else if (selected_label.size() > 30)
selected_label = selected_label.substr(0, 27) + "...";
if (ImGui::BeginCombo(label, selected_label.c_str())) {
for (int i = 0; i < num_items; ++i) {
ImGui::PushID(items[i]);
bool is_selected = std::find(newItems.begin(), newItems.end(), items[i]) != newItems.end();
if (ImGui::Selectable(items[i], is_selected)) {
if (std::find(newItems.begin(), newItems.end(), items[i]) != newItems.end()) {
newItems.erase(std::remove(newItems.begin(), newItems.end(), items[i]), newItems.end());
}
else {
newItems.push_back(items[i]);
}
}
ImGui::PopID();
}
ImGui::EndCombo();
}
ImGui::PopID();
return newItems;
}