From kde-commits Sat Sep 30 19:55:52 2017 From: Jasem Mutlaq Date: Sat, 30 Sep 2017 19:55:52 +0000 To: kde-commits Subject: [kstars/filtermanager] kstars/ekos/align: Migrate Alignment module to Filter Manager Message-Id: X-MARC-Message: https://marc.info/?l=kde-commits&m=150680278026551 Git commit 87d13980c9cc8f62b29b14874bc99bdfc7438c27 by Jasem Mutlaq. Committed on 30/09/2017 at 19:53. Pushed by mutlaqja into branch 'filtermanager'. Migrate Alignment module to Filter Manager M +76 -91 kstars/ekos/align/align.cpp M +7 -4 kstars/ekos/align/align.h M +1 -1 kstars/ekos/align/align.ui https://commits.kde.org/kstars/87d13980c9cc8f62b29b14874bc99bdfc7438c27 diff --git a/kstars/ekos/align/align.cpp b/kstars/ekos/align/align.cpp index fd7789bff..4db94679a 100644 --- a/kstars/ekos/align/align.cpp +++ b/kstars/ekos/align/align.cpp @@ -101,19 +101,18 @@ Align::Align() connect(correctAzB, SIGNAL(clicked()), this, SLOT(correctAzError())); connect(loadSlewB, SIGNAL(clicked()), this, SLOT(loadAndSlew())); = - FilterCaptureCombo->addItem("--"); - connect(FilterCaptureCombo, static_cast(&QComboBox::activated), + FilterDevicesCombo->addItem("--"); + connect(FilterDevicesCombo, static_cast(&QComboBox::activated), [=3D](const QString &text) { Options::setDefaultAlignFW(text); }); = - connect(FilterCaptureCombo, SIGNAL(activated(int)), this, SLOT(checkFi= lter(int))); + connect(FilterDevicesCombo, SIGNAL(activated(int)), this, SLOT(checkFi= lter(int))); = connect(FilterPosCombo, static_cast(&QComboBo= x::activated), [=3D](int index) { - lockedFilterIndex =3D index; Options::setLockAlignFilterIndex(index); } ); @@ -2352,13 +2351,19 @@ bool Align::captureAndSolve() return false; } = - if (currentFilter !=3D nullptr && lockedFilterIndex !=3D -1) + if (currentFilter !=3D nullptr) { - if (lockedFilterIndex !=3D currentFilterIndex) + if (currentFilter->isConnected() =3D=3D false) + { + appendLogText(i18n("Error: Lost connection to filter wheel.")); + return false; + } + + if (FilterPosCombo->currentIndex()+1 !=3D currentFilterPosition) { - int lockedFilterPosition =3D lockedFilterIndex + 1; filterPositionPending =3D true; - currentFilter->runCommand(INDI_SET_FILTER, &lockedFilterPositi= on); + int targetPosition =3D FilterPosCombo->currentIndex() + 1; + filterManager->setFilterPosition(targetPosition); return true; } } @@ -4073,27 +4078,27 @@ void Align::addFilter(ISD::GDInterface *newFilter) } = FilterCaptureLabel->setEnabled(true); - FilterCaptureCombo->setEnabled(true); + FilterDevicesCombo->setEnabled(true); FilterPosLabel->setEnabled(true); FilterPosCombo->setEnabled(true); = - FilterCaptureCombo->addItem(newFilter->getDeviceName()); + FilterDevicesCombo->addItem(newFilter->getDeviceName()); = Filters.append(static_cast(newFilter)); = checkFilter(1); = - FilterCaptureCombo->setCurrentIndex(1); + FilterDevicesCombo->setCurrentIndex(1); } = bool Align::setFilter(QString device, int filterSlot) { bool deviceFound =3D false; = - for (int i =3D 0; i < FilterCaptureCombo->count(); i++) - if (device =3D=3D FilterCaptureCombo->itemText(i)) + for (int i =3D 0; i < FilterDevicesCombo->count(); i++) + if (device =3D=3D FilterDevicesCombo->itemText(i)) { - FilterCaptureCombo->setCurrentIndex(i); + FilterDevicesCombo->setCurrentIndex(i); deviceFound =3D true; break; } @@ -4101,8 +4106,8 @@ bool Align::setFilter(QString device, int filterSlot) if (deviceFound =3D=3D false) return false; = - if (filterSlot >=3D0 && filterSlot < FilterCaptureCombo->count()) - FilterCaptureCombo->setCurrentIndex(filterSlot); + if (filterSlot >=3D0 && filterSlot < FilterDevicesCombo->count()) + FilterDevicesCombo->setCurrentIndex(filterSlot); = return true; } @@ -4111,101 +4116,32 @@ void Align::checkFilter(int filterNum) { if (filterNum =3D=3D -1) { - filterNum =3D FilterCaptureCombo->currentIndex(); + filterNum =3D FilterDevicesCombo->currentIndex(); if (filterNum =3D=3D -1) return; } = + // "--" is no filter if (filterNum =3D=3D 0) { currentFilter =3D nullptr; - currentFilterIndex=3D-1; + currentFilterPosition=3D-1; FilterPosCombo->clear(); - //syncFilterInfo(); return; } = - QStringList filterAlias =3D Options::filterAlias(); - if (filterNum <=3D Filters.count()) currentFilter =3D Filters.at(filterNum-1); = FilterPosCombo->clear(); = - ITextVectorProperty *filterName =3D currentFilter->getBaseDevice()->ge= tText("FILTER_NAME"); - INumberVectorProperty *filterSlot =3D currentFilter->getBaseDevice()->= getNumber("FILTER_SLOT"); - - if (filterSlot =3D=3D nullptr) - { - KMessageBox::error(0, i18n("Unable to find FILTER_SLOT property in= driver %1", - currentFilter->getBaseDevice()->getDevi= ceName())); - return; - } - - currentFilterIndex =3D filterSlot->np[0].value - 1; + FilterPosCombo->addItems(filterManager->getFilterLabels()); = - for (int i =3D 0; i < filterSlot->np[0].max; i++) - { - QString item; + currentFilterPosition =3D filterManager->getFilterPosition(); = - if (filterName !=3D nullptr && (i < filterName->ntp)) - item =3D filterName->tp[i].text; - else if (i < filterAlias.count() && filterAlias[i].isEmpty() =3D= =3D false) - item =3D filterAlias.at(i); - else - item =3D QString("Filter_%1").arg(i + 1); - - FilterPosCombo->addItem(item); - } - - if (lockedFilterIndex < 0) - lockedFilterIndex =3D Options::lockAlignFilterIndex(); - FilterPosCombo->setCurrentIndex(lockedFilterIndex); - - // If we are waiting to change the filter wheel, let's check if the co= ndition is now met. - if (filterPositionPending) - { - if (lockedFilterIndex =3D=3D currentFilterIndex) - { - filterPositionPending =3D false; - captureAndSolve(); - } - } + FilterPosCombo->setCurrentIndex(currentFilterPosition-1); } = -/*void Align::setLockedFilter(ISD::GDInterface *filter, int lockedPosition) -{ - currentFilter =3D filter; - if (currentFilter) - { - lockedFilterIndex =3D lockedPosition; - - INumberVectorProperty *filterSlot =3D filter->getBaseDevice()->get= Number("FILTER_SLOT"); - if (filterSlot) - currentFilterIndex =3D filterSlot->np[0].value - 1; - - connect(currentFilter, SIGNAL(numberUpdated(INumberVectorProperty*= )), this, - SLOT(processFilterNumber(INumberVectorProperty*)), Qt::Uni= queConnection); - } -}*/ - -/*void Align::processFilterNumber(INumberVectorProperty *nvp) -{ - if (currentFilter && !strcmp(nvp->name, "FILTER_SLOT") && !strcmp(nvp-= >device, currentFilter->getDeviceName())) - { - currentFilterIndex =3D nvp->np[0].value - 1; - - if (filterPositionPending) - { - if (currentFilterIndex =3D=3D lockedFilterIndex) - { - filterPositionPending =3D false; - captureAndSolve(); - } - } - } -}*/ - void Align::setWCSEnabled(bool enable) { if (currentCCD =3D=3D nullptr) @@ -5192,4 +5128,53 @@ void Align::refreshAlignOptions() alignTimer.setInterval(Options::astrometryTimeout() * 1000); } = +void Align::setFilterManager(const QSharedPointer &manager) +{ + filterManager =3D manager; + + connect(filterManager.data(), &FilterManager::ready, [this]() + { + if (filterPositionPending) + { + filterPositionPending =3D false; + captureAndSolve(); + } + } + ); + + connect(filterManager.data(), &FilterManager::failed, [this]() + { + appendLogText(i18n("Filter operation failed.")); + abort(); + } + ); + + connect(filterManager.data(), &FilterManager::newStatus, [this](Ekos::= FilterState filterState) + { + if (filterPositionPending) + { + 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...", FilterP= osCombo->itemText(filterManager->getTargetFilterPosition()-1))); + break; + + case FILTER_AUTOFOCUS: + appendLogText(i18n("Auto focus on filter change...")); + break; + + default: + break; + } + } + }); + + connect(filterManager.data(), &FilterManager::labelsChanged, this, [th= is]() { checkFilter(); }); + connect(filterManager.data(), &FilterManager::positionChanged, this, [= this]() { checkFilter();}); +} + } diff --git a/kstars/ekos/align/align.h b/kstars/ekos/align/align.h index d605260ec..482e38f29 100644 --- a/kstars/ekos/align/align.h +++ b/kstars/ekos/align/align.h @@ -16,6 +16,7 @@ #include "indi/indistd.h" #include "indi/inditelescope.h" #include "indi/indidome.h" +#include "ekos/auxiliary/filtermanager.h" = #include #include @@ -261,6 +262,8 @@ class Align : public QWidget, public Ui::Align */ void getFOVScale(double &fov_w, double &fov_h, double &fov_scale); = + void setFilterManager(const QSharedPointer &manager); + /** * @brief generateOptions Generate astrometry.net option given the= supplied map * @param optionsMap List of key=3Dvalue pairs for all astrometry.= net options @@ -364,8 +367,6 @@ class Align : public QWidget, public Ui::Align */ void syncTelescopeInfo(); = - //void setLockedFilter(ISD::GDInterface *filter, int lockedPosition); - void setFocusStatus(Ekos::FocusState state); = // Log @@ -633,8 +634,7 @@ class Align : public QWidget, public Ui::Align ISD::GDInterface *currentFilter { nullptr }; /// They're generic GDInterface because they could be either ISD::CCD = or ISD::Filter QList Filters; - int lockedFilterIndex { -1 }; - int currentFilterIndex { -1 }; + int currentFilterPosition { -1 }; /// True if we need to change filter position and wait for result befo= re continuing capture bool filterPositionPending { false }; = @@ -727,5 +727,8 @@ class Align : public QWidget, public Ui::Align = double primaryFL =3D -1, primaryAperture =3D -1, guideFL =3D -1, guide= Aperture =3D -1; bool domeReady =3D true; + + // Filter Manager + QSharedPointer filterManager; }; } diff --git a/kstars/ekos/align/align.ui b/kstars/ekos/align/align.ui index b0ed89af6..6bd0e769b 100644 --- a/kstars/ekos/align/align.ui +++ b/kstars/ekos/align/align.ui @@ -604,7 +604,7 @@ - +