#include "addclipcommand.h"
#include "kdenlivedoc.h"
-AddClipCommand::AddClipCommand(KdenliveDoc *doc, const QDomElement &xml, const uint id, bool doIt)
- : m_doc(doc), m_xml(xml), m_id(id), m_doIt(doIt) {
+AddClipCommand::AddClipCommand(KdenliveDoc *doc, const QDomElement &xml, const uint id, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_doc(doc), m_xml(xml), m_id(id), m_doIt(doIt) {
if (doIt) setText(i18n("Add clip"));
else setText(i18n("Delete clip"));
}
class AddClipCommand : public QUndoCommand {
public:
- AddClipCommand(KdenliveDoc *list, const QDomElement &xml, const uint id, bool doIt);
+ AddClipCommand(KdenliveDoc *list, const QDomElement &xml, const uint id, bool doIt, QUndoCommand * parent = 0);
virtual void undo();
virtual void redo();
***************************************************************************/
#include <KDebug>
#include <KFileDialog>
+#include <kio/netaccess.h>
#include "addclipcommand.h"
#include "kdenlivesettings.h"
return NULL;
}
+void ClipManager::slotAddClipList(const KUrl::List urls, const QString group, const int groupId) {
+ QUndoCommand *addClips = new QUndoCommand();
+ addClips->setText("Add clips");
+
+ foreach(const KUrl file, urls) {
+ if (KIO::NetAccess::exists(file, KIO::NetAccess::SourceSide, NULL)) {
+ QDomDocument doc;
+ QDomElement prod = doc.createElement("producer");
+ if (!group.isEmpty()) {
+ prod.setAttribute("groupname", group);
+ prod.setAttribute("groupid", groupId);
+ }
+ prod.setAttribute("resource", file.path());
+ uint id = m_clipIdCounter++;
+ prod.setAttribute("id", QString::number(id));
+ KMimeType::Ptr type = KMimeType::findByUrl(file);
+ if (type->name().startsWith("image/")) {
+ prod.setAttribute("type", (int) IMAGE);
+ prod.setAttribute("in", "0");
+ prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::image_duration()) - 1);
+ }
+ new AddClipCommand(m_doc, prod, id, true, addClips);
+ }
+ }
+ m_doc->commandStack()->push(addClips);
+}
+
void ClipManager::slotAddClipFile(const KUrl url, const QString group, const int groupId) {
kDebug() << "///// CLIP MANAGER, ADDING CLIP: " << url;
QDomDocument doc;
return m_clipIdCounter++;
}
+int ClipManager::lastClipId() const {
+ return m_clipIdCounter - 1;
+}
+
DocClipBase *getClipAt(int pos);
void deleteClip(uint clipId);
void slotAddClipFile(const KUrl url, const QString group, const int groupId);
+ void slotAddClipList(const KUrl::List urls, const QString group, const int groupId);
void slotAddTextClipFile(const QString path, const QString xml, const QString group, const int groupId);
void slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const int groupId);
void slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, const int softness, const QString group, const int groupId);
void checkAudioThumbs();
QList <DocClipBase*> documentClipList();
int getFreeClipId();
+ int lastClipId() const;
private: // Private attributes
/** the list of clips in the document */
tractor.insertAfter(transitions.at(0), QDomNode());
}
- QDomElement markers = m_document.createElement("markers");
+ // Fix filters format
+ QDomNodeList filters = m_document.elementsByTagName("filter");
+ max = filters.count();
+ for (int i = 0; i < max; i++) {
+ QDomElement filt = filters.at(i).toElement();
+ QDomNamedNodeMap attrs = filt.attributes();
+ for (int j = 0; j < attrs.count(); j++) {
+ QDomAttr a = attrs.item(j).toAttr();
+ if (!a.isNull()) {
+ kDebug() << " FILTER; adding :" << a.name() << ":" << a.value();
+ QDomElement e = m_document.createElement("property");
+ e.setAttribute("name", a.name());
+ QDomText value = m_document.createTextNode(a.value());
+ e.appendChild(value);
+ filt.appendChild(e);
+ }
+ }
+ }
+
- // change producer names
+ // move markers to a global list
+ QDomElement markers = m_document.createElement("markers");
QDomNodeList producers = m_document.elementsByTagName("producer");
max = producers.count();
for (int i = 0; i < max; i++) {
m_clipManager->deleteClip(clipId);
}
+void KdenliveDoc::slotAddClipList(const KUrl::List urls, const QString group, const int groupId) {
+ m_clipManager->slotAddClipList(urls, group, groupId);
+ emit selectLastAddedClip(m_clipManager->lastClipId());
+ setModified(true);
+}
+
+
void KdenliveDoc::slotAddClipFile(const KUrl url, const QString group, const int groupId) {
kDebug() << "///////// DOCUM, ADD CLP: " << url;
m_clipManager->slotAddClipFile(url, group, groupId);
+ emit selectLastAddedClip(m_clipManager->lastClipId());
setModified(true);
}
void addFolder(const QString foldername, int clipId, bool edit);
void deleteFolder(const QString foldername, int clipId);
void slotAddClipFile(const KUrl url, const QString group, const int groupId = -1);
+ void slotAddClipList(const KUrl::List urls, const QString group, const int groupId = -1);
void slotAddTextClipFile(const QString path, const QString xml, const QString group, const int groupId = -1);
void editTextClip(QString path, int id);
void slotAddFolder(const QString folderName);
/** emited when the document state has been modified (= needs saving or not) */
void docModified(bool);
void refreshClipThumbnail(int);
+ void selectLastAddedClip(const int);
};
#endif
disconnect(m_activeDocument, SIGNAL(signalDeleteProjectClip(int)), m_projectList, SLOT(slotDeleteClip(int)));
disconnect(m_activeDocument, SIGNAL(updateClipDisplay(int)), m_projectList, SLOT(slotUpdateClip(int)));
disconnect(m_activeDocument, SIGNAL(refreshClipThumbnail(int)), m_projectList, SLOT(slotRefreshClipThumbnail(int)));
+ disconnect(m_activeDocument, SIGNAL(selectLastAddedClip(const int)), m_projectList, SLOT(slotSelectClip(const int)));
disconnect(m_activeDocument, SIGNAL(deletTimelineClip(int)), m_activeTimeline, SLOT(slotDeleteClip(int)));
disconnect(m_activeTimeline, SIGNAL(clipItemSelected(ClipItem*)), effectStack, SLOT(slotClipItemSelected(ClipItem*)));
disconnect(m_activeTimeline, SIGNAL(clipItemSelected(ClipItem*)), this, SLOT(slotActivateEffectStackView()));
connect(doc, SIGNAL(signalDeleteProjectClip(int)), m_projectList, SLOT(slotDeleteClip(int)));
connect(doc, SIGNAL(updateClipDisplay(int)), m_projectList, SLOT(slotUpdateClip(int)));
connect(doc, SIGNAL(refreshClipThumbnail(int)), m_projectList, SLOT(slotRefreshClipThumbnail(int)));
+ connect(doc, SIGNAL(selectLastAddedClip(const int)), m_projectList, SLOT(slotSelectClip(const int)));
connect(doc, SIGNAL(deletTimelineClip(int)), trackView, SLOT(slotDeleteClip(int)));
connect(doc, SIGNAL(docModified(bool)), this, SLOT(slotUpdateDocumentState(bool)));
if (name.isEmpty()) name = KUrl(m_clip->getProperty("resource")).fileName();
m_clipType = (CLIPTYPE) m_clip->getProperty("type").toInt();
setText(1, name);
- kDebug() << "PROJECT ITE;. ADDING LCIP: " << m_clipId;
+ //kDebug() << "PROJECT ITE;. ADDING LCIP: " << m_clipId;
}
ProjectItem::ProjectItem(QTreeWidgetItem * parent, DocClipBase *clip)
if (name.isEmpty()) name = KUrl(m_clip->getProperty("resource")).fileName();
m_clipType = (CLIPTYPE) m_clip->getProperty("type").toInt();
setText(1, name);
- kDebug() << "PROJECT ITE;. ADDING LCIP: " << m_clipId;
+ //kDebug() << "PROJECT ITE;. ADDING LCIP: " << m_clipId;
}
#include <KLocale>
#include <KFileDialog>
#include <KInputDialog>
-#include <kio/netaccess.h>
#include <KMessageBox>
#include <nepomuk/global.h>
groupId = item->clipId();
}
}
- foreach(const KUrl file, list) {
- if (KIO::NetAccess::exists(file, KIO::NetAccess::SourceSide, NULL))
- m_doc->slotAddClipFile(file, group, groupId);
- }
+ m_doc->slotAddClipList(list, group, groupId);
}
void ProjectList::slotRemoveInvalidClip(int id) {
if (item) {
item->setProperties(properties, metadata);
item->referencedClip()->setProducer(producer);
- listView->setCurrentItem(item);
emit receivedClipDuration(clipId, item->clipMaxDuration());
} else kDebug() << "//////// COULD NOT FIND CLIP TO UPDATE PRPS...";
}
return NULL;
}
+void ProjectList::slotSelectClip(const int ix) {
+ ProjectItem *p = getItemById(ix);
+ if (p) {
+ listView->setCurrentItem(p);
+ listView->scrollToItem(p);
+ }
+}
+
#include "projectlist.moc"
void slotRefreshClipThumbnail(int clipId);
void slotRefreshClipThumbnail(ProjectItem *item);
void slotRemoveInvalidClip(int id);
+ void slotSelectClip(const int ix);
private:
ProjectListView *listView;