if (!gid.isEmpty() && gid.toInt() >= m_folderIdCounter) m_folderIdCounter = gid.toInt() + 1;
}
-void ClipManager::slotDeleteClip(const QString &clipId)
+void ClipManager::slotDeleteClips(QStringList ids)
{
- DocClipBase *clip = getClipById(clipId);
- if (clip) {
- AddClipCommand *command = new AddClipCommand(m_doc, clip->toXML(), clipId, false);
- m_doc->commandStack()->push(command);
+ QUndoCommand *delClips = new QUndoCommand();
+ delClips->setText(i18np("Delete clip", "Delete clips", ids.size()));
+
+ for (int i = 0; i < ids.size(); i++) {
+ DocClipBase *clip = getClipById(ids.at(i));
+ if (clip) {
+ new AddClipCommand(m_doc, clip->toXML(), ids.at(i), false, delClips);
+ }
}
+ m_doc->commandStack()->push(delClips);
}
void ClipManager::deleteClip(const QString &clipId)
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(QString clipId);
const QList <DocClipBase *> getClipByResource(QString resource);
- void slotDeleteClip(const QString & clipId);
+ void slotDeleteClips(QStringList ids);
void setThumbsProgress(const QString &message, int progress);
void checkAudioThumbs();
QList <DocClipBase*> documentClipList() const;
}
}
-void KdenliveDoc::deleteProjectClip(QList <QString> ids)
+void KdenliveDoc::deleteProjectClip(QStringList ids)
{
for (int i = 0; i < ids.size(); ++i) {
emit deleteTimelineClip(ids.at(i));
- m_clipManager->slotDeleteClip(ids.at(i));
}
+ m_clipManager->slotDeleteClips(ids);
setModified(true);
}
int getFramePos(QString duration);
DocClipBase *getBaseClip(const QString &clipId);
void updateClip(const QString id);
- void deleteProjectClip(QList <QString> ids);
+ void deleteProjectClip(QStringList ids);
/** Inform application of the audio thumbnails generation progress */
void setThumbsProgress(const QString &message, int progress);
const QString &profilePath() const;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
-<gui name="kdenlive" version="45">
+<gui name="kdenlive" version="46">
<ToolBar name="extraToolBar" >
<text>Extra Toolbar</text>
<Action name="project_render" />
<Action name="edit_clip" />
<Action name="delete_clip" />
<Separator />
+ <Action name="project_clean" />
<Action name="project_render" />
<Action name="project_settings" />
</Menu>
projectRender->setShortcut(Qt::CTRL + Qt::Key_Return);
connect(projectRender, SIGNAL(triggered(bool)), this, SLOT(slotRenderProject()));
+ KAction* projectClean = new KAction(KIcon("edit-clear"), i18n("Clean Project"), this);
+ collection->addAction("project_clean", projectClean);
+ connect(projectClean, SIGNAL(triggered(bool)), this, SLOT(slotCleanProject()));
+
KAction* monitorPlay = new KAction(KIcon("media-playback-start"), i18n("Play"), this);
KShortcut playShortcut;
playShortcut.setPrimary(Qt::Key_Space);
if (m_renderWidget) m_renderWidget->setRenderStatus(url, status, error);
}
+void MainWindow::slotCleanProject()
+{
+ if (KMessageBox::warningContinueCancel(this, i18n("This will remove all unused clips from your project."), i18n("Clean up project")) == KMessageBox::Cancel) return;
+ m_projectList->cleanup();
+}
+
void MainWindow::slotUpdateMousePosition(int pos)
{
if (m_activeDocument)
void slotUpdateTimecodeFormat(int ix);
/** Removes the focus of anything */
void slotRemoveFocus();
+ void slotCleanProject();
signals:
Q_SCRIPTABLE void abortRenderJob(const QString &url);
}
}
+void ProjectList::cleanup()
+{
+ m_listView->clearSelection();
+ QTreeWidgetItemIterator it(m_listView);
+ ProjectItem *item;
+ while (*it) {
+ item = static_cast <ProjectItem *>(*it);
+ if (item->numReferences() == 0) item->setSelected(true);
+ it++;
+ }
+ slotRemoveClip();
+}
+
void ProjectList::slotReloadClip(const QString &id)
{
QList<QTreeWidgetItem *> selected;
void ProjectList::slotRemoveClip()
{
if (!m_listView->currentItem()) return;
- QList <QString> ids;
+ QStringList ids;
QMap <QString, QString> folderids;
QList<QTreeWidgetItem *> selected = m_listView->selectedItems();
ProjectItem *item;
if (KMessageBox::questionYesNo(this, i18n("Clip <b>%1</b><br>is missing or invalid. Remove it from project?", path), i18n("Invalid clip")) == KMessageBox::Yes) replace = true;
}
}
- QList <QString> ids;
+ QStringList ids;
ids << id;
if (replace) m_doc->deleteProjectClip(ids);
}
extendItem(w,
}
*/
- void drawFocus ( QPainter * painter, const QStyleOptionViewItem & option, const QRect & rect ) const {
+ void drawFocus ( QPainter *, const QStyleOptionViewItem &, const QRect & ) const {
}
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const {
QString currentClipUrl() const;
void reloadClipThumbnails();
QDomDocument generateTemplateXml(QString data, const QString &replaceString);
+ void cleanup();
public slots:
void setDocument(KdenliveDoc *doc);