Change model selection to dropdown menu
This commit is contained in:
parent
d63178a37b
commit
d18f9d3162
|
@ -72,5 +72,6 @@ target_link_libraries( fc2d ${OpenCV_LIBS} ${OPENGL_LIBRARIES} ${WEBP_LIBRARIES}
|
||||||
add_executable( fc2dconfig
|
add_executable( fc2dconfig
|
||||||
src/fc2dconfig.cpp
|
src/fc2dconfig.cpp
|
||||||
src/paths.cpp
|
src/paths.cpp
|
||||||
|
src/modellist.cpp
|
||||||
)
|
)
|
||||||
target_link_libraries( fc2dconfig ${wxWidgets_LIBRARIES} )
|
target_link_libraries( fc2dconfig ${wxWidgets_LIBRARIES} )
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include <config.hpp>
|
#include <config.hpp>
|
||||||
#include <args.hpp>
|
#include <args.hpp>
|
||||||
#include <paths.hpp>
|
#include <paths.hpp>
|
||||||
|
#include <modellist.hpp>
|
||||||
|
|
||||||
#include <wx/wxprec.h>
|
#include <wx/wxprec.h>
|
||||||
#ifndef WX_PRECOMP
|
#ifndef WX_PRECOMP
|
||||||
|
@ -18,8 +19,9 @@ class ConfigurationFrame : public wxFrame {
|
||||||
public:
|
public:
|
||||||
ConfigurationFrame();
|
ConfigurationFrame();
|
||||||
private:
|
private:
|
||||||
|
std::vector<std::string> modelVec;
|
||||||
wxCheckBox* useHaarCheckBox;
|
wxCheckBox* useHaarCheckBox;
|
||||||
wxTextCtrl* modelNameText;
|
wxChoice* modelNameChoice;
|
||||||
void OnExit(wxCommandEvent& event);
|
void OnExit(wxCommandEvent& event);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -41,15 +43,24 @@ ConfigurationFrame::ConfigurationFrame() : wxFrame(NULL, wxID_ANY, "Configure "
|
||||||
// TODO: load config file and populate values
|
// TODO: load config file and populate values
|
||||||
wxStaticText* placeholderText = new wxStaticText(panel, wxID_ANY, "There's nothing here right now, just click OK.");
|
wxStaticText* placeholderText = new wxStaticText(panel, wxID_ANY, "There's nothing here right now, just click OK.");
|
||||||
useHaarCheckBox = new wxCheckBox(panel, wxID_ANY, "Disable DNN face detection");
|
useHaarCheckBox = new wxCheckBox(panel, wxID_ANY, "Disable DNN face detection");
|
||||||
// TODO: make this a dropdown with the detected model files
|
|
||||||
modelNameText = new wxTextCtrl(panel, wxID_ANY, "test");
|
// find models to populate model dropdown
|
||||||
|
modelVec = listModels();
|
||||||
|
wxString modelArray[modelVec.size()];
|
||||||
|
|
||||||
|
for (int i = 0; i < modelVec.size(); i++) {
|
||||||
|
modelArray[i] = wxString(modelVec[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
modelNameChoice = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, modelVec.size(), modelArray);
|
||||||
|
|
||||||
// TODO: cancel button to exit without saving settings
|
// TODO: cancel button to exit without saving settings
|
||||||
wxButton* okButton = new wxButton(panel, wxID_OK, "OK");
|
wxButton* okButton = new wxButton(panel, wxID_OK, "OK");
|
||||||
|
|
||||||
wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);
|
wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);
|
||||||
sizer->Add(placeholderText, 0, wxALL | wxALIGN_LEFT, 10);
|
sizer->Add(placeholderText, 0, wxALL | wxALIGN_LEFT, 10);
|
||||||
sizer->Add(useHaarCheckBox, 0, wxALL | wxALIGN_LEFT, 5);
|
sizer->Add(useHaarCheckBox, 0, wxALL | wxALIGN_LEFT, 5);
|
||||||
sizer->Add(modelNameText, 0, wxALL | wxALIGN_LEFT, 5);
|
sizer->Add(modelNameChoice, 0, wxALL | wxALIGN_LEFT, 5);
|
||||||
sizer->AddStretchSpacer(1);
|
sizer->AddStretchSpacer(1);
|
||||||
sizer->Add(okButton, 0, wxALIGN_RIGHT | wxALL, 10);
|
sizer->Add(okButton, 0, wxALIGN_RIGHT | wxALL, 10);
|
||||||
|
|
||||||
|
@ -63,7 +74,11 @@ void ConfigurationFrame::OnExit(wxCommandEvent& event) {
|
||||||
std::ofstream configFile;
|
std::ofstream configFile;
|
||||||
configFile.open(prefixCustom + "config.toml");
|
configFile.open(prefixCustom + "config.toml");
|
||||||
configFile << "use_haar = " << (useHaarCheckBox->GetValue() ? "true" : "false") << std::endl;
|
configFile << "use_haar = " << (useHaarCheckBox->GetValue() ? "true" : "false") << std::endl;
|
||||||
configFile << "model = \"" << modelNameText->GetValue() << "\""<< std::endl;
|
// janky edge case lmao
|
||||||
|
// if user did not select any model, don't write the line in the config file!
|
||||||
|
if (modelNameChoice->GetSelection() != wxNOT_FOUND) {
|
||||||
|
configFile << "model = \"" << modelVec[modelNameChoice->GetSelection()] << "\""<< std::endl;
|
||||||
|
}
|
||||||
configFile.close();
|
configFile.close();
|
||||||
|
|
||||||
Close(true);
|
Close(true);
|
||||||
|
|
46
src/modellist.cpp
Normal file
46
src/modellist.cpp
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include <dirent.h>
|
||||||
|
|
||||||
|
#include <paths.hpp>
|
||||||
|
|
||||||
|
#include <modellist.hpp>
|
||||||
|
|
||||||
|
// get models from a given directory and add them to a given vector
|
||||||
|
void getModelsFromDir(std::string path, std::vector<std::string>* vector) {
|
||||||
|
DIR* dir;
|
||||||
|
struct dirent* ent;
|
||||||
|
|
||||||
|
if ((dir = opendir(path.c_str())) != NULL) {
|
||||||
|
while ((ent = readdir(dir)) != NULL) {
|
||||||
|
std::string filename = ent->d_name;
|
||||||
|
size_t fmaPos = filename.find(".fma"); // position of ".fma" in filename
|
||||||
|
|
||||||
|
if (fmaPos == std::string::npos) {
|
||||||
|
// filename does not have ".fma" in it
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
filename.erase(fmaPos);
|
||||||
|
|
||||||
|
vector->push_back(filename);
|
||||||
|
}
|
||||||
|
closedir(dir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<std::string> listModels() {
|
||||||
|
std::vector<std::string> modelList;
|
||||||
|
|
||||||
|
getModelsFromDir(prefixCustom + "models", &modelList);
|
||||||
|
getModelsFromDir(prefixDefault + "models", &modelList);
|
||||||
|
getModelsFromDir("models", &modelList);
|
||||||
|
|
||||||
|
/*
|
||||||
|
for (int i = 0; i < modelList.size(); i++) {
|
||||||
|
std::cout << "Detected model: " << modelList.at(i) << std::endl;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
return modelList;
|
||||||
|
}
|
8
src/modellist.hpp
Normal file
8
src/modellist.hpp
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#ifndef MODELLIST_HPP
|
||||||
|
#define MODELLIST_HPP
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
std::vector<std::string> listModels();
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in a new issue