void SourceFileModel::addFilesAndTracks(QList<SourceFilePtr> const &files) { for (auto const &file : files) { createAndAppendRow(invisibleRootItem(), file); *m_sourceFiles << file; if (file->m_additionalParts.isEmpty()) continue; auto itemToAddTo = item(rowCount() - 1, 0); auto row = 0; for (auto const &additionalPart : file->m_additionalParts) createAndAppendRow(itemToAddTo, additionalPart, row++); } m_tracksModel->addTracks(std::accumulate(files.begin(), files.end(), QList<TrackPtr>{}, [](QList<TrackPtr> &accu, SourceFilePtr const &file) { return accu << file->m_tracks; })); }
void SourceFileModel::addFilesAndTracks(QList<SourceFilePtr> const &files) { for (auto const &file : files) { createAndAppendRow(invisibleRootItem(), file); *m_sourceFiles << file; } m_tracksModel->addTracks(std::accumulate(files.begin(), files.end(), QList<TrackPtr>{}, [](QList<TrackPtr> &accu, SourceFilePtr const &file) { return accu << file->m_tracks; })); }
void SourceFileModel::setSourceFiles(QList<SourceFilePtr> &sourceFiles) { removeRows(0, rowCount()); m_sourceFileMap.clear(); m_sourceFiles = &sourceFiles; auto row = 0u; for (auto const &file : *m_sourceFiles) { createAndAppendRow(invisibleRootItem(), file); auto rowItem = item(row); auto position = 0; for (auto const &additionalPart : file->m_additionalParts) createAndAppendRow(rowItem, additionalPart, position++); for (auto const &appendedFile : file->m_appendedFiles) createAndAppendRow(rowItem, appendedFile); ++row; } }
void SourceFileModel::appendFilesAndTracks(QModelIndex const &fileToAppendToIdx, QList<SourceFilePtr> const &files) { auto actualIdx = Util::toTopLevelIdx(fileToAppendToIdx); if (files.isEmpty() || !actualIdx.isValid()) return; auto fileToAppendTo = fromIndex(actualIdx); auto itemToAppendTo = itemFromIndex(actualIdx); Q_ASSERT(fileToAppendTo && itemToAppendTo); for (auto const &file : files) { file->m_appended = true; file->m_appendedTo = fileToAppendTo.get(); createAndAppendRow(itemToAppendTo, file); fileToAppendTo->m_appendedFiles << file; } for (auto const &file : files) m_tracksModel->appendTracks(fileToAppendTo.get(), file->m_tracks); }
void SourceFileModel::addAdditionalParts(QModelIndex const &fileToAddToIdx, QStringList const &fileNames) { auto actualIdx = Util::toTopLevelIdx(fileToAddToIdx); if (fileNames.isEmpty() || !actualIdx.isValid()) return; auto fileToAddTo = fromIndex(actualIdx); auto itemToAddTo = itemFromIndex(actualIdx); Q_ASSERT(fileToAddTo && itemToAddTo); auto actualFileNames = QStringList{}; std::copy_if(fileNames.begin(), fileNames.end(), std::back_inserter(actualFileNames), [&fileToAddTo](QString const &fileName) -> bool { if (fileToAddTo->m_fileName == fileName) return false; for (auto additionalPart : fileToAddTo->m_additionalParts) if (additionalPart->m_fileName == fileName) return false; return true; }); if (actualFileNames.isEmpty()) return; mtx::sort::naturally(actualFileNames.begin(), actualFileNames.end()); for (auto &fileName : actualFileNames) { auto additionalPart = std::make_shared<SourceFile>(fileName); additionalPart->m_additionalPart = true; additionalPart->m_appendedTo = fileToAddTo.get(); createAndAppendRow(itemToAddTo, additionalPart, fileToAddTo->m_additionalParts.size()); fileToAddTo->m_additionalParts << additionalPart; } }