+ QList < CommentedTime > markers = base->commentedSnapMarkers();
+ if (!markers.isEmpty()) {
+ // Set up categories
+ QComboBox *cbox = new QComboBox;
+ cbox->insertItem(0, i18n("All categories"));
+ for (int i = 0; i < 5; ++i) {
+ cbox->insertItem(i + 1, i18n("Category %1", i));
+ cbox->setItemData(i + 1, CommentedTime::markerColor(i), Qt::DecorationRole);
+ }
+ cbox->setCurrentIndex(0);
+ KFileDialog fd(KUrl("kfiledialog:///projectfolder"), "text/plain", this, cbox);
+ fd.setMode(KFile::File);
+ fd.setOperationMode(KFileDialog::Saving);
+ fd.exec();
+ QString url = fd.selectedFile();
+ //QString url = KFileDialog::getSaveFileName(KUrl("kfiledialog:///projectfolder"), "text/plain", this, i18n("Save markers"));
+ if (url.isEmpty()) return;
+
+ QString data;
+ int category = cbox->currentIndex() - 1;
+ for (int i = 0; i < markers.count(); i++) {
+ if (category >= 0) {
+ // Save only the markers in selected category
+ if (markers.at(i).markerType() != category) continue;
+ }
+ data.append(QString::number(markers.at(i).time().seconds()));
+ data.append("\t");
+ data.append(QString::number(markers.at(i).time().seconds()));
+ data.append("\t");
+ data.append(markers.at(i).comment());
+ data.append("\n");
+ }
+ delete cbox;
+
+ QFile file(url);
+ if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
+ emit displayMessage(i18n("Cannot open file %1", url), ErrorMessage);
+ return;
+ }
+ file.write(data.toUtf8());
+ file.close();
+ }
+}
+
+void CustomTrackView::slotLoadClipMarkers(const QString &id)
+{
+ QComboBox *cbox = new QComboBox;
+ for (int i = 0; i < 5; ++i) {
+ cbox->insertItem(i, i18n("Category %1", i));
+ cbox->setItemData(i, CommentedTime::markerColor(i), Qt::DecorationRole);
+ }
+ cbox->setCurrentIndex(KdenliveSettings::default_marker_type());
+ KFileDialog fd(KUrl("kfiledialog:///projectfolder"), "text/plain", this, cbox);
+ fd.setMode(KFile::File);
+ fd.setOperationMode(KFileDialog::Opening);
+ fd.exec();
+ QString url = fd.selectedFile();
+
+ //KUrl url = KFileDialog::getOpenUrl(KUrl("kfiledialog:///projectfolder"), "text/plain", this, i18n("Load marker file"));
+ if (url.isEmpty()) return;
+ int category = cbox->currentIndex();
+ delete cbox;
+ QFile file(url);
+ if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ emit displayMessage(i18n("Cannot open file %1", KUrl(url).fileName()), ErrorMessage);
+ return;
+ }
+ QString data = QString::fromUtf8(file.readAll());
+ file.close();
+ QStringList lines = data.split("\n", QString::SkipEmptyParts);
+ QStringList values;
+ bool ok;
+ QUndoCommand *command = new QUndoCommand();
+ command->setText("Load markers");
+ QString markerText;
+ foreach(QString line, lines) {
+ markerText.clear();
+ values = line.split("\t", QString::SkipEmptyParts);
+ double time1 = values.at(0).toDouble(&ok);
+ double time2 = -1;
+ if (!ok) continue;
+ if (values.count() >1) {
+ time2 = values.at(1).toDouble(&ok);
+ if (values.count() == 2) {
+ // Check if second value is a number or text
+ if (!ok) {
+ time2 = -1;
+ markerText = values.at(1);
+ }
+ else markerText = i18n("Marker");
+ }
+ else {
+ // We assume 3 values per line: in out name
+ if (!ok) {
+ // 2nd value is not a number, drop
+ }
+ else {
+ markerText = values.at(2);
+ }
+ }
+ }
+ if (!markerText.isEmpty()) {
+ // Marker found, add it
+ //TODO: allow user to set a marker category
+ CommentedTime marker1(GenTime(time1), markerText, category);
+ slotAddClipMarker(id, marker1, command);
+ if (time2 > 0 && time2 != time1) {
+ CommentedTime marker2(GenTime(time2), markerText, category);
+ slotAddClipMarker(id, marker2, command);
+ }
+ }
+ }
+ if (command->childCount() > 0) m_commandStack->push(command);
+ else delete command;
+}
+
+void CustomTrackView::addMarker(const QString &id, const CommentedTime marker)
+{
+ DocClipBase *base = m_document->clipManager()->getClipById(id);
+ if (marker.markerType() < 0) base->deleteSnapMarker(marker.time());
+ else base->addSnapMarker(marker);