Multiple file selection for OSX

and finetuning creation UI for MultiFile source
This commit is contained in:
Bruno
2021-05-07 18:56:54 +02:00
parent ee28a03a6c
commit 3be09553cf
3 changed files with 45 additions and 18 deletions

View File

@@ -301,9 +301,27 @@ std::list<std::string> DialogToolkit::selectImagesFileDialog(const std::string &
char const * open_file_names;
open_file_names = tinyfd_openFileDialog( "Select images", startpath.c_str(), 3, open_pattern, "Images", 1);
if (open_file_names)
// filename = std::string(open_file_name);
// TODO
if (open_file_names) {
const std::string& str (open_file_names);
const std::string& delimiters = "|";
// Skip delimiters at beginning.
std::string::size_type lastPos = str.find_first_not_of(delimiters, 0);
// Find first non-delimiter.
std::string::size_type pos = str.find_first_of(delimiters, lastPos);
while (std::string::npos != pos || std::string::npos != lastPos) {
// Found a token, add it to the vector.
files.push_back(str.substr(lastPos, pos - lastPos));
// Skip delimiters.
lastPos = str.find_first_not_of(delimiters, pos);
// Find next non-delimiter.
pos = str.find_first_of(delimiters, lastPos);
}
}
#else
if (!gtk_init()) {

View File

@@ -269,6 +269,9 @@ Source * Mixer::createSourceMultifile(const std::list<std::string> &list_files,
// propose a new name
s->setName( SystemToolkit::base_filename( BaseToolkit::common_prefix(list_files) ) );
}
else {
Log::Notify("Could not find a sequence of consecutively numbered files.");
}
}
return s;

View File

@@ -2676,7 +2676,7 @@ void Navigator::RenderNewPannel()
if (Settings::application.source.new_type == 0) {
// clic button to load file
if ( ImGui::Button( ICON_FA_FILE_EXPORT " Open file", ImVec2(ImGui::GetContentRegionAvail().x IMGUI_RIGHT_ALIGN, 0)) ) {
if ( ImGui::Button( ICON_FA_FILE_EXPORT " Open media", ImVec2(ImGui::GetContentRegionAvail().x IMGUI_RIGHT_ALIGN, 0)) ) {
// launch async call to file dialog and get its future.
if (fileImportFileDialogs.empty()) {
fileImportFileDialogs.emplace_back( std::async(std::launch::async, DialogToolkit::openMediaFileDialog, Settings::application.recentImport.path) );
@@ -2752,6 +2752,9 @@ void Navigator::RenderNewPannel()
if (_selectedImagesFileDialogs.back().wait_for(timeout) == std::future_status::ready ) {
// get the filenames from this file dialog
_selectedFiles = _selectedImagesFileDialogs.back().get();
if (_selectedFiles.empty()) {
Log::Notify("No file selected.");
}
// done with this file dialog
_selectedImagesFileDialogs.pop_back();
fileDialogPending_ = false;
@@ -2760,8 +2763,8 @@ void Navigator::RenderNewPannel()
}
}
// a selection was made
if (!_selectedFiles.empty()) {
// multiple files selected
if (_selectedFiles.size() > 1) {
// set framerate
static int _fps = 30;
@@ -2777,20 +2780,23 @@ void Navigator::RenderNewPannel()
}
if (update_new_source) {
// multiple files selected
if (_selectedFiles.size() > 1) {
std::string label = BaseToolkit::transliterate( _selectedFiles.front() );
label = BaseToolkit::trunc_string(label, 35);
new_source_preview_.setSource( Mixer::manager().createSourceMultifile(_selectedFiles, _fps), label);
}
// single file selected
else {
std::string label = BaseToolkit::transliterate( _selectedFiles.front() );
label = BaseToolkit::trunc_string(label, 35);
new_source_preview_.setSource( Mixer::manager().createSourceFile(_selectedFiles.front()), label);
}
std::string label = BaseToolkit::transliterate( BaseToolkit::common_pattern(_selectedFiles) );
label = BaseToolkit::trunc_string(label, 35);
new_source_preview_.setSource( Mixer::manager().createSourceMultifile(_selectedFiles, _fps), label);
}
}
// single file selected
else if (_selectedFiles.size() > 0) {
ImGui::Text("Single file selected");
if (update_new_source) {
std::string label = BaseToolkit::transliterate( _selectedFiles.front() );
label = BaseToolkit::trunc_string(label, 35);
new_source_preview_.setSource( Mixer::manager().createSourceFile(_selectedFiles.front()), label);
}
}
}
// Internal Source creator