git: 4dfab55231f8 - main - astro/kstars: update to 3.5.8

From: Tobias C. Berner <tcberner_at_FreeBSD.org>
Date: Thu, 17 Mar 2022 05:23:32 UTC
The branch main has been updated by tcberner:

URL: https://cgit.FreeBSD.org/ports/commit/?id=4dfab55231f8dbc0ed6832b9c9d66912b4e3162f

commit 4dfab55231f8dbc0ed6832b9c9d66912b4e3162f
Author:     Tobias C. Berner <tcberner@FreeBSD.org>
AuthorDate: 2022-03-17 04:57:19 +0000
Commit:     Tobias C. Berner <tcberner@FreeBSD.org>
CommitDate: 2022-03-17 05:23:22 +0000

    astro/kstars: update to 3.5.8
---
 astro/kstars/Makefile                              |    5 +-
 astro/kstars/distinfo                              |    6 +-
 .../bef3940aaceb1ba574687a4817ef829a04d49dd4.patch | 1237 --------------------
 3 files changed, 4 insertions(+), 1244 deletions(-)

diff --git a/astro/kstars/Makefile b/astro/kstars/Makefile
index 4a0c3f494438..cfec1bfdb448 100644
--- a/astro/kstars/Makefile
+++ b/astro/kstars/Makefile
@@ -1,6 +1,5 @@
 PORTNAME=	kstars
-DISTVERSION=	3.5.7
-PORTREVISION=	5
+DISTVERSION=	3.5.8
 PORTEPOCH=	1
 CATEGORIES=	astro kde
 MASTER_SITES=	KDE/stable/${PORTNAME}
@@ -10,8 +9,6 @@ COMMENT=	KDE desktop planetarium
 
 LICENSE=	GPLv2
 
-EXTRA_PATCHES=	${PATCHDIR}/bef3940aaceb1ba574687a4817ef829a04d49dd4.patch:-p1
-
 LIB_DEPENDS=	libcfitsio.so:astro/cfitsio \
 		libindidriver.so:devel/indi \
 		libqt5keychain.so:security/qtkeychain \
