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 @@
+ -
+
+
+
+
+
+
-