File indexing completed on 2024-11-10 06:29:53
0001 /* 0002 SPDX-FileCopyrightText: 2016 Artem Fedoskin <afedoskin3@gmail.com> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #include "constellationartitem.h" 0007 0008 #include "Options.h" 0009 #include "projections/projector.h" 0010 #include "constellationartcomponent.h" 0011 #include "skynodes/constellationartnode.h" 0012 0013 ConstellationArtItem::ConstellationArtItem(ConstellationArtComponent *artComp, RootNode *rootNode) 0014 : SkyItem(LabelsItem::label_t::NO_LABEL, rootNode), m_artComp(artComp) 0015 { 0016 loadNodes(); 0017 } 0018 0019 void ConstellationArtItem::deleteNodes() 0020 { 0021 m_artComp->deleteData(); 0022 QSGNode *n = firstChild(); 0023 while (n != 0) 0024 { 0025 QSGNode *d = n; 0026 n = n->nextSibling(); 0027 removeChildNode(d); 0028 delete d; 0029 } 0030 } 0031 0032 void ConstellationArtItem::loadNodes() 0033 { 0034 m_artComp->loadData(); 0035 if (!childCount()) 0036 { 0037 QList<ConstellationsArt *> list = m_artComp->m_ConstList; 0038 foreach (ConstellationsArt *art, list) 0039 { 0040 ConstellationArtNode *constArt = new ConstellationArtNode(art); 0041 appendChildNode(constArt); 0042 } 0043 } 0044 } 0045 0046 void ConstellationArtItem::update() 0047 { 0048 if (Options::showConstellationArt()) 0049 { 0050 loadNodes(); 0051 if (SkyMapLite::IsSlewing() == false) 0052 { 0053 show(); 0054 //Traverse all children nodes of RootNode 0055 QSGNode *n = firstChild(); 0056 while (n != 0) 0057 { 0058 ConstellationArtNode *artNode = static_cast<ConstellationArtNode *>(n); 0059 artNode->update(); 0060 n = n->nextSibling(); 0061 } 0062 } 0063 else 0064 { 0065 hide(); 0066 } 0067 } 0068 else 0069 { 0070 //Delete all images if we don't need to draw constellation art and save ~50 MB. 0071 deleteNodes(); 0072 } 0073 }