install( FILES kdenliveui.rc DESTINATION ${DATA_INSTALL_DIR}/kdenlive )
install (FILES kdenlivesettings.kcfg DESTINATION share/config.kcfg)
install (FILES kdenlive.desktop DESTINATION share/applications/kde)
-install (FILES application-x-kdenlive.svgz DESTINATION share/icons/oxygen/scalable/mimetypes)
+install (FILES application-x-kdenlive.svgz video-mlt-playlist.svgz DESTINATION share/icons/oxygen/scalable/mimetypes)
#include "addclipcommand.h"
#include "kdenlivedoc.h"
-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) {
+AddClipCommand::AddClipCommand(KdenliveDoc *doc, const QDomElement &xml, const QString &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"));
}
else m_doc->deleteClip(m_id);
}
-#include "addclipcommand.moc"
class AddClipCommand : public QUndoCommand {
public:
- AddClipCommand(KdenliveDoc *list, const QDomElement &xml, const uint id, bool doIt, QUndoCommand * parent = 0);
+ AddClipCommand(KdenliveDoc *list, const QDomElement &xml, const QString &id, bool doIt, QUndoCommand * parent = 0);
virtual void undo();
virtual void redo();
private:
KdenliveDoc *m_doc;
QDomElement m_xml;
- uint m_id;
+ QString m_id;
bool m_doIt;
};
else m_view->deleteEffect(m_track, m_pos, m_effect);
}
-#include "addeffectcommand.moc"
+
#include "addfoldercommand.h"
#include "kdenlivedoc.h"
-AddFolderCommand::AddFolderCommand(KdenliveDoc *doc, const QString folderName, int clipId, bool doIt)
+AddFolderCommand::AddFolderCommand(KdenliveDoc *doc, const QString folderName, const QString &clipId, bool doIt)
: m_doc(doc), m_name(folderName), m_id(clipId), m_doIt(doIt) {
if (doIt) setText(i18n("Add folder"));
else setText(i18n("Delete folder"));
else m_doc->deleteFolder(m_name, m_id);
}
-#include "addfoldercommand.moc"
+
class AddFolderCommand : public QUndoCommand {
public:
- AddFolderCommand(KdenliveDoc *doc, const QString folderName, int clipId, bool doIt);
+ AddFolderCommand(KdenliveDoc *doc, const QString folderName, const QString &clipId, bool doIt);
virtual void undo();
virtual void redo();
private:
KdenliveDoc *m_doc;
QString m_name;
- int m_id;
+ QString m_id;
bool m_doIt;
};
#include "addmarkercommand.h"
#include "customtrackview.h"
-AddMarkerCommand::AddMarkerCommand(CustomTrackView *view, const QString &oldcomment, const QString &comment, const int id, const GenTime &pos, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_oldcomment(oldcomment), m_comment(comment), m_id(id), m_pos(pos), m_doIt(doIt) {
+AddMarkerCommand::AddMarkerCommand(CustomTrackView *view, const QString &oldcomment, const QString &comment, const QString &id, const GenTime &pos, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_oldcomment(oldcomment), m_comment(comment), m_id(id), m_pos(pos), m_doIt(doIt) {
if (m_comment.isEmpty()) setText(i18n("Delete marker"));
else if (m_oldcomment.isEmpty()) setText(i18n("Add marker"));
else setText(i18n("Edit marker"));
m_doIt = true;
}
-#include "addmarkercommand.moc"
class AddMarkerCommand : public QUndoCommand {
public:
- AddMarkerCommand(CustomTrackView *view, const QString &oldcomment, const QString &comment, const int id, const GenTime &pos, bool doIt, QUndoCommand * parent = 0);
+ AddMarkerCommand(CustomTrackView *view, const QString &oldcomment, const QString &comment, const QString &id, const GenTime &pos, bool doIt, QUndoCommand * parent = 0);
virtual void undo();
virtual void redo();
CustomTrackView *m_view;
QString m_oldcomment;
QString m_comment;
- int m_id;
+ QString m_id;
GenTime m_pos;
bool m_doIt;
};
#include "addtimelineclipcommand.h"
#include "customtrackview.h"
-AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, ItemInfo info, EffectsList effects, bool doIt, bool doRemove, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_xml(xml), m_clipId(clipId), m_clipInfo(info), m_effects(effects), m_doIt(doIt), m_remove(doRemove) {
+AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, const QString &clipId, ItemInfo info, EffectsList effects, bool doIt, bool doRemove, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_xml(xml), m_clipId(clipId), m_clipInfo(info), m_effects(effects), m_doIt(doIt), m_remove(doRemove) {
if (!m_remove) setText(i18n("Add timeline clip"));
else setText(i18n("Delete timeline clip"));
}
m_doIt = true;
}
-#include "addtimelineclipcommand.moc"
+
class AddTimelineClipCommand : public QUndoCommand {
public:
- AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, ItemInfo info, EffectsList effects, bool doIt, bool doRemove, QUndoCommand * parent = 0);
+ AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, const QString &clipId, ItemInfo info, EffectsList effects, bool doIt, bool doRemove, QUndoCommand * parent = 0);
virtual void undo();
virtual void redo();
CustomTrackView *m_view;
ItemInfo m_clipInfo;
EffectsList m_effects;
- int m_clipId;
+ QString m_clipId;
QDomElement m_xml;
bool m_doIt;
bool m_remove;
m_doIt = true;
}
-#include "addtimelineclipcommand.moc"
+
#include "changespeedcommand.h"
#include "customtrackview.h"
-ChangeSpeedCommand::ChangeSpeedCommand(CustomTrackView *view, ItemInfo info, double old_speed, double new_speed, int clipId, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_clipInfo(info), m_old_speed(old_speed), m_new_speed(new_speed), m_clipId(clipId), m_doIt(doIt) {
+ChangeSpeedCommand::ChangeSpeedCommand(CustomTrackView *view, ItemInfo info, double old_speed, double new_speed, const QString &clipId, bool doIt, QUndoCommand * parent) : QUndoCommand(parent), m_view(view), m_clipInfo(info), m_old_speed(old_speed), m_new_speed(new_speed), m_clipId(clipId), m_doIt(doIt) {
setText(i18n("Adjust clip length"));
}
m_doIt = true;
}
-#include "changespeedcommand.moc"
+
class ChangeSpeedCommand : public QUndoCommand {
public:
- ChangeSpeedCommand(CustomTrackView *view, ItemInfo info, double old_speed, double new_speed, int clipId, bool doIt, QUndoCommand * parent = 0);
+ ChangeSpeedCommand(CustomTrackView *view, ItemInfo info, double old_speed, double new_speed, const QString &clipId, bool doIt, QUndoCommand * parent = 0);
virtual void undo();
virtual void redo();
private:
CustomTrackView *m_view;
ItemInfo m_clipInfo;
- int m_clipId;
+ QString m_clipId;
bool m_doIt;
double m_old_speed;
double m_new_speed;
connect(this , SIGNAL(prepareAudioThumb(double, int, int, int)) , this, SLOT(slotPrepareAudioThumb(double, int, int, int)));
setBrush(QColor(141, 166, 215));
- if (m_clipType == VIDEO || m_clipType == AV || m_clipType == SLIDESHOW) {
+ if (m_clipType == VIDEO || m_clipType == AV || m_clipType == SLIDESHOW || m_clipType == PLAYLIST) {
m_hasThumbs = true;
startThumbTimer = new QTimer(this);
startThumbTimer->setSingleShot(true);
return m_clipName;
}
-int ClipItem::clipProducer() const {
+const QString &ClipItem::clipProducer() const {
return m_producer;
}
void resizeStart(int posx);
void resizeEnd(int posx);
OPERATIONTYPE operationMode(QPointF pos);
- int clipProducer() const;
+ const QString &clipProducer() const;
int clipType() const;
DocClipBase *baseClip() const;
QString clipName() const;
DocClipBase *m_clip;
OPERATIONTYPE m_resizeMode;
int m_grabPoint;
- int m_producer;
+ QString m_producer;
CLIPTYPE m_clipType;
QString m_clipName;
QString m_effectNames;
void ClipManager::addClip(DocClipBase *clip) {
m_clipList.append(clip);
- int id = clip->getId();
- if (id >= m_clipIdCounter) m_clipIdCounter = id + 1;
+ QString id = clip->getId();
+ if (id.toInt() >= m_clipIdCounter) m_clipIdCounter = id.toInt() + 1;
}
-void ClipManager::slotDeleteClip(uint clipId) {
+void ClipManager::slotDeleteClip(const QString &clipId) {
for (int i = 0; i < m_clipList.count(); i++) {
if (m_clipList.at(i)->getId() == clipId) {
AddClipCommand *command = new AddClipCommand(m_doc, m_clipList.at(i)->toXML(), clipId, false);
}
}
-void ClipManager::deleteClip(uint clipId) {
+void ClipManager::deleteClip(const QString &clipId) {
for (int i = 0; i < m_clipList.count(); i++) {
if (m_clipList.at(i)->getId() == clipId) {
m_clipList.removeAt(i);
return m_clipList.at(pos);
}
-DocClipBase *ClipManager::getClipById(int clipId) {
+DocClipBase *ClipManager::getClipById(const QString &clipId) {
//kDebug() << "++++ CLIP MAN, LOOKING FOR CLIP ID: " << clipId;
for (int i = 0; i < m_clipList.count(); i++) {
if (m_clipList.at(i)->getId() == clipId) {
return NULL;
}
-void ClipManager::slotAddClipList(const KUrl::List urls, const QString group, const int groupId) {
+void ClipManager::slotAddClipList(const KUrl::List urls, const QString group, const QString &groupId) {
QUndoCommand *addClips = new QUndoCommand();
addClips->setText("Add clips");
prod.setAttribute("in", "0");
prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::image_duration()) - 1);
}
- new AddClipCommand(m_doc, prod, id, true, addClips);
+ new AddClipCommand(m_doc, prod, QString::number(id), true, addClips);
}
}
m_doc->commandStack()->push(addClips);
}
-void ClipManager::slotAddClipFile(const KUrl url, const QString group, const int groupId) {
+void ClipManager::slotAddClipFile(const KUrl url, const QString group, const QString &groupId) {
kDebug() << "///// CLIP MANAGER, ADDING CLIP: " << url;
QDomDocument doc;
QDomElement prod = doc.createElement("producer");
prod.setAttribute("in", "0");
prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::image_duration()) - 1);
}
- AddClipCommand *command = new AddClipCommand(m_doc, prod, id, true);
+ AddClipCommand *command = new AddClipCommand(m_doc, prod, QString::number(id), true);
m_doc->commandStack()->push(command);
}
-void ClipManager::slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const int groupId) {
+void ClipManager::slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const QString &groupId) {
QDomDocument doc;
QDomElement prod = doc.createElement("producer");
prod.setAttribute("mlt_service", "colour");
prod.setAttribute("groupname", group);
prod.setAttribute("groupid", groupId);
}
- AddClipCommand *command = new AddClipCommand(m_doc, prod, id, true);
+ AddClipCommand *command = new AddClipCommand(m_doc, prod, QString::number(id), true);
m_doc->commandStack()->push(command);
}
-void ClipManager::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, QString group, const int groupId) {
+void ClipManager::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, QString group, const QString &groupId) {
QDomDocument doc;
QDomElement prod = doc.createElement("producer");
prod.setAttribute("resource", path);
prod.setAttribute("groupname", group);
prod.setAttribute("groupid", groupId);
}
- AddClipCommand *command = new AddClipCommand(m_doc, prod, id, true);
+ AddClipCommand *command = new AddClipCommand(m_doc, prod, QString::number(id), true);
m_doc->commandStack()->push(command);
}
-void ClipManager::slotAddTextClipFile(const QString path, const QString xml, const QString group, const int groupId) {
+void ClipManager::slotAddTextClipFile(const QString path, const QString xml, const QString group, const QString &groupId) {
kDebug() << "///// CLIP MANAGER, ADDING CLIP: " << path;
QDomDocument doc;
QDomElement prod = doc.createElement("producer");
prod.setAttribute("transparency", "1");
prod.setAttribute("in", "0");
prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::image_duration()) - 1);
- AddClipCommand *command = new AddClipCommand(m_doc, prod, id, true);
+ AddClipCommand *command = new AddClipCommand(m_doc, prod, QString::number(id), true);
m_doc->commandStack()->push(command);
}
virtual ~ ClipManager();
void addClip(DocClipBase *clip);
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);
- DocClipBase *getClipById(int clipId);
- void slotDeleteClip(uint clipId);
+ void deleteClip(const QString &clipId);
+ void slotAddClipFile(const KUrl url, const QString group, const QString &groupId);
+ void slotAddClipList(const KUrl::List urls, const QString group, const QString &groupId);
+ void slotAddTextClipFile(const QString path, const QString xml, const QString group, const QString &groupId);
+ void slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const QString &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 QString &groupId);
+ DocClipBase *getClipById(const QString &clipId);
+ void slotDeleteClip(const QString & clipId);
void setThumbsProgress(const QString &message, int progress);
void checkAudioThumbs();
QList <DocClipBase*> documentClipList();
CommentedTime marker(GenTime(), i18n("Marker"));
MarkerDialog d(m_clip, marker, m_tc, this);
if (d.exec() == QDialog::Accepted) {
- int id = m_clip->getId();
- emit addMarker(id, d.newMarker().time(), d.newMarker().comment());
+ emit addMarker(m_clip->getId(), d.newMarker().time(), d.newMarker().comment());
}
QTimer::singleShot(500, this, SLOT(slotFillMarkersList()));
}
if (pos < 0 || pos > marks.count() - 1) return;
MarkerDialog d(m_clip, marks.at(pos), m_tc, this);
if (d.exec() == QDialog::Accepted) {
- int id = m_clip->getId();
- emit addMarker(id, d.newMarker().time(), d.newMarker().comment());
+ emit addMarker(m_clip->getId(), d.newMarker().time(), d.newMarker().comment());
}
QTimer::singleShot(500, this, SLOT(slotFillMarkersList()));
}
QList < CommentedTime > marks = m_clip->commentedSnapMarkers();
int pos = m_view.markers_list->currentIndex().row();
if (pos < 0 || pos > marks.count() - 1) return;
- int id = m_clip->getId();
- emit addMarker(id, marks.at(pos).time(), QString());
+ emit addMarker(m_clip->getId(), marks.at(pos).time(), QString());
QTimer::singleShot(500, this, SLOT(slotFillMarkersList()));
}
-int ClipProperties::clipId() const {
+const QString &ClipProperties::clipId() const {
return m_clip->getId();
}
public:
ClipProperties(DocClipBase *clip, Timecode tc, double fps, QWidget * parent = 0);
QMap <QString, QString> properties();
- int clipId() const;
+ const QString &clipId() const;
bool needsTimelineRefresh() const;
private slots:
bool m_clipNeedsRefresh;
signals:
- void addMarker(int, GenTime, QString);
+ void addMarker(const QString &, GenTime, QString);
};
//TODO: drop of several clips
for (int i = 0; i < ids.size(); ++i) {
}
- DocClipBase *clip = m_document->getBaseClip(ids.at(0).toInt());
- if (clip == NULL) kDebug() << " WARNING))))))))) CLIP NOT FOUND : " << ids.at(0).toInt();
+ DocClipBase *clip = m_document->getBaseClip(ids.at(0));
+ if (clip == NULL) kDebug() << " WARNING))))))))) CLIP NOT FOUND : " << ids.at(0);
addItem(clip, event->pos());
event->acceptProposedAction();
} else QGraphicsView::dragEnterEvent(event);
m_document->renderer()->mltChangeTrackState(tracknumber, m_scene->m_tracksList.at(tracknumber - 1).isMute, m_scene->m_tracksList.at(tracknumber - 1).isBlind);
}
-void CustomTrackView::deleteClip(int clipId) {
+void CustomTrackView::deleteClip(const QString &clipId) {
QList<QGraphicsItem *> itemList = items();
for (int i = 0; i < itemList.count(); i++) {
if (itemList.at(i)->type() == AVWIDGET) {
m_commandStack->push(changeSelected);
}
-void CustomTrackView::doChangeClipSpeed(ItemInfo info, double speed, int id) {
+void CustomTrackView::doChangeClipSpeed(ItemInfo info, double speed, const QString &id) {
DocClipBase *baseclip = m_document->clipManager()->getClipById(id);
ClipItem *item = getClipItemAt((int) info.startPos.frames(m_document->fps()) + 1, info.track);
info.track = m_scene->m_tracksList.count() - item->track();
}
}
-void CustomTrackView::addClip(QDomElement xml, int clipId, ItemInfo info, EffectsList effects) {
+void CustomTrackView::addClip(QDomElement xml, const QString &clipId, ItemInfo info, EffectsList effects) {
DocClipBase *baseclip = m_document->clipManager()->getClipById(clipId);
ClipItem *item = new ClipItem(baseclip, info, m_document->fps());
item->setEffectList(effects);
m_document->renderer()->doRefresh();
}
-void CustomTrackView::slotUpdateClip(int clipId) {
+void CustomTrackView::slotUpdateClip(const QString &clipId) {
QList<QGraphicsItem *> list = scene()->items();
ClipItem *clip = NULL;
for (int i = 0; i < list.size(); ++i) {
GenTime pos = GenTime(m_cursorPos, m_document->fps());
if (item->startPos() > pos || item->endPos() < pos) return;
ClipItem *clip = (ClipItem *) item;
- int id = clip->baseClip()->getId();
+ QString id = clip->baseClip()->getId();
GenTime position = pos - item->startPos() + item->cropStart();
CommentedTime marker(position, i18n("Marker"));
MarkerDialog d(clip->baseClip(), marker, m_document->timecode(), this);
}
}
-void CustomTrackView::slotAddClipMarker(int id, GenTime t, QString c) {
+void CustomTrackView::slotAddClipMarker(const QString &id, GenTime t, QString c) {
QString oldcomment = m_document->clipManager()->getClipById(id)->markerComment(t);
AddMarkerCommand *command = new AddMarkerCommand(this, oldcomment, c, id, t, true);
m_commandStack->push(command);
return;
}
ClipItem *clip = (ClipItem *) item;
- int id = clip->baseClip()->getId();
+ QString id = clip->baseClip()->getId();
GenTime position = pos - item->startPos() + item->cropStart();
QString comment = clip->baseClip()->markerComment(position);
if (comment.isEmpty()) {
emit displayMessage(i18n("Clip has no markers"), ErrorMessage);
return;
}
- int id = clip->baseClip()->getId();
+ QString id = clip->baseClip()->getId();
QUndoCommand *deleteMarkers = new QUndoCommand();
deleteMarkers->setText("Delete clip markers");
return;
}
ClipItem *clip = (ClipItem *) item;
- int id = clip->baseClip()->getId();
+ QString id = clip->baseClip()->getId();
GenTime position = pos - item->startPos() + item->cropStart();
QString oldcomment = clip->baseClip()->markerComment(position);
if (oldcomment.isEmpty()) {
}
}
-void CustomTrackView::addMarker(const int id, const GenTime &pos, const QString comment) {
+void CustomTrackView::addMarker(const QString &id, const GenTime &pos, const QString comment) {
DocClipBase *base = m_document->clipManager()->getClipById(id);
if (!comment.isEmpty()) base->addSnapMarker(pos, comment);
else base->deleteSnapMarker(pos);
/** move transition, startPos = (old start, old end), endPos = (new start, new end) */
void moveTransition(const ItemInfo start, const ItemInfo end);
void resizeClip(const ItemInfo start, const ItemInfo end);
- void addClip(QDomElement xml, int clipId, ItemInfo info, EffectsList list = EffectsList());
+ void addClip(QDomElement xml, const QString &clipId, ItemInfo info, EffectsList list = EffectsList());
void deleteClip(ItemInfo info);
void slotAddClipMarker();
void slotEditClipMarker();
void slotDeleteClipMarker();
void slotDeleteAllClipMarkers();
- void addMarker(const int id, const GenTime &pos, const QString comment);
+ void addMarker(const QString &id, const GenTime &pos, const QString comment);
void setScale(double scaleFactor);
- void deleteClip(int clipId);
+ void deleteClip(const QString &clipId);
void slotAddEffect(QDomElement effect, GenTime pos, int track);
void addEffect(int track, GenTime pos, QDomElement effect);
void deleteEffect(int track, GenTime pos, QDomElement effect);
void clipStart();
void clipEnd();
void changeClipSpeed();
- void doChangeClipSpeed(ItemInfo info, double speed, int id);
+ void doChangeClipSpeed(ItemInfo info, double speed, const QString &id);
public slots:
void setCursorPos(int pos, bool seek = true);
void slotTransitionUpdated(Transition *, QDomElement);
void slotSwitchTrackAudio(int ix);
void slotSwitchTrackVideo(int ix);
- void slotUpdateClip(int clipId);
- void slotAddClipMarker(int id, GenTime t, QString c);
+ void slotUpdateClip(const QString &clipId);
+ void slotAddClipMarker(const QString &id, GenTime t, QString c);
bool addGuide(const GenTime pos, const QString &comment);
void slotAddGuide();
void slotEditGuide(CommentedTime guide);
#include "kthumb.h"
#include "clipmanager.h"
-DocClipBase::DocClipBase(ClipManager *clipManager, QDomElement xml, uint id):
+DocClipBase::DocClipBase(ClipManager *clipManager, QDomElement xml, const QString &id):
m_id(id), m_description(QString()), m_refcount(0), m_audioThumbCreated(false), m_duration(GenTime()), m_thumbProd(NULL), m_audioTimer(NULL), m_clipProducer(NULL) {
int type = xml.attribute("type").toInt();
m_clipType = (CLIPTYPE) type;
m_name = xml.attribute("name");
- m_id = id;
QDomNamedNodeMap attributes = xml.attributes();
for (unsigned int i = 0; i < attributes.count(); i++) {
return m_name;
}
-uint DocClipBase::getId() const {
+const QString &DocClipBase::getId() const {
return m_id;
}
-void DocClipBase::setId(const uint &newId) {
+void DocClipBase::setId(const QString &newId) {
m_id = newId;
}
* done here. If a new clip type is added then it should be possible to combine it with both audio
* and video. */
- DocClipBase(ClipManager *clipManager, QDomElement xml, uint id);
+ DocClipBase(ClipManager *clipManager, QDomElement xml, const QString &id);
// DocClipBase & operator=(const DocClipBase & clip);
virtual ~ DocClipBase();
void setProperty(QString key, QString value);
/** Returns the internal unique id of the clip. */
- uint getId() const;
- void setId(const uint &newId);
+ const QString &getId() const;
+ void setId(const QString &newId);
//KThumb *thumbCreator;
bool audioThumbCreated() const;
bool m_audioThumbCreated;
/** a unique numeric id */
- uint m_id;
+ QString m_id;
void setAudioThumbCreated(bool isDone);
/** Holds clip infos like fps, size,... */
QMap <QString, QString> m_properties;
m_view->updateEffect(m_track, m_pos, m_effect, m_stackPos);
}
-#include "editeffectcommand.moc"
+
#include "editfoldercommand.h"
#include "kdenlivedoc.h"
-EditFolderCommand::EditFolderCommand(KdenliveDoc *doc, const QString newfolderName, const QString oldfolderName, int clipId, bool doIt)
+EditFolderCommand::EditFolderCommand(KdenliveDoc *doc, const QString newfolderName, const QString oldfolderName, const QString &clipId, bool doIt)
: m_doc(doc), m_name(newfolderName), m_oldname(oldfolderName), m_id(clipId), m_doIt(doIt) {
setText(i18n("Rename folder"));
}
m_doIt = true;
}
-#include "editfoldercommand.moc"
+
class EditFolderCommand : public QUndoCommand {
public:
- EditFolderCommand(KdenliveDoc *doc, const QString newfolderName, const QString oldfolderName, int clipId, bool doIt);
+ EditFolderCommand(KdenliveDoc *doc, const QString newfolderName, const QString oldfolderName, const QString &clipId, bool doIt);
virtual void undo();
virtual void redo();
KdenliveDoc *m_doc;
QString m_name;
QString m_oldname;
- int m_id;
+ QString m_id;
bool m_doIt;
};
m_doIt = true;
}
-#include "editguidecommand.moc"
m_doIt = true;
}
-#include "editkeyframecommand.moc"
m_view->updateTransition(m_track, m_pos, m_oldeffect, m_effect);
}
-#include "editeffectcommand.moc"
qApp->processEvents();
}
QString prodId = e.attribute("id");
- if (!e.isNull() && prodId != "black" && prodId.toInt() > 0) {
- addClip(e, e.attribute("id").toInt());
+ if (!e.isNull() && prodId != "black" && !prodId.startsWith("slowmotion")/*&& prodId.toInt() > 0*/) {
+ addClip(e, prodId);
}
}
for (int k = 0; k < maxchild; k++) {
e = markerslist.at(k).toElement();
if (e.tagName() == "marker") {
- int id = e.attribute("id").toInt();
- m_clipManager->getClipById(id)->addSnapMarker(GenTime(e.attribute("time").toDouble()), e.attribute("comment"));
+ m_clipManager->getClipById(e.attribute("id"))->addSnapMarker(GenTime(e.attribute("time").toDouble()), e.attribute("comment"));
}
}
- m_document.removeChild(markers);
+ westley.removeChild(markers);
}
m_document.removeChild(infoXmlNode);
pl.setAttribute("id", playlist_id);
}
track.setAttribute("producer", playlist_id);
- tractor.appendChild(track);
+ //tractor.appendChild(track);
+ tractor.insertAfter(track, QDomNode());
}
tractor.removeChild(multitrack);
}
// Fix filters format
- QDomNodeList filters = m_document.elementsByTagName("filter");
- max = filters.count();
+ QDomNodeList entries = m_document.elementsByTagName("entry");
+ max = entries.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();
+ QString last_id;
+ int effectix = 0;
+ QDomNode m = entries.at(i).firstChild();
+ while (!m.isNull()) {
+ if (m.toElement().tagName() == "filter") {
+ QDomElement filt = m.toElement();
+ QDomNamedNodeMap attrs = filt.attributes();
+ QString current_id = filt.attribute("kdenlive_id");
+ if (current_id != last_id) {
+ effectix++;
+ last_id = current_id;
+ }
QDomElement e = m_document.createElement("property");
- e.setAttribute("name", a.name());
- QDomText value = m_document.createTextNode(a.value());
+ e.setAttribute("name", "kdenlive_ix");
+ QDomText value = m_document.createTextNode(QString::number(effectix));
e.appendChild(value);
filt.appendChild(e);
+ 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);
+
+ }
+ }
}
+ m = m.nextSibling();
}
}
+ /*
+ QDomNodeList filters = m_document.elementsByTagName("filter");
+ max = filters.count();
+ QString last_id;
+ int effectix = 0;
+ for (int i = 0; i < max; i++) {
+ QDomElement filt = filters.at(i).toElement();
+ QDomNamedNodeMap attrs = filt.attributes();
+ QString current_id = filt.attribute("kdenlive_id");
+ if (current_id != last_id) {
+ effectix++;
+ last_id = current_id;
+ }
+ QDomElement e = m_document.createElement("property");
+ e.setAttribute("name", "kdenlive_ix");
+ QDomText value = m_document.createTextNode(QString::number(1));
+ e.appendChild(value);
+ filt.appendChild(e);
+ 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);
+ }
+ }
+ }*/
+
+ // fix slowmotion
+ QDomNodeList producers = westley.toElement().elementsByTagName("producer");
+ max = producers.count();
+ for (int i = 0; i < max; i++) {
+ QDomElement prod = producers.at(i).toElement();
+ if (prod.attribute("mlt_service") == "framebuffer") {
+ QString slowmotionprod = prod.attribute("resource");
+ slowmotionprod.replace(':', '?');
+ kDebug() << "// FOUND WRONG SLOWMO, new: " << slowmotionprod;
+ prod.setAttribute("resource", slowmotionprod);
+ }
+ }
- // move markers to a global list
+ // move producers to correct place, markers to a global list, fix clip descriptions
QDomElement markers = m_document.createElement("markers");
- QDomNodeList producers = m_document.elementsByTagName("producer");
+ producers = m_document.elementsByTagName("producer");
max = producers.count();
for (int i = 0; i < max; i++) {
QDomElement prod = producers.at(0).toElement();
markers.insertAfter(mark, QDomNode());
}
prod.removeChild(m);
+ } else if (m.isText()) {
+ QString comment = m.nodeValue();
+ if (!comment.isEmpty()) {
+ prod.setAttribute("description", comment);
+ }
+ prod.removeChild(m);
}
int duration = prod.attribute("duration").toInt();
if (duration > 0) prod.setAttribute("out", QString::number(duration));
return m_render;
}
-void KdenliveDoc::updateClip(int id) {
+void KdenliveDoc::updateClip(const QString &id) {
emit updateClipDisplay(id);
}
return m_timecode.getFrameCount(duration, m_fps);
}
-QString KdenliveDoc::producerName(int id) {
+QString KdenliveDoc::producerName(const QString &id) {
QString result = "unnamed";
QDomNodeList prods = producersList();
int ct = prods.count();
for (int i = 0; i < ct ; i++) {
QDomElement e = prods.item(i).toElement();
- if (e.attribute("id") != "black" && e.attribute("id").toInt() == id) {
+ if (e.attribute("id") != "black" && e.attribute("id") == id) {
result = e.attribute("name");
if (result.isEmpty()) result = KUrl(e.attribute("resource")).fileName();
break;
return result;
}
-void KdenliveDoc::setProducerDuration(int id, int duration) {
+void KdenliveDoc::setProducerDuration(const QString &id, int duration) {
QDomNodeList prods = producersList();
int ct = prods.count();
for (int i = 0; i < ct ; i++) {
QDomElement e = prods.item(i).toElement();
- if (e.attribute("id") != "black" && e.attribute("id").toInt() == id) {
+ if (e.attribute("id") != "black" && e.attribute("id") == id) {
e.setAttribute("duration", QString::number(duration));
break;
}
}
}
-int KdenliveDoc::getProducerDuration(int id) {
+int KdenliveDoc::getProducerDuration(const QString &id) {
int result = 0;
QDomNodeList prods = producersList();
int ct = prods.count();
for (int i = 0; i < ct ; i++) {
QDomElement e = prods.item(i).toElement();
- if (e.attribute("id") != "black" && e.attribute("id").toInt() == id) {
+ if (e.attribute("id") != "black" && e.attribute("id") == id) {
result = e.attribute("duration").toInt();
break;
}
return m_url.fileName() + " / " + m_profile.description;
}
-void KdenliveDoc::addClip(const QDomElement &elem, const int clipId) {
+void KdenliveDoc::addClip(const QDomElement &elem, const QString &clipId) {
DocClipBase *clip = new DocClipBase(m_clipManager, elem, clipId);
kDebug() << "///////// DOCUM, CREATING NEW CLIP, ID:" << clipId << ", PAR ID:" << elem.attribute("groupid");
m_clipManager->addClip(clip);
emit addProjectClip(clip);
}
-void KdenliveDoc::addFolder(const QString foldername, int clipId, bool edit) {
+void KdenliveDoc::addFolder(const QString foldername, const QString &clipId, bool edit) {
emit addProjectFolder(foldername, clipId, false, edit);
}
-void KdenliveDoc::deleteFolder(const QString foldername, int clipId) {
+void KdenliveDoc::deleteFolder(const QString foldername, const QString &clipId) {
emit addProjectFolder(foldername, clipId, true);
}
-void KdenliveDoc::deleteProjectClip(QList <int> ids) {
+void KdenliveDoc::deleteProjectClip(QList <QString> ids) {
for (int i = 0; i < ids.size(); ++i) {
- emit deletTimelineClip(ids.at(i));
+ emit deleteTimelineClip(ids.at(i));
m_clipManager->slotDeleteClip(ids.at(i));
}
setModified(true);
}
-void KdenliveDoc::deleteProjectFolder(QMap <QString, int> map) {
- QMapIterator<QString, int> i(map);
+void KdenliveDoc::deleteProjectFolder(QMap <QString, QString> map) {
+ QMapIterator<QString, QString> i(map);
while (i.hasNext()) {
i.next();
slotDeleteFolder(i.key(), i.value());
setModified(true);
}
-void KdenliveDoc::deleteClip(const uint clipId) {
+void KdenliveDoc::deleteClip(const QString &clipId) {
emit signalDeleteProjectClip(clipId);
m_clipManager->deleteClip(clipId);
}
-void KdenliveDoc::slotAddClipList(const KUrl::List urls, const QString group, const int groupId) {
+void KdenliveDoc::slotAddClipList(const KUrl::List urls, const QString group, const QString &groupId) {
m_clipManager->slotAddClipList(urls, group, groupId);
- emit selectLastAddedClip(m_clipManager->lastClipId());
+ emit selectLastAddedClip(QString::number(m_clipManager->lastClipId()));
setModified(true);
}
-void KdenliveDoc::slotAddClipFile(const KUrl url, const QString group, const int groupId) {
+void KdenliveDoc::slotAddClipFile(const KUrl url, const QString group, const QString &groupId) {
kDebug() << "///////// DOCUM, ADD CLP: " << url;
m_clipManager->slotAddClipFile(url, group, groupId);
- emit selectLastAddedClip(m_clipManager->lastClipId());
+ emit selectLastAddedClip(QString::number(m_clipManager->lastClipId()));
setModified(true);
}
-void KdenliveDoc::slotAddTextClipFile(const QString path, const QString xml, const QString group, const int groupId) {
+void KdenliveDoc::slotAddTextClipFile(const QString path, const QString xml, const QString group, const QString &groupId) {
kDebug() << "///////// DOCUM, ADD TXT CLP: " << path;
m_clipManager->slotAddTextClipFile(path, xml, group, groupId);
setModified(true);
}
void KdenliveDoc::slotAddFolder(const QString folderName) {
- AddFolderCommand *command = new AddFolderCommand(this, folderName, m_clipManager->getFreeClipId(), true);
+ AddFolderCommand *command = new AddFolderCommand(this, folderName, QString::number(m_clipManager->getFreeClipId()), true);
commandStack()->push(command);
setModified(true);
}
-void KdenliveDoc::slotDeleteFolder(const QString folderName, const int id) {
+void KdenliveDoc::slotDeleteFolder(const QString folderName, const QString &id) {
AddFolderCommand *command = new AddFolderCommand(this, folderName, id, false);
commandStack()->push(command);
setModified(true);
}
-void KdenliveDoc::slotEditFolder(const QString newfolderName, const QString oldfolderName, int clipId) {
+void KdenliveDoc::slotEditFolder(const QString newfolderName, const QString oldfolderName, const QString &clipId) {
EditFolderCommand *command = new EditFolderCommand(this, newfolderName, oldfolderName, clipId, false);
commandStack()->push(command);
setModified(true);
}
-int KdenliveDoc::getFreeClipId() {
- return m_clipManager->getFreeClipId();
+const QString&KdenliveDoc::getFreeClipId() {
+ return QString::number(m_clipManager->getFreeClipId());
}
-DocClipBase *KdenliveDoc::getBaseClip(int clipId) {
+DocClipBase *KdenliveDoc::getBaseClip(const QString &clipId) {
return m_clipManager->getClipById(clipId);
}
-void KdenliveDoc::slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const int groupId) {
+void KdenliveDoc::slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const QString &groupId) {
m_clipManager->slotAddColorClipFile(name, color, duration, group, groupId);
setModified(true);
}
-void KdenliveDoc::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 KdenliveDoc::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 QString &groupId) {
m_clipManager->slotAddSlideshowClipFile(name, path, count, duration, loop, fade, luma_duration, luma_file, softness, group, groupId);
setModified(true);
}
-void KdenliveDoc::slotCreateTextClip(QString group, int groupId) {
+void KdenliveDoc::slotCreateTextClip(QString group, const QString &groupId) {
QString titlesFolder = projectFolder().path() + "/titles/";
KStandardDirs::makeDir(titlesFolder);
TitleWidget *dia_ui = new TitleWidget(KUrl(), titlesFolder, m_render, kapp->activeWindow());
QPixmap pix = dia_ui->renderedPixmap();
pix.save(path + ".png");
//dia_ui->saveTitle(path + ".kdenlivetitle");
- slotAddTextClipFile(path, dia_ui->xml().toString(), QString(), -1);
+ slotAddTextClipFile(path, dia_ui->xml().toString(), QString(), QString());
}
delete dia_ui;
}
-void KdenliveDoc::editTextClip(QString path, int id) {
+void KdenliveDoc::editTextClip(QString path, const QString &id) {
DocClipBase *clip = m_clipManager->getClipById(id);
if (!clip) return;
TitleWidget *dia_ui = new TitleWidget(KUrl()/*path + ".kdenlivetitle")*/, path, m_render, kapp->activeWindow());
QDomDocument toXml() const;
void setRenderer(Render *render);
QUndoStack *commandStack();
- QString producerName(int id);
- void setProducerDuration(int id, int duration);
- int getProducerDuration(int id);
+ QString producerName(const QString &id);
+ void setProducerDuration(const QString &id, int duration);
+ int getProducerDuration(const QString &id);
Render *renderer();
QDomElement m_guidesXml;
ClipManager *clipManager();
- void addClip(const QDomElement &elem, const int clipId);
- 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 addClip(const QDomElement &elem, const QString &clipId);
+ void addFolder(const QString foldername, const QString &clipId, bool edit);
+ void deleteFolder(const QString foldername, const QString &clipId);
+ void slotAddClipFile(const KUrl url, const QString group, const QString &groupId = QString());
+ void slotAddClipList(const KUrl::List urls, const QString group, const QString &groupId = QString());
+ void slotAddTextClipFile(const QString path, const QString xml, const QString group, const QString &groupId = QString());
+ void editTextClip(QString path, const QString &id);
void slotAddFolder(const QString folderName);
- void slotDeleteFolder(const QString folderName, const int id);
- void slotEditFolder(const QString folderName, const QString oldfolderName, int clipId);
- void slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const int groupId = -1);
- 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 = -1);
- void deleteClip(const uint clipId);
+ void slotDeleteFolder(const QString folderName, const QString &id);
+ void slotEditFolder(const QString folderName, const QString oldfolderName, const QString &clipId);
+ void slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const QString &groupId = QString());
+ 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 QString &groupId = QString());
+ void deleteClip(const QString &clipId);
int getFramePos(QString duration);
- DocClipBase *getBaseClip(int clipId);
- void updateClip(int id);
- void deleteProjectClip(QList <int> ids);
- void deleteProjectFolder(QMap <QString, int> map);
+ DocClipBase *getBaseClip(const QString &clipId);
+ void updateClip(const QString &id);
+ void deleteProjectClip(QList <QString> ids);
+ void deleteProjectFolder(QMap <QString, QString> map);
/** Inform application of the audio thumbnails generation progress */
void setThumbsProgress(const QString &message, int progress);
QString profilePath() const;
void setProfilePath(QString path);
/** Set to true if document needs saving, false otherwise */
void setModified(bool mod);
- int getFreeClipId();
+ const QString&getFreeClipId();
/** does the document need saving */
bool isModified() const;
/** Returns project folder, used to store project files (titles, effects,...) */
void convertDocument(double version);
public slots:
- void slotCreateTextClip(QString group, int groupId);
+ void slotCreateTextClip(QString group, const QString &groupId);
private slots:
void slotAutoSave();
signals:
void addProjectClip(DocClipBase *);
- void addProjectFolder(const QString, int, bool, bool edit = false);
- void signalDeleteProjectClip(int);
- void updateClipDisplay(int);
- void deletTimelineClip(int);
+ void addProjectFolder(const QString, const QString &, bool, bool edit = false);
+ void signalDeleteProjectClip(const QString &);
+ void updateClipDisplay(const QString&);
+ void deleteTimelineClip(const QString&);
void progressInfo(const QString &, int);
/** emited when the document state has been modified (= needs saving or not) */
void docModified(bool);
- void refreshClipThumbnail(int);
- void selectLastAddedClip(const int);
+ void refreshClipThumbnail(const QString &);
+ void selectLastAddedClip(const QString &);
};
#endif
else projectMonitorDock->raise();
}
-void MainWindow::slotSetClipDuration(int id, int duration) {
+void MainWindow::slotSetClipDuration(const QString &id, int duration) {
if (!m_activeDocument) return;
m_activeDocument->setProducerDuration(id, duration);
}
m_projectList->setRenderer(m_clipMonitor->render);
connect(m_projectList, SIGNAL(receivedClipDuration(int, int)), this, SLOT(slotSetClipDuration(int, int)));
connect(m_projectList, SIGNAL(showClipProperties(DocClipBase *)), this, SLOT(slotShowClipProperties(DocClipBase *)));
- connect(m_projectList, SIGNAL(getFileProperties(const QDomElement &, int)), m_clipMonitor->render, SLOT(getFileProperties(const QDomElement &, int)));
- connect(m_clipMonitor->render, SIGNAL(replyGetImage(int, int, const QPixmap &, int, int)), m_projectList, SLOT(slotReplyGetImage(int, int, const QPixmap &, int, int)));
- connect(m_clipMonitor->render, SIGNAL(replyGetFileProperties(int, Mlt::Producer*, const QMap < QString, QString > &, const QMap < QString, QString > &)), m_projectList, SLOT(slotReplyGetFileProperties(int, Mlt::Producer*, const QMap < QString, QString > &, const QMap < QString, QString > &)));
+ connect(m_projectList, SIGNAL(getFileProperties(const QDomElement &, const QString &)), m_clipMonitor->render, SLOT(getFileProperties(const QDomElement &, const QString &)));
+ connect(m_clipMonitor->render, SIGNAL(replyGetImage(const QString &, int, const QPixmap &, int, int)), m_projectList, SLOT(slotReplyGetImage(const QString &, int, const QPixmap &, int, int)));
+ connect(m_clipMonitor->render, SIGNAL(replyGetFileProperties(const QString &, Mlt::Producer*, const QMap < QString, QString > &, const QMap < QString, QString > &)), m_projectList, SLOT(slotReplyGetFileProperties(const QString &, Mlt::Producer*, const QMap < QString, QString > &, const QMap < QString, QString > &)));
- connect(m_clipMonitor->render, SIGNAL(removeInvalidClip(int)), m_projectList, SLOT(slotRemoveInvalidClip(int)));
+ connect(m_clipMonitor->render, SIGNAL(removeInvalidClip(const QString &)), m_projectList, SLOT(slotRemoveInvalidClip(const QString &)));
- connect(m_clipMonitor, SIGNAL(refreshClipThumbnail(int)), m_projectList, SLOT(slotRefreshClipThumbnail(int)));
+ connect(m_clipMonitor, SIGNAL(refreshClipThumbnail(const QString &)), m_projectList, SLOT(slotRefreshClipThumbnail(const QString &)));
connect(m_clipMonitor, SIGNAL(adjustMonitorSize()), this, SLOT(slotAdjustClipMonitor()));
connect(m_projectMonitor, SIGNAL(adjustMonitorSize()), this, SLOT(slotAdjustProjectMonitor()));
disconnect(m_projectMonitor, SIGNAL(renderPosition(int)), m_activeTimeline, SLOT(moveCursorPos(int)));
disconnect(m_projectMonitor, SIGNAL(durationChanged(int)), m_activeTimeline, SLOT(setDuration(int)));
disconnect(m_activeDocument, SIGNAL(addProjectClip(DocClipBase *)), m_projectList, SLOT(slotAddClip(DocClipBase *)));
- disconnect(m_activeDocument, SIGNAL(addProjectFolder(const QString, int, bool, bool)), m_projectList, SLOT(slotAddFolder(const QString, int, bool, bool)));
- 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_activeDocument, SIGNAL(addProjectFolder(const QString, const QString &, bool, bool)), m_projectList, SLOT(slotAddFolder(const QString, const QString &, bool, bool)));
+ disconnect(m_activeDocument, SIGNAL(signalDeleteProjectClip(const QString &)), m_projectList, SLOT(slotDeleteClip(const QString &)));
+ disconnect(m_activeDocument, SIGNAL(updateClipDisplay(const QString &)), m_projectList, SLOT(slotUpdateClip(const QString &)));
+ disconnect(m_activeDocument, SIGNAL(refreshClipThumbnail(const QString &)), m_projectList, SLOT(slotRefreshClipThumbnail(const QString &)));
+ disconnect(m_activeDocument, SIGNAL(selectLastAddedClip(const QString &)), m_projectList, SLOT(slotSelectClip(const QString &)));
+ disconnect(m_activeDocument, SIGNAL(deleteTimelineClip(const QString &)), m_activeTimeline, SLOT(slotDeleteClip(const QString &)));
disconnect(m_activeTimeline, SIGNAL(clipItemSelected(ClipItem*)), effectStack, SLOT(slotClipItemSelected(ClipItem*)));
disconnect(m_activeTimeline, SIGNAL(clipItemSelected(ClipItem*)), this, SLOT(slotActivateEffectStackView()));
disconnect(m_activeTimeline, SIGNAL(transitionItemSelected(Transition*)), transitionConfig, SLOT(slotTransitionItemSelected(Transition*)));
connect(m_projectMonitor, SIGNAL(renderPosition(int)), trackView, SLOT(moveCursorPos(int)));
connect(m_projectMonitor, SIGNAL(durationChanged(int)), trackView, SLOT(setDuration(int)));
connect(doc, SIGNAL(addProjectClip(DocClipBase *)), m_projectList, SLOT(slotAddClip(DocClipBase *)));
- connect(doc, SIGNAL(addProjectFolder(const QString, int, bool, bool)), m_projectList, SLOT(slotAddFolder(const QString, int, bool, bool)));
- 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(addProjectFolder(const QString, const QString &, bool, bool)), m_projectList, SLOT(slotAddFolder(const QString, const QString &, bool, bool)));
+ connect(doc, SIGNAL(signalDeleteProjectClip(const QString &)), m_projectList, SLOT(slotDeleteClip(const QString &)));
+ connect(doc, SIGNAL(updateClipDisplay(const QString &)), m_projectList, SLOT(slotUpdateClip(const QString &)));
+ connect(doc, SIGNAL(refreshClipThumbnail(const QString &)), m_projectList, SLOT(slotRefreshClipThumbnail(const QString &)));
+ connect(doc, SIGNAL(selectLastAddedClip(const QString &)), m_projectList, SLOT(slotSelectClip(const QString &)));
- connect(doc, SIGNAL(deletTimelineClip(int)), trackView, SLOT(slotDeleteClip(int)));
+ connect(doc, SIGNAL(deleteTimelineClip(const QString &)), trackView, SLOT(slotDeleteClip(const QString &)));
connect(doc, SIGNAL(docModified(bool)), this, SLOT(slotUpdateDocumentState(bool)));
return;
}
ClipProperties dia(clip, m_activeDocument->timecode(), m_activeDocument->fps(), this);
- connect(&dia, SIGNAL(addMarker(int, GenTime, QString)), m_activeTimeline->projectView(), SLOT(slotAddClipMarker(int, GenTime, QString)));
+ connect(&dia, SIGNAL(addMarker(const QString &, GenTime, QString)), m_activeTimeline->projectView(), SLOT(slotAddClipMarker(const QString &, GenTime, QString)));
if (dia.exec() == QDialog::Accepted) {
m_projectList->slotUpdateClipProperties(dia.clipId(), dia.properties());
if (dia.needsTimelineRefresh()) {
void updateConfiguration();
void slotConnectMonitors();
void slotRaiseMonitor(bool clipMonitor);
- void slotSetClipDuration(int id, int duration);
+ void slotSetClipDuration(const QString &id, int duration);
void slotUpdateMousePosition(int pos);
void slotAddEffect(QDomElement effect, GenTime pos = GenTime(), int track = -1);
void slotEditProfiles();
signals:
void renderPosition(int);
void durationChanged(int);
- void refreshClipThumbnail(int);
+ void refreshClipThumbnail(const QString &);
void adjustMonitorSize();
};
const int UsageRole = NameRole + 2;
-ProjectItem::ProjectItem(QTreeWidget * parent, const QStringList & strings, QDomElement xml, int clipId)
- : QTreeWidgetItem(parent, strings, QTreeWidgetItem::UserType), m_clipType(UNKNOWN), m_clipId(clipId) {
- QDomElement element = xml.cloneNode().toElement();
- setSizeHint(0, QSize(65, 45));
- setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled | Qt::ItemIsEditable);
- if (!element.isNull()) {
- element.setAttribute("id", clipId);
- QString cType = element.attribute("type", QString::null);
- if (!cType.isEmpty()) {
- m_clipType = (CLIPTYPE) cType.toInt();
- slotSetToolTip();
- }
-
- if (m_clipType == COLOR || m_clipType == IMAGE || m_clipType == SLIDESHOW || m_clipType == TEXT)
- element.setAttribute("duration", MAXCLIPDURATION);
- else if (element.attribute("duration").isEmpty() && !element.attribute("out").isEmpty()) {
- element.setAttribute("duration", element.attribute("out").toInt() - element.attribute("in").toInt());
- }
- }
-}
-
-ProjectItem::ProjectItem(QTreeWidgetItem * parent, const QStringList & strings, QDomElement xml, int clipId)
- : QTreeWidgetItem(parent, strings, QTreeWidgetItem::UserType), m_clipType(UNKNOWN), m_clipId(clipId) {
- QDomElement element = xml.cloneNode().toElement();
- setSizeHint(0, QSize(65, 45));
- setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled | Qt::ItemIsEditable);
- if (!element.isNull()) {
- element.setAttribute("id", clipId);
- QString cType = element.attribute("type", QString::null);
- if (!cType.isEmpty()) {
- m_clipType = (CLIPTYPE) cType.toInt();
- slotSetToolTip();
- }
- }
-}
-
// folder
-ProjectItem::ProjectItem(QTreeWidget * parent, const QStringList & strings, int clipId)
+ProjectItem::ProjectItem(QTreeWidget * parent, const QStringList & strings, const QString &clipId)
: QTreeWidgetItem(parent, strings), m_clipType(FOLDER), m_groupName(strings.at(1)), m_clipId(clipId), m_clip(NULL) {
setSizeHint(0, QSize(65, 45));
setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled | Qt::ItemIsEditable);
if (name.isEmpty()) name = KUrl(m_clip->getProperty("resource")).fileName();
m_clipType = (CLIPTYPE) m_clip->getProperty("type").toInt();
setText(1, name);
+ setText(2, m_clip->description());
//kDebug() << "PROJECT ITE;. ADDING LCIP: " << m_clipId;
}
if (name.isEmpty()) name = KUrl(m_clip->getProperty("resource")).fileName();
m_clipType = (CLIPTYPE) m_clip->getProperty("type").toInt();
setText(1, name);
+ setText(2, m_clip->description());
//kDebug() << "PROJECT ITE;. ADDING LCIP: " << m_clipId;
}
return m_clip->numReferences();
}
-int ProjectItem::clipId() const {
+const QString &ProjectItem::clipId() const {
return m_clipId;
}
}
-#include "projectitem.moc"
class DocClipBase;
class ProjectItem : public QTreeWidgetItem {
public:
- ProjectItem(QTreeWidget * parent, const QStringList & strings, QDomElement xml, int clipId);
- ProjectItem(QTreeWidgetItem * parent, const QStringList & strings, QDomElement xml, int clipId);
/** Create folder item */
- ProjectItem(QTreeWidget * parent, const QStringList & strings, int clipId);
+ ProjectItem(QTreeWidget * parent, const QStringList & strings, const QString &clipId);
ProjectItem(QTreeWidget * parent, DocClipBase *clip);
ProjectItem(QTreeWidgetItem * parent, DocClipBase *clip);
virtual ~ProjectItem();
int numReferences() const;
void setProperties(const QMap < QString, QString > &attributes, const QMap < QString, QString > &metadata);
- int clipId() const;
+ const QString &clipId() const;
QStringList names() const;
bool isGroup() const;
const QString groupName() const;
private:
QString m_groupName;
CLIPTYPE m_clipType;
- int m_clipId;
+ QString m_clipId;
void slotSetToolTip();
DocClipBase *m_clip;
};
}
}
-void ProjectList::slotUpdateClipProperties(int id, QMap <QString, QString> properties) {
+void ProjectList::slotUpdateClipProperties(const QString &id, QMap <QString, QString> properties) {
ProjectItem *item = getItemById(id);
if (item) {
slotUpdateClipProperties(item, properties);
void ProjectList::slotRemoveClip() {
if (!listView->currentItem()) return;
ProjectItem *item = static_cast <ProjectItem *>(listView->currentItem());
- QList <int> ids;
- QMap <QString, int> folderids;
+ QList <QString> ids;
+ QMap <QString, QString> folderids;
if (item->clipType() == FOLDER) folderids[item->groupName()] = item->clipId();
else ids << item->clipId();
if (item->numReferences() > 0) {
if (!folderids.isEmpty()) m_doc->deleteProjectFolder(folderids);
}
-void ProjectList::selectItemById(const int clipId) {
+void ProjectList::selectItemById(const QString &clipId) {
ProjectItem *item = getItemById(clipId);
if (item) listView->setCurrentItem(item);
}
-void ProjectList::slotDeleteClip(int clipId) {
+void ProjectList::slotDeleteClip(const QString &clipId) {
ProjectItem *item = getItemById(clipId);
QTreeWidgetItem *p = item->parent();
if (p) {
m_doc->slotAddFolder(i18n("Folder")); //folderName);
}
-void ProjectList::slotAddFolder(const QString foldername, int clipId, bool remove, bool edit) {
+void ProjectList::slotAddFolder(const QString foldername, const QString &clipId, bool remove, bool edit) {
if (remove) {
ProjectItem *item;
QTreeWidgetItemIterator it(listView);
}
void ProjectList::slotAddClip(DocClipBase *clip) {
- const int parent = clip->toXML().attribute("groupid").toInt();
+ const QString parent = clip->toXML().attribute("groupid");
ProjectItem *item = NULL;
if (parent != 0) {
ProjectItem *parentitem = getItemById(parent);
emit getFileProperties(clip->toXML(), clip->getId());
}
-void ProjectList::slotUpdateClip(int id) {
+void ProjectList::slotUpdateClip(const QString &id) {
ProjectItem *item = getItemById(id);
item->setData(1, UsageRole, QString::number(item->numReferences()));
}
if (!m_commandStack) kDebug() << "!!!!!!!!!!!!!!!! NO CMD STK";
KUrl::List list;
if (givenUrl.isEmpty()) {
- list = KFileDialog::getOpenUrls(KUrl("kfiledialog:///clipfolder"), "application/vnd.kde.kdenlive application/vnd.westley.scenelist application/flv application/vnd.rn-realmedia video/x-dv video/dv video/x-msvideo video/mpeg video/x-ms-wmv audio/mpeg audio/x-mp3 audio/x-wav application/ogg video/mp4 video/quicktime image/gif image/jpeg image/png image/x-bmp image/svg+xml image/tiff image/x-xcf-gimp image/x-vnd.adobe.photoshop image/x-pcx image/x-exr", this);
+ list = KFileDialog::getOpenUrls(KUrl("kfiledialog:///clipfolder"), "application/vnd.kde.kdenlive application/vnd.westley.scenelist application/flv application/vnd.rn-realmedia video/x-dv video/dv video/x-msvideo video/mpeg video/x-ms-wmv audio/mpeg audio/x-mp3 audio/x-wav application/ogg video/mp4 video/quicktime image/gif image/jpeg image/png image/x-bmp image/svg+xml image/tiff image/x-xcf-gimp image/x-vnd.adobe.photoshop image/x-pcx image/x-exr video/mlt-playlist", this);
} else list.append(givenUrl);
if (list.isEmpty()) return;
- int groupId = -1;
+ QString groupId = QString();
if (group.isEmpty()) {
ProjectItem *item = static_cast <ProjectItem*>(listView->currentItem());
if (item && item->clipType() != FOLDER) {
m_doc->slotAddClipList(list, group, groupId);
}
-void ProjectList::slotRemoveInvalidClip(int id) {
+void ProjectList::slotRemoveInvalidClip(const QString &id) {
ProjectItem *item = getItemById(id);
if (item) {
QString path = item->referencedClip()->fileURL().path();
if (!path.isEmpty()) KMessageBox::sorry(this, i18n("<qt>Clip <b>%1</b><br>is invalid, will be removed from project.", path));
}
- QList <int> ids;
+ QList <QString> ids;
ids << id;
m_doc->deleteProjectClip(ids);
}
color = color.replace(0, 1, "0x") + "ff";
QString group = QString();
- int groupId = -1;
+ QString groupId = QString();
ProjectItem *item = static_cast <ProjectItem*>(listView->currentItem());
if (item && item->clipType() != FOLDER) {
while (item->parent()) {
if (dia->exec() == QDialog::Accepted) {
QString group = QString();
- int groupId = -1;
+ QString groupId = QString();
ProjectItem *item = static_cast <ProjectItem*>(listView->currentItem());
if (item && item->clipType() != FOLDER) {
while (item->parent()) {
void ProjectList::slotAddTitleClip() {
QString group = QString();
- int groupId = -1;
+ QString groupId = QString();
ProjectItem *item = static_cast <ProjectItem*>(listView->currentItem());
if (item && item->clipType() != FOLDER) {
while (item->parent()) {
return prods;
}
-void ProjectList::slotRefreshClipThumbnail(int clipId) {
+void ProjectList::slotRefreshClipThumbnail(const QString &clipId) {
ProjectItem *item = getItemById(clipId);
if (item) slotRefreshClipThumbnail(item);
}
}
}
-void ProjectList::slotReplyGetFileProperties(int clipId, Mlt::Producer *producer, const QMap < QString, QString > &properties, const QMap < QString, QString > &metadata) {
+void ProjectList::slotReplyGetFileProperties(const QString &clipId, Mlt::Producer *producer, const QMap < QString, QString > &properties, const QMap < QString, QString > &metadata) {
ProjectItem *item = getItemById(clipId);
if (item) {
item->setProperties(properties, metadata);
} else kDebug() << "//////// COULD NOT FIND CLIP TO UPDATE PRPS...";
}
-void ProjectList::slotReplyGetImage(int clipId, int pos, const QPixmap &pix, int w, int h) {
+void ProjectList::slotReplyGetImage(const QString &clipId, int pos, const QPixmap &pix, int w, int h) {
ProjectItem *item = getItemById(clipId);
if (item) item->setIcon(0, pix);
}
-ProjectItem *ProjectList::getItemById(int id) {
+ProjectItem *ProjectList::getItemById(const QString &id) {
QTreeWidgetItemIterator it(listView);
while (*it) {
if (((ProjectItem *)(*it))->clipId() == id)
return NULL;
}
-void ProjectList::slotSelectClip(const int ix) {
+void ProjectList::slotSelectClip(const QString &ix) {
ProjectItem *p = getItemById(ix);
if (p) {
listView->setCurrentItem(p);
QDomElement producersList();
void setRenderer(Render *projectRender);
- void slotUpdateClipProperties(int id, QMap <QString, QString> properties);
+ void slotUpdateClipProperties(const QString &id, QMap <QString, QString> properties);
public slots:
void setDocument(KdenliveDoc *doc);
- void slotReplyGetImage(int clipId, int pos, const QPixmap &pix, int w, int h);
- void slotReplyGetFileProperties(int clipId, Mlt::Producer *producer, const QMap < QString, QString > &properties, const QMap < QString, QString > &metadata);
+ void slotReplyGetImage(const QString &clipId, int pos, const QPixmap &pix, int w, int h);
+ void slotReplyGetFileProperties(const QString &clipId, Mlt::Producer *producer, const QMap < QString, QString > &properties, const QMap < QString, QString > &metadata);
void slotAddClip(DocClipBase *clip);
- void slotDeleteClip(int clipId);
- void slotUpdateClip(int id);
- void slotRefreshClipThumbnail(int clipId);
+ void slotDeleteClip(const QString &clipId);
+ void slotUpdateClip(const QString &id);
+ void slotRefreshClipThumbnail(const QString &clipId);
void slotRefreshClipThumbnail(ProjectItem *item);
- void slotRemoveInvalidClip(int id);
- void slotSelectClip(const int ix);
+ void slotRemoveInvalidClip(const QString &id);
+ void slotSelectClip(const QString &ix);
private:
ProjectListView *listView;
QMenu *m_menu;
QUndoStack *m_commandStack;
int m_clipIdCounter;
- void selectItemById(const int clipId);
- ProjectItem *getItemById(int id);
+ void selectItemById(const QString &clipId);
+ ProjectItem *getItemById(const QString &id);
QAction *m_editAction;
QAction *m_deleteAction;
KdenliveDoc *m_doc;
void slotAddTitleClip();
void slotContextMenu(const QPoint &pos, QTreeWidgetItem *);
void slotAddFolder();
- void slotAddFolder(const QString foldername, int clipId, bool remove, bool edit);
+ void slotAddFolder(const QString foldername, const QString &clipId, bool remove, bool edit);
/** This is triggered when a clip description has been modified */
void slotItemEdited(QTreeWidgetItem *item, int column);
void slotUpdateClipProperties(ProjectItem *item, QMap <QString, QString> properties);
signals:
void clipSelected(DocClipBase *);
- void getFileProperties(const QDomElement&, int);
- void receivedClipDuration(int, int);
+ void getFileProperties(const QDomElement&, const QString &);
+ void receivedClipDuration(const QString &, int);
void showClipProperties(DocClipBase *);
};
kDebug() << "//////////////// DROPPED RIGHT 1 ";
const QList <QTreeWidgetItem *> list = selectedItems();
ProjectItem *clone;
- int parentId = item->clipId();
+ QString parentId = item->clipId();
foreach(QTreeWidgetItem *it, list) {
// TODO allow dragging of folders ?
- if (!((ProjectItem *) it)->isGroup() && ((ProjectItem *) it)->clipId() < 10000) {
+ if (!((ProjectItem *) it)->isGroup()/* && ((ProjectItem *) it)->clipId() < 10000*/) {
if (it->parent()) clone = (ProjectItem*) it->parent()->takeChild(it->parent()->indexOfChild(it));
else clone = (ProjectItem*) takeTopLevelItem(indexOfTopLevelItem(it));
if (clone) {
item->addChild(clone);
QMap <QString, QString> props;
props.insert("groupname", item->groupName());
- props.insert("groupid", QString::number(parentId));
+ props.insert("groupid", parentId);
clone->setProperties(props);
}
}
ProjectItem *clone;
foreach(QTreeWidgetItem *it, list) {
QTreeWidgetItem *parent = it->parent();
- if (parent && ((ProjectItem *) it)->clipId() < 10000) {
+ if (parent/* && ((ProjectItem *) it)->clipId() < 10000*/) {
kDebug() << "++ item parent: " << parent->text(1);
clone = (ProjectItem*) parent->takeChild(parent->indexOfChild(it));
if (clone) addTopLevelItem(clone);
QStringList ids;
foreach(const QTreeWidgetItem *item, list) {
// TODO allow dragging of folders
- ids.append(QString::number(((ProjectItem *) item)->clipId()));
+ ids.append(((ProjectItem *) item)->clipId());
}
QByteArray data;
data.append(ids.join(";").toUtf8()); //doc.toString().toUtf8());
}
}
-void Render::getFileProperties(const QDomElement &xml, int clipId) {
+void Render::getFileProperties(const QDomElement &xml, const QString &clipId) {
int height = 50;
int width = (int)(height * m_mltProfile->dar());
QMap < QString, QString > filePropertyMap;
emit removeInvalidClip(clipId);
return;
}
- producer->set("id", clipId);
+ char *tmp = decodedString(clipId);
+ producer->set("id", tmp);
+ delete[] tmp;
int frameNumber = xml.attribute("thumbnail", "0").toInt();
if (frameNumber != 0) producer->seek(frameNumber);
mlt_properties properties = MLT_PRODUCER_PROPERTIES(producer->get_producer());
signals: // Signals
/** emitted when the renderer recieves a reply to a getFileProperties request. */
- void replyGetFileProperties(int clipId, Mlt::Producer*, const QMap < QString, QString > &, const QMap < QString, QString > &);
+ void replyGetFileProperties(const QString &clipId, Mlt::Producer*, const QMap < QString, QString > &, const QMap < QString, QString > &);
/** emitted when the renderer recieves a reply to a getImage request. */
- void replyGetImage(int , int, const QPixmap &, int, int);
- void replyGetImage(int, const QPixmap &, int, int);
+ void replyGetImage(const QString & , int, const QPixmap &, int, int);
+ void replyGetImage(const QString &, const QPixmap &, int, int);
/** Emitted when the renderer stops, either playing or rendering. */
void stopped();
void durationChanged(int);
void rendererPosition(int);
void rendererStopped(int);
- void removeInvalidClip(int);
+ void removeInvalidClip(const QString &);
public slots: // Public slots
/** Start Consumer */
/** Wraps the VEML command of the same name. Requests the file properties
for the specified url from the renderer. Upon return, the result will be emitted
via replyGetFileProperties(). */
- void getFileProperties(const QDomElement &xml, int clipId);
+ void getFileProperties(const QDomElement &xml, const QString &clipId);
void exportFileToFirewire(QString srcFileName, int port, GenTime startTime, GenTime endTime);
static char *decodedString(QString str);
//m_scrollBox->setGeometry(0, 0, 300 * zoomFactor(), m_scrollArea->height());
}
-void TrackView::slotDeleteClip(int clipId) {
+void TrackView::slotDeleteClip(const QString &clipId) {
m_trackview->deleteClip(clipId);
}
// Found a clip
int in = elem.attribute("in").toInt();
QString idString = elem.attribute("producer");
- int id = idString.toInt();
+ QString id = idString;
bool hasSpeedAttribute = false;
double speed;
if (idString.startsWith("slowmotion")) {
hasSpeedAttribute = true;
- id = idString.section(":", 1, 1).toInt();
+ id = idString.section(":", 1, 1);
speed = idString.section(":", 2, 2).toDouble();
}
DocClipBase *clip = m_doc->clipManager()->getClipById(id);
public slots:
- void slotDeleteClip(int clipId);
+ void slotDeleteClip(const QString &clipId);
void slotChangeZoom(int factor);
void setDuration(int dur);