X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Frenderwidget.cpp;h=385203ad6829fc54139cf66bd0db0e7dc17443b8;hb=5f2ae774dfd6cc7870cb8de75fb38259a4f96dd1;hp=bdb822adbcb2aaa0b02bb62fe4831f81ea59a387;hpb=662a80165046655e809262812fab4ae30dc536e3;p=kdenlive diff --git a/src/renderwidget.cpp b/src/renderwidget.cpp index bdb822ad..385203ad 100644 --- a/src/renderwidget.cpp +++ b/src/renderwidget.cpp @@ -46,6 +46,7 @@ #include #include #include +#include #include "locale.h" @@ -82,7 +83,8 @@ const int FAILEDJOB = 3; const int ABORTEDJOB = 4; -RenderJobItem::RenderJobItem(QTreeWidget * parent, const QStringList & strings, int type) : QTreeWidgetItem(parent, strings, type), +RenderJobItem::RenderJobItem(QTreeWidget * parent, const QStringList & strings, int type) + : QTreeWidgetItem(parent, strings, type), m_status(-1) { setSizeHint(1, QSize(parent->columnWidth(1), parent->fontMetrics().height() * 3)); @@ -91,7 +93,8 @@ RenderJobItem::RenderJobItem(QTreeWidget * parent, const QStringList & strings, void RenderJobItem::setStatus(int status) { - if (m_status == status) return; + if (m_status == status) + return; m_status = status; switch (status) { case WAITINGJOB: @@ -134,7 +137,7 @@ const QString RenderJobItem::metadata() const } -RenderWidget::RenderWidget(const QString &projectfolder, bool enableProxy, MltVideoProfile profile, QWidget * parent) : +RenderWidget::RenderWidget(const QString &projectfolder, bool enableProxy, const MltVideoProfile &profile, QWidget * parent) : QDialog(parent), m_projectFolder(projectfolder), m_profile(profile), @@ -185,7 +188,9 @@ RenderWidget::RenderWidget(const QString &projectfolder, bool enableProxy, MltVi if (KdenliveSettings::showrenderparams()) { m_view.buttonInfo->setDown(true); - } else m_view.advanced_params->hide(); + } else { + m_view.advanced_params->hide(); + } m_view.proxy_render->setHidden(!enableProxy); @@ -236,7 +241,7 @@ RenderWidget::RenderWidget(const QString &projectfolder, bool enableProxy, MltVi connect(m_view.delete_script, SIGNAL(clicked()), this, SLOT(slotDeleteScript())); connect(m_view.scripts_list, SIGNAL(itemSelectionChanged()), this, SLOT(slotCheckScript())); connect(m_view.running_jobs, SIGNAL(itemSelectionChanged()), this, SLOT(slotCheckJob())); - connect(m_view.running_jobs, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this, SLOT(slotPlayRendering(QTreeWidgetItem *, int))); + connect(m_view.running_jobs, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), this, SLOT(slotPlayRendering(QTreeWidgetItem*,int))); connect(m_view.buttonInfo, SIGNAL(clicked()), this, SLOT(showInfoPanel())); @@ -255,13 +260,13 @@ RenderWidget::RenderWidget(const QString &projectfolder, bool enableProxy, MltVi connect(m_view.buttonClose3, SIGNAL(clicked()), this, SLOT(hide())); connect(m_view.rescale, SIGNAL(toggled(bool)), this, SLOT(setRescaleEnabled(bool))); connect(m_view.destination_list, SIGNAL(activated(int)), this, SLOT(refreshCategory())); - connect(m_view.out_file, SIGNAL(textChanged(const QString &)), this, SLOT(slotUpdateButtons())); - connect(m_view.out_file, SIGNAL(urlSelected(const KUrl &)), this, SLOT(slotUpdateButtons(const KUrl &))); + connect(m_view.out_file, SIGNAL(textChanged(QString)), this, SLOT(slotUpdateButtons())); + connect(m_view.out_file, SIGNAL(urlSelected(KUrl)), this, SLOT(slotUpdateButtons(KUrl))); connect(m_view.format_list, SIGNAL(currentRowChanged(int)), this, SLOT(refreshView())); connect(m_view.size_list, SIGNAL(currentRowChanged(int)), this, SLOT(refreshParams())); connect(m_view.show_all_profiles, SIGNAL(stateChanged(int)), this, SLOT(refreshView())); - connect(m_view.size_list, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(slotEditItem(QListWidgetItem *))); + connect(m_view.size_list, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(slotEditItem(QListWidgetItem*))); connect(m_view.render_guide, SIGNAL(clicked(bool)), this, SLOT(slotUpdateGuideBox())); connect(m_view.render_zone, SIGNAL(clicked(bool)), this, SLOT(slotUpdateGuideBox())); @@ -298,8 +303,10 @@ RenderWidget::RenderWidget(const QString &projectfolder, bool enableProxy, MltVi m_renderer = QCoreApplication::applicationDirPath() + QString("/kdenlive_render"); if (!QFile::exists(m_renderer)) { m_renderer = KStandardDirs::findExe("kdenlive_render"); - if (m_renderer.isEmpty()) m_renderer = KStandardDirs::locate("exe", "kdenlive_render"); - if (m_renderer.isEmpty()) m_renderer = "kdenlive_render"; + if (m_renderer.isEmpty()) + m_renderer = KStandardDirs::locate("exe", "kdenlive_render"); + if (m_renderer.isEmpty()) + m_renderer = "kdenlive_render"; } QDBusConnectionInterface* interface = QDBusConnection::sessionBus().interface(); @@ -331,8 +338,9 @@ RenderWidget::~RenderWidget() void RenderWidget::slotEditItem(QListWidgetItem *item) { - QString edit = item->data(EditableRole).toString(); - if (edit.isEmpty() || !edit.endsWith("customprofiles.xml")) slotSaveProfile(); + const QString edit = item->data(EditableRole).toString(); + if (edit.isEmpty() || !edit.endsWith(QLatin1String("customprofiles.xml"))) + slotSaveProfile(); else slotEditProfile(); } @@ -382,7 +390,7 @@ void RenderWidget::setGuides(QDomElement guidesxml, double duration) m_view.guide_start->clear(); m_view.guide_end->clear(); QDomNodeList nodes = guidesxml.elementsByTagName("guide"); - if (nodes.count() > 0) { + if (!nodes.isEmpty()) { m_view.guide_start->addItem(i18n("Beginning"), "0"); m_view.render_guide->setEnabled(true); m_view.create_chapter->setEnabled(true); @@ -391,7 +399,7 @@ void RenderWidget::setGuides(QDomElement guidesxml, double duration) m_view.create_chapter->setEnabled(false); } double fps = (double) m_profile.frame_rate_num / m_profile.frame_rate_den; - for (int i = 0; i < nodes.count(); i++) { + for (int i = 0; i < nodes.count(); ++i) { QDomElement e = nodes.item(i).toElement(); if (!e.isNull()) { GenTime pos = GenTime(e.attribute("time").toDouble()); @@ -400,7 +408,7 @@ void RenderWidget::setGuides(QDomElement guidesxml, double duration) m_view.guide_end->addItem(e.attribute("comment") + '/' + guidePos, e.attribute("time").toDouble()); } } - if (nodes.count() > 0) + if (!nodes.isEmpty()) m_view.guide_end->addItem(i18n("End"), QString::number(duration)); } @@ -408,7 +416,7 @@ void RenderWidget::setGuides(QDomElement guidesxml, double duration) * Will be called when the user selects an output file via the file dialog. * File extension will be added automatically. */ -void RenderWidget::slotUpdateButtons(KUrl url) +void RenderWidget::slotUpdateButtons(const KUrl &url) { if (m_view.out_file->url().isEmpty()) { m_view.buttonGenerateScript->setEnabled(false); @@ -423,9 +431,8 @@ void RenderWidget::slotUpdateButtons(KUrl url) m_view.buttonGenerateScript->setEnabled(false); return; } - QString extension = item->data(ExtensionRole).toString(); - url = filenameWithExtension(url, extension); - m_view.out_file->setUrl(url); + const QString extension = item->data(ExtensionRole).toString(); + m_view.out_file->setUrl(filenameWithExtension(url, extension)); } } @@ -450,7 +457,7 @@ void RenderWidget::slotSaveProfile() QDialog *d = new QDialog(this); ui.setupUi(d); - for (int i = 0; i < m_view.destination_list->count(); i++) + for (int i = 0; i < m_view.destination_list->count(); ++i) ui.destination_list->addItem(m_view.destination_list->itemIcon(i), m_view.destination_list->itemText(i), m_view.destination_list->itemData(i, Qt::UserRole)); ui.destination_list->setCurrentIndex(m_view.destination_list->currentIndex()); @@ -464,6 +471,25 @@ void RenderWidget::slotSaveProfile() ui.parameters->setText(arguments.join(" ")); ui.extension->setText(m_view.size_list->currentItem()->data(ExtensionRole).toString()); ui.profile_name->setFocus(); + QListWidgetItem *item = m_view.size_list->currentItem(); + if (ui.parameters->toPlainText().contains("%bitrate")) { + if ( item && item->data(BitratesRole).canConvert(QVariant::StringList) && item->data(BitratesRole).toStringList().count()) { + QStringList bitrates = item->data(BitratesRole).toStringList(); + ui.vbitrates_list->setText(bitrates.join(",")); + if (item->data(DefaultBitrateRole).canConvert(QVariant::String)) + ui.default_vbitrate->setValue(item->data(DefaultBitrateRole).toInt()); + } + } + else ui.vbitrates->setHidden(true); + if (ui.parameters->toPlainText().contains("%audiobitrate")) { + if ( item && item->data(AudioBitratesRole).canConvert(QVariant::StringList) && item->data(AudioBitratesRole).toStringList().count()) { + QStringList bitrates = item->data(AudioBitratesRole).toStringList(); + ui.abitrates_list->setText(bitrates.join(",")); + if (item->data(DefaultAudioBitrateRole).canConvert(QVariant::String)) + ui.default_abitrate->setValue(item->data(DefaultAudioBitrateRole).toInt()); + } + } + else ui.abitrates->setHidden(true); if (d->exec() == QDialog::Accepted && !ui.profile_name->text().simplified().isEmpty()) { QString newProfileName = ui.profile_name->text().simplified(); @@ -481,19 +507,13 @@ void RenderWidget::slotSaveProfile() profileElement.setAttribute("args", args); if (args.contains("%bitrate")) { // profile has a variable bitrate - profileElement.setAttribute("defaultbitrate", m_view.comboBitrates->currentText()); - QStringList bitrateValues; - for (int i = 0; i < m_view.comboBitrates->count(); i++) - bitrateValues << m_view.comboBitrates->itemText(i); - profileElement.setAttribute("bitrates", bitrateValues.join(",")); + profileElement.setAttribute("defaultbitrate", QString::number(ui.default_vbitrate->value())); + profileElement.setAttribute("bitrates", ui.vbitrates_list->text()); } if (args.contains("%audiobitrate")) { // profile has a variable bitrate - profileElement.setAttribute("defaultaudiobitrate", m_view.comboAudioBitrates->currentText()); - QStringList bitrateValues; - for (int i = 0; i < m_view.comboAudioBitrates->count(); i++) - bitrateValues << m_view.comboAudioBitrates->itemText(i); - profileElement.setAttribute("audiobitrates", bitrateValues.join(",")); + profileElement.setAttribute("defaultaudiobitrate", QString::number(ui.default_abitrate->value())); + profileElement.setAttribute("audiobitrates", ui.abitrates_list->text()); } doc.appendChild(profileElement); saveProfile(doc.documentElement()); @@ -504,7 +524,7 @@ void RenderWidget::slotSaveProfile() } -void RenderWidget::saveProfile(QDomElement newprofile) +void RenderWidget::saveProfile(const QDomElement &newprofile) { QString exportFile = KStandardDirs::locateLocal("appdata", "export/customprofiles.xml"); QDomDocument doc; @@ -545,7 +565,7 @@ void RenderWidget::saveProfile(QDomElement newprofile) break; } } - i++; + ++i; } profiles.appendChild(newprofile); @@ -569,7 +589,8 @@ void RenderWidget::saveProfile(QDomElement newprofile) void RenderWidget::slotCopyToFavorites() { QListWidgetItem *item = m_view.size_list->currentItem(); - if (!item) return; + if (!item) + return; QString currentGroup = m_view.format_list->currentItem()->text(); QString params = item->data(ParamsRole).toString(); @@ -605,7 +626,7 @@ void RenderWidget::slotEditProfile() QDialog *d = new QDialog(this); ui.setupUi(d); - for (int i = 0; i < m_view.destination_list->count(); i++) + for (int i = 0; i < m_view.destination_list->count(); ++i) ui.destination_list->addItem(m_view.destination_list->itemIcon(i), m_view.destination_list->itemText(i), m_view.destination_list->itemData(i, Qt::UserRole)); ui.destination_list->setCurrentIndex(m_view.destination_list->currentIndex()); @@ -619,6 +640,27 @@ void RenderWidget::slotEditProfile() ui.extension->setText(extension); ui.parameters->setText(params); ui.profile_name->setFocus(); + if (ui.parameters->toPlainText().contains("%bitrate")) { + if ( item->data(BitratesRole).canConvert(QVariant::StringList) && item->data(BitratesRole).toStringList().count()) { + QStringList bitrates = item->data(BitratesRole).toStringList(); + ui.vbitrates_list->setText(bitrates.join(",")); + if (item->data(DefaultBitrateRole).canConvert(QVariant::String)) + ui.default_vbitrate->setValue(item->data(DefaultBitrateRole).toInt()); + } + } else { + ui.vbitrates->setHidden(true); + } + + if (ui.parameters->toPlainText().contains("%audiobitrate")) { + if ( item->data(AudioBitratesRole).canConvert(QVariant::StringList) && item->data(AudioBitratesRole).toStringList().count()) { + QStringList bitrates = item->data(AudioBitratesRole).toStringList(); + ui.abitrates_list->setText(bitrates.join(",")); + if (item->data(DefaultAudioBitrateRole).canConvert(QVariant::String)) + ui.default_abitrate->setValue(item->data(DefaultAudioBitrateRole).toInt()); + } + } + else ui.abitrates->setHidden(true); + d->setWindowTitle(i18n("Edit Profile")); if (d->exec() == QDialog::Accepted) { slotDeleteProfile(false); @@ -666,7 +708,7 @@ void RenderWidget::slotEditProfile() break; } } - i++; + ++i; } QDomElement profileElement = doc.createElement("profile"); @@ -678,19 +720,13 @@ void RenderWidget::slotEditProfile() profileElement.setAttribute("args", args); if (args.contains("%bitrate")) { // profile has a variable bitrate - profileElement.setAttribute("defaultbitrate", m_view.comboBitrates->currentText()); - QStringList bitrateValues; - for (int i = 0; i < m_view.comboBitrates->count(); i++) - bitrateValues << m_view.comboBitrates->itemText(i); - profileElement.setAttribute("bitrates", bitrateValues.join(",")); + profileElement.setAttribute("defaultbitrate", QString::number(ui.default_vbitrate->value())); + profileElement.setAttribute("bitrates", ui.vbitrates_list->text()); } if (args.contains("%audiobitrate")) { // profile has a variable bitrate - profileElement.setAttribute("defaultaudiobitrate", m_view.comboAudioBitrates->currentText()); - QStringList bitrateValues; - for (int i = 0; i < m_view.comboAudioBitrates->count(); i++) - bitrateValues << m_view.comboAudioBitrates->itemText(i); - profileElement.setAttribute("audiobitrates", bitrateValues.join(",")); + profileElement.setAttribute("defaultaudiobitrate", QString::number(ui.default_abitrate->value())); + profileElement.setAttribute("audiobitrates", ui.abitrates_list->text()); } profiles.appendChild(profileElement); @@ -754,7 +790,7 @@ void RenderWidget::slotDeleteProfile(bool refresh) doc.documentElement().removeChild(profiles.item(i)); break; } - i++; + ++i; } if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { @@ -799,8 +835,13 @@ void RenderWidget::updateButtons() } -void RenderWidget::focusFirstVisibleItem() +void RenderWidget::focusFirstVisibleItem(const QString &profile) { + if (!profile.isEmpty()) { + QList child = m_view.size_list->findItems(profile, Qt::MatchExactly); + if (!child.isEmpty()) + m_view.size_list->setCurrentItem(child.at(0)); + } if (m_view.size_list->currentItem()) { updateButtons(); return; @@ -831,13 +872,15 @@ void RenderWidget::slotPrepareExport(bool scriptExport) } -void RenderWidget::slotExport(bool scriptExport, int zoneIn, int zoneOut, const QMap metadata, const QString &playlistPath, const QString &scriptPath, bool exportAudio) +void RenderWidget::slotExport(bool scriptExport, int zoneIn, int zoneOut, const QMap &metadata, const QString &playlistPath, const QString &scriptPath, bool exportAudio) { QListWidgetItem *item = m_view.size_list->currentItem(); - if (!item) return; + if (!item) + return; - QString dest = m_view.out_file->url().path(); - if (dest.isEmpty()) return; + QString dest = m_view.out_file->url().path().trimmed(); + if (dest.isEmpty()) + return; // Check whether target file has an extension. // If not, ask whether extension should be added or not. @@ -903,7 +946,7 @@ void RenderWidget::slotExport(bool scriptExport, int zoneIn, int zoneOut, const if (m_view.export_meta->isChecked()) { QMap::const_iterator i = metadata.constBegin(); while (i != metadata.constEnd()) { - renderArgs.append(QString(" %1=\"%2\"").arg(i.key()).arg(i.value())); + renderArgs.append(QString(" %1=%2").arg(i.key()).arg(QString(QUrl::toPercentEncoding(i.value())))); ++i; } } @@ -956,8 +999,8 @@ void RenderWidget::slotExport(bool scriptExport, int zoneIn, int zoneOut, const QStringList paramsList = renderArgs.split(' ', QString::SkipEmptyParts); QScriptEngine sEngine; - sEngine.globalObject().setProperty("bitrate", m_view.comboBitrates->currentText()); - sEngine.globalObject().setProperty("audiobitrate", m_view.comboAudioBitrates->currentText()); + sEngine.globalObject().setProperty("bitrate", m_view.comboBitrates->currentText().toInt()); + sEngine.globalObject().setProperty("audiobitrate", m_view.comboAudioBitrates->currentText().toInt()); sEngine.globalObject().setProperty("dar", '@' + QString::number(m_profile.display_aspect_num) + '/' + QString::number(m_profile.display_aspect_den)); sEngine.globalObject().setProperty("passes", static_cast(m_view.checkTwoPass->isChecked()) + 1); @@ -986,7 +1029,7 @@ void RenderWidget::slotExport(bool scriptExport, int zoneIn, int zoneOut, const QString group = m_view.size_list->currentItem()->data(MetaGroupRole).toString(); - QString scriptName; + //QString scriptName; if (scriptExport) { // Generate script file QFile file(scriptPath); @@ -1028,8 +1071,10 @@ void RenderWidget::slotExport(bool scriptExport, int zoneIn, int zoneOut, const renderProps.insert("renderendguide", QString::number(m_view.guide_end->currentIndex())); renderProps.insert("renderscanning", QString::number(m_view.scanning_list->currentIndex())); int export_audio = 0; - if (m_view.export_audio->checkState() == Qt::Checked) export_audio = 2; - else if (m_view.export_audio->checkState() == Qt::Unchecked) export_audio = 1; + if (m_view.export_audio->checkState() == Qt::Checked) + export_audio = 2; + else if (m_view.export_audio->checkState() == Qt::Unchecked) + export_audio = 1; renderProps.insert("renderexportaudio", QString::number(export_audio)); renderProps.insert("renderrescale", QString::number(m_view.rescale->isChecked())); renderProps.insert("renderrescalewidth", QString::number(m_view.rescale_width->value())); @@ -1089,8 +1134,10 @@ void RenderWidget::slotExport(bool scriptExport, int zoneIn, int zoneOut, const } renderItem->setData(1, ParametersRole, render_process_args); - if (exportAudio == false) renderItem->setData(1, ExtraInfoRole, i18n("Video without audio track")); - else renderItem->setData(1, ExtraInfoRole, QString()); + if (exportAudio == false) + renderItem->setData(1, ExtraInfoRole, i18n("Video without audio track")); + else + renderItem->setData(1, ExtraInfoRole, QString()); m_view.running_jobs->setCurrentItem(renderItem); m_view.tabWidget->setCurrentIndex(1); checkRenderStatus(); @@ -1154,7 +1201,7 @@ int RenderWidget::waitingJobsCount() const return count; } -void RenderWidget::setProfile(MltVideoProfile profile) +void RenderWidget::setProfile(const MltVideoProfile &profile) { m_view.scanning_list->setCurrentIndex(0); m_view.rescale_width->setValue(KdenliveSettings::defaultrescalewidth()); @@ -1169,17 +1216,18 @@ void RenderWidget::setProfile(MltVideoProfile profile) } } -void RenderWidget::refreshCategory() + + +void RenderWidget::refreshCategory(const QString &group, const QString &profile) { m_view.format_list->blockSignals(true); m_view.format_list->clear(); QListWidgetItem *sizeItem; - + QString destination; if (m_view.destination_list->currentIndex() > 0) destination = m_view.destination_list->itemData(m_view.destination_list->currentIndex()).toString(); - if (destination == "dvd") { m_view.open_dvd->setVisible(true); m_view.create_chapter->setVisible(true); @@ -1194,7 +1242,7 @@ void RenderWidget::refreshCategory() m_view.open_browser->setVisible(false); // hide groups that are not in the correct destination - for (int i = 0; i < m_renderCategory.count(); i++) { + for (int i = 0; i < m_renderCategory.count(); ++i) { sizeItem = m_renderCategory.at(i); if (sizeItem->data(MetaGroupRole).toString() == destination) { m_view.format_list->addItem(sizeItem->clone()); @@ -1202,12 +1250,15 @@ void RenderWidget::refreshCategory() } } - // activate first visible item + // activate requested item or first visible + QList child; + if (!group.isEmpty()) child = m_view.format_list->findItems(group, Qt::MatchExactly); + if (!child.isEmpty()) { + m_view.format_list->setCurrentItem(child.at(0)); + child.clear(); + } else m_view.format_list->setCurrentRow(0); QListWidgetItem * item = m_view.format_list->currentItem(); - if (!item) { - m_view.format_list->setCurrentRow(0); - item = m_view.format_list->currentItem(); - } + m_view.format_list->blockSignals(false); if (!item) { m_view.format_list->setEnabled(false); m_view.format_list->clear(); @@ -1225,10 +1276,11 @@ void RenderWidget::refreshCategory() m_view.format_list->setVisible(true); else m_view.format_list->setVisible(false); - refreshView(); + + refreshView(profile); } -void RenderWidget::refreshView() +void RenderWidget::refreshView(const QString &profile) { if (!m_view.format_list->currentItem()) return; m_view.size_list->blockSignals(true); @@ -1256,7 +1308,7 @@ void RenderWidget::refreshView() const QColor disabledbg = scheme.background(KColorScheme::NegativeBackground).color(); double project_framerate = (double) m_profile.frame_rate_num / m_profile.frame_rate_den; - for (int i = 0; i < m_renderItems.count(); i++) { + for (int i = 0; i < m_renderItems.count(); ++i) { sizeItem = m_renderItems.at(i); QListWidgetItem *dupItem = NULL; if ((sizeItem->data(GroupRole).toString() == group || sizeItem->data(GroupRole).toString().isEmpty()) && sizeItem->data(MetaGroupRole).toString() == destination) { @@ -1345,9 +1397,8 @@ void RenderWidget::refreshView() } } } - focusFirstVisibleItem(); + focusFirstVisibleItem(profile); m_view.size_list->blockSignals(false); - m_view.format_list->blockSignals(false); if (m_view.size_list->count() > 0) { refreshParams(); } @@ -1358,7 +1409,7 @@ void RenderWidget::refreshView() } } -KUrl RenderWidget::filenameWithExtension(KUrl url, QString extension) +KUrl RenderWidget::filenameWithExtension(KUrl url, const QString &extension) { if (url.isEmpty()) url = KUrl(m_projectFolder); QString directory = url.directory(KUrl::AppendTrailingSlash | KUrl::ObeyTrailingSlash); @@ -1386,7 +1437,8 @@ void RenderWidget::refreshParams() // Format not available (e.g. codec not installed); Disable start button QListWidgetItem *item = m_view.size_list->currentItem(); if (!item || item->isHidden()) { - if (!item) errorMessage(i18n("No matching profile")); + if (!item) + errorMessage(i18n("No matching profile")); m_view.advanced_params->clear(); m_view.buttonRender->setEnabled(false); m_view.buttonGenerateScript->setEnabled(false); @@ -1473,12 +1525,9 @@ void RenderWidget::reloadProfiles() parseProfiles(); } -void RenderWidget::parseProfiles(QString meta, QString group, QString profile) +void RenderWidget::parseProfiles(const QString &meta, const QString &group, const QString &profile) { - m_view.size_list->blockSignals(true); - m_view.format_list->blockSignals(true); - m_view.size_list->clear(); - m_view.format_list->clear(); + m_view.destination_list->blockSignals(true); m_view.destination_list->clear(); qDeleteAll(m_renderItems); qDeleteAll(m_renderCategory); @@ -1509,30 +1558,14 @@ void RenderWidget::parseProfiles(QString meta, QString group, QString profile) parseFile(exportFolder + filename, true); if (QFile::exists(exportFolder + "customprofiles.xml")) parseFile(exportFolder + "customprofiles.xml", true); - if (!meta.isEmpty()) { - m_view.destination_list->blockSignals(true); - m_view.destination_list->setCurrentIndex(m_view.destination_list->findData(meta)); - m_view.destination_list->blockSignals(false); - } - refreshCategory(); - QList child; - if (!group.isEmpty()) child = m_view.format_list->findItems(group, Qt::MatchExactly); - if (!child.isEmpty()) { - for (int i = 0; i < child.count(); i++) { - if (child.at(i)->data(MetaGroupRole).toString() == meta) { - m_view.format_list->setCurrentItem(child.at(i)); - break; - } - } - } - child.clear(); - m_view.size_list->blockSignals(false); - m_view.format_list->blockSignals(false); - if (!profile.isEmpty()) child = m_view.size_list->findItems(profile, Qt::MatchExactly); - if (!child.isEmpty()) m_view.size_list->setCurrentItem(child.at(0)); + int categoryIndex = m_view.destination_list->findData(meta); + if (categoryIndex == -1) categoryIndex = 0; + m_view.destination_list->setCurrentIndex(categoryIndex); + m_view.destination_list->blockSignals(false); + refreshCategory(group, profile); } -void RenderWidget::parseFile(QString exportFile, bool editable) +void RenderWidget::parseFile(const QString &exportFile, bool editable) { kDebug() << "// Parsing file: " << exportFile; kDebug() << "------------------------------"; @@ -1561,7 +1594,7 @@ void RenderWidget::parseFile(QString exportFile, bool editable) newprofiles.setAttribute("version", 1); newdoc.appendChild(newprofiles); QDomNodeList profilelist = doc.elementsByTagName("profile"); - for (int i = 0; i < profilelist.count(); i++) { + for (int i = 0; i < profilelist.count(); ++i) { QString category = i18nc("Category Name", "Custom"); QString extension; QDomNode parent = profilelist.at(i).parentNode(); @@ -1612,7 +1645,7 @@ void RenderWidget::parseFile(QString exportFile, bool editable) QString prof_extension = profile.attribute("extension"); if (!prof_extension.isEmpty()) extension = prof_extension; bool exists = false; - for (int j = 0; j < m_renderCategory.count(); j++) { + for (int j = 0; j < m_renderCategory.count(); ++j) { if (m_renderCategory.at(j)->text() == category && m_renderCategory.at(j)->data(MetaGroupRole) == dest) { exists = true; break; @@ -1629,7 +1662,7 @@ void RenderWidget::parseFile(QString exportFile, bool editable) // allowing to override default profiles - for (int j = 0; j < m_renderItems.count(); j++) { + for (int j = 0; j < m_renderItems.count(); ++j) { if (m_renderItems.at(j)->text() == profileName && m_renderItems.at(j)->data(MetaGroupRole) == dest) { QListWidgetItem *duplicate = m_renderItems.takeAt(j); delete duplicate; @@ -1696,7 +1729,7 @@ void RenderWidget::parseFile(QString exportFile, bool editable) extension = documentElement.attribute("extension", QString()); renderer = documentElement.attribute("renderer", QString()); bool exists = false; - for (int j = 0; j < m_renderCategory.count(); j++) { + for (int j = 0; j < m_renderCategory.count(); ++j) { if (m_renderCategory.at(j)->text() == groupName && m_renderCategory.at(j)->data(MetaGroupRole) == metagroupId) { exists = true; break; @@ -1746,12 +1779,12 @@ void RenderWidget::parseFile(QString exportFile, bool editable) item->setData(AudioBitratesRole, audioBitrates.split(',', QString::SkipEmptyParts)); item->setData(DefaultAudioBitrateRole, defaultAudioBitrate); if (profileElement.hasAttribute("url")) item->setData(ExtraRole, profileElement.attribute("url")); - if (editable) item->setData(EditableRole, exportFile); + //if (editable) item->setData(EditableRole, exportFile); m_renderItems.append(item); n = n.nextSibling(); } - i++; + ++i; } } @@ -1761,8 +1794,9 @@ void RenderWidget::setRenderJob(const QString &dest, int progress) { RenderJobItem *item; QList existing = m_view.running_jobs->findItems(dest, Qt::MatchExactly, 1); - if (!existing.isEmpty()) item = static_cast (existing.at(0)); - else { + if (!existing.isEmpty()) { + item = static_cast (existing.at(0)); + } else { item = new RenderJobItem(m_view.running_jobs, QStringList() << QString() << dest); if (progress == 0) { item->setStatus(WAITINGJOB); @@ -1858,7 +1892,7 @@ void RenderWidget::slotCheckJob() } m_view.abort_job->setEnabled(activate); /* - for (int i = 0; i < m_view.running_jobs->topLevelItemCount(); i++) { + for (int i = 0; i < m_view.running_jobs->topLevelItemCount(); ++i) { current = static_cast(m_view.running_jobs->topLevelItem(i)); if (current == static_cast (m_view.running_jobs->currentItem())) { current->setSizeHint(1, QSize(m_view.running_jobs->columnWidth(1), fontMetrics().height() * 3)); @@ -1939,10 +1973,11 @@ void RenderWidget::parseScriptFiles() void RenderWidget::slotCheckScript() { QTreeWidgetItem *current = m_view.scripts_list->currentItem(); - if (current == NULL) return; + if (current == NULL) + return; m_view.start_script->setEnabled(current->data(0, Qt::UserRole).toString().isEmpty()); m_view.delete_script->setEnabled(true); - for (int i = 0; i < m_view.scripts_list->topLevelItemCount(); i++) { + for (int i = 0; i < m_view.scripts_list->topLevelItemCount(); ++i) { current = m_view.scripts_list->topLevelItem(i); if (current == m_view.scripts_list->currentItem()) { current->setSizeHint(1, QSize(m_view.scripts_list->columnWidth(1), fontMetrics().height() * 3)); @@ -2005,10 +2040,8 @@ void RenderWidget::slotHideLog() m_view.error_box->setVisible(false); } -void RenderWidget::setRenderProfile(QMap props) +void RenderWidget::setRenderProfile(const QMap &props) { - m_view.destination_list->blockSignals(true); - m_view.format_list->blockSignals(true); m_view.scanning_list->setCurrentIndex(props.value("renderscanning").toInt()); int exportAudio = props.value("renderexportaudio").toInt(); switch (exportAudio) { @@ -2039,38 +2072,18 @@ void RenderWidget::setRenderProfile(QMap props) slotUpdateGuideBox(); QString url = props.value("renderurl"); - if (!url.isEmpty()) m_view.out_file->setUrl(KUrl(url)); + if (!url.isEmpty()) + m_view.out_file->setUrl(KUrl(url)); // set destination - for (int i = 0; i < m_view.destination_list->count(); i++) { - if (m_view.destination_list->itemData(i, Qt::UserRole) == props.value("renderdestination")) { - m_view.destination_list->setCurrentIndex(i); - break; - } - } - refreshCategory(); - - // set category - QString group = props.value("rendercategory"); - if (!group.isEmpty()) { - QList childs = m_view.format_list->findItems(group, Qt::MatchExactly); - if (!childs.isEmpty()) { - m_view.format_list->setCurrentItem(childs.at(0)); - m_view.format_list->scrollToItem(childs.at(0)); - } - refreshView(); - } - - // set profile - QList childs = m_view.size_list->findItems(props.value("renderprofile"), Qt::MatchExactly); - if (!childs.isEmpty()) { - m_view.size_list->setCurrentItem(childs.at(0)); - m_view.size_list->scrollToItem(childs.at(0)); - } - //refreshView(); + int categoryIndex = m_view.destination_list->findData(props.value("renderdestination")); + if (categoryIndex == -1) categoryIndex = 0; + m_view.destination_list->blockSignals(true); + m_view.destination_list->setCurrentIndex(categoryIndex); m_view.destination_list->blockSignals(false); - m_view.format_list->blockSignals(false); - + + // Clear previous error messages + refreshCategory(props.value("rendercategory"), props.value("renderprofile")); } bool RenderWidget::startWaitingRenderJobs() @@ -2124,7 +2137,7 @@ QString RenderWidget::getFreeScriptName(const KUrl &projectName, const QString & if (projectName.isEmpty()) fileName = i18n("script"); else fileName = projectName.fileName().section('.', 0, -2) + "_"; while (path.isEmpty() || QFile::exists(path)) { - ix++; + ++ix; path = scriptsFolder + prefix + fileName + QString::number(ix).rightJustified(3, '0', false) + ".sh"; } return path; @@ -2149,15 +2162,16 @@ void RenderWidget::missingClips(bool hasMissing) void RenderWidget::errorMessage(const QString &message) { -#if KDE_VERSION == KDE_MAKE_VERSION(4,9,4) - // Workaround crash in KDE: #311336 - show(); -#endif if (!message.isEmpty()) { #if KDE_IS_VERSION(4,7,0) m_infoMessage->setMessageType(KMessageWidget::Warning); m_infoMessage->setText(message); +#if KDE_IS_VERSION(4,10,0) m_infoMessage->animatedShow(); +#else + // Workaround KDE bug in KMessageWidget + QTimer::singleShot(0, m_infoMessage, SLOT(animatedShow())); +#endif #else m_view.errorLabel->setText(message); m_view.errorBox->setHidden(false); @@ -2165,10 +2179,19 @@ void RenderWidget::errorMessage(const QString &message) } else { #if KDE_IS_VERSION(4,7,0) - m_infoMessage->animatedHide(); + if (m_view.tabWidget->currentIndex() == 0 && m_infoMessage->isVisible()) { +#if KDE_IS_VERSION(4,10,0) + m_infoMessage->animatedHide(); #else - m_view.errorBox->setHidden(true); - m_view.errorLabel->setText(QString()); + QTimer::singleShot(0, m_infoMessage, SLOT(animatedHide())); +#endif + } else { + // Seems like animated hide does not work when page is not visible + m_infoMessage->hide(); + } +#else + m_view.errorBox->setHidden(true); + m_view.errorLabel->setText(QString()); #endif } @@ -2236,8 +2259,9 @@ bool RenderWidget::proxyRendering() void RenderWidget::setRescaleEnabled(bool enable) { - for (int i = 0; i < m_view.rescale_box->layout()->count(); i++) { - if (m_view.rescale_box->itemAt(i)->widget()) m_view.rescale_box->itemAt(i)->widget()->setEnabled(enable); + for (int i = 0; i < m_view.rescale_box->layout()->count(); ++i) { + if (m_view.rescale_box->itemAt(i)->widget()) + m_view.rescale_box->itemAt(i)->widget()->setEnabled(enable); } } @@ -2258,3 +2282,5 @@ void RenderWidget::keyPressEvent(QKeyEvent *e) { else QDialog::keyPressEvent(e); } + +#include "renderwidget.moc"