1 /*
2     SPDX-FileCopyrightText: 2012 Jasem Mutlaq <mutlaqja@ikartech.com>
3     SPDX-FileCopyrightText: 2021 Wolfgang Reissenberger <sterne-jaeger@openfuture.de>
4 
5     SPDX-License-Identifier: GPL-2.0-or-later
6 */
7 
8 #include "focusmanager.h"
9 #include "kstarsdata.h"
10 #include "Options.h"
11 
12 namespace Ekos
13 {
FocusManager(QWidget * parent)14 FocusManager::FocusManager(QWidget * parent) : QWidget(parent)
15 {
16     setupUi(this);
17 }
18 
updateCurrentHFR(double newHFR)19 void FocusManager::updateCurrentHFR(double newHFR)
20 {
21     currentHFR->setText(QString("%1").arg(newHFR, 0, 'f', 2) + " px");
22     profilePlot->drawProfilePlot(newHFR);
23 }
24 
updateFocusDetailView()25 void FocusManager::updateFocusDetailView()
26 {
27     const int pos = focusDetailView->currentIndex();
28     if (pos == 1 && focusStarPixmap.get() != nullptr)
29     {
30         focusStarView->setPixmap(focusStarPixmap.get()->scaled(focusDetailView->width(), focusDetailView->height(),
31                                                                Qt::KeepAspectRatio, Qt::SmoothTransformation));
32     }
33 }
34 
stopAnimation()35 void FocusManager::stopAnimation()
36 {
37     if (focusPI->isAnimated())
38         focusPI->stopAnimation();
39 }
40 
updateFocusStarPixmap(QPixmap & starPixmap)41 void FocusManager::updateFocusStarPixmap(QPixmap &starPixmap)
42 {
43     if (starPixmap.isNull())
44         return;
45 
46     focusStarPixmap.reset(new QPixmap(starPixmap));
47     updateFocusDetailView();
48 }
49 
updateFocusStatus(Ekos::FocusState status)50 void FocusManager::updateFocusStatus(Ekos::FocusState status)
51 {
52     focusStatus->setText(Ekos::getFocusStatusString(status));
53 
54     if (status >= Ekos::FOCUS_PROGRESS)
55     {
56         focusPI->setColor(QColor(KStarsData::Instance()->colorScheme()->colorNamed("TargetColor")));
57         if (focusPI->isAnimated() == false)
58             focusPI->startAnimation();
59     }
60     else if (status == Ekos::FOCUS_COMPLETE && Options::enforceAutofocus())
61     {
62         focusPI->setColor(Qt::darkGreen);
63         if (focusPI->isAnimated() == false)
64             focusPI->startAnimation();
65     }
66     else
67     {
68         if (focusPI->isAnimated())
69             focusPI->stopAnimation();
70     }
71 }
72 
init(Focus * focusProcess)73 void FocusManager::init(Focus *focusProcess)
74 {
75 
76     // focus details buttons
77     connect(focusDetailNextButton, &QPushButton::clicked, [this]() {
78         const int pos = focusDetailView->currentIndex();
79         if (pos == 0 || (pos == 1 && focusStarPixmap.get() != nullptr))
80             focusDetailView->setCurrentIndex(pos+1);
81         else if (pos > 0)
82             focusDetailView->setCurrentIndex(0);
83         updateFocusDetailView();
84     });
85     connect(focusDetailPrevButton, &QPushButton::clicked, [this]() {
86         const int pos = focusDetailView->currentIndex();
87         if (pos == 0 && focusStarPixmap.get() != nullptr)
88             focusDetailView->setCurrentIndex(pos+2);
89         else if (pos == 0)
90             focusDetailView->setCurrentIndex(pos+1);
91         else if (pos > 0)
92             focusDetailView->setCurrentIndex(pos-1);
93         updateFocusDetailView();
94     });
95 
96     if (!focusPI)
97     {
98         focusPI = new QProgressIndicator(focusProcess);
99         focusTitleLayout->insertWidget(2, focusPI);
100     }
101 
102 }
103 
reset()104 void FocusManager::reset()
105 {
106     focusStatus->setText(i18n("Idle"));
107 
108     if (focusPI)
109         focusPI->stopAnimation();
110 }
111 
112 } // namespace Ekos
113