Kstars

imageviewer.h
1 /*
2  SPDX-FileCopyrightText: 2001 Thomas Kabelmann <[email protected]>
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 
18 class QLabel;
19 
20 class ImageLabel : public QFrame
21 {
22  Q_OBJECT
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  */
56 class ImageViewer : public QDialog
57 {
58  Q_OBJECT
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
virtual void resizeEvent(QResizeEvent *event)
bool loadImage(const QString &filename)
loadImage Load image from local file and display it
ImageViewer(const QString &caption, QWidget *parent=nullptr)
Creates empty viewer.
Definition: imageviewer.cpp:79
Image viewer window for KStars.
Definition: imageviewer.h:56
virtual void paintEvent(QPaintEvent *) override
~ImageViewer() override
Destructor.
QObject * parent() const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2022 The KDE developers.
Generated on Thu Aug 18 2022 03:56:41 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.