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 }