m_view.splitter->setStretchFactor(0, 2);
m_view.out_file->setMode(KFile::File);
+ m_view.out_file->setFocusPolicy(Qt::ClickFocus);
m_view.running_jobs->setHeaderLabels(QStringList() << QString() << i18n("File"));
m_jobsDelegate = new RenderViewDelegate(this);
if (customGroup.isEmpty()) customGroup = i18nc("Group Name", "Custom");
ui.group_name->setText(customGroup);
- QStringList arguments = m_view.advanced_params->toPlainText().split(" ", QString::SkipEmptyParts);
+ QStringList arguments = m_view.advanced_params->toPlainText().split(' ', QString::SkipEmptyParts);
ui.parameters->setText(arguments.join(" "));
ui.extension->setText(m_view.size_list->currentItem()->data(ExtensionRole).toString());
ui.profile_name->setFocus();
}
-void RenderWidget::focusFirstVisibleItem()
+void RenderWidget::focusFirstVisibleItem(const QString &profile)
{
+ if (!profile.isEmpty()) {
+ QList <QListWidgetItem *> 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;
QString extension = item->data(ExtensionRole).toString();
if (!dest.endsWith(extension, Qt::CaseInsensitive)) {
if (KMessageBox::questionYesNo(this, i18n("File has no extension. Add extension (%1)?", extension)) == KMessageBox::Yes) {
- dest.append("." + extension);
+ dest.append('.' + extension);
}
}
renderArgs.append(subsize);
}
bool resizeProfile = (subsize != currentSize);
- QStringList paramsList = renderArgs.split(" ", QString::SkipEmptyParts);
+ QStringList paramsList = renderArgs.split(' ', QString::SkipEmptyParts);
QScriptEngine sEngine;
sEngine.globalObject().setProperty("bitrate", m_view.comboBitrates->currentText());
render_process_args << "consumer:" + (scriptExport ? "$SOURCE" : playlistPath);
else
render_process_args << (scriptExport ? "$SOURCE" : playlistPath);
+
render_process_args << (scriptExport ? "$TARGET" : KUrl(dest).url());
render_process_args << paramsList;
}
QTextStream outStream(&file);
outStream << "#! /bin/sh" << "\n" << "\n";
- outStream << "SOURCE=" << "\"" + KUrl(playlistPath).url() + "\"" << "\n";
- outStream << "TARGET=" << "\"" + KUrl(dest).url() + "\"" << "\n";
+ outStream << "SOURCE=" << "\"" + QUrl(playlistPath).toEncoded() + "\"" << "\n";
+ outStream << "TARGET=" << "\"" + QUrl(dest).toEncoded() + "\"" << "\n";
outStream << "RENDERER=" << "\"" + m_renderer + "\"" << "\n";
outStream << "MELT=" << "\"" + KdenliveSettings::rendererpath() + "\"" << "\n";
outStream << "PARAMETERS=" << "\"" + render_process_args.join(" ") + "\"" << "\n";
item = static_cast<RenderJobItem*> (m_view.running_jobs->topLevelItem(0));
bool waitingJob = false;
- // Find first aiting job
+ // Find first waiting job
while (item) {
if (item->status() == WAITINGJOB) {
item->setData(1, TimeRole, QTime::currentTime());
}
}
-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);
}
}
- // activate first visible item
+ // activate requested item or first visible
+ QList<QListWidgetItem *> 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();
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);
KIcon brokenIcon("dialog-close");
KIcon warningIcon("dialog-warning");
- const QStringList formatsList = KdenliveSettings::supportedformats();
- const QStringList vcodecsList = KdenliveSettings::videocodecs();
- const QStringList acodecsList = KdenliveSettings::audiocodecs();
+ QStringList formatsList;
+ QStringList vcodecsList;
+ QStringList acodecsList;
+ if (!KdenliveSettings::bypasscodeccheck()) {
+ formatsList= KdenliveSettings::supportedformats();
+ vcodecsList = KdenliveSettings::videocodecs();
+ acodecsList = KdenliveSettings::audiocodecs();
+ }
KColorScheme scheme(palette().currentColorGroup(), KColorScheme::Window);
const QColor disabled = scheme.foreground(KColorScheme::InactiveText).color();
}
}
}
- focusFirstVisibleItem();
+ focusFirstVisibleItem(profile);
m_view.size_list->blockSignals(false);
- m_view.format_list->blockSignals(false);
if (m_view.size_list->count() > 0) {
refreshParams();
}
m_view.bitrateLabel->setEnabled(true);
if ( item->data(BitratesRole).canConvert(QVariant::StringList) && item->data(BitratesRole).toStringList().count()) {
QStringList bitrates = item->data(BitratesRole).toStringList();
- foreach (QString bitrate, bitrates)
+ foreach (const QString &bitrate, bitrates)
m_view.comboBitrates->addItem(bitrate);
if (item->data(DefaultBitrateRole).canConvert(QVariant::String))
m_view.comboBitrates->setCurrentIndex(bitrates.indexOf(item->data(DefaultBitrateRole).toString()));
m_view.audiobitrateLabel->setEnabled(true);
if ( item->data(AudioBitratesRole).canConvert(QVariant::StringList) && item->data(AudioBitratesRole).toStringList().count()) {
QStringList audiobitrates = item->data(AudioBitratesRole).toStringList();
- foreach (QString bitrate, audiobitrates)
+ foreach (const QString &bitrate, audiobitrates)
m_view.comboAudioBitrates->addItem(bitrate);
if (item->data(DefaultAudioBitrateRole).canConvert(QVariant::String))
m_view.comboAudioBitrates->setCurrentIndex(audiobitrates.indexOf(item->data(DefaultAudioBitrateRole).toString()));
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);
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<QListWidgetItem *> 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)
bool replaceLibfaacCodec = false;
if (!acodecsList.contains("aac") && acodecsList.contains("libfaac")) replaceLibfaacCodec = true;
-
if (editable || groups.count() == 0) {
QDomElement profiles = doc.documentElement();
if (editable && profiles.attribute("version", 0).toInt() < 1) {
item->setData(1, Qt::UserRole, t);
QString itemGroup = item->data(0, Qt::UserRole).toString();
if (itemGroup == "dvd") {
- emit openDvdWizard(item->text(1), item->metadata());
+ emit openDvdWizard(item->text(1));
} else if (itemGroup == "websites") {
QString url = item->metadata();
if (!url.isEmpty()) new KRun(url, this);
QTextStream stream(&file);
while (!stream.atEnd()) {
QString line = stream.readLine();
- kDebug()<<"# :"<<line;
+ //kDebug()<<"# :"<<line;
if (line.startsWith("TARGET=")) {
target = line.section("TARGET=\"", 1);
target = target.section('"', 0, 0);
file.close();
}
if (target.isEmpty()) continue;
- kDebug()<<"ScRIPT RENDERER: "<<renderer<<"\n++++++++++++++++++++++++++";
+ //kDebug()<<"ScRIPT RENDERER: "<<renderer<<"\n++++++++++++++++++++++++++";
item = new QTreeWidgetItem(m_view.scripts_list, QStringList() << QString() << scriptpath.fileName());
if (!renderer.isEmpty() && renderer.contains('/') && !QFile::exists(renderer)) {
item->setIcon(0, KIcon("dialog-cancel"));
item->setData(0, Qt::UserRole, '1');
} else item->setIcon(0, KIcon("application-x-executable-script"));
item->setSizeHint(0, QSize(m_view.scripts_list->columnWidth(0), fontMetrics().height() * 2));
- item->setData(1, Qt::UserRole, KUrl(target).path());
+ item->setData(1, Qt::UserRole, KUrl(QUrl::fromEncoded(target.toUtf8())).pathOrUrl());
item->setData(1, Qt::UserRole + 1, scriptpath.path());
}
QTreeWidgetItem *script = m_view.scripts_list->topLevelItem(0);
void RenderWidget::setRenderProfile(QMap <QString, QString> 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) {
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<QListWidgetItem *> 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<QListWidgetItem *> 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()
{
m_blockProcessing = true;
- QString autoscriptFile = getFreeScriptName("auto");
+ QString autoscriptFile = getFreeScriptName(KUrl(), "auto");
QFile file(autoscriptFile);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
kWarning() << "////// ERROR writing to file: " << autoscriptFile;
return true;
}
-QString RenderWidget::getFreeScriptName(const QString &prefix)
+QString RenderWidget::getFreeScriptName(const KUrl &projectName, const QString &prefix)
{
int ix = 0;
QString scriptsFolder = m_projectFolder + "scripts/";
KStandardDirs::makeDir(scriptsFolder);
QString path;
+ QString fileName;
+ if (projectName.isEmpty()) fileName = i18n("script");
+ else fileName = projectName.fileName().section('.', 0, -2) + "_";
while (path.isEmpty() || QFile::exists(path)) {
ix++;
- path = scriptsFolder + prefix + i18n("script") + QString::number(ix).rightJustified(3, '0', false) + ".sh";
+ path = scriptsFolder + prefix + fileName + QString::number(ix).rightJustified(3, '0', false) + ".sh";
}
return path;
}
#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);
}
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
}
}
}
+void RenderWidget::keyPressEvent(QKeyEvent *e) {
+ if(e->key()==Qt::Key_Return || e->key()==Qt::Key_Enter) {
+ switch (m_view.tabWidget->currentIndex()) {
+ case 1:
+ if (m_view.start_job->isEnabled()) slotStartCurrentJob();
+ break;
+ case 2:
+ if (m_view.start_script->isEnabled()) slotStartScript();
+ break;
+ default:
+ if (m_view.buttonRender->isEnabled()) slotPrepareExport();
+ break;
+ }
+ }
+ else QDialog::keyPressEvent(e);
+}
+