diff --git a/kstars/ekos/scheduler/scheduler.h b/kstars/ekos/scheduler/scheduler.h
--- a/kstars/ekos/scheduler/scheduler.h
+++ b/kstars/ekos/scheduler/scheduler.h
@@ -372,6 +372,7 @@
void toggleScheduler();
void pause();
+ void setPaused();
void save();
void saveAs();
void load();
diff --git a/kstars/ekos/scheduler/scheduler.cpp b/kstars/ekos/scheduler/scheduler.cpp
--- a/kstars/ekos/scheduler/scheduler.cpp
+++ b/kstars/ekos/scheduler/scheduler.cpp
@@ -185,6 +185,7 @@
startB->setAttribute(Qt::WA_LayoutUsesWidgetRect);
pauseB->setIcon(QIcon::fromTheme("media-playback-pause"));
pauseB->setAttribute(Qt::WA_LayoutUsesWidgetRect);
+ pauseB->setCheckable(false);
connect(startB, &QPushButton::clicked, this, &Scheduler::toggleScheduler);
connect(pauseB, &QPushButton::clicked, this, &Scheduler::pause);
@@ -1285,6 +1286,7 @@
startB->setIcon(QIcon::fromTheme("media-playback-stop"));
startB->setToolTip(i18n("Stop Scheduler"));
pauseB->setEnabled(true);
+ pauseB->setChecked(false);
/* Disable edit-related buttons */
queueLoadB->setEnabled(false);
@@ -1301,21 +1303,27 @@
emit newStatus(state);
schedulerTimer.start();
+ appendLogText(i18n("Scheduler started."));
qCDebug(KSTARS_EKOS_SCHEDULER) << "Scheduler started.";
break;
case SCHEDULER_PAUSED:
/* Update UI to reflect resume */
startB->setIcon(QIcon::fromTheme("media-playback-stop"));
startB->setToolTip(i18n("Stop Scheduler"));
+ pauseB->setEnabled(true);
+ pauseB->setCheckable(false);
+ pauseB->setChecked(false);
/* Edit-related buttons are still disabled */
/* The end-user cannot update the schedule, don't re-evaluate jobs. Timer schedulerTimer is already running. */
state = SCHEDULER_RUNNING;
emit newStatus(state);
+ schedulerTimer.start();
- qCDebug(KSTARS_EKOS_SCHEDULER) << "Scheduler paused.";
+ appendLogText(i18n("Scheduler resuming."));
+ qCDebug(KSTARS_EKOS_SCHEDULER) << "Scheduler resuming.";
break;
default:
@@ -1327,13 +1335,21 @@
{
state = SCHEDULER_PAUSED;
emit newStatus(state);
- appendLogText(i18n("Scheduler paused."));
+ appendLogText(i18n("Scheduler pause planned..."));
pauseB->setEnabled(false);
startB->setIcon(QIcon::fromTheme("media-playback-start"));
startB->setToolTip(i18n("Resume Scheduler"));
}
+void Scheduler::setPaused()
+{
+ pauseB->setCheckable(true);
+ pauseB->setChecked(true);
+ schedulerTimer.stop();
+ appendLogText(i18n("Scheduler paused."));
+}
+
void Scheduler::setCurrentJob(SchedulerJob *job)
{
/* Reset job widgets */
@@ -2938,7 +2954,25 @@
bool Scheduler::checkStatus()
{
if (state == SCHEDULER_PAUSED)
- return true;
+ {
+ if (currentJob == nullptr)
+ {
+ setPaused();
+ return false;
+ }
+ switch (currentJob->getState()) {
+ case SchedulerJob::JOB_BUSY:
+ // do nothing
+ break;
+ case SchedulerJob::JOB_COMPLETE:
+ // start finding next job before pausing
+ break;
+ default:
+ // in all other cases pause
+ setPaused();
+ break;
+ }
+ }
// #1 If no current job selected, let's check if we need to shutdown or evaluate jobs
if (currentJob == nullptr)
@@ -3035,18 +3069,19 @@
if (startupState > STARTUP_SCRIPT && startupState < STARTUP_ERROR && checkStartupState() == false)
return false;
- // #8 Execute the job
- executeJob(currentJob);
+ // #8 Check it it already completed (should only happen starting a paused job)
+ // Find the next job in this case, otherwise execute the current one
+ if (currentJob->getState() == SchedulerJob::JOB_COMPLETE)
+ findNextJob();
+ else
+ executeJob(currentJob);
}
return true;
}
void Scheduler::checkJobStage()
{
- if (state == SCHEDULER_PAUSED)
- return;
-
Q_ASSERT_X(currentJob, __FUNCTION__, "Actual current job is required to check job stage");
if (!currentJob)
return;
@@ -4322,6 +4357,13 @@
void Scheduler::findNextJob()
{
+ if (state == SCHEDULER_PAUSED)
+ {
+ // everything finished, we can pause
+ setPaused();
+ return;
+ }
+
Q_ASSERT_X(currentJob->getState() == SchedulerJob::JOB_ERROR ||
currentJob->getState() == SchedulerJob::JOB_ABORTED ||
currentJob->getState() == SchedulerJob::JOB_COMPLETE,
@@ -6695,7 +6737,7 @@
void Scheduler::setCaptureStatus(Ekos::CaptureState status)
{
- if (state == SCHEDULER_PAUSED || currentJob == nullptr)
+ if (currentJob == nullptr)
return;
qCDebug(KSTARS_EKOS_SCHEDULER) << "Capture State" << Ekos::getCaptureStatusString(status);
diff --git a/kstars/ekos/scheduler/scheduler.ui b/kstars/ekos/scheduler/scheduler.ui
--- a/kstars/ekos/scheduler/scheduler.ui
+++ b/kstars/ekos/scheduler/scheduler.ui
@@ -764,6 +764,14 @@
Start Scheduler
+
+
+ QPushButton:checked
+{
+background-color: maroon;
+border: 1px outset;
+font-weight:bold;
+}
@@ -796,9 +804,20 @@
Pause Scheduler
+
+ QPushButton:checked
+{
+background-color: maroon;
+border: 1px outset;
+font-weight:bold;
+}
+
+
+ true
+
-