1 /*
2     SPDX-FileCopyrightText: 2013 Samikshan Bairagya <samikshan@gmail.com>
3 
4     SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 #include "wiequipsettings.h"
8 #include "oal/equipmentwriter.h"
9 #include "kstars.h"
10 #include "Options.h"
11 
12 #include <QListWidgetItem>
13 
WIEquipSettings()14 WIEquipSettings::WIEquipSettings() : QFrame(KStars::Instance())
15 {
16     setupUi(this);
17 
18     ScopeListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
19     binoDetailsFrame->setEnabled(kcfg_BinocularsCheck->isChecked());
20     scopeFrame->setEnabled(kcfg_TelescopeCheck->isChecked());
21 
22     connect(kcfg_TelescopeCheck, SIGNAL(toggled(bool)), this, SLOT(slotTelescopeCheck(bool)));
23     connect(kcfg_BinocularsCheck, SIGNAL(toggled(bool)), this, SLOT(slotBinocularsCheck(bool)));
24     connect(ScopeListWidget, SIGNAL(currentRowChanged(int)), this, SLOT(slotScopeSelected(int)));
25     connect(saveNewScopeButton, SIGNAL(clicked()), this, SLOT(slotAddNewScope()));
26 
27     populateScopeListWidget();
28 }
29 
populateScopeListWidget()30 void WIEquipSettings::populateScopeListWidget()
31 {
32     ScopeListWidget->clear();
33     ///Get telescope list from KStars user database.
34     KStars::Instance()->data()->userdb()->GetAllScopes(m_ScopeList);
35     foreach (OAL::Scope *scope, m_ScopeList)
36     {
37         QListWidgetItem *scopeItem = new QListWidgetItem;
38         scopeItem->setText(scope->vendor());
39         scopeItem->setData(Vendor, scope->vendor());
40         scopeItem->setData(Model, scope->model());
41         scopeItem->setData(Aperture, scope->aperture());
42         scopeItem->setData(FocalLength, scope->focalLength());
43         scopeItem->setData(Type, scope->type());
44 
45         ScopeListWidget->addItem(scopeItem);
46     }
47     if (ScopeListWidget->count() == 0)
48         return;
49 
50     vendorText->setText(ScopeListWidget->item(0)->data(Vendor).toString());
51     modelText->setText(ScopeListWidget->item(0)->data(Model).toString());
52     apertureText->setText(ScopeListWidget->item(0)->data(Aperture).toString().append(" mm"));
53 
54     ScopeListWidget->setCurrentRow(Options::scopeListIndex());
55 }
56 
slotTelescopeCheck(bool on)57 void WIEquipSettings::slotTelescopeCheck(bool on)
58 {
59     scopeFrame->setEnabled(on);
60     Options::setTelescopeCheck(on);
61 }
62 
slotBinocularsCheck(bool on)63 void WIEquipSettings::slotBinocularsCheck(bool on)
64 {
65     binoDetailsFrame->setEnabled(on);
66     Options::setBinocularsCheck(on);
67 }
68 
slotScopeSelected(int row)69 void WIEquipSettings::slotScopeSelected(int row)
70 {
71     if (row == -1)
72         return;
73 
74     QListWidgetItem *item = ScopeListWidget->item(row);
75 
76     if (item == nullptr)
77         return;
78 
79     vendorText->setText(item->data(Vendor).toString());
80     modelText->setText(item->data(Model).toString());
81     apertureText->setText(item->data(Aperture).toString().append(" mm"));
82 
83     if (item->data(Type).toString() == "Reflector")
84         m_TelType = ObsConditions::Reflector;
85     else if (item->data(Type).toString() == "Refractor")
86         m_TelType = ObsConditions::Refractor;
87 
88     Options::setScopeListIndex(row);
89 }
90 
slotAddNewScope()91 void WIEquipSettings::slotAddNewScope()
92 {
93     EquipmentWriter equipmentdlg;
94     equipmentdlg.loadEquipment();
95     equipmentdlg.exec();
96 
97     populateScopeListWidget(); //Reload scope list widget
98 }
99 
setAperture()100 void WIEquipSettings::setAperture()
101 {
102     double telAperture  = INVALID_APERTURE;
103     double binoAperture = INVALID_APERTURE;
104 
105     if (kcfg_TelescopeCheck->isChecked() && ScopeListWidget->selectedItems().isEmpty() == false)
106         telAperture = ScopeListWidget->currentItem()->data(Aperture).toDouble();
107     if (kcfg_BinocularsCheck->isChecked())
108         binoAperture = kcfg_BinocularsAperture->value();
109     m_Aperture = telAperture > binoAperture ? telAperture : binoAperture;
110 
111     // JM 2016-05-11: This is way over-complicated
112     /*
113     if (ScopeListWidget->count() == 0)
114     {
115         if (Options::binocularsCheck()z)
116         {
117             m_Aperture = kcfg_BinocularsAperture->value();
118             return;
119         }
120         else
121         {
122             m_Aperture = INVALID_APERTURE;
123             return;
124         }
125     }
126 
127     if (!Options::telescopeCheck() && !Options::binocularsCheck())
128     {
129         m_Aperture = INVALID_APERTURE;
130     }
131     else if (!Options::telescopeCheck())    //No telescope available, but binoculars available
132     {
133         m_Aperture = kcfg_BinocularsAperture->value();
134     }
135     else if (!Options::binocularsCheck())   //No binoculars available, but telescope available
136     {
137         if (ScopeListWidget->count() == 0)
138         {
139                 m_Aperture = INVALID_APERTURE;
140                 return;
141         }
142         else
143             m_Aperture = ScopeListWidget->currentItem()->data(Aperture).toDouble();
144     }
145     else                                    //Both Telescope and Binoculars available
146     {
147         if (ScopeListWidget->count() == 0)
148         {
149             m_Aperture = kcfg_BinocularsAperture->value();
150             return;
151         }
152         //If both Binoculars and Telescope available then select bigger aperture
153         double telAperture = ScopeListWidget->currentItem()->data(Aperture).toDouble();
154         double binoAperture = kcfg_BinocularsAperture->value();
155         m_Aperture = telAperture > binoAperture ? telAperture : binoAperture;
156     }*/
157 }
158