diff --git a/astro/kstars/distinfo b/astro/kstars/distinfo
index 556b5ca1ccd9..e34c6f56725b 100644
--- a/astro/kstars/distinfo
+++ b/astro/kstars/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1642759464
-SHA256 (kstars-3.5.7.tar.xz) = aa8f122ee9b8e81334433191eab276c361112b9dcb9bcf8dfa0851e87a100d06
-SIZE (kstars-3.5.7.tar.xz) = 86749048
+TIMESTAMP = 1647460756
+SHA256 (kstars-3.5.8.tar.xz) = 660d902837b7abf3810d6e24f72fd84f0444a29bd7d43e1896b19fece1c88c3f
+SIZE (kstars-3.5.8.tar.xz) = 86831012
diff --git a/astro/kstars/files/bef3940aaceb1ba574687a4817ef829a04d49dd4.patch b/astro/kstars/files/bef3940aaceb1ba574687a4817ef829a04d49dd4.patch
deleted file mode 100644
index 5b252c7466dd..000000000000
--- a/astro/kstars/files/bef3940aaceb1ba574687a4817ef829a04d49dd4.patch
+++ /dev/null
@@ -1,1237 +0,0 @@
-From bef3940aaceb1ba574687a4817ef829a04d49dd4 Mon Sep 17 00:00:00 2001
-From: Jasem Mutlaq <mutlaqja@ikarustech.com>
-Date: Fri, 4 Mar 2022 12:54:11 +0300
-Subject: [PATCH] Make it work with StellarSolver 2.0
-
----
- CMakeLists.txt                                |   2 +-
- Tests/kstars_ui/test_ekos_align.cpp           |  17 +-
- .../kstars_ui/test_ekos_meridianflip_base.cpp |  63 ++--
- kstars/auxiliary/ksutils.cpp                  |  11 +
- kstars/ekos/align/align.cpp                   |  22 +-
- kstars/ekos/align/opsalign.ui                 |   7 +-
- kstars/ekos/align/opsprograms.cpp             |  30 +-
- kstars/ekos/align/opsprograms.ui              |  30 +-
- .../ekos/auxiliary/stellarsolverprofile.cpp   |  50 +--
- .../auxiliary/stellarsolverprofileeditor.cpp  |   9 +-
- .../auxiliary/stellarsolverprofileeditor.ui   | 288 +++++++++++-------
- kstars/fitsviewer/fitssepdetector.cpp         |   6 +-
- kstars/fitsviewer/structuredefinitions.h      |  84 +++--
- kstars/kstars.kcfg                            |   5 +
- 14 files changed, 387 insertions(+), 237 deletions(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 5e83ddb47..aabba563e 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -215,7 +215,7 @@ MACRO_BOOL_TO_01(INDI_FOUND HAVE_INDI)
- set_package_properties(INDI PROPERTIES DESCRIPTION "Astronomical instrumentation control" URL "https://www.indilib.org" TYPE OPTIONAL PURPOSE "Support for controlling astronomical devices on Linux with KStars.")
- 
- if (INDI_FOUND AND NOT ANDROID)
--    find_package(StellarSolver REQUIRED)
-+    find_package(StellarSolver REQUIRED 2.0)
- endif(INDI_FOUND AND NOT ANDROID)
- MACRO_BOOL_TO_01(StellarSolver_FOUND HAVE_STELLARSOLVER)
- 
-diff --git a/Tests/kstars_ui/test_ekos_align.cpp b/Tests/kstars_ui/test_ekos_align.cpp
-index 4e5a9f482..a04aff562 100644
---- a/Tests/kstars_ui/test_ekos_align.cpp
-+++ b/Tests/kstars_ui/test_ekos_align.cpp
-@@ -266,7 +266,7 @@ void TestEkosAlign::prepareTestCase()
-     // select StellarSolver
-     Options::setSolverType(SSolver::SOLVER_LOCALASTROMETRY);
-     // select fast solve profile option
--    Options::setSolveOptionsProfile(SSolver::Parameters::FAST_SOLVING);
-+    Options::setSolveOptionsProfile(SSolver::Parameters::DEFAULT);
-     // select the "Slew to Target" mode
-     KTRY_SET_RADIOBUTTON(ekos->alignModule(), slewR, true);
-     // reduce the accuracy to avoid testing problems
-@@ -305,7 +305,8 @@ void TestEkosAlign::init()
-     image_count  = 0;
- }
- 
--void TestEkosAlign::cleanup() {
-+void TestEkosAlign::cleanup()
-+{
-     Ekos::Manager *ekos = Ekos::Manager::Instance();
-     Ekos::Scheduler *scheduler = ekos->schedulerModule();
-     // press stop button if running
-@@ -440,10 +441,13 @@ bool TestEkosAlign::executeAlignment(SkyObject *targetObject)
- bool TestEkosAlign::verifyAlignmentTarget(SkyObject *targetObject)
- {
-     QList<double> alignmentTarget = Ekos::Manager::Instance()->alignModule()->getTargetCoords();
--    KVERIFY2_SUB(std::abs(alignmentTarget[0] - targetObject->ra0().Hours()) < 0.005, // difference small enough to capture JNow/J2000 errors
--            QString("RA target J2000 deviation too big: %1 received, %2 expected.").arg(alignmentTarget[0]).arg(targetObject->ra0().Hours()).toLocal8Bit());
-+    KVERIFY2_SUB(std::abs(alignmentTarget[0] - targetObject->ra0().Hours()) <
-+                 0.005, // difference small enough to capture JNow/J2000 errors
-+                 QString("RA target J2000 deviation too big: %1 received, %2 expected.").arg(alignmentTarget[0]).arg(
-+                     targetObject->ra0().Hours()).toLocal8Bit());
-     KVERIFY2_SUB(std::abs(alignmentTarget[1] - targetObject->dec0().Degrees()) < 0.005,
--            QString("DEC target J2000 deviation too big: %1 received, %2 expected.").arg(alignmentTarget[1]).arg(targetObject->dec0().Degrees()).toLocal8Bit());
-+                 QString("DEC target J2000 deviation too big: %1 received, %2 expected.").arg(alignmentTarget[1]).arg(
-+                     targetObject->dec0().Degrees()).toLocal8Bit());
-     // success
-     return true;
- }
-@@ -460,7 +464,8 @@ bool TestEkosAlign::alignWithScheduler(SkyObject *targetObject, QString fitsTarg
-     const QString sequenceFile = TestEkosSchedulerHelper::getDefaultEsqContent();
-     const QString esqFile = testDir->filePath(QString("test.esq"));
-     // create the scheduler file
--    const QString schedulerFile = TestEkosSchedulerHelper::getSchedulerFile(targetObject, startupCondition, 1, {true, false, true, false}, false, false, 30, fitsTarget);
-+    const QString schedulerFile = TestEkosSchedulerHelper::getSchedulerFile(targetObject, startupCondition, 1, {true, false, true, false},
-+                                  false, false, 30, fitsTarget);
-     const QString eslFile = testDir->filePath(QString("test.esl"));
-     // write both files to the test directory
-     KVERIFY_SUB(TestEkosSchedulerHelper::writeSimpleSequenceFiles(schedulerFile, eslFile, sequenceFile, esqFile));
-diff --git a/Tests/kstars_ui/test_ekos_meridianflip_base.cpp b/Tests/kstars_ui/test_ekos_meridianflip_base.cpp
-index ea58b07fa..c97486558 100644
---- a/Tests/kstars_ui/test_ekos_meridianflip_base.cpp
-+++ b/Tests/kstars_ui/test_ekos_meridianflip_base.cpp
-@@ -23,7 +23,8 @@
- #include "ekos/guide/internalguide/gmath.h"
- #include "Options.h"
- 
--TestEkosMeridianFlipBase::TestEkosMeridianFlipBase(QObject *parent) : TestEkosMeridianFlipBase::TestEkosMeridianFlipBase("Internal", parent){}
-+TestEkosMeridianFlipBase::TestEkosMeridianFlipBase(QObject *parent) :
-+    TestEkosMeridianFlipBase::TestEkosMeridianFlipBase("Internal", parent) {}
- 
- TestEkosMeridianFlipBase::TestEkosMeridianFlipBase(QString guider, QObject *parent) : QObject(parent)
- {
-@@ -88,7 +89,7 @@ bool TestEkosMeridianFlipBase::startEkosProfile()
-     // select StellarSolver
-     Options::setSolverType(SSolver::SOLVER_LOCALASTROMETRY);
-     // select fast solve profile option
--    Options::setSolveOptionsProfile(SSolver::Parameters::FAST_SOLVING);
-+    Options::setSolveOptionsProfile(SSolver::Parameters::DEFAULT);
-     // select the "Slew to Target" mode
-     KTRY_SET_RADIOBUTTON_SUB(ekos->alignModule(), slewR, true);
- 
-@@ -245,8 +246,9 @@ void TestEkosMeridianFlipBase::cleanup()
-  *
-  * ********************************************************************************* */
- 
--void TestEkosMeridianFlipBase::prepareTestData(double exptime, QList<QString> locationList, QList<bool> culminationList, QList<QString> filterList,
--                                               QList<bool> focusList, QList<bool> autofocusList, QList<bool> guideList, QList<bool> ditherList)
-+void TestEkosMeridianFlipBase::prepareTestData(double exptime, QList<QString> locationList, QList<bool> culminationList,
-+        QList<QString> filterList,
-+        QList<bool> focusList, QList<bool> autofocusList, QList<bool> guideList, QList<bool> ditherList)
- {
- #if QT_VERSION < QT_VERSION_CHECK(5,9,0)
-     QSKIP("Bypassing fixture test on old Qt");
-@@ -321,7 +323,7 @@ bool TestEkosMeridianFlipBase::positionMountForMF(int secsToMF, bool fast)
-     // calculate a feasible declination depending to the location's latitude
-     // for the upper culmination, we use an azimuth of 45 deg, for the lower culmination half way between pole and horizont
-     double lat = KStarsData::Instance()->geo()->lat()->Degrees();
--    target = new SkyPoint(range24(meridianRA + delta), culmination ? (lat-45) : (90-lat/2));
-+    target = new SkyPoint(range24(meridianRA + delta), culmination ? (lat - 45) : (90 - lat / 2));
- 
-     if (fast)
-     {
-@@ -414,7 +416,7 @@ bool TestEkosMeridianFlipBase::prepareCaptureTestcase(int secsToMF, bool initial
- }
- 
- bool TestEkosMeridianFlipBase::prepareSchedulerTestcase(int secsToMF, bool useFocus,
--                                                        SchedulerJob::CompletionCondition completionCondition, int iterations)
-+        SchedulerJob::CompletionCondition completionCondition, int iterations)
- {
- #if QT_VERSION < QT_VERSION_CHECK(5,9,0)
-     QSKIP("Bypassing fixture test on old Qt");
-@@ -453,18 +455,19 @@ bool TestEkosMeridianFlipBase::prepareSchedulerTestcase(int secsToMF, bool useFo
-     Options::setStopEkosAfterShutdown(false);
- 
-     // set the completion condition
--    switch (completionCondition) {
--    case SchedulerJob::FINISH_REPEAT:
--        // repeat the job for a fixed amount
--        KTRY_SET_RADIOBUTTON_SUB(scheduler, repeatCompletionR, true);
--        KTRY_SET_SPINBOX_SUB(scheduler, repeatsSpin, iterations);
--        break;
--    case SchedulerJob::FINISH_LOOP:
--        KTRY_SET_RADIOBUTTON_SUB(scheduler, loopCompletionR, true);
--        break;
--    default:
--        QWARN(QString("Unsupported completion condition %1!").arg(completionCondition).toStdString().c_str());
--        return false;
-+    switch (completionCondition)
-+    {
-+        case SchedulerJob::FINISH_REPEAT:
-+            // repeat the job for a fixed amount
-+            KTRY_SET_RADIOBUTTON_SUB(scheduler, repeatCompletionR, true);
-+            KTRY_SET_SPINBOX_SUB(scheduler, repeatsSpin, iterations);
-+            break;
-+        case SchedulerJob::FINISH_LOOP:
-+            KTRY_SET_RADIOBUTTON_SUB(scheduler, loopCompletionR, true);
-+            break;
-+        default:
-+            QWARN(QString("Unsupported completion condition %1!").arg(completionCondition).toStdString().c_str());
-+            return false;
-     }
-     // add scheduler job
-     KTRY_CLICK_SUB(scheduler, addToQueueB);
-@@ -511,7 +514,8 @@ bool TestEkosMeridianFlipBase::checkRefocusing()
-     KVERIFY_EMPTY_QUEUE_WITH_TIMEOUT_SUB(m_CaptureHelper->expectedFocusStates, 30000);
-     // check if focus completion is reached (successful or not)
-     if (refocus_checked || autofocus_checked)
--        KTRY_VERIFY_WITH_TIMEOUT_SUB(m_CaptureHelper->getFocusStatus() == Ekos::FOCUS_COMPLETE || m_CaptureHelper->getFocusStatus() == Ekos::FOCUS_FAILED ||
-+        KTRY_VERIFY_WITH_TIMEOUT_SUB(m_CaptureHelper->getFocusStatus() == Ekos::FOCUS_COMPLETE
-+                                     || m_CaptureHelper->getFocusStatus() == Ekos::FOCUS_FAILED ||
-                                      m_CaptureHelper->getFocusStatus() == Ekos::FOCUS_ABORTED, 120000);
-     // focusing might have suspended guiding
-     if (m_CaptureHelper->use_guiding)
-@@ -554,7 +558,8 @@ bool TestEkosMeridianFlipBase::stopAligning()
-     // stop alignment
-     KTRY_GADGET_SUB(Ekos::Manager::Instance()->alignModule(), QPushButton, stopB);
-     KTRY_CLICK_SUB(Ekos::Manager::Instance()->alignModule(), stopB);
--    KTRY_VERIFY_WITH_TIMEOUT_SUB(m_CaptureHelper->getAlignStatus() == Ekos::ALIGN_IDLE || m_CaptureHelper->getAlignStatus() == Ekos::ALIGN_ABORTED ||
-+    KTRY_VERIFY_WITH_TIMEOUT_SUB(m_CaptureHelper->getAlignStatus() == Ekos::ALIGN_IDLE
-+                                 || m_CaptureHelper->getAlignStatus() == Ekos::ALIGN_ABORTED ||
-                                  m_CaptureHelper->getAlignStatus() == Ekos::ALIGN_FAILED || m_CaptureHelper->getAlignStatus() == Ekos::ALIGN_COMPLETE, 5000);
-     // all checks succeeded
-     return true;
-@@ -581,8 +586,10 @@ bool TestEkosMeridianFlipBase::startCapturing()
-     KWRAP_SUB(KTRY_SWITCH_TO_MODULE_WITH_TIMEOUT(Ekos::Manager::Instance()->captureModule(), 1000));
- 
-     // check if capture is in a stopped state
--    KWRAP_SUB(QVERIFY(m_CaptureHelper->getCaptureStatus() == Ekos::CAPTURE_IDLE || m_CaptureHelper->getCaptureStatus() == Ekos::CAPTURE_ABORTED
--                      || m_CaptureHelper->getCaptureStatus() == Ekos::CAPTURE_SUSPENDED|| m_CaptureHelper->getCaptureStatus() == Ekos::CAPTURE_COMPLETE));
-+    KWRAP_SUB(QVERIFY(m_CaptureHelper->getCaptureStatus() == Ekos::CAPTURE_IDLE
-+                      || m_CaptureHelper->getCaptureStatus() == Ekos::CAPTURE_ABORTED
-+                      || m_CaptureHelper->getCaptureStatus() == Ekos::CAPTURE_SUSPENDED
-+                      || m_CaptureHelper->getCaptureStatus() == Ekos::CAPTURE_COMPLETE));
- 
-     // press start
-     m_CaptureHelper->expectedCaptureStates.enqueue(Ekos::CAPTURE_CAPTURING);
-@@ -599,7 +606,8 @@ bool TestEkosMeridianFlipBase::startCapturing()
- bool TestEkosMeridianFlipBase::stopCapturing()
- {
-     // check if capture is in a stopped state
--    if (m_CaptureHelper->getCaptureStatus() == Ekos::CAPTURE_IDLE || m_CaptureHelper->getCaptureStatus() == Ekos::CAPTURE_ABORTED ||
-+    if (m_CaptureHelper->getCaptureStatus() == Ekos::CAPTURE_IDLE
-+            || m_CaptureHelper->getCaptureStatus() == Ekos::CAPTURE_ABORTED ||
-             m_CaptureHelper->getCaptureStatus() == Ekos::CAPTURE_COMPLETE)
-         return true;
- 
-@@ -629,7 +637,8 @@ bool TestEkosMeridianFlipBase::startScheduler()
- 
-     // switch to the scheduler module and start
-     KWRAP_SUB(KTRY_SWITCH_TO_MODULE_WITH_TIMEOUT(scheduler, 1000));
--    KVERIFY_SUB(m_CaptureHelper->getSchedulerStatus() == Ekos::SCHEDULER_IDLE || m_CaptureHelper->getSchedulerStatus() == Ekos::SCHEDULER_ABORTED);
-+    KVERIFY_SUB(m_CaptureHelper->getSchedulerStatus() == Ekos::SCHEDULER_IDLE
-+                || m_CaptureHelper->getSchedulerStatus() == Ekos::SCHEDULER_ABORTED);
-     KTRY_CLICK_SUB(scheduler, startB);
- 
-     // check mount slew and tracking
-@@ -648,7 +657,8 @@ bool TestEkosMeridianFlipBase::stopScheduler()
-     Ekos::Scheduler *scheduler = Ekos::Manager::Instance()->schedulerModule();
-     // switch to the capture module
-     KWRAP_SUB(KTRY_SWITCH_TO_MODULE_WITH_TIMEOUT(scheduler, 1000));
--    if (m_CaptureHelper->getSchedulerStatus() == Ekos::SCHEDULER_RUNNING || m_CaptureHelper->getSchedulerStatus() == Ekos::SCHEDULER_PAUSED)
-+    if (m_CaptureHelper->getSchedulerStatus() == Ekos::SCHEDULER_RUNNING
-+            || m_CaptureHelper->getSchedulerStatus() == Ekos::SCHEDULER_PAUSED)
-         KTRY_CLICK_SUB(scheduler, startB);
-     // all checks succeeded
-     return true;
-@@ -705,7 +715,8 @@ bool TestEkosMeridianFlipBase::stopFocusing()
-     KTRY_GADGET_SUB(Ekos::Manager::Instance()->focusModule(), QPushButton, stopFocusB);
-     if (stopFocusB->isEnabled())
-         KTRY_CLICK_SUB(Ekos::Manager::Instance()->focusModule(), stopFocusB);
--    KTRY_VERIFY_WITH_TIMEOUT_SUB(m_CaptureHelper->getFocusStatus() == Ekos::FOCUS_IDLE || m_CaptureHelper->getFocusStatus() == Ekos::FOCUS_COMPLETE ||
-+    KTRY_VERIFY_WITH_TIMEOUT_SUB(m_CaptureHelper->getFocusStatus() == Ekos::FOCUS_IDLE
-+                                 || m_CaptureHelper->getFocusStatus() == Ekos::FOCUS_COMPLETE ||
-                                  m_CaptureHelper->getFocusStatus() == Ekos::FOCUS_ABORTED || m_CaptureHelper->getFocusStatus() == Ekos::FOCUS_FAILED, 15000);
- 
-     // all checks succeeded
-diff --git a/kstars/auxiliary/ksutils.cpp b/kstars/auxiliary/ksutils.cpp
-index 1b9b53f6a..81fd06134 100644
---- a/kstars/auxiliary/ksutils.cpp
-+++ b/kstars/auxiliary/ksutils.cpp
-@@ -1165,6 +1165,17 @@ QString getDefaultPath(const QString &option)
- #endif
-         return prefix + "/bin/solve-field";
-     }
-+    else if (option == "WatneyBinary")
-+    {
-+    #if defined(ASTROMETRY_PREFIX)
-+            return QString(ASTROMETRY_PREFIX "/bin/watney-solver");
-+    #elif defined(Q_OS_OSX)
-+            return "/usr/local/bin/watney-solver";
-+    #elif defined(Q_OS_WIN)
-+            return "C:/Program Files/watney-solve-win-x64-1/watney-solve.exe";
-+    #endif
-+            return prefix + "/bin/watney-solver";
-+    }
-     else if (option == "SextractorBinary")
-     {
- #if defined(SEXTRACTOR_PREFIX)
-diff --git a/kstars/ekos/align/align.cpp b/kstars/ekos/align/align.cpp
-index 859ac6b01..2abcbb663 100644
---- a/kstars/ekos/align/align.cpp
-+++ b/kstars/ekos/align/align.cpp
-@@ -1867,7 +1867,7 @@ void Align::startSolving()
- 
-     if (solverModeButtonGroup->checkedId() == SOLVER_LOCAL)
-     {
--        if(Options::solverType() != SSolver::SOLVER_ASTAP) //You don't need astrometry index files to use ASTAP
-+        if(Options::solverType() != SSolver::SOLVER_ASTAP && Options::solverType() != SSolver::SOLVER_WATNEYASTROMETRY) //You don't need astrometry index files to use ASTAP or Watney
-         {
-             bool foundAnIndex = false;
-             for(QString dataDir : astrometryDataDirs)
-@@ -1916,16 +1916,20 @@ void Align::startSolving()
-         m_StellarSolver->setParameters(m_StellarSolverProfiles.at(Options::solveOptionsProfile()));
- 
-         const SSolver::SolverType type = static_cast<SSolver::SolverType>(m_StellarSolver->property("SolverType").toInt());
--        if(type == SSolver::SOLVER_LOCALASTROMETRY || type == SSolver::SOLVER_ASTAP)
-+        if(type == SSolver::SOLVER_LOCALASTROMETRY || type == SSolver::SOLVER_ASTAP || type == SSolver::SOLVER_WATNEYASTROMETRY)
-         {
-             QString filename = QDir::tempPath() + QString("/solver%1.fits").arg(QUuid::createUuid().toString().remove(
-                                    QRegularExpression("[-{}]")));
-             alignView->saveImage(filename);
-             m_StellarSolver->setProperty("FileToProcess", filename);
--            m_StellarSolver->setProperty("SextractorBinaryPath", Options::sextractorBinary());
--            m_StellarSolver->setProperty("SolverPath", Options::astrometrySolverBinary());
--            m_StellarSolver->setProperty("ASTAPBinaryPath", Options::aSTAPExecutable());
--            m_StellarSolver->setProperty("WCSPath", Options::astrometryWCSInfo());
-+            ExternalProgramPaths externalPaths;
-+            externalPaths.sextractorBinaryPath = Options::sextractorBinary();
-+            externalPaths.solverPath = Options::astrometrySolverBinary();
-+            externalPaths.astapBinaryPath = Options::aSTAPExecutable();
-+            externalPaths.watneyBinaryPath = Options::watneyBinary();
-+            externalPaths.wcsPath = Options::astrometryWCSInfo();
-+            m_StellarSolver->setExternalFilePaths(externalPaths);
-+
- 
-             //No need for a conf file this way.
-             m_StellarSolver->setProperty("AutoGenerateAstroConfig", true);
-@@ -2011,10 +2015,6 @@ void Align::startSolving()
-             m_StellarSolver->setSSLogLevel(SSolver::LOG_OFF);
-         }
- 
--        //Unless we decide to load the WCS Coord, let's turn it off.
--        //Be sure to set this to true instead if we want WCS from the solve.
--        m_StellarSolver->setLoadWCS(false);
--
-         // Start solving process
-         m_StellarSolver->start();
-     }
-@@ -2047,7 +2047,7 @@ void Align::solverComplete()
-     {
-         FITSImage::Solution solution = m_StellarSolver->getSolution();
-         // Would be better if parity was a bool field instead of a QString with "pos" and "neg" as possible values.
--        const bool eastToTheRight = solution.parity == "pos" ? false : true;
-+        const bool eastToTheRight = solution.parity == FITSImage::POSITIVE? false : true;
-         solverFinished(solution.orientation, solution.ra, solution.dec, solution.pixscale, eastToTheRight);
-     }
- }
-diff --git a/kstars/ekos/align/opsalign.ui b/kstars/ekos/align/opsalign.ui
-index b472917a2..808b05e8c 100644
---- a/kstars/ekos/align/opsalign.ui
-+++ b/kstars/ekos/align/opsalign.ui
-@@ -6,7 +6,7 @@
-    <rect>
-     <x>0</x>
-     <y>0</y>
--    <width>444</width>
-+    <width>470</width>
-     <height>179</height>
-    </rect>
-   </property>
-@@ -108,6 +108,11 @@
-           <string>Local ASTAP</string>
-          </property>
-         </item>
-+        <item>
-+         <property name="text">
-+          <string>Local Watney</string>
-+         </property>
-+        </item>
-         <item>
-          <property name="text">
-           <string>Online Astrometry</string>
-diff --git a/kstars/ekos/align/opsprograms.cpp b/kstars/ekos/align/opsprograms.cpp
-index ff76214a5..f0e7e467b 100644
---- a/kstars/ekos/align/opsprograms.cpp
-+++ b/kstars/ekos/align/opsprograms.cpp
-@@ -43,37 +43,15 @@ void OpsPrograms::slotApply()
- 
- void OpsPrograms::loadDefaultPaths(int option)
- {
--    ExternalProgramPaths paths;
--
--    switch(option)
--    {
--        case 0:
--            return;
--            break;
--        case 1:
--            paths = StellarSolver::getLinuxDefaultPaths();
--            break;
--        case 2:
--            paths = StellarSolver::getLinuxInternalPaths();
--            break;
--        case 3:
--            paths = StellarSolver::getMacHomebrewPaths();
--            break;
--        case 4:
--            paths = StellarSolver::getWinANSVRPaths();
--            break;
--        case 5:
--            paths = StellarSolver::getWinCygwinPaths();
--            break;
--        default:
--            paths = StellarSolver::getLinuxDefaultPaths();
--            break;
--    }
-+    if(option == 0)
-+        return;
-+    ExternalProgramPaths paths = StellarSolver::getDefaultExternalPaths((SSolver::ComputerSystemType) (option - 1));
- 
-     kcfg_SextractorBinary->setText(paths.sextractorBinaryPath);
-     kcfg_AstrometryConfFile->setText(paths.confPath);
-     kcfg_AstrometrySolverBinary->setText(paths.solverPath);
-     kcfg_ASTAPExecutable->setText(paths.astapBinaryPath);
-+    kcfg_WatneyBinary->setText(paths.watneyBinaryPath);
-     kcfg_AstrometryWCSInfo->setText(paths.wcsPath);
- 
-     defaultPathSelector->setCurrentIndex(0);
-diff --git a/kstars/ekos/align/opsprograms.ui b/kstars/ekos/align/opsprograms.ui
-index fcf59bcea..032d56af8 100644
---- a/kstars/ekos/align/opsprograms.ui
-+++ b/kstars/ekos/align/opsprograms.ui
-@@ -7,7 +7,7 @@
-     <x>0</x>
-     <y>0</y>
-     <width>658</width>
--    <height>481</height>
-+    <height>517</height>
-    </rect>
-   </property>
-   <layout class="QVBoxLayout" name="verticalLayout">
-@@ -169,6 +169,32 @@
-      </layout>
-     </widget>
-    </item>
-+   <item>
-+    <widget class="QGroupBox" name="groupBox_6">
-+     <property name="title">
-+      <string>Watney Solver</string>
-+     </property>
-+     <layout class="QGridLayout" name="gridLayout_5">
-+      <item row="0" column="0">
-+       <widget class="QLabel" name="label_21">
-+        <property name="text">
-+         <string>Watney binary:</string>
-+        </property>
-+       </widget>
-+      </item>
-+      <item row="0" column="1">
-+       <widget class="QLineEdit" name="kcfg_WatneyBinary">
-+        <property name="toolTip">
-+         <string>Astrometry.net solve-field binary</string>
-+        </property>
-+        <property name="text">
-+         <string/>
-+        </property>
-+       </widget>
-+      </item>
-+     </layout>
-+    </widget>
-+   </item>
-    <item>
-     <widget class="QGroupBox" name="groupBox_3">
-      <property name="title">
-@@ -262,4 +288,4 @@
-  </widget>
-  <resources/>
-  <connections/>
--</ui>
-+</ui>
-\ No newline at end of file
-diff --git a/kstars/ekos/auxiliary/stellarsolverprofile.cpp b/kstars/ekos/auxiliary/stellarsolverprofile.cpp
-index 909ae58ed..7109df6e4 100644
---- a/kstars/ekos/auxiliary/stellarsolverprofile.cpp
-+++ b/kstars/ekos/auxiliary/stellarsolverprofile.cpp
-@@ -24,8 +24,8 @@ QList<Parameters> getDefaultFocusOptionsProfiles()
-     focusDefault.keepNum = 100;
-     focusDefault.minarea = 20;
-     focusDefault.maxEllipse = 1.5;
--    // JM 2021.10.03: Seems to be a lot more reliable than 2 FWHM
--    StellarSolver::createConvFilterFromFWHM(&focusDefault, 1);
-+    focusDefault.convFilterType = SSolver::CONV_GAUSSIAN;
-+    focusDefault.fwhm = 1;
-     focusDefault.r_min = 5;
-     focusDefault.maxSize = 10;
-     focusDefault.removeBrightest = 10;
-@@ -37,7 +37,8 @@ QList<Parameters> getDefaultFocusOptionsProfiles()
-     stars.listName = "2-AllStars";
-     stars.description = i18n("Profile for the source extraction of all the stars in an image.");
-     stars.maxEllipse = 1.5;
--    StellarSolver::createConvFilterFromFWHM(&stars, 1);
-+    stars.convFilterType = SSolver::CONV_GAUSSIAN;
-+    stars.fwhm = 1;
-     stars.r_min = 2;
-     profileList.append(stars);
- 
-@@ -45,7 +46,8 @@ QList<Parameters> getDefaultFocusOptionsProfiles()
-     smallStars.listName = "3-SmallSizedStars";
-     smallStars.description = i18n("Profile optimized for source extraction of smaller stars.");
-     smallStars.maxEllipse = 1.5;
--    StellarSolver::createConvFilterFromFWHM(&smallStars, 1);
-+    smallStars.convFilterType = SSolver::CONV_GAUSSIAN;
-+    smallStars.fwhm = 1;
-     smallStars.r_min = 2;
-     smallStars.maxSize = 5;
-     smallStars.initialKeep = 500;
-@@ -57,7 +59,8 @@ QList<Parameters> getDefaultFocusOptionsProfiles()
-     mid.description = i18n("Profile optimized for source extraction of medium sized stars.");
-     mid.maxEllipse = 1.5;
-     mid.minarea = 20;
--    StellarSolver::createConvFilterFromFWHM(&mid, 4);
-+    mid.convFilterType = SSolver::CONV_GAUSSIAN;
-+    mid.fwhm = 4;
-     mid.r_min = 5;
-     mid.removeDimmest = 20;
-     mid.minSize = 2;
-@@ -71,7 +74,8 @@ QList<Parameters> getDefaultFocusOptionsProfiles()
-     big.description = i18n("Profile optimized for source extraction of larger stars.");
-     big.maxEllipse = 1.5;
-     big.minarea = 40;
--    StellarSolver::createConvFilterFromFWHM(&big, 8);
-+    big.convFilterType = SSolver::CONV_GAUSSIAN;
-+    big.fwhm = 8;
-     big.r_min = 20;
-     big.minSize = 5;
-     big.initialKeep = 500;
-@@ -101,7 +105,8 @@ QList<SSolver::Parameters> getDefaultGuideOptionsProfiles()
-     stars.listName = "2-AllStars";
-     stars.description = i18n("Profile for the source extraction of all the stars in an image.");
-     stars.maxEllipse = 1.5;
--    StellarSolver::createConvFilterFromFWHM(&stars, 1);
-+    stars.convFilterType = SSolver::CONV_GAUSSIAN;
-+    stars.fwhm = 1;
-     stars.r_min = 2;
-     profileList.append(stars);
- 
-@@ -109,7 +114,8 @@ QList<SSolver::Parameters> getDefaultGuideOptionsProfiles()
-     smallStars.listName = "3-SmallSizedStars";
-     smallStars.description = i18n("Profile optimized for source extraction of smaller stars.");
-     smallStars.maxEllipse = 1.5;
--    StellarSolver::createConvFilterFromFWHM(&smallStars, 1);
-+    smallStars.convFilterType = SSolver::CONV_GAUSSIAN;
-+    smallStars.fwhm = 1;
-     smallStars.r_min = 2;
-     smallStars.maxSize = 5;
-     smallStars.initialKeep = 500;
-@@ -121,7 +127,8 @@ QList<SSolver::Parameters> getDefaultGuideOptionsProfiles()
-     mid.description = i18n("Profile optimized for source extraction of medium sized stars.");
-     mid.maxEllipse = 1.5;
-     mid.minarea = 20;
--    StellarSolver::createConvFilterFromFWHM(&mid, 4);
-+    mid.convFilterType = SSolver::CONV_GAUSSIAN;
-+    mid.fwhm = 4;
-     mid.r_min = 5;
-     mid.removeDimmest = 20;
-     mid.minSize = 2;
-@@ -135,7 +142,8 @@ QList<SSolver::Parameters> getDefaultGuideOptionsProfiles()
-     big.description = i18n("Profile optimized for source extraction of larger stars.");
-     big.maxEllipse = 1.5;
-     big.minarea = 40;
--    StellarSolver::createConvFilterFromFWHM(&big, 8);
-+    big.convFilterType = SSolver::CONV_GAUSSIAN;
-+    big.fwhm = 8;
-     big.r_min = 20;
-     big.minSize = 5;
-     big.initialKeep = 500;
-@@ -152,8 +160,8 @@ QList<SSolver::Parameters> getDefaultAlignOptionsProfiles()
-     SSolver::Parameters defaultProfile;
-     defaultProfile.listName = "1-Default";
-     defaultProfile.description = i18n("Default profile. Generic and not optimized for any specific purpose.");
--    // JM 2021.10.03: Seems to help in cases where solver fails to solve any images.
--    StellarSolver::createConvFilterFromFWHM(&defaultProfile, 1);
-+    defaultProfile.convFilterType = SSolver::CONV_GAUSSIAN;
-+    defaultProfile.fwhm = 1;
-     profileList.append(defaultProfile);
- 
-     SSolver::Parameters fastSolving;
-@@ -165,7 +173,8 @@ QList<SSolver::Parameters> getDefaultAlignOptionsProfiles()
-     fastSolving.keepNum = 50;
-     fastSolving.initialKeep = 500;
-     fastSolving.maxEllipse = 1.5;
--    StellarSolver::createConvFilterFromFWHM(&fastSolving, 4);
-+    fastSolving.convFilterType = SSolver::CONV_GAUSSIAN;
-+    fastSolving.fwhm = 4;
-     profileList.append(fastSolving);
- 
-     SSolver::Parameters parLargeSolving;
-@@ -176,7 +185,8 @@ QList<SSolver::Parameters> getDefaultAlignOptionsProfiles()
-     parLargeSolving.keepNum = 50;
-     parLargeSolving.initialKeep = 500;
-     parLargeSolving.maxEllipse = 1.5;
--    StellarSolver::createConvFilterFromFWHM(&parLargeSolving, 4);
-+    parLargeSolving.convFilterType = SSolver::CONV_GAUSSIAN;
-+    parLargeSolving.fwhm = 4;
-     profileList.append(parLargeSolving);
- 
-     SSolver::Parameters fastSmallSolving;
-@@ -187,7 +197,8 @@ QList<SSolver::Parameters> getDefaultAlignOptionsProfiles()
-     fastSmallSolving.keepNum = 50;
-     fastSmallSolving.initialKeep = 500;
-     fastSmallSolving.maxEllipse = 1.5;
--    StellarSolver::createConvFilterFromFWHM(&fastSmallSolving, 4);
-+    fastSmallSolving.convFilterType = SSolver::CONV_GAUSSIAN;
-+    fastSmallSolving.fwhm = 4;
-     profileList.append(fastSmallSolving);
- 
-     return profileList;
-@@ -205,7 +216,8 @@ QList<Parameters> getDefaultHFROptionsProfiles()
- 
-     hfrDefault.minarea = 20;
-     hfrDefault.maxEllipse = 1.5;
--    StellarSolver::createConvFilterFromFWHM(&hfrDefault, 2);
-+    hfrDefault.convFilterType = SSolver::CONV_GAUSSIAN;
-+    hfrDefault.fwhm = 2;
-     hfrDefault.r_min = 5;
-     hfrDefault.maxSize = 10;
- 
-@@ -224,7 +236,8 @@ QList<Parameters> getDefaultHFROptionsProfiles()
- 
-     big.minarea = 40;
-     big.maxEllipse = 1.5;
--    StellarSolver::createConvFilterFromFWHM(&big, 8);
-+    big.convFilterType = SSolver::CONV_GAUSSIAN;
-+    big.fwhm = 8;
-     big.r_min = 20;
-     big.maxSize = 0;
- 
-@@ -242,7 +255,8 @@ QList<Parameters> getDefaultHFROptionsProfiles()
- 
-     most.minarea = 10;
-     most.maxEllipse = 0;
--    StellarSolver::createConvFilterFromFWHM(&most, 1);
-+    most.convFilterType = SSolver::CONV_GAUSSIAN;
-+    most.fwhm = 1;
-     most.r_min = 3.5;
-     most.minSize = 0;
-     most.maxSize = 0;
-diff --git a/kstars/ekos/auxiliary/stellarsolverprofileeditor.cpp b/kstars/ekos/auxiliary/stellarsolverprofileeditor.cpp
-index c80b7725a..e33c1da30 100644
---- a/kstars/ekos/auxiliary/stellarsolverprofileeditor.cpp
-+++ b/kstars/ekos/auxiliary/stellarsolverprofileeditor.cpp
-@@ -241,14 +241,16 @@ SSolver::Parameters StellarSolverProfileEditor::getSettingsFromUI()
-     params.kron_fact = kron_fact->text().toDouble();
-     params.subpix = subpix->text().toInt() ;
-     params.r_min = r_min->text().toFloat();
--    //params.inflags
-     params.magzero = magzero->text().toFloat();
-+    params.threshold_bg_multiple = threshMultiple->text().toFloat();
-+    params.threshold_offset = threshOffset->text().toFloat();
-     params.minarea = minarea->text().toFloat();
-     params.deblend_thresh = deblend_thresh->text().toInt();
-     params.deblend_contrast = deblend_contrast->text().toFloat();
-     params.clean = (cleanCheckBox->isChecked()) ? 1 : 0;
-     params.clean_param = clean_param->text().toDouble();
--    StellarSolver::createConvFilterFromFWHM(&params, fwhm->value());
-+    params.convFilterType = (SSolver::ConvFilterType) convFilter->currentIndex();
-+    params.fwhm = fwhm->value();
- 
-     //Star Filter Settings
-     params.resort = resort->isChecked();
-@@ -289,11 +291,14 @@ void StellarSolverProfileEditor::sendSettingsToUI(SSolver::Parameters a)
-     r_min->setText(QString::number(a.r_min));
- 
-     magzero->setText(QString::number(a.magzero));
-+    threshMultiple->setText(QString::number(a.threshold_bg_multiple));
-+    threshOffset->setText(QString::number(a.threshold_offset));
-     minarea->setText(QString::number(a.minarea));
-     deblend_thresh->setText(QString::number(a.deblend_thresh));
-     deblend_contrast->setText(QString::number(a.deblend_contrast));
-     cleanCheckBox->setChecked(a.clean == 1);
-     clean_param->setText(QString::number(a.clean_param));
-+    convFilter->setCurrentIndex(a.convFilterType);
-     fwhm->setValue(a.fwhm);
- 
-     //Star Filter Settings
-diff --git a/kstars/ekos/auxiliary/stellarsolverprofileeditor.ui b/kstars/ekos/auxiliary/stellarsolverprofileeditor.ui
-index 54e475cbd..c5d6ea85f 100644
---- a/kstars/ekos/auxiliary/stellarsolverprofileeditor.ui
-+++ b/kstars/ekos/auxiliary/stellarsolverprofileeditor.ui
-@@ -347,7 +347,7 @@
-       <property name="spacing">
-        <number>3</number>
-       </property>
--      <item row="3" column="6">
-+      <item row="4" column="6">
-        <widget class="QLineEdit" name="r_min">
-         <property name="toolTip">
-          <string>The minimum radius for stars for flux calculations.</string>
-@@ -357,43 +357,47 @@
-         </property>
-        </widget>
-       </item>
--      <item row="0" column="0" colspan="2">
--       <widget class="QLabel" name="label_38">
--        <property name="sizePolicy">
--         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
--          <horstretch>0</horstretch>
--          <verstretch>0</verstretch>
--         </sizepolicy>
-+      <item row="5" column="3">
-+       <widget class="QSpinBox" name="fwhm">
-+        <property name="toolTip">
-+         <string>A variable to store the fwhm in pixels used to generate the convolution filter for star detection.</string>
-         </property>
--        <property name="text">
--         <string>&lt;a href = &quot;https://sep.readthedocs.io/en/v1.0.x/api/sep.extract.html&quot; &gt;Extraction Params&lt;/a&gt;</string>
-+        <property name="minimum">
-+         <number>1</number>
-         </property>
--        <property name="openExternalLinks">
--         <bool>true</bool>
-+        <property name="maximum">
-+         <number>10</number>
-         </property>
-        </widget>
-       </item>
--      <item row="0" column="2" colspan="2">
--       <widget class="QLabel" name="label_20">
--        <property name="text">
--         <string>&lt;a href=&quot;https://sep.readthedocs.io/en/v1.0.x/api/sep.extract.html&quot;&gt;Deblending Params&lt;/a&gt;</string>
-+      <item row="5" column="6">
-+       <widget class="QLineEdit" name="magzero">
-+        <property name="toolTip">
-+         <string>This is the 'zero' magnitude used for setting the magnitude scale for the stars in the image during sextraction.</string>
-         </property>
--        <property name="openExternalLinks">
--         <bool>true</bool>
-+        <property name="text">
-+         <string>20</string>
-         </property>
-        </widget>
-       </item>
--      <item row="4" column="6">
--       <widget class="QLineEdit" name="magzero">
-+      <item row="3" column="3">
-+       <widget class="QLineEdit" name="deblend_contrast">
-         <property name="toolTip">
--         <string>This is the 'zero' magnitude used for setting the magnitude scale for the stars in the image during sextraction.</string>
-+         <string>The percentage of flux a separate peak must have to be considered a separate object.</string>
-         </property>
-         <property name="text">
--         <string>20</string>
-+         <string>1</string>
-+        </property>
-+       </widget>
-+      </item>
-+      <item row="3" column="2">
-+       <widget class="QLabel" name="label_19">
-+        <property name="text">
-+         <string>Min Cont.</string>
-         </property>
-        </widget>
-       </item>
--      <item row="1" column="6">
-+      <item row="2" column="6">
-        <widget class="QLineEdit" name="kron_fact">
-         <property name="toolTip">
-          <string>This sets the Kron Factor for use with the kron radius for flux calculations.</string>
-@@ -403,47 +407,131 @@
-         </property>
-        </widget>
-       </item>
--      <item row="1" column="0">
--       <widget class="QLabel" name="label_21">
-+      <item row="2" column="5">
-+       <widget class="QLabel" name="label_25">
-         <property name="text">
--         <string>Min Area</string>
-+         <string>Kron Factor</string>
-         </property>
-        </widget>
-       </item>
--      <item row="3" column="0">
--       <widget class="QCheckBox" name="cleanCheckBox">
--        <property name="toolTip">
--         <string>Attempts to 'clean' the image to remove artifacts caused by bright objects</string>
-+      <item row="5" column="2">
-+       <widget class="QLabel" name="label_23">
-+        <property name="text">
-+         <string>Conv FWHM</string>
-         </property>
-+       </widget>
-+      </item>
-+      <item row="5" column="5">
-+       <widget class="QLabel" name="label_15">
-         <property name="text">
--         <string>Clean?</string>
-+         <string>magzero</string>
-         </property>
--        <property name="checked">
--         <bool>true</bool>
-+       </widget>
-+      </item>
-+      <item row="4" column="3">
-+       <widget class="QComboBox" name="convFilter">
-+        <property name="toolTip">
-+         <string>Whether to use the SEP_SUM_ELLIPSE method or the SEP_SUM_CIRCLE method or automatically choose.  NOTE: Circle is usually better at the moment</string>
-         </property>
-+        <property name="currentIndex">
-+         <number>0</number>
-+        </property>
-+        <item>
-+         <property name="text">
-+          <string>Default</string>
-+         </property>
-+        </item>
-+        <item>
-+         <property name="text">
-+          <string>Custom</string>
-+         </property>
-+        </item>
-+        <item>
-+         <property name="text">
-+          <string>Gaussian</string>
-+         </property>
-+        </item>
-+        <item>
-+         <property name="text">
-+          <string>Mexican Hat</string>
-+         </property>
-+        </item>
-+        <item>
-+         <property name="text">
-+          <string>Top Hat</string>
-+         </property>
-+        </item>
-        </widget>
-       </item>
--      <item row="1" column="1">
--       <widget class="QLineEdit" name="minarea">
-+      <item row="2" column="3">
-+       <widget class="QLineEdit" name="deblend_thresh">
-         <property name="toolTip">
--         <string>This is the minimum area in pixels for a star detection, smaller stars are ignored.</string>
-+         <string>The number of thresholds the intensity range is divided up into.</string>
-         </property>
-         <property name="text">
--         <string>5</string>
-+         <string>32</string>
-         </property>
-        </widget>
-       </item>
--      <item row="2" column="1">
--       <widget class="QLineEdit" name="subpix">
-+      <item row="0" column="0" colspan="2">
-+       <widget class="QLabel" name="label_38">
-+        <property name="sizePolicy">
-+         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-+          <horstretch>0</horstretch>
-+          <verstretch>0</verstretch>
-+         </sizepolicy>
-+        </property>
-+        <property name="text">
-+         <string>&lt;a href = &quot;https://sep.readthedocs.io/en/v1.0.x/api/sep.extract.html&quot; &gt;Extraction Params&lt;/a&gt;</string>
-+        </property>
-+        <property name="openExternalLinks">
-+         <bool>true</bool>
-+        </property>
-+       </widget>
-+      </item>
-+      <item row="4" column="5">
-+       <widget class="QLabel" name="label_13">
-+        <property name="text">
-+         <string>r_min</string>
-+        </property>
-+       </widget>
-+      </item>
-+      <item row="3" column="6">
-+       <widget class="QComboBox" name="apertureShape">
-         <property name="toolTip">
--         <string>The subpixel sampling factor for star extraction</string>
-+         <string>Whether to use the SEP_SUM_ELLIPSE method or the SEP_SUM_CIRCLE method or automatically choose.  NOTE: Circle is usually better at the moment</string>
-+        </property>
-+        <property name="currentIndex">
-+         <number>1</number>
-         </property>
-+        <item>
-+         <property name="text">
-+          <string>Auto</string>
-+         </property>
-+        </item>
-+        <item>
-+         <property name="text">
-+          <string>Circle</string>
-+         </property>
-+        </item>
-+        <item>
-+         <property name="text">
-+          <string>Ellipse</string>
-+         </property>
-+        </item>
-+       </widget>
-+      </item>
-+      <item row="0" column="2" colspan="2">
-+       <widget class="QLabel" name="label_20">
-         <property name="text">
--         <string>5</string>
-+         <string>&lt;a href=&quot;https://sep.readthedocs.io/en/v1.0.x/api/sep.extract.html&quot;&gt;Deblending Params&lt;/a&gt;</string>
-+        </property>
-+        <property name="openExternalLinks">
-+         <bool>true</bool>
-         </property>
-        </widget>
-       </item>
--      <item row="1" column="2">
-+      <item row="2" column="2">
-        <widget class="QLabel" name="label_18">
-         <property name="text">
-          <string>Thresh</string>
-@@ -466,38 +554,34 @@
-         </property>
-        </widget>
-       </item>
--      <item row="2" column="0">
--       <widget class="QLabel" name="label_24">
-+      <item row="4" column="2">
-+       <widget class="QLabel" name="label_26">
-         <property name="text">
--         <string>Sub Pix</string>
-+         <string>Conv Filter</string>
-         </property>
-        </widget>
-       </item>
--      <item row="1" column="3">
--       <widget class="QLineEdit" name="deblend_thresh">
--        <property name="toolTip">
--         <string>The number of thresholds the intensity range is divided up into.</string>
--        </property>
-+      <item row="3" column="5">
-+       <widget class="QLabel" name="label_12">
-         <property name="text">
--         <string>32</string>
-+         <string>Shape</string>
-         </property>
-        </widget>
-       </item>
--      <item row="1" column="5">
--       <widget class="QLabel" name="label_25">
--        <property name="text">
--         <string>Kron Factor</string>
-+      <item row="6" column="0">
-+       <widget class="QCheckBox" name="cleanCheckBox">
-+        <property name="toolTip">
-+         <string>Attempts to 'clean' the image to remove artifacts caused by bright objects</string>
-         </property>
--       </widget>
--      </item>
--      <item row="4" column="5">
--       <widget class="QLabel" name="label_15">
-         <property name="text">
--         <string>magzero</string>
-+         <string>Clean?</string>
-+        </property>
-+        <property name="checked">
-+         <bool>true</bool>
*** 305 LINES SKIPPED ***