]> git.sesse.net Git - kdenlive/blobdiff - src/renderwidget.h
Fix regression introduced by document validation changes (document profile was not...
[kdenlive] / src / renderwidget.h
index 2bbed5ffc7c62d8fdd4d8b90f5ac4ad66f35d499..7e4e8fe978022e69f1ee04f39491a0569e76a531 100644 (file)
 #ifndef RENDERWIDGET_H
 #define RENDERWIDGET_H
 
-#include <QDialog>
 #include <QPushButton>
+#include <QPainter>
+#include <QItemDelegate>
 
+#include "definitions.h"
 #include "ui_renderwidget_ui.h"
 
-class RenderWidget : public QDialog {
+class QDomElement;
+
+
+// RenderViewDelegate is used to draw the progress bars.
+class RenderViewDelegate : public QItemDelegate
+{
+    Q_OBJECT
+public:
+    RenderViewDelegate(QWidget *parent) : QItemDelegate(parent) {}
+
+    void paint(QPainter *painter, const QStyleOptionViewItem &option,
+               const QModelIndex &index) const {
+        if (index.column() == 0) {
+            QItemDelegate::paint(painter, option, index);
+            return;
+        } else if (index.column() == 1) {
+            QRect r1 = option.rect;
+            painter->save();
+            if (option.state & (QStyle::State_Selected)) {
+                painter->setPen(option.palette.color(QPalette::HighlightedText));
+                painter->fillRect(r1, option.palette.highlight());
+            } else painter->setPen(option.palette.color(QPalette::Text));
+            QFont font = painter->font();
+            font.setBold(true);
+            painter->setFont(font);
+            int mid = (int)((r1.height() / 2));
+            r1.setBottom(r1.y() + mid);
+            QRect r2 = option.rect;
+            r2.setTop(r2.y() + mid);
+            painter->drawText(r1, Qt::AlignLeft | Qt::AlignBottom , index.data().toString());
+            font.setBold(false);
+            painter->setFont(font);
+            painter->setPen(option.palette.color(QPalette::Mid));
+            painter->drawText(r2, Qt::AlignLeft | Qt::AlignVCenter , index.data(Qt::UserRole).toString());
+            painter->restore();
+            return;
+        }
+        // Set up a QStyleOptionProgressBar to precisely mimic the
+        // environment of a progress bar.
+        QStyleOptionProgressBar progressBarOption;
+        progressBarOption.state = option.state;
+        progressBarOption.direction = QApplication::layoutDirection();
+        QRect rect = option.rect;
+        if (option.state & (QStyle::State_Selected)) {
+            painter->setPen(option.palette.color(QPalette::HighlightedText));
+            painter->fillRect(rect, option.palette.highlight());
+        }
+
+        int mid = rect.height() / 2;
+        rect.setTop(rect.top() + mid / 2);
+        rect.setHeight(mid);
+        progressBarOption.rect = rect;
+        progressBarOption.fontMetrics = QApplication::fontMetrics();
+        progressBarOption.minimum = 0;
+        progressBarOption.maximum = 100;
+        progressBarOption.textAlignment = Qt::AlignCenter;
+        progressBarOption.textVisible = true;
+
+        // Set the progress and text values of the style option.
+        int progress = index.data(Qt::UserRole).toInt();
+        progressBarOption.progress = progress < 0 ? 0 : progress;
+        progressBarOption.text = QString().sprintf("%d%%", progressBarOption.progress);
+
+        // Draw the progress bar onto the view.
+        QApplication::style()->drawControl(QStyle::CE_ProgressBar, &progressBarOption, painter);
+    }
+};
+
+
+// RenderScriptDelegate is used to draw the script items.
+class RenderScriptDelegate : public QItemDelegate
+{
+    Q_OBJECT
+public:
+    RenderScriptDelegate(QWidget *parent) : QItemDelegate(parent) {}
+
+    void paint(QPainter *painter, const QStyleOptionViewItem &option,
+               const QModelIndex &index) const {
+        if (index.column() == 0) {
+            QRect r1 = option.rect;
+            painter->save();
+            if (option.state & (QStyle::State_Selected)) {
+                painter->setPen(option.palette.color(QPalette::HighlightedText));
+                painter->fillRect(r1, option.palette.highlight());
+            } else painter->setPen(option.palette.color(QPalette::Text));
+            QFont font = painter->font();
+            font.setBold(true);
+            painter->setFont(font);
+            int mid = (int)((r1.height() / 2));
+            r1.setBottom(r1.y() + mid);
+            r1.setLeft(r1.left() + 3);
+            QRect r2 = option.rect;
+            r2.setTop(r2.y() + mid);
+            r2.setLeft(r2.left() + 3);
+            painter->drawText(r1, Qt::AlignLeft | Qt::AlignBottom , index.data().toString());
+            font.setBold(false);
+            painter->setFont(font);
+            painter->setPen(option.palette.color(QPalette::Mid));
+            painter->drawText(r2, Qt::AlignLeft | Qt::AlignVCenter , index.data(Qt::UserRole).toString());
+            painter->restore();
+            return;
+        } else QItemDelegate::paint(painter, option, index);
+    }
+};
+
+class RenderWidget : public QDialog
+{
     Q_OBJECT
 
 public:
-    RenderWidget(QWidget * parent = 0);
-    void setDocumentStandard(QString std);
+    explicit RenderWidget(const QString &projectfolder, QWidget * parent = 0);
+    void setGuides(QDomElement guidesxml, double duration);
+    void focusFirstVisibleItem();
+    void setProfile(MltVideoProfile profile);
+    void setRenderJob(const QString &dest, int progress = 0);
+    void setRenderStatus(const QString &dest, int status, const QString &error);
+    void setDocumentPath(const QString path);
+    void reloadProfiles();
+
 private slots:
+    void slotUpdateButtons(KUrl url);
     void slotUpdateButtons();
-    void slotExport();
+    void slotExport(bool scriptExport = false);
     void refreshView();
     void refreshParams();
+    void slotSaveProfile();
+    void slotEditProfile();
+    void slotDeleteProfile(bool refresh = true);
+    void slotUpdateGuideBox();
+    void slotCheckStartGuidePosition();
+    void slotCheckEndGuidePosition();
+    void showInfoPanel();
+    void slotAbortCurrentJob();
+    void slotStartScript();
+    void slotDeleteScript();
+    void slotGenerateScript();
+    void parseScriptFiles();
+    void slotCheckScript();
+    void slotCheckJob();
+    void slotEditItem(QListWidgetItem *item);
+    void slotCLeanUpJobs();
+    void slotHideLog();
 
 private:
     Ui::RenderWidget_UI m_view;
-    QString m_standard;
-    void parseProfiles();
+    MltVideoProfile m_profile;
+    QString m_projectFolder;
+    void parseProfiles(QString meta = QString(), QString group = QString(), QString profile = QString());
+    void parseFile(QString exportFile, bool editable);
+    void updateButtons();
+    KUrl filenameWithExtension(KUrl url, QString extension);
+    void checkRenderStatus();
 
 signals:
-    void doRender(const QString&, const QStringList &, bool, bool);
+    void doRender(const QStringList&, const QStringList&);
+    void abortProcess(const QString &url);
+    void openDvdWizard(const QString &url, const QString &profile);
 };