Kstars

imageviewer.h
1/*
2 SPDX-FileCopyrightText: 2001 Thomas Kabelmann <tk78@gmx.de>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6
7#pragma once
8
9#include "auxiliary/filedownloader.h"
10
11#include <QDialog>
12#include <QFile>
13#include <QFrame>
14#include <QImage>
15#include <QPixmap>
16#include <QUrl>
17
18class QLabel;
19
20class ImageLabel : public QFrame
21{
23 public:
24 explicit ImageLabel(QWidget *parent);
25 ~ImageLabel() override = default;
26 void setImage(const QImage &img);
27 void invertPixels();
28
29 // ImageViewer needs access to the image in order to modify it
30 QImage m_Image;
31 protected:
32 void paintEvent(QPaintEvent *e) override;
33 void resizeEvent(QResizeEvent *) override;
34
35 private:
36 QPixmap pix;
37};
38
39/**
40 * @class ImageViewer
41 * @short Image viewer window for KStars
42 * @author Thomas Kabelmann
43 * @author Jasem Mutlaq
44 * @version 1.1
45 *
46 * This image-viewer automatically resizes the picture. The output
47 * works with kio-slaves and not directly with the QImage save-routines
48 * because normally the image-files are in GIF-format and QT does not
49 * save these files. For other formats, like PNG, this is not so important
50 * because they can directly saved by QImage.
51 *
52 * The download-slave works asynchron so the parent-widget can be used at
53 * this time. The save-slave works synchronously, but this is not important
54 * because the files are at this time local saved and this works not so long.
55 */
56class ImageViewer : public QDialog
57{
59
60 public:
61 /** Creates empty viewer. */
62 explicit ImageViewer(const QString &caption, QWidget *parent = nullptr);
63
64 /** Create image viewer from URL with caption */
65 explicit ImageViewer(const QUrl &imageURL, const QString &capText = QString(), QWidget *parent = nullptr);
66
67 /** Destructor. If there is a partially downloaded image file, delete it.*/
68 ~ImageViewer() override;
69
70 /**
71 * @brief loadImage Load image from local file and display it
72 * @param filename path to local image
73 * @return True if opened and displayed, false otherwise
74 */
75 bool loadImage(const QString &filename);
76
77 QJsonObject metadata();
78
79 private:
80 /**
81 * Display the downloaded image. Resize the window to fit the image, If the image is
82 * larger than the screen, make the image as large as possible while preserving the
83 * original aspect ratio
84 */
85 bool showImage();
86
87 /** Download the image file pointed to by the URL string. */
88 void loadImageFromURL();
89
90 /** Save the downloaded image to a local file. */
91 void saveFile(QUrl &url);
92
93 QFile file;
94
95 const QUrl m_ImageUrl;
96 bool fileIsImage { false };
97 QString filename;
98
99 FileDownloader downloadJob;
100
101 ImageLabel *m_View { nullptr };
102 QLabel *m_Caption { nullptr };
103
104 // Share among image viewers
105 static QUrl lastURL;
106
107 private slots:
108 /** Initialize (common part of onstructors) */
109 void init(QString caption, QString capText);
110 /** Make sure download has finished, then make sure file exists, then display the image */
111 //void downloadReady (KJob *);
112
113 void downloadReady();
114 void downloadError(const QString &errorString);
115
116 /** Saves file to disc. */
117 void saveFileToDisc();
118
119 /** Inverts colors **/
120 void invertColors();
121};
Q_OBJECTQ_OBJECT
QObject * parent() const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Tue Mar 26 2024 11:19:01 by doxygen 1.10.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.