X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fdvdwizardvob.cpp;h=f29c3f53cf1b1e8aab18f6ccfd24bdff492cd67f;hb=3d9ff40b713934e307b6ac7808bd8d56d0bd66f7;hp=0d99f697a53446f0011383503aea5296b32f08dd;hpb=71689ab468fa0f9e798c5895c34d849c2c7705d4;p=kdenlive diff --git a/src/dvdwizardvob.cpp b/src/dvdwizardvob.cpp index 0d99f697..f29c3f53 100644 --- a/src/dvdwizardvob.cpp +++ b/src/dvdwizardvob.cpp @@ -34,6 +34,7 @@ #include #include #include +#include DvdTreeWidget::DvdTreeWidget(QWidget *parent) : QTreeWidget(parent) @@ -90,12 +91,12 @@ DvdWizardVob::DvdWizardVob(QWidget *parent) : m_vobList->setIconSize(QSize(60, 45)); - if (KStandardDirs::findExe("dvdauthor").isEmpty()) m_errorMessage.append(i18n("Program %1 is required for the DVD wizard.", i18n("dvdauthor"))); - if (KStandardDirs::findExe("mkisofs").isEmpty() && KStandardDirs::findExe("genisoimage").isEmpty()) m_errorMessage.append(i18n("Program %1 or %2 is required for the DVD wizard.", i18n("mkisofs"), i18n("genisoimage"))); - if (m_errorMessage.isEmpty()) m_view.error_message->setVisible(false); - else { - m_view.error_message->setText(m_errorMessage); - m_installCheck = false; + QString errorMessage; + if (KStandardDirs::findExe("dvdauthor").isEmpty()) errorMessage.append(i18n("Program %1 is required for the DVD wizard.", i18n("dvdauthor"))); + if (KStandardDirs::findExe("mkisofs").isEmpty() && KStandardDirs::findExe("genisoimage").isEmpty()) errorMessage.append(i18n("Program %1 or %2 is required for the DVD wizard.", i18n("mkisofs"), i18n("genisoimage"))); + if (!errorMessage.isEmpty()) { + m_view.button_add->setEnabled(false); + m_view.dvd_profile->setEnabled(false); } m_view.dvd_profile->addItems(QStringList() << i18n("PAL 4:3") << i18n("PAL 16:9") << i18n("NTSC 4:3") << i18n("NTSC 16:9")); @@ -117,17 +118,27 @@ DvdWizardVob::DvdWizardVob(QWidget *parent) : #if KDE_IS_VERSION(4,7,0) m_warnMessage = new KMessageWidget; - m_warnMessage->setMessageType(KMessageWidget::Warning); - m_warnMessage->setText(i18n("Your clips do not match selected DVD format, transcoding required.")); m_warnMessage->setCloseButtonVisible(false); - m_warnMessage->addAction(m_transcodeAction); QGridLayout *s = static_cast (layout()); - s->addWidget(m_warnMessage, 3, 0, 1, -1); - m_warnMessage->hide(); + s->addWidget(m_warnMessage, 2, 0, 1, -1); + if (!errorMessage.isEmpty()) { + m_warnMessage->setMessageType(KMessageWidget::Error); + m_warnMessage->setText(errorMessage); + m_installCheck = false; + }else { + m_warnMessage->setMessageType(KMessageWidget::Warning); + m_warnMessage->setText(i18n("Your clips do not match selected DVD format, transcoding required.")); + m_warnMessage->addAction(m_transcodeAction); + m_warnMessage->hide(); + } m_view.button_transcode->setHidden(true); #else m_view.button_transcode->setDefaultAction(m_transcodeAction); m_view.button_transcode->setEnabled(false); + if (!errorMessage.isEmpty()) { + m_view.error_message->setText(errorMessage); + m_installCheck = false; + } #endif slotCheckVobList(); @@ -201,11 +212,11 @@ void DvdWizardVob::slotAddVobFile(KUrl url, const QString &chapters, bool checkF item->setData(1, Qt::UserRole, playTime); int standard = -1; int aspect = profile.dar() * 100; - if (profile.height() == 576) { + if (profile.height() == 576 && profile.fps() == 25.0) { if (aspect > 150) standard = 1; else standard = 0; } - else if (profile.height() == 480) { + else if (profile.height() == 480 && qAbs(profile.fps() - 30000.0 / 1001) < 0.2) { if (aspect > 150) standard = 3; else standard = 2; } @@ -226,6 +237,7 @@ void DvdWizardVob::slotAddVobFile(KUrl url, const QString &chapters, bool checkF default: standardName = i18n("Unknown"); } + standardName.append(QString(" | %1x%2, %3fps").arg(profile.width()).arg(profile.height()).arg(profile.fps())); item->setData(0, Qt::UserRole, standardName); item->setData(0, Qt::UserRole + 1, standard); item->setData(0, Qt::UserRole + 2, QSize(profile.dar() * profile.height(), profile.height())); @@ -272,6 +284,7 @@ void DvdWizardVob::slotAddVobFile(KUrl url, const QString &chapters, bool checkF slotCheckVobList(); slotCheckProfiles(); } + emit prepareMonitor(); } void DvdWizardVob::slotDeleteVobFile() @@ -320,7 +333,12 @@ QStringList DvdWizardVob::durations() const QStringList result; QString path; int max = m_vobList->topLevelItemCount(); - for (int i = 0; i < max; i++) { + int i = 0; + if (m_view.use_intro->isChecked()) { + // First movie is only for intro + i = 1; + } + for (; i < max; i++) { QTreeWidgetItem *item = m_vobList->topLevelItem(i); if (item) result.append(QString::number(item->data(1, Qt::UserRole).toInt())); } @@ -332,7 +350,12 @@ QStringList DvdWizardVob::chapters() const QStringList result; QString path; int max = m_vobList->topLevelItemCount(); - for (int i = 0; i < max; i++) { + int i = 0; + if (m_view.use_intro->isChecked()) { + // First movie is only for intro + i = 1; + } + for (; i < max; i++) { QTreeWidgetItem *item = m_vobList->topLevelItem(i); if (item) { result.append(item->data(1, Qt::UserRole + 1).toString()); @@ -344,7 +367,12 @@ QStringList DvdWizardVob::chapters() const void DvdWizardVob::updateChapters(QMap chaptersdata) { int max = m_vobList->topLevelItemCount(); - for (int i = 0; i < max; i++) { + int i = 0; + if (m_view.use_intro->isChecked()) { + // First movie is only for intro + i = 1; + } + for (; i < max; i++) { QTreeWidgetItem *item = m_vobList->topLevelItem(i); if (chaptersdata.contains(item->text(0))) item->setData(1, Qt::UserRole + 1, chaptersdata.value(item->text(0))); } @@ -529,14 +557,21 @@ void DvdWizardVob::slotTranscodeFiles() postParams << "-vf" << QString("scale=%1:%2,pad=%3:%4:%5:0,setdar=%6").arg(finalSize.width() - 2 * conv_pad).arg(destSize.height()).arg(finalSize.width()).arg(finalSize.height()).arg(conv_pad).arg(input_aspect); } ClipTranscode *d = new ClipTranscode(KUrl::List () << KUrl(item->text(0)), params.section(';', 0, 0), postParams, i18n("Transcoding to DVD format"), true, this); - connect(d, SIGNAL(transcodedClip(KUrl,KUrl)), this, SLOT(slotTranscodedClip(KUrl, KUrl))); + connect(d, SIGNAL(transcodedClip(KUrl,KUrl)), this, SLOT(slotTranscodedClip(KUrl,KUrl))); + d->slotStartTransCode(); d->show(); + } } } void DvdWizardVob::slotTranscodedClip(KUrl src, KUrl transcoded) { + if (transcoded.isEmpty()) { + // Transcoding canceled or failed + m_transcodeAction->setEnabled(true); + return; + } int max = m_vobList->topLevelItemCount(); for (int i = 0; i < max; i++) { QTreeWidgetItem *item = m_vobList->topLevelItem(i); @@ -633,4 +668,5 @@ void DvdWizardVob::showError(const QString error) m_view.error_message->setText(error); m_view.error_message->setVisible(true); #endif -} \ No newline at end of file +} +