File indexing completed on 2024-04-28 03:43:41

0001 /*  Ekos Observatory Module
0002     SPDX-FileCopyrightText: Wolfgang Reissenberger <sterne-jaeger@t-online.de>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include "observatorydomemodel.h"
0010 #include "observatoryweathermodel.h"
0011 
0012 #include <QObject>
0013 
0014 namespace Ekos
0015 {
0016 
0017 struct ObservatoryStatusControl
0018 {
0019     bool useDome, useShutter, useWeather;
0020 };
0021 
0022 class ObservatoryModel : public QObject
0023 {
0024         Q_OBJECT
0025 
0026     public:
0027         ObservatoryModel();
0028 
0029         ObservatoryDomeModel *getDomeModel()
0030         {
0031             return mDomeModel;
0032         }
0033         ObservatoryWeatherModel *getWeatherModel()
0034         {
0035             return mWeatherModel;
0036         }
0037 
0038         void setDomeModel(ObservatoryDomeModel *model);
0039         void setWeatherModel(ObservatoryWeatherModel *model);
0040 
0041         /**
0042          * @brief Retrieve the settings that define, from which states the
0043          * "ready" state of the observatory is derived from.
0044          */
0045         ObservatoryStatusControl statusControl()
0046         {
0047             return mStatusControl;
0048         }
0049         void setStatusControl(ObservatoryStatusControl control);
0050 
0051         /**
0052          * @brief Is the observatory ready? This depends upon the states of the weather,
0053          * dome etc and upon whether these settings are relevant (see status control).
0054          */
0055         bool isReady();
0056 
0057     public slots:
0058         // call this slot in case that the weather or dome status has changed
0059         void updateStatus();
0060 
0061         /**
0062          * @brief Depending on the status control settings execute everything so
0063          * that the status reaches the state "READY".
0064          */
0065         void makeReady();
0066 
0067     signals:
0068         /**
0069          * @brief Signal a new observatory status
0070          * @param isReady
0071          */
0072         void newStatus(bool isReady);
0073 
0074 
0075     private:
0076         ObservatoryStatusControl mStatusControl;
0077 
0078         ObservatoryDomeModel *mDomeModel = nullptr;
0079         ObservatoryWeatherModel *mWeatherModel = nullptr;
0080 
0081 };
0082 
0083 }