]> git.sesse.net Git - kdenlive/commitdiff
Jobs can now be aborted from the "running job" view
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Thu, 15 Jan 2009 15:56:45 +0000 (15:56 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Thu, 15 Jan 2009 15:56:45 +0000 (15:56 +0000)
svn path=/branches/KDE4/; revision=2922

renderer/renderjob.cpp
renderer/renderjob.h
src/mainwindow.cpp
src/mainwindow.h
src/org.kdenlive.MainWindow.xml
src/renderwidget.cpp
src/renderwidget.h

index 13be2397132c0742f91928405572dc09e8a77ca6..7c2448b6e92c82052a170a0e0e636ce97f8975bb 100644 (file)
@@ -80,9 +80,18 @@ RenderJob::~RenderJob() {
     m_logfile.close();
 }
 
+void RenderJob::slotAbort(const QString& url) {
+    if (m_dest == url) slotAbort();
+}
+
 void RenderJob::slotAbort() {
     qDebug() << "Kdenlive-render: JOBĀ ABORTED BY USER...";
     m_renderProcess->kill();
+
+    if (m_kdenliveinterface) {
+        m_dbusargs[1] = -3;
+        m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, "setRenderingProgress", m_dbusargs);
+    }
     if (m_jobUiserver) m_jobUiserver->call("terminate", QString());
     if (m_erase) {
         QFile f(m_scenelist);
@@ -173,6 +182,8 @@ void RenderJob::start() {
         m_dbusargs.append(m_dest);
         m_dbusargs.append((int) 0);
         m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, "setRenderingProgress", m_dbusargs);
+        connect(m_kdenliveinterface, SIGNAL(abortRenderJob(const QString &)),
+                this, SLOT(slotAbort(const QString&)));
     }
 
     // Because of the logging, we connect to stderr in all cases.
index 021131b1b43407e9ac39e8b2e94b4c245d8b13e8..3683a96170c48e63f4212477907a8174676ac050 100644 (file)
@@ -40,6 +40,7 @@ private slots:
     void slotIsOver(int exitcode, QProcess::ExitStatus status);
     void receivedStderr();
     void slotAbort();
+    void slotAbort(const QString& url);
 
 private:
     QString m_scenelist;
index dfb8790fcd4a646039574aa475268897467de041..2e66714e2005a02b8d8f586c71e73458d395ed3a 100644 (file)
@@ -1395,6 +1395,7 @@ void MainWindow::slotRenderProject() {
     if (!m_renderWidget) {
         m_renderWidget = new RenderWidget(this);
         connect(m_renderWidget, SIGNAL(doRender(const QString&, const QString&, const QStringList &, const QStringList &, bool, bool, double, double, bool)), this, SLOT(slotDoRender(const QString&, const QString&, const QStringList &, const QStringList &, bool, bool, double, double, bool)));
+        connect(m_renderWidget, SIGNAL(abortProcess(const QString &)), this, SIGNAL(abortRenderJob(const QString &)));
         if (m_activeDocument) {
             m_renderWidget->setProfile(m_activeDocument->mltProfile());
             m_renderWidget->setGuides(m_activeDocument->guidesXml(), m_activeDocument->projectDuration());
index ba2ca8f9eb4885180cb3dae9740a0ed591c9528d..57d87fe6a9d0057075d4ae33eba54e6b1c283802 100644 (file)
@@ -287,6 +287,9 @@ private slots:
     void generateClip();
     void slotZoneMoved(int start, int end);
     void slotUpdatePreviewSettings();
+
+signals:
+    Q_SCRIPTABLE void abortRenderJob(const QString &url);
 };
 
 
index ac76ad218a9105205dd46ace85916e6f5c1b3e59..e7cdc1078139feb5875eee3639953cf286a20020 100644 (file)
@@ -1,6 +1,9 @@
 <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
 <node>
   <interface name="org.kdenlive.MainWindow">
+    <signal name="abortRenderJob">
+      <arg name="url" type="s" direction="out"/>
+    </signal>
     <method name="setRenderingProgress">
       <arg name="url" type="s" direction="in"/>
       <arg name="progress" type="i" direction="in"/>
index 2cd538e6bdd886d68ffa7038ed3ab2c54f752271..978ce89978fc3fb0dc19f495f93ec7329b3031a6 100644 (file)
@@ -68,6 +68,7 @@ RenderWidget::RenderWidget(QWidget * parent): QDialog(parent) {
     connect(m_view.buttonEdit, SIGNAL(clicked()), this, SLOT(slotEditProfile()));
     connect(m_view.buttonDelete, SIGNAL(clicked()), this, SLOT(slotDeleteProfile()));
     connect(m_view.buttonStart, SIGNAL(clicked()), this, SLOT(slotExport()));
+    connect(m_view.abort_job, SIGNAL(clicked()), this, SLOT(slotAbortCurrentJob()));
     connect(m_view.buttonClose, SIGNAL(clicked()), this, SLOT(hide()));
     connect(m_view.buttonClose2, SIGNAL(clicked()), this, SLOT(hide()));
     connect(m_view.out_file, SIGNAL(textChanged(const QString &)), this, SLOT(slotUpdateButtons()));
@@ -645,6 +646,10 @@ void RenderWidget::setRenderJob(const QString &dest, int progress) {
             // Rendering crashed
             existing.at(0)->setIcon(0, KIcon("dialog-close"));
             existing.at(0)->setData(1, Qt::UserRole, 0);
+        } else if (progress == -3) {
+            // User aborted job
+            existing.at(0)->setIcon(0, KIcon("dialog-close"));
+            existing.at(0)->setData(1, Qt::UserRole, 100);
         } else existing.at(0)->setData(1, Qt::UserRole, progress);
         return;
     }
@@ -657,8 +662,17 @@ void RenderWidget::setRenderJob(const QString &dest, int progress) {
         // Rendering crashed
         item->setIcon(0, KIcon("dialog-close"));
         item->setData(1, Qt::UserRole, 0);
+    } else if (progress == -3) {
+        // User aborted job
+        item->setIcon(0, KIcon("dialog-close"));
+        item->setData(1, Qt::UserRole, 100);
     } else item->setData(1, Qt::UserRole, progress);
 
 }
 
+void RenderWidget::slotAbortCurrentJob() {
+    QTreeWidgetItem *current = m_view.running_jobs->currentItem();
+    if (current) emit abortProcess(current->text(0));
+}
+
 #include "renderwidget.moc"
index f2d44d7121ba5aeea4779bfbb31b31408e8e96a7..24e82aa1b4b9d1710d74b56f209b3972aa6d2c70 100644 (file)
@@ -87,6 +87,7 @@ private slots:
     void slotCheckEndGuidePosition();
     void showInfoPanel();
     void slotUpdateExperimentalRendering();
+    void slotAbortCurrentJob();
 
 private:
     Ui::RenderWidget_UI m_view;
@@ -97,6 +98,7 @@ private:
 
 signals:
     void doRender(const QString&, const QString&, const QStringList &, const QStringList &, bool, bool, double, double, bool);
+    void abortProcess(const QString &url);
 };