From 72c73b0fad2bb532ea6170421df05d6c24f7307a Mon Sep 17 00:00:00 2001 From: Karthik Nishanth Date: Thu, 8 Nov 2018 21:23:52 +0530 Subject: [PATCH] fix bugs and update coding style --- src/libs/ui/docsetsdialog.cpp | 29 ++++++++++++++++------------ src/libs/ui/progressitemdelegate.cpp | 21 +++++++++++--------- src/libs/ui/progressitemdelegate.h | 4 +++- 3 files changed, 32 insertions(+), 22 deletions(-) diff --git a/src/libs/ui/docsetsdialog.cpp b/src/libs/ui/docsetsdialog.cpp index 1ca75d813..015bf6f89 100644 --- a/src/libs/ui/docsetsdialog.cpp +++ b/src/libs/ui/docsetsdialog.cpp @@ -237,6 +237,7 @@ void DocsetsDialog::downloadSelectedDocsets() QAbstractItemModel *model = ui->availableDocsetList->model(); model->setData(index, tr("Downloading: %p%"), ProgressItemDelegate::FormatRole); + model->setData(index, true, ProgressItemDelegate::CancellableRole); model->setData(index, 0, ProgressItemDelegate::ValueRole); model->setData(index, true, ProgressItemDelegate::ShowProgressRole); @@ -392,6 +393,7 @@ void DocsetsDialog::downloadCompleted() QListWidgetItem *item = findDocsetListItem(docsetName); if (item) { item->setData(ProgressItemDelegate::ValueRole, 0); + item->setData(ProgressItemDelegate::CancellableRole, false); item->setData(ProgressItemDelegate::FormatRole, tr("Installing: %p%")); } @@ -573,9 +575,9 @@ void DocsetsDialog::setupAvailableDocsetsTab() { using Registry::DocsetRegistry; - ui->availableDocsetList->setItemDelegate(new ProgressItemDelegate(this)); - ProgressItemDelegate* del = static_cast(ui->availableDocsetList->itemDelegate()); - connect(del, &ProgressItemDelegate::cancelButtonClicked, this, &DocsetsDialog::cancelDownload); + ProgressItemDelegate *delegate = new ProgressItemDelegate(this); + connect(delegate, &ProgressItemDelegate::cancelButtonClicked, this, &DocsetsDialog::cancelDownload); + ui->availableDocsetList->setItemDelegate(delegate); connect(m_docsetRegistry, &DocsetRegistry::docsetUnloaded, this, [this](const QString name) { QListWidgetItem *item = findDocsetListItem(name); @@ -610,6 +612,7 @@ void DocsetsDialog::setupAvailableDocsetsTab() QAbstractItemModel *model = ui->availableDocsetList->model(); model->setData(index, tr("Downloading: %p%"), ProgressItemDelegate::FormatRole); + model->setData(index, true, ProgressItemDelegate::CancellableRole); model->setData(index, 0, ProgressItemDelegate::ValueRole); model->setData(index, true, ProgressItemDelegate::ShowProgressRole); @@ -710,16 +713,18 @@ void DocsetsDialog::cancelDownload(const QModelIndex &index) { // Find and delete download jobs corresponding to index for (QNetworkReply *reply : m_replies) { - if (reply->property(ListItemIndexProperty).toInt() == index.row() - && reply->property(DownloadTypeProperty).toInt() == DownloadDocset) { - QListWidgetItem *listItem = ui->availableDocsetList->item(index.row()); - listItem->setData(ProgressItemDelegate::ShowProgressRole, false); - delete m_tmpFiles.take(reply->property(DocsetNameProperty).toString()); - reply->abort(); - - m_combinedReceived -= reply->property(DownloadPreviousReceived).toLongLong(); - m_combinedTotal -= reply->property(DownloadTotalSize).toLongLong(); + if (reply->property(ListItemIndexProperty).toInt() != index.row() + || reply->property(DownloadTypeProperty).toInt() != DownloadDocset) { + continue; } + + QListWidgetItem *listItem = ui->availableDocsetList->item(index.row()); + listItem->setData(ProgressItemDelegate::ShowProgressRole, false); + delete m_tmpFiles.take(reply->property(DocsetNameProperty).toString()); + reply->abort(); + + m_combinedReceived -= reply->property(DownloadPreviousReceived).toLongLong(); + m_combinedTotal -= reply->property(DownloadTotalSize).toLongLong(); } // As the current download is cancelled, unselect the current selected item diff --git a/src/libs/ui/progressitemdelegate.cpp b/src/libs/ui/progressitemdelegate.cpp index f0a4c299b..e16daab93 100644 --- a/src/libs/ui/progressitemdelegate.cpp +++ b/src/libs/ui/progressitemdelegate.cpp @@ -23,11 +23,11 @@ #include "progressitemdelegate.h" -#include #include +#include +#include #include #include -#include using namespace Zeal::WidgetUi; @@ -63,6 +63,7 @@ void ProgressItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem & renderer->setValue(value); const QString format = index.model()->data(index, FormatRole).toString(); + const bool isCancellable = index.model()->data(index, CancellableRole).toBool(); if (!format.isEmpty()) renderer->setFormat(format); @@ -73,11 +74,12 @@ void ProgressItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem & renderer->render(painter); // Button - QScopedPointer buttonRenderer(new QPushButton(tr("Cancel"))); - buttonRenderer->resize(cancelButtonWidth, styleOption.rect.height()); - - painter->translate(progressBarWidth, 0); - buttonRenderer->render(painter); + if (isCancellable) { + QScopedPointer buttonRenderer(new QPushButton(tr("Cancel"))); + buttonRenderer->resize(cancelButtonWidth, styleOption.rect.height()); + painter->translate(progressBarWidth, 0); + buttonRenderer->render(painter); + } painter->restore(); QStyledItemDelegate::paint(painter, styleOption, index); @@ -86,14 +88,15 @@ void ProgressItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem & bool ProgressItemDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) { - QMouseEvent* mouseEvent = static_cast(event); + QMouseEvent *mouseEvent = static_cast(event); QRect cancelBounds = option.rect; cancelBounds.setLeft(cancelBounds.right() - cancelButtonWidth); if (event->type() == QEvent::MouseButtonRelease && index.model()->data(index, ShowProgressRole).toBool() - && cancelBounds.contains(mouseEvent->pos())) + && cancelBounds.contains(mouseEvent->pos())) { emit cancelButtonClicked(index); + } return QStyledItemDelegate::editorEvent(event, model, option, index); } diff --git a/src/libs/ui/progressitemdelegate.h b/src/libs/ui/progressitemdelegate.h index 4daac6d96..01a94d573 100644 --- a/src/libs/ui/progressitemdelegate.h +++ b/src/libs/ui/progressitemdelegate.h @@ -36,7 +36,8 @@ class ProgressItemDelegate : public QStyledItemDelegate enum ProgressRoles { ValueRole = Qt::UserRole + 10, FormatRole, - ShowProgressRole + ShowProgressRole, + CancellableRole }; explicit ProgressItemDelegate(QObject *parent = nullptr); @@ -44,6 +45,7 @@ class ProgressItemDelegate : public QStyledItemDelegate void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; +protected: bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) override;