From 418309336a530a4e0ff8730927e419a3ac86418c Mon Sep 17 00:00:00 2001 From: sgourdas Date: Thu, 6 Jun 2024 16:20:16 +0300 Subject: [PATCH] Download path setting QOL improvements Download path shown in settings now has a tooltip, truncation and copy functionalities --- resources/css/_settingsManager.css | 11 ++++++++++ resources/i18n/en.json | 1 + resources/i18n/qqq.json | 3 ++- resources/icons/copy.svg | 7 ++++++ resources/kiwix.qrc | 1 + src/settingsview.cpp | 34 ++++++++++++++++++++++++++++-- src/settingsview.h | 1 + ui/settings.ui | 7 ++++++ 8 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 resources/icons/copy.svg diff --git a/resources/css/_settingsManager.css b/resources/css/_settingsManager.css index 38a3516..1844549 100644 --- a/resources/css/_settingsManager.css +++ b/resources/css/_settingsManager.css @@ -43,6 +43,17 @@ QPushButton:hover { color: white; } +#downloadDirPathCopy { + background-color: none; + border: 1px solid transparent; +} + +#downloadDirPathCopy:hover { + background-color: #D9E9FF; + border: 1px solid #3366CC; + border-radius: 3px; +} + #monitorDirLabel { padding-right: 0; } diff --git a/resources/i18n/en.json b/resources/i18n/en.json index beff86f..62297e2 100644 --- a/resources/i18n/en.json +++ b/resources/i18n/en.json @@ -135,6 +135,7 @@ "monitor-dir-dialog-title":"Are you sure you want to change the monitor directory?", "monitor-dir-dialog-msg":"The new monitor directory path will be:\n{{DIRECTORY}}", "monitor-clear-dir-dialog-title":"Are you sure you want to clear the monitor directory?", + "path-was-copied": "Path was copied", "monitor-clear-dir-dialog-msg":"This will stop checking the monitor directory for new ZIM files.", "monitor-directory-tooltip":"All ZIM files in this directory will be automatically added to the library.", "next-tab":"Move to next tab", diff --git a/resources/i18n/qqq.json b/resources/i18n/qqq.json index 43efac4..c296da9 100644 --- a/resources/i18n/qqq.json +++ b/resources/i18n/qqq.json @@ -174,5 +174,6 @@ "clear-filter": "Represents the action of clearing the filters selected for a filter type.", "no-details": "A content type for Zim files representing it only has an introduction.", "no-pictures": "A content type for Zim files that does not contain pictures.", - "no-videos": "A content type for Zim files that does not contain videos." + "no-videos": "A content type for Zim files that does not contain videos.", + "path-was-copied": "Tooltip confirming that the download path from settings was copied." } diff --git a/resources/icons/copy.svg b/resources/icons/copy.svg new file mode 100644 index 0000000..e1d3529 --- /dev/null +++ b/resources/icons/copy.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/resources/kiwix.qrc b/resources/kiwix.qrc index 05a2e32..ef5c465 100644 --- a/resources/kiwix.qrc +++ b/resources/kiwix.qrc @@ -16,6 +16,7 @@ icons/star.svg icons/search.svg icons/close.svg + icons/copy.svg icons/star-active.svg icons/search-inactive.svg icons/checkbox-indeterminate.svg diff --git a/src/settingsview.cpp b/src/settingsview.cpp index bffa528..9f40a17 100644 --- a/src/settingsview.cpp +++ b/src/settingsview.cpp @@ -2,8 +2,24 @@ #include "ui_settings.h" #include "kiwixapp.h" #include +#include #include #include +#include + +namespace +{ + QString formatDownloadDir(const QString& input) { + const int maxLength = 40; + if (input.length() > maxLength) { + QString suffix = input.right(maxLength); + int directoryIndex = suffix.indexOf('/'); + return "..." + suffix.mid(directoryIndex != -1 ? directoryIndex : 0); + } + return input; + } +} + SettingsView::SettingsView(QWidget *parent) : QWidget(parent) , ui(new Ui::Settings) @@ -14,6 +30,7 @@ SettingsView::SettingsView(QWidget *parent) connect(ui->moveToTrashToggle, &QCheckBox::clicked, this, &SettingsView::setMoveToTrash); connect(ui->reopenTabToggle, &QCheckBox::clicked, this, &SettingsView::setReopenTab); connect(ui->browseButton, &QPushButton::clicked, this, &SettingsView::browseDownloadDir); + connect(ui->downloadDirPathCopy, &QPushButton::clicked, this, &SettingsView::copyDownloadPathToClipboard); connect(ui->resetButton, &QPushButton::clicked, this, &SettingsView::resetDownloadDir); connect(ui->monitorBrowse, &QPushButton::clicked, this, &SettingsView::browseMonitorDir); connect(ui->monitorClear, &QPushButton::clicked, this, &SettingsView::clearMonitorDir); @@ -30,6 +47,9 @@ SettingsView::SettingsView(QWidget *parent) ui->browseButton->setText(gt("browse")); ui->monitorClear->setText(gt("clear")); ui->monitorBrowse->setText(gt("browse")); + QIcon copyIcon(":/icons/copy.svg"); + ui->downloadDirPathCopy->setIcon(copyIcon); + ui->downloadDirPathCopy->setIconSize(QSize(24, 24)); ui->monitorHelp->setText("?"); ui->monitorHelp->setToolTip(gt("monitor-directory-tooltip")); ui->moveToTrashLabel->setText(gt("move-files-to-trash")); @@ -47,7 +67,7 @@ void SettingsView::init(int zoomPercent, const QString &downloadDir, bool reopentab) { ui->zoomPercentSpinBox->setValue(zoomPercent); - ui->downloadDirPath->setText(downloadDir); + SettingsView::onDownloadDirChanged(downloadDir); if (monitorDir == QString()) { ui->monitorClear->hide(); } @@ -156,7 +176,17 @@ void SettingsView::setReopenTab(bool reopen) void SettingsView::onDownloadDirChanged(const QString &dir) { - ui->downloadDirPath->setText(dir); + ui->downloadDirPath->setText(formatDownloadDir(dir)); + ui->downloadDirPath->setToolTip(dir); +} + +void SettingsView::copyDownloadPathToClipboard() +{ + QString downloadPath = KiwixApp::instance()->getSettingsManager()->getDownloadDir(); + QApplication::clipboard()->setText(downloadPath); + + QPoint globalPos = ui->downloadDirPathCopy->mapToGlobal(QPoint(0, -ui->downloadDirPathCopy->height())); + QToolTip::showText(globalPos, gt("path-was-copied"), ui->downloadDirPathCopy); } void SettingsView::onMonitorDirChanged(const QString &dir) diff --git a/src/settingsview.h b/src/settingsview.h index e59ff49..41cf6d1 100644 --- a/src/settingsview.h +++ b/src/settingsview.h @@ -23,6 +23,7 @@ public: void setMoveToTrash(bool moveToTrash); void setReopenTab(bool reopen); void onDownloadDirChanged(const QString &dir); + void copyDownloadPathToClipboard(); void onMonitorDirChanged(const QString &dir); void onZoomChanged(qreal zoomFactor); void onMoveToTrashChanged(bool moveToTrash); diff --git a/ui/settings.ui b/ui/settings.ui index 949712c..c12ba03 100644 --- a/ui/settings.ui +++ b/ui/settings.ui @@ -142,6 +142,13 @@ + + + + + + +