m_clipMonitorDock = new QDockWidget(i18n("Clip Monitor"), this);
m_clipMonitorDock->setObjectName("clip_monitor");
- m_clipMonitor = new Monitor("clip", m_monitorManager, this);
+ m_clipMonitor = new Monitor("clip", m_monitorManager, QString(), this);
m_clipMonitorDock->setWidget(m_clipMonitor);
addDockWidget(Qt::TopDockWidgetArea, m_clipMonitorDock);
//m_clipMonitor->stop();
m_projectMonitorDock = new QDockWidget(i18n("Project Monitor"), this);
m_projectMonitorDock->setObjectName("project_monitor");
- m_projectMonitor = new Monitor("project", m_monitorManager, this);
+ m_projectMonitor = new Monitor("project", m_monitorManager, QString(), this);
m_projectMonitorDock->setWidget(m_projectMonitor);
addDockWidget(Qt::TopDockWidgetArea, m_projectMonitorDock);
{
m_projectList->setRenderer(m_projectMonitor->render);
- connect(m_projectList, SIGNAL(receivedClipDuration(const QString &)), this, SLOT(slotUpdateClip(const QString &)));
+ //connect(m_projectList, SIGNAL(receivedClipDuration(const QString &)), this, SLOT(slotUpdateClip(const QString &)));
connect(m_projectList, SIGNAL(showClipProperties(DocClipBase *)), this, SLOT(slotShowClipProperties(DocClipBase *)));
connect(m_projectList, SIGNAL(getFileProperties(const QDomElement, const QString &, bool)), m_projectMonitor->render, SLOT(getFileProperties(const QDomElement, const QString &, bool)));
connect(m_projectMonitor->render, SIGNAL(replyGetImage(const QString &, const QPixmap &)), m_projectList, SLOT(slotReplyGetImage(const QString &, const QPixmap &)));
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);
collection->addAction("dvd_wizard", dvdWizard);
connect(dvdWizard, SIGNAL(triggered(bool)), this, SLOT(slotDvdWizard()));
- KAction *transcodeClip = new KAction(KIcon("edit-copy"), i18n("Transcode Clip"), this);
+ KAction *transcodeClip = new KAction(KIcon("edit-copy"), i18n("Transcode Clips"), this);
collection->addAction("transcode_clip", transcodeClip);
connect(transcodeClip, SIGNAL(triggered(bool)), this, SLOT(slotTranscodeClip()));
profileName = KdenliveSettings::default_profile();
projectFolder = KdenliveSettings::defaultprojectfolder();
} else {
- ProjectSettings *w = new ProjectSettings(projectTracks.x(), projectTracks.y(), KdenliveSettings::defaultprojectfolder(), false, true, this);
+ ProjectSettings *w = new ProjectSettings(NULL, projectTracks.x(), projectTracks.y(), KdenliveSettings::defaultprojectfolder(), false, true, this);
if (w->exec() != QDialog::Accepted) return;
if (!KdenliveSettings::activatetabs()) closeCurrentDocument();
KdenliveSettings::setVideothumbnails(w->enableVideoThumbs());
void MainWindow::slotEditProjectSettings()
{
QPoint p = m_activeDocument->getTracksCount();
- ProjectSettings *w = new ProjectSettings(p.x(), p.y(), m_activeDocument->projectFolder().path(), true, !m_activeDocument->isModified(), this);
+ ProjectSettings *w = new ProjectSettings(m_activeDocument->clipManager(), p.x(), p.y(), m_activeDocument->projectFolder().path(), true, !m_activeDocument->isModified(), this);
if (w->exec() == QDialog::Accepted) {
+ if (w->deleteUnused()) {
+ // we are going to trash the unused clips
+ m_projectList->trashUnusedClips();
+ }
QString profile = w->selectedProfile();
m_activeDocument->setProjectFolder(w->selectedFolder());
if (m_renderWidget) m_renderWidget->setDocumentPath(w->selectedFolder().path(KUrl::AddTrailingSlash));
delete w;
}
+
void MainWindow::slotRenderProject()
{
if (!m_renderWidget) {
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)
connect(trackView->projectView(), SIGNAL(clipItemSelected(ClipItem*, int)), m_effectStack, SLOT(slotClipItemSelected(ClipItem*, int)));
+ connect(trackView->projectView(), SIGNAL(updateClipMarkers(DocClipBase *)), this, SLOT(slotUpdateClipMarkers(DocClipBase*)));
+
connect(trackView->projectView(), SIGNAL(clipItemSelected(ClipItem*, int)), this, SLOT(slotActivateEffectStackView()));
connect(trackView->projectView(), SIGNAL(transitionItemSelected(Transition*, int, QPoint, bool)), m_transitionConfig, SLOT(slotTransitionItemSelected(Transition*, int, QPoint, bool)));
connect(trackView->projectView(), SIGNAL(transitionItemSelected(Transition*, int, QPoint, bool)), this, SLOT(slotActivateTransitionView(Transition *)));
connect(m_zoomSlider, SIGNAL(valueChanged(int)), trackView, SLOT(slotChangeZoom(int)));
connect(trackView->projectView(), SIGNAL(zoomIn()), this, SLOT(slotZoomIn()));
connect(trackView->projectView(), SIGNAL(zoomOut()), this, SLOT(slotZoomOut()));
+ connect(trackView, SIGNAL(setZoom(int)), this, SLOT(slotSetZoom(int)));
connect(trackView->projectView(), SIGNAL(displayMessage(const QString&, MessageType)), m_messageLabel, SLOT(setMessage(const QString&, MessageType)));
connect(trackView->projectView(), SIGNAL(showClipFrame(DocClipBase *, const int)), m_clipMonitor, SLOT(slotSetXml(DocClipBase *, const int)));
connect(m_projectList, SIGNAL(loadingIsOver()), trackView->projectView(), SLOT(slotUpdateAllThumbs()));
connect(m_projectList, SIGNAL(displayMessage(const QString&, MessageType)), m_messageLabel, SLOT(setMessage(const QString&, MessageType)));
-
+
trackView->projectView()->setContextMenu(m_timelineContextMenu, m_timelineContextClipMenu, m_timelineContextTransitionMenu, m_clipTypeGroup);
m_activeTimeline = trackView;
if (m_renderWidget) {
}
}
+void MainWindow::slotUpdateClipMarkers(DocClipBase *clip)
+{
+ if (m_clipMonitor->isActive()) m_clipMonitor->checkOverlay();
+ m_clipMonitor->updateMarkers(clip);
+}
+
void MainWindow::slotAddClipMarker()
{
DocClipBase *clip = NULL;
if (m_activeTimeline) {
ClipItem *item = m_activeTimeline->projectView()->getActiveClipUnderCursor();
if (item) {
- pos = (m_projectMonitor->position() - item->startPos() + item->cropStart()) / item->speed();
+ pos = GenTime((int)((m_projectMonitor->position() - item->startPos() + item->cropStart()).frames(m_activeDocument->fps()) * item->speed() + 0.5), m_activeDocument->fps());
clip = item->baseClip();
}
}
if (d.exec() == QDialog::Accepted) {
m_activeTimeline->projectView()->slotAddClipMarker(id, d.newMarker().time(), d.newMarker().comment());
}
- if (m_clipMonitor->isActive()) m_clipMonitor->checkOverlay();
}
void MainWindow::slotDeleteClipMarker()
return;
}
m_activeTimeline->projectView()->slotDeleteClipMarker(comment, id, pos);
- if (m_clipMonitor->isActive()) m_clipMonitor->checkOverlay();
-
}
void MainWindow::slotDeleteAllClipMarkers()
return;
}
m_activeTimeline->projectView()->slotDeleteAllClipMarkers(clip->getId());
- if (m_clipMonitor->isActive()) m_clipMonitor->checkOverlay();
}
void MainWindow::slotEditClipMarker()
// remove old marker
m_activeTimeline->projectView()->slotAddClipMarker(id, pos, QString());
}
- if (m_clipMonitor->isActive()) m_clipMonitor->checkOverlay();
}
}
}
}
+void MainWindow::slotSetZoom(int value)
+{
+ m_zoomSlider->setValue(value);
+}
+
void MainWindow::slotGotProgressInfo(const QString &message, int progress)
{
m_statusProgressBar->setValue(progress);
EditClipCommand *command = new EditClipCommand(m_projectList, clip->getId(), clip->properties(), dia.properties(), true);
m_activeDocument->commandStack()->push(command);
- //m_projectList->slotUpdateClipProperties(dia.clipId(), dia.properties());
if (dia.needsTimelineRefresh()) {
// update clip occurences in timeline
- m_activeTimeline->projectView()->slotUpdateClip(clip->getId());
+ m_activeTimeline->projectView()->slotUpdateClip(clip->getId(), dia.needsTimelineReload());
}
}
}
void MainWindow::slotDvdWizard(const QString &url, const QString &profile)
{
- DvdWizard *w = new DvdWizard(url, profile, this);
- w->exec();
+ // We must stop the monitors since we create a new on in the dvd wizard
+ m_clipMonitor->stop();
+ m_projectMonitor->stop();
+ DvdWizard w(url, profile, this);
+ w.exec();
+ m_projectMonitor->start();
}
void MainWindow::slotShowTimeline(bool show)