File indexing completed on 2024-12-08 12:10:25

0001 /*
0002     SPDX-FileCopyrightText: 2016 Artem Fedoskin <afedoskin3@gmail.com>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #pragma once
0007 
0008 #include "skyopacitynode.h"
0009 #include "labelsitem.h"
0010 
0011 class SkyComponent;
0012 class SkyMapLite;
0013 class QQuickItem;
0014 class RootNode;
0015 class SkyNode;
0016 
0017 /**
0018  * @class SkyItem
0019  *
0020  * This is an interface for implementing SkyItems that represent SkyComponent derived objects on
0021  * the SkyMapLite. It is derived from QSGOpacityNode to make it possible to hide the whole node tree
0022  * by simply setting opacity to 0.
0023  *
0024  * @short A base class that is used for displaying SkyComponents on SkyMapLite.
0025  * @author Artem Fedoskin
0026  * @version 1.0
0027  */
0028 
0029 class SkyItem : public SkyOpacityNode
0030 {
0031   public:
0032     /**
0033      * Constructor, appends SkyItem to rootNode as a child in a node tree
0034      *
0035      * @param labelType type of label that corresponds to this item
0036      * @note see LabelsItem::label_t
0037      * @param parent a pointer to SkyItem's parent node
0038      */
0039     explicit SkyItem(LabelsItem::label_t labelType, RootNode *rootNode = nullptr);
0040     /** @see PointSourceNode::~PointSourceNode() */
0041     virtual ~SkyItem();
0042 
0043     /**
0044      * @short updates the coordinates and visibility of child node. Similar to draw routine in
0045      * SkyComponent derived classes
0046      */
0047     virtual void update() = 0;
0048 
0049     virtual void show() override;
0050 
0051     /** @short hides this item and corresponding labels */
0052     virtual void hide() override;
0053 
0054     void hideLabels();
0055 
0056     /** @return RootNode that is the parent of this SkyItem in a node tree */
0057     inline RootNode *rootNode() { return m_rootNode; }
0058 
0059     /** @return label type of this SkyItem */
0060     inline LabelsItem::label_t labelType() { return m_labelType; }
0061 
0062   private:
0063     RootNode *m_rootNode { nullptr };
0064     QVector<SkyNode *> m_skyNodes;
0065     LabelsItem::label_t m_labelType;
0066 };