mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-26 13:08:48 +03:00
parent
1b5e18cb1a
commit
511c58d608
4 changed files with 51 additions and 0 deletions
|
@ -99,6 +99,8 @@ protected:
|
|||
|
||||
private:
|
||||
void init();
|
||||
//! Add a context menu option to save the image of the timeline item.
|
||||
void addSaveImageAction(ImageItem *image);
|
||||
|
||||
template<class Widget>
|
||||
void setupLocalWidgetLayout(Widget *widget,
|
||||
|
|
|
@ -48,6 +48,10 @@ public:
|
|||
|
||||
QSize sizeHint() const override;
|
||||
|
||||
public slots:
|
||||
//! Show a save as dialog for the image.
|
||||
void saveAs();
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *event) override;
|
||||
void mousePressEvent(QMouseEvent *event) override;
|
||||
|
|
|
@ -137,6 +137,8 @@ TimelineItem::TimelineItem(ImageItem *image,
|
|||
init();
|
||||
|
||||
setupLocalWidgetLayout<ImageItem>(image, userid, "sent an image", withSender);
|
||||
|
||||
addSaveImageAction(image);
|
||||
}
|
||||
|
||||
TimelineItem::TimelineItem(FileItem *file, const QString &userid, bool withSender, QWidget *parent)
|
||||
|
@ -177,6 +179,8 @@ TimelineItem::TimelineItem(ImageItem *image,
|
|||
{
|
||||
setupWidgetLayout<mtx::events::RoomEvent<mtx::events::msg::Image>, ImageItem>(
|
||||
image, event, " sent an image", with_sender);
|
||||
|
||||
addSaveImageAction(image);
|
||||
}
|
||||
|
||||
TimelineItem::TimelineItem(FileItem *file,
|
||||
|
@ -518,3 +522,14 @@ TimelineItem::paintEvent(QPaintEvent *)
|
|||
QPainter p(this);
|
||||
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
|
||||
}
|
||||
|
||||
void
|
||||
TimelineItem::addSaveImageAction(ImageItem *image)
|
||||
{
|
||||
if (contextMenu_) {
|
||||
auto saveImage = new QAction("Save image", this);
|
||||
contextMenu_->addAction(saveImage);
|
||||
|
||||
connect(saveImage, &QAction::triggered, image, &ImageItem::saveAs);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include <QBrush>
|
||||
#include <QDebug>
|
||||
#include <QDesktopServices>
|
||||
#include <QFileDialog>
|
||||
#include <QFileInfo>
|
||||
#include <QPainter>
|
||||
#include <QPixmap>
|
||||
|
@ -219,3 +220,32 @@ ImageItem::paintEvent(QPaintEvent *event)
|
|||
painter.drawText(textRegion_, Qt::AlignVCenter, elidedText);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ImageItem::saveAs()
|
||||
{
|
||||
auto filename = QFileDialog::getSaveFileName(this, tr("Save image"), text_);
|
||||
|
||||
if (filename.isEmpty())
|
||||
return;
|
||||
|
||||
auto proxy = client_->downloadFile(url_);
|
||||
connect(proxy,
|
||||
&DownloadMediaProxy::fileDownloaded,
|
||||
this,
|
||||
[proxy, this, filename](const QByteArray &data) {
|
||||
proxy->deleteLater();
|
||||
|
||||
try {
|
||||
QFile file(filename);
|
||||
|
||||
if (!file.open(QIODevice::WriteOnly))
|
||||
return;
|
||||
|
||||
file.write(data);
|
||||
file.close();
|
||||
} catch (const std::exception &ex) {
|
||||
qDebug() << "Error while saving file to:" << ex.what();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue