diff -Nru kdenlive-16.07.70+git20160630.c10f66e0/debian/changelog kdenlive-16.07.70+git20160701.3dc330cd/debian/changelog --- kdenlive-16.07.70+git20160630.c10f66e0/debian/changelog 2016-06-30 07:21:32.000000000 +0000 +++ kdenlive-16.07.70+git20160701.3dc330cd/debian/changelog 2016-07-01 08:17:46.000000000 +0000 @@ -1,3 +1,9 @@ +kdenlive (4:16.07.70+git20160701.3dc330cd-0ubuntu0~sunab~wily1) wily; urgency=low + + * new git snapshot + + -- Olivier Banus Fri, 01 Jul 2016 10:17:46 +0200 + kdenlive (4:16.07.70+git20160630.c10f66e0-0ubuntu0~sunab~wily1) wily; urgency=low * new git snapshot diff -Nru kdenlive-16.07.70+git20160630.c10f66e0/src/bin/bin.cpp kdenlive-16.07.70+git20160701.3dc330cd/src/bin/bin.cpp --- kdenlive-16.07.70+git20160630.c10f66e0/src/bin/bin.cpp 2016-06-30 07:21:31.000000000 +0000 +++ kdenlive-16.07.70+git20160701.3dc330cd/src/bin/bin.cpp 2016-07-01 08:17:46.000000000 +0000 @@ -444,8 +444,11 @@ m_cancelJobs->setCheckable(false); m_discardCurrentClipJobs = new QAction(i18n("Cancel Current Clip Jobs"), this); m_discardCurrentClipJobs->setCheckable(false); + m_discardPendingJobs = new QAction(i18n("Cancel Pending Jobs"), this); + m_discardPendingJobs->setCheckable(false); m_jobsMenu->addAction(m_cancelJobs); m_jobsMenu->addAction(m_discardCurrentClipJobs); + m_jobsMenu->addAction(m_discardPendingJobs); m_infoLabel->setMenu(m_jobsMenu); m_infoLabel->setAction(infoAction); @@ -977,6 +980,7 @@ connect(m_jobManager, SIGNAL(jobCount(int)), m_infoLabel, SLOT(slotSetJobCount(int))); connect(m_discardCurrentClipJobs, SIGNAL(triggered()), m_jobManager, SLOT(slotDiscardClipJobs())); connect(m_cancelJobs, SIGNAL(triggered()), m_jobManager, SLOT(slotCancelJobs())); + connect(m_discardPendingJobs, SIGNAL(triggered()), m_jobManager, SLOT(slotCancelPendingJobs())); connect(m_jobManager, SIGNAL(updateJobStatus(QString,int,int,QString,QString,QString)), this, SLOT(slotUpdateJobStatus(QString,int,int,QString,QString,QString))); connect(m_jobManager, SIGNAL(gotFilterJobResults(QString,int,int,stringMap,stringMap)), this, SLOT(slotGotFilterJobResults(QString,int,int,stringMap,stringMap))); @@ -2092,11 +2096,12 @@ d.exec(); } -void Bin::gotProxy(const QString &id) +void Bin::gotProxy(const QString &id, const QString &path) { ProjectClip *clip = m_rootFolder->clip(id); if (clip) { QDomDocument doc; + clip->setProducerProperty(QStringLiteral("kdenlive:proxy"), path); QDomElement xml = clip->toXml(doc, true); if (!xml.isNull()) m_doc->getFileProperties(xml, id, 150, true); } diff -Nru kdenlive-16.07.70+git20160630.c10f66e0/src/bin/bin.h kdenlive-16.07.70+git20160701.3dc330cd/src/bin/bin.h --- kdenlive-16.07.70+git20160630.c10f66e0/src/bin/bin.h 2016-06-30 07:21:31.000000000 +0000 +++ kdenlive-16.07.70+git20160701.3dc330cd/src/bin/bin.h 2016-07-01 08:17:46.000000000 +0000 @@ -426,7 +426,7 @@ const QString getDocumentProperty(const QString &key); /** @brief A proxy clip was just created, pass it to the responsible item */ - void gotProxy(const QString &id); + void gotProxy(const QString &id, const QString &path); /** @brief Get the document's renderer frame size */ const QSize getRenderSize(); @@ -693,6 +693,7 @@ QMenu *m_jobsMenu; QAction *m_cancelJobs; QAction *m_discardCurrentClipJobs; + QAction *m_discardPendingJobs; SmallJobLabel *m_infoLabel; /** @brief The info widget for failed jobs. */ BinMessageWidget *m_infoMessage; diff -Nru kdenlive-16.07.70+git20160630.c10f66e0/src/dialogs/kdenlivesettingsdialog.cpp kdenlive-16.07.70+git20160701.3dc330cd/src/dialogs/kdenlivesettingsdialog.cpp --- kdenlive-16.07.70+git20160630.c10f66e0/src/dialogs/kdenlivesettingsdialog.cpp 2016-06-30 07:21:31.000000000 +0000 +++ kdenlive-16.07.70+git20160701.3dc330cd/src/dialogs/kdenlivesettingsdialog.cpp 2016-07-01 08:17:46.000000000 +0000 @@ -282,7 +282,17 @@ act = new QAction(KoIconUtils::themedIcon(QStringLiteral("configure")), i18n("Configure profiles"), this); act->setData(1); connect(act, SIGNAL(triggered(bool)), this, SLOT(slotManageEncodingProfile())); - m_configTimeline.tl_manageprofile->setDefaultAction(act); + m_configProject.preview_manageprofile->setDefaultAction(act); + connect(m_configProject.kcfg_preview_profile, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdatePreviewProfile())); + connect(m_configProject.preview_showprofileinfo, SIGNAL(clicked(bool)), m_configProject.previewparams, SLOT(setVisible(bool))); + m_configProject.previewparams->setVisible(false); + m_configProject.previewparams->setMaximumHeight(QFontMetrics(font()).lineSpacing() * 3); + m_configProject.previewparams->setPlainText(KdenliveSettings::previewparams()); + m_configProject.preview_showprofileinfo->setIcon(KoIconUtils::themedIcon(QStringLiteral("help-about"))); + m_configProject.preview_showprofileinfo->setToolTip(i18n("Show default timeline preview parameters")); + m_configProject.preview_manageprofile->setIcon(KoIconUtils::themedIcon(QStringLiteral("configure"))); + m_configProject.preview_manageprofile->setToolTip(i18n("Manage timeline preview profiles")); + m_configProject.kcfg_preview_profile->setToolTip(i18n("Select default timeline preview profile")); // Project profile management m_configProject.manage_profiles->setIcon(KoIconUtils::themedIcon("configure")); @@ -296,7 +306,7 @@ m_configProject.proxy_manageprofile->setToolTip(i18n("Manage proxy profiles")); m_configProject.kcfg_proxy_profile->setToolTip(i18n("Select default proxy profile")); m_configProject.proxyparams->setVisible(false); - m_configProject.proxyparams->setMaximumHeight(QFontMetrics(font()).lineSpacing() * 4); + m_configProject.proxyparams->setMaximumHeight(QFontMetrics(font()).lineSpacing() * 3); m_configProject.proxyparams->setPlainText(KdenliveSettings::proxyparams()); act = new QAction(KoIconUtils::themedIcon(QStringLiteral("configure")), i18n("Configure profiles"), this); @@ -800,6 +810,13 @@ KdenliveSettings::setProxyextension(data.section(';', 1, 1)); } + // timeline preview + data = m_configProject.kcfg_preview_profile->itemData(m_configProject.kcfg_preview_profile->currentIndex()).toString(); + if (!data.isEmpty() && (data.section(';', 0, 0) != KdenliveSettings::previewparams() || data.section(';', 1, 1) != KdenliveSettings::previewextension())) { + KdenliveSettings::setPreviewparams(data.section(';', 0, 0)); + KdenliveSettings::setPreviewextension(data.section(';', 1, 1)); + } + if (updateCapturePath) emit updateCaptureFolder(); if (updateLibrary) emit updateLibraryFolder(); @@ -1219,6 +1236,27 @@ } m_configCapture.kcfg_decklink_profile->blockSignals(false); if (!currentItem.isEmpty()) m_configCapture.kcfg_decklink_profile->setCurrentIndex(m_configCapture.kcfg_decklink_profile->findText(currentItem)); + + // Load Timeline Preview profiles + m_configProject.kcfg_preview_profile->blockSignals(true); + currentItem = m_configProject.kcfg_preview_profile->currentText(); + m_configProject.kcfg_preview_profile->clear(); + KConfigGroup group5(&conf, "timelinepreview"); + values = group5.entryMap(); + m_configProject.kcfg_preview_profile->addItem(i18n("Automatic")); + QMapIterator l(values); + while (l.hasNext()) { + l.next(); + if (!l.key().isEmpty()) m_configProject.kcfg_preview_profile->addItem(l.key(), l.value()); + } + if (!currentItem.isEmpty()) m_configProject.kcfg_preview_profile->setCurrentIndex(m_configProject.kcfg_preview_profile->findText(currentItem)); + m_configProject.kcfg_preview_profile->blockSignals(false); + QString data = m_configProject.kcfg_preview_profile->itemData(m_configProject.kcfg_preview_profile->currentIndex()).toString(); + if (data.isEmpty()) { + m_configProject.previewparams->clear(); + } else { + m_configProject.previewparams->setPlainText(data.section(';', 0, 0)); + } // Load Proxy profiles m_configProject.kcfg_proxy_profile->blockSignals(true); @@ -1226,14 +1264,19 @@ m_configProject.kcfg_proxy_profile->clear(); KConfigGroup group4(&conf, "proxy"); values = group4.entryMap(); - QMapIterator l(values); - while (l.hasNext()) { - l.next(); - if (!l.key().isEmpty()) m_configProject.kcfg_proxy_profile->addItem(l.key(), l.value()); + QMapIterator m(values); + while (m.hasNext()) { + m.next(); + if (!m.key().isEmpty()) m_configProject.kcfg_proxy_profile->addItem(m.key(), m.value()); } if (!currentItem.isEmpty()) m_configProject.kcfg_proxy_profile->setCurrentIndex(m_configProject.kcfg_proxy_profile->findText(currentItem)); m_configProject.kcfg_proxy_profile->blockSignals(false); - slotUpdateProxyProfile(); + data = m_configProject.kcfg_proxy_profile->itemData(m_configProject.kcfg_proxy_profile->currentIndex()).toString(); + if (data.isEmpty()) { + m_configProject.proxyparams->clear(); + } else { + m_configProject.proxyparams->setPlainText(data.section(';', 0, 0)); + } } void KdenliveSettingsDialog::slotUpdateDecklinkProfile(int ix) @@ -1268,13 +1311,22 @@ void KdenliveSettingsDialog::slotUpdateProxyProfile(int ix) { - if (ix == -1) ix = KdenliveSettings::v4l_profile(); + if (ix == -1) ix = KdenliveSettings::proxy_profile(); else ix = m_configProject.kcfg_proxy_profile->currentIndex(); QString data = m_configProject.kcfg_proxy_profile->itemData(ix).toString(); if (data.isEmpty()) return; m_configProject.proxyparams->setPlainText(data.section(';', 0, 0)); } +void KdenliveSettingsDialog::slotUpdatePreviewProfile(int ix) +{ + if (ix == -1) ix = KdenliveSettings::preview_profile(); + else ix = m_configProject.kcfg_preview_profile->currentIndex(); + QString data = m_configProject.kcfg_preview_profile->itemData(ix).toString(); + if (data.isEmpty()) return; + m_configProject.previewparams->setPlainText(data.section(';', 0, 0)); +} + void KdenliveSettingsDialog::slotEditVideo4LinuxProfile() { QString vl4ProfilePath = QStandardPaths::writableLocation(QStandardPaths::DataLocation) + "/profiles/video4linux"; diff -Nru kdenlive-16.07.70+git20160630.c10f66e0/src/dialogs/kdenlivesettingsdialog.h kdenlive-16.07.70+git20160701.3dc330cd/src/dialogs/kdenlivesettingsdialog.h --- kdenlive-16.07.70+git20160630.c10f66e0/src/dialogs/kdenlivesettingsdialog.h 2016-06-30 07:21:31.000000000 +0000 +++ kdenlive-16.07.70+git20160701.3dc330cd/src/dialogs/kdenlivesettingsdialog.h 2016-07-01 08:17:46.000000000 +0000 @@ -77,6 +77,7 @@ void slotManageEncodingProfile(); void slotUpdateDecklinkProfile(int ix = 0); void slotUpdateProxyProfile(int ix = 0); + void slotUpdatePreviewProfile(int ix = 0); void slotUpdateV4lProfile(int ix = 0); void slotUpdateGrabProfile(int ix = 0); void slotEditVideo4LinuxProfile(); diff -Nru kdenlive-16.07.70+git20160630.c10f66e0/src/doc/kdenlivedoc.cpp kdenlive-16.07.70+git20160701.3dc330cd/src/doc/kdenlivedoc.cpp --- kdenlive-16.07.70+git20160630.c10f66e0/src/doc/kdenlivedoc.cpp 2016-06-30 07:21:31.000000000 +0000 +++ kdenlive-16.07.70+git20160701.3dc330cd/src/doc/kdenlivedoc.cpp 2016-07-01 08:17:46.000000000 +0000 @@ -130,6 +130,8 @@ m_documentProperties[QStringLiteral("enableproxy")] = QString::number((int) KdenliveSettings::enableproxy()); m_documentProperties[QStringLiteral("proxyparams")] = KdenliveSettings::proxyparams(); m_documentProperties[QStringLiteral("proxyextension")] = KdenliveSettings::proxyextension(); + m_documentProperties[QStringLiteral("previewparams")] = KdenliveSettings::previewparams(); + m_documentProperties[QStringLiteral("previewextension")] = KdenliveSettings::previewextension(); m_documentProperties[QStringLiteral("generateproxy")] = QString::number((int) KdenliveSettings::generateproxy()); m_documentProperties[QStringLiteral("proxyminsize")] = QString::number(KdenliveSettings::proxyminsize()); m_documentProperties[QStringLiteral("generateimageproxy")] = QString::number((int) KdenliveSettings::generateimageproxy()); @@ -1539,6 +1541,11 @@ void KdenliveDoc::selectPreviewProfile() { // Read preview profiles and find the best match + if (!KdenliveSettings::previewparams().isEmpty()) { + setDocumentProperty(QStringLiteral("previewparameters"), KdenliveSettings::previewparams()); + setDocumentProperty(QStringLiteral("previewextension"), KdenliveSettings::previewextension()); + return; + } KConfig conf(QStringLiteral("encodingprofiles.rc"), KConfig::CascadeConfig, QStandardPaths::DataLocation); KConfigGroup group(&conf, "timelinepreview"); QMap< QString, QString > values = group.entryMap(); diff -Nru kdenlive-16.07.70+git20160630.c10f66e0/src/kdenlivesettings.kcfg kdenlive-16.07.70+git20160701.3dc330cd/src/kdenlivesettings.kcfg --- kdenlive-16.07.70+git20160630.c10f66e0/src/kdenlivesettings.kcfg 2016-06-30 07:21:31.000000000 +0000 +++ kdenlive-16.07.70+git20160701.3dc330cd/src/kdenlivesettings.kcfg 2016-07-01 08:17:46.000000000 +0000 @@ -156,6 +156,20 @@ + + + + + + + + 0 + + + + + + diff -Nru kdenlive-16.07.70+git20160630.c10f66e0/src/project/dialogs/projectsettings.cpp kdenlive-16.07.70+git20160701.3dc330cd/src/project/dialogs/projectsettings.cpp --- kdenlive-16.07.70+git20160630.c10f66e0/src/project/dialogs/projectsettings.cpp 2016-06-30 07:21:31.000000000 +0000 +++ kdenlive-16.07.70+git20160701.3dc330cd/src/project/dialogs/projectsettings.cpp 2016-07-01 08:17:46.000000000 +0000 @@ -91,7 +91,7 @@ generate_imageproxy->setChecked(doc->getDocumentProperty(QStringLiteral("generateimageproxy")).toInt()); proxy_imageminsize->setValue(doc->getDocumentProperty(QStringLiteral("proxyimageminsize")).toInt()); m_proxyextension = doc->getDocumentProperty(QStringLiteral("proxyextension")); - m_previewparams = doc->getDocumentProperty(QStringLiteral("previewparameters")); + m_previewparams = doc->getDocumentProperty(QStringLiteral("previewparams")); m_previewextension = doc->getDocumentProperty(QStringLiteral("previewextension")); TemporaryData *cacheWidget = new TemporaryData(doc, true, this); connect(cacheWidget, SIGNAL(disableProxies()), this, SIGNAL(disableProxies())); @@ -107,6 +107,8 @@ generate_imageproxy->setChecked(KdenliveSettings::generateimageproxy()); proxy_imageminsize->setValue(KdenliveSettings::proxyimageminsize()); m_proxyextension = KdenliveSettings::proxyextension(); + m_previewparams = KdenliveSettings::previewparams(); + m_previewextension = KdenliveSettings::previewextension(); } // Select profile diff -Nru kdenlive-16.07.70+git20160630.c10f66e0/src/project/jobs/jobmanager.cpp kdenlive-16.07.70+git20160701.3dc330cd/src/project/jobs/jobmanager.cpp --- kdenlive-16.07.70+git20160630.c10f66e0/src/project/jobs/jobmanager.cpp 2016-06-30 07:21:31.000000000 +0000 +++ kdenlive-16.07.70+git20160701.3dc330cd/src/project/jobs/jobmanager.cpp 2016-07-01 08:17:46.000000000 +0000 @@ -90,6 +90,8 @@ m_jobList.at(i)->setStatus(JobAborted); } } + emit updateJobStatus(id, type, JobAborted); + updateJobCount(); } bool JobManager::hasPendingJob(const QString &clipId, AbstractClipJob::JOBTYPE type) @@ -121,49 +123,56 @@ m_jobMutex.lock(); int count = 0; for (int i = 0; i < m_jobList.count(); ++i) { - if (m_jobList.at(i)->status() == JobWorking || m_jobList.at(i)->status() == JobWaiting) + if (m_jobList.at(i)->status() == JobWorking || m_jobList.at(i)->status() == JobWaiting) { count ++; - else { + } else { // remove finished jobs AbstractClipJob *job = m_jobList.takeAt(i); job->deleteLater(); --i; } } - emit jobCount(count); m_jobMutex.unlock(); + emit jobCount(count); if (m_jobThreads.futures().isEmpty() || m_jobThreads.futures().count() < KdenliveSettings::proxythreads()) m_jobThreads.addFuture(QtConcurrent::run(this, &JobManager::slotProcessJobs)); } +void JobManager::updateJobCount() +{ + int count = 0; + for (int i = 0; i < m_jobList.count(); ++i) { + if (m_jobList.at(i)->status() == JobWaiting || m_jobList.at(i)->status() == JobWorking) + count ++; + } + // Set jobs count + emit jobCount(count); +} void JobManager::slotProcessJobs() { + bool firstPass = true; while (!m_jobList.isEmpty() && !m_abortAllJobs) { AbstractClipJob *job = NULL; - int count = 0; m_jobMutex.lock(); for (int i = 0; i < m_jobList.count(); ++i) { if (m_jobList.at(i)->status() == JobWaiting) { - if (job == NULL) { - m_jobList.at(i)->setStatus(JobWorking); - job = m_jobList.at(i); - } - count++; + job = m_jobList.at(i); + job->setStatus(JobWorking); + break; } - else if (m_jobList.at(i)->status() == JobWorking) - count ++; } - // Set jobs count - emit jobCount(count); + if (!firstPass) { + updateJobCount(); + } m_jobMutex.unlock(); if (job == NULL) { break; } + firstPass = false; QString destination = job->destination(); // Check if the clip is still here ProjectClip *currentClip = m_bin->getBinClip(job->clipId()); - //ProjectItem *processingItem = getItemById(job->clipId()); if (currentClip == NULL) { job->setStatus(JobDone); continue; @@ -193,7 +202,7 @@ emit updateJobStatus(job->clipId(), job->jobType, JobDone); //TODO: replace with more generic clip replacement framework if (job->jobType == AbstractClipJob::PROXYJOB) { - m_bin->gotProxy(job->clipId()); + m_bin->gotProxy(job->clipId(), destination); } if (job->addClipToProject()) { emit addClip(destination); @@ -268,7 +277,9 @@ m_jobList.append(job); clip->setJobStatus(job->jobType, JobWaiting, 0, job->statusMessage()); - if (runQueue) slotCheckJobProcess(); + if (runQueue) { + slotCheckJobProcess(); + } } void JobManager::slotDiscardClipJobs() @@ -284,6 +295,19 @@ discardJobs(id); } +void JobManager::slotCancelPendingJobs() +{ + QMutexLocker lock(&m_jobMutex); + for (int i = 0; i < m_jobList.count(); ++i) { + if (m_jobList.at(i)->status() == JobWaiting) { + // discard this job + m_jobList.at(i)->setStatus(JobAborted); + emit updateJobStatus(m_jobList.at(i)->clipId(), m_jobList.at(i)->jobType, JobAborted); + } + } + updateJobCount(); +} + void JobManager::slotCancelJobs() { m_abortAllJobs = true; @@ -292,7 +316,7 @@ } m_jobThreads.waitForFinished(); m_jobThreads.clearFutures(); - + //TODO: undo job cancelation ? not sure it's necessary /*QUndoCommand *command = new QUndoCommand(); command->setText(i18np("Cancel job", "Cancel jobs", m_jobList.count())); diff -Nru kdenlive-16.07.70+git20160630.c10f66e0/src/project/jobs/jobmanager.h kdenlive-16.07.70+git20160701.3dc330cd/src/project/jobs/jobmanager.h --- kdenlive-16.07.70+git20160630.c10f66e0/src/project/jobs/jobmanager.h 2016-06-30 07:21:31.000000000 +0000 +++ kdenlive-16.07.70+git20160701.3dc330cd/src/project/jobs/jobmanager.h 2016-07-01 08:17:46.000000000 +0000 @@ -103,6 +103,8 @@ void slotDiscardClipJobs(); /** @brief Discard all running jobs. */ void slotCancelJobs(); + /** @brief Discard all pending jobs. */ + void slotCancelPendingJobs(); private: /** @brief A pointer to the project's bin. */ @@ -117,6 +119,8 @@ bool m_abortAllJobs; /** @brief Create a proxy for a clip. */ void createProxy(const QString &id); + /** @brief Update job count in info widget. */ + void updateJobCount(); signals: void addClip(const QString); diff -Nru kdenlive-16.07.70+git20160630.c10f66e0/src/project/jobs/proxyclipjob.cpp kdenlive-16.07.70+git20160701.3dc330cd/src/project/jobs/proxyclipjob.cpp --- kdenlive-16.07.70+git20160630.c10f66e0/src/project/jobs/proxyclipjob.cpp 2016-06-30 07:21:31.000000000 +0000 +++ kdenlive-16.07.70+git20160701.3dc330cd/src/project/jobs/proxyclipjob.cpp 2016-07-01 08:17:46.000000000 +0000 @@ -288,10 +288,12 @@ item->setJobStatus(AbstractClipJob::PROXYJOB, JobCrashed, -1, i18n("Failed to create proxy, empty path.")); continue; } + // Reset proxy path until it is really created + item->setProducerProperty(QStringLiteral("kdenlive:proxy"), QString()); if (QFileInfo(path).size() > 0) { // Proxy already created item->setJobStatus(AbstractClipJob::PROXYJOB, JobDone); - bin->gotProxy(id); + bin->gotProxy(id, path); continue; } QString sourcePath = item->url().toLocalFile(); diff -Nru kdenlive-16.07.70+git20160630.c10f66e0/src/ui/configproject_ui.ui kdenlive-16.07.70+git20160701.3dc330cd/src/ui/configproject_ui.ui --- kdenlive-16.07.70+git20160630.c10f66e0/src/ui/configproject_ui.ui 2016-06-30 07:21:31.000000000 +0000 +++ kdenlive-16.07.70+git20160701.3dc330cd/src/ui/configproject_ui.ui 2016-07-01 08:17:46.000000000 +0000 @@ -6,17 +6,11 @@ 0 0 - 478 - 516 + 505 + 654 - - 0 - - - 0 - @@ -254,7 +248,64 @@ - + + + + + + + 0 + 0 + + + + Timeline Preview + + + + + + + + 0 + 0 + + + + + + + + ... + + + true + + + + + + + ... + + + + + + + + + + 0 + 0 + + + + true + + + + Qt::Vertical diff -Nru kdenlive-16.07.70+git20160630.c10f66e0/src/ui/configtimeline_ui.ui kdenlive-16.07.70+git20160701.3dc330cd/src/ui/configtimeline_ui.ui --- kdenlive-16.07.70+git20160630.c10f66e0/src/ui/configtimeline_ui.ui 2016-06-30 07:21:31.000000000 +0000 +++ kdenlive-16.07.70+git20160701.3dc330cd/src/ui/configtimeline_ui.ui 2016-07-01 08:17:46.000000000 +0000 @@ -11,6 +11,57 @@ + + + + Use FFmpeg for audio thumbnails (faster) + + + + + + + Display clip markers comments + + + + + + + + + Track height + + + + + + + 10 + + + 999 + + + 10 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + @@ -18,6 +69,20 @@ + + + + Autoscroll while playing + + + + + + + Zoom using vertical drag in ruler + + + @@ -68,21 +133,7 @@ - - - - Autoscroll while playing - - - - - - - Use FFmpeg for audio thumbnails (faster) - - - - + Qt::Vertical @@ -95,77 +146,6 @@ - - - - Zoom using vertical drag in ruler - - - - - - - - - Track height - - - - - - - 10 - - - 999 - - - 10 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Display clip markers comments - - - - - - - ... - - - - - - - - 0 - 0 - - - - Timeline preview profiles - - -