From: Soren Stoutner Date: Mon, 11 Jul 2022 21:13:18 +0000 (-0700) Subject: Add a download location setting. X-Git-Tag: v0.1~21 X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserPC.git;a=commitdiff_plain;h=e28b208d6f953d24bd05927a16775d103714fd36 Add a download location setting. --- diff --git a/src/dialogs/SaveDialog.cpp b/src/dialogs/SaveDialog.cpp index 622bc36..281cc77 100644 --- a/src/dialogs/SaveDialog.cpp +++ b/src/dialogs/SaveDialog.cpp @@ -25,7 +25,6 @@ #include // Qt toolkit headers. -#include #include #include #include diff --git a/src/settings/Settings.kcfg b/src/settings/Settings.kcfg index 1bcf275..80726d2 100644 --- a/src/settings/Settings.kcfg +++ b/src/settings/Settings.kcfg @@ -58,6 +58,10 @@ 1.00 + + System Download Directory + + true diff --git a/src/uis/SettingsGeneral.ui b/src/uis/SettingsGeneral.ui index 5e11e86..acd345c 100644 --- a/src/uis/SettingsGeneral.ui +++ b/src/uis/SettingsGeneral.ui @@ -146,6 +146,52 @@ + + + + + + + Download Location + + + + The default is System Download Directory. + + + + + + + + + 0 + 0 + + + + + true + + + + + System Download Directory + + + + + + + + + Browse + + + + + + diff --git a/src/views/BrowserView.cpp b/src/views/BrowserView.cpp index 2a23d81..f17a237 100644 --- a/src/views/BrowserView.cpp +++ b/src/views/BrowserView.cpp @@ -663,8 +663,15 @@ void BrowserView::showSaveDialog(QWebEngineDownloadItem *downloadItemPointer) co void BrowserView::showSaveFilePickerDialog(QUrl &downloadUrl, QString &suggestedFileName) { + // Get the download location. + QString downloadDirectory = Settings::downloadLocation(); + + // Resolve the system download directory if specified. + if (downloadDirectory == QStringLiteral("System Download Directory")) + downloadDirectory = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + // Create a save file dialog. - QFileDialog *saveFileDialogPointer = new QFileDialog(this, i18nc("Save file dialog caption", "Save File"), QStandardPaths::writableLocation(QStandardPaths::DownloadLocation)); + QFileDialog *saveFileDialogPointer = new QFileDialog(this, i18nc("Save file dialog caption", "Save File"), downloadDirectory); // Tell the dialog to use a save button. saveFileDialogPointer->setAcceptMode(QFileDialog::AcceptSave); @@ -672,7 +679,7 @@ void BrowserView::showSaveFilePickerDialog(QUrl &downloadUrl, QString &suggested // Populate the file name from the download item pointer. saveFileDialogPointer->selectFile(suggestedFileName); - // Prevent interaction with the parent windows while the dialog is open. + // Prevent interaction with the parent window while the dialog is open. saveFileDialogPointer->setWindowModality(Qt::WindowModal); // Process the saving of the file. The save file dialog pointer must be captured directly instead of by reference or nasty crashes occur. diff --git a/src/windows/BrowserWindow.cpp b/src/windows/BrowserWindow.cpp index 2484061..e44357f 100644 --- a/src/windows/BrowserWindow.cpp +++ b/src/windows/BrowserWindow.cpp @@ -33,6 +33,7 @@ #include // Qt toolkit headers. +#include #include #include #include @@ -66,7 +67,7 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow() QAction *backActionPointer = KStandardAction::back(this, SLOT(back()), actionCollectionPointer); QAction *forwardActionPointer = KStandardAction::forward(this, SLOT(forward()), actionCollectionPointer); KStandardAction::home(this, SLOT(home()), actionCollectionPointer); - KStandardAction::preferences(this, SLOT(settingsConfigure()), actionCollectionPointer); + KStandardAction::preferences(this, SLOT(showSettingsDialog()), actionCollectionPointer); // Add the custom actions. userAgentPrivacyBrowserActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_privacy_browser")); @@ -484,6 +485,31 @@ void BrowserWindow::showCookiesDialog() connect(cookiesDialogPointer, SIGNAL(deleteCookie(QNetworkCookie)), browserViewPointer, SLOT(deleteCookieFromStore(QNetworkCookie))); } +void BrowserWindow::showDownloadLocationBrowseDialog() const +{ + // Get the current download location. + QString currentDownloadLocation = downloadLocationComboBoxPointer->currentText(); + + // Resolve the system download directory if specified. + if (currentDownloadLocation == QStringLiteral("System Download Directory")) + currentDownloadLocation = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + + // Get the new download location. + QString newDownloadLocation = QFileDialog::getExistingDirectory(configDialogPointer, i18nc("Select download location dialog caption", "Select Download Location"), currentDownloadLocation); + + // Populate the download location combo box according to the new download location. + if (newDownloadLocation == QStandardPaths::writableLocation(QStandardPaths::DownloadLocation)) // The default download location was selected. + { + // Populate the download location with the default text. + downloadLocationComboBoxPointer->setCurrentText("System Download Directory"); + } + else if (newDownloadLocation != QStringLiteral("")) // A different directory was selected. + { + // Populate the download location. + downloadLocationComboBoxPointer->setCurrentText(newDownloadLocation); + } +} + void BrowserWindow::showDomainSettingsDialog() const { // Remove the focus from the URL line edit. @@ -508,85 +534,70 @@ void BrowserWindow::showProgressBar(const int &progress) const progressBarPointer->show(); } -QSize BrowserWindow::sizeHint() const -{ - // Return the default window size. - return QSize(1500, 1200); -} - -void BrowserWindow::settingsConfigure() +void BrowserWindow::showSettingsDialog() { - // Check to make sure the dialog box isn't already displayed. - if (KConfigDialog::exists(QStringLiteral("settings"))) - { - // Show the existing config dialog if it is hidden. - configDialogPointer->show(); + // Create the settings widgets. + QWidget *privacySettingsWidgetPointer = new QWidget; + QWidget *generalSettingsWidgetPointer = new QWidget; - // Raise the existing config dialog if it is below other windows. - configDialogPointer->raise(); + // Instantiate the settings UI. + Ui::PrivacySettings privacySettingsUi; + Ui::GeneralSettings generalSettingsUi; - // Restore the existing config dialog if it has been minimized. - if (configDialogPointer->isMinimized()) { - configDialogPointer->showNormal(); - } - - // Activate the existing config dialog, which brings its virtual desktop into focus. - configDialogPointer->activateWindow(); - } - else - { - // Create the settings widgets. - QWidget *privacySettingsWidgetPointer = new QWidget; - QWidget *generalSettingsWidgetPointer = new QWidget; + // Setup the UI to display the settings widgets. + privacySettingsUi.setupUi(privacySettingsWidgetPointer); + generalSettingsUi.setupUi(generalSettingsWidgetPointer); - // Instantiate the settings UI. - Ui::PrivacySettings privacySettingsUi; - Ui::GeneralSettings generalSettingsUi; + // Get handles for the widgets. + QComboBox *userAgentComboBoxPointer = privacySettingsUi.kcfg_userAgent; + userAgentLabelPointer = privacySettingsUi.userAgentLabel; + QComboBox *searchEngineComboBoxPointer = generalSettingsUi.kcfg_searchEngine; + searchEngineLabelPointer = generalSettingsUi.searchEngineLabel; + downloadLocationComboBoxPointer = generalSettingsUi.kcfg_downloadLocation; + QPushButton *browseButtonPointer = generalSettingsUi.browseButton; - // Setup the UI to display the settings widgets. - privacySettingsUi.setupUi(privacySettingsWidgetPointer); - generalSettingsUi.setupUi(generalSettingsWidgetPointer); + // Populate the combo box labels. + updateUserAgentLabel(userAgentComboBoxPointer->currentText()); + updateSearchEngineLabel(searchEngineComboBoxPointer->currentText()); - // Get handles for the widgets. - QComboBox *userAgentComboBoxPointer = privacySettingsUi.kcfg_userAgent; - userAgentLabelPointer = privacySettingsUi.userAgentLabel; - QComboBox *searchEngineComboBoxPointer = generalSettingsUi.kcfg_searchEngine; - searchEngineLabelPointer = generalSettingsUi.searchEngineLabel; + // Update the labels when the combo boxes change. + connect(userAgentComboBoxPointer, SIGNAL(currentTextChanged(const QString)), this, SLOT(updateUserAgentLabel(const QString))); + connect(searchEngineComboBoxPointer, SIGNAL(currentTextChanged(const QString)), this, SLOT(updateSearchEngineLabel(const QString))); - // Populate the combo box labels. - updateUserAgentLabel(userAgentComboBoxPointer->currentText()); - updateSearchEngineLabel(searchEngineComboBoxPointer->currentText()); + // Connect the download location directory browse button. + connect(browseButtonPointer, SIGNAL(clicked()), this, SLOT(showDownloadLocationBrowseDialog())); - // Update the labels when the combo boxes change. - connect(userAgentComboBoxPointer, SIGNAL(currentTextChanged(const QString)), this, SLOT(updateUserAgentLabel(const QString))); - connect(searchEngineComboBoxPointer, SIGNAL(currentTextChanged(const QString)), this, SLOT(updateSearchEngineLabel(const QString))); + // Instantiate a settings config dialog from the settings.kcfg file. + configDialogPointer = new KConfigDialog(this, QStringLiteral("settings"), Settings::self()); - // Instantiate a settings config dialog from the settings.kcfg file. - configDialogPointer = new KConfigDialog(this, QStringLiteral("settings"), Settings::self()); + // Add the settings widgets as config dialog pages. + configDialogPointer->addPage(privacySettingsWidgetPointer, i18nc("@title:tab", "Privacy"), QStringLiteral("privacy-browser")); + configDialogPointer->addPage(generalSettingsWidgetPointer, i18nc("@title:tab", "General"), QStringLiteral("breeze-settings")); - // Add the settings widgets as config dialog pages. - configDialogPointer->addPage(privacySettingsWidgetPointer, i18nc("@title:tab", "Privacy"), QStringLiteral("privacy-browser")); - configDialogPointer->addPage(generalSettingsWidgetPointer, i18nc("@title:tab", "General"), QStringLiteral("breeze-settings")); + // Prevent interaction with the parent window while the dialog is open. + configDialogPointer->setWindowModality(Qt::WindowModal); - // Delete the config dialog when it is closed. - configDialogPointer->setAttribute(Qt::WA_DeleteOnClose); + // Make it so. + configDialogPointer->show(); - // Make it so. - configDialogPointer->show(); + // TODO. KConfigDialog does not respect expanding size policies. + //configDialogPointer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + //privacySettingsWidgetPointer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + //generalSettingsWidgetPointer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + //configDialogPointer->adjustSize(); - // TODO. KConfigDialog does not respect expanding size policies. - //configDialogPointer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - //privacySettingsWidgetPointer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - //generalSettingsWidgetPointer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - //configDialogPointer->adjustSize(); + // Expand the config dialog. + configDialogPointer->resize(1000, 500); - // Expand the config dialog. - configDialogPointer->resize(1000, 500); + // Apply the settings when they are updated. + connect(configDialogPointer, SIGNAL(settingsChanged(QString)), browserViewPointer, SLOT(applyApplicationSettings())); + connect(configDialogPointer, SIGNAL(settingsChanged(QString)), browserViewPointer, SLOT(applyDomainSettingsAndReload())); +} - // Apply the settings when they are updated. - connect(configDialogPointer, SIGNAL(settingsChanged(QString)), browserViewPointer, SLOT(applyApplicationSettings())); - connect(configDialogPointer, SIGNAL(settingsChanged(QString)), browserViewPointer, SLOT(applyDomainSettingsAndReload())); - } +QSize BrowserWindow::sizeHint() const +{ + // Return the default window size. + return QSize(1500, 1200); } void BrowserWindow::toggleDomStorage() const diff --git a/src/windows/BrowserWindow.h b/src/windows/BrowserWindow.h index c05f942..a405b6c 100644 --- a/src/windows/BrowserWindow.h +++ b/src/windows/BrowserWindow.h @@ -29,6 +29,7 @@ #include // Qt toolkit headers. +#include #include #include @@ -62,10 +63,11 @@ private Q_SLOTS: void loadUrlFromLineEdit(const QString &url) const; void refresh() const; void removeCookieFromList(const QNetworkCookie &cookie) const; - void settingsConfigure(); void showCookiesDialog(); + void showDownloadLocationBrowseDialog() const; void showDomainSettingsDialog() const; void showProgressBar(const int &progress) const; + void showSettingsDialog(); void toggleDomStorage() const; void toggleJavaScript() const; void toggleLocalStorage() const; @@ -94,6 +96,7 @@ private: bool customUserAgentEnabled; QAction *domStorageActionPointer; QPalette domainSettingsPalette; + QComboBox *downloadLocationComboBoxPointer; KToggleFullScreenAction *fullScreenActionPointer; QAction *javaScriptActionPointer; bool javaScriptEnabled;