m_clipType = (CLIPTYPE) type;
if (m_placeHolder) xml.removeAttribute("placeholder");
QDomNamedNodeMap attributes = xml.attributes();
- for (int i = 0; i < attributes.count(); i++) {
+ for (int i = 0; i < attributes.count(); ++i) {
QString name = attributes.item(i).nodeName();
if (name.startsWith("meta.attr.")) {
- m_metadata.insert(name.section('.', 2), attributes.item(i).nodeValue());
+ m_metadata.insert(name.section('.', 2), QStringList() << attributes.item(i).nodeValue());
} else m_properties.insert(name, attributes.item(i).nodeValue());
}
QDomNodeList metas = xml.elementsByTagName("metaproperty");
- for (int i = 0; i < metas.count(); i++) {
+ for (int i = 0; i < metas.count(); ++i) {
QDomElement e = metas.item(i).toElement();
if (!e.isNull()) {
- m_metadata.insert(e.attribute("name").section('.', 2), e.firstChild().nodeValue());
+ m_metadata.insert(e.attribute("name").section('.', 2), QStringList() << e.firstChild().nodeValue() << e.attribute("tool"));
}
}
-
if (xml.hasAttribute("cutzones")) {
QStringList cuts = xml.attribute("cutzones").split(';', QString::SkipEmptyParts);
- for (int i = 0; i < cuts.count(); i++) {
+ for (int i = 0; i < cuts.count(); ++i) {
QString z = cuts.at(i);
addCutZone(z.section('-', 0, 0).toInt(), z.section('-', 1, 1).toInt(), z.section('-', 2, 2));
}
if (xml.hasAttribute("analysisdata")) {
QStringList adata = xml.attribute("analysisdata").split('#', QString::SkipEmptyParts);
- for (int i = 0; i < adata.count(); i++)
+ for (int i = 0; i < adata.count(); ++i)
m_analysisdata.insert(adata.at(i).section('?', 0, 0), adata.at(i).section('?', 1, 1));
}
return m_properties.value(prop);
}
-void DocClipBase::setDuration(GenTime dur)
+void DocClipBase::setDuration(const GenTime &dur)
{
m_duration = dur;
m_properties.insert("duration", QString::number((int) dur.frames(KdenliveSettings::project_fps())));
if (!i.value().isEmpty()) clip.setAttribute(i.key(), i.value());
}
- QMapIterator<QString, QString> j(m_metadata);
+ QMapIterator<QString, QStringList> j(m_metadata);
// Metadata name can have special chars so we cannot pass it as simple attribute
while (j.hasNext()) {
j.next();
if (!j.value().isEmpty()) {
QDomElement property = doc.createElement("metaproperty");
property.setAttribute("name", "meta.attr." + j.key());
- QDomText value = doc.createTextNode(j.value());
+ QStringList values = j.value();
+ QDomText value = doc.createTextNode(values.at(0));
+ if (values.count() > 1) property.setAttribute("tool", values.at(1));
property.appendChild(value);
clip.appendChild(property);
}
doc.appendChild(clip);
if (!m_cutZones.isEmpty()) {
QStringList cuts;
- for (int i = 0; i < m_cutZones.size(); i++) {
+ for (int i = 0; i < m_cutZones.size(); ++i) {
CutZoneInfo info = m_cutZones.at(i);
cuts << QString::number(info.zone.x()) + "-" + QString::number(info.zone.y()) + "-" + info.description;
}
return doc.documentElement();
}
+const QString DocClipBase::shortInfo() const
+{
+
+ QString info;
+ if (m_clipType == AV || m_clipType == VIDEO || m_clipType == IMAGE || m_clipType == PLAYLIST) {
+ info = m_properties.value("frame_size") + " ";
+ if (m_properties.contains("fps")) {
+ info.append(i18n("%1 fps", m_properties.value("fps").left(5)));
+ }
+ if (!info.simplified().isEmpty()) info.prepend(" - ");
+ }
+ else if (m_clipType == AUDIO) {
+ info = " - " + m_properties.value("frequency") + i18n("Hz");
+ }
+ QString tip = "<b>";
+ switch (m_clipType) {
+ case AUDIO:
+ tip.append(i18n("Audio clip") + "</b>" + info + "<br />" + fileURL().path());
+ break;
+ case VIDEO:
+ tip.append(i18n("Mute video clip") + "</b>" + info + "<br />" + fileURL().path());
+ break;
+ case AV:
+ tip.append(i18n("Video clip") + "</b>" + info + "<br />" + fileURL().path());
+ break;
+ case COLOR:
+ tip.append(i18n("Color clip"));
+ break;
+ case IMAGE:
+ tip.append(i18n("Image clip") + "</b>" + info + "<br />" + fileURL().path());
+ break;
+ case TEXT:
+ if (!fileURL().isEmpty() && getProperty("xmldata").isEmpty()) tip.append(i18n("Template text clip") + "</b><br />" + fileURL().path());
+ else tip.append(i18n("Text clip") + "</b><br />" + fileURL().path());
+ break;
+ case SLIDESHOW:
+ tip.append(i18n("Slideshow clip") + "</b><br />" + fileURL().directory());
+ break;
+ case VIRTUAL:
+ tip.append(i18n("Virtual clip"));
+ break;
+ case PLAYLIST:
+ tip.append(i18n("Playlist clip") + "</b>" + info + "<br />" + fileURL().path());
+ break;
+ default:
+ tip.append(i18n("Unknown clip"));
+ break;
+ }
+ return tip;
+}
+
void DocClipBase::setAudioThumbCreated(bool isDone)
{
}
-void DocClipBase::addSnapMarker(const CommentedTime marker)
+void DocClipBase::addSnapMarker(const CommentedTime &marker)
{
QList < CommentedTime >::Iterator it = m_snapMarkers.begin();
for (it = m_snapMarkers.begin(); it != m_snapMarkers.end(); ++it) {
}
}
-void DocClipBase::editSnapMarker(const GenTime & time, QString comment)
+void DocClipBase::editSnapMarker(const GenTime & time, const QString &comment)
{
QList < CommentedTime >::Iterator it;
for (it = m_snapMarkers.begin(); it != m_snapMarkers.end(); ++it) {
if (numReferences() > 0 && (!m_baseTrackProducers.isEmpty() || !m_videoTrackProducers.isEmpty() || !m_audioTrackProducers.isEmpty())) {
// Clip is used in timeline, delay producers deletion
- for (int i = 0; i < m_baseTrackProducers.count(); i++) {
+ for (int i = 0; i < m_baseTrackProducers.count(); ++i) {
m_toDeleteProducers.append(m_baseTrackProducers.at(i));
}
- for (int i = 0; i < m_videoTrackProducers.count(); i++) {
+ for (int i = 0; i < m_videoTrackProducers.count(); ++i) {
m_toDeleteProducers.append(m_videoTrackProducers.at(i));
}
- for (int i = 0; i < m_audioTrackProducers.count(); i++) {
+ for (int i = 0; i < m_audioTrackProducers.count(); ++i) {
m_toDeleteProducers.append(m_audioTrackProducers.at(i));
}
}
/*
int ct = 0;
kDebug()<<"----------------------------------------------------------------------------------";
- for (int i = 0; i < m_toDeleteProducers.count(); i++) {
+ for (int i = 0; i < m_toDeleteProducers.count(); ++i) {
if (m_toDeleteProducers.at(i) != NULL) {
Mlt::Properties props(m_toDeleteProducers.at(i)->get_properties());
if (props.ref_count() > 2) {
}
if (m_audioTrackProducers.at(track) == NULL) {
int i;
- for (i = 0; i < m_audioTrackProducers.count(); i++)
+ for (i = 0; i < m_audioTrackProducers.count(); ++i)
if (m_audioTrackProducers.at(i) != NULL) break;
Mlt::Producer *base;
if (i >= m_audioTrackProducers.count()) {
}
if (m_videoTrackProducers.at(track) == NULL) {
int i;
- for (i = 0; i < m_videoTrackProducers.count(); i++)
+ for (i = 0; i < m_videoTrackProducers.count(); ++i)
if (m_videoTrackProducers.at(i) != NULL) break;
Mlt::Producer *base;
if (i >= m_videoTrackProducers.count()) {
if (!prod) {
if (!source) {
QMutexLocker locker(&m_producerMutex);
- for (int i = 0; i < m_baseTrackProducers.count(); i++) {
+ for (int i = 0; i < m_baseTrackProducers.count(); ++i) {
if (m_baseTrackProducers.at(i) != NULL) {
source = m_baseTrackProducers.at(i);
break;
if (m_baseTrackProducers.count() == 0) {
return NULL;
}
- for (int i = 0; i < m_baseTrackProducers.count(); i++) {
+ for (int i = 0; i < m_baseTrackProducers.count(); ++i) {
if (m_baseTrackProducers.at(i) != NULL) {
return m_baseTrackProducers.at(i);
}
}
if (m_baseTrackProducers.at(track) == NULL) {
int i;
- for (i = 0; i < m_baseTrackProducers.count(); i++)
+ for (i = 0; i < m_baseTrackProducers.count(); ++i)
if (m_baseTrackProducers.at(i) != NULL) break;
if (i >= m_baseTrackProducers.count()) {
void DocClipBase::setProducerProperty(const char *name, int data)
{
QMutexLocker locker(&m_producerMutex);
- for (int i = 0; i < m_baseTrackProducers.count(); i++) {
+ for (int i = 0; i < m_baseTrackProducers.count(); ++i) {
if (m_baseTrackProducers.at(i) != NULL)
m_baseTrackProducers[i]->set(name, data);
}
void DocClipBase::setProducerProperty(const char *name, double data)
{
QMutexLocker locker(&m_producerMutex);
- for (int i = 0; i < m_baseTrackProducers.count(); i++) {
+ for (int i = 0; i < m_baseTrackProducers.count(); ++i) {
if (m_baseTrackProducers.at(i) != NULL)
m_baseTrackProducers[i]->set(name, data);
}
void DocClipBase::setProducerProperty(const char *name, const char *data)
{
QMutexLocker locker(&m_producerMutex);
- for (int i = 0; i < m_baseTrackProducers.count(); i++) {
+ for (int i = 0; i < m_baseTrackProducers.count(); ++i) {
if (m_baseTrackProducers.at(i) != NULL)
m_baseTrackProducers[i]->set(name, data);
}
void DocClipBase::resetProducerProperty(const char *name)
{
QMutexLocker locker(&m_producerMutex);
- for (int i = 0; i < m_baseTrackProducers.count(); i++) {
+ for (int i = 0; i < m_baseTrackProducers.count(); ++i) {
if (m_baseTrackProducers.at(i) != NULL)
m_baseTrackProducers[i]->set(name, (const char*) NULL);
}
const char *DocClipBase::producerProperty(const char *name) const
{
- for (int i = 0; i < m_baseTrackProducers.count(); i++) {
+ for (int i = 0; i < m_baseTrackProducers.count(); ++i) {
if (m_baseTrackProducers.at(i) != NULL) {
return m_baseTrackProducers.at(i)->get(name);
}
if (refreshProducer) slotRefreshProducer();
}
-void DocClipBase::setMetadata(QMap <QString, QString> properties)
+void DocClipBase::setMetadata(QMap <QString, QString> properties, QString tool)
{
QMapIterator<QString, QString> i(properties);
while (i.hasNext()) {
if (i.value().isEmpty() && m_metadata.contains(i.key())) {
m_metadata.remove(i.key());
} else {
- m_metadata.insert(i.key(), i.value());
+ m_metadata.insert(i.key(), QStringList() << i.value() << tool);
}
}
}
-QMap <QString, QString> DocClipBase::metadata() const
+QMap <QString, QStringList> DocClipBase::metadata() const
{
return m_metadata;
}
CutZoneInfo info;
info.zone = QPoint(in, out);
info.description = desc;
- for (int i = 0; i < m_cutZones.count(); i++)
+ for (int i = 0; i < m_cutZones.count(); ++i)
if (m_cutZones.at(i).zone == info.zone) {
return;
}
bool DocClipBase::hasCutZone(QPoint p) const
{
- for (int i = 0; i < m_cutZones.count(); i++)
+ for (int i = 0; i < m_cutZones.count(); ++i)
if (m_cutZones.at(i).zone == p) return true;
return false;
}
void DocClipBase::removeCutZone(int in, int out)
{
QPoint p(in, out);
- for (int i = 0; i < m_cutZones.count(); i++) {
+ for (int i = 0; i < m_cutZones.count(); ++i) {
if (m_cutZones.at(i).zone == p) {
m_cutZones.removeAt(i);
- i--;
+ --i;
}
}
}
{
Mlt::Producer *prod = NULL;
if (m_baseTrackProducers.count() == 0) return false;
- for (int i = 0; i < m_baseTrackProducers.count(); i++) {
+ for (int i = 0; i < m_baseTrackProducers.count(); ++i) {
if (m_baseTrackProducers.at(i) != NULL) {
prod = m_baseTrackProducers.at(i);
break;
{
Mlt::Producer *prod = NULL;
if (m_baseTrackProducers.count() == 0) return false;
- for (int i = 0; i < m_baseTrackProducers.count(); i++) {
+ for (int i = 0; i < m_baseTrackProducers.count(); ++i) {
if (m_baseTrackProducers.at(i) != NULL) {
prod = m_baseTrackProducers.at(i);
break;
int i = 1;
QString newname = name + " " + QString::number(i);
while (m_analysisdata.contains(newname)) {
- i++;
+ ++i;
newname = name + " " + QString::number(i);
}
m_analysisdata.insert(newname, geometryWithOffset(data, offset));
return m_analysisdata;
}
+
+#include "docclipbase.moc"