File indexing completed on 2024-03-24 03:47:02

0001 /*
0002     SPDX-FileCopyrightText: 2016 Artem Fedoskin <afedoskin3@gmail.com>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "cometsitem.h"
0007 
0008 #include "Options.h"
0009 #include "projections/projector.h"
0010 #include "kscomet.h"
0011 
0012 #include "rootnode.h"
0013 #include "labelsitem.h"
0014 #include "skylabeler.h"
0015 
0016 #include "skynodes/pointsourcenode.h"
0017 
0018 CometsItem::CometsItem(const QList<SkyObject *> &cometsList, RootNode *rootNode)
0019     : SkyItem(LabelsItem::label_t::COMET_LABEL, rootNode), m_cometsList(cometsList)
0020 {
0021     recreateList();
0022 }
0023 
0024 void CometsItem::update()
0025 {
0026     if (Options::zoomFactor() < 10 * MINZOOM)
0027     {
0028         hide();
0029         return;
0030     }
0031 
0032     show();
0033 
0034     bool hideLabel = !Options::showCometNames() || (SkyMapLite::Instance()->isSlewing() && Options::hideLabels());
0035 
0036     if (hideLabel)
0037     {
0038         hideLabels();
0039     }
0040     double rsunLabelLimit = Options::maxRadCometName();
0041 
0042     /*//FIXME: Should these be config'able?
0043     skyp->setPen( QPen( QColor( "darkcyan" ) ) );
0044     skyp->setBrush( QBrush( QColor( "darkcyan" ) ) );*/
0045 
0046     //Traverse all children nodes
0047     QSGNode *n = firstChild();
0048     while (n != 0)
0049     {
0050         SkyNode *skyNode = static_cast<SkyNode *>(n);
0051         n                = n->nextSibling();
0052 
0053         //TODO: Might be better move it to PointSourceNode
0054         KSComet *com = static_cast<KSComet *>(skyNode->skyObject());
0055         double mag   = com->mag();
0056         if (std::isnan(mag) == 0)
0057         {
0058             bool drawLabel = false;
0059             if (!(hideLabel || com->rsun() >= rsunLabelLimit))
0060             {
0061                 drawLabel = true;
0062             }
0063             skyNode->update(drawLabel);
0064         }
0065         else
0066         {
0067             skyNode->hide();
0068         }
0069     }
0070 }
0071 
0072 void CometsItem::recreateList()
0073 {
0074     //Delete all child nodes
0075     while (QSGNode *n = firstChild())
0076     {
0077         removeChildNode(n);
0078         delete n;
0079     }
0080 
0081     foreach (SkyObject *comet, m_cometsList)
0082     {
0083         KSComet *com = static_cast<KSComet *>(comet);
0084         appendChildNode(new PointSourceNode(com, rootNode(), labelType()));
0085     }
0086 }