From 17b33c21877d36100aa6e70e957ef208b3a93e5e Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Thu, 29 Jan 2009 15:09:35 +0000 Subject: [PATCH] Display timing info in rendering jog widget svn path=/branches/KDE4/; revision=3001 --- src/renderwidget.cpp | 58 +++++--- src/renderwidget.h | 44 +++++- src/widgets/renderwidget_ui.ui | 262 +++++++++++++++------------------ 3 files changed, 202 insertions(+), 162 deletions(-) diff --git a/src/renderwidget.cpp b/src/renderwidget.cpp index a28aa0f7..07879ceb 100644 --- a/src/renderwidget.cpp +++ b/src/renderwidget.cpp @@ -101,15 +101,18 @@ RenderWidget::RenderWidget(QWidget * parent): QDialog(parent) { m_view.out_file->setMode(KFile::File); + m_view.running_jobs->setHeaderLabels(QStringList() << QString() << i18n("File") << i18n("Progress")); m_view.running_jobs->setItemDelegate(new RenderViewDelegate(this)); 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::Interactive); - header->resizeSection(0, fm.width("typical-name-for-a-file.torrent")); - header->setResizeMode(1, QHeaderView::Fixed); - header->resizeSection(0, width() * 2 / 3); + 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->setResizeMode(2, QHeaderView::Interactive); //header->setResizeMode(1, QHeaderView::Fixed); focusFirstVisibleItem(); @@ -472,9 +475,14 @@ void RenderWidget::slotExport() { // insert item in running jobs list QTreeWidgetItem *renderItem; - QList existing = m_view.running_jobs->findItems(dest, Qt::MatchExactly); + QList existing = m_view.running_jobs->findItems(dest, Qt::MatchExactly, 1); if (!existing.isEmpty()) renderItem = existing.at(0); - else renderItem = new QTreeWidgetItem(m_view.running_jobs, QStringList() << dest << QString()); + else renderItem = new QTreeWidgetItem(m_view.running_jobs, QStringList() << QString() << dest << QString()); + renderItem->setSizeHint(1, QSize(m_view.running_jobs->columnWidth(1), fontMetrics().height() * 2)); + QTime startTime; + startTime.start(); + renderItem->setData(1, Qt::UserRole + 2, startTime); + // Set rendering type QString group = m_view.size_list->currentItem()->data(MetaGroupRole).toString(); if (group == "dvd" && m_view.open_dvd->isChecked()) { @@ -768,25 +776,39 @@ void RenderWidget::parseFile(QString exportFile, bool editable) { void RenderWidget::setRenderJob(const QString &dest, int progress) { QTreeWidgetItem *item; - QList existing = m_view.running_jobs->findItems(dest, Qt::MatchExactly); + QList existing = m_view.running_jobs->findItems(dest, Qt::MatchExactly, 1); if (!existing.isEmpty()) item = existing.at(0); - else item = new QTreeWidgetItem(m_view.running_jobs, QStringList() << dest << QString()); - item->setData(1, Qt::UserRole, progress); - if (progress == 0) item->setIcon(0, KIcon("system-run")); + else item = new QTreeWidgetItem(m_view.running_jobs, QStringList() << QString() << dest << QString()); + item->setData(2, Qt::UserRole, progress); + if (progress == 0) { + item->setIcon(0, KIcon("system-run")); + item->setSizeHint(1, QSize(m_view.running_jobs->columnWidth(1), fontMetrics().height() * 2)); + QTime startTime; + startTime.start(); + item->setData(1, Qt::UserRole + 2, startTime); + } else { + QTime startTime = item->data(1, Qt::UserRole + 2).toTime(); + int seconds = startTime.secsTo(QTime::currentTime()); + seconds = seconds * (100 - progress) / progress; + item->setData(1, Qt::UserRole + 3, i18n("Estimated time %1", QTime(0, 0, seconds).toString("hh:mm:ss"))); + } } void RenderWidget::setRenderStatus(const QString &dest, int status, const QString &error) { QTreeWidgetItem *item; - QList existing = m_view.running_jobs->findItems(dest, Qt::MatchExactly); + QList existing = m_view.running_jobs->findItems(dest, Qt::MatchExactly, 1); if (!existing.isEmpty()) item = existing.at(0); - else item = new QTreeWidgetItem(m_view.running_jobs, QStringList() << dest << QString()); + else item = new QTreeWidgetItem(m_view.running_jobs, QStringList() << QString() << dest << QString()); if (status == -1) { // Job finished successfully item->setIcon(0, KIcon("dialog-ok")); - item->setData(1, Qt::UserRole, 100); + item->setData(2, Qt::UserRole, 100); + QTime startTime = item->data(1, Qt::UserRole + 2).toTime(); + int seconds = startTime.secsTo(QTime::currentTime()); + item->setData(1, Qt::UserRole + 3, i18n("Rendering finished in %1", QTime(0, 0, seconds).toString("hh:mm:ss"))); QString itemGroup = item->data(0, Qt::UserRole).toString(); if (itemGroup == "dvd") { - emit openDvdWizard(item->text(0), item->data(0, Qt::UserRole + 1).toString()); + emit openDvdWizard(item->text(1), item->data(0, Qt::UserRole + 1).toString()); } else if (itemGroup == "websites") { QString url = item->data(0, Qt::UserRole + 1).toString(); if (!url.isEmpty()) KRun *openBrowser = new KRun(url, this); @@ -794,7 +816,7 @@ void RenderWidget::setRenderStatus(const QString &dest, int status, const QStrin } else if (status == -2) { // Rendering crashed item->setIcon(0, KIcon("dialog-close")); - item->setData(1, Qt::UserRole, 0); + item->setData(2, Qt::UserRole, 0); m_view.error_log->append(i18n("Rendering of %1 crashed
", dest)); m_view.error_log->append(error); m_view.error_log->append("
"); @@ -802,14 +824,14 @@ void RenderWidget::setRenderStatus(const QString &dest, int status, const QStrin } else if (status == -3) { // User aborted job item->setIcon(0, KIcon("dialog-cancel")); - item->setData(1, Qt::UserRole, 100); - item->setData(1, Qt::UserRole + 1, i18n("Aborted by user")); + item->setData(2, Qt::UserRole, 100); + item->setData(2, Qt::UserRole + 1, i18n("Aborted by user")); } } void RenderWidget::slotAbortCurrentJob() { QTreeWidgetItem *current = m_view.running_jobs->currentItem(); - if (current) emit abortProcess(current->text(0)); + if (current) emit abortProcess(current->text(1)); } #include "renderwidget.moc" diff --git a/src/renderwidget.h b/src/renderwidget.h index d4a86e3a..6f731baa 100644 --- a/src/renderwidget.h +++ b/src/renderwidget.h @@ -23,6 +23,7 @@ #include #include +#include #include "definitions.h" #include "ui_renderwidget_ui.h" @@ -36,17 +37,52 @@ public: void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { - if (index.column() != 1) { + if (index.column() == 0) { QItemDelegate::paint(painter, option, index); return; + } else if (index.column() == 1) { + const bool hover = option.state & (QStyle::State_Selected); + QRect r1 = option.rect; + painter->save(); + if (hover) { + painter->setPen(option.palette.color(QPalette::HighlightedText)); + QColor backgroundColor = option.palette.color(QPalette::Highlight); + painter->setBrush(QBrush(backgroundColor)); + painter->fillRect(r1, QBrush(backgroundColor)); + } 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 + 3).toString()); + painter->restore(); + return; } - // Set up a QStyleOptionProgressBar to precisely mimic the // environment of a progress bar. QStyleOptionProgressBar progressBarOption; - progressBarOption.state = QStyle::State_Enabled; + progressBarOption.state = option.state; progressBarOption.direction = QApplication::layoutDirection(); - progressBarOption.rect = option.rect; + QRect rect = option.rect; + const bool hover = option.state & (QStyle::State_Selected); + if (hover) { + painter->setPen(option.palette.color(QPalette::HighlightedText)); + QColor backgroundColor = option.palette.color(QPalette::Highlight); + painter->setBrush(QBrush(backgroundColor)); + painter->fillRect(rect, QBrush(backgroundColor)); + } + + 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; diff --git a/src/widgets/renderwidget_ui.ui b/src/widgets/renderwidget_ui.ui index 125524dd..ecc67e19 100644 --- a/src/widgets/renderwidget_ui.ui +++ b/src/widgets/renderwidget_ui.ui @@ -5,8 +5,8 @@ 0 0 - 415 - 512 + 474 + 504 @@ -26,6 +26,60 @@ Render Project + + + + Qt::Horizontal + + + + 124 + 23 + + + + + + + + + + Full project + + + true + + + + + + + Selected zone + + + + + + + Guide zone + + + + + + + + + Qt::Horizontal + + + + 221 + 24 + + + + @@ -60,19 +114,6 @@ - - - - Qt::Horizontal - - - - 124 - 23 - - - - @@ -108,42 +149,6 @@ - - - - Qt::Vertical - - - - Qt::Horizontal - - - - - 0 - 0 - - - - - - - 0 - 0 - - - - - - - true - - - false - - - - @@ -190,10 +195,10 @@ - 0099\×0099; + 0099\×0099; - 320× 240 + 320×240 @@ -228,34 +233,6 @@ - - - - - - Full project - - - true - - - - - - - Selected zone - - - - - - - Guide zone - - - - - @@ -306,19 +283,6 @@ - - - - Qt::Horizontal - - - - 221 - 24 - - - - @@ -326,6 +290,42 @@ + + + + Qt::Vertical + + + + Qt::Horizontal + + + + + 0 + 0 + + + + + + + 0 + 0 + + + + + + + true + + + false + + + + @@ -333,6 +333,33 @@ Current jobs + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Abort Job + + + + + + + Close + + + @@ -351,22 +378,9 @@ true - - false - - 2 + 0 - - - File - - - - - Progress - - @@ -397,39 +411,7 @@ - - - - Abort Job - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Close - - - - running_jobs - abort_job - buttonClose2 - error_box - splitter_2 -- 2.39.2