add support for start date offset
This commit is contained in:
@@ -80,6 +80,7 @@ MainSettingsDialog::MainSettingsDialog(QWidget *parent) :
|
|||||||
ui->cbValidate->setChecked(settings.value("Main/ValidateComm", true).toBool());
|
ui->cbValidate->setChecked(settings.value("Main/ValidateComm", true).toBool());
|
||||||
ui->spinPlaybackSpeed->setValue(settings.value("Playback/DefSpeed", 5).toInt());
|
ui->spinPlaybackSpeed->setValue(settings.value("Playback/DefSpeed", 5).toInt());
|
||||||
ui->lineClockFormat->setText(settings.value("Main/TimeFormat", "MMM-dd HH:mm:ss.zzz").toString());
|
ui->lineClockFormat->setText(settings.value("Main/TimeFormat", "MMM-dd HH:mm:ss.zzz").toString());
|
||||||
|
ui->lineStartDate->setText(settings.value("Main/StartDate", "2025-01-01T00:00:00.000000").toString());
|
||||||
ui->lineRemoteHost->setText(settings.value("Remote/Host", "api.savvycan.com").toString());
|
ui->lineRemoteHost->setText(settings.value("Remote/Host", "api.savvycan.com").toString());
|
||||||
ui->lineRemotePort->setText(settings.value("Remote/Port", "8883").toString()); //default port for SSL enabled MQTT
|
ui->lineRemotePort->setText(settings.value("Remote/Port", "8883").toString()); //default port for SSL enabled MQTT
|
||||||
ui->lineRemoteUser->setText(settings.value("Remote/User", "Anonymous").toString());
|
ui->lineRemoteUser->setText(settings.value("Remote/User", "Anonymous").toString());
|
||||||
@@ -127,6 +128,7 @@ MainSettingsDialog::MainSettingsDialog(QWidget *parent) :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ui->cbUseStartDate->setChecked(settings.value("Main/UseStartDate", false).toBool());
|
||||||
ui->cbCSVAbsTime->setChecked(settings.value("Main/CSVAbsTime", false).toBool());
|
ui->cbCSVAbsTime->setChecked(settings.value("Main/CSVAbsTime", false).toBool());
|
||||||
ui->comboSendingBus->setCurrentIndex(settings.value("Playback/SendingBus", 4).toInt());
|
ui->comboSendingBus->setCurrentIndex(settings.value("Playback/SendingBus", 4).toInt());
|
||||||
ui->cbUseFiltered->setChecked(settings.value("Main/UseFiltered", false).toBool());
|
ui->cbUseFiltered->setChecked(settings.value("Main/UseFiltered", false).toBool());
|
||||||
@@ -172,10 +174,12 @@ MainSettingsDialog::MainSettingsDialog(QWidget *parent) :
|
|||||||
connect(ui->rbMicros, SIGNAL(toggled(bool)), this, SLOT(updateSettings()));
|
connect(ui->rbMicros, SIGNAL(toggled(bool)), this, SLOT(updateSettings()));
|
||||||
connect(ui->rbSysClock, SIGNAL(toggled(bool)), this, SLOT(updateSettings()));
|
connect(ui->rbSysClock, SIGNAL(toggled(bool)), this, SLOT(updateSettings()));
|
||||||
connect(ui->rbMillis, SIGNAL(toggled(bool)), this, SLOT(updateSettings()));
|
connect(ui->rbMillis, SIGNAL(toggled(bool)), this, SLOT(updateSettings()));
|
||||||
|
connect(ui->cbUseStartDate, SIGNAL(toggled(bool)), this, SLOT(updateSettings()));
|
||||||
connect(ui->cbCSVAbsTime, SIGNAL(toggled(bool)), this, SLOT(updateSettings()));
|
connect(ui->cbCSVAbsTime, SIGNAL(toggled(bool)), this, SLOT(updateSettings()));
|
||||||
connect(ui->comboSendingBus, SIGNAL(currentIndexChanged(int)), this, SLOT(updateSettings()));
|
connect(ui->comboSendingBus, SIGNAL(currentIndexChanged(int)), this, SLOT(updateSettings()));
|
||||||
connect(ui->cbUseFiltered, SIGNAL(toggled(bool)), this, SLOT(updateSettings()));
|
connect(ui->cbUseFiltered, SIGNAL(toggled(bool)), this, SLOT(updateSettings()));
|
||||||
connect(ui->lineClockFormat, SIGNAL(editingFinished()), this, SLOT(updateSettings()));
|
connect(ui->lineClockFormat, SIGNAL(editingFinished()), this, SLOT(updateSettings()));
|
||||||
|
connect(ui->lineStartDate, SIGNAL(editingFinished()), this, SLOT(updateSettings()));
|
||||||
connect(ui->cbUseOpenGL, SIGNAL(toggled(bool)), this, SLOT(updateSettings()));
|
connect(ui->cbUseOpenGL, SIGNAL(toggled(bool)), this, SLOT(updateSettings()));
|
||||||
connect(ui->lineRemoteHost, SIGNAL(editingFinished()), this, SLOT(updateSettings()));
|
connect(ui->lineRemoteHost, SIGNAL(editingFinished()), this, SLOT(updateSettings()));
|
||||||
connect(ui->lineRemotePort, SIGNAL(editingFinished()), this, SLOT(updateSettings()));
|
connect(ui->lineRemotePort, SIGNAL(editingFinished()), this, SLOT(updateSettings()));
|
||||||
@@ -244,11 +248,13 @@ void MainSettingsDialog::updateSettings()
|
|||||||
settings.setValue("Main/TimeSeconds", ui->rbSeconds->isChecked());
|
settings.setValue("Main/TimeSeconds", ui->rbSeconds->isChecked());
|
||||||
settings.setValue("Main/TimeMillis", ui->rbMillis->isChecked());
|
settings.setValue("Main/TimeMillis", ui->rbMillis->isChecked());
|
||||||
settings.setValue("Main/TimeClock", ui->rbSysClock->isChecked());
|
settings.setValue("Main/TimeClock", ui->rbSysClock->isChecked());
|
||||||
|
settings.setValue("Main/UseStartDate", ui->cbUseStartDate->isChecked());
|
||||||
settings.setValue("Main/CSVAbsTime", ui->cbCSVAbsTime->isChecked());
|
settings.setValue("Main/CSVAbsTime", ui->cbCSVAbsTime->isChecked());
|
||||||
settings.setValue("Playback/SendingBus", ui->comboSendingBus->currentIndex());
|
settings.setValue("Playback/SendingBus", ui->comboSendingBus->currentIndex());
|
||||||
settings.setValue("Main/UseFiltered", ui->cbUseFiltered->isChecked());
|
settings.setValue("Main/UseFiltered", ui->cbUseFiltered->isChecked());
|
||||||
settings.setValue("Main/UseOpenGL", ui->cbUseOpenGL->isChecked());
|
settings.setValue("Main/UseOpenGL", ui->cbUseOpenGL->isChecked());
|
||||||
settings.setValue("Main/TimeFormat", ui->lineClockFormat->text());
|
settings.setValue("Main/TimeFormat", ui->lineClockFormat->text());
|
||||||
|
settings.setValue("Main/StartDate", ui->lineStartDate->text());
|
||||||
settings.setValue("Main/FontSize", ui->spinFontSize->value());
|
settings.setValue("Main/FontSize", ui->spinFontSize->value());
|
||||||
settings.setValue("Remote/Host", ui->lineRemoteHost->text());
|
settings.setValue("Remote/Host", ui->lineRemoteHost->text());
|
||||||
settings.setValue("Remote/Port", ui->lineRemotePort->text());
|
settings.setValue("Remote/Port", ui->lineRemotePort->text());
|
||||||
|
|||||||
+9
-1
@@ -430,11 +430,19 @@ void MainWindow::readUpdateableSettings()
|
|||||||
tempBool = settings.value("Main/TimeSeconds", false).toBool();
|
tempBool = settings.value("Main/TimeSeconds", false).toBool();
|
||||||
if (tempBool) ts = TS_SECONDS;
|
if (tempBool) ts = TS_SECONDS;
|
||||||
tempBool = settings.value("Main/TimeClock", false).toBool();
|
tempBool = settings.value("Main/TimeClock", false).toBool();
|
||||||
if (tempBool) ts = TS_CLOCK;
|
if (tempBool) {
|
||||||
|
if (settings.value("Main/UseStartDate", false).toBool()) {
|
||||||
|
ts = TS_START_DATE;
|
||||||
|
} else {
|
||||||
|
ts = TS_CLOCK;
|
||||||
|
}
|
||||||
|
}
|
||||||
tempBool = settings.value("Main/TimeMillis", false).toBool();
|
tempBool = settings.value("Main/TimeMillis", false).toBool();
|
||||||
if (tempBool) ts = TS_MILLIS;
|
if (tempBool) ts = TS_MILLIS;
|
||||||
model->setTimeStyle(ts);
|
model->setTimeStyle(ts);
|
||||||
|
|
||||||
|
Utility::startDate = QDateTime::fromString(settings.value("Main/StartDate", "2025-01-01T00:00:00.000000").toString(), Qt::ISODateWithMs);
|
||||||
|
|
||||||
useFiltered = settings.value("Main/UseFiltered", false).toBool();
|
useFiltered = settings.value("Main/UseFiltered", false).toBool();
|
||||||
model->setTimeFormat(settings.value("Main/TimeFormat", "MMM-dd HH:mm:ss.zzz").toString());
|
model->setTimeFormat(settings.value("Main/TimeFormat", "MMM-dd HH:mm:ss.zzz").toString());
|
||||||
ignoreDBCColors = settings.value("Main/IgnoreDBCColors", false).toBool();
|
ignoreDBCColors = settings.value("Main/IgnoreDBCColors", false).toBool();
|
||||||
|
|||||||
+14
-4
@@ -40,7 +40,7 @@ GraphingWindow::GraphingWindow(const QVector<CANFrame> *frames, QWidget *parent)
|
|||||||
if (Utility::timeStyle == TS_SECONDS) ui->graphingView->xAxis->setNumberPrecision(6);
|
if (Utility::timeStyle == TS_SECONDS) ui->graphingView->xAxis->setNumberPrecision(6);
|
||||||
else ui->graphingView->xAxis->setNumberPrecision(0);
|
else ui->graphingView->xAxis->setNumberPrecision(0);
|
||||||
|
|
||||||
if (Utility::timeStyle == TS_CLOCK)
|
if (Utility::timeStyle == TS_CLOCK || Utility::timeStyle == TS_START_DATE)
|
||||||
{
|
{
|
||||||
QSharedPointer timeTicker = QSharedPointer<QCPAxisTickerTime>::create();
|
QSharedPointer timeTicker = QSharedPointer<QCPAxisTickerTime>::create();
|
||||||
timeTicker->setTimeFormat("%h:%m:%s.%z");
|
timeTicker->setTimeFormat("%h:%m:%s.%z");
|
||||||
@@ -291,7 +291,7 @@ void GraphingWindow::plottableDoubleClick(QCPAbstractPlottable* plottable, int d
|
|||||||
coord /= 1000000;
|
coord /= 1000000;
|
||||||
else if (Utility::timeStyle == TS_MILLIS)
|
else if (Utility::timeStyle == TS_MILLIS)
|
||||||
coord /= 1000;
|
coord /= 1000;
|
||||||
else if (Utility::timeStyle == TS_CLOCK) // coord is given in seconds but with an offset of one hour
|
else if (Utility::timeStyle == TS_CLOCK || Utility::timeStyle == TS_START_DATE) // coord is given in seconds but with an offset of one hour
|
||||||
coord -= 3600;
|
coord -= 3600;
|
||||||
|
|
||||||
id = plottable->property("id").toInt();
|
id = plottable->property("id").toInt();
|
||||||
@@ -330,7 +330,7 @@ void GraphingWindow::gotCenterTimeID(uint32_t ID, double timestamp)
|
|||||||
timestamp *= 1000000;
|
timestamp *= 1000000;
|
||||||
else if (Utility::timeStyle == TS_MILLIS)
|
else if (Utility::timeStyle == TS_MILLIS)
|
||||||
timestamp *= 1000;
|
timestamp *= 1000;
|
||||||
else if (Utility::timeStyle == TS_CLOCK)
|
else if (Utility::timeStyle == TS_CLOCK || Utility::timeStyle == TS_START_DATE)
|
||||||
timestamp += 3600; // offset of one hour needed
|
timestamp += 3600; // offset of one hour needed
|
||||||
ui->graphingView->xAxis->setRange(timestamp - offset, timestamp + offset);
|
ui->graphingView->xAxis->setRange(timestamp - offset, timestamp + offset);
|
||||||
ui->graphingView->replot();
|
ui->graphingView->replot();
|
||||||
@@ -349,7 +349,7 @@ void GraphingWindow::gotPlaybackTimestamp(double timestamp)
|
|||||||
timestamp *= 1000000;
|
timestamp *= 1000000;
|
||||||
else if (Utility::timeStyle == TS_MILLIS)
|
else if (Utility::timeStyle == TS_MILLIS)
|
||||||
timestamp *= 1000;
|
timestamp *= 1000;
|
||||||
else if (Utility::timeStyle == TS_CLOCK)
|
else if (Utility::timeStyle == TS_CLOCK || Utility::timeStyle == TS_START_DATE)
|
||||||
timestamp += 3600; // offset of one hour needed
|
timestamp += 3600; // offset of one hour needed
|
||||||
|
|
||||||
playbackLine->point1->setCoords(timestamp, 0);
|
playbackLine->point1->setCoords(timestamp, 0);
|
||||||
@@ -1375,6 +1375,11 @@ void GraphingWindow::appendToGraph(GraphParams ¶ms, CANFrame &frame, QVector
|
|||||||
QDateTime dt = QDateTime::fromMSecsSinceEpoch((frame.timeStamp().microSeconds() / 1000) - params.xbias);
|
QDateTime dt = QDateTime::fromMSecsSinceEpoch((frame.timeStamp().microSeconds() / 1000) - params.xbias);
|
||||||
xVal = (dt.time().msec()/1000.0 + dt.time().second() + dt.time().minute() * 60 + dt.time().hour() * 3600);
|
xVal = (dt.time().msec()/1000.0 + dt.time().second() + dt.time().minute() * 60 + dt.time().hour() * 3600);
|
||||||
}
|
}
|
||||||
|
else if (Utility::timeStyle == TS_START_DATE)
|
||||||
|
{
|
||||||
|
QDateTime dt = Utility::startDate.addMSecs(frame.timeStamp().microSeconds() / 1000 - params.xbias);
|
||||||
|
xVal = (dt.time().second() + dt.time().minute() * 60 + dt.time().hour() * 3600);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
xVal = (frame.timeStamp().microSeconds() - params.xbias);
|
xVal = (frame.timeStamp().microSeconds() - params.xbias);
|
||||||
@@ -1531,6 +1536,11 @@ void GraphingWindow::createGraph(GraphParams ¶ms, bool createGraphParam, boo
|
|||||||
QDateTime dt = QDateTime::fromMSecsSinceEpoch((frameCache[k].timeStamp().microSeconds() / 1000) - params.xbias);
|
QDateTime dt = QDateTime::fromMSecsSinceEpoch((frameCache[k].timeStamp().microSeconds() / 1000) - params.xbias);
|
||||||
x = (dt.time().msecsSinceStartOfDay() / 1000.0);
|
x = (dt.time().msecsSinceStartOfDay() / 1000.0);
|
||||||
}
|
}
|
||||||
|
else if (Utility::timeStyle == TS_START_DATE)
|
||||||
|
{
|
||||||
|
QDateTime dt = Utility::startDate.addMSecs(frameCache[k].timeStamp().microSeconds() / 1000 - params.xbias);
|
||||||
|
x = (dt.time().msecsSinceStartOfDay() / 1000.0);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
x = frameCache[k].timeStamp().microSeconds();
|
x = frameCache[k].timeStamp().microSeconds();
|
||||||
|
|||||||
@@ -230,6 +230,27 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_8">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_13">
|
||||||
|
<property name="text">
|
||||||
|
<string>Start Date:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="lineStartDate"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="cbUseStartDate">
|
||||||
|
<property name="text">
|
||||||
|
<string>Use start date</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="cbCSVAbsTime">
|
<widget class="QCheckBox" name="cbCSVAbsTime">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@@ -515,6 +536,7 @@
|
|||||||
<tabstop>rbMicros</tabstop>
|
<tabstop>rbMicros</tabstop>
|
||||||
<tabstop>rbSysClock</tabstop>
|
<tabstop>rbSysClock</tabstop>
|
||||||
<tabstop>lineClockFormat</tabstop>
|
<tabstop>lineClockFormat</tabstop>
|
||||||
|
<tabstop>lineStartDate</tabstop>
|
||||||
<tabstop>spinFontSize</tabstop>
|
<tabstop>spinFontSize</tabstop>
|
||||||
<tabstop>cbFlowUseTimestamp</tabstop>
|
<tabstop>cbFlowUseTimestamp</tabstop>
|
||||||
<tabstop>cbFlowAutoRef</tabstop>
|
<tabstop>cbFlowAutoRef</tabstop>
|
||||||
|
|||||||
@@ -2,5 +2,7 @@
|
|||||||
|
|
||||||
bool Utility::decimalMode = false;
|
bool Utility::decimalMode = false;
|
||||||
QString Utility::timeFormat = "MMM-dd HH:mm:ss.zzz";
|
QString Utility::timeFormat = "MMM-dd HH:mm:ss.zzz";
|
||||||
|
QDateTime Utility::startDate = QDateTime::fromString("2025-01-01T00:00:00.000000", Qt::ISODateWithMs);
|
||||||
|
bool Utility::useStartDate = false;
|
||||||
TimeStyle Utility::timeStyle = TS_MICROS;
|
TimeStyle Utility::timeStyle = TS_MICROS;
|
||||||
QString Utility::fullyQualifiedNameSeperator = "::";
|
QString Utility::fullyQualifiedNameSeperator = "::";
|
||||||
|
|||||||
@@ -20,7 +20,8 @@ enum TimeStyle
|
|||||||
TS_SECONDS,
|
TS_SECONDS,
|
||||||
TS_MICROS,
|
TS_MICROS,
|
||||||
TS_MILLIS,
|
TS_MILLIS,
|
||||||
TS_CLOCK
|
TS_CLOCK,
|
||||||
|
TS_START_DATE,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -68,6 +69,8 @@ public:
|
|||||||
static bool decimalMode;
|
static bool decimalMode;
|
||||||
static TimeStyle timeStyle;
|
static TimeStyle timeStyle;
|
||||||
static QString timeFormat;
|
static QString timeFormat;
|
||||||
|
static QDateTime startDate;
|
||||||
|
static bool useStartDate;
|
||||||
|
|
||||||
static QString fullyQualifiedNameSeperator;
|
static QString fullyQualifiedNameSeperator;
|
||||||
|
|
||||||
@@ -221,6 +224,9 @@ public:
|
|||||||
case TS_CLOCK:
|
case TS_CLOCK:
|
||||||
return QDateTime::fromMSecsSinceEpoch(timestamp / 1000);
|
return QDateTime::fromMSecsSinceEpoch(timestamp / 1000);
|
||||||
break;
|
break;
|
||||||
|
case TS_START_DATE:
|
||||||
|
return startDate.addMSecs(timestamp / 1000);
|
||||||
|
break;
|
||||||
case TS_MILLIS:
|
case TS_MILLIS:
|
||||||
return (double)timestamp / 1000.0;
|
return (double)timestamp / 1000.0;
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user