]> git.sesse.net Git - kdenlive/blobdiff - src/mainwindow.cpp
Changing the timecode format in statur bar (from hh:mm:ss:ff to frames) now also...
[kdenlive] / src / mainwindow.cpp
index cba1a86369f3aa1deb29cd341231c7aac862ab79..8dde1eb817556b477f45f4872ce574051d78b8f5 100644 (file)
@@ -176,7 +176,7 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, QWidget *parent
                        actionCollection());
     readOptions();
 
-    slotDetectAudioDriver();
+    //slotDetectAudioDriver();
 
     m_clipMonitorDock = new QDockWidget(i18n("Clip Monitor"), this);
     m_clipMonitorDock->setObjectName("clip_monitor");
@@ -328,7 +328,6 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, QWidget *parent
     m_timelineContextMenu->addAction(actionCollection()->action(KStandardAction::name(KStandardAction::Paste)));
 
     m_timelineContextClipMenu->addAction(actionCollection()->action("delete_timeline_clip"));
-    m_timelineContextClipMenu->addAction(actionCollection()->action("change_clip_speed"));
     m_timelineContextClipMenu->addAction(actionCollection()->action("group_clip"));
     m_timelineContextClipMenu->addAction(actionCollection()->action("ungroup_clip"));
     m_timelineContextClipMenu->addAction(actionCollection()->action("cut_timeline_clip"));
@@ -381,8 +380,12 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, QWidget *parent
 
 void MainWindow::queryQuit()
 {
-    kDebug() << "----- SAVING CONFUIG";
     if (queryClose()) {
+        delete m_effectStack;
+        delete m_activeTimeline;
+        delete m_projectMonitor;
+        delete m_clipMonitor;
+        delete m_activeDocument;
         Mlt::Factory::close();
         kapp->quit();
     }
@@ -653,6 +656,8 @@ void MainWindow::setupActions()
     m_timecodeFormat = new KComboBox(this);
     m_timecodeFormat->addItem(i18n("hh:mm:ss::ff"));
     m_timecodeFormat->addItem(i18n("Frames"));
+    if (KdenliveSettings::frametimecode()) m_timecodeFormat->setCurrentIndex(1);
+    connect(m_timecodeFormat, SIGNAL(activated(int)), this, SLOT(slotUpdateTimecodeFormat(int)));
 
     m_statusProgressBar = new QProgressBar(this);
     m_statusProgressBar->setMinimum(0);
@@ -790,7 +795,6 @@ void MainWindow::setupActions()
     statusBar()->insertPermanentFixedItem("00:00:00:00", ID_TIMELINE_POS);
     statusBar()->addPermanentWidget(m_timecodeFormat);
     statusBar()->setMaximumHeight(statusBar()->font().pointSize() * 4);
-    m_messageLabel->hide();
 
     collection->addAction("select_tool", m_buttonSelectTool);
     collection->addAction("razor_tool", m_buttonRazorTool);
@@ -947,10 +951,10 @@ void MainWindow::setupActions()
     collection->addAction("delete_timeline_clip", deleteTimelineClip);
     connect(deleteTimelineClip, SIGNAL(triggered(bool)), this, SLOT(slotDeleteTimelineClip()));
 
-    KAction* editTimelineClipSpeed = new KAction(i18n("Change Clip Speed"), this);
+    /*KAction* editTimelineClipSpeed = new KAction(i18n("Change Clip Speed"), this);
     collection->addAction("change_clip_speed", editTimelineClipSpeed);
     editTimelineClipSpeed->setData("change_speed");
-    connect(editTimelineClipSpeed, SIGNAL(triggered(bool)), this, SLOT(slotChangeClipSpeed()));
+    connect(editTimelineClipSpeed, SIGNAL(triggered(bool)), this, SLOT(slotChangeClipSpeed()));*/
 
     KAction *stickTransition = collection->addAction("auto_transition");
     stickTransition->setData(QString("auto"));
@@ -1575,6 +1579,9 @@ void MainWindow::slotEditProfiles()
 
 void MainWindow::slotDetectAudioDriver()
 {
+    /* WARNING: do not use this method because sometimes detects wrong driver (pulse instead of alsa),
+    leading to no audio output, see bug #934 */
+
     //decide which audio driver is really best, in some cases SDL is wrong
     if (KdenliveSettings::audiodrivername().isEmpty()) {
         QString driver;
@@ -1610,15 +1617,23 @@ void MainWindow::slotEditProjectSettings()
         if (m_activeDocument->profilePath() != profile) {
             // Profile was changed
             double dar = m_activeDocument->dar();
+
+            // Deselect current effect / transition
+            m_effectStack->slotClipItemSelected(NULL, 0);
+            m_transitionConfig->slotTransitionItemSelected(NULL, 0, QPoint(), false);
+
             m_activeDocument->setProfilePath(profile);
             KdenliveSettings::setCurrent_profile(profile);
             KdenliveSettings::setProject_fps(m_activeDocument->fps());
             setCaption(m_activeDocument->description(), m_activeDocument->isModified());
             m_monitorManager->resetProfiles(m_activeDocument->timecode());
+            m_transitionConfig->updateProjectFormat(m_activeDocument->mltProfile(), m_activeDocument->timecode(), m_activeTimeline->tracksNumber());
+            m_effectStack->updateProjectFormat(m_activeDocument->mltProfile(), m_activeDocument->timecode());
             if (m_renderWidget) m_renderWidget->setProfile(m_activeDocument->mltProfile());
             m_timelineArea->setTabText(m_timelineArea->currentIndex(), m_activeDocument->description());
             m_activeDocument->clipManager()->resetProducersList(m_projectMonitor->render->producersList());
             if (dar != m_activeDocument->dar()) m_projectList->reloadClipThumbnails();
+            m_activeTimeline->updateProjectFps();
             // We need to desactivate & reactivate monitors to get a refresh
             m_monitorManager->switchMonitors();
         }
@@ -1825,6 +1840,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc)   //cha
     setCaption(doc->description(), doc->isModified());
     m_saveAction->setEnabled(doc->isModified());
     m_activeDocument = doc;
+    m_activeTimeline->updateProjectFps();
     if (KdenliveSettings::dropbframes()) slotUpdatePreviewSettings();
 
     // set tool to select tool
@@ -1857,7 +1873,7 @@ void MainWindow::slotPreferences(int page, int option)
     // create it :
     KdenliveSettingsDialog* dialog = new KdenliveSettingsDialog(this);
     connect(dialog, SIGNAL(settingsChanged(const QString&)), this, SLOT(updateConfiguration()));
-    connect(dialog, SIGNAL(doResetProfile()), this, SLOT(slotDetectAudioDriver()));
+    //connect(dialog, SIGNAL(doResetProfile()), this, SLOT(slotDetectAudioDriver()));
     connect(dialog, SIGNAL(doResetProfile()), m_monitorManager, SLOT(slotResetProfiles()));
     connect(dialog, SIGNAL(updatePreviewSettings()), this, SLOT(slotUpdatePreviewSettings()));
     connect(dialog, SIGNAL(updateCaptureFolder()), m_recMonitor, SLOT(slotUpdateCaptureFolder()));
@@ -1939,13 +1955,6 @@ void MainWindow::slotDeleteTimelineClip()
     }
 }
 
-void MainWindow::slotChangeClipSpeed()
-{
-    if (m_activeTimeline) {
-        m_activeTimeline->projectView()->changeClipSpeed();
-    }
-}
-
 void MainWindow::slotAddClipMarker()
 {
     DocClipBase *clip = NULL;
@@ -2280,7 +2289,7 @@ void MainWindow::slotShowClipProperties(DocClipBase *clip)
             return;
         }
         QString path = clip->getProperty("resource");
-        TitleWidget *dia_ui = new TitleWidget(KUrl(), titlepath, m_projectMonitor->render, this);
+        TitleWidget *dia_ui = new TitleWidget(KUrl(), m_activeDocument->timecode(), titlepath, m_projectMonitor->render, this);
         QDomDocument doc;
         doc.setContent(clip->getProperty("xmldata"));
         dia_ui->setXml(doc);
@@ -2288,6 +2297,7 @@ void MainWindow::slotShowClipProperties(DocClipBase *clip)
             QRect rect = dia_ui->renderedRect();
             QMap <QString, QString> newprops;
             newprops.insert("xmldata", dia_ui->xml().toString());
+            newprops.insert("out", QString::number(dia_ui->duration()));
             newprops.insert("frame_size", QString::number(rect.width()) + 'x' + QString::number(rect.height()));
             EditClipCommand *command = new EditClipCommand(m_projectList, clip->getId(), clip->properties(), newprops, true);
             m_activeDocument->commandStack()->push(command);
@@ -2315,8 +2325,7 @@ void MainWindow::slotShowClipProperties(DocClipBase *clip)
 void MainWindow::customEvent(QEvent* e)
 {
     if (e->type() == QEvent::User) {
-        // The timeline playing position changed...
-        kDebug() << "RECEIVED JOG EVEMNT!!!";
+        m_messageLabel->setMessage(static_cast <MltErrorEvent *>(e)->message(), MltError);
     }
 }
 void MainWindow::slotActivateEffectStackView()
@@ -2496,6 +2505,7 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *event)
     }
 }
 
+
 void MainWindow::slotSaveZone(Render *render, QPoint zone)
 {
     KDialog *dialog = new KDialog(this);
@@ -2787,4 +2797,14 @@ void MainWindow::slotPrepareRendering(bool scriptExport, bool zoneOnly, const QS
     m_renderWidget->slotExport(scriptExport, m_activeTimeline->inPoint(), m_activeTimeline->outPoint(), playlistPath, scriptPath);
 }
 
+void MainWindow::slotUpdateTimecodeFormat(int ix)
+{
+    KdenliveSettings::setFrametimecode(ix == 1);
+    m_clipMonitor->updateTimecodeFormat();
+    m_projectMonitor->updateTimecodeFormat();
+}
+
+
+
+
 #include "mainwindow.moc"