From 7ae68b20e7fd7da55467c91b9713d01eaaf8f6cf Mon Sep 17 00:00:00 2001 From: Chocobo1 Date: Tue, 18 Jan 2022 15:45:31 +0800 Subject: [PATCH] Add "Auto resize columns" functionality --- src/gui/addnewtorrentdialog.cpp | 25 ++++++++++++++++++++++++ src/gui/previewselectdialog.cpp | 24 +++++++++++++++++++++++ src/gui/previewselectdialog.h | 1 + src/gui/properties/peerlistwidget.cpp | 13 ++++++++++++ src/gui/properties/propertieswidget.cpp | 13 ++++++++++++ src/gui/properties/trackerlistwidget.cpp | 13 ++++++++++++ src/gui/search/searchjobwidget.cpp | 13 ++++++++++++ src/gui/transferlistwidget.cpp | 13 ++++++++++++ 8 files changed, 115 insertions(+) diff --git a/src/gui/addnewtorrentdialog.cpp b/src/gui/addnewtorrentdialog.cpp index ed2ad1471..c20ee949d 100644 --- a/src/gui/addnewtorrentdialog.cpp +++ b/src/gui/addnewtorrentdialog.cpp @@ -30,6 +30,7 @@ #include +#include #include #include #include @@ -235,7 +236,11 @@ AddNewTorrentDialog::AddNewTorrentDialog(const BitTorrent::AddTorrentParams &inP if (category != defaultCategory && category != m_torrentParams.category) m_ui->categoryComboBox->addItem(category); + m_ui->contentTreeView->header()->setContextMenuPolicy(Qt::CustomContextMenu); m_ui->contentTreeView->header()->setSortIndicator(0, Qt::AscendingOrder); + + connect(m_ui->contentTreeView->header(), &QWidget::customContextMenuRequested, this, &AddNewTorrentDialog::displayColumnHeaderMenu); + loadState(); // Signal / slots connect(m_ui->doNotDeleteTorrentCheckBox, &QCheckBox::clicked, this, &AddNewTorrentDialog::doNotDeleteTorrentClicked); @@ -705,6 +710,7 @@ void AddNewTorrentDialog::displayContentTreeMenu(const QPoint &) QMenu *menu = new QMenu(this); menu->setAttribute(Qt::WA_DeleteOnClose); + if (selectedRows.size() == 1) { menu->addAction(UIThemeManager::instance()->getIcon("edit-rename"), tr("Rename..."), this, &AddNewTorrentDialog::renameSelectedFile); @@ -755,6 +761,25 @@ void AddNewTorrentDialog::displayContentTreeMenu(const QPoint &) menu->popup(QCursor::pos()); } +void AddNewTorrentDialog::displayColumnHeaderMenu() +{ + QMenu *menu = new QMenu(this); + menu->setAttribute(Qt::WA_DeleteOnClose); + menu->setToolTipsVisible(true); + + QAction *resizeAction = menu->addAction(tr("Resize columns"), this, [this]() + { + for (int i = 0, count = m_ui->contentTreeView->header()->count(); i < count; ++i) + { + if (!m_ui->contentTreeView->isColumnHidden(i)) + m_ui->contentTreeView->resizeColumnToContents(i); + } + }); + resizeAction->setToolTip(tr("Resize all non-hidden columns to the size of their contents")); + + menu->popup(QCursor::pos()); +} + void AddNewTorrentDialog::accept() { // TODO: Check if destination actually exists diff --git a/src/gui/previewselectdialog.cpp b/src/gui/previewselectdialog.cpp index 20e9a8b53..a51e66e49 100644 --- a/src/gui/previewselectdialog.cpp +++ b/src/gui/previewselectdialog.cpp @@ -28,9 +28,11 @@ #include "previewselectdialog.h" +#include #include #include #include +#include #include #include #include @@ -104,9 +106,12 @@ PreviewSelectDialog::PreviewSelectDialog(QWidget *parent, const BitTorrent::Torr } m_previewListModel->sort(NAME); + m_ui->previewList->header()->setContextMenuPolicy(Qt::CustomContextMenu); m_ui->previewList->header()->setSortIndicator(0, Qt::AscendingOrder); m_ui->previewList->selectionModel()->select(m_previewListModel->index(0, NAME), QItemSelectionModel::Select | QItemSelectionModel::Rows); + connect(m_ui->previewList->header(), &QWidget::customContextMenuRequested, this, &PreviewSelectDialog::displayColumnHeaderMenu); + // Restore dialog state loadWindowState(); } @@ -145,6 +150,25 @@ void PreviewSelectDialog::previewButtonClicked() accept(); } +void PreviewSelectDialog::displayColumnHeaderMenu() +{ + auto menu = new QMenu(this); + menu->setAttribute(Qt::WA_DeleteOnClose); + menu->setToolTipsVisible(true); + + QAction *resizeAction = menu->addAction(tr("Resize columns"), this, [this]() + { + for (int i = 0, count = m_ui->previewList->header()->count(); i < count; ++i) + { + if (!m_ui->previewList->isColumnHidden(i)) + m_ui->previewList->resizeColumnToContents(i); + } + }); + resizeAction->setToolTip(tr("Resize all non-hidden columns to the size of their contents")); + + menu->popup(QCursor::pos()); +} + void PreviewSelectDialog::saveWindowState() { // Persist dialog size diff --git a/src/gui/previewselectdialog.h b/src/gui/previewselectdialog.h index afc09a4a4..874f5cc83 100644 --- a/src/gui/previewselectdialog.h +++ b/src/gui/previewselectdialog.h @@ -68,6 +68,7 @@ signals: private slots: void previewButtonClicked(); + void displayColumnHeaderMenu(); private: void showEvent(QShowEvent *event) override; diff --git a/src/gui/properties/peerlistwidget.cpp b/src/gui/properties/peerlistwidget.cpp index 54ca0276a..bd6cdb6aa 100644 --- a/src/gui/properties/peerlistwidget.cpp +++ b/src/gui/properties/peerlistwidget.cpp @@ -182,6 +182,7 @@ void PeerListWidget::displayColumnHeaderMenu() QMenu *menu = new QMenu(this); menu->setAttribute(Qt::WA_DeleteOnClose); menu->setTitle(tr("Column visibility")); + menu->setToolTipsVisible(true); for (int i = 0; i < PeerListColumns::IP_HIDDEN; ++i) { @@ -205,6 +206,18 @@ void PeerListWidget::displayColumnHeaderMenu() action->setChecked(!isColumnHidden(i)); } + menu->addSeparator(); + QAction *resizeAction = menu->addAction(tr("Resize columns"), this, [this]() + { + for (int i = 0, count = header()->count(); i < count; ++i) + { + if (!isColumnHidden(i)) + resizeColumnToContents(i); + } + saveSettings(); + }); + resizeAction->setToolTip(tr("Resize all non-hidden columns to the size of their contents")); + menu->popup(QCursor::pos()); } diff --git a/src/gui/properties/propertieswidget.cpp b/src/gui/properties/propertieswidget.cpp index 12657d9cc..8bc65e324 100644 --- a/src/gui/properties/propertieswidget.cpp +++ b/src/gui/properties/propertieswidget.cpp @@ -182,6 +182,7 @@ void PropertiesWidget::displayColumnHeaderMenu() QMenu *menu = new QMenu(this); menu->setAttribute(Qt::WA_DeleteOnClose); menu->setTitle(tr("Column visibility")); + menu->setToolTipsVisible(true); for (int i = 0; i < TorrentContentModelItem::TreeItemColumns::NB_COL; ++i) { @@ -202,6 +203,18 @@ void PropertiesWidget::displayColumnHeaderMenu() action->setEnabled(false); } + menu->addSeparator(); + QAction *resizeAction = menu->addAction(tr("Resize columns"), this, [this]() + { + for (int i = 0, count = m_ui->filesList->header()->count(); i < count; ++i) + { + if (!m_ui->filesList->isColumnHidden(i)) + m_ui->filesList->resizeColumnToContents(i); + } + saveSettings(); + }); + resizeAction->setToolTip(tr("Resize all non-hidden columns to the size of their contents")); + menu->popup(QCursor::pos()); } diff --git a/src/gui/properties/trackerlistwidget.cpp b/src/gui/properties/trackerlistwidget.cpp index 4d1eb778c..9f7e256c1 100644 --- a/src/gui/properties/trackerlistwidget.cpp +++ b/src/gui/properties/trackerlistwidget.cpp @@ -656,6 +656,7 @@ void TrackerListWidget::displayColumnHeaderMenu() QMenu *menu = new QMenu(this); menu->setAttribute(Qt::WA_DeleteOnClose); menu->setTitle(tr("Column visibility")); + menu->setToolTipsVisible(true); for (int i = 0; i < COL_COUNT; ++i) { @@ -675,5 +676,17 @@ void TrackerListWidget::displayColumnHeaderMenu() action->setChecked(!isColumnHidden(i)); } + menu->addSeparator(); + QAction *resizeAction = menu->addAction(tr("Resize columns"), this, [this]() + { + for (int i = 0, count = header()->count(); i < count; ++i) + { + if (!isColumnHidden(i)) + resizeColumnToContents(i); + } + saveSettings(); + }); + resizeAction->setToolTip(tr("Resize all non-hidden columns to the size of their contents")); + menu->popup(QCursor::pos()); } diff --git a/src/gui/search/searchjobwidget.cpp b/src/gui/search/searchjobwidget.cpp index c5755ba40..f7e640c81 100644 --- a/src/gui/search/searchjobwidget.cpp +++ b/src/gui/search/searchjobwidget.cpp @@ -469,6 +469,7 @@ void SearchJobWidget::displayColumnHeaderMenu() auto menu = new QMenu(this); menu->setAttribute(Qt::WA_DeleteOnClose); menu->setTitle(tr("Column visibility")); + menu->setToolTipsVisible(true); for (int i = 0; i < SearchSortModel::DL_LINK; ++i) { @@ -489,6 +490,18 @@ void SearchJobWidget::displayColumnHeaderMenu() action->setChecked(!m_ui->resultsBrowser->isColumnHidden(i)); } + menu->addSeparator(); + QAction *resizeAction = menu->addAction(tr("Resize columns"), this, [this]() + { + for (int i = 0, count = m_ui->resultsBrowser->header()->count(); i < count; ++i) + { + if (!m_ui->resultsBrowser->isColumnHidden(i)) + m_ui->resultsBrowser->resizeColumnToContents(i); + } + saveSettings(); + }); + resizeAction->setToolTip(tr("Resize all non-hidden columns to the size of their contents")); + menu->popup(QCursor::pos()); } diff --git a/src/gui/transferlistwidget.cpp b/src/gui/transferlistwidget.cpp index bf43e6987..d668c833d 100644 --- a/src/gui/transferlistwidget.cpp +++ b/src/gui/transferlistwidget.cpp @@ -643,6 +643,7 @@ void TransferListWidget::displayColumnHeaderMenu() auto menu = new QMenu(this); menu->setAttribute(Qt::WA_DeleteOnClose); menu->setTitle(tr("Column visibility")); + menu->setToolTipsVisible(true); for (int i = 0; i < TransferListModel::NB_COLUMNS; ++i) { @@ -666,6 +667,18 @@ void TransferListWidget::displayColumnHeaderMenu() action->setChecked(!isColumnHidden(i)); } + menu->addSeparator(); + QAction *resizeAction = menu->addAction(tr("Resize columns"), this, [this]() + { + for (int i = 0, count = header()->count(); i < count; ++i) + { + if (!isColumnHidden(i)) + resizeColumnToContents(i); + } + saveSettings(); + }); + resizeAction->setToolTip(tr("Resize all non-hidden columns to the size of their contents")); + menu->popup(QCursor::pos()); }