X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=inline;f=src%2Fmainwindow.cpp;h=2c027607005a24b1298106e44dc04d99683cd285;hb=275e207f38af32d0d84578fd904bce9ed067a25e;hp=ccf544b8af1f1e3a0a7c99553b27afc6c78e13e1;hpb=104feb68ab9d5ba11892253d1460a3ba211d0af9;p=kdenlive diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index ccf544b8..2c027607 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -70,6 +70,7 @@ #include #include #include +#include #include #include #include @@ -173,6 +174,8 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, QWidget *parent actionCollection()); readOptions(); + slotDetectAudioDriver(); + m_clipMonitorDock = new QDockWidget(i18n("Clip Monitor"), this); m_clipMonitorDock->setObjectName("clip_monitor"); m_clipMonitor = new Monitor("clip", m_monitorManager, this); @@ -801,7 +804,7 @@ void MainWindow::setupActions() collection->addAction("manage_profiles", profilesAction); connect(profilesAction, SIGNAL(triggered(bool)), this, SLOT(slotEditProfiles())); - KNS::standardAction(i18n("Download New Lumas..."), this, SLOT(slotGetNewLumaStuff()), actionCollection(), "get_new_lumas"); + KNS::standardAction(i18n("Download New Wipes..."), this, SLOT(slotGetNewLumaStuff()), actionCollection(), "get_new_lumas"); KNS::standardAction(i18n("Download New Render Profiles..."), this, SLOT(slotGetNewRenderStuff()), actionCollection(), "get_new_profiles"); @@ -1210,6 +1213,7 @@ void MainWindow::newFile(bool showProjectSettings) if (!showProjectSettings && m_timelineArea->count() == 0) { if (!KdenliveSettings::activatetabs()) closeCurrentDocument(); profileName = KdenliveSettings::default_profile(); + projectFolder = KdenliveSettings::defaultprojectfolder(); } else { ProjectSettings *w = new ProjectSettings(projectTracks.x(), projectTracks.y(), KdenliveSettings::defaultprojectfolder(), false, this); if (w->exec() != QDialog::Accepted) return; @@ -1261,6 +1265,7 @@ void MainWindow::closeCurrentDocument() break; case KMessageBox::Cancel : return; + break; default: break; } @@ -1270,13 +1275,16 @@ void MainWindow::closeCurrentDocument() m_timelineArea->setTabBarHidden(true); m_closeAction->setEnabled(false); } - delete docToClose; - delete w; - if (m_timelineArea->count() == 0) { + if (docToClose == m_activeDocument) { + delete m_activeDocument; m_activeDocument = NULL; m_effectStack->clear(); - m_transitionConfig->slotTransitionItemSelected(NULL, false); - } + m_transitionConfig->slotTransitionItemSelected(NULL, QPoint(), false); + } else delete docToClose; + if (w == m_activeTimeline) { + delete m_activeTimeline; + m_activeTimeline = NULL; + } else delete w; } bool MainWindow::saveFileAs(const QString &outputFileName) @@ -1398,7 +1406,7 @@ void MainWindow::openFile(const KUrl &url) void MainWindow::doOpenFile(const KUrl &url, KAutoSaveFile *stale) { - KdenliveDoc *doc = new KdenliveDoc(url, KUrl(), m_commandStack, QString(), QPoint(3, 2), m_projectMonitor->render, this); + KdenliveDoc *doc = new KdenliveDoc(url, KdenliveSettings::defaultprojectfolder(), m_commandStack, KdenliveSettings::default_profile(), QPoint(KdenliveSettings::videotracks(), KdenliveSettings::audiotracks()), m_projectMonitor->render, this); if (stale == NULL) { stale = new KAutoSaveFile(url, doc); doc->m_autosave = stale; @@ -1516,6 +1524,31 @@ void MainWindow::slotEditProfiles() delete w; } +void MainWindow::slotDetectAudioDriver() +{ + //decide which audio driver is really best, in some cases SDL is wrong + if (KdenliveSettings::audiodrivername().isEmpty()) { + QString driver; + KProcess readProcess; + //PulseAudio needs to be selected if it exists, the ALSA pulse pcm device is not fast enough. + if (!KStandardDirs::findExe("pactl").isEmpty()) { + readProcess.setOutputChannelMode(KProcess::OnlyStdoutChannel); + readProcess.setProgram("pactl", QStringList() << "stat"); + readProcess.execute(2000); // Kill it after 2 seconds + + QString result = QString(readProcess.readAllStandardOutput()); + kDebug() << "// / / / / / READING PACTL: "; + kDebug() << result; + if (!result.isEmpty()) { + driver = "pulse"; + kDebug() << "// / / / / PULSEAUDIO DETECTED"; + } + } + //put others here + KdenliveSettings::setAutoaudiodrivername(driver); + } +} + void MainWindow::slotEditProjectSettings() { QPoint p = m_activeDocument->getTracksCount(); @@ -1527,6 +1560,7 @@ void MainWindow::slotEditProjectSettings() if (m_renderWidget) m_renderWidget->setDocumentPath(w->selectedFolder().path()); if (m_activeDocument->profilePath() != profile) { // Profile was changed + double dar = m_activeDocument->dar(); m_activeDocument->setProfilePath(profile); KdenliveSettings::setCurrent_profile(profile); KdenliveSettings::setProject_fps(m_activeDocument->fps()); @@ -1535,7 +1569,7 @@ void MainWindow::slotEditProjectSettings() 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(); // We need to desactivate & reactivate monitors to get a refresh m_monitorManager->switchMonitors(); } @@ -1781,8 +1815,8 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //cha disconnect(m_activeDocument, SIGNAL(deleteTimelineClip(const QString &)), m_activeTimeline, SLOT(slotDeleteClip(const QString &))); disconnect(m_activeTimeline->projectView(), SIGNAL(clipItemSelected(ClipItem*, int)), m_effectStack, SLOT(slotClipItemSelected(ClipItem*, int))); disconnect(m_activeTimeline->projectView(), SIGNAL(clipItemSelected(ClipItem*, int)), this, SLOT(slotActivateEffectStackView())); - disconnect(m_activeTimeline, SIGNAL(transitionItemSelected(Transition*, bool)), m_transitionConfig, SLOT(slotTransitionItemSelected(Transition*, bool))); - disconnect(m_activeTimeline, SIGNAL(transitionItemSelected(Transition*, bool)), this, SLOT(slotActivateTransitionView(Transition *))); + disconnect(m_activeTimeline, SIGNAL(transitionItemSelected(Transition*, QPoint, bool)), m_transitionConfig, SLOT(slotTransitionItemSelected(Transition*, QPoint, bool))); + disconnect(m_activeTimeline, SIGNAL(transitionItemSelected(Transition*, QPoint, bool)), this, SLOT(slotActivateTransitionView(Transition *))); disconnect(m_zoomSlider, SIGNAL(valueChanged(int)), m_activeTimeline, SLOT(slotChangeZoom(int))); disconnect(m_activeTimeline->projectView(), SIGNAL(displayMessage(const QString&, MessageType)), m_messageLabel, SLOT(setMessage(const QString&, MessageType))); disconnect(m_activeTimeline->projectView(), SIGNAL(showClipFrame(DocClipBase *, const int)), m_clipMonitor, SLOT(slotSetXml(DocClipBase *, const int))); @@ -1841,8 +1875,8 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //cha connect(trackView->projectView(), SIGNAL(clipItemSelected(ClipItem*, int)), m_effectStack, SLOT(slotClipItemSelected(ClipItem*, int))); connect(trackView->projectView(), SIGNAL(clipItemSelected(ClipItem*, int)), this, SLOT(slotActivateEffectStackView())); - connect(trackView, SIGNAL(transitionItemSelected(Transition*, bool)), m_transitionConfig, SLOT(slotTransitionItemSelected(Transition*, bool))); - connect(trackView, SIGNAL(transitionItemSelected(Transition*, bool)), this, SLOT(slotActivateTransitionView(Transition *))); + connect(trackView, SIGNAL(transitionItemSelected(Transition*, QPoint, bool)), m_transitionConfig, SLOT(slotTransitionItemSelected(Transition*, QPoint, bool))); + connect(trackView, SIGNAL(transitionItemSelected(Transition*, QPoint, bool)), this, SLOT(slotActivateTransitionView(Transition *))); m_zoomSlider->setValue(doc->zoom()); connect(m_zoomSlider, SIGNAL(valueChanged(int)), trackView, SLOT(slotChangeZoom(int))); connect(trackView->projectView(), SIGNAL(zoomIn()), this, SLOT(slotZoomIn())); @@ -1916,6 +1950,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()), m_monitorManager, SLOT(slotResetProfiles())); connect(dialog, SIGNAL(updatePreviewSettings()), this, SLOT(slotUpdatePreviewSettings())); connect(dialog, SIGNAL(updateCaptureFolder()), m_recMonitor, SLOT(slotUpdateCaptureFolder())); @@ -2293,6 +2328,7 @@ void MainWindow::slotShowClipProperties(DocClipBase *clip) //m_clipManager->slotEditTextClipFile(id, dia_ui->xml().toString()); QMap newprops; newprops.insert("xmldata", dia_ui->xml().toString()); + newprops.insert("frame_size", QString::number(pix.width()) + 'x' + QString::number(pix.height())); EditClipCommand *command = new EditClipCommand(m_projectList, clip->getId(), clip->properties(), newprops, true); m_activeDocument->commandStack()->push(command); m_clipMonitor->refreshMonitor(true); @@ -2557,6 +2593,7 @@ void MainWindow::slotGetNewLumaStuff() } qDeleteAll(entries); initEffects::refreshLumas(); + m_activeTimeline->projectView()->reloadTransitionLumas(); } void MainWindow::slotGetNewRenderStuff()