From ff3f24ff9e0e6e0785fdb29cef0d58f232abfc1e Mon Sep 17 00:00:00 2001 From: Mikaël Capelle Date: Fri, 15 Jan 2021 20:12:19 +0100 Subject: Rename DownloadListWidget -> DownloadListView. Clean context menu. --- src/downloadlistview.h | 126 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 src/downloadlistview.h (limited to 'src/downloadlistview.h') diff --git a/src/downloadlistview.h b/src/downloadlistview.h new file mode 100644 index 00000000..0a3e575b --- /dev/null +++ b/src/downloadlistview.h @@ -0,0 +1,126 @@ +/* +Copyright (C) 2012 Sebastian Herbord. All rights reserved. + +This file is part of Mod Organizer. + +Mod Organizer is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Mod Organizer is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Mod Organizer. If not, see . +*/ + +#ifndef DOWNLOADLISTWIDGET_H +#define DOWNLOADLISTWIDGET_H + +#include "downloadmanager.h" +#include "downloadlist.h" +#include +#include +#include +#include +#include +#include +#include + + +namespace Ui { + class DownloadListView; +} + +class DownloadListView; + +class DownloadProgressDelegate : public QStyledItemDelegate +{ + Q_OBJECT + +public: + DownloadProgressDelegate(DownloadManager* manager, DownloadListView* list); + + void paint(QPainter *painter, const QStyleOptionViewItem &option, + const QModelIndex &index) const override; + +private: + DownloadManager* m_Manager; + DownloadListView* m_List; +}; + +class DownloadListHeader : public QHeaderView +{ + Q_OBJECT + +public: + explicit DownloadListHeader(Qt::Orientation orientation, QWidget *parent = nullptr) : QHeaderView(orientation, parent) {} + void customResizeSections(); + +private: + void mouseReleaseEvent(QMouseEvent *event) override; +}; + +class DownloadListView : public QTreeView +{ + Q_OBJECT + +public: + explicit DownloadListView(QWidget *parent = 0); + ~DownloadListView(); + + void setManager(DownloadManager *manager); + void setSourceModel(DownloadList *sourceModel); + void setMetaDisplay(bool metaDisplay); + +signals: + void installDownload(int index); + void queryInfo(int index); + void queryInfoMd5(int index); + void removeDownload(int index, bool deleteFile); + void restoreDownload(int index); + void cancelDownload(int index); + void pauseDownload(int index); + void resumeDownload(int index); + void visitOnNexus(int index); + void openFile(int index); + void openMetaFile(int index); + void openInDownloadsFolder(int index); + +private slots: + void onDoubleClick(const QModelIndex& index); + void onCustomContextMenu(const QPoint& point); + void onHeaderCustomContextMenu(const QPoint& point); + + void issueInstall(int index); + void issueDelete(int index); + void issueRemoveFromView(int index); + void issueRestoreToView(int index); + void issueRestoreToViewAll(); + void issueVisitOnNexus(int index); + void issueOpenFile(int index); + void issueOpenMetaFile(int index); + void issueOpenInDownloadsFolder(int index); + void issueCancel(int index); + void issuePause(int index); + void issueResume(int index); + void issueDeleteAll(); + void issueDeleteCompleted(); + void issueDeleteUninstalled(); + void issueRemoveFromViewAll(); + void issueRemoveFromViewCompleted(); + void issueRemoveFromViewUninstalled(); + void issueQueryInfo(int index); + void issueQueryInfoMd5(int index); + +private: + DownloadManager *m_Manager; + DownloadList *m_SourceModel = 0; + + void resizeEvent(QResizeEvent *event); +}; + +#endif // DOWNLOADLISTWIDGET_H -- cgit v1.3.1 From f28b501b30d13c581eaea72f1aeebc0dc4039cf3 Mon Sep 17 00:00:00 2001 From: Mikaël Capelle Date: Fri, 15 Jan 2021 20:20:12 +0100 Subject: Handle enter and delete on download list. --- src/downloadlistview.cpp | 42 ++++++++++++++++++++++++++++++++++++++---- src/downloadlistview.h | 3 +++ 2 files changed, 41 insertions(+), 4 deletions(-) (limited to 'src/downloadlistview.h') diff --git a/src/downloadlistview.cpp b/src/downloadlistview.cpp index 7f9516ee..a1f544a8 100644 --- a/src/downloadlistview.cpp +++ b/src/downloadlistview.cpp @@ -221,8 +221,7 @@ void DownloadListView::onCustomContextMenu(const QPoint &point) QModelIndex index = indexAt(point); bool hidden = false; - try - { + try { if (index.row() >= 0) { const int row = qobject_cast(model())->mapToSource(index).row(); DownloadManager::DownloadState state = m_Manager->getState(row); @@ -260,8 +259,8 @@ void DownloadListView::onCustomContextMenu(const QPoint &point) menu.addSeparator(); } - } catch(std::exception&) - { + } + catch(std::exception&) { // this happens when the download index is not found, ignore it and don't // display download-specific actions } @@ -282,6 +281,41 @@ void DownloadListView::onCustomContextMenu(const QPoint &point) menu.exec(viewport()->mapToGlobal(point)); } +void DownloadListView::keyPressEvent(QKeyEvent* event) +{ + if (selectionModel()->hasSelection()) { + const int row = qobject_cast(model())->mapToSource(currentIndex()).row(); + auto state = m_Manager->getState(row); + if (state >= DownloadManager::STATE_READY) { + if (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) { + issueInstall(row); + } + else if (event->key() == Qt::Key_Delete) { + issueDelete(row); + } + } + else if (state == DownloadManager::STATE_DOWNLOADING) { + if (event->key() == Qt::Key_Delete) { + issueCancel(row); + } + else if (event->key() == Qt::Key_Space) { + issuePause(event->key()); + } + } + else if (state == DownloadManager::STATE_PAUSED + || state == DownloadManager::STATE_ERROR + || state == DownloadManager::STATE_PAUSING) { + if (event->key() == Qt::Key_Delete) { + issueDelete(row); + } + else if (event->key() == Qt::Key_Space) { + issueResume(row); + } + } + } + QTreeView::keyPressEvent(event); +} + void DownloadListView::issueInstall(int index) { emit installDownload(index); diff --git a/src/downloadlistview.h b/src/downloadlistview.h index 0a3e575b..050c869f 100644 --- a/src/downloadlistview.h +++ b/src/downloadlistview.h @@ -90,6 +90,9 @@ signals: void openMetaFile(int index); void openInDownloadsFolder(int index); +protected: + void keyPressEvent(QKeyEvent* event) override; + private slots: void onDoubleClick(const QModelIndex& index); void onCustomContextMenu(const QPoint& point); -- cgit v1.3.1