[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kstars/filtermanager] kstars/ekos/capture: Migrate Capture module to Filter Manager. All policies i
From: Jasem Mutlaq <null () kde ! org>
Date: 2017-09-30 19:55:52
Message-ID: E1dyNrc-0002Vj-RF () code ! kde ! org
[Download RAW message or body]
Git commit 81d9fb06f0f5d7527d9452028245f2d9700bc333 by Jasem Mutlaq.
Committed on 30/09/2017 at 19:54.
Pushed by mutlaqja into branch 'filtermanager'.
Migrate Capture module to Filter Manager. All policies including locked filter, \
offsets, and autofocus operations are applicable when changing filters
M +127 -73 kstars/ekos/capture/capture.cpp
M +6 -15 kstars/ekos/capture/capture.h
M +3 -3 kstars/ekos/capture/capture.ui
https://commits.kde.org/kstars/81d9fb06f0f5d7527d9452028245f2d9700bc333
diff --git a/kstars/ekos/capture/capture.cpp b/kstars/ekos/capture/capture.cpp
index 55d79286a..a60697785 100644
--- a/kstars/ekos/capture/capture.cpp
+++ b/kstars/ekos/capture/capture.cpp
@@ -78,7 +78,7 @@ Capture::Capture()
filterManagerB->setIcon(QIcon::fromTheme("view-filter", \
QIcon(":/icons/breeze/default/view-filter.svg"))); \
filterManagerB->setAttribute(Qt::WA_LayoutUsesWidgetRect);
- FilterCaptureCombo->addItem("--");
+ FilterDevicesCombo->addItem("--");
connect(binXIN, SIGNAL(valueChanged(int)), binYIN, SLOT(setValue(int)));
@@ -90,7 +90,7 @@ Capture::Capture()
guideDeviationTimer.setInterval(GD_TIMER_TIMEOUT);
connect(&guideDeviationTimer, SIGNAL(timeout()), this, \
SLOT(checkGuideDeviationTimeout()));
- connect(FilterCaptureCombo, SIGNAL(activated(int)), this, \
SLOT(checkFilter(int))); + connect(FilterDevicesCombo, SIGNAL(activated(int)), \
this, SLOT(checkFilter(int)));
connect(temperatureCheck, &QCheckBox::toggled, [this](bool toggled)
{
@@ -198,8 +198,8 @@ Capture::Capture()
targetADU = Options::calibrationADUValue();
targetADUTolerance = Options::calibrationADUValueTolerance();
- // Load FIlter Offets
- loadFilterOffsets();
+ // Load FIlter Offets
+ //loadFilterOffsets();
}
Capture::~Capture()
@@ -246,7 +246,7 @@ void Capture::addFilter(ISD::GDInterface *newFilter)
return;
}
- FilterCaptureCombo->addItem(newFilter->getDeviceName());
+ FilterDevicesCombo->addItem(newFilter->getDeviceName());
Filters.append(static_cast<ISD::Filter *>(newFilter));
@@ -254,7 +254,7 @@ void Capture::addFilter(ISD::GDInterface *newFilter)
checkFilter(1);
- FilterCaptureCombo->setCurrentIndex(1);
+ FilterDevicesCombo->setCurrentIndex(1);
}
void Capture::pause()
@@ -358,7 +358,7 @@ void Capture::start()
spikeDetected = false;
- // FIXME
+ // FIXME Migrate to Filter Manager
#if 0
lastFilterOffset = 0;
// lastFilterOffset should be set to the offset of the current used filter so \
that any subsequent filter change @@ -936,8 +936,8 @@ bool Capture::setFilter(QString \
device, int filterSlot) {
bool deviceFound = false;
- for (int i = 1; i < FilterCaptureCombo->count(); i++)
- if (device == FilterCaptureCombo->itemText(i))
+ for (int i = 1; i < FilterDevicesCombo->count(); i++)
+ if (device == FilterDevicesCombo->itemText(i))
{
checkFilter(i);
deviceFound = true;
@@ -947,8 +947,8 @@ bool Capture::setFilter(QString device, int filterSlot)
if (deviceFound == false)
return false;
- if (filterSlot < FilterCaptureCombo->count())
- FilterCaptureCombo->setCurrentIndex(filterSlot);
+ if (filterSlot < FilterDevicesCombo->count())
+ FilterDevicesCombo->setCurrentIndex(filterSlot);
return true;
}
@@ -957,7 +957,7 @@ void Capture::checkFilter(int filterNum)
{
if (filterNum == -1)
{
- filterNum = FilterCaptureCombo->currentIndex();
+ filterNum = FilterDevicesCombo->currentIndex();
if (filterNum == -1)
return;
}
@@ -1257,7 +1257,7 @@ bool Capture::resumeSequence()
// Otherwise, let's prepare for next exposure after making sure in-sequence \
focus and dithering are complete if applicable. else
{
- isAutoFocus = (autofocusCheck->isEnabled() && autofocusCheck->isChecked() && \
HFRPixels->value() > 0); + isAutoFocus = (autofocusCheck->isEnabled() && \
autofocusCheck->isChecked()/* && HFRPixels->value() > 0*/); if (isAutoFocus)
requiredAutoFocusStarted = false;
@@ -1315,7 +1315,10 @@ bool Capture::resumeSequence()
else if (isAutoFocus && activeJob->getFrameType() == FRAME_LIGHT)
{
secondsLabel->setText(i18n("Focusing..."));
- emit checkFocus(HFRPixels->value());
+ if (HFRPixels->value() == 0)
+ emit checkFocus(0.1);
+ else
+ emit checkFocus(HFRPixels->value());
qCDebug(KSTARS_EKOS_CAPTURE) << "In-sequence focusing started...";
@@ -1718,7 +1721,10 @@ bool Capture::addJob(bool preview)
if (jobUnderEdit)
job = jobs.at(queueTable->currentRow());
else
+ {
job = new SequenceJob();
+ job->setFilterManager(filterManager);
+ }
if (job == nullptr)
{
@@ -1790,6 +1796,8 @@ bool Capture::addJob(bool preview)
}
job->setFrame(frameXIN->value(), frameYIN->value(), frameWIN->value(), \
frameHIN->value()); + job->setRemoteDir(remoteDirIN->text());
+ job->setLocalDir(fitsDir->text());
if (jobUnderEdit == false)
{
@@ -1809,8 +1817,6 @@ bool Capture::addJob(bool preview)
if ((job->getFrameType() == FRAME_LIGHT || job->getFrameType() == FRAME_FLAT) && \
job->getFilterName().isEmpty() == false) directoryPostfix += QLatin1Literal("/") + \
job->getFilterName();
- job->setRemoteDir(remoteDirIN->text());
- job->setLocalDir(fitsDir->text());
job->setDirectoryPostfix(directoryPostfix);
int currentRow = 0;
@@ -2189,66 +2195,50 @@ void Capture::prepareJob(SequenceJob *job)
void Capture::preparePreCaptureActions()
{
+ // Update position
if (currentFilterPosition > 0)
- {
activeJob->setCurrentFilter(currentFilterPosition);
- if (currentFilterPosition != activeJob->getTargetFilter())
- {
- appendLogText(i18n("Changing filter to %1...", \
FilterPosCombo->itemText(activeJob->getTargetFilter() - 1)));
- secondsLabel->setText(i18n("Set filter..."));
-
- if (activeJob->isPreview() == false)
- {
- state = CAPTURE_CHANGING_FILTER;
- emit newStatus(Ekos::CAPTURE_CHANGING_FILTER);
- }
-
- setBusy(true);
- }
- }
-
+ // update temperature
if (currentCCD->hasCooler() && activeJob->getEnforceTemperature())
{
- if (activeJob->getCurrentTemperature() != INVALID_VALUE &&
- fabs(activeJob->getCurrentTemperature() - \
activeJob->getTargetTemperature()) >
- Options::maxTemperatureDiff())
- {
- appendLogText(i18n("Setting temperature to %1 C...", \
activeJob->getTargetTemperature()));
- secondsLabel->setText(i18n("Set %1 C...", \
activeJob->getTargetTemperature()));
-
- if (activeJob->isPreview() == false)
- {
- state = CAPTURE_SETTING_TEMPERATURE;
- emit newStatus(Ekos::CAPTURE_SETTING_TEMPERATURE);
- }
-
- setBusy(true);
- }
+ double temperature = 0;
+ currentCCD->getTemperature(&temperature);
+ activeJob->setCurrentTemperature(temperature);
}
+ // update rotator angle
if (currentRotator != nullptr && activeJob->getTargetRotation() != \
INVALID_VALUE)
- {
activeJob->setCurrentRotation(rotatorSettings->getCurrentRotationPA());
- if (rotatorSettings->getCurrentRotationPA() != \
activeJob->getTargetRotation())
- {
- appendLogText(i18n("Setting rotation to %1 degrees E of N...", \
activeJob->getTargetRotation()));
- secondsLabel->setText(i18n("Set Rotator %1...", \
activeJob->getTargetRotation())); + setBusy(true);
+ connect(activeJob, SIGNAL(prepareState(Ekos::CaptureState)), this, \
SLOT(updatePrepareState(Ekos::CaptureState))); + connect(activeJob, \
SIGNAL(prepareComplete()), this, SLOT(executeJob()));
- if (activeJob->isPreview() == false)
- {
- state = CAPTURE_SETTING_ROTATOR;
- emit newStatus(Ekos::CAPTURE_SETTING_ROTATOR);
- }
+ activeJob->prepareCapture();
+}
- setBusy(true);
- }
- }
+void Capture::updatePrepareState(Ekos::CaptureState prepareState)
+{
+ state = prepareState;
+ emit newStatus(prepareState);
- connect(activeJob, SIGNAL(prepareComplete()), this, SLOT(executeJob()));
+ switch (prepareState)
+ {
+ case CAPTURE_SETTING_TEMPERATURE:
+ appendLogText(i18n("Setting temperature to %1 C...", \
activeJob->getTargetTemperature())); + secondsLabel->setText(i18n("Set %1 \
C...", activeJob->getTargetTemperature())); + break;
- activeJob->prepareCapture();
+ case CAPTURE_SETTING_ROTATOR:
+ appendLogText(i18n("Setting rotation to %1 degrees E of N...", \
activeJob->getTargetRotation())); + secondsLabel->setText(i18n("Set Rotator \
%1...", activeJob->getTargetRotation())); + break;
+
+ default:
+ break;
+
+ }
}
void Capture::executeJob()
@@ -2426,7 +2416,7 @@ void Capture::setFocusStatus(FocusState state)
{
if (focusState == FOCUS_COMPLETE)
{
- HFRPixels->setValue(focusHFR + (focusHFR * 0.025));
+ //HFRPixels->setValue(focusHFR + (focusHFR * 0.025));
appendLogText(i18n("Focus complete."));
}
else if (focusState == FOCUS_FAILED)
@@ -2434,9 +2424,7 @@ void Capture::setFocusStatus(FocusState state)
appendLogText(i18n("Autofocus failed. Aborting exposure..."));
secondsLabel->setText("");
abort();
- }
-
- activeJob->setFilterPostFocusReady(focusState == FOCUS_COMPLETE);
+ }
return;
}
@@ -2638,7 +2626,7 @@ bool Capture::loadSequenceQueue(const QString &fileURL)
}
else if (!strcmp(tagXMLEle(ep), "FilterWheel"))
{
- FilterCaptureCombo->setCurrentText(pcdataXMLEle(ep));
+ FilterDevicesCombo->setCurrentText(pcdataXMLEle(ep));
checkFilter();
}
else
@@ -2959,7 +2947,7 @@ bool Capture::saveSequenceQueue(const QString &path)
if (observerName.isEmpty() == false)
outstream << "<Observer>" << observerName << "</Observer>" << endl;
outstream << "<CCD>" << CCDCaptureCombo->currentText() << "</CCD>" << endl;
- outstream << "<FilterWheel>" << FilterCaptureCombo->currentText() << \
"</FilterWheel>" << endl; + outstream << "<FilterWheel>" << \
FilterDevicesCombo->currentText() << "</FilterWheel>" << endl;
outstream << "<GuideDeviation enabled='" << (guideDeviationCheck->isChecked() ? \
"true" : "false") << "'>" << guideDeviation->value() << "</GuideDeviation>" << endl;
outstream << "<Autofocus enabled='" << (autofocusCheck->isChecked() ? "true" : \
"false") << "'>" @@ -3124,6 +3112,7 @@ void Capture::syncGUIToJob(SequenceJob *job)
uploadModeCombo->setCurrentIndex(job->getUploadMode());
remoteDirIN->setEnabled(uploadModeCombo->currentIndex() != 0);
remoteDirIN->setText(job->getRemoteDir());
+ fitsDir->setText(job->getLocalDir());
// Temperature Options
temperatureCheck->setChecked(job->getEnforceTemperature());
@@ -3139,9 +3128,7 @@ void Capture::syncGUIToJob(SequenceJob *job)
preDomePark = job->isPreDomePark();
// Custom Properties
- customPropertiesDialog->setCustomProperties(job->getCustomProperties());
-
- fitsDir->setText(job->getLocalDir());
+ customPropertiesDialog->setCustomProperties(job->getCustomProperties());
if (ISOCombo->isEnabled())
ISOCombo->setCurrentIndex(job->getISOIndex());
@@ -4486,8 +4473,10 @@ void Capture::postScriptFinished(int exitCode)
resumeSequence();
}
+// FIXME Migrate to Filter Manager
+#if 0
void Capture::loadFilterOffsets()
-{
+{
// Get all OAL equipment filter list
KStarsData::Instance()->userdb()->GetAllFilters(m_filterList);
filterFocusOffsets.clear();
@@ -4601,6 +4590,7 @@ void Capture::showFilterOffsetDialog()
}
}
}
+#endif
void Capture::toggleVideoStream(bool enable)
{
@@ -4738,7 +4728,71 @@ void Capture::setAlignResults(double orientation, double ra, \
double de, double p void Capture::setFilterManager(const \
QSharedPointer<FilterManager> &manager) {
filterManager = manager;
- connect(filterManagerB, SIGNAL(clicked()), filterManager.data(), SLOT(show()), \
Qt::UniqueConnection); + connect(filterManagerB, &QPushButton::clicked, [this]()
+ {
+ filterManager->show();
+ filterManager->raise();
+ });
+
+ connect(filterManager.data(), &FilterManager::ready, [this]()
+ {
+ currentFilterPosition = filterManager->getFilterPosition();
+ // Due to race condition,
+ focusState = FOCUS_IDLE;
+ if (activeJob)
+ activeJob->setCurrentFilter(currentFilterPosition);
+
+ }
+ );
+
+ connect(filterManager.data(), &FilterManager::failed, [this]()
+ {
+ if (activeJob)
+ {
+ appendLogText(i18n("Filter operation failed."));
+ abort();
+ }
+ }
+ );
+
+ connect(filterManager.data(), &FilterManager::newStatus, \
[this](Ekos::FilterState filterState) + {
+ if (state == CAPTURE_CHANGING_FILTER)
+ {
+ secondsLabel->setText(Ekos::getFilterStatusString(filterState));
+ switch (filterState)
+ {
+ case FILTER_OFFSET:
+ appendLogText(i18n("Changing focus offset by %1 steps...", \
filterManager->getTargetFilterOffset())); + break;
+
+ case FILTER_CHANGE:
+ appendLogText(i18n("Changing filter to %1...", \
FilterPosCombo->itemText(filterManager->getTargetFilterPosition()-1))); + \
break; +
+ case FILTER_AUTOFOCUS:
+ appendLogText(i18n("Auto focus on filter change..."));
+ clearAutoFocusHFR();
+ break;
+
+ default:
+ break;
+ }
+ }
+ });
+
+ connect(filterManager.data(), &FilterManager::labelsChanged, this, [this]()
+ {
+ FilterPosCombo->clear();
+ FilterPosCombo->addItems(filterManager->getFilterLabels());
+ currentFilterPosition = filterManager->getFilterPosition();
+ FilterPosCombo->setCurrentIndex(currentFilterPosition-1);
+ });
+ connect(filterManager.data(), &FilterManager::positionChanged, this, [this]()
+ {
+ currentFilterPosition = filterManager->getFilterPosition();
+ FilterPosCombo->setCurrentIndex(currentFilterPosition-1);
+ });
}
}
diff --git a/kstars/ekos/capture/capture.h b/kstars/ekos/capture/capture.h
index 4f9c167ab..7038c8143 100644
--- a/kstars/ekos/capture/capture.h
+++ b/kstars/ekos/capture/capture.h
@@ -453,7 +453,7 @@ class Capture : public QWidget, public Ui::Capture
// Auto Focus
//void updateAutofocusStatus(bool status, double HFR);
- void startPostFilterAutoFocus();
+ //void startPostFilterAutoFocus();
// Timed refocus
void startRefocusEveryNTimer();
@@ -476,8 +476,8 @@ class Capture : public QWidget, public Ui::Capture
void postScriptFinished(int exitCode);
// Filter focus offset
- void showFilterOffsetDialog();
- void loadFilterOffsets();
+ //void showFilterOffsetDialog();
+ //void loadFilterOffsets();
// Live Video Preview
void toggleVideoStream(bool enable);
@@ -486,6 +486,9 @@ class Capture : public QWidget, public Ui::Capture
// Observer
void showObserverDialog();
+ // Active Job Prepare State
+ void updatePrepareState(Ekos::CaptureState prepareState);
+
// Rotator
void updateRotatorNumber(INumberVectorProperty *nvp);
@@ -636,18 +639,6 @@ class Capture : public QWidget, public Ui::Capture
// How many images to capture before dithering operation is executed?
uint8_t ditherCounter { 0 };
- // Map of filter focus offsets
- struct FocusOffset
- {
- QString filter;
- int16_t offset { 0 };
- };
-
- QList<FocusOffset *> filterFocusOffsets;
- int16_t lastFilterOffset { 0 };
-
- QList<OAL::Filter *> m_filterList;
-
std::unique_ptr<CustomProperties> customPropertiesDialog;
// Filter Manager
diff --git a/kstars/ekos/capture/capture.ui b/kstars/ekos/capture/capture.ui
index 7100a8ef2..e3e3cd21e 100644
--- a/kstars/ekos/capture/capture.ui
+++ b/kstars/ekos/capture/capture.ui
@@ -154,7 +154,7 @@
</layout>
</item>
<item row="0" column="3">
- <widget class="QComboBox" name="FilterCaptureCombo">
+ <widget class="QComboBox" name="FilterDevicesCombo">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
@@ -182,7 +182,7 @@
</size>
</property>
<property name="toolTip">
- <string>Filter focus offsets</string>
+ <string>Filter Settings</string>
</property>
<property name="statusTip">
<string/>
@@ -1914,7 +1914,7 @@
</widget>
<tabstops>
<tabstop>CCDCaptureCombo</tabstop>
- <tabstop>FilterCaptureCombo</tabstop>
+ <tabstop>FilterDevicesCombo</tabstop>
<tabstop>filterManagerB</tabstop>
<tabstop>temperatureCheck</tabstop>
<tabstop>temperatureIN</tabstop>
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic