7#include "opticaltrainmanager.h"
8#include <kstars_debug.h>
10#include "ksnotification.h"
11#include "kstarsdata.h"
14#include "indi/indilistener.h"
15#include "ekos/auxiliary/profilesettings.h"
16#include "oal/equipmentwriter.h"
19#include <QSqlTableModel>
20#include <QSqlDatabase>
23#include <basedevice.h>
30OpticalTrainManager *OpticalTrainManager::m_Instance =
nullptr;
35OpticalTrainManager *OpticalTrainManager::Instance()
37 if (m_Instance ==
nullptr)
38 m_Instance =
new OpticalTrainManager();
46void OpticalTrainManager::release()
55OpticalTrainManager::OpticalTrainManager() : QDialog(KStars::Instance())
65 emit configurationRequested(
false);
72 updateOpticalTrainValue(mountComboBox,
"mount");
79 updateOpticalTrainValue(dustCapComboBox,
"dustcap");
86 updateOpticalTrainValue(lightBoxComboBox,
"lightbox");
93 updateOpticalTrainValue(scopeComboBox,
"scope");
100 updateOpticalTrainValue(value,
"reducer");
107 updateOpticalTrainValue(rotatorComboBox,
"rotator");
114 updateOpticalTrainValue(focusComboBox,
"focuser");
121 updateOpticalTrainValue(filterComboBox,
"filterwheel");
128 updateOpticalTrainValue(cameraComboBox,
"camera");
135 updateOpticalTrainValue(guiderComboBox,
"guider");
140 addOpticalTrain(m_TrainNames.count(),
i18n(
"New Train"));
141 m_OpticalTrainsModel->select();
143 trainNamesList->setCurrentRow(trainNamesList->count() - 1);
144 selectOpticalTrain(trainNamesList->currentItem());
149 if (trainNamesList->currentItem() !=
nullptr)
151 removeOpticalTrain(trainNamesList->currentItem()->text());
152 removeB->setEnabled(
false);
161 writer->loadEquipment();
163 refreshOpticalElements();
168 selectOpticalTrain(item);
172 renameCurrentOpticalTrain(item->
text());
177 selectOpticalTrain(trainNamesList->currentItem());
180 m_CheckMissingDevicesTimer.setInterval(5000);
181 m_CheckMissingDevicesTimer.setSingleShot(
true);
184 m_DelegateTimer.setInterval(1000);
185 m_DelegateTimer.setSingleShot(
true);
189 setProfile(m_Profile);
198void OpticalTrainManager::initModel()
204 m_OpticalTrains.clear();
205 for (
int i = 0; i < m_OpticalTrainsModel->rowCount(); ++i)
207 QVariantMap recordMap;
208 QSqlRecord record = m_OpticalTrainsModel->record(i);
209 for (
int j = 0; j < record.
count(); j++)
212 m_OpticalTrains.append(recordMap);
215 m_TrainNames.clear();
216 for (
auto &oneTrain : m_OpticalTrains)
217 m_TrainNames << oneTrain[
"name"].toString();
219 trainNamesList->clear();
220 trainNamesList->addItems(m_TrainNames);
226void OpticalTrainManager::syncDevices()
228 syncDelegatesToDevices();
239void OpticalTrainManager::refreshModel()
242 m_TrainNames.clear();
243 for (
auto &oneTrain : m_OpticalTrains)
244 m_TrainNames << oneTrain[
"name"].toString();
246 trainNamesList->clear();
247 trainNamesList->addItems(m_TrainNames);
253void OpticalTrainManager::syncActiveDevices()
255 for (
auto &oneTrain : m_OpticalTrains)
257 auto train = oneTrain[
"name"].toString();
260 if (getGenericDevice(train, Mount, device))
261 syncActiveProperties(oneTrain, device);
262 if (getGenericDevice(train, Camera, device))
263 syncActiveProperties(oneTrain, device);
264 if (getGenericDevice(train, GuideVia, device))
265 syncActiveProperties(oneTrain, device);
266 if (getGenericDevice(train, Focuser, device))
267 syncActiveProperties(oneTrain, device);
268 if (getGenericDevice(train, FilterWheel, device))
269 syncActiveProperties(oneTrain, device);
270 if (getGenericDevice(train, Rotator, device))
271 syncActiveProperties(oneTrain, device);
272 if (getGenericDevice(train, DustCap, device))
273 syncActiveProperties(oneTrain, device);
274 if (getGenericDevice(train, LightBox, device))
275 syncActiveProperties(oneTrain, device);
280 if (!m_OpticalTrains.isEmpty())
282 auto name = m_OpticalTrains[0][
"name"].toString();
283 if (getGenericDevice(name, Dome, device))
284 syncActiveProperties(m_OpticalTrains[0], device);
285 if (getGenericDevice(name, Weather, device))
286 syncActiveProperties(m_OpticalTrains[0], device);
287 if (getGenericDevice(name, GPS, device))
288 syncActiveProperties(m_OpticalTrains[0], device);
297 auto tvp = device->getProperty(
"ACTIVE_DEVICES");
301 auto name = train[
"name"].toString();
303 for (
auto &it : *tvp.getText())
306 QString elementText = it.getText();
307 if (it.isNameMatch(
"ACTIVE_TELESCOPE"))
309 auto activeDevice = train[
"mount"].toString();
310 if (activeDevice ==
"--")
312 else if (activeDevice != elementText)
315 if (getGenericDevice(name, Mount, genericDevice))
316 devs.
append(genericDevice);
319 else if (it.isNameMatch(
"ACTIVE_DOME"))
321 devs = INDIListener::devicesByInterface(INDI::BaseDevice::DOME_INTERFACE);
323 else if (it.isNameMatch(
"ACTIVE_GPS"))
325 devs = INDIListener::devicesByInterface(INDI::BaseDevice::GPS_INTERFACE);
329 devs.
erase(std::remove_if(devs.
begin(), devs.
end(), [](
const auto & oneDevice)
331 return oneDevice->getDeviceName() != Options::locationSource() && oneDevice->getDeviceName() != Options::timeSource();
337 else if (it.isNameMatch(
"ACTIVE_ROTATOR"))
339 auto activeDevice = train[
"rotator"].toString();
340 if (activeDevice ==
"--")
342 else if (activeDevice != elementText)
345 if (getGenericDevice(name, Rotator, genericDevice))
346 devs.
append(genericDevice);
349 else if (it.isNameMatch(
"ACTIVE_FOCUSER"))
351 auto activeDevice = train[
"focuser"].toString();
352 if (activeDevice ==
"--")
354 else if (activeDevice != elementText)
357 if (getGenericDevice(name, Focuser, genericDevice))
358 devs.
append(genericDevice);
361 else if (it.isNameMatch(
"ACTIVE_FILTER"))
363 auto activeDevice = train[
"filterwheel"].toString();
364 if (activeDevice ==
"--")
366 else if (activeDevice != elementText)
369 if (getGenericDevice(name, FilterWheel, genericDevice))
370 devs.
append(genericDevice);
376 if (it.getText() != devs.
first()->getDeviceName())
378 it.setText(devs.
first()->getDeviceName().toLatin1().constData());
379 device->sendNewProperty(tvp.getText());
386 device->sendNewProperty(tvp.getText());
397 m_DelegateTimer.stop();
400 if (m_Profile != profile)
407 if (syncDelegatesToDevices())
409 m_CheckMissingDevicesTimer.start();
412 m_DelegateTimer.start();
418 checkOpticalTrains();
425void OpticalTrainManager::checkOpticalTrains()
427 if (m_OpticalTrains.empty())
429 generateOpticalTrains();
431 if (!m_OpticalTrains.empty())
433 auto primaryTrainID = m_OpticalTrains[0][
"id"].toUInt();
434 ProfileSettings::Instance()->setOneSetting(ProfileSettings::PrimaryOpticalTrain, primaryTrainID);
435 ProfileSettings::Instance()->setOneSetting(ProfileSettings::CaptureOpticalTrain, primaryTrainID);
436 ProfileSettings::Instance()->setOneSetting(ProfileSettings::FocusOpticalTrain, primaryTrainID);
437 ProfileSettings::Instance()->setOneSetting(ProfileSettings::MountOpticalTrain, primaryTrainID);
438 ProfileSettings::Instance()->setOneSetting(ProfileSettings::AlignOpticalTrain, primaryTrainID);
439 ProfileSettings::Instance()->setOneSetting(ProfileSettings::DarkLibraryOpticalTrain, primaryTrainID);
440 if (m_OpticalTrains.count() > 1)
441 ProfileSettings::Instance()->setOneSetting(ProfileSettings::GuideOpticalTrain, m_OpticalTrains[1][
"id"].toInt());
443 ProfileSettings::Instance()->setOneSetting(ProfileSettings::GuideOpticalTrain, primaryTrainID);
449 emit configurationRequested(
true);
453 m_CheckMissingDevicesTimer.start();
460void OpticalTrainManager::generateOpticalTrains()
463 addOpticalTrain(0,
i18n(
"Primary"));
465 if (cameraComboBox->count() > 2)
466 addOpticalTrain(1,
i18n(
"Secondary"));
468 if (cameraComboBox->count() > 3)
469 addOpticalTrain(2,
i18n(
"Tertiary"));
475QString OpticalTrainManager::addOpticalTrain(uint8_t index,
const QString &name)
478 train[
"profile"] = m_Profile->id;
479 train[
"name"] = uniqueTrainName(name);
481 train[
"mount"] = mountComboBox->itemText(mountComboBox->count() - 1);
482 train[
"dustcap"] = dustCapComboBox->itemText(dustCapComboBox->count() - 1);
483 train[
"lightbox"] = lightBoxComboBox->itemText(lightBoxComboBox->count() - 1);
484 train[
"reducer"] = 1.0;
485 train[
"rotator"] = rotatorComboBox->itemText(rotatorComboBox->count() - 1);
486 train[
"focuser"] = focusComboBox->itemText(focusComboBox->count() - 1);
487 train[
"filterwheel"] = filterComboBox->itemText(filterComboBox->count() - 1);
488 train[
"guider"] = guiderComboBox->itemText(guiderComboBox->count() - 1);
491 if (
KStars::Instance()->data()->userdb()->getLastOpticalElement(opticalElement))
492 train[
"scope"] = opticalElement[
"name"].toString();
494 train[
"camera"] =
"--";
496 if (index == 0 && cameraComboBox->count() > 1)
497 train[
"camera"] = cameraComboBox->itemText(1);
503 auto cameraIndex = index + 1;
504 if (cameraComboBox->count() >= cameraIndex)
505 train[
"camera"] = cameraComboBox->itemText(cameraIndex);
508 KStarsData::Instance()->userdb()->AddOpticalTrain(train);
509 return train[
"name"].toString();
515void OpticalTrainManager::addOpticalTrain(
const QJsonObject &value)
518 newTrain[
"profile"] = m_Profile->id;
519 KStarsData::Instance()->userdb()->AddOpticalTrain(newTrain);
527bool OpticalTrainManager::setOpticalTrainValue(
const QString &name,
const QString &field,
const QVariant &value)
529 for (
auto &oneTrain : m_OpticalTrains)
531 if (oneTrain[
"name"].
toString() == name)
534 if (oneTrain[field] == value)
538 oneTrain[field] = value;
539 KStarsData::Instance()->userdb()->UpdateOpticalTrain(oneTrain, oneTrain[
"id"].toInt());
551void OpticalTrainManager::renameCurrentOpticalTrain(
const QString &name)
553 if (m_CurrentOpticalTrain !=
nullptr && (*m_CurrentOpticalTrain)[
"name"] != name)
555 auto pos = trainNamesList->currentRow();
557 auto unique = uniqueTrainName(name);
559 setOpticalTrainValue((*m_CurrentOpticalTrain)[
"name"].
toString(),
"name", unique);
561 trainNamesList->currentItem()->setText(unique);
565 selectOpticalTrain(unique);
566 trainNamesList->setCurrentRow(pos);
573bool OpticalTrainManager::setOpticalTrain(
const QJsonObject &train)
575 auto oneOpticalTrain = getOpticalTrain(train[
"id"].toInt());
576 if (!oneOpticalTrain.empty())
578 KStarsData::Instance()->userdb()->UpdateOpticalTrain(train.
toVariantMap(), oneOpticalTrain[
"id"].toInt());
588bool OpticalTrainManager::removeOpticalTrain(
const QString &name)
590 for (
auto &oneTrain : m_OpticalTrains)
592 if (oneTrain[
"name"].
toString() == name)
594 auto id = oneTrain[
"id"].toInt();
595 KStarsData::Instance()->userdb()->DeleteOpticalTrain(
id);
596 KStarsData::Instance()->userdb()->DeleteOpticalTrainSettings(
id);
598 selectOpticalTrain(
nullptr);
609bool OpticalTrainManager::syncDelegatesToDevices()
611 auto changed =
false;
613 for (
auto &oneWidget : findChildren<QComboBox*>())
614 oneWidget->blockSignals(
true);
617 auto mounts = INDIListener::devicesByInterface(INDI::BaseDevice::TELESCOPE_INTERFACE);
619 for (
auto &oneMount : mounts)
620 values << oneMount->getDeviceName();
621 changed |= !values.
empty() && values != m_MountNames;
622 m_MountNames = values;
623 auto currentMount = mountComboBox->currentText();
624 mountComboBox->
clear();
625 mountComboBox->addItems(
QStringList() <<
"--" << values);
626 mountComboBox->setCurrentText(currentMount);
630 auto dustcaps = INDIListener::devicesByInterface(INDI::BaseDevice::DUSTCAP_INTERFACE);
631 for (
auto &oneCap : dustcaps)
632 values << oneCap->getDeviceName();
633 changed |= !values.
empty() && values != m_DustCapNames;
634 m_DustCapNames = values;
635 auto currentCap = dustCapComboBox->currentText();
636 dustCapComboBox->
clear();
637 dustCapComboBox->addItems(
QStringList() <<
"--" << values);
638 dustCapComboBox->setCurrentText(currentCap);
642 auto lightboxes = INDIListener::devicesByInterface(INDI::BaseDevice::LIGHTBOX_INTERFACE);
643 for (
auto &oneBox : lightboxes)
644 values << oneBox->getDeviceName();
645 changed |= !values.
empty() && values != m_LightBoxNames;
646 auto currentLightBox = lightBoxComboBox->currentText();
647 m_LightBoxNames = values;
648 lightBoxComboBox->
clear();
649 lightBoxComboBox->addItems(
QStringList() <<
"--" << values);
650 lightBoxComboBox->setCurrentText(currentLightBox);
654 changed |= !values.
empty() && values != m_ScopeNames;
655 m_ScopeNames = values;
656 auto currentScope = scopeComboBox->currentText();
657 scopeComboBox->
clear();
658 scopeComboBox->addItems(
QStringList() <<
"--" << values);
659 scopeComboBox->setCurrentText(currentScope);
663 auto rotators = INDIListener::devicesByInterface(INDI::BaseDevice::ROTATOR_INTERFACE);
664 for (
auto &oneRotator : rotators)
665 values << oneRotator->getDeviceName();
666 changed |= !values.
empty() && values != m_RotatorNames;
667 m_RotatorNames = values;
668 auto currentRotator = rotatorComboBox->currentText();
669 rotatorComboBox->
clear();
670 rotatorComboBox->addItems(
QStringList() <<
"--" << values);
671 rotatorComboBox->setCurrentText(currentRotator);
675 auto focusers = INDIListener::devicesByInterface(INDI::BaseDevice::FOCUSER_INTERFACE);
676 for (
auto &oneFocuser : focusers)
677 values << oneFocuser->getDeviceName();
678 changed |= !values.
empty() && values != m_FocuserNames;
679 m_FocuserNames = values;
680 auto currentFocuser = focusComboBox->currentText();
681 focusComboBox->
clear();
682 focusComboBox->addItems(
QStringList() <<
"--" << values);
683 focusComboBox->setCurrentText(currentFocuser);
687 auto filterwheels = INDIListener::devicesByInterface(INDI::BaseDevice::FILTER_INTERFACE);
688 for (
auto &oneFilterWheel : filterwheels)
689 values << oneFilterWheel->getDeviceName();
690 changed |= !values.
empty() && values != m_FilterWheelNames;
691 m_FilterWheelNames = values;
692 auto currentFilter = filterComboBox->currentText();
693 filterComboBox->
clear();
694 filterComboBox->addItems(
QStringList() <<
"--" << values);
695 filterComboBox->setCurrentText(currentFilter);
699 auto cameras = INDIListener::devicesByInterface(INDI::BaseDevice::CCD_INTERFACE);
700 for (
auto &oneCamera : cameras)
701 values << oneCamera->getDeviceName();
702 changed |= !values.
empty() && values != m_CameraNames;
703 m_CameraNames = values;
704 auto currentCamera = cameraComboBox->currentText();
705 cameraComboBox->
clear();
706 cameraComboBox->addItems(
QStringList() <<
"--" << values);
707 cameraComboBox->setCurrentText(currentCamera);
711 auto guiders = INDIListener::devicesByInterface(INDI::BaseDevice::GUIDER_INTERFACE);
712 for (
auto &oneGuider : guiders)
713 values << oneGuider->getDeviceName();
714 changed |= !values.
empty() && values != m_GuiderNames;
715 m_GuiderNames = values;
716 auto currentGuider = guiderComboBox->currentText();
717 guiderComboBox->
clear();
718 guiderComboBox->addItems(
QStringList() <<
"--" << values);
719 guiderComboBox->setCurrentText(currentGuider);
722 for (
auto &oneWidget : findChildren<QComboBox*>())
723 oneWidget->blockSignals(
false);
735 while (m_TrainNames.contains(result))
746 if (item !=
nullptr && selectOpticalTrain(item->
text()))
757QString OpticalTrainManager::findTrainContainingDevice(
const QString &name, Role role)
759 for (
auto &oneTrain : m_OpticalTrains)
761 auto train = oneTrain[
"name"].toString();
766 if (oneTrain[
"mount"].
toString() == name)
770 if (oneTrain[
"camera"].
toString() == name)
774 if (oneTrain[
"rotator"].
toString() == name)
778 if (oneTrain[
"guider"].
toString() == name)
782 if (oneTrain[
"dustcap"].
toString() == name)
786 if (oneTrain[
"scope"].
toString() == name)
790 if (oneTrain[
"filterwheel"].
toString() == name)
794 if (oneTrain[
"focuser"].
toString() == name)
798 if (oneTrain[
"reducer"].
toString() == name)
802 if (oneTrain[
"lightbox"].
toString() == name)
820bool OpticalTrainManager::selectOpticalTrain(
const QString &name)
822 for (
auto &oneTrain : m_OpticalTrains)
824 if (oneTrain[
"name"].
toString() == name)
826 m_Persistent =
false;
827 m_CurrentOpticalTrain = &oneTrain;
828 mountComboBox->setCurrentText(oneTrain[
"mount"].
toString());
829 dustCapComboBox->setCurrentText(oneTrain[
"dustcap"].
toString());
830 lightBoxComboBox->setCurrentText(oneTrain[
"lightbox"].
toString());
831 scopeComboBox->setCurrentText(oneTrain[
"scope"].
toString());
832 reducerSpinBox->setValue(oneTrain[
"reducer"].toDouble());
833 rotatorComboBox->setCurrentText(oneTrain[
"rotator"].
toString());
834 focusComboBox->setCurrentText(oneTrain[
"focuser"].
toString());
835 filterComboBox->setCurrentText(oneTrain[
"filterwheel"].
toString());
836 cameraComboBox->setCurrentText(oneTrain[
"camera"].
toString());
837 guiderComboBox->setCurrentText(oneTrain[
"guider"].
toString());
838 removeB->setEnabled(m_OpticalTrains.length() > 1);
839 trainConfigBox->setEnabled(
true);
846 m_Persistent =
false;
847 m_CurrentOpticalTrain =
nullptr;
848 mountComboBox->setCurrentText(
"--");
849 dustCapComboBox->setCurrentText(
"--");
850 lightBoxComboBox->setCurrentText(
"--");
851 scopeComboBox->setCurrentText(
"--");
852 reducerSpinBox->setValue(1.0);
853 rotatorComboBox->setCurrentText(
"--");
854 focusComboBox->setCurrentText(
"--");
855 filterComboBox->setCurrentText(
"--");
856 cameraComboBox->setCurrentText(
"--");
857 guiderComboBox->setCurrentText(
"--");
858 removeB->setEnabled(
false);
859 trainConfigBox->setEnabled(
false);
867void OpticalTrainManager::openEditor(
const QString &name)
869 selectOpticalTrain(name);
871 if (matches.
count() > 0)
872 trainNamesList->setCurrentItem(matches.
first());
873 emit configurationRequested(
true);
882 for (
auto &oneTrain : m_OpticalTrains)
884 if (oneTrain[
"name"].
toString() == train)
889 return INDIListener::findDevice(oneTrain[
"mount"].
toString(), generic);
891 return INDIListener::findDevice(oneTrain[
"camera"].
toString(), generic);
893 return INDIListener::findDevice(oneTrain[
"rotator"].
toString(), generic);
895 return INDIListener::findDevice(oneTrain[
"guider"].
toString(), generic);
897 return INDIListener::findDevice(oneTrain[
"dustcap"].
toString(), generic);
899 return INDIListener::findDevice(oneTrain[
"filterwheel"].
toString(), generic);
901 return INDIListener::findDevice(oneTrain[
"focuser"].
toString(), generic);
903 return INDIListener::findDevice(oneTrain[
"lightbox"].
toString(), generic);
906 auto devices = INDIListener::devicesByInterface(INDI::BaseDevice::DOME_INTERFACE);
907 if (!devices.empty())
909 generic = devices[0];
918 auto devices = INDIListener::devicesByInterface(INDI::BaseDevice::WEATHER_INTERFACE);
919 if (!devices.empty())
921 generic = devices[0];
930 auto devices = INDIListener::devicesByInterface(INDI::BaseDevice::GPS_INTERFACE);
931 if (!devices.empty())
933 generic = devices[0];
953 for (
auto &oneTrain : m_OpticalTrains)
955 if (oneTrain[
"name"].
toString() == name)
958 if (INDIListener::findDevice(oneTrain[
"mount"].
toString(), generic))
959 return generic->getMount();
971 for (
auto &oneTrain : m_OpticalTrains)
973 if (oneTrain[
"name"].
toString() == name)
976 if (INDIListener::findDevice(oneTrain[
"dustcap"].
toString(), generic))
977 return generic->getDustCap();
989 for (
auto &oneTrain : m_OpticalTrains)
991 if (oneTrain[
"name"].
toString() == name)
994 if (INDIListener::findDevice(oneTrain[
"lightbox"].
toString(), generic))
995 return generic->getLightBox();
1008 for (
auto &oneTrain : m_OpticalTrains)
1010 if (oneTrain[
"name"].
toString() == name)
1012 if (
KStars::Instance()->data()->userdb()->getOpticalElementByName(oneTrain[
"scope"].
toString(), oneOpticalElement))
1013 return oneOpticalElement;
1017 return oneOpticalElement;
1023double OpticalTrainManager::getReducer(
const QString &name)
1025 for (
auto &oneTrain : m_OpticalTrains)
1027 if (oneTrain[
"name"].
toString() == name)
1028 return oneTrain[
"reducer"].toDouble();
1039 for (
auto &oneTrain : m_OpticalTrains)
1041 if (oneTrain[
"name"].
toString() == name)
1044 if (INDIListener::findDevice(oneTrain[
"rotator"].
toString(), generic))
1045 return generic->getRotator();
1057 for (
auto &oneTrain : m_OpticalTrains)
1059 if (oneTrain[
"name"].
toString() == name)
1062 if (INDIListener::findDevice(oneTrain[
"focuser"].
toString(), generic))
1063 return generic->getFocuser();
1073ISD::FilterWheel *OpticalTrainManager::getFilterWheel(
const QString &name)
1075 for (
auto &oneTrain : m_OpticalTrains)
1077 if (oneTrain[
"name"].
toString() == name)
1080 if (INDIListener::findDevice(oneTrain[
"filterwheel"].
toString(), generic))
1081 return generic->getFilterWheel();
1093 for (
auto &oneTrain : m_OpticalTrains)
1095 if (oneTrain[
"name"].
toString() == name)
1098 if (INDIListener::findDevice(oneTrain[
"camera"].
toString(), generic))
1099 return generic->getCamera();
1109ISD::Guider *OpticalTrainManager::getGuider(
const QString &name)
1111 for (
auto &oneTrain : m_OpticalTrains)
1113 if (oneTrain[
"name"].
toString() == name)
1116 if (INDIListener::findDevice(oneTrain[
"guider"].
toString(), generic))
1117 return generic->getGuider();
1131 for (
auto &oneTrain : m_OpticalTrains)
1133 if (oneTrain[
"name"].
toString() == name)
1136 if (INDIListener::findDevice(oneTrain[
"adaptiveoptics"].
toString(), generic))
1137 return generic->getAdaptiveOptics();
1147const QVariantMap OpticalTrainManager::getOpticalTrain(uint8_t
id)
const
1149 for (
auto &oneTrain : m_OpticalTrains)
1151 if (oneTrain[
"id"].toInt() ==
id)
1155 return QVariantMap();
1161bool OpticalTrainManager::exists(uint8_t
id)
const
1163 for (
auto &oneTrain : m_OpticalTrains)
1165 if (oneTrain[
"id"].toInt() ==
id)
1175const QVariantMap OpticalTrainManager::getOpticalTrain(
const QString &name)
const
1177 for (
auto &oneTrain : m_OpticalTrains)
1179 if (oneTrain[
"name"].
toString() == name)
1183 return QVariantMap();
1189void OpticalTrainManager::refreshTrains()
1198void OpticalTrainManager::refreshOpticalElements()
1201 syncDelegatesToDevices();
1207int OpticalTrainManager::id(
const QString &name)
const
1209 for (
auto &oneTrain : m_OpticalTrains)
1211 if (oneTrain[
"name"].
toString() == name)
1212 return oneTrain[
"id"].toUInt();
1221QString OpticalTrainManager::name(
int id)
const
1223 for (
auto &oneTrain : m_OpticalTrains)
1225 if (oneTrain[
"id"].toInt() ==
id)
1226 return oneTrain[
"name"].toString();
1235void OpticalTrainManager::checkMissingDevices()
1238 auto devices = getMissingDevices();
1239 if (!devices.empty())
1241 if (devices.count() == 1)
1244 i18n(
"Missing device detected (%1). Please reconfigure the optical trains before proceeding any further.",
1246 KSNotification::General, KSNotification::Warn);
1251 i18n(
"Missing devices detected (%1). Please reconfigure the optical trains before proceeding any further.",
1252 devices.join(
", ")),
1253 KSNotification::General, KSNotification::Warn);
1257 emit configurationRequested(
true);
1264QStringList OpticalTrainManager::getMissingDevices()
const
1267 for (
auto &oneTrain : m_OpticalTrains)
1269 auto mount = oneTrain[
"mount"].toString();
1270 if (mount !=
"--" && m_MountNames.contains(mount) ==
false)
1273 auto camera = oneTrain[
"camera"].toString();
1274 if (camera !=
"--" && m_CameraNames.contains(camera) ==
false)
1277 auto dustcap = oneTrain[
"dustcap"].toString();
1278 if (dustcap !=
"--" && m_DustCapNames.contains(dustcap) ==
false)
1281 auto lightbox = oneTrain[
"lightbox"].toString();
1282 if (lightbox !=
"--" && m_LightBoxNames.contains(lightbox) ==
false)
1283 missing << lightbox;
1285 auto focuser = oneTrain[
"focuser"].toString();
1286 if (focuser !=
"--" && m_FocuserNames.contains(focuser) ==
false)
1289 auto filterwheel = oneTrain[
"filterwheel"].toString();
1290 if (filterwheel !=
"--" && m_FilterWheelNames.contains(filterwheel) ==
false)
1291 missing << filterwheel;
1293 auto guider = oneTrain[
"guider"].toString();
1294 if (guider !=
"--" && m_GuiderNames.contains(guider) ==
false)
1305void Ekos::OpticalTrainManager::updateOpticalTrainValue(
QComboBox *cb,
const QString &element)
1307 if (trainNamesList->currentItem() !=
nullptr && m_Persistent ==
true)
1308 setOpticalTrainValue(trainNamesList->currentItem()->text(), element, cb->
currentText());
1314void OpticalTrainManager::updateOpticalTrainValue(
double value,
const QString &element)
1316 if (trainNamesList->currentItem() !=
nullptr && m_Persistent ==
true)
1317 setOpticalTrainValue(trainNamesList->currentItem()->text(), element, value);
1324void OpticalTrainManager::reset()
1326 if (m_CurrentOpticalTrain !=
nullptr)
1328 auto id = m_CurrentOpticalTrain->value(
"id");
1329 auto name = m_CurrentOpticalTrain->value(
"name");
1330 int row = trainNamesList->currentRow();
1331 m_CurrentOpticalTrain->clear();
1333 m_CurrentOpticalTrain->insert(
"id",
id);
1334 m_CurrentOpticalTrain->insert(
"name", name);
1335 m_CurrentOpticalTrain->insert(
"mount",
"--");
1336 m_CurrentOpticalTrain->insert(
"camera",
"--");
1337 m_CurrentOpticalTrain->insert(
"rotator",
"--");
1338 m_CurrentOpticalTrain->insert(
"guider",
"--");
1339 m_CurrentOpticalTrain->insert(
"dustcap",
"--");
1340 m_CurrentOpticalTrain->insert(
"scope",
"--");
1341 m_CurrentOpticalTrain->insert(
"filterwheel",
"--");
1342 m_CurrentOpticalTrain->insert(
"focuser",
"--");
1343 m_CurrentOpticalTrain->insert(
"reducer", 1);
1344 m_CurrentOpticalTrain->insert(
"lightbox",
"--");
1348 selectOpticalTrain(name.toString());
1349 trainNamesList->setCurrentRow(row);
AdaptiveOptics class handles control of INDI AdaptiveOptics devices.
Camera class controls an INDI Camera device.
Handles operation of a remotely controlled dust cover cap.
Focuser class handles control of INDI focuser devices.
Handles operation of a remotely controlled light box.
device handle controlling Mounts.
Rotator class handles control of INDI Rotator devices.
bool GetOpticalTrains(uint32_t profileID, QList< QVariantMap > &opticalTrains)
Populate the reference passed with all optical trains.
bool UpdateOpticalTrain(const QVariantMap &oneTrain, int id)
Update an existing optical train.
static KStars * Instance()
KStarsData * data() const
Information on telescope used in observation.
QString i18n(const char *text, const TYPE &arg...)
char * toString(const EngineQuery &query)
Ekos is an advanced Astrophotography tool for Linux.
KIOCORE_EXPORT SimpleJob * mount(bool ro, const QByteArray &fstype, const QString &dev, const QString &point, JobFlags flags=DefaultFlags)
QString name(const QVariant &location)
void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QList< int > &roles)
void currentIndexChanged(int index)
void finished(int result)
void valueChanged(double d)
QVariantMap toVariantMap() const const
void append(QList< T > &&value)
qsizetype count() const const
iterator erase(const_iterator begin, const_iterator end)
bool isEmpty() const const
QString text() const const
QSqlDatabase database(const QString &connectionName, bool open)
QString fieldName(int index) const const
QVariant value(const QString &name) const const
QString arg(Args &&... args) const const
bool isEmpty() const const
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)