File indexing completed on 2024-03-24 03:47:03
0001 /* 0002 SPDX-FileCopyrightText: 2016 Artem Fedoskin <afedoskin3@gmail.com> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #include "telescopesymbolsitem.h" 0007 0008 #include "kstarslite.h" 0009 #include "labelsitem.h" 0010 #include "Options.h" 0011 #include "indi/clientmanagerlite.h" 0012 #include "kstarslite/skyitems/rootnode.h" 0013 #include "projections/projector.h" 0014 #include "skynodes/crosshairnode.h" 0015 0016 #include <basedevice.h> 0017 0018 TelescopeSymbolsItem::TelescopeSymbolsItem(RootNode *rootNode) 0019 : SkyItem(LabelsItem::label_t::TELESCOPE_SYMBOL, rootNode) 0020 { 0021 m_clientManager = KStarsLite::Instance()->clientManagerLite(); 0022 m_KStarsData = KStarsData::Instance(); 0023 } 0024 0025 void TelescopeSymbolsItem::addTelescope(INDI::BaseDevice *bd) 0026 { 0027 if (!m_telescopes.value(bd)) 0028 { 0029 CrosshairNode *crossHair = new CrosshairNode(bd, rootNode()); 0030 appendChildNode(crossHair); 0031 0032 m_telescopes.insert(bd, crossHair); 0033 } 0034 } 0035 0036 void TelescopeSymbolsItem::removeTelescope(INDI::BaseDevice *bd) 0037 { 0038 CrosshairNode *crossHair = m_telescopes.value(bd); 0039 if (crossHair) 0040 { 0041 removeChildNode(crossHair); 0042 delete crossHair; 0043 } 0044 m_telescopes.remove(bd); 0045 } 0046 0047 void TelescopeSymbolsItem::update() 0048 { 0049 QHash<INDI::BaseDevice *, CrosshairNode *>::iterator i; 0050 bool deleteAll = !m_clientManager->isConnected(); 0051 0052 QColor color = m_KStarsData->colorScheme()->colorNamed("TargetColor"); 0053 0054 bool show = Options::showTargetCrosshair(); 0055 if (!show) 0056 { 0057 hide(); 0058 } 0059 0060 for (i = m_telescopes.begin(); i != m_telescopes.end(); ++i) 0061 { 0062 CrosshairNode *crossHair = i.value(); 0063 INDI::BaseDevice *device = i.key(); 0064 if (crossHair) 0065 { 0066 if (deleteAll || !(device->isConnected())) 0067 { 0068 removeChildNode(crossHair); 0069 delete crossHair; 0070 m_telescopes.insert(device, nullptr); 0071 } 0072 else if (show) 0073 { 0074 if (device->isConnected()) 0075 { 0076 crossHair->setColor(color); 0077 crossHair->update(); 0078 } 0079 else 0080 { 0081 crossHair->hide(); 0082 } 0083 } 0084 } 0085 } 0086 if (deleteAll) 0087 { 0088 m_telescopes.clear(); 0089 } 0090 }