]> git.sesse.net Git - kdenlive/blobdiff - src/renderwidget.cpp
fix coverity 1134133 (dead code)
[kdenlive] / src / renderwidget.cpp
index 2b0199c4830c382319cb98dd1ccc8820307e53a3..385203ad6829fc54139cf66bd0db0e7dc17443b8 100644 (file)
@@ -46,6 +46,9 @@
 #include <QDBusInterface>
 #include <QThread>
 #include <QScriptEngine>
+#include <QKeyEvent>
+
+#include "locale.h"
 
 
 // Render profiles roles
@@ -80,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));
@@ -89,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:
@@ -132,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),
@@ -183,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);
 
@@ -234,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()));
 
@@ -253,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()));
@@ -274,6 +281,7 @@ RenderWidget::RenderWidget(const QString &projectfolder, bool enableProxy, MltVi
     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);
@@ -295,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();
@@ -328,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();
 }
 
@@ -379,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);
@@ -388,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());
@@ -397,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));
 }
 
@@ -405,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);
@@ -420,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));
     }
 }
 
@@ -447,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());
@@ -457,10 +467,29 @@ void RenderWidget::slotSaveProfile()
     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();
+    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();
@@ -478,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());
@@ -501,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;
@@ -542,7 +565,7 @@ void RenderWidget::saveProfile(QDomElement newprofile)
                 break;
             }
         }
-        i++;
+        ++i;
     }
 
     profiles.appendChild(newprofile);
@@ -566,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();
@@ -602,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());
@@ -616,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);
@@ -663,7 +708,7 @@ void RenderWidget::slotEditProfile()
                     break;
                 }
             }
-            i++;
+            ++i;
         }
 
         QDomElement profileElement = doc.createElement("profile");
@@ -675,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);
@@ -751,7 +790,7 @@ void RenderWidget::slotDeleteProfile(bool refresh)
             doc.documentElement().removeChild(profiles.item(i));
             break;
         }
-        i++;
+        ++i;
     }
 
     if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
@@ -796,8 +835,13 @@ void RenderWidget::updateButtons()
 }
 
 
-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;
@@ -828,20 +872,22 @@ void RenderWidget::slotPrepareExport(bool scriptExport)
 }
 
 
-void RenderWidget::slotExport(bool scriptExport, int zoneIn, int zoneOut, const QMap <QString, QString> metadata, const QString &playlistPath, const QString &scriptPath, bool exportAudio)
+void RenderWidget::slotExport(bool scriptExport, int zoneIn, int zoneOut, const QMap<QString, QString> &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.
     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);
         }
     }
 
@@ -869,7 +915,8 @@ void RenderWidget::slotExport(bool scriptExport, int zoneIn, int zoneOut, const
 
     // Set locale for render process if required
     if (QLocale().decimalPoint() != QLocale::system().decimalPoint()) {
-        render_process_args << QString("-locale:%1").arg(QLocale().name());
+       const QString currentLocale = setlocale(LC_NUMERIC, NULL);
+        render_process_args << QString("-locale:%1").arg(currentLocale);
     }
 
     double guideStart = 0;
@@ -899,7 +946,7 @@ void RenderWidget::slotExport(bool scriptExport, int zoneIn, int zoneOut, const
     if (m_view.export_meta->isChecked()) {
         QMap<QString, QString>::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;
         }
     }
@@ -949,11 +996,11 @@ void RenderWidget::slotExport(bool scriptExport, int zoneIn, int zoneOut, const
         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());
-    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<int>(m_view.checkTwoPass->isChecked()) + 1);
 
@@ -976,12 +1023,13 @@ void RenderWidget::slotExport(bool scriptExport, int zoneIn, int zoneOut, const
         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;
 
     QString group = m_view.size_list->currentItem()->data(MetaGroupRole).toString();
 
-    QString scriptName;
+    //QString scriptName;
     if (scriptExport) {
         // Generate script file
         QFile file(scriptPath);
@@ -991,8 +1039,8 @@ void RenderWidget::slotExport(bool scriptExport, int zoneIn, int zoneOut, const
         }
         QTextStream outStream(&file);
         outStream << "#! /bin/sh" << "\n" << "\n";
-        outStream << "SOURCE=" << "\"" + playlistPath + "\"" << "\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";
@@ -1023,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()));
@@ -1082,9 +1132,12 @@ void RenderWidget::slotExport(bool scriptExport, int zoneIn, int zoneOut, const
             renderItem->setMetadata(url);
         }
     }
+
     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();
@@ -1104,7 +1157,7 @@ void RenderWidget::checkRenderStatus()
     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());
@@ -1130,7 +1183,7 @@ void RenderWidget::startRendering(RenderJobItem *item)
     } else if (item->type() == ScriptRenderType){
         // Script item
         kDebug()<<"// SCRIPT process: "<<item->data(1, ParametersRole).toString();
-        if (QProcess::startDetached(item->data(1, ParametersRole).toString()) == false) {
+        if (QProcess::startDetached('"' + item->data(1, ParametersRole).toString() + '"') == false) {
             item->setStatus(FAILEDJOB);
         }
     }
@@ -1148,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());
@@ -1163,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);
@@ -1188,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());
@@ -1196,12 +1250,15 @@ void RenderWidget::refreshCategory()
         }
     }
 
-    // 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();
@@ -1219,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);
@@ -1236,16 +1294,21 @@ void RenderWidget::refreshView()
     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();
     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) {
@@ -1334,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();
     }
@@ -1347,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);
@@ -1375,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);
@@ -1422,7 +1485,7 @@ void RenderWidget::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()));
@@ -1439,7 +1502,7 @@ void RenderWidget::refreshParams()
         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()));
@@ -1462,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);
@@ -1498,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<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)
+void RenderWidget::parseFile(const QString &exportFile, bool editable)
 {
     kDebug() << "// Parsing file: " << exportFile;
     kDebug() << "------------------------------";
@@ -1540,7 +1584,6 @@ 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) {
@@ -1551,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();
@@ -1602,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;
@@ -1619,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;
@@ -1686,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;
@@ -1736,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;
     }
 }
 
@@ -1751,8 +1794,9 @@ void RenderWidget::setRenderJob(const QString &dest, int progress)
 {
     RenderJobItem *item;
     QList<QTreeWidgetItem *> existing = m_view.running_jobs->findItems(dest, Qt::MatchExactly, 1);
-    if (!existing.isEmpty()) item = static_cast<RenderJobItem*> (existing.at(0));
-    else {
+    if (!existing.isEmpty()) {
+        item = static_cast<RenderJobItem*> (existing.at(0));
+    } else {
         item = new RenderJobItem(m_view.running_jobs, QStringList() << QString() << dest);
         if (progress == 0) {
             item->setStatus(WAITINGJOB);
@@ -1790,7 +1834,7 @@ void RenderWidget::setRenderStatus(const QString &dest, int status, const QStrin
         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);
@@ -1848,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<RenderJobItem*>(m_view.running_jobs->topLevelItem(i));
         if (current == static_cast<RenderJobItem*> (m_view.running_jobs->currentItem())) {
             current->setSizeHint(1, QSize(m_view.running_jobs->columnWidth(1), fontMetrics().height() * 3));
@@ -1889,7 +1933,7 @@ void RenderWidget::parseScriptFiles()
             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);
@@ -1904,7 +1948,7 @@ void RenderWidget::parseScriptFiles()
             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"));
@@ -1916,27 +1960,24 @@ void RenderWidget::parseScriptFiles()
             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());
     }
-//     bool activate = false;
     QTreeWidgetItem *script = m_view.scripts_list->topLevelItem(0);
     if (script) {
         m_view.scripts_list->setCurrentItem(script);
         script->setSelected(true);
-//         activate = true;
     }
-//    m_view.start_script->setEnabled(activate);
-//    m_view.delete_script->setEnabled(activate);
 }
 
 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));
@@ -1999,10 +2040,8 @@ void RenderWidget::slotHideLog()
     m_view.error_box->setVisible(false);
 }
 
-void RenderWidget::setRenderProfile(QMap <QString, QString> props)
+void RenderWidget::setRenderProfile(const 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) {
@@ -2033,44 +2072,24 @@ void RenderWidget::setRenderProfile(QMap <QString, QString> 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<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;
@@ -2108,15 +2127,18 @@ bool RenderWidget::startWaitingRenderJobs()
     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";
+        ++ix;
+        path = scriptsFolder + prefix + fileName + QString::number(ix).rightJustified(3, '0', false) + ".sh";
     }
     return path;
 }
@@ -2144,7 +2166,12 @@ void RenderWidget::errorMessage(const QString &message)
 #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);
@@ -2152,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
 
     }
@@ -2223,8 +2259,28 @@ 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);
     }   
 }
 
+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);
+}
+
+
+#include "renderwidget.moc"