void BinController::saveDocumentProperties(const QMap <QString, QString> props, const QMap <double, QString> guidesData) { // Clear previous properites Mlt::Properties playlistProps(m_binPlaylist->get_properties()); Mlt::Properties docProperties; docProperties.pass_values(playlistProps, "kdenlive:docproperties."); for (int i = 0; i < docProperties.count(); i++) { QString propName = QStringLiteral("kdenlive:docproperties.") + docProperties.get_name(i); playlistProps.set(propName.toUtf8().constData(), (char *)NULL); } // Clear previous guides Mlt::Properties guideProperties; guideProperties.pass_values(playlistProps, "kdenlive:guide."); for (int i = 0; i < guideProperties.count(); i++) { QString propName = QStringLiteral("kdenlive:guide.") + guideProperties.get_name(i); playlistProps.set(propName.toUtf8().constData(), (char *)NULL); } QMapIterator<QString, QString> i(props); while (i.hasNext()) { i.next(); playlistProps.set(("kdenlive:docproperties." + i.key()).toUtf8().constData(), i.value().toUtf8().constData()); } // Append guides QMapIterator<double, QString> g(guidesData); QLocale locale; while (g.hasNext()) { g.next(); QString propertyName = "kdenlive:guide." + locale.toString(g.key()); playlistProps.set(propertyName.toUtf8().constData(), g.value().toUtf8().constData()); } }
QMap <QString, QString> ClipController::getPropertiesFromPrefix(const QString &prefix, bool withPrefix) { Mlt::Properties subProperties; subProperties.pass_values(*m_properties, prefix.toUtf8().constData()); QMap <QString,QString> subclipsData; for (int i = 0; i < subProperties.count(); i++) { subclipsData.insert(withPrefix ? QString(prefix + subProperties.get_name(i)) : subProperties.get_name(i), subProperties.get(i)); } return subclipsData; }
QMap<double,QString> BinController::takeGuidesData() { QLocale locale; // Load guides Mlt::Properties guidesProperties; Mlt::Properties playlistProps(m_binPlaylist->get_properties()); guidesProperties.pass_values(playlistProps, "kdenlive:guide."); qDebug()<<"***********\nFOUND GUIDES: "<<guidesProperties.count()<<"\n**********"; QMap <double,QString> guidesData; for (int i = 0; i < guidesProperties.count(); i++) { double time = locale.toDouble(guidesProperties.get_name(i)); guidesData.insert(time, guidesProperties.get(i)); // Clear bin data QString propertyName = "kdenlive:guide." + QString(guidesProperties.get_name(i)); m_binPlaylist->set(propertyName.toUtf8().constData(), (char *) NULL); } return guidesData; }
void BinController::initializeBin(Mlt::Playlist playlist) { // Load folders Mlt::Properties folderProperties; Mlt::Properties playlistProps(playlist.get_properties()); folderProperties.pass_values(playlistProps, "kdenlive:folder."); QMap <QString,QString> foldersData; for (int i = 0; i < folderProperties.count(); i++) { foldersData.insert(folderProperties.get_name(i), folderProperties.get(i)); } emit loadFolders(foldersData); // Read notes QString notes = playlistProps.get("kdenlive:documentnotes"); emit setDocumentNotes(notes); // Fill Controller's list m_binPlaylist = new Mlt::Playlist(playlist); m_binPlaylist->set("id", kPlaylistTrackId); int max = m_binPlaylist->count(); for (int i = 0; i < max; i++) { Mlt::Producer *producer = m_binPlaylist->get_clip(i); if (producer->is_blank() || !producer->is_valid()) continue; QString id = producer->parent().get("id"); if (id.contains(QStringLiteral("_"))) { // This is a track producer QString mainId = id.section(QStringLiteral("_"), 0, 0); QString track = id.section(QStringLiteral("_"), 1, 1); if (m_clipList.contains(mainId)) { // The controller for this track producer already exists } else { // Create empty controller for this track ClipController *controller = new ClipController(this); m_clipList.insert(mainId, controller); } delete producer; } else { if (m_clipList.contains(id) && m_clipList.value(id)) { //Controller was already added by a track producer, add master now m_clipList.value(id)->addMasterProducer(producer->parent()); } else { // Controller has not been created yet ClipController *controller = new ClipController(this, producer->parent()); // fix MLT somehow adding root to color producer's resource (report upstream) if (strcmp(producer->parent().get("mlt_service"), "color") == 0) { QString color = producer->parent().get("resource"); if (color.contains(QStringLiteral("/"))) { color = color.section(QStringLiteral("/"), -1, -1); producer->parent().set("resource", color.toUtf8().constData()); } } m_clipList.insert(id, controller); } } emit loadingBin(i + 1); } // Load markers Mlt::Properties markerProperties; markerProperties.pass_values(playlistProps, "kdenlive:marker."); QMap <QString,QString> markersData; for (int i = 0; i < markerProperties.count(); i++) { QString markerId = markerProperties.get_name(i); QString controllerId = markerId.section(QStringLiteral(":"), 0, 0); ClipController *ctrl = m_clipList.value(controllerId); if (!ctrl) continue; ctrl->loadSnapMarker(markerId.section(QStringLiteral(":"), 1), markerProperties.get(i)); } }