11#include "ui_calibrationoptions.h"
12#include "capturetypes.h"
13#include "customproperties.h"
14#include "rotatorsettings.h"
15#include "sequencejob.h"
21enum JobTableColumnIndex
23 JOBTABLE_COL_STATUS = 0,
40class CaptureDeviceAdaptor;
47class Camera :
public QWidget,
public Ui::Camera
54 explicit Camera(
int id = 0,
bool standAlone =
false,
QWidget *
parent =
nullptr);
56 explicit Camera(
bool standAlone =
false,
QWidget *
parent =
nullptr);
65 void setGain(
double value);
68 void setOffset(
double value);
75 void setRotator(QString name);
85 void addDSLRInfo(
const QString &model, uint32_t maxW, uint32_t maxH,
double pixelW,
double pixelH);
147 void toggleSequence();
153 void toggleVideo(
bool enabled);
160 void restartCamera(
const QString &name);
165 void capturePreview();
175 void generateDarkFlats();
181 void updateDownloadProgress(
double downloadTimeLeft,
const QString &devicename);
183 void updateCaptureCountDown(
int deltaMillis);
195 SequenceJob *createJob(SequenceJob::SequenceJobType jobtype = SequenceJob::JOBTYPE_BATCH,
196 FilenamePreviewType filenamePreview = FILENAME_NOT_PREVIEW);
221 void setMaximumGuidingDeviation(
bool enable,
double value);
228 void setInSequenceFocus(
bool enable,
double HFR);
235 bool loadSequenceQueue(
const QString &fileURL, QString targetName =
"");
241 bool saveSequenceQueue(
const QString &path);
251 void clearSequenceQueue();
254 void loadSequenceQueue();
255 void saveSequenceQueue();
256 void saveSequenceQueueAs();
258 QVariantMap getAllSettings()
const;
259 void setAllSettings(
const QVariantMap &settings,
const QVariantMap *standAloneSettings =
nullptr);
264 void setupOpticalTrainManager();
265 void refreshOpticalTrain();
268 QString opticalTrain()
const
270 return opticalTrainCombo->currentText();
276 void selectOpticalTrain(QString name);
279 void storeTrainKey(
const QString &key,
const QStringList &list);
280 void storeTrainKeyString(
const QString &key,
const QString &str);
285 void setupFilterManager();
286 void clearFilterManager();
291 void refreshFilterSettings();
293 const QSharedPointer<FilterManager> &filterManager()
const
295 return m_FilterManager;
301 void updateCurrentFilterPosition();
307 void setFilterWheel(QString name);
316 QSharedPointer<CaptureDeviceAdaptor> devices()
318 return m_DeviceAdaptor;
321 QSharedPointer<CameraProcess> process()
323 return m_cameraProcess;
327 QSharedPointer<CameraState> state()
const
329 return m_cameraState;
333 SequenceJob *activeJob()
const
335 return state()->getActiveJob();
339 ISD::Camera *activeCamera();
344 QJsonObject currentScope();
349 double currentReducer();
355 double currentAperture();
357 void setForceTemperature(
bool enabled)
359 cameraTemperatureS->setChecked(
enabled);
363 void updateMeridianFlipStage(MeridianFlipState::MFStage stage);
369 void openExposureCalculatorDialog();
372 void handleScriptsManager();
377 void showTemperatureRegulation();
379 void createDSLRDialog();
382 void showObserverDialog();
392 void onStandAloneShow(QShowEvent*
event);
394 bool m_standAlone {
false};
395 void setStandAloneGain(
double value);
396 void setStandAloneOffset(
double value);
398 CustomProperties *customPropertiesDialog()
const
400 return m_customPropertiesDialog.get();
411 void setObserverName(
const QString &value)
413 state()->setObserverName(value);
416 QString getObserverName()
418 return state()->observerName();
421 QVariantMap &settings()
425 void setSettings(
const QVariantMap &newSettings)
427 m_settings = newSettings;
438 void requestAction(
int cameraID, CaptureWorkflowActionType action);
439 void refreshCamera(uint
id,
bool isValid);
440 void newExposureProgress(SequenceJob *job,
const QString &trainname);
441 void newDownloadProgress(
double,
const QString &trainname);
442 void newImage(SequenceJob *job,
const QSharedPointer<FITSData> &data,
const QString &trainname);
443 void captureTarget(QString targetName);
444 void captureComplete(
const QVariantMap &metadata,
const QString &trainname);
445 void resetNonGuidedDither();
446 void runAutoFocus(AutofocusReason autofocusReason,
const QString &reasonInfo,
const QString &trainname);
447 void resetFocusFrame(
const QString &trainname);
448 void abortFocus(
const QString &trainname);
449 void adaptiveFocus(
const QString &trainname);
450 void settingsUpdated(
const QVariantMap &settings);
451 void sequenceChanged(
const QJsonArray &sequence);
452 void newLocalPreview(
const QString &preview);
453 void dslrInfoRequested(
const QString &cameraName);
454 void filterManagerUpdated(ISD::FilterWheel *device);
455 void newFilterStatus(FilterState state);
457 void newLog(
const QString &text);
460 void captureStarting(
double exposureSeconds,
const QString &filter);
461 void captureAborted(
double exposureSeconds);
464 void checkFocus(
double,
const QString &trainname);
465 void meridianFlipStarted(
const QString &trainname);
466 void guideAfterMeridianFlip();
467 void newStatus(
CaptureState status,
const QString &devicename,
int cameraID);
468 void suspendGuiding();
469 void resumeGuiding();
470 void driverTimedout(
const QString &deviceName);
477 void setVideoStreamEnabled(
bool enabled);
480 void setCoolerToggled(
bool enabled);
483 void setFilterStatus(FilterState filterState);
487 bool selectJob(QModelIndex i);
488 void editJob(QModelIndex i);
489 void resetJobEdit(
bool cancelled =
false);
501 void updateRotatorAngle(
double value);
502 void setRotatorReversed(
bool toggled);
508 void updateCCDTemperature(
double value);
514 void setFocusStatus(FocusState newstate);
519 void updateFocusStatus(FocusState newstate);
525 void focusAdaptiveComplete(
bool success)
528 state()->updateAdaptiveFocusState(success);
535 void updateCamera(
bool isValid);
540 void refreshCameraSettings();
546 void processCameraNumber(INDI::Property prop);
552 void updateTargetDistance(
double targetDiff);
567 void addJob(SequenceJob *job);
591 Q_INVOKABLE void processingFITSfinished(
bool success);
611 void jobPrepared(SequenceJob *job);
616 void setTargetName(
const QString &newTargetName);
621 void checkFrameType(
int index);
628 void updateStartButtons(
bool start,
bool pause =
false);
630 void setBusy(
bool enable);
644 void updateJobTable(SequenceJob *job,
bool full =
false);
649 void updateJobFromUI(SequenceJob *job, FilenamePreviewType filenamePreview = FILENAME_NOT_PREVIEW);
654 void syncGUIToJob(SequenceJob *job);
656 void syncCameraInfo();
659 void createNewJobTableRow(SequenceJob *job);
664 void updateRowStyle(SequenceJob *job);
670 void updateCellStyle(QTableWidgetItem *cell,
bool active);
679 bool syncControl(
const QVariantMap &settings,
const QString &key,
QWidget * widget);
684 void moveJob(
bool up);
687 void removeJobFromQueue();
689 void saveFITSDirectory();
694 void updateCaptureFormats();
699 void updateHFRCheckAlgo();
704 void clearAutoFocusHFR();
707 void selectedJobChanged(QModelIndex current, QModelIndex previous);
710 void clearCameraConfiguration();
713 void editFilterName();
714 bool editFilterNameInternal(
const QStringList &labels, QStringList &newLabels);
716 void updateVideoDurationUnit();
724 void loadGlobalSettings();
729 void syncLimitSettings();
735 void settleSettings();
746 void connectSyncSettings();
750 void disconnectSyncSettings();
758 QString getCameraName()
760 return activeCamera() ==
nullptr ?
"" : activeCamera()->getDeviceName();
764 bool checkUploadPaths(FilenamePreviewType filenamePreview, SequenceJob *job);
767 QJsonObject createJsonJob(SequenceJob *job,
int currentRow);
772 bool isActiveJobPreview()
774 return state() && state()->isActiveJobPreview();
778 void generatePreviewFilename();
779 QString previewFilename(FilenamePreviewType previewType = FILENAME_LOCAL_PREVIEW);
782 void selectUploadMode(
int index);
783 void checkUploadMode(
int index);
788 void updateJobTableCountCell(SequenceJob *job, QTableWidgetItem *countCell);
790 void cullToDSLRLimits();
792 void resetFrameToZero();
797 void updateFrameProperties(
int reset = 0);
802 QSharedPointer<FilterManager> m_FilterManager;
803 std::unique_ptr<Ui::Limits> m_LimitsUI;
804 QPointer<QDialog> m_LimitsDialog;
805 std::unique_ptr<Ui::Calibration> m_CalibrationUI;
806 QPointer<QDialog> m_CalibrationDialog;
807 QPointer<ScriptsManager> m_scriptsManager;
808 QSharedPointer<RotatorSettings> m_RotatorControlPanel;
809 std::unique_ptr<DSLRInfo> m_DSLRInfoDialog;
814 void appendLogText(
const QString &text)
816 emit newLog(QString(
"[%1] ").arg(getCameraName()) + text);
823 QVariantMap m_settings;
824 QVariantMap m_GlobalSettings;
825 std::unique_ptr<CustomProperties> m_customPropertiesDialog;
826 QTimer m_DebounceTimer;
828 bool m_standAloneUseCcdGain {
true};
829 bool m_standAloneUseCcdOffset {
true};
830 bool m_JobUnderEdit {
false };
834 QSharedPointer<CaptureDeviceAdaptor> m_DeviceAdaptor;
835 QSharedPointer<CameraProcess> m_cameraProcess;
836 QSharedPointer<CameraState> m_cameraState;
839 double GainSpinSpecialValue { INVALID_VALUE };
840 double OffsetSpinSpecialValue { INVALID_VALUE };
The CameraProcess class holds the entire business logic to control capturing execution.
Captures single or sequence of images from a CCD.
Ekos is an advanced Astrophotography tool for Linux.
CaptureState
Capture states.
QObject * parent() const const