diff --git a/plugins/feature/satellitetracker/satellitetrackergui.cpp b/plugins/feature/satellitetracker/satellitetrackergui.cpp
index c56c747fd..556205111 100644
--- a/plugins/feature/satellitetracker/satellitetrackergui.cpp
+++ b/plugins/feature/satellitetracker/satellitetrackergui.cpp
@@ -989,6 +989,8 @@ void SatelliteTrackerGUI::resizeTable()
ui->satTable->setItem(row, SAT_COL_NAME, new QTableWidgetItem("Satellite123"));
ui->satTable->setItem(row, SAT_COL_AZ, new QTableWidgetItem("360"));
ui->satTable->setItem(row, SAT_COL_EL, new QTableWidgetItem("-90"));
+ ui->satTable->setItem(row, SAT_COL_TNE, new QTableWidgetItem("9999:99 AOS"));
+ ui->satTable->setItem(row, SAT_COL_DUR, new QTableWidgetItem("999:99"));
ui->satTable->setItem(row, SAT_COL_AOS, new QTableWidgetItem("+1 10:17"));
ui->satTable->setItem(row, SAT_COL_LOS, new QTableWidgetItem("+1 10:17"));
ui->satTable->setItem(row, SAT_COL_MAX_EL, new QTableWidgetItem("90"));
@@ -1022,6 +1024,19 @@ QString SatelliteTrackerGUI::formatDaysTime(qint64 days, QDateTime dateTime)
return dt.time().toString(QString("hh:mm %1").arg(days));
}
+
+QString SatelliteTrackerGUI::formatSecondsHHMM(qint64 seconds)
+{
+ char const* sign = "";
+ if(seconds < 0)
+ {
+ sign = "-";
+ seconds = -seconds;
+ }
+ return QString("%1%2:%3").arg(sign).arg(seconds/60).arg(seconds%60,2,10,QChar('0'));
+}
+
+
// Table item showing some text, but sorted by datetime set as user data
class DateTimeSortedTableWidgetItem : public QTableWidgetItem {
public:
@@ -1036,6 +1051,20 @@ public:
}
};
+
+class NaturallySortedTableWidgetItem : public QTableWidgetItem
+{
+public:
+ bool operator<(const QTableWidgetItem &other) const override
+ {
+ QCollator coll;
+ coll.setNumericMode(true);
+ return coll.compare( text() , other.text() ) < 0;
+ }
+};
+
+
+
#define SPEED_OF_LIGHT 299792458.0
// Frequency in Hz, speed in m/s
@@ -1071,8 +1100,10 @@ void SatelliteTrackerGUI::updateTable(SatelliteState *satState)
{
if ((i == SAT_COL_AOS) || (i == SAT_COL_LOS))
items[i] = new DateTimeSortedTableWidgetItem();
- else
+ else if((i == SAT_COL_NAME) || (i == SAT_COL_NORAD_ID))
items[i] = new QTableWidgetItem();
+ else
+ items[i] = new NaturallySortedTableWidgetItem();
items[i]->setToolTip(ui->satTable->horizontalHeaderItem(i)->toolTip());
ui->satTable->setItem(row, i, items[i]);
}
@@ -1083,6 +1114,12 @@ void SatelliteTrackerGUI::updateTable(SatelliteState *satState)
SatNogsSatellite *sat = m_satellites.value(satState->m_name);
items[SAT_COL_NORAD_ID]->setData(Qt::DisplayRole, sat->m_noradCatId);
}
+
+ // Text alignment
+ for( int col : {SAT_COL_AZ, SAT_COL_EL, SAT_COL_TNE, SAT_COL_DUR, SAT_COL_MAX_EL,
+ SAT_COL_ALT, SAT_COL_RANGE, SAT_COL_RANGE_RATE, SAT_COL_DOPPLER,
+ SAT_COL_PATH_LOSS, SAT_COL_DELAY})
+ items[col]->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter);
}
else
{
@@ -1097,9 +1134,14 @@ void SatelliteTrackerGUI::updateTable(SatelliteState *satState)
if (satState->m_passes.size() > 0)
{
// Get number of days to AOS/LOS
- QDate currentDate = QDate::currentDate();
- int daysToAOS = currentDate.daysTo(satState->m_passes[0]->m_aos.date());
- int daysToLOS = currentDate.daysTo(satState->m_passes[0]->m_los.date());
+ QDateTime currentDateTime = QDateTime::currentDateTime();
+ int daysToAOS = currentDateTime.daysTo(satState->m_passes[0]->m_aos);
+ int daysToLOS = currentDateTime.daysTo(satState->m_passes[0]->m_los);
+ if( satState->m_passes[ 0 ]->m_aos > currentDateTime )
+ items[SAT_COL_TNE]->setText(formatSecondsHHMM(currentDateTime.secsTo(satState->m_passes[0]->m_aos))+" AOS");
+ else
+ items[SAT_COL_TNE]->setText(formatSecondsHHMM(currentDateTime.secsTo(satState->m_passes[0]->m_los))+" LOS");
+ items[SAT_COL_DUR]->setText(formatSecondsHHMM(satState->m_passes[0]->m_aos.secsTo(satState->m_passes[0]->m_los)));
items[SAT_COL_AOS]->setText(formatDaysTime(daysToAOS, satState->m_passes[0]->m_aos));
items[SAT_COL_AOS]->setData(Qt::UserRole, satState->m_passes[0]->m_aos);
items[SAT_COL_LOS]->setText(formatDaysTime(daysToLOS, satState->m_passes[0]->m_los));
@@ -1112,6 +1154,8 @@ void SatelliteTrackerGUI::updateTable(SatelliteState *satState)
}
else
{
+ items[SAT_COL_TNE]->setText("");
+ items[SAT_COL_DUR]->setText("");
items[SAT_COL_AOS]->setText("");
items[SAT_COL_LOS]->setText("");
items[SAT_COL_MAX_EL]->setData(Qt::DisplayRole, QVariant());
diff --git a/plugins/feature/satellitetracker/satellitetrackergui.h b/plugins/feature/satellitetracker/satellitetrackergui.h
index 78ee5de75..2c80f35da 100644
--- a/plugins/feature/satellitetracker/satellitetrackergui.h
+++ b/plugins/feature/satellitetracker/satellitetrackergui.h
@@ -84,6 +84,8 @@ private:
SAT_COL_NAME,
SAT_COL_AZ,
SAT_COL_EL,
+ SAT_COL_TNE,
+ SAT_COL_DUR,
SAT_COL_AOS,
SAT_COL_LOS,
SAT_COL_MAX_EL,
@@ -118,6 +120,7 @@ private:
QAction *createCheckableItem(QString& text, int idx, bool checked);
void updateTimeToAOS();
QString formatDaysTime(qint64 days, QDateTime dateTime);
+ QString formatSecondsHHMM(qint64 seconds);
void leaveEvent(QEvent*);
void enterEvent(QEvent*);
diff --git a/plugins/feature/satellitetracker/satellitetrackergui.ui b/plugins/feature/satellitetracker/satellitetrackergui.ui
index 10cc0dd68..49411c998 100644
--- a/plugins/feature/satellitetracker/satellitetrackergui.ui
+++ b/plugins/feature/satellitetracker/satellitetrackergui.ui
@@ -580,6 +580,16 @@
Elevation in degrees to satellite from antenna location
+
+
+ Next
+
+
+
+
+ Dur
+
+
AOS
diff --git a/plugins/feature/satellitetracker/satellitetrackersettings.h b/plugins/feature/satellitetracker/satellitetrackersettings.h
index 169fc7cf3..643f331b0 100644
--- a/plugins/feature/satellitetracker/satellitetrackersettings.h
+++ b/plugins/feature/satellitetracker/satellitetrackersettings.h
@@ -27,7 +27,7 @@
class Serializable;
-#define SAT_COL_COLUMNS 14
+#define SAT_COL_COLUMNS 16
struct SatelliteTrackerSettings
{