From cfca7157b98c9dc8e0852fe6484bc3f75008af7d Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sat, 18 Sep 2021 00:22:33 +0200 Subject: Change indentation to 4 spaces --- src/dialogs/PreviewUploadOverlay.cpp | 283 +++++++++++++++++------------------ 1 file changed, 140 insertions(+), 143 deletions(-) (limited to 'src/dialogs/PreviewUploadOverlay.cpp') diff --git a/src/dialogs/PreviewUploadOverlay.cpp b/src/dialogs/PreviewUploadOverlay.cpp index 66fa1b37..e850c03b 100644 --- a/src/dialogs/PreviewUploadOverlay.cpp +++ b/src/dialogs/PreviewUploadOverlay.cpp @@ -29,188 +29,185 @@ PreviewUploadOverlay::PreviewUploadOverlay(QWidget *parent) , upload_{tr("Upload"), this} , cancel_{tr("Cancel"), this} { - auto hlayout = new QHBoxLayout; - hlayout->addStretch(1); - hlayout->addWidget(&cancel_); - hlayout->addWidget(&upload_); - hlayout->setMargin(0); - - auto vlayout = new QVBoxLayout{this}; - vlayout->addWidget(&titleLabel_); - vlayout->addWidget(&infoLabel_); - vlayout->addWidget(&fileName_); - vlayout->addLayout(hlayout); - vlayout->setSpacing(conf::modals::WIDGET_SPACING); - vlayout->setMargin(conf::modals::WIDGET_MARGIN); - - upload_.setDefault(true); - connect(&upload_, &QPushButton::clicked, [this]() { - emit confirmUpload(data_, mediaType_, fileName_.text()); - close(); - }); - - connect(&fileName_, &QLineEdit::returnPressed, this, [this]() { - emit confirmUpload(data_, mediaType_, fileName_.text()); - close(); - }); - - connect(&cancel_, &QPushButton::clicked, this, [this]() { - emit aborted(); - close(); - }); + auto hlayout = new QHBoxLayout; + hlayout->addStretch(1); + hlayout->addWidget(&cancel_); + hlayout->addWidget(&upload_); + hlayout->setMargin(0); + + auto vlayout = new QVBoxLayout{this}; + vlayout->addWidget(&titleLabel_); + vlayout->addWidget(&infoLabel_); + vlayout->addWidget(&fileName_); + vlayout->addLayout(hlayout); + vlayout->setSpacing(conf::modals::WIDGET_SPACING); + vlayout->setMargin(conf::modals::WIDGET_MARGIN); + + upload_.setDefault(true); + connect(&upload_, &QPushButton::clicked, [this]() { + emit confirmUpload(data_, mediaType_, fileName_.text()); + close(); + }); + + connect(&fileName_, &QLineEdit::returnPressed, this, [this]() { + emit confirmUpload(data_, mediaType_, fileName_.text()); + close(); + }); + + connect(&cancel_, &QPushButton::clicked, this, [this]() { + emit aborted(); + close(); + }); } void PreviewUploadOverlay::init() { - QSize winsize; - QPoint center; - - auto window = MainWindow::instance(); - if (window) { - winsize = window->frameGeometry().size(); - center = window->frameGeometry().center(); - } else { - nhlog::ui()->warn("unable to retrieve MainWindow's size"); - } - - fileName_.setText(QFileInfo{filePath_}.fileName()); - - setAutoFillBackground(true); - setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint); - setWindowModality(Qt::WindowModal); - - QFont font; - font.setPointSizeF(font.pointSizeF() * conf::modals::LABEL_MEDIUM_SIZE_RATIO); - - titleLabel_.setFont(font); - titleLabel_.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - titleLabel_.setAlignment(Qt::AlignCenter); - infoLabel_.setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); - fileName_.setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); - fileName_.setAlignment(Qt::AlignCenter); - upload_.setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - cancel_.setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - - if (isImage_) { - infoLabel_.setAlignment(Qt::AlignCenter); - - const auto maxWidth = winsize.width() * 0.8; - const auto maxHeight = winsize.height() * 0.8; - - // Scale image preview to fit into the application window. - infoLabel_.setPixmap(utils::scaleDown(maxWidth, maxHeight, image_)); - move(center.x() - (width() * 0.5), center.y() - (height() * 0.5)); - } else { - infoLabel_.setAlignment(Qt::AlignLeft); - } - infoLabel_.setScaledContents(false); - - show(); + QSize winsize; + QPoint center; + + auto window = MainWindow::instance(); + if (window) { + winsize = window->frameGeometry().size(); + center = window->frameGeometry().center(); + } else { + nhlog::ui()->warn("unable to retrieve MainWindow's size"); + } + + fileName_.setText(QFileInfo{filePath_}.fileName()); + + setAutoFillBackground(true); + setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint); + setWindowModality(Qt::WindowModal); + + QFont font; + font.setPointSizeF(font.pointSizeF() * conf::modals::LABEL_MEDIUM_SIZE_RATIO); + + titleLabel_.setFont(font); + titleLabel_.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + titleLabel_.setAlignment(Qt::AlignCenter); + infoLabel_.setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); + fileName_.setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); + fileName_.setAlignment(Qt::AlignCenter); + upload_.setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + cancel_.setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + + if (isImage_) { + infoLabel_.setAlignment(Qt::AlignCenter); + + const auto maxWidth = winsize.width() * 0.8; + const auto maxHeight = winsize.height() * 0.8; + + // Scale image preview to fit into the application window. + infoLabel_.setPixmap(utils::scaleDown(maxWidth, maxHeight, image_)); + move(center.x() - (width() * 0.5), center.y() - (height() * 0.5)); + } else { + infoLabel_.setAlignment(Qt::AlignLeft); + } + infoLabel_.setScaledContents(false); + + show(); } void PreviewUploadOverlay::setLabels(const QString &type, const QString &mime, uint64_t upload_size) { - if (mediaType_.split('/')[0] == "image") { - if (!image_.loadFromData(data_)) { - titleLabel_.setText(QString{tr(ERR_MSG)}.arg(type)); - } else { - titleLabel_.setText(QString{tr(DEFAULT)}.arg(mediaType_)); - } - isImage_ = true; + if (mediaType_.split('/')[0] == "image") { + if (!image_.loadFromData(data_)) { + titleLabel_.setText(QString{tr(ERR_MSG)}.arg(type)); } else { - auto const info = QString{tr("Media type: %1\n" - "Media size: %2\n")} - .arg(mime) - .arg(utils::humanReadableFileSize(upload_size)); - - titleLabel_.setText(QString{tr(DEFAULT)}.arg("file")); - infoLabel_.setText(info); + titleLabel_.setText(QString{tr(DEFAULT)}.arg(mediaType_)); } + isImage_ = true; + } else { + auto const info = QString{tr("Media type: %1\n" + "Media size: %2\n")} + .arg(mime) + .arg(utils::humanReadableFileSize(upload_size)); + + titleLabel_.setText(QString{tr(DEFAULT)}.arg("file")); + infoLabel_.setText(info); + } } void PreviewUploadOverlay::setPreview(const QImage &src, const QString &mime) { - nhlog::ui()->info("Pasting image with size: {}x{}, format: {}", - src.height(), - src.width(), - mime.toStdString()); - - auto const &split = mime.split('/'); - auto const &type = split[1]; - - QBuffer buffer(&data_); - buffer.open(QIODevice::WriteOnly); - if (src.save(&buffer, type.toStdString().c_str())) - titleLabel_.setText(QString{tr(DEFAULT)}.arg("image")); - else - titleLabel_.setText(QString{tr(ERR_MSG)}.arg(type)); - - mediaType_ = mime; - filePath_ = "clipboard." + type; - image_.convertFromImage(src); - isImage_ = true; + nhlog::ui()->info( + "Pasting image with size: {}x{}, format: {}", src.height(), src.width(), mime.toStdString()); + + auto const &split = mime.split('/'); + auto const &type = split[1]; + QBuffer buffer(&data_); + buffer.open(QIODevice::WriteOnly); + if (src.save(&buffer, type.toStdString().c_str())) titleLabel_.setText(QString{tr(DEFAULT)}.arg("image")); - init(); + else + titleLabel_.setText(QString{tr(ERR_MSG)}.arg(type)); + + mediaType_ = mime; + filePath_ = "clipboard." + type; + image_.convertFromImage(src); + isImage_ = true; + + titleLabel_.setText(QString{tr(DEFAULT)}.arg("image")); + init(); } void PreviewUploadOverlay::setPreview(const QByteArray data, const QString &mime) { - auto const &split = mime.split('/'); - auto const &type = split[1]; + auto const &split = mime.split('/'); + auto const &type = split[1]; - data_ = data; - mediaType_ = mime; - filePath_ = "clipboard." + type; - isImage_ = false; + data_ = data; + mediaType_ = mime; + filePath_ = "clipboard." + type; + isImage_ = false; - setLabels(type, mime, data_.size()); - init(); + setLabels(type, mime, data_.size()); + init(); } void PreviewUploadOverlay::setPreview(const QString &path) { - QFile file{path}; - - if (!file.open(QIODevice::ReadOnly)) { - nhlog::ui()->warn("Failed to open file ({}): {}", - path.toStdString(), - file.errorString().toStdString()); - close(); - return; - } + QFile file{path}; - QMimeDatabase db; - auto mime = db.mimeTypeForFileNameAndData(path, &file); + if (!file.open(QIODevice::ReadOnly)) { + nhlog::ui()->warn( + "Failed to open file ({}): {}", path.toStdString(), file.errorString().toStdString()); + close(); + return; + } - if ((data_ = file.readAll()).isEmpty()) { - nhlog::ui()->warn("Failed to read media: {}", file.errorString().toStdString()); - close(); - return; - } + QMimeDatabase db; + auto mime = db.mimeTypeForFileNameAndData(path, &file); - auto const &split = mime.name().split('/'); + if ((data_ = file.readAll()).isEmpty()) { + nhlog::ui()->warn("Failed to read media: {}", file.errorString().toStdString()); + close(); + return; + } - mediaType_ = mime.name(); - filePath_ = file.fileName(); - isImage_ = false; + auto const &split = mime.name().split('/'); - setLabels(split[1], mime.name(), data_.size()); - init(); + mediaType_ = mime.name(); + filePath_ = file.fileName(); + isImage_ = false; + + setLabels(split[1], mime.name(), data_.size()); + init(); } void PreviewUploadOverlay::keyPressEvent(QKeyEvent *event) { - if (event->matches(QKeySequence::Cancel)) { - emit aborted(); - close(); - } else { - QWidget::keyPressEvent(event); - } + if (event->matches(QKeySequence::Cancel)) { + emit aborted(); + close(); + } else { + QWidget::keyPressEvent(event); + } } \ No newline at end of file -- cgit 1.5.1 From 94441e68fde86977a70d60c735b1363c8b61ba08 Mon Sep 17 00:00:00 2001 From: Thulinma Date: Tue, 28 Sep 2021 01:42:35 +0200 Subject: Support pasting image/svg+xml format straight from supporting applications --- src/dialogs/PreviewUploadOverlay.cpp | 7 +++++++ src/timeline/InputBar.cpp | 15 +++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) (limited to 'src/dialogs/PreviewUploadOverlay.cpp') diff --git a/src/dialogs/PreviewUploadOverlay.cpp b/src/dialogs/PreviewUploadOverlay.cpp index e850c03b..2e95bd91 100644 --- a/src/dialogs/PreviewUploadOverlay.cpp +++ b/src/dialogs/PreviewUploadOverlay.cpp @@ -158,6 +158,8 @@ PreviewUploadOverlay::setPreview(const QImage &src, const QString &mime) void PreviewUploadOverlay::setPreview(const QByteArray data, const QString &mime) { + nhlog::ui()->info("Pasting {} bytes of data, mimetype {}", data.size(), mime.toStdString()); + auto const &split = mime.split('/'); auto const &type = split[1]; @@ -166,6 +168,11 @@ PreviewUploadOverlay::setPreview(const QByteArray data, const QString &mime) filePath_ = "clipboard." + type; isImage_ = false; + if (mime == "image/svg+xml") { + isImage_ = true; + image_.loadFromData(data_, mediaType_.toStdString().c_str()); + } + setLabels(type, mime, data_.size()); init(); } diff --git a/src/timeline/InputBar.cpp b/src/timeline/InputBar.cpp index c83bb19c..f518248b 100644 --- a/src/timeline/InputBar.cpp +++ b/src/timeline/InputBar.cpp @@ -68,7 +68,11 @@ InputBar::insertMimeData(const QMimeData *md) const auto video = formats.filter("video/", Qt::CaseInsensitive); if (md->hasImage()) { - showPreview(*md, "", image); + if (formats.contains("image/svg+xml", Qt::CaseInsensitive)) { + showPreview(*md, "", QStringList("image/svg+xml")); + } else { + showPreview(*md, "", image); + } } else if (!audio.empty()) { showPreview(*md, "", audio); } else if (!video.empty()) { @@ -651,7 +655,8 @@ InputBar::showPreview(const QMimeData &source, QString path, const QStringList & new dialogs::PreviewUploadOverlay(ChatPage::instance()); previewDialog_->setAttribute(Qt::WA_DeleteOnClose); - if (source.hasImage()) { + // Force SVG to _not_ be handled as an image, but as raw data + if (source.hasImage() && (!formats.size() || formats.front() != "image/svg+xml")) { if (formats.size() && formats.front().startsWith("image/")) { // known format, keep as-is previewDialog_->setPreview(qvariant_cast(source.imageData()), formats.front()); @@ -679,6 +684,12 @@ InputBar::showPreview(const QMimeData &source, QString path, const QStringList & &dialogs::PreviewUploadOverlay::confirmUpload, this, [this](const QByteArray data, const QString &mime, const QString &fn) { + if (!data.size()) { + nhlog::ui()->warn("Attempted to upload zero-byte file?! Mimetype {}, filename {}", + mime.toStdString(), + fn.toStdString()); + return; + } setUploading(true); setText(""); -- cgit 1.5.1