}
QStringList missingLumas;
+ QString root = m_doc.documentElement().attribute("root");
+ if (!root.isEmpty()) root = KUrl(root).path(KUrl::AddTrailingSlash);
QDomNodeList trans = m_doc.elementsByTagName("transition");
for (int i = 0; i < trans.count(); i++) {
QString luma = getProperty(trans.at(i).toElement(), "luma");
- if (!luma.isEmpty() && !QFile::exists(luma)) {
- if (!missingLumas.contains(luma)) {
+ if (!luma.isEmpty()) {
+ if (!luma.startsWith('/')) luma.prepend(root);
+ if (!QFile::exists(luma) && !missingLumas.contains(luma)) {
missingLumas.append(luma);
- }
- }
+ }
+ }
}
- if (missingClips.isEmpty() && missingLumas.isEmpty()) {
+ if (missingClips.isEmpty() && missingLumas.isEmpty())
return false;
- }
+
m_dialog = new QDialog();
m_dialog->setFont(KGlobalSettings::toolBarFont());
m_ui.setupUi(m_dialog);
- foreach (const QString l, missingLumas) {
- QTreeWidgetItem *item = new QTreeWidgetItem(m_ui.treeWidget, QStringList() << i18n("Luma file") << l);
+ foreach(const QString l, missingLumas) {
+ QTreeWidgetItem *item = new QTreeWidgetItem(m_ui.treeWidget, QStringList() << i18n("Luma file") << l);
item->setIcon(0, KIcon("dialog-close"));
item->setData(0, idRole, l);
item->setData(0, statusRole, LUMAMISSING);
item->setToolTip(1, e.attribute("name"));
QString ft = e.attribute("resource");
QString newft = QFontInfo(QFont(ft)).family();
- item->setText(1, i18n("%1, will be replaced by %2", ft, newft));
+ item->setText(1, i18n("%1 will be replaced by %2", ft, newft));
item->setData(0, statusRole, CLIPPLACEHOLDER);
} else {
item->setIcon(0, KIcon("dialog-close"));
}
for (int i = 0; i < producers.count(); i++) {
e = producers.item(i).toElement();
- if (e.attribute("id").section('_', 0, 0) == id) {
+ if (e.attribute("id").section('_', 0, 0) == id || e.attribute("id").section(':', 1, 1) == id) {
// Fix clip
properties = e.childNodes();
for (int j = 0; j < properties.count(); ++j) {
property = properties.item(j).toElement();
if (property.attribute("name") == "resource") {
- property.firstChild().setNodeValue(child->text(1));
+ QString resource = property.firstChild().nodeValue();
+ if (resource.contains(QRegExp("\\?[0-9]+\\.[0-9]+(&strobe=[0-9]+)?$")))
+ property.firstChild().setNodeValue(child->text(1) + '?' + resource.section('?', -1));
+ else
+ property.firstChild().setNodeValue(child->text(1));
break;
}
}
void DocumentChecker::slotDeleteSelected()
{
- if (KMessageBox::warningContinueCancel(m_dialog, i18np("This will remove the selected clip from this project", "This will remove the selected clips from this project", m_ui.treeWidget->selectedItems().count()), i18n("Remove clips")) == KMessageBox::Cancel) return;
- int ix = 0;
+ if (KMessageBox::warningContinueCancel(m_dialog, i18np("This will remove the selected clip from this project", "This will remove the selected clips from this project", m_ui.treeWidget->selectedItems().count()), i18n("Remove clips")) == KMessageBox::Cancel)
+ return;
QStringList deletedIds;
- QTreeWidgetItem *child = m_ui.treeWidget->topLevelItem(ix);
QDomNodeList playlists = m_doc.elementsByTagName("playlist");
- while (child) {
- int id = child->data(0, statusRole).toInt();
- if (child->isSelected() && id < 10) {
- QString id = child->data(0, idRole).toString();
- deletedIds.append(id);
- for (int j = 0; j < playlists.count(); j++)
- deletedIds.append(id + '_' + QString::number(j));
+ foreach(QTreeWidgetItem *child, m_ui.treeWidget->selectedItems()) {
+ if (child->data(0, statusRole).toInt() < 10) {
+ deletedIds.append(child->data(0, idRole).toString());
delete child;
- } else ix++;
- child = m_ui.treeWidget->topLevelItem(ix);
+ }
}
kDebug() << "// Clips to delete: " << deletedIds;
QDomElement mlt = m_doc.firstChildElement("mlt");
QDomElement kdenlivedoc = mlt.firstChildElement("kdenlivedoc");
- for (int i = 0; i < infoproducers.count(); i++) {
+ for (int i = 0, j = 0; i < infoproducers.count() && j < deletedIds.count(); i++) {
e = infoproducers.item(i).toElement();
if (deletedIds.contains(e.attribute("id"))) {
// Remove clip
kdenlivedoc.removeChild(e);
- break;
+ i--;
+ j++;
}
}
for (int i = 0; i < producers.count(); i++) {
e = producers.item(i).toElement();
- if (deletedIds.contains(e.attribute("id"))) {
+ if (deletedIds.contains(e.attribute("id").section('_', 0, 0)) || deletedIds.contains(e.attribute("id").section(':', 1, 1).section('_', 0, 0))) {
// Remove clip
mlt.removeChild(e);
- break;
+ i--;
}
}
for (int i = 0; i < playlists.count(); i++) {
QDomNodeList entries = playlists.at(i).toElement().elementsByTagName("entry");
- for (int j = 0; j < playlists.count(); j++) {
+ for (int j = 0; j < entries.count(); j++) {
e = entries.item(j).toElement();
- if (deletedIds.contains(e.attribute("producer"))) {
+ if (deletedIds.contains(e.attribute("producer").section('_', 0, 0)) || deletedIds.contains(e.attribute("producer").section(':', 1, 1).section('_', 0, 0))) {
// Replace clip with blank
+ while (e.childNodes().count() > 0)
+ e.removeChild(e.firstChild());
e.setTagName("blank");
e.removeAttribute("producer");
int length = e.attribute("out").toInt() - e.attribute("in").toInt();
e.setAttribute("length", length);
+ j--;
}
}
}