File indexing completed on 2024-04-14 03:43:27

0001 /*
0002     SPDX-FileCopyrightText: 2009 Khudyakov Alexey <alexey.skladnoy@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include <QWidget>
0010 #include <QPoint>
0011 #include <QList>
0012 #include <QString>
0013 #include <QStringList>
0014 
0015 class SkyPoint;
0016 class SkyObject;
0017 class InfoBoxWidget;
0018 
0019 /**
0020  * @brief The InfoBoxes class is a collection of InfoBoxWidget objects that display a transparent box for display of text messages
0021  */
0022 class InfoBoxes : public QWidget
0023 {
0024     Q_OBJECT
0025 
0026   public:
0027     explicit InfoBoxes(QWidget *parent = nullptr);
0028 
0029     virtual ~InfoBoxes() override = default;
0030 
0031     void addInfoBox(InfoBoxWidget *ibox);
0032     QList<InfoBoxWidget *> getInfoBoxes() const { return m_boxes; }
0033 
0034   protected:
0035     void resizeEvent(QResizeEvent *event) override;
0036 
0037   private:
0038     QList<InfoBoxWidget *> m_boxes;
0039 };
0040 
0041 /**
0042 * @brief The InfoBoxWidget class is a widget that displays a transparent box for display of text messages.
0043 */
0044 class InfoBoxWidget : public QWidget
0045 {
0046     Q_OBJECT
0047   public:
0048     /** Alignment of widget. */
0049     enum
0050     {
0051         NoAnchor     = 0,
0052         AnchorRight  = 1,
0053         AnchorBottom = 2,
0054         AnchorBoth   = 3
0055     };
0056 
0057     /** Create one infobox. */
0058     InfoBoxWidget(bool shade, const QPoint &pos, int anchor = 0, const QStringList &str = QStringList(),
0059                   QWidget *parent = nullptr);
0060     /** Destructor */
0061     virtual ~InfoBoxWidget() override = default;
0062 
0063     /** Check whether box is shaded. In this case only one line is shown. */
0064     bool shaded() const { return m_shaded; }
0065     /** Get stickyness status of */
0066     int sticky() const { return m_anchor; }
0067 
0068     /** Adjust widget's position */
0069     void adjust();
0070 
0071   public slots:
0072     /** Set information about time. Data is taken from KStarsData. */
0073     void slotTimeChanged();
0074     /** Set information about location. Data is taken from KStarsData. */
0075     void slotGeoChanged();
0076     /** Set information about object. */
0077     void slotObjectChanged(SkyObject *obj);
0078     /** Set information about pointing. */
0079     void slotPointChanged(SkyPoint *p);
0080   signals:
0081     /** Emitted when widget is clicked */
0082     void clicked();
0083 
0084   protected:
0085     void paintEvent(QPaintEvent *event) override;
0086     void mouseDoubleClickEvent(QMouseEvent *event) override;
0087     void mousePressEvent(QMouseEvent *event) override;
0088     void mouseMoveEvent(QMouseEvent *event) override;
0089     void mouseReleaseEvent(QMouseEvent *event) override;
0090     void showEvent(QShowEvent *event) override;
0091 
0092   private:
0093     /** Uset to set information about object. */
0094     void setPoint(QString name, SkyPoint *p);
0095     /** Recalculate size of widget */
0096     void updateSize();
0097 
0098     /// List of string to show
0099     QStringList m_strings;
0100     /// True if widget coordinates were adjusted
0101     bool m_adjusted { true };
0102     /// True if widget is dragged around
0103     bool m_grabbed { true };
0104     /// True if widget if shaded
0105     bool m_shaded { true };
0106     /// Vertical alignment of widget
0107     int m_anchor { 0 };
0108 
0109     static const int padX;
0110     static const int padY;
0111 };