MCPcopy Create free account
hub / github.com/dfranx/ImFileDialog / m_parseFilter

Method m_parseFilter

ImFileDialog.cpp:653–703  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

651 return true;
652 }
653 void FileDialog::m_parseFilter(const std::string& filter)
654 {
655 m_filter = "";
656 m_filterExtensions.clear();
657 m_filterSelection = 0;
658
659 if (filter.empty())
660 return;
661
662 std::vector<std::string> exts;
663
664 size_t lastSplit = 0, lastExt = 0;
665 bool inExtList = false;
666 for (size_t i = 0; i < filter.size(); i++) {
667 if (filter[i] == ',') {
668 if (!inExtList)
669 lastSplit = i + 1;
670 else {
671 exts.push_back(filter.substr(lastExt, i - lastExt));
672 lastExt = i + 1;
673 }
674 }
675 else if (filter[i] == '{') {
676 std::string filterName = filter.substr(lastSplit, i - lastSplit);
677 if (filterName == ".*") {
678 m_filter += std::string(std::string("All Files (*.*)\0").c_str(), 16);
679 m_filterExtensions.push_back(std::vector<std::string>());
680 }
681 else
682 m_filter += std::string((filterName + "\0").c_str(), filterName.size() + 1);
683 inExtList = true;
684 lastExt = i + 1;
685 }
686 else if (filter[i] == '}') {
687 exts.push_back(filter.substr(lastExt, i - lastExt));
688 m_filterExtensions.push_back(exts);
689 exts.clear();
690
691 inExtList = false;
692 }
693 }
694 if (lastSplit != 0) {
695 std::string filterName = filter.substr(lastSplit);
696 if (filterName == ".*") {
697 m_filter += std::string(std::string("All Files (*.*)\0").c_str(), 16);
698 m_filterExtensions.push_back(std::vector<std::string>());
699 }
700 else
701 m_filter += std::string((filterName + "\0").c_str(), filterName.size() + 1);
702 }
703 }
704
705 void* FileDialog::m_getIcon(const std::filesystem::path& path)
706 {

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected