summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJasem Mutlaq <mutlaqja@ikarustech.com>2016-09-11 22:19:15 (GMT)
committerJasem Mutlaq <mutlaqja@ikarustech.com>2016-09-11 22:19:15 (GMT)
commit32fe363e0778a46112bb3da92b4c1e747acd915a (patch)
tree02f961a6552f54b695e513c7e1204e4dfe0efea3
parent81d59496252c1ffdc868cb6c227a2a37d8724407 (diff)
Reworked GUI, reduced clutter and darks are now taken from the Dark Library
-rw-r--r--kstars/ekos/align.cpp311
-rw-r--r--kstars/ekos/align.h61
-rw-r--r--kstars/ekos/align.ui889
-rw-r--r--kstars/org.kde.kstars.Ekos.Align.xml17
4 files changed, 509 insertions, 769 deletions
diff --git a/kstars/ekos/align.cpp b/kstars/ekos/align.cpp
index 9367858..c0c6bbd 100644
--- a/kstars/ekos/align.cpp
+++ b/kstars/ekos/align.cpp
@@ -14,6 +14,8 @@
#include "align.h"
#include "dms.h"
#include "fov.h"
+#include "darklibrary.h"
+
#include "Options.h"
#include <QFileDialog>
@@ -59,21 +61,18 @@ Align::Align()
currentCCD = NULL;
currentTelescope = NULL;
currentFilter = NULL;
- darkBuffer=NULL;
useGuideHead = false;
canSync = false;
loadSlewMode = false;
loadSlewState=IPS_IDLE;
m_isSolverComplete = false;
m_isSolverSuccessful = false;
- m_slewToTargetSelected=false;
+ m_slewToTargetSelected=false;
m_wcsSynced=false;
isFocusBusy=false;
- haveDarkFrame=false;
ccd_hor_pixel = ccd_ver_pixel = focal_length = aperture = sOrientation = sRA = sDEC = -1;
decDeviation = azDeviation = altDeviation = 0;
- calibrationState = CALIBRATE_NONE;
rememberUploadMode = ISD::CCD::UPLOAD_CLIENT;
currentFilter = NULL;
filterPositionPending = false;
@@ -105,15 +104,7 @@ Align::Align()
connect(correctAltB, SIGNAL(clicked()), this, SLOT(correctAltError()));
connect(correctAzB, SIGNAL(clicked()), this, SLOT(correctAzError()));
- connect(loadSlewB, SIGNAL(clicked()), this, SLOT(loadAndSlew()));
- connect(wcsCheck, SIGNAL(toggled(bool)), this, SLOT(setWCS(bool)));
-
- binXIN->setValue(Options::solverXBin());
- binYIN->setValue(Options::solverYBin());
- connect(binXIN, SIGNAL(valueChanged(int)), binYIN, SLOT(setValue(int)));
-
- kcfg_solverUpdateCoords->setChecked(Options::solverUpdateCoords());
- kcfg_solverPreview->setChecked(Options::solverPreview());
+ connect(loadSlewB, SIGNAL(clicked()), this, SLOT(loadAndSlew()));
unsigned int solverGotoOption = Options::solverGotoOption();
if (solverGotoOption == 0)
@@ -132,7 +123,7 @@ Align::Align()
pi = new QProgressIndicator(this);
- controlLayout->addWidget(pi, 0, 3, 1, 1);
+ controlLayout->addWidget(pi, 0, 4, 1, 1);
exposureIN->setValue(Options::alignExposure());
@@ -176,23 +167,16 @@ Align::Align()
solverOptions->setText(Options::solverOptions());
// Which telescope info to use for FOV calculations
- kcfg_solverOTA->setChecked(Options::solverOTA());
+ kcfg_solverOTA->setChecked(Options::solverOTA());
connect(kcfg_solverOTA, SIGNAL(toggled(bool)), this, SLOT(syncTelescopeInfo()));
- kcfg_solverOverlay->setChecked(Options::solverOverlay());
- connect(kcfg_solverOverlay, SIGNAL(toggled(bool)), this, SLOT(setSolverOverlay(bool)));
-
accuracySpin->setValue(Options::solverAccuracyThreshold());
-
alignDarkFrameCheck->setChecked(Options::alignDarkFrame());
- connect(binXIN, SIGNAL(valueChanged(int)), this, SLOT(invalidateDarkFrame()));
- connect(exposureIN, SIGNAL(valueChanged(double)), this, SLOT(invalidateDarkFrame()));
- connect(CCDCaptureCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(invalidateDarkFrame()));
- connect(alignDarkFrameCheck, SIGNAL(toggled(bool)), this, SLOT(invalidateDarkFrame()));
-
delaySpin->setValue(Options::settlingTime());
connect(delaySpin, SIGNAL(editingFinished()), this, SLOT(saveSettleTime()));
+
+ connect(binningCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setBinningIndex(int)));
}
Align::~Align()
@@ -200,7 +184,6 @@ Align::~Align()
delete(pi);
delete(solverFOV);
delete(parser);
- delete (darkBuffer);
}
bool Align::isParserOK()
@@ -216,11 +199,6 @@ bool Align::isParserOK()
return rc;
}
-bool Align::isVerbose()
-{
- return kcfg_solverVerbose->isChecked();
-}
-
void Align::setSolverType(int type)
{
switch(type)
@@ -322,10 +300,7 @@ void Align::addCCD(ISD::GDInterface *newCCD)
CCDs.append(static_cast<ISD::CCD *>(newCCD));
- CCDCaptureCombo->addItem(newCCD->getDeviceName());
- //checkCCD(CCDs.count()-1);
- //CCDCaptureCombo->setCurrentIndex(CCDs.count()-1);
- wcsCheck->setChecked(Options::wCSAlign());
+ CCDCaptureCombo->addItem(newCCD->getDeviceName());
}
void Align::setTelescope(ISD::GDInterface *newTelescope)
@@ -386,7 +361,7 @@ void Align::syncCCDInfo()
int x,y;
if (currentCCD == NULL)
- return;
+ return;
if (useGuideHead)
nvp = currentCCD->getBaseDevice()->getNumber("GUIDER_INFO");
@@ -406,39 +381,38 @@ void Align::syncCCDInfo()
np = IUFindNumber(nvp, "CCD_PIXEL_SIZE_Y");
if (np && np->value >0)
ccd_ver_pixel = np->value;
- }
+ }
ISD::CCDChip *targetChip = currentCCD->getChip(useGuideHead ? ISD::CCDChip::GUIDE_CCD : ISD::CCDChip::PRIMARY_CCD);
ISwitchVectorProperty *svp = currentCCD->getBaseDevice()->getSwitch("WCS_CONTROL");
- if (svp && wcsCheck->isEnabled() == false && wcsCheck->isChecked())
+ if (svp && Options::solverWCS())
{
- wcsCheck->setEnabled(true);
setWCS(true);
}
targetChip->getFrame(&x,&y,&ccd_width,&ccd_height);
- binXIN->setEnabled(targetChip->canBin());
- binYIN->setEnabled(targetChip->canBin());
+ binningCombo->setEnabled(targetChip->canBin());
if (targetChip->canBin())
{
+ binningCombo->blockSignals(true);
+
int binx=1,biny=1;
targetChip->getMaxBin(&binx, &biny);
- binXIN->setMaximum(binx);
- binYIN->setMaximum(biny);
- binXIN->setValue(Options::solverXBin());
- binYIN->setValue(Options::solverYBin());
- }
- else
- {
- binXIN->setValue(1);
- binYIN->setValue(1);
+ binningCombo->clear();
+
+ for (int i=0; i < binx; i++)
+ binningCombo->addItem(QString("%1x%2").arg(i+1).arg(i+1));
+
+ binningCombo->setCurrentIndex(Options::solverBinningIndex());
+
+ binningCombo->blockSignals(false);
}
if (ccd_hor_pixel == -1 || ccd_ver_pixel == -1)
return;
- if (ccd_hor_pixel != -1 && ccd_ver_pixel != -1 && focal_length != -1 && aperture != -1)
+ if (ccd_hor_pixel != -1 && ccd_ver_pixel != -1 && focal_length != -1 && aperture != -1)
calculateFOV();
if (currentCCD && currentTelescope)
@@ -458,7 +432,7 @@ void Align::calculateFOV()
solverFOV->setSize(fov_x, fov_y);
- FOVOut->setText(QString("%1' x %2'").arg(fov_x, 0, 'g', 3).arg(fov_y, 0, 'g', 3));
+ FOVOut->setText(QString("%1' x %2'").arg(fov_x, 0, 'g', 3).arg(fov_y, 0, 'g', 3));
}
@@ -625,18 +599,18 @@ bool Align::captureAndSolve()
if (isFocusBusy)
{
- appendLogText(i18n("Cannot capture while focus module is busy."));
+ appendLogText(i18n("Cannot capture while focus module is busy! Retrying..."));
+ QTimer::singleShot(1000, this, SLOT(captureAndSolve()));
return false;
}
if (targetChip->isCapturing())
{
- appendLogText(i18n("Cannot capture while CCD exposure is in progress."));
+ appendLogText(i18n("Cannot capture while CCD exposure is in progress! Retrying..."));
+ QTimer::singleShot(1000, this, SLOT(captureAndSolve()));
return false;
}
- CCDFrameType ccdFrame = FRAME_LIGHT;
-
if (currentCCD->isConnected() == false)
{
appendLogText(i18n("Error: Lost connection to CCD."));
@@ -647,15 +621,11 @@ bool Align::captureAndSolve()
connect(currentCCD, SIGNAL(BLOBUpdated(IBLOB*)), this, SLOT(newFITS(IBLOB*)));
connect(currentCCD, SIGNAL(newExposureValue(ISD::CCDChip*,double,IPState)), this, SLOT(checkCCDExposureProgress(ISD::CCDChip*,double,IPState)));
- // In case of remote solver, we set mode to either UPLOAD_LOCAL (when preview is OFF) or UPLOAD_BOTH (when preview is on)
+ // In case of remote solver, we set mode to UPLOAD_BOTH
if (solverTypeGroup->checkedId() == SOLVER_REMOTE)
{
rememberUploadMode = currentCCD->getUploadMode();
-
- if (kcfg_solverPreview->isChecked())
- currentCCD->setUploadMode(ISD::CCD::UPLOAD_BOTH);
- else
- currentCCD->setUploadMode(ISD::CCD::UPLOAD_LOCAL);
+ currentCCD->setUploadMode(ISD::CCD::UPLOAD_BOTH);
// For solver remote we need to start solver BEFORE capture
startSolving(QString());
@@ -667,23 +637,15 @@ bool Align::captureAndSolve()
rememberUploadMode = ISD::CCD::UPLOAD_LOCAL;
currentCCD->setUploadMode(ISD::CCD::UPLOAD_CLIENT);
}
-
- // Check if we need to capture a dark frame
- if (haveDarkFrame == false && alignDarkFrameCheck->isChecked() && calibrationState == CALIBRATE_NONE)
- {
- ccdFrame = FRAME_DARK;
- calibrationState = CALIBRATE_START;
- }
}
targetChip->resetFrame();
- targetChip->setBatchMode(false);
- if (ccdFrame == FRAME_DARK)
- targetChip->setCaptureMode(FITS_CALIBRATE);
- else
- targetChip->setCaptureMode( kcfg_solverPreview->isChecked() ? FITS_NORMAL : FITS_WCSM);
- targetChip->setBinning(binXIN->value(), binYIN->value());
- targetChip->setFrameType(ccdFrame);
+ targetChip->setBatchMode(false);
+ targetChip->setCaptureMode(FITS_ALIGN);
+ targetChip->setFrameType(FRAME_LIGHT);
+
+ int bin = Options::solverBinningIndex()+1;
+ targetChip->setBinning(bin, bin);
targetChip->capture(seqExpose);
@@ -693,10 +655,7 @@ bool Align::captureAndSolve()
stopB->setEnabled(true);
pi->startAnimation();
- if (ccdFrame == FRAME_LIGHT)
- appendLogText(i18n("Capturing image..."));
- else
- appendLogText(i18n("Capturing dark frame..."));
+ appendLogText(i18n("Capturing image..."));
return true;
}
@@ -708,73 +667,58 @@ void Align::newFITS(IBLOB *bp)
return;
disconnect(currentCCD, SIGNAL(BLOBUpdated(IBLOB*)), this, SLOT(newFITS(IBLOB*)));
- disconnect(currentCCD, SIGNAL(newExposureValue(ISD::CCDChip*,double,IPState)), this, SLOT(checkCCDExposureProgress(ISD::CCDChip*,double,IPState)));
+ disconnect(currentCCD, SIGNAL(newExposureValue(ISD::CCDChip*,double,IPState)), this, SLOT(checkCCDExposureProgress(ISD::CCDChip*,double,IPState)));
appendLogText(i18n("Image received."));
if (solverTypeGroup->checkedId() != SOLVER_REMOTE)
{
- if (calibrationState == CALIBRATE_START)
- {
- calibrationState = CALIBRATE_DONE;
- // Start capture again in 0.5 seconds
- QTimer::singleShot(500, this, SLOT(captureAndSolve()));
- return;
- }
-
ISD::CCDChip *targetChip = currentCCD->getChip(useGuideHead ? ISD::CCDChip::GUIDE_CCD : ISD::CCDChip::PRIMARY_CCD);
- // If we're done capturing dark frame, store it.
- if (alignDarkFrameCheck->isChecked() && calibrationState == CALIBRATE_DONE)
+ if (alignDarkFrameCheck->isChecked())
{
- calibrationState = CALIBRATE_NONE;
- delete (darkBuffer);
+ int x,y,w,h,binx=1,biny=1;
+ targetChip->getFrame(&x,&y,&w,&h);
+ targetChip->getBinning(&binx, &biny);
- FITSView *calibrateImage = targetChip->getImage(FITS_CALIBRATE);
- if (calibrateImage == NULL)
- {
- captureAndSolve();
- return;
- }
+ FITSView *currentImage = targetChip->getImage(FITS_ALIGN);
+ FITSData *darkData = NULL;
- FITSData *calibrateData = calibrateImage->getImageData();
+ uint16_t offsetX = x / binx;
+ uint16_t offsetY = y / biny;
- haveDarkFrame = true;
- int totalSize = calibrateData->getSize()*calibrateData->getNumOfChannels();
- darkBuffer = new float[totalSize];
- memcpy(darkBuffer, calibrateData->getImageBuffer(), totalSize*sizeof(float));
- }
+ darkData = DarkLibrary::Instance()->getDarkFrame(targetChip, exposureIN->value());
- QString fitsFileName((char *) bp->aux2);
+ connect(DarkLibrary::Instance(), SIGNAL(darkFrameCompleted(bool)), this, SLOT(setCaptureComplete()));
+ connect(DarkLibrary::Instance(), SIGNAL(newLog(QString)), this, SLOT(appendLogText(QString)));
- // If we already have a dark frame, subtract it from light frame
- if (haveDarkFrame)
- {
- FITSData image_data;
- bool rc = image_data.loadFITS(fitsFileName);
- if (rc)
- {
- fitsFileName += "_dark_subtracted";
- image_data.subtract(darkBuffer);
- image_data.saveFITS(fitsFileName);
- }
+ if (darkData)
+ DarkLibrary::Instance()->subtract(darkData, currentImage, FITS_NONE, offsetX, offsetY);
+ else
+ DarkLibrary::Instance()->captureAndSubtract(targetChip, currentImage, exposureIN->value(), offsetX, offsetY);
+
+ return;
}
- if (kcfg_solverPreview->isChecked())
- {
- FITSView *previewImage = targetChip->getImage(FITS_NORMAL);
- FITSData *previewData = previewImage->getImageData();
+ setCaptureComplete();
+ }
+}
- if (haveDarkFrame)
- previewData->subtract(darkBuffer);
+void Align::setCaptureComplete()
+{
+ DarkLibrary::Instance()->disconnect(this);
- //previewData->applyFilter(FITS_AUTO_STRETCH);
- previewImage->rescale(ZOOM_KEEP_LEVEL);
- previewImage->updateFrame();
- }
+ ISD::CCDChip *targetChip = currentCCD->getChip(useGuideHead ? ISD::CCDChip::GUIDE_CCD : ISD::CCDChip::PRIMARY_CCD);
+ FITSView *currentImage = targetChip->getImage(FITS_ALIGN);
+ FITSData *currentData = currentImage->getImageData();
- startSolving(fitsFileName);
- }
+ QString filename = currentData->getFilename();
+
+ // Save frame after substraction
+ if (alignDarkFrameCheck->isChecked())
+ currentImage->getImageData()->saveFITS(filename);
+
+ startSolving(filename);
}
void Align::setGOTOMode(int mode)
@@ -808,15 +752,9 @@ void Align::startSolving(const QString &filename, bool isGenerated)
targetCoord.setDec(dec);
}
- Options::setSolverXBin(binXIN->value());
- Options::setSolverYBin(binYIN->value());
- Options::setSolverUpdateCoords(kcfg_solverUpdateCoords->isChecked());
Options::setSolverType(solverTypeGroup->checkedId());
- Options::setSolverPreview(kcfg_solverPreview->isChecked());
Options::setSolverOptions(solverOptions->text());
Options::setSolverOTA(kcfg_solverOTA->isChecked());
- Options::setWCSAlign(wcsCheck->isChecked());
- Options::setSolverOverlay(kcfg_solverOverlay->isChecked());
Options::setSolverAccuracyThreshold(accuracySpin->value());
Options::setAlignDarkFrame(alignDarkFrameCheck->isChecked());
@@ -828,7 +766,7 @@ void Align::startSolving(const QString &filename, bool isGenerated)
Options::setSolverGotoOption(solverGotoOption);
m_isSolverComplete = false;
- m_isSolverSuccessful = false;
+ m_isSolverSuccessful = false;
parser->verifyIndexFiles(fov_x, fov_y);
@@ -842,7 +780,7 @@ void Align::startSolving(const QString &filename, bool isGenerated)
appendLogText(i18n("Using solver options: %1", solverArgs.join(" ")));
}
else
- solverArgs << "--no-verify" << "--no-plots" << "--no-fits2fits" << "--resort" << "--downsample" << "2" << "-O";
+ solverArgs << "--no-verify" << "--no-plots" << "--no-fits2fits" << "--resort" << "--downsample" << "2" << "-O";
if (slewR->isChecked())
appendLogText(i18n("Solver iteration #%1", solverIterations+1));
@@ -855,7 +793,7 @@ void Align::solverFinished(double orientation, double ra, double dec, double pix
{
pi->stopAnimation();
stopB->setEnabled(false);
- solveB->setEnabled(true);
+ solveB->setEnabled(true);
sOrientation = orientation;
sRA = ra;
@@ -865,12 +803,12 @@ void Align::solverFinished(double orientation, double ra, double dec, double pix
ISD::CCDChip *targetChip = currentCCD->getChip(useGuideHead ? ISD::CCDChip::GUIDE_CCD : ISD::CCDChip::PRIMARY_CCD);
targetChip->getBinning(&binx, &biny);
- if (isVerbose())
+ if (Options::solverVerbose())
appendLogText(i18n("Solver RA (%1) DEC (%2) Orientation (%3) Pixel Scale (%4)", QString::number(ra, 'g' , 5), QString::number(dec, 'g' , 5),
QString::number(orientation, 'g' , 5), QString::number(pixscale, 'g' , 5)));
if (pixscale > 0 && loadSlewMode == false)
- {
+ {
double solver_focal_length = (206.264 * ccd_hor_pixel) / pixscale * binx;
if (fabs(focal_length - solver_focal_length) > 1)
appendLogText(i18n("Current focal length is %1 mm while computed focal length from the solver is %2 mm. Please update the mount focal length to obtain accurate results.",
@@ -892,7 +830,7 @@ void Align::solverFinished(double orientation, double ra, double dec, double pix
solverFOV->setCenter(alignCoord);
solverFOV->setRotation(sOrientation);
- solverFOV->setImageDisplay(kcfg_solverOverlay->isChecked());
+ solverFOV->setImageDisplay(Options::solverOverlay());
QString ra_dms, dec_dms;
getFormattedCoords(alignCoord.ra().Hours(), alignCoord.dec().Degrees(), ra_dms, dec_dms);
@@ -900,7 +838,7 @@ void Align::solverFinished(double orientation, double ra, double dec, double pix
SolverRAOut->setText(ra_dms);
SolverDecOut->setText(dec_dms);
- if (wcsCheck->isChecked())
+ if (Options::solverWCS())
{
INumberVectorProperty *ccdRotation = currentCCD->getBaseDevice()->getNumber("CCD_ROTATION");
if (ccdRotation)
@@ -953,7 +891,7 @@ void Align::solverFinished(double orientation, double ra, double dec, double pix
}
void Align::solverFailed()
-{
+{
KNotification::event( QLatin1String( "AlignFailed"), i18n("Astrometry alignment failed with errors") );
pi->stopAnimation();
@@ -1045,7 +983,7 @@ void Align::processTelescopeNumber(INumberVectorProperty *coord)
static bool slew_dirty=false;
if (!strcmp(coord->name, "EQUATORIAL_EOD_COORD"))
- {
+ {
getFormattedCoords(coord->np[0].value, coord->np[1].value, ra_dms, dec_dms);
telescopeCoord.setRA(coord->np[0].value);
@@ -1055,7 +993,7 @@ void Align::processTelescopeNumber(INumberVectorProperty *coord)
ScopeRAOut->setText(ra_dms);
ScopeDecOut->setText(dec_dms);
- if (kcfg_solverUpdateCoords->isChecked())
+ if (Options::solverUpdateCoords())
{
if (currentTelescope->isSlewing() && slew_dirty == false)
slew_dirty = true;
@@ -1065,13 +1003,13 @@ void Align::processTelescopeNumber(INumberVectorProperty *coord)
copyCoordsToBoxes();
if (loadSlewMode)
- {
+ {
loadSlewMode = false;
QTimer::singleShot(delaySpin->value(), this, SLOT(captureAndSolve()));
return;
}
else if (m_slewToTargetSelected)
- {
+ {
if (targetDiff <= accuracySpin->value())
{
m_slewToTargetSelected=false;
@@ -1141,7 +1079,7 @@ void Align::processTelescopeNumber(INumberVectorProperty *coord)
case ALT_CORRECTING:
if (currentTelescope->isSlewing() == false)
- {
+ {
appendLogText(i18n("Slew complete. Please adjust altitude knob until the target is in the center of the view."));
altStage = ALT_INIT;
}
@@ -1168,7 +1106,7 @@ void Align::executeMode()
void Align::executeGOTO()
-{
+{
if (loadSlewMode)
{
//if (loadSlewIterations == loadSlewIterationsSpin->value())
@@ -1299,7 +1237,7 @@ void Align::measureAzError()
{
azStage = AZ_SLEWING;
currentTelescope->Slew(telescopeCoord.ra().Hours() - RAMotion/15.0, telescopeCoord.dec().Degrees());
- }
+ }
appendLogText(i18n("Slewing 30 arcminutes in RA..."));
break;
@@ -1364,7 +1302,7 @@ void Align::measureAltError()
if (KMessageBox::warningContinueCancel( 0, i18n("Point the telescope to the eastern or western horizon with a minimum altitude of 20 degrees. Press continue when ready.")
, i18n("Polar Alignment Measurement"), KStandardGuiItem::cont(), KStandardGuiItem::cancel(),
"ekos_measure_alt_error")!=KMessageBox::Continue)
- return;
+ return;
appendLogText(i18n("Solving first frame."));
altStage = ALT_FIRST_TARGET;
@@ -1465,7 +1403,7 @@ void Align::calculatePolarError(double initRA, double initDEC, double finalRA, d
// Equation by Frank Berret (Measuring Polar Axis Alignment Error, page 4)
// In degrees
double deviation = (3.81 * (decDeviation * 3600) ) / ( RATime * cos(initDEC * dms::DegToRad)) / 60.0;
- dms devDMS(fabs(deviation));
+ dms devDMS(fabs(deviation));
KLocalizedString deviationDirection;
@@ -1705,10 +1643,17 @@ void Align::setExposure(double value)
exposureIN->setValue(value);
}
-void Align::setBinning(int binX, int binY)
+void Align::setBinningIndex(int binIndex)
{
- binXIN->setValue(binX);
- binYIN->setValue(binY);
+ Options::setSolverBinningIndex(binIndex);
+
+ // If sender is not our combo box, then we need to update the combobox itself
+ if ( dynamic_cast<QComboBox*>(sender()) != binningCombo)
+ {
+ binningCombo->blockSignals(true);
+ binningCombo->setCurrentIndex(binIndex);
+ binningCombo->blockSignals(false);
+ }
}
void Align::setSolverArguments(const QString & value)
@@ -1727,21 +1672,6 @@ void Align::setSolverSearchOptions(double ra, double dec, double radius)
radiusBox->setText(QString::number(radius));
}
-void Align::setUpdateCoords(bool enabled)
-{
- kcfg_solverUpdateCoords->setChecked(enabled);
-}
-
-void Align::setPreviewImage(bool enabled)
-{
- kcfg_solverPreview->setChecked(enabled);
-}
-
-void Align::setVerbose(bool enabled)
-{
- kcfg_solverVerbose->setChecked(enabled);
-}
-
void Align::setUseOAGT(bool enabled)
{
kcfg_solverOTA->setChecked(enabled);
@@ -1793,18 +1723,10 @@ void Align::setWCS(bool enable)
if (currentCCD == NULL)
return;
- Options::setWCSAlign(enable);
+ Options::setSolverWCS(enable);
ISwitchVectorProperty *wcsControl = currentCCD->getBaseDevice()->getSwitch("WCS_CONTROL");
- if (wcsControl == NULL)
- {
- //appendLogText(i18n("CCD driver does not support World System Coordinates."));
- //wcsCheck->setChecked(false);
- wcsCheck->setEnabled(false);
- return;
- }
-
ISwitch *wcs_enable = IUFindSwitch(wcsControl, "WCS_ENABLE");
ISwitch *wcs_disable = IUFindSwitch(wcsControl, "WCS_DISABLE");
@@ -1820,9 +1742,9 @@ void Align::setWCS(bool enable)
IUResetSwitch(wcsControl);
if (enable)
- wcs_enable->s = ISS_ON;
+ wcs_enable->s = ISS_ON;
else
- {
+ {
wcs_disable->s = ISS_ON;
m_wcsSynced=false;
}
@@ -1839,7 +1761,7 @@ void Align::checkCCDExposureProgress(ISD::CCDChip *targetChip, double remaining,
INDI_UNUSED(remaining);
if (state == IPS_ALERT)
- {
+ {
if (++retries == 3)
{
appendLogText(i18n("Capture error! Aborting..."));
@@ -1858,14 +1780,6 @@ void Align::updateFocusStatus(Ekos::FocusState state)
isFocusBusy = state >= Ekos::FOCUS_PROGRESS;
}
-void Align::setSolverOverlay(bool enable)
-{
- if (solverFOV)
- {
- solverFOV->setImageDisplay(enable);
- }
-}
-
QStringList Align::getSolverOptionsFromFITS(const QString &filename)
{
int status=0, fits_ccd_width, fits_ccd_height, fits_focal_length=-1, fits_binx=1, fits_biny=1;
@@ -1977,25 +1891,6 @@ QStringList Align::getSolverOptionsFromFITS(const QString &filename)
return solver_args;
}
-void Align::invalidateDarkFrame()
-{
- haveDarkFrame = false;
- calibrationState = CALIBRATE_NONE;
-
- if (solverTypeGroup->checkedId() != SOLVER_REMOTE)
- {
- ISD::CCDChip *targetChip = currentCCD->getChip(useGuideHead ? ISD::CCDChip::GUIDE_CCD : ISD::CCDChip::PRIMARY_CCD);
-
- // If capture is still in progress, let's stop that.
- if (targetChip->isCapturing())
- {
- targetChip->abortExposure();
- appendLogText(i18n("Capture restarted with updated parameters."));
- captureAndSolve();
- }
- }
-}
-
void Align::saveSettleTime()
{
Options::setSettlingTime(delaySpin->value());
diff --git a/kstars/ekos/align.h b/kstars/ekos/align.h
index 496db45..d788890 100644
--- a/kstars/ekos/align.h
+++ b/kstars/ekos/align.h
@@ -52,7 +52,6 @@ public:
Align();
~Align();
- enum { CALIBRATE_NONE, CALIBRATE_START, CALIBRATE_DONE };
typedef enum { AZ_INIT, AZ_FIRST_TARGET, AZ_SYNCING, AZ_SLEWING, AZ_SECOND_TARGET, AZ_CORRECTING, AZ_FINISHED } AZStage;
typedef enum { ALT_INIT, ALT_FIRST_TARGET, ALT_SYNCING, ALT_SLEWING, ALT_SECOND_TARGET, ALT_CORRECTING, ALT_FINISHED } ALTStage;
typedef enum { ALIGN_SYNC, ALIGN_SLEW, ALIGN_SOLVE } GotoMode;
@@ -113,13 +112,6 @@ public:
Q_SCRIPTABLE Q_NOREPLY void setExposure(double value);
/** DBUS interface function.
- * Sets the binning of the selected CCD device.
- * @param binX horizontal binning
- * @param binY vertical binning
- */
- Q_SCRIPTABLE Q_NOREPLY void setBinning(int binX, int binY);
-
- /** DBUS interface function.
* Sets the arguments that gets passed to the astrometry.net offline solver.
* @param value space-separated arguments.
*/
@@ -135,24 +127,6 @@ public:
/** DBUS interface function.
* Sets the solver's option
- * @param enabled if true, the telescope coordinates are automatically incorporated into the search pattern whenever the telescope completes slewing.
- */
- Q_SCRIPTABLE Q_NOREPLY void setUpdateCoords(bool enabled);
-
- /** DBUS interface function.
- * Sets the solver's option
- * @param enabled if true, the captured image is viewed in the FITSViewer tool before getting passed to the solver.
- */
- Q_SCRIPTABLE Q_NOREPLY void setPreviewImage(bool enabled);
-
- /** DBUS interface function.
- * Sets the solver's option
- * @param verbose if true, extended information will be displayed in the logger window.
- */
- Q_SCRIPTABLE Q_NOREPLY void setVerbose(bool enabled);
-
- /** DBUS interface function.
- * Sets the solver's option
* @param useOAGT if true, use the Off-Axis Guide Telescope focal length and aperture for FOV calculations. Otherwise, the main telescope's focal length and aperture are used for the calculation.
*/
Q_SCRIPTABLE Q_NOREPLY void setUseOAGT(bool enabled);
@@ -170,7 +144,7 @@ public:
* @brief Set the current telescope
* @newTelescope pointer to telescope device.
*/
- void setTelescope(ISD::GDInterface *newTelescope);
+ void setTelescope(ISD::GDInterface *newTelescope);
/**
* @brief CCD information is updated, sync them.
@@ -180,20 +154,14 @@ public:
/**
* @brief Generate arguments we pass to the online and offline solvers. Keep user own arguments in place.
*/
- void generateArgs();
+ void generateArgs();
/**
* @brief Does our parser exist in the system?
*/
bool isParserOK();
- /**
- * @brief Are we displaying verbose information?
- */
- bool isVerbose();
-
// Log
- void appendLogText(const QString &);
QString getLogText() { return logText.join("\n"); }
void clearLog();
@@ -258,6 +226,12 @@ public slots:
*/
Q_SCRIPTABLE Q_NOREPLY void loadAndSlew(QString fileURL = QString());
+ /** DBUS interface function.
+ * Sets the binning of the selected CCD device.
+ * @param binIndex Index of binning value. Default values range from 0 (binning 1x1) to 3 (binning 4x4)
+ */
+ Q_SCRIPTABLE Q_NOREPLY void setBinningIndex(int binIndex);
+
/** @}*/
/**
@@ -285,10 +259,16 @@ public slots:
*/
void setWCS(bool enable);
- void setLockedFilter(ISD::GDInterface *filter, int lockedPosition);
+ void setLockedFilter(ISD::GDInterface *filter, int lockedPosition);
void updateFocusStatus(Ekos::FocusState state);
+ // Log
+ void appendLogText(const QString &);
+
+ // Capture
+ void setCaptureComplete();
+
private slots:
/* Solver Options */
void checkLineEdits();
@@ -304,13 +284,8 @@ private slots:
void processFilterNumber(INumberVectorProperty *nvp);
- void setSolverOverlay(bool enable);
-
void setDefaultCCD(QString ccd);
- /* We need to take a dark frame when CCD, Frame size, or exposure time changes */
- void invalidateDarkFrame();
-
void saveSettleTime();
signals:
@@ -462,12 +437,6 @@ private:
ISD::CCD::UploadMode rememberUploadMode;
QString dirPath;
-
- // Dark Frame
- int calibrationState;
- bool haveDarkFrame;
- float *darkBuffer;
-
};
}
diff --git a/kstars/ekos/align.ui b/kstars/ekos/align.ui
index 6bd9fe7..94c5aec 100644
--- a/kstars/ekos/align.ui
+++ b/kstars/ekos/align.ui
@@ -6,13 +6,13 @@
<rect>
<x>0</x>
<y>0</y>
- <width>863</width>
- <height>526</height>
+ <width>765</width>
+ <height>330</height>
</rect>
</property>
- <layout class="QVBoxLayout" name="verticalLayout_4">
+ <layout class="QVBoxLayout" name="verticalLayout_5">
<item>
- <layout class="QHBoxLayout" name="horizontalLayout_13">
+ <layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
@@ -23,30 +23,30 @@
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<layout class="QGridLayout" name="controlLayout">
- <item row="0" column="2">
- <widget class="QPushButton" name="stopB">
+ <item row="0" column="1">
+ <widget class="QPushButton" name="solveB">
<property name="enabled">
- <bool>false</bool>
+ <bool>true</bool>
</property>
<property name="text">
- <string>Stop</string>
+ <string>Capture &amp;&amp; Solve</string>
</property>
</widget>
</item>
- <item row="0" column="1">
- <widget class="QPushButton" name="solveB">
+ <item row="0" column="3">
+ <widget class="QPushButton" name="stopB">
<property name="enabled">
- <bool>true</bool>
+ <bool>false</bool>
</property>
<property name="text">
- <string>Capture &amp;&amp; Solve</string>
+ <string>Stop</string>
</property>
</widget>
</item>
- <item row="0" column="0">
- <widget class="QLabel" name="label">
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_5">
<property name="text">
- <string>Control:</string>
+ <string>Mode:</string>
</property>
</widget>
</item>
@@ -70,6 +70,23 @@
</item>
</layout>
</item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Control:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QPushButton" name="loadSlewB">
+ <property name="toolTip">
+ <string>Load a FITS image and solve. Slew mount to image central coordinates.</string>
+ </property>
+ <property name="text">
+ <string>Load &amp;&amp; Slew...</string>
+ </property>
+ </widget>
+ </item>
<item row="1" column="2">
<widget class="QRadioButton" name="polarR">
<property name="toolTip">
@@ -86,13 +103,6 @@
</property>
</widget>
</item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_5">
- <property name="text">
- <string>Mode:</string>
- </property>
- </widget>
- </item>
</layout>
</item>
<item>
@@ -192,77 +202,208 @@
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
- <widget class="QLabel" name="textLabel1_6">
- <property name="toolTip">
- <string/>
- </property>
- <property name="whatsThis">
- <string/>
- </property>
- <property name="text">
- <string>CCD:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QComboBox" name="CCDCaptureCombo"/>
- </item>
- <item>
- <widget class="QLabel" name="label_7">
- <property name="text">
- <string>Exposure:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QDoubleSpinBox" name="exposureIN">
- <property name="minimum">
- <double>0.100000000000000</double>
- </property>
- <property name="maximum">
- <double>60.000000000000000</double>
- </property>
- <property name="singleStep">
- <double>0.500000000000000</double>
- </property>
- <property name="value">
- <double>3.000000000000000</double>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_18">
- <property name="text">
- <string>Bin X:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="binXIN">
- <property name="minimum">
- <number>1</number>
- </property>
- <property name="maximum">
- <number>16</number>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_19">
- <property name="text">
- <string>Bin Y:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="binYIN">
- <property name="minimum">
- <number>1</number>
- </property>
- <property name="maximum">
- <number>16</number>
- </property>
- </widget>
+ <layout class="QGridLayout" name="gridLayout_4">
+ <item row="0" column="0">
+ <widget class="QLabel" name="textLabel1_6">
+ <property name="toolTip">
+ <string/>
+ </property>
+ <property name="whatsThis">
+ <string/>
+ </property>
+ <property name="text">
+ <string>CCD:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="CCDCaptureCombo"/>
+ </item>
+ <item row="0" column="2">
+ <widget class="QLabel" name="label_7">
+ <property name="toolTip">
+ <string/>
+ </property>
+ <property name="text">
+ <string>Exp:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="3">
+ <widget class="QDoubleSpinBox" name="exposureIN">
+ <property name="toolTip">
+ <string>Exposure duration in seconds</string>
+ </property>
+ <property name="minimum">
+ <double>0.100000000000000</double>
+ </property>
+ <property name="maximum">
+ <double>60.000000000000000</double>
+ </property>
+ <property name="singleStep">
+ <double>0.500000000000000</double>
+ </property>
+ <property name="value">
+ <double>3.000000000000000</double>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="4">
+ <widget class="QLabel" name="label_18">
+ <property name="toolTip">
+ <string/>
+ </property>
+ <property name="text">
+ <string>Bin:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="5">
+ <widget class="QComboBox" name="binningCombo">
+ <property name="toolTip">
+ <string>Camera binning</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="6" colspan="2">
+ <widget class="QCheckBox" name="alignDarkFrameCheck">
+ <property name="toolTip">
+ <string>Subtract dark frame. If no suitable dark frame is available, a dark frame shall be captured.</string>
+ </property>
+ <property name="text">
+ <string>Dark</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_15">
+ <property name="toolTip">
+ <string>estimated RA of target center to limit the solver's search area</string>
+ </property>
+ <property name="text">
+ <string>RA:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="dmsBox" name="raBox">
+ <property name="toolTip">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QLabel" name="label_16">
+ <property name="toolTip">
+ <string>estimated DEC of target center to limit the solver's search area</string>
+ </property>
+ <property name="text">
+ <string>Dec:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="3">
+ <widget class="dmsBox" name="decBox">
+ <property name="toolTip">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="4">
+ <widget class="QLabel" name="label_17">
+ <property name="text">
+ <string>Radius:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="5">
+ <widget class="QLineEdit" name="radiusBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>The solver's search radius in degrees round the estimated RA and DEC</string>
+ </property>
+ <property name="statusTip">
+ <string/>
+ </property>
+ <property name="text">
+ <string>30</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="6">
+ <widget class="QPushButton" name="syncBoxesB">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Fill RA &amp;amp; DEC values from telescope coordinates and update options</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="7">
+ <widget class="QPushButton" name="clearBoxesB">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Clear RA &amp; DEC values and reset solver options</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ </widget>
+ </item>
+ </layout>
</item>
<item>
<spacer name="horizontalSpacer_3">
@@ -277,155 +418,6 @@
</property>
</spacer>
</item>
- <item>
- <widget class="QCheckBox" name="alignDarkFrameCheck">
- <property name="text">
- <string>Dark Frame</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="kcfg_solverOverlay">
- <property name="toolTip">
- <string>Display received FITS images unto solver FOV rectangle in the sky map</string>
- </property>
- <property name="text">
- <string>Overlay</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_7">
- <item>
- <widget class="QLabel" name="label_15">
- <property name="toolTip">
- <string>estimated RA of target center to limit the solver's search area</string>
- </property>
- <property name="text">
- <string>RA:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="dmsBox" name="raBox">
- <property name="toolTip">
- <string/>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_16">
- <property name="toolTip">
- <string>estimated DEC of target center to limit the solver's search area</string>
- </property>
- <property name="text">
- <string>Dec:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="dmsBox" name="decBox">
- <property name="toolTip">
- <string/>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_17">
- <property name="text">
- <string>Radius:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLineEdit" name="radiusBox">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="toolTip">
- <string>The solver's search radius in degrees round the estimated RA and DEC</string>
- </property>
- <property name="statusTip">
- <string/>
- </property>
- <property name="text">
- <string>30</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="syncBoxesB">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>22</width>
- <height>22</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>22</width>
- <height>22</height>
- </size>
- </property>
- <property name="toolTip">
- <string>Fill RA &amp;amp; DEC values from telescope coordinates and update options</string>
- </property>
- <property name="text">
- <string/>
- </property>
- <property name="iconSize">
- <size>
- <width>22</width>
- <height>22</height>
- </size>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="clearBoxesB">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>22</width>
- <height>22</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>22</width>
- <height>22</height>
- </size>
- </property>
- <property name="toolTip">
- <string>Clear RA &amp; DEC values and reset solver options</string>
- </property>
- <property name="text">
- <string/>
- </property>
- <property name="iconSize">
- <size>
- <width>22</width>
- <height>22</height>
- </size>
- </property>
- </widget>
- </item>
</layout>
</item>
<item>
@@ -449,68 +441,6 @@
<item>
<layout class="QHBoxLayout" name="horizontalLayout_12">
<item>
- <widget class="QCheckBox" name="kcfg_solverUpdateCoords">
- <property name="toolTip">
- <string>Automatically update the solver's RA &amp; Declination coordinates after telescope slew is completed.</string>
- </property>
- <property name="statusTip">
- <string>Automatically update the solver's RA &amp; Declination coordinates after telescope slew is completed.</string>
- </property>
- <property name="text">
- <string>Update Coords</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="kcfg_solverPreview">
- <property name="toolTip">
- <string>Display image in FITS Viewer</string>
- </property>
- <property name="statusTip">
- <string/>
- </property>
- <property name="text">
- <string>Preview</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="wcsCheck">
- <property name="toolTip">
- <string>enable World Coordinate System (WCS). WCS is used to encode RA/DEC coordinates in captured CCD images.</string>
- </property>
- <property name="text">
- <string>WCS</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="kcfg_solverVerbose">
- <property name="toolTip">
- <string>Log verbose solver output</string>
- </property>
- <property name="statusTip">
- <string/>
- </property>
- <property name="text">
- <string>Verbose</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_4">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
<widget class="QLabel" name="label_21">
<property name="text">
<string>Solver:</string>
@@ -559,6 +489,19 @@
</attribute>
</widget>
</item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
</layout>
</item>
<item>
@@ -588,7 +531,7 @@
</widget>
</item>
<item>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="QGroupBox" name="groupBox_4">
<property name="title">
@@ -602,27 +545,6 @@
</property>
</widget>
</item>
- <item row="0" column="1">
- <widget class="QLineEdit" name="SolverRAOut">
- <property name="readOnly">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_6">
- <property name="text">
- <string>DEC:</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLineEdit" name="SolverDecOut">
- <property name="readOnly">
- <bool>true</bool>
- </property>
- </widget>
- </item>
<item row="2" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
@@ -630,13 +552,10 @@
</property>
</widget>
</item>
- <item row="2" column="1">
- <widget class="QLineEdit" name="FOVOut">
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_10">
<property name="text">
- <string/>
- </property>
- <property name="readOnly">
- <bool>true</bool>
+ <string>Rot:</string>
</property>
</widget>
</item>
@@ -650,15 +569,32 @@
</property>
</widget>
</item>
- <item row="3" column="0">
- <widget class="QLabel" name="label_10">
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_6">
<property name="text">
- <string>Rot:</string>
+ <string>DEC:</string>
</property>
</widget>
</item>
- <item row="3" column="1">
- <widget class="QLineEdit" name="RotOut">
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="SolverDecOut">
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="SolverRAOut">
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLineEdit" name="FOVOut">
+ <property name="text">
+ <string/>
+ </property>
<property name="readOnly">
<bool>true</bool>
</property>
@@ -687,6 +623,13 @@
</property>
</spacer>
</item>
+ <item row="3" column="1">
+ <widget class="QLineEdit" name="RotOut">
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
</item>
@@ -695,9 +638,9 @@
<property name="title">
<string>Telescope Coordinates</string>
</property>
- <layout class="QVBoxLayout" name="verticalLayout_6">
+ <layout class="QVBoxLayout" name="verticalLayout_4">
<item>
- <layout class="QFormLayout" name="formLayout_2">
+ <layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
@@ -726,74 +669,44 @@
</property>
</widget>
</item>
- </layout>
- </item>
- <item>
- <spacer name="verticalSpacer_2">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>59</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_16">
- <item>
- <widget class="QPushButton" name="loadSlewB">
- <property name="toolTip">
- <string>Load a FITS image and solve. Slew mount to image central coordinates.</string>
- </property>
- <property name="text">
- <string>Load &amp;&amp; Slew...</string>
- </property>
- </widget>
- </item>
- <item>
+ <item row="2" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>Accuracy</string>
</property>
</widget>
</item>
- <item>
- <widget class="QSpinBox" name="accuracySpin">
- <property name="toolTip">
- <string>Accuracy threshold in arcseconds between solution and target coordinates. Plate solver shall be repeatedly executed until the solution coordinates are below the accuracy threshold</string>
- </property>
- <property name="minimum">
- <number>1</number>
- </property>
- <property name="maximum">
- <number>300</number>
- </property>
- <property name="singleStep">
- <number>10</number>
- </property>
- <property name="value">
- <number>30</number>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_20">
- <property name="text">
- <string>arcsec</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="Line" name="line_3">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- </widget>
+ <item row="2" column="1">
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QSpinBox" name="accuracySpin">
+ <property name="toolTip">
+ <string>Accuracy threshold in arcseconds between solution and target coordinates. Plate solver shall be repeatedly executed until the solution coordinates are below the accuracy threshold</string>
+ </property>
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>300</number>
+ </property>
+ <property name="singleStep">
+ <number>10</number>
+ </property>
+ <property name="value">
+ <number>30</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_20">
+ <property name="text">
+ <string>arcsec</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
</item>
- <item>
+ <item row="3" column="0">
<widget class="QLabel" name="label_22">
<property name="toolTip">
<string>After telescope complete slewing, wait until it settles before capturing the next image.</string>
@@ -803,58 +716,51 @@
</property>
</widget>
</item>
- <item>
- <widget class="QSpinBox" name="delaySpin">
- <property name="toolTip">
- <string>After telescope completes slewing, delay capture of next image</string>
- </property>
- <property name="maximum">
- <number>5000</number>
- </property>
- <property name="singleStep">
- <number>100</number>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_23">
- <property name="toolTip">
- <string>Milliseconds</string>
- </property>
- <property name="text">
- <string>ms</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_6">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
+ <item row="3" column="1">
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <item>
+ <widget class="QSpinBox" name="delaySpin">
+ <property name="toolTip">
+ <string>After telescope completes slewing, delay capture of next image</string>
+ </property>
+ <property name="maximum">
+ <number>5000</number>
+ </property>
+ <property name="singleStep">
+ <number>100</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_23">
+ <property name="toolTip">
+ <string>Milliseconds</string>
+ </property>
+ <property name="text">
+ <string>ms</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
</item>
</layout>
</item>
+ <item>
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
</layout>
</widget>
</item>
- </layout>
- </item>
- <item>
- <widget class="Line" name="line_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_9">
<item>
<widget class="QGroupBox" name="alignmentBox">
<property name="title">
@@ -863,64 +769,20 @@
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QGridLayout" name="gridLayout">
- <item row="0" column="1">
- <widget class="QLineEdit" name="azError">
- <property name="readOnly">
- <bool>true</bool>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Az Error:</string>
</property>
</widget>
</item>
- <item row="0" column="4" rowspan="2">
- <spacer name="horizontalSpacer_7">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="1" column="1" rowspan="2">
- <widget class="QLineEdit" name="altError">
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="azError">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_4">
- <property name="text">
- <string>Alt Error:</string>
- </property>
- </widget>
- </item>
- <item row="2" column="4">
- <layout class="QHBoxLayout" name="horizontalLayout_6">
- <item>
- <spacer name="horizontalSpacer_8">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item row="0" column="0">
- <widget class="QLabel" name="label_3">
- <property name="text">
- <string>Az Error:</string>
- </property>
- </widget>
- </item>
<item row="0" column="2">
<widget class="QPushButton" name="measureAzB">
<property name="enabled">
@@ -941,7 +803,21 @@
</property>
</widget>
</item>
- <item row="2" column="2">
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_4">
+ <property name="text">
+ <string>Alt Error:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="altError">
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
<widget class="QPushButton" name="measureAltB">
<property name="enabled">
<bool>false</bool>
@@ -951,7 +827,7 @@
</property>
</widget>
</item>
- <item row="2" column="3">
+ <item row="1" column="3">
<widget class="QPushButton" name="correctAltB">
<property name="enabled">
<bool>false</bool>
@@ -963,20 +839,33 @@
</item>
</layout>
</item>
+ <item>
+ <spacer name="verticalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>52</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
</layout>
</widget>
</item>
</layout>
</item>
<item>
- <spacer name="verticalSpacer_3">
+ <spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
- <height>1</height>
+ <height>40</height>
</size>
</property>
</spacer>
diff --git a/kstars/org.kde.kstars.Ekos.Align.xml b/kstars/org.kde.kstars.Ekos.Align.xml
index 46c9535..0d6ac3c 100644
--- a/kstars/org.kde.kstars.Ekos.Align.xml
+++ b/kstars/org.kde.kstars.Ekos.Align.xml
@@ -45,9 +45,8 @@
<arg name="value" type="d" direction="in"/>
<annotation name="org.freedesktop.DBus.Method.NoReply" value="true"/>
</method>
- <method name="setBinning">
- <arg name="binX" type="i" direction="in"/>
- <arg name="binY" type="i" direction="in"/>
+ <method name="setBinningIndex">
+ <arg name="binningIndex" type="i" direction="in"/>
<annotation name="org.freedesktop.DBus.Method.NoReply" value="true"/>
</method>
<method name="setSolverArguments">
@@ -60,18 +59,6 @@
<arg name="radius" type="d" direction="in"/>
<annotation name="org.freedesktop.DBus.Method.NoReply" value="true"/>
</method>
- <method name="setUpdateCoords">
- <arg name="enabled" type="b" direction="in"/>
- <annotation name="org.freedesktop.DBus.Method.NoReply" value="true"/>
- </method>
- <method name="setPreviewImage">
- <arg name="enabled" type="b" direction="in"/>
- <annotation name="org.freedesktop.DBus.Method.NoReply" value="true"/>
- </method>
- <method name="setVerbose">
- <arg name="enabled" type="b" direction="in"/>
- <annotation name="org.freedesktop.DBus.Method.NoReply" value="true"/>
- </method>
<method name="setUseOAGT">
<arg name="enabled" type="b" direction="in"/>
<annotation name="org.freedesktop.DBus.Method.NoReply" value="true"/>