7#include "capturedeviceadaptor.h"
9#include "ksmessagebox.h"
11#include "indi/indistd.h"
12#include "ekos_capture_debug.h"
13#include "sequencejobstate.h"
15#include "indi/indicamera.h"
16#include "indi/indidustcap.h"
17#include "indi/indidome.h"
18#include "indi/indilightbox.h"
19#include "indi/indimount.h"
20#include "indi/indirotator.h"
21#include "ekos/auxiliary/rotatorutils.h"
22#include "ksnotification.h"
28void CaptureDeviceAdaptor::connectDome(SequenceJobState *state)
33 connect(state, &SequenceJobState::setDomeParked,
this, &CaptureDeviceAdaptor::setDomeParked);
34 connect(
this, &CaptureDeviceAdaptor::domeStatusChanged, state, &SequenceJobState::domeStatusChanged);
37void CaptureDeviceAdaptor::disconnectDome(SequenceJobState *state)
42 disconnect(state, &SequenceJobState::setDomeParked,
this, &CaptureDeviceAdaptor::setDomeParked);
43 disconnect(
this, &CaptureDeviceAdaptor::domeStatusChanged, state, &SequenceJobState::domeStatusChanged);
46void CaptureDeviceAdaptor::setCurrentSequenceJobState(QSharedPointer<SequenceJobState> jobState)
49 disconnectDevices(currentSequenceJobState.data());
51 connectRotator(jobState.
data());
52 connectFilterManager(jobState.
data());
53 connectActiveCamera(jobState.
data());
54 connectMount(jobState.
data());
55 connectDome(jobState.
data());
56 connectDustCap(jobState.
data());
57 currentSequenceJobState = jobState;
61void CaptureDeviceAdaptor::setDustCap(ISD::DustCap *device)
63 disconnectDustCap(currentSequenceJobState.data());
64 m_ActiveDustCap = device;
65 connectDustCap(currentSequenceJobState.data());
68void CaptureDeviceAdaptor::disconnectDevices(SequenceJobState *state)
70 disconnectRotator(state);
71 disconnectFilterManager(state);
72 disconnectActiveCamera(state);
73 disconnectMount(state);
74 disconnectDome(state);
75 disconnectDustCap(state);
82void CaptureDeviceAdaptor::connectDustCap(SequenceJobState *state)
84 if (m_ActiveDustCap !=
nullptr)
85 connect(m_ActiveDustCap, &ISD::DustCap::newStatus,
this, &CaptureDeviceAdaptor::dustCapStatusChanged);
90 connect(state, &SequenceJobState::askManualScopeCover,
this, &CaptureDeviceAdaptor::askManualScopeCover);
91 connect(state, &SequenceJobState::askManualScopeOpen,
this, &CaptureDeviceAdaptor::askManualScopeOpen);
92 connect(state, &SequenceJobState::setLightBoxLight,
this, &CaptureDeviceAdaptor::setLightBoxLight);
93 connect(state, &SequenceJobState::parkDustCap,
this, &CaptureDeviceAdaptor::parkDustCap);
95 connect(
this, &CaptureDeviceAdaptor::manualScopeCoverUpdated, state, &SequenceJobState::updateManualScopeCover);
96 connect(
this, &CaptureDeviceAdaptor::lightBoxLight, state, &SequenceJobState::lightBoxLight);
97 connect(
this, &CaptureDeviceAdaptor::dustCapStatusChanged, state, &SequenceJobState::dustCapStateChanged);
100void CaptureDeviceAdaptor::disconnectDustCap(SequenceJobState *state)
102 if (m_ActiveDustCap !=
nullptr)
103 disconnect(m_ActiveDustCap,
nullptr,
this,
nullptr);
105 if (state ==
nullptr)
108 disconnect(state, &SequenceJobState::askManualScopeCover,
this, &CaptureDeviceAdaptor::askManualScopeCover);
109 disconnect(state, &SequenceJobState::askManualScopeOpen,
this, &CaptureDeviceAdaptor::askManualScopeOpen);
110 disconnect(state, &SequenceJobState::setLightBoxLight,
this, &CaptureDeviceAdaptor::setLightBoxLight);
111 disconnect(state, &SequenceJobState::parkDustCap,
this, &CaptureDeviceAdaptor::parkDustCap);
113 disconnect(
this, &CaptureDeviceAdaptor::manualScopeCoverUpdated, state, &SequenceJobState::updateManualScopeCover);
114 disconnect(
this, &CaptureDeviceAdaptor::lightBoxLight, state, &SequenceJobState::lightBoxLight);
115 disconnect(
this, &CaptureDeviceAdaptor::dustCapStatusChanged, state, &SequenceJobState::dustCapStateChanged);
118void CaptureDeviceAdaptor::setMount(ISD::Mount *device)
120 if (m_ActiveMount == device)
124 if (m_ActiveMount !=
nullptr)
126 disconnect(m_ActiveMount,
nullptr,
this,
nullptr);
127 disconnectMount(currentSequenceJobState.data());
130 if (device !=
nullptr)
133 connect(device, &ISD::Mount::pierSideChanged,
this, &CaptureDeviceAdaptor::pierSideChanged);
134 connect(device, &ISD::Mount::newParkStatus,
this, &CaptureDeviceAdaptor::scopeParkStatusChanged);
135 connectMount(currentSequenceJobState.data());
138 emit pierSideChanged(device->pierSide());
139 emit scopeParkStatusChanged(device->parkStatus());
142 m_ActiveMount = device;
145void CaptureDeviceAdaptor::connectMount(SequenceJobState *state)
147 if (state ==
nullptr)
150 connect(state, &SequenceJobState::slewTelescope,
this, &CaptureDeviceAdaptor::slewTelescope);
151 connect(state, &SequenceJobState::setScopeTracking,
this, &CaptureDeviceAdaptor::setScopeTracking);
152 connect(state, &SequenceJobState::readCurrentMountParkState,
this, &CaptureDeviceAdaptor::readCurrentMountParkState);
153 connect(state, &SequenceJobState::setScopeParked,
this, &CaptureDeviceAdaptor::setScopeParked);
155 connect(
this, &CaptureDeviceAdaptor::scopeStatusChanged, state, &SequenceJobState::scopeStatusChanged);
156 connect(
this, &CaptureDeviceAdaptor::scopeParkStatusChanged, state, &SequenceJobState::scopeParkStatusChanged);
159void CaptureDeviceAdaptor::disconnectMount(SequenceJobState *state)
161 if (state ==
nullptr)
164 disconnect(state, &SequenceJobState::slewTelescope,
this, &CaptureDeviceAdaptor::slewTelescope);
165 disconnect(state, &SequenceJobState::setScopeTracking,
this, &CaptureDeviceAdaptor::setScopeTracking);
166 disconnect(state, &SequenceJobState::setScopeParked,
this, &CaptureDeviceAdaptor::setScopeParked);
168 disconnect(
this, &CaptureDeviceAdaptor::scopeStatusChanged, state, &SequenceJobState::scopeStatusChanged);
169 disconnect(
this, &CaptureDeviceAdaptor::scopeParkStatusChanged, state, &SequenceJobState::scopeParkStatusChanged);
172void CaptureDeviceAdaptor::setDome(ISD::Dome *device)
174 if (m_ActiveDome == device)
178 if (m_ActiveDome !=
nullptr)
180 disconnect(m_ActiveDome,
nullptr,
this,
nullptr);
181 disconnectDome(currentSequenceJobState.data());
184 if (device !=
nullptr)
186 connect(device, &ISD::Dome::newStatus,
this, &CaptureDeviceAdaptor::domeStatusChanged);
187 connectDome(currentSequenceJobState.data());
190 m_ActiveDome = device;
193void CaptureDeviceAdaptor::setRotator(ISD::Rotator *device)
196 if ((m_ActiveRotator == device) && (device !=
nullptr))
200 if (m_ActiveRotator !=
nullptr)
202 m_ActiveRotator->disconnect(
this);
203 disconnectRotator(currentSequenceJobState.data());
206 m_ActiveRotator = device;
209 if (m_ActiveRotator !=
nullptr)
211 connect(m_ActiveRotator, &ISD::Rotator::newAbsoluteAngle,
this, &CaptureDeviceAdaptor::newRotatorAngle,
213 connect(m_ActiveRotator, &ISD::Rotator::reverseToggled,
this, &CaptureDeviceAdaptor::rotatorReverseToggled,
215 connectRotator(currentSequenceJobState.data());
217 emit newRotator(device->getDeviceName());
224void CaptureDeviceAdaptor::connectRotator(SequenceJobState *state)
226 if (state ==
nullptr)
229 connect(
this, &CaptureDeviceAdaptor::newRotatorAngle, state, &SequenceJobState::setCurrentRotatorPositionAngle,
231 connect(state, &SequenceJobState::setRotatorAngle,
this, &CaptureDeviceAdaptor::setRotatorAngle);
234void CaptureDeviceAdaptor::disconnectRotator(SequenceJobState *state)
236 if (state ==
nullptr)
239 disconnect(state, &SequenceJobState::setRotatorAngle,
this, &CaptureDeviceAdaptor::setRotatorAngle);
240 disconnect(
this, &CaptureDeviceAdaptor::newRotatorAngle, state, &SequenceJobState::setCurrentRotatorPositionAngle);
243void CaptureDeviceAdaptor::setRotatorAngle(
double rawAngle)
245 if (m_ActiveRotator !=
nullptr && m_ActiveRotator->setAbsoluteAngle(rawAngle))
247 RotatorUtils::Instance()->initTimeFrame(rawAngle);
248 qCInfo(KSTARS_EKOS_CAPTURE) <<
"Setting rotator angle to" << rawAngle <<
"degrees.";
251 qCWarning(KSTARS_EKOS_CAPTURE) <<
"Setting rotator angle to " << rawAngle
252 <<
"failed due to missing or unresponsive rotator.";
255double CaptureDeviceAdaptor::getRotatorAngle()
257 if (m_ActiveRotator !=
nullptr)
258 return m_ActiveRotator->absoluteAngle();
263IPState CaptureDeviceAdaptor::getRotatorAngleState()
265 if (m_ActiveRotator !=
nullptr)
266 return m_ActiveRotator->absoluteAngleState();
271void CaptureDeviceAdaptor::reverseRotator(
bool toggled)
273 if (m_ActiveRotator !=
nullptr)
275 m_ActiveRotator->setReversed(toggled);
276 m_ActiveRotator->setConfig(SAVE_CONFIG);
280void CaptureDeviceAdaptor::readRotatorAngle()
282 if (m_ActiveRotator !=
nullptr)
283 emit newRotatorAngle(m_ActiveRotator->absoluteAngle(), m_ActiveRotator->absoluteAngleState());
288void CaptureDeviceAdaptor::setActiveCamera(ISD::Camera *device)
290 if (m_ActiveCamera == device)
294 if (m_ActiveCamera !=
nullptr)
296 m_ActiveCamera->disconnect(
this);
297 disconnectActiveCamera(currentSequenceJobState.data());
302 m_ActiveCamera = device;
305 if (m_ActiveCamera !=
nullptr)
308 connect(m_ActiveCamera, &ISD::Camera::newTemperatureValue,
this,
310 connect(m_ActiveCamera, &ISD::ConcreteDevice::Connected,
this, [
this]()
312 emit CameraConnected(
true);
314 connect(m_ActiveCamera, &ISD::ConcreteDevice::Disconnected,
this, [
this]()
316 emit CameraConnected(
false);
319 if (m_ActiveCamera->hasGuideHead())
320 addGuideHead(device);
322 connectActiveCamera(currentSequenceJobState.data());
325 emit newCamera(device ==
nullptr ?
"" : device->getDeviceName());
328void CaptureDeviceAdaptor::setFilterWheel(ISD::FilterWheel *device)
330 if (m_ActiveFilterWheel == device)
334 if (m_ActiveFilterWheel !=
nullptr)
335 m_ActiveFilterWheel->disconnect(
this);
338 m_ActiveFilterWheel = device;
341 if (m_ActiveFilterWheel !=
nullptr)
343 connect(m_ActiveFilterWheel, &ISD::ConcreteDevice::Connected,
this, [
this]()
345 emit FilterWheelConnected(
true);
347 connect(m_ActiveFilterWheel, &ISD::ConcreteDevice::Disconnected,
this, [
this]()
349 emit FilterWheelConnected(
false);
354 emit newFilterWheel(device ==
nullptr ?
"" : device->getDeviceName());
357void CaptureDeviceAdaptor::connectActiveCamera(SequenceJobState *state)
359 if (state ==
nullptr)
363 connect(state, &SequenceJobState::setCCDTemperature,
this, &CaptureDeviceAdaptor::setCCDTemperature);
364 connect(state, &SequenceJobState::setCCDBatchMode,
this, &CaptureDeviceAdaptor::enableCCDBatchMode);
365 connect(state, &SequenceJobState::queryHasShutter,
this, &CaptureDeviceAdaptor::queryHasShutter);
368 connect(
this, &CaptureDeviceAdaptor::flatSyncFocusChanged, state, &SequenceJobState::flatSyncFocusChanged);
369 connect(
this, &CaptureDeviceAdaptor::hasShutter, state, &SequenceJobState::hasShutter);
370 connect(
this, &CaptureDeviceAdaptor::newCCDTemperatureValue, state, &SequenceJobState::setCurrentCCDTemperature,
374void CaptureDeviceAdaptor::disconnectActiveCamera(SequenceJobState *state)
376 if (state ==
nullptr)
379 disconnect(state, &SequenceJobState::setCCDTemperature,
this, &CaptureDeviceAdaptor::setCCDTemperature);
380 disconnect(state, &SequenceJobState::setCCDBatchMode,
this, &CaptureDeviceAdaptor::enableCCDBatchMode);
381 disconnect(state, &SequenceJobState::queryHasShutter,
this, &CaptureDeviceAdaptor::queryHasShutter);
383 disconnect(
this, &CaptureDeviceAdaptor::flatSyncFocusChanged, state, &SequenceJobState::flatSyncFocusChanged);
384 disconnect(
this, &CaptureDeviceAdaptor::hasShutter, state, &SequenceJobState::hasShutter);
385 disconnect(
this, &CaptureDeviceAdaptor::newCCDTemperatureValue, state, &SequenceJobState::setCurrentCCDTemperature);
388void CaptureDeviceAdaptor::connectFilterManager(SequenceJobState *state)
390 if (state ==
nullptr)
393 connect(state, &SequenceJobState::changeFilterPosition,
this, &CaptureDeviceAdaptor::setFilterPosition);
394 connect(state, &SequenceJobState::readFilterPosition,
this, &CaptureDeviceAdaptor::updateFilterPosition);
400 if (m_FilterManager.isNull() ==
false)
401 connect(m_FilterManager.get(), &FilterManager::newStatus, state, &SequenceJobState::setFilterStatus);
404void CaptureDeviceAdaptor::disconnectFilterManager(SequenceJobState *state)
406 if (state ==
nullptr)
409 disconnect(state, &SequenceJobState::readFilterPosition,
this, &CaptureDeviceAdaptor::updateFilterPosition);
410 disconnect(state, &SequenceJobState::changeFilterPosition,
this, &CaptureDeviceAdaptor::setFilterPosition);
411 disconnect(
this, &CaptureDeviceAdaptor::filterIdChanged, state, &SequenceJobState::setCurrentFilterID);
413 if (m_FilterManager.isNull() ==
false)
414 disconnect(m_FilterManager.get(), &FilterManager::newStatus, state, &SequenceJobState::setFilterStatus);
417void Ekos::CaptureDeviceAdaptor::updateFilterPosition()
419 if (m_FilterManager.isNull())
421 qCritical(KSTARS_EKOS_CAPTURE) <<
"Filter manager is not initialized yet. Filter wheel missing from train?";
422 KSNotification::event(QLatin1String(
"CaptureFailed"),
i18n(
"Filter manager is not initilized yet. Filter wheel missing from train?"), KSNotification::Capture, KSNotification::Alert);
423 emit filterIdChanged(-1);
426 emit filterIdChanged(m_FilterManager->getFilterPosition());
429void Ekos::CaptureDeviceAdaptor::setFilterChangeFailed()
431 qWarning(KSTARS_EKOS_CAPTURE) <<
"Failed to change filter wheel to target position!";
432 emit filterIdChanged(-1);
435void CaptureDeviceAdaptor::readCurrentState(
CaptureState state)
440 if (m_ActiveCamera !=
nullptr)
442 double currentTemperature;
443 m_ActiveCamera->getTemperature(¤tTemperature);
444 emit newCCDTemperatureValue(currentTemperature);
455 qWarning(KSTARS_EKOS_CAPTURE) <<
"Reading device state " << state <<
" not implemented!";
460void CaptureDeviceAdaptor::readCurrentMountParkState()
462 if (m_ActiveMount !=
nullptr)
463 emit scopeParkStatusChanged(m_ActiveMount->parkStatus());
466void CaptureDeviceAdaptor::setCCDTemperature(
double temp)
468 if (m_ActiveCamera !=
nullptr)
469 m_ActiveCamera->setTemperature(temp);
472void CaptureDeviceAdaptor::enableCCDBatchMode(
bool enable)
474 if (m_ActiveChip !=
nullptr)
475 m_ActiveChip->setBatchMode(enable);
478void CaptureDeviceAdaptor::abortFastExposure()
480 if (m_ActiveCamera !=
nullptr && m_ActiveChip !=
nullptr && m_ActiveCamera->isFastExposureEnabled())
481 m_ActiveChip->abortExposure();
484double CaptureDeviceAdaptor::cameraGain(QMap<QString, QMap<QString, QVariant> > propertyMap)
486 if (getActiveCamera())
490 return propertyMap[
"CCD_GAIN"].value(
"GAIN", -1).toDouble();
491 else if (getActiveCamera()->
getProperty(
"CCD_CONTROLS"))
492 return propertyMap[
"CCD_CONTROLS"].value(
"Gain", -1).toDouble();
497 if (propertyMap.keys().contains(
"CCD_GAIN"))
498 return propertyMap[
"CCD_GAIN"].value(
"GAIN", -1).toDouble();
499 else if(propertyMap.keys().contains(
"CCD_CONTROLS"))
500 return propertyMap[
"CCD_CONTROLS"].value(
"Gain", -1).toDouble();
508double CaptureDeviceAdaptor::cameraGain()
510 double value = INVALID_VALUE;
511 if (getActiveCamera() !=
nullptr)
512 getActiveCamera()->getGain(&value);
517double CaptureDeviceAdaptor::cameraOffset(QMap<QString, QMap<QString, QVariant> > propertyMap)
519 if (getActiveCamera())
522 return propertyMap[
"CCD_OFFSET"].value(
"OFFSET", -1).toDouble();
523 else if (getActiveCamera()->
getProperty(
"CCD_CONTROLS"))
524 return propertyMap[
"CCD_CONTROLS"].value(
"Offset", -1).toDouble();
529 if (propertyMap.keys().contains(
"CCD_OFFSET"))
530 return propertyMap[
"CCD_OFFSET"].value(
"OFFSET", -1).toDouble();
531 else if(propertyMap.keys().contains(
"CCD_CONTROLS"))
532 return propertyMap[
"CCD_CONTROLS"].value(
"Offset", -1).toDouble();
537double CaptureDeviceAdaptor::cameraOffset()
539 double value = INVALID_VALUE;
540 if (getActiveCamera() !=
nullptr)
541 getActiveCamera()->getOffset(&value);
546double CaptureDeviceAdaptor::cameraTemperature()
548 double value = INVALID_VALUE;
549 if (getActiveCamera() !=
nullptr)
550 getActiveCamera()->getTemperature(&value);
555void CaptureDeviceAdaptor::setFilterPosition(
int targetFilterPosition, FilterManager::FilterPolicy policy)
557 if (m_FilterManager.isNull() ==
false && m_ActiveFilterWheel !=
nullptr)
558 m_FilterManager->setFilterPosition(targetFilterPosition, policy);
561void CaptureDeviceAdaptor::clearFilterManager()
563 m_FilterManager.clear();
566void CaptureDeviceAdaptor::setFilterManager(
const QSharedPointer<FilterManager> &device)
569 if (m_FilterManager == device)
573 if (m_FilterManager.isNull() ==
false)
575 disconnect(m_FilterManager.get(), &FilterManager::ready,
this, &CaptureDeviceAdaptor::updateFilterPosition);
576 disconnectFilterManager(currentSequenceJobState.data());
579 if (device.
isNull() ==
false)
581 connect(device.
get(), &FilterManager::ready,
this, &CaptureDeviceAdaptor::updateFilterPosition);
582 connectFilterManager(currentSequenceJobState.data());
585 m_FilterManager = device;
588void CaptureDeviceAdaptor::askManualScopeCover(QString question, QString title,
bool light)
591 if (light && m_ManualLightCoveringAsked ==
true)
593 emit manualScopeCoverUpdated(
true,
true,
true);
596 else if (!light && m_ManualDarkCoveringAsked ==
true)
598 emit manualScopeCoverUpdated(
true,
true,
false);
605 emit manualScopeCoverUpdated(
true,
true, light);
607 m_ManualLightCoveringAsked =
false;
608 m_ManualLightOpeningAsked =
false;
609 m_ManualDarkCoveringAsked =
false;
610 m_ManualDarkOpeningAsked =
false;
612 m_ManualLightCoveringAsked =
true;
614 m_ManualDarkCoveringAsked =
true;
621 m_ManualLightCoveringAsked =
false;
623 m_ManualDarkCoveringAsked =
false;
625 emit manualScopeCoverUpdated(
true,
false, light);
629 KSMessageBox::Instance()->warningContinueCancel(question, title, Options::manualCoverTimeout());
633void CaptureDeviceAdaptor::askManualScopeOpen(
bool light)
636 if (light && m_ManualLightOpeningAsked ==
true)
638 emit manualScopeCoverUpdated(
false,
true,
true);
641 else if (!light && m_ManualDarkOpeningAsked ==
true)
643 emit manualScopeCoverUpdated(
false,
true,
false);
650 m_ManualLightCoveringAsked =
false;
651 m_ManualLightOpeningAsked =
false;
652 m_ManualDarkCoveringAsked =
false;
653 m_ManualDarkOpeningAsked =
false;
656 m_ManualLightOpeningAsked =
true;
658 m_ManualDarkOpeningAsked =
true;
660 emit manualScopeCoverUpdated(
false,
true, light);
668 m_ManualLightOpeningAsked =
false;
670 m_ManualDarkOpeningAsked =
false;
671 emit manualScopeCoverUpdated(
false,
false, light);
675 KSMessageBox::Instance()->warningContinueCancel(
i18n(
"Remove cover from the telescope in order to continue."),
676 i18n(
"Telescope Covered"), Options::manualCoverTimeout());
680void CaptureDeviceAdaptor::setLightBoxLight(
bool on)
682 m_ActiveLightBox->setLightEnabled(on);
683 emit lightBoxLight(on);
686void CaptureDeviceAdaptor::parkDustCap(
bool park)
690 if (m_ActiveDustCap->park())
691 emit dustCapStatusChanged(ISD::DustCap::CAP_PARKING);
693 emit dustCapStatusChanged(ISD::DustCap::CAP_ERROR);
695 else if (m_ActiveDustCap->unpark())
696 emit dustCapStatusChanged(ISD::DustCap::CAP_UNPARKING);
698 emit dustCapStatusChanged(ISD::DustCap::CAP_ERROR);
701void CaptureDeviceAdaptor::slewTelescope(SkyPoint &target)
703 if (m_ActiveMount !=
nullptr)
705 m_ActiveMount->Slew(&target);
706 emit scopeStatusChanged(ISD::Mount::MOUNT_SLEWING);
710void CaptureDeviceAdaptor::setScopeTracking(
bool on)
712 if (m_ActiveMount !=
nullptr)
714 m_ActiveMount->setTrackEnabled(on);
715 emit scopeStatusChanged(on ? ISD::Mount::MOUNT_TRACKING : ISD::Mount::MOUNT_IDLE);
719void CaptureDeviceAdaptor::setScopeParked(
bool parked)
721 if (m_ActiveMount !=
nullptr)
725 if (m_ActiveMount->park())
726 emit scopeStatusChanged(ISD::Mount::MOUNT_PARKING);
728 emit scopeStatusChanged(ISD::Mount::MOUNT_ERROR);
732 if (m_ActiveMount->unpark() ==
false)
733 emit scopeStatusChanged(ISD::Mount::MOUNT_ERROR);
738void CaptureDeviceAdaptor::setDomeParked(
bool parked)
740 if (m_ActiveDome !=
nullptr)
744 if (m_ActiveDome->park())
745 emit domeStatusChanged(ISD::Dome::DOME_PARKING);
747 emit domeStatusChanged(ISD::Dome::DOME_ERROR);
751 if (m_ActiveDome->unpark() ==
false)
752 emit domeStatusChanged(ISD::Dome::DOME_ERROR);
758void CaptureDeviceAdaptor::flatSyncFocus(
int targetFilterID)
760 if (getFilterManager()->syncAbsoluteFocusPosition(targetFilterID - 1))
761 emit flatSyncFocusChanged(
true);
763 emit flatSyncFocusChanged(
false);
766void CaptureDeviceAdaptor::queryHasShutter()
768 if (m_ActiveCamera ==
nullptr)
770 emit hasShutter(
false);
773 QStringList shutterfulCCDs = Options::shutterfulCCDs();
774 QStringList shutterlessCCDs = Options::shutterlessCCDs();
775 QString deviceName = m_ActiveCamera->getDeviceName();
777 bool shutterFound = shutterfulCCDs.
contains(deviceName);
779 bool noShutterFound = shutterlessCCDs.
contains(deviceName);
781 if (shutterFound ==
true)
782 emit hasShutter(
true);
783 else if (noShutterFound ==
true)
784 emit hasShutter(
false);
788 QString deviceName = m_ActiveCamera->getDeviceName();
793 QStringList shutterfulCCDs = Options::shutterfulCCDs();
794 shutterfulCCDs.
append(m_ActiveCamera->getDeviceName());
795 Options::setShutterfulCCDs(shutterfulCCDs);
796 emit hasShutter(
true);
802 QStringList shutterlessCCDs = Options::shutterlessCCDs();
803 shutterlessCCDs.
append(m_ActiveCamera->getDeviceName());
804 Options::setShutterlessCCDs(shutterlessCCDs);
805 emit hasShutter(
false);
808 KSMessageBox::Instance()->questionYesNo(
i18n(
"Does %1 have a shutter?", deviceName),
809 i18n(
"Dark Exposure"));
void newStatus(ISD::Mount::Status status)
Change in the mount status.
QString i18n(const char *text, const TYPE &arg...)
Ekos is an advanced Astrophotography tool for Linux.
CaptureState
Capture states.
@ CAPTURE_SETTING_ROTATOR
@ CAPTURE_SETTING_TEMPERATURE
QCA_EXPORT QVariant getProperty(const QString &name)
void append(QList< T > &&value)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
bool disconnect(const QMetaObject::Connection &connection)
bool isNull() const const
bool contains(QLatin1StringView str, Qt::CaseSensitivity cs) const const