X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Frenderwidget.cpp;h=c521e39fc7d5ec22543fea6d741ee13af8654902;hb=e9388f39f0d977f0a89ed8c8971502c5f9d5065b;hp=d0d486e580acfc20c0cdee13bc05a9af494d8e0c;hpb=d20fa38526368d808a18d9558c25747bb731c38a;p=kdenlive diff --git a/src/renderwidget.cpp b/src/renderwidget.cpp index d0d486e5..c521e39f 100644 --- a/src/renderwidget.cpp +++ b/src/renderwidget.cpp @@ -464,6 +464,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 +500,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()); @@ -619,6 +632,25 @@ 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); @@ -678,19 +710,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); @@ -799,8 +825,12 @@ 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; @@ -903,7 +933,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 +986,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); @@ -1169,17 +1199,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); @@ -1202,12 +1233,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 +1259,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); @@ -1345,9 +1380,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(); } @@ -1475,10 +1509,7 @@ void RenderWidget::reloadProfiles() void RenderWidget::parseProfiles(QString meta, QString group, 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,27 +1540,11 @@ 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) @@ -2007,8 +2022,6 @@ void RenderWidget::slotHideLog() void RenderWidget::setRenderProfile(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) { @@ -2042,35 +2055,14 @@ void RenderWidget::setRenderProfile(QMap props) 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() @@ -2166,14 +2158,19 @@ void RenderWidget::errorMessage(const QString &message) } else { #if KDE_IS_VERSION(4,7,0) + if (m_view.tabWidget->currentIndex() == 0 && m_infoMessage->isVisible()) { #if KDE_IS_VERSION(4,10,0) - m_infoMessage->animatedHide(); + m_infoMessage->animatedHide(); #else - QTimer::singleShot(0, m_infoMessage, SLOT(animatedHide())); + 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()); + m_view.errorBox->setHidden(true); + m_view.errorLabel->setText(QString()); #endif }