X-Git-Url: https://gitweb.stoutner.com/?a=blobdiff_plain;f=src%2Fdialogs%2FSaveDialog.cpp;h=5e969164e508e2b13f0c7fbfedb5ae169ddb2510;hb=efed1601e5f6e79d746866d55d625d777b64a248;hp=fff857d41e18679f2b61cf374152f8316ced57a8;hpb=1ce11bc5f6630bf81aa67bdaca411fbea93dc017;p=PrivacyBrowserPC.git diff --git a/src/dialogs/SaveDialog.cpp b/src/dialogs/SaveDialog.cpp index fff857d..5e96916 100644 --- a/src/dialogs/SaveDialog.cpp +++ b/src/dialogs/SaveDialog.cpp @@ -1,5 +1,5 @@ /* - * Copyright © 2022 Soren Stoutner . + * Copyright 2022-2023 Soren Stoutner . * * This file is part of Privacy Browser PC . * @@ -30,7 +30,7 @@ #include #include -SaveDialog::SaveDialog(QWebEngineDownloadItem *downloadItemPointer) +SaveDialog::SaveDialog(QUrl &url, QString &mimeTypeString, int totalBytes, QString fileName, bool nativeDownloader): downloadUrl(url), suggestedFileName(fileName) { // Set the dialog window title. setWindowTitle(i18nc("The save dialog window title", "Save")); @@ -45,6 +45,7 @@ SaveDialog::SaveDialog(QWebEngineDownloadItem *downloadItemPointer) saveDialogUi.setupUi(this); // Get handles for the widgets. + QGraphicsView *mimeGraphicsViewPointer = saveDialogUi.mimeGraphicsView; QLabel *urlLabelPointer = saveDialogUi.urlLabel; QLabel *filetypeLabelPointer = saveDialogUi.fileTypeLabel; QLabel *mimeTypeLabelPointer = saveDialogUi.mimeTypeLabel; @@ -52,43 +53,69 @@ SaveDialog::SaveDialog(QWebEngineDownloadItem *downloadItemPointer) QDialogButtonBox *dialogButtonBoxPointer = saveDialogUi.dialogButtonBox; QPushButton *saveButtonPointer = dialogButtonBoxPointer->button(QDialogButtonBox::Save); - // Get the URL and the suggested file name. - downloadUrl = downloadItemPointer->url(); - suggestedFileName = downloadItemPointer->suggestedFileName(); - QString mimeType = downloadItemPointer->mimeType(); - // Get a MIME type database. QMimeDatabase mimeDatabase; + // Get the MIME type. + QMimeType mimeType = mimeDatabase.mimeTypeForName(mimeTypeString); + + // Get the MIME type icon. + QIcon mimeTypeIcon = QIcon::fromTheme(mimeType.iconName()); + + // Create a graphics scene. + QGraphicsScene *mimeGraphicsScenePointer = new QGraphicsScene(this); + + // Set the graphics scene. + mimeGraphicsViewPointer->setScene(mimeGraphicsScenePointer); + + // Set the background of the graphics view to be the same as the window + mimeGraphicsViewPointer->setBackgroundRole(QPalette::Window); + + // Add the MIME type icon to the scene. + mimeGraphicsScenePointer->addPixmap(mimeTypeIcon.pixmap(64, 64)); + // Populate the labels. urlLabelPointer->setText("" + downloadUrl.toString() + ""); - filetypeLabelPointer->setText("" + mimeDatabase.mimeTypeForName(mimeType).comment() + ""); - mimeTypeLabelPointer->setText("" + mimeType + ""); + filetypeLabelPointer->setText("" + mimeType.comment() + ""); + mimeTypeLabelPointer->setText("" + mimeTypeString + ""); // Populate the download size label. - if (downloadItemPointer->totalBytes() == -1) // The file size is unknown. + if (totalBytes == -1) // The file size is unknown. sizeLabelPointer->setText(i18nc("Unknown download file size. The bold style should be preserved.", "unknown")); else // The file size is known. Format it according to the locale. - sizeLabelPointer->setText(ki18nc("Download file size. The bold style should be preserved.", "%1 bytes").subs(downloadItemPointer->totalBytes()).toString()); - - // Connect the buttons. - connect(saveButtonPointer, SIGNAL(clicked()), this, SLOT(showFileDialog())); - connect(dialogButtonBoxPointer, SIGNAL(rejected()), this, SLOT(reject())); + sizeLabelPointer->setText(ki18nc("Download file size. The bold style should be preserved.", "%1 bytes").subs(totalBytes).toString()); // Create the keyboard shortcuts. QShortcut *sShortcutPointer = new QShortcut(QKeySequence(i18nc("The save key shortcut.", "s")), this); QShortcut *cShortcutPointer = new QShortcut(QKeySequence(i18nc("The close key shortcut.", "c")), this); - - // Connect the shortcuts. - connect(sShortcutPointer, SIGNAL(activated()), this, SLOT(showFileDialog())); + QShortcut *quitShortcutPointer = new QShortcut(QKeySequence::Quit, this); + + // Connect the save buttons. + if (nativeDownloader) + { + // Show the file picker for the native download. + connect(saveButtonPointer, SIGNAL(clicked()), this, SLOT(showFilePicker())); + connect(sShortcutPointer, SIGNAL(activated()), this, SLOT(showFilePicker())); + } + else + { + // Use WebEngine's downloader. + connect(saveButtonPointer, SIGNAL(clicked()), this, SLOT(accept())); + connect(sShortcutPointer, SIGNAL(activated()), this, SLOT(accept())); + } + + // Connect the cancel button. + connect(dialogButtonBoxPointer, SIGNAL(rejected()), this, SLOT(reject())); connect(cShortcutPointer, SIGNAL(activated()), this, SLOT(reject())); + connect(quitShortcutPointer, SIGNAL(activated()), this, SLOT(reject())); } -void SaveDialog::showFileDialog() +void SaveDialog::showFilePicker() { // Show the file picker dialog. - emit showSaveFilePickerDialog(downloadUrl, suggestedFileName); + emit useNativeKdeDownloader(downloadUrl, suggestedFileName); // Close the dialog. reject(); } +