QHeaderView *header = m_view.running_jobs->header();
QFontMetrics fm = fontMetrics();
- //header->resizeSection(0, fm.width("typical-name-for-a-torrent.torrent"));
header->setResizeMode(0, QHeaderView::Fixed);
header->resizeSection(0, 30);
header->setResizeMode(1, QHeaderView::Interactive);
- header->resizeSection(1, fm.width("typical-name-for-a-file.torrent"));
header->setResizeMode(2, QHeaderView::Fixed);
- header->resizeSection(1, width() * 2 / 3);
+ header->resizeSection(1, width() * 2 / 3 - 15);
header->setResizeMode(2, QHeaderView::Interactive);
//header->setResizeMode(1, QHeaderView::Fixed);
- m_view.scripts_list->setHeaderLabels(QStringList() << i18n("Script Files"));
- m_view.scripts_list->setItemDelegate(new RenderScriptDelegate(this));
+ m_view.scripts_list->setHeaderLabels(QStringList() << QString() << i18n("Script Files"));
+ m_view.scripts_list->setItemDelegate(new RenderViewDelegate(this));
+ header = m_view.scripts_list->header();
+ header->setResizeMode(0, QHeaderView::Fixed);
+ header->resizeSection(0, 30);
focusFirstVisibleItem();
}
outStream << "#! /bin/sh" << "\n" << "\n";
outStream << "SOURCE=" << "\"" + playlistPath + "\"" << "\n";
outStream << "TARGET=" << "\"" + dest + "\"" << "\n";
- outStream << renderer << " " << render_process_args.join(" ") << "\n" << "\n";
+ outStream << "RENDERER=" << "\"" + renderer + "\"" << "\n";
+ outStream << "MELT=" << "\"" + render_process_args.takeFirst() + "\"" << "\n";
+ outStream << "PARAMETERS=" << "\"" + render_process_args.join(" ") + "\"" << "\n";
+ outStream << "$RENDERER $MELT $PARAMETERS" << "\n" << "\n";
if (file.error() != QFile::NoError) {
KMessageBox::error(this, i18n("Cannot write to file %1", scriptPath));
file.close();
// Set rendering type
if (group == "dvd") {
- renderParameters << QString::number(m_view.create_chapter->isChecked());
if (m_view.open_dvd->isChecked()) {
renderItem->setData(0, Qt::UserRole, group);
if (renderArgs.contains("profile=")) {
}
}
} else {
- renderParameters << QString::number(false);
if (group == "websites" && m_view.open_browser->isChecked()) {
renderItem->setData(0, Qt::UserRole, group);
// pass the url
if (m_blockProcessing) return;
QTreeWidgetItem *item = m_view.running_jobs->topLevelItem(0);
while (item) {
- if (item->data(1, Qt::UserRole + 2).toInt() == RUNNINGJOB) break;
- else if (item->data(1, Qt::UserRole + 2).toInt() == WAITINGJOB) {
+ if (item->data(1, Qt::UserRole + 2).toInt() == RUNNINGJOB) return;
+ item = m_view.running_jobs->itemBelow(item);
+ }
+ item = m_view.running_jobs->topLevelItem(0);
+ while (item) {
+ if (item->data(1, Qt::UserRole + 2).toInt() == WAITINGJOB) {
item->setData(1, Qt::UserRole + 1, QTime::currentTime());
if (item->data(1, Qt::UserRole + 4).isNull()) {
+ // Normal render process
QString renderer = QCoreApplication::applicationDirPath() + QString("/kdenlive_render");
if (!QFile::exists(renderer)) renderer = "kdenlive_render";
QProcess::startDetached(renderer, item->data(1, Qt::UserRole + 3).toStringList());
KNotification::event("RenderStarted", i18n("Rendering <i>%1</i> started", item->text(1)), QPixmap(), this);
- //emit doRender(item->data(1, Qt::UserRole + 3).toStringList(), item->data(1, Qt::UserRole + 2).toStringList());
} else {
// Script item
- QProcess::startDetached(item->data(1, Qt::UserRole + 3).toString());
+ if (QProcess::startDetached(item->data(1, Qt::UserRole + 3).toString()) == false) {
+ item->setData(1, Qt::UserRole, i18n("Rendering crashed"));
+ item->setIcon(0, KIcon("dialog-close"));
+ item->setData(2, Qt::UserRole, 100);
+ }
}
break;
}
QStringList scriptFiles = QDir(m_projectFolder + "scripts").entryList(scriptsFilter, QDir::Files);
for (int i = 0; i < scriptFiles.size(); ++i) {
KUrl scriptpath(m_projectFolder + "scripts/" + scriptFiles.at(i));
- item = new QTreeWidgetItem(m_view.scripts_list, QStringList() << scriptpath.fileName());
+ item = new QTreeWidgetItem(m_view.scripts_list, QStringList() << QString() << scriptpath.fileName());
QString target;
+ QString renderer;
+ QString melt;
QFile file(scriptpath.path());
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
while (!file.atEnd()) {
QByteArray line = file.readLine();
if (line.startsWith("TARGET=")) {
- target = QString(line).section("TARGET=", 1);
+ target = QString(line).section("TARGET=", 1).simplified();
target.remove(QChar('"'));
- break;
+ } else if (line.startsWith("RENDERER=")) {
+ renderer = QString(line).section("RENDERER=", 1).simplified();
+ renderer.remove(QChar('"'));
+ } else if (line.startsWith("MELT=")) {
+ melt = QString(line).section("MELT=", 1).simplified();
+ melt.remove(QChar('"'));
}
}
file.close();
}
+ if (!renderer.isEmpty() && renderer.contains('/') && !QFile::exists(renderer)) {
+ item->setIcon(0, KIcon("dialog-cancel"));
+ item->setToolTip(1, i18n("Script contains wrong command: %1", renderer));
+ } else if (!melt.isEmpty() && melt.contains('/') && !QFile::exists(melt)) {
+ item->setIcon(0, KIcon("dialog-cancel"));
+ item->setToolTip(1, i18n("Script contains wrong command: %1", melt));
+ } else item->setIcon(0, KIcon("application-x-executable-script"));
item->setSizeHint(0, QSize(m_view.scripts_list->columnWidth(0), fontMetrics().height() * 2));
- item->setData(0, Qt::UserRole, target.simplified());
- item->setData(0, Qt::UserRole + 1, scriptpath.path());
+ item->setData(1, Qt::UserRole, target.simplified());
+ item->setData(1, Qt::UserRole + 1, scriptpath.path());
}
bool activate = false;
QTreeWidgetItem *script = m_view.scripts_list->topLevelItem(0);
{
QTreeWidgetItem *item = m_view.scripts_list->currentItem();
if (item) {
- QString destination = item->data(0, Qt::UserRole).toString();
- QString path = item->data(0, Qt::UserRole + 1).toString();
+ QString destination = item->data(1, Qt::UserRole).toString();
+ QString path = item->data(1, Qt::UserRole + 1).toString();
// Insert new job in queue
QTreeWidgetItem *renderItem;
QList<QTreeWidgetItem *> existing = m_view.running_jobs->findItems(destination, Qt::MatchExactly, 1);
{
QTreeWidgetItem *item = m_view.scripts_list->currentItem();
if (item) {
- QString path = item->data(0, Qt::UserRole + 1).toString();
+ QString path = item->data(1, Qt::UserRole + 1).toString();
KIO::NetAccess::del(path + ".mlt", this);
KIO::NetAccess::del(path, this);
parseScriptFiles();
if (file.error() != QFile::NoError) {
KMessageBox::error(0, i18n("Cannot write to file %1", autoscriptFile));
file.close();
+ m_blockProcessing = false;
return false;
}
file.close();
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) {
+ if (index.column() == 1) {
QRect r1 = option.rect;
painter->save();
if (option.state & (QStyle::State_Selected)) {
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();
+ } else if (index.column() == 2) {
+ // 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(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;
+ 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);
} else QItemDelegate::paint(painter, option, index);
}
};
+
class RenderWidget : public QDialog
{
Q_OBJECT