X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fwizard.cpp;h=da36d0b516a96fbddf96a070b9d0e915421cee5a;hb=db7cce03362cb505c93ead2086e1f5653059bc65;hp=94ee17df06eaba98935eda0cec79024149a78978;hpb=6a7a99fc22df658f423bb109b6766999ced6509c;p=kdenlive diff --git a/src/wizard.cpp b/src/wizard.cpp index 94ee17df..da36d0b5 100644 --- a/src/wizard.cpp +++ b/src/wizard.cpp @@ -17,27 +17,32 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ -#include -#include -#include -#include -#include +#include "wizard.h" +#include "kdenlivesettings.h" +#include "profilesdialog.h" #include #include #include #include -#include "kdenlivesettings.h" -#include "profilesdialog.h" -#include "wizard.h" +#include +#include +#include +#include + +const double recommendedMltVersion = 36; -Wizard::Wizard(QWidget *parent): QWizard(parent) { +Wizard::Wizard(bool upgrade, QWidget *parent): QWizard(parent) { setPixmap(QWizard::WatermarkPixmap, QPixmap(KStandardDirs::locate("appdata", "banner.png"))); QWizardPage *page1 = new QWizardPage; page1->setTitle(i18n("Welcome")); - QLabel *label = new QLabel(i18n("This is the first time you run Kdenlive. This wizard will let you adjust some basic settings, you will be ready to edit your first movie in a few seconds...")); + QLabel *label; + if (upgrade) + label = new QLabel(i18n("Your Kdenlive version was upgraded. Please take some time to review the basic settings")); + else + label = new QLabel(i18n("This is the first time you run Kdenlive. This wizard will let you adjust some basic settings, you will be ready to edit your first movie in a few seconds...")); label->setWordWrap(true); m_startLayout = new QVBoxLayout; m_startLayout->addWidget(label); @@ -56,6 +61,9 @@ Wizard::Wizard(QWidget *parent): QWizard(parent) { page2->setTitle(i18n("Video Standard")); m_standard.setupUi(page2); + m_okIcon = KIcon("dialog-ok"); + m_badIcon = KIcon("dialog-close"); + // build profiles lists m_profilesInfo = ProfilesDialog::getProfilesInfo(); QMap::const_iterator i = m_profilesInfo.constBegin(); @@ -95,7 +103,6 @@ Wizard::Wizard(QWidget *parent): QWizard(parent) { QWizardPage *page5 = new QWizardPage; page5->setTitle(i18n("Checking system")); m_check.setupUi(page5); - slotCheckPrograms(); addPage(page5); listViewDelegate = new WizardDelegate(m_check.programList); @@ -109,24 +116,24 @@ void Wizard::checkMltComponents() { m_mltCheck.programList->setColumnCount(2); m_mltCheck.programList->setRootIsDecorated(false); m_mltCheck.programList->setHeaderHidden(true); - QSize itemSize(20, this->fontMetrics().height() * 2.5); - KIcon okIcon("dialog-ok"); - KIcon missingIcon("dialog-close"); + QSize itemSize(20, fontMetrics().height() * 2.5); m_mltCheck.programList->setColumnWidth(0, 30); m_mltCheck.programList->setIconSize(QSize(24, 24)); - QTreeWidgetItem *item = new QTreeWidgetItem(m_mltCheck.programList, QStringList() << QString() << i18n("Inigo") + " (" + KdenliveSettings::rendererpath() + ')'); - item->setData(1, Qt::UserRole, i18n("Required for rendering (part of MLT package)")); - item->setSizeHint(0, itemSize); - item->setIcon(0, okIcon); + QTreeWidgetItem *mltitem = new QTreeWidgetItem(m_mltCheck.programList); + + QTreeWidgetItem *inigoitem = new QTreeWidgetItem(m_mltCheck.programList, QStringList() << QString() << i18n("Inigo") + " (" + KdenliveSettings::rendererpath() + ')'); + inigoitem->setData(1, Qt::UserRole, i18n("Required for rendering (part of MLT package)")); + inigoitem->setSizeHint(0, itemSize); + inigoitem->setIcon(0, m_okIcon); // Check MLT's installed producers QProcess checkProcess; checkProcess.start(KdenliveSettings::rendererpath(), QStringList() << "-query" << "producer"); if (!checkProcess.waitForStarted()) { - item->setIcon(0, missingIcon); - item->setData(1, Qt::UserRole, i18n("Error starting MLT's command line player (inigo)")); + inigoitem->setIcon(0, m_badIcon); + inigoitem->setData(1, Qt::UserRole, i18n("Error starting MLT's command line player (inigo)")); button(QWizard::NextButton)->setEnabled(false); } else { checkProcess.waitForFinished(); @@ -137,72 +144,115 @@ void Wizard::checkMltComponents() { avformatItem->setData(1, Qt::UserRole, i18n("Required to work with various video formats (hdv, mpeg, flash, ...)")); avformatItem->setSizeHint(0, itemSize); if (!result.contains("- avformat")) { - avformatItem->setIcon(0, missingIcon); + avformatItem->setIcon(0, m_badIcon); m_mltCheck.tabWidget->setTabEnabled(1, false); } else { - avformatItem->setIcon(0, okIcon); - // Check installed audio codecs - QProcess checkProcess2; - checkProcess2.start(KdenliveSettings::rendererpath(), QStringList() << "noise:" << "-consumer" << "avformat" << "acodec=list"); - if (!checkProcess2.waitForStarted()) { - m_mltCheck.tabWidget->setTabEnabled(1, false); - kDebug() << "// Error parsing MLT's avformat codecs"; - } else { - checkProcess2.waitForFinished(); - QByteArray codecList = checkProcess2.readAllStandardError(); - QString acodecList(codecList); - QStringList result; - QStringList alist = acodecList.split("\n", QString::SkipEmptyParts); - for (int i = 0; i < alist.count(); i++) { - if (alist.at(i).contains("- ")) result.append(alist.at(i).section("- ", 1).simplified().toLower()); + avformatItem->setIcon(0, m_okIcon); + // Make sure we have MLT > 0.3.4 + bool recentMlt = false; + int version = 0; + QString mltVersion; + QString exepath = KStandardDirs::findExe("pkg-config"); + if (!exepath.isEmpty()) { + checkProcess.start(exepath, QStringList() << "--variable=version" << "mlt-framework"); + if (!checkProcess.waitForStarted()) { + kDebug() << "// Error querying MLT's version"; + } else { + checkProcess.waitForFinished(); + mltVersion = checkProcess.readAllStandardOutput(); + version = 100 * mltVersion.section('.', 0, 0).toInt() + 10 * mltVersion.section('.', 1, 1).toInt() + mltVersion.section('.', 2, 2).toInt(); + kDebug() << "// FOUND MLT's pkgconfig version: " << version; + if (version > 34) recentMlt = true; } - m_mltCheck.acodecs_list->addItems(result); - KdenliveSettings::setAudiocodecs(result); - //kDebug()<<"// FOUND LIST:\n\n"< 34) recentMlt = true; } - m_mltCheck.vcodecs_list->addItems(result); - KdenliveSettings::setVideocodecs(result); - //kDebug()<<"// FOUND LIST:\n\n"<setText(1, i18n("MLT version: %1", mltVersion.simplified())); + mltitem->setSizeHint(0, itemSize); + if (version < recommendedMltVersion) { + mltitem->setData(1, Qt::UserRole, i18n("Please upgrade to the latest MLT version")); + mltitem->setIcon(0, m_badIcon); } else { - checkProcess2.waitForFinished(); - QByteArray codecList = checkProcess2.readAllStandardError(); - QString vcodecList(codecList); - QStringList result; - QStringList vlist = vcodecList.split("\n", QString::SkipEmptyParts); - for (int i = 0; i < vlist.count(); i++) { - if (vlist.at(i).contains("- ")) { - QString format = vlist.at(i).section("- ", 1).simplified().toLower(); - if (format.contains(',')) { - QStringList sub = format.split(',', QString::SkipEmptyParts); - for (int j = 0; j < sub.count(); j++) - result.append(sub.at(j)); - } else result.append(format); + mltitem->setData(1, Qt::UserRole, i18n("MLT version is correct")); + mltitem->setIcon(0, m_okIcon); + } + + if (recentMlt) { + // Check installed audio codecs + QProcess checkProcess2; + checkProcess2.start(KdenliveSettings::rendererpath(), QStringList() << "noise:" << "-consumer" << "avformat" << "acodec=list"); + if (!checkProcess2.waitForStarted()) { + m_mltCheck.tabWidget->setTabEnabled(1, false); + kDebug() << "// Error parsing MLT's avformat codecs"; + } else { + checkProcess2.waitForFinished(); + QByteArray codecList = checkProcess2.readAllStandardError(); + QString acodecList(codecList); + QStringList result; + QStringList alist = acodecList.split('\n', QString::SkipEmptyParts); + for (int i = 0; i < alist.count(); i++) { + if (alist.at(i).contains("- ")) result.append(alist.at(i).section("- ", 1).simplified().toLower()); + } + m_mltCheck.acodecs_list->addItems(result); + KdenliveSettings::setAudiocodecs(result); + //kDebug()<<"// FOUND LIST:\n\n"<addItems(result); + KdenliveSettings::setVideocodecs(result); + //kDebug()<<"// FOUND LIST:\n\n"<addItems(result); + KdenliveSettings::setSupportedformats(result); + //kDebug()<<"// FOUND LIST:\n\n"<addItems(result); - KdenliveSettings::setSupportedformats(result); - //kDebug()<<"// FOUND LIST:\n\n"<setData(1, Qt::UserRole, i18n("Required to work with dv files if avformat module is not installed")); dvItem->setSizeHint(0, itemSize); if (!result.contains("- libdv")) { - dvItem->setIcon(0, missingIcon); + dvItem->setIcon(0, m_badIcon); } else { - dvItem->setIcon(0, okIcon); + dvItem->setIcon(0, m_okIcon); } // Check MLT image format module @@ -220,14 +270,14 @@ void Wizard::checkMltComponents() { imageItem->setData(1, Qt::UserRole, i18n("Required to work with images")); imageItem->setSizeHint(0, itemSize); if (!result.contains("- qimage")) { - imageItem->setIcon(0, missingIcon); + imageItem->setIcon(0, m_badIcon); imageItem = new QTreeWidgetItem(m_mltCheck.programList, QStringList() << QString() << i18n("Pixbuf module")); imageItem->setData(1, Qt::UserRole, i18n("Required to work with images")); imageItem->setSizeHint(0, itemSize); - if (!result.contains("- pixbuf")) imageItem->setIcon(0, missingIcon); - else imageItem->setIcon(0, okIcon); + if (!result.contains("- pixbuf")) imageItem->setIcon(0, m_badIcon); + else imageItem->setIcon(0, m_okIcon); } else { - imageItem->setIcon(0, okIcon); + imageItem->setIcon(0, m_okIcon); } } } @@ -236,9 +286,7 @@ void Wizard::slotCheckPrograms() { m_check.programList->setColumnCount(2); m_check.programList->setRootIsDecorated(false); m_check.programList->setHeaderHidden(true); - QSize itemSize(20, this->fontMetrics().height() * 2.5); - KIcon okIcon("dialog-ok"); - KIcon missingIcon("dialog-close"); + QSize itemSize(20, fontMetrics().height() * 2.5); m_check.programList->setColumnWidth(0, 30); m_check.programList->setIconSize(QSize(24, 24)); @@ -246,33 +294,33 @@ void Wizard::slotCheckPrograms() { item->setData(1, Qt::UserRole, i18n("Required for webcam capture")); item->setSizeHint(0, itemSize); QString exepath = KStandardDirs::findExe("ffmpeg"); - if (exepath.isEmpty()) item->setIcon(0, missingIcon); - else if (KStandardDirs::findExe("ffplay").isEmpty()) item->setIcon(0, missingIcon); - else item->setIcon(0, okIcon); + if (exepath.isEmpty()) item->setIcon(0, m_badIcon); + else if (KStandardDirs::findExe("ffplay").isEmpty()) item->setIcon(0, m_badIcon); + else item->setIcon(0, m_okIcon); item = new QTreeWidgetItem(m_check.programList, QStringList() << QString() << i18n("Recordmydesktop")); item->setData(1, Qt::UserRole, i18n("Required for screen capture")); item->setSizeHint(0, itemSize); - if (KStandardDirs::findExe("recordmydesktop").isEmpty()) item->setIcon(0, missingIcon); - else item->setIcon(0, okIcon); + if (KStandardDirs::findExe("recordmydesktop").isEmpty()) item->setIcon(0, m_badIcon); + else item->setIcon(0, m_okIcon); item = new QTreeWidgetItem(m_check.programList, QStringList() << QString() << i18n("Dvgrab")); item->setData(1, Qt::UserRole, i18n("Required for firewire capture")); item->setSizeHint(0, itemSize); - if (KStandardDirs::findExe("dvgrab").isEmpty()) item->setIcon(0, missingIcon); - else item->setIcon(0, okIcon); + if (KStandardDirs::findExe("dvgrab").isEmpty()) item->setIcon(0, m_badIcon); + else item->setIcon(0, m_okIcon); item = new QTreeWidgetItem(m_check.programList, QStringList() << QString() << i18n("Dvdauthor")); - item->setData(1, Qt::UserRole, i18n("Required for creation of dvd")); + item->setData(1, Qt::UserRole, i18n("Required for creation of DVD")); item->setSizeHint(0, itemSize); - if (KStandardDirs::findExe("dvdauthor").isEmpty()) item->setIcon(0, missingIcon); - else item->setIcon(0, okIcon); + if (KStandardDirs::findExe("dvdauthor").isEmpty()) item->setIcon(0, m_badIcon); + else item->setIcon(0, m_okIcon); item = new QTreeWidgetItem(m_check.programList, QStringList() << QString() << i18n("Mkisofs")); - item->setData(1, Qt::UserRole, i18n("Required for creation of dvd iso images")); + item->setData(1, Qt::UserRole, i18n("Required for creation of DVD iso images")); item->setSizeHint(0, itemSize); - if (KStandardDirs::findExe("mkisofs").isEmpty()) item->setIcon(0, missingIcon); - else item->setIcon(0, okIcon); + if (KStandardDirs::findExe("mkisofs").isEmpty()) item->setIcon(0, m_badIcon); + else item->setIcon(0, m_okIcon); } @@ -424,12 +472,12 @@ void Wizard::slotCheckMlt() { QProcess checkProcess2; checkProcess2.start(KdenliveSettings::rendererpath(), QStringList() << "-query" << "consumer"); if (!checkProcess2.waitForStarted()) - errorMessage.append(i18n("Error starting MLT's command line player (inigo).") + "\n"); + errorMessage.append(i18n("Error starting MLT's command line player (inigo).") + '\n'); checkProcess2.waitForFinished(); QByteArray result = checkProcess2.readAllStandardError(); - if (!result.contains("sdl") || !result.contains("sdl_preview")) errorMessage.append(i18n("MLT's SDL module not found. Please check your MLT install. Kdenlive will not work until this issue is fixed.") + "\n"); + if (!result.contains("sdl") || !result.contains("sdl_preview")) errorMessage.append(i18n("MLT's SDL module not found. Please check your MLT install. Kdenlive will not work until this issue is fixed.") + '\n'); if (!errorMessage.isEmpty()) { errorMessage.prepend(QString("%1
").arg(i18n("Fatal Error"))); @@ -445,6 +493,7 @@ void Wizard::slotCheckMlt() { } else m_systemCheckIsOk = true; if (m_systemCheckIsOk) checkMltComponents(); + slotCheckPrograms(); } bool Wizard::isOk() const {