#include "addtimelineclipcommand.h"
-AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, int track, int startpos, QRectF rect, int duration, bool doIt)
- : m_view(view), m_xml(xml), m_clipId(clipId), m_clipTrack(track), m_clipPos(startpos), m_clipRect(rect), m_clipDuration(duration), m_doIt(doIt) {
- setText(i18n("Add timeline clip"));
+AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, int track, int startpos, QRectF rect, int duration, bool doIt, bool doRemove)
+ : m_view(view), m_xml(xml), m_clipId(clipId), m_clipTrack(track), m_clipPos(startpos), m_clipRect(rect), m_clipDuration(duration), m_doIt(doIt), m_remove(doRemove) {
+ if (!m_remove) setText(i18n("Add timeline clip"));
+ else setText(i18n("Delete timeline clip"));
}
// virtual
void AddTimelineClipCommand::undo()
{
-// kDebug()<<"---- undoing action";
- m_doIt = true;
- if (m_doIt) m_view->deleteClip(m_clipTrack, m_clipPos, m_clipRect);
+ if (!m_remove) m_view->deleteClip(m_clipTrack, m_clipPos, m_clipRect);
+ else m_view->addClip(m_xml, m_clipId, m_clipTrack, m_clipPos, m_clipRect, m_clipDuration);
}
// virtual
void AddTimelineClipCommand::redo()
{
- //kDebug()<<"---- redoing action";
- if (m_doIt) m_view->addClip(m_xml, m_clipId, m_clipTrack, m_clipPos, m_clipRect, m_clipDuration);
+ if (m_doIt) {
+ if (!m_remove) m_view->addClip(m_xml, m_clipId, m_clipTrack, m_clipPos, m_clipRect, m_clipDuration);
+ else m_view->deleteClip(m_clipTrack, m_clipPos, m_clipRect);
+ }
m_doIt = true;
}
class AddTimelineClipCommand : public QUndoCommand
{
public:
- AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, int track, int startpos, QRectF rect, int duration, bool doIt);
+ AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, int track, int startpos, QRectF rect, int duration, bool doIt, bool doRemove);
virtual void undo();
virtual void redo();
int m_clipPos;
QRectF m_clipRect;
bool m_doIt;
+ bool m_remove;
};
#endif
m_clipList.append(clip);
}
+void ClipManager::slotDeleteClip(uint clipId)
+{
+ for (int i = 0; i < m_clipList.count(); i++) {
+ if (m_clipList.at(i)->getId() == clipId) {
+ //m_clipList.removeAt(i);
+ AddClipCommand *command = new AddClipCommand(m_doc, m_clipList.at(i)->toXML(), clipId, false);
+ m_doc->commandStack()->push(command);
+ break;
+ }
+ }
+}
+
void ClipManager::deleteClip(uint clipId)
{
for (int i = 0; i < m_clipList.count(); i++) {
- if (m_clipList.at(i)->getId() == clipId)
+ if (m_clipList.at(i)->getId() == clipId) {
m_clipList.removeAt(i);
+ break;
+ }
}
}
void slotAddClipFile(const KUrl url, const QString group);
void slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group);
DocClipBase *getClipById(int clipId);
+ void slotDeleteClip(uint clipId);
private: // Private attributes
/** the list of clips in the document */
void CustomTrackView::dropEvent ( QDropEvent * event ) {
if (m_dropItem) {
- AddTimelineClipCommand *command = new AddTimelineClipCommand(this, m_dropItem->xml(), m_dropItem->clipProducer(), m_dropItem->track(), m_dropItem->startPos(), m_dropItem->rect(), m_dropItem->duration(), false);
+ AddTimelineClipCommand *command = new AddTimelineClipCommand(this, m_dropItem->xml(), m_dropItem->clipProducer(), m_dropItem->track(), m_dropItem->startPos(), m_dropItem->rect(), m_dropItem->duration(), false, false);
m_commandStack->push(command);
m_dropItem->baseClip()->addReference();
m_document->updateClip(m_dropItem->baseClip()->getId());
m_cursorLine->setLine(m_cursorLine->line().x1(), 0, m_cursorLine->line().x1(), 50 * m_tracksCount);
}
+void CustomTrackView::deleteClip(int clipId)
+{
+ QList<QGraphicsItem *> itemList = items();
+ for (int i = 0; i < itemList.count(); i++) {
+ if (itemList.at(i)->type() == 70000) {
+ ClipItem *item = (ClipItem *)itemList.at(i);
+ if (item->clipProducer() == clipId) {
+ AddTimelineClipCommand *command = new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->track(), item->startPos(), item->rect(), item->duration(), true, true);
+ m_commandStack->push(command);
+ //delete item;
+ }
+ }
+ }
+}
+
void CustomTrackView::setCursorPos(int pos, bool seek)
{
m_cursorPos = pos;
void deleteClip ( int track, int startpos, const QRectF &rect );
void setDuration(int duration);
void setScale(double scaleFactor);
+ void deleteClip(int clipId);
public slots:
void setCursorPos(int pos, bool seek = true);
emit addProjectClip(clip);
}
+void KdenliveDoc::deleteProjectClip(const uint clipId)
+{
+ emit deletTimelineClip(clipId);
+ m_clipManager->slotDeleteClip(clipId);
+}
+
void KdenliveDoc::deleteClip(const uint clipId)
{
- emit deleteProjectClip(clipId);
+ emit signalDeleteProjectClip(clipId);
m_clipManager->deleteClip(clipId);
}
int getFramePos(QString duration);
DocClipBase *getBaseClip(int clipId);
void updateClip(int id);
+ void deleteProjectClip(const uint clipId);
private:
KUrl m_url;
signals:
void addProjectClip(DocClipBase *);
- void deleteProjectClip(int);
+ void signalDeleteProjectClip(int);
void updateClipDisplay(int);
+ void deletTimelineClip(int);
};
#endif
connect(trackView, SIGNAL(mousePosition(int)), this, SLOT(slotUpdateMousePosition(int)));
connect(m_projectMonitor, SIGNAL(renderPosition(int)), trackView, SLOT(moveCursorPos(int)));
connect(doc, SIGNAL(addProjectClip(DocClipBase *)), m_projectList, SLOT(slotAddClip(DocClipBase *)));
- connect(doc, SIGNAL(deleteProjectClip(int)), m_projectList, SLOT(slotDeleteClip(int)));
+ connect(doc, SIGNAL(signalDeleteProjectClip(int)), m_projectList, SLOT(slotDeleteClip(int)));
connect(doc, SIGNAL(updateClipDisplay(int)), m_projectList, SLOT(slotUpdateClip(int)));
-
+ connect(doc, SIGNAL(deletTimelineClip(int)), trackView, SLOT(slotDeleteClip(int)));
m_projectList->setDocument(doc);
m_monitorManager->setTimecode(doc->timecode());
void ProjectList::slotRemoveClip()
{
-/*
+
if (!m_commandStack) kDebug()<<"!!!!!!!!!!!!!!!! NO CMD STK";
if (!listView->currentItem()) return;
ProjectItem *item = ((ProjectItem *)listView->currentItem());
- if (!item) kDebug()<<"/////////////// ERROR NOT FOUND";
- if (KMessageBox::questionYesNo(this, i18n("Delete clip <b>%1</b> ?").arg(item->names().at(1)), i18n("Delete Clip")) != KMessageBox::Yes) return;
- AddClipCommand *command = new AddClipCommand(this, item->names(), item->toXml(), item->clipId(), item->clipUrl(), item->groupName(), false);
- m_commandStack->push(command);*/
+ if (item->numReferences() > 0) {
+ if (KMessageBox::questionYesNo(this, i18n("Delete clip <b>%1</b> ?<br>This will also remove its %2 clips in timeline").arg(item->names().at(1)).arg(item->numReferences()), i18n("Delete Clip")) != KMessageBox::Yes) return;
+ }
+ m_doc->deleteProjectClip(item->clipId());
}
void ProjectList::selectItemById(const int clipId)
//m_scrollBox->setGeometry(0, 0, 300 * zoomFactor(), m_scrollArea->height());
}
+void TrackView::slotDeleteClip(int clipId)
+{
+ m_trackview->deleteClip(clipId);
+}
+
void TrackView::setCursorPos(int pos)
{
emit cursorMoved();
CustomTrackView *projectView();
int duration();
int tracksNumber();
+ KdenliveDoc *document();
public slots:
- KdenliveDoc *document();
+ void slotDeleteClip(int clipId);
private:
Ui::TimeLine_UI *view;