diff --git a/mainsettingsdialog.cpp b/mainsettingsdialog.cpp index a9f89be..2d8c698 100644 --- a/mainsettingsdialog.cpp +++ b/mainsettingsdialog.cpp @@ -80,6 +80,7 @@ MainSettingsDialog::MainSettingsDialog(QWidget *parent) : ui->cbValidate->setChecked(settings.value("Main/ValidateComm", true).toBool()); ui->spinPlaybackSpeed->setValue(settings.value("Playback/DefSpeed", 5).toInt()); 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->lineRemotePort->setText(settings.value("Remote/Port", "8883").toString()); //default port for SSL enabled MQTT 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->comboSendingBus->setCurrentIndex(settings.value("Playback/SendingBus", 4).toInt()); 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->rbSysClock, 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->comboSendingBus, SIGNAL(currentIndexChanged(int)), this, SLOT(updateSettings())); connect(ui->cbUseFiltered, SIGNAL(toggled(bool)), 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->lineRemoteHost, 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/TimeMillis", ui->rbMillis->isChecked()); settings.setValue("Main/TimeClock", ui->rbSysClock->isChecked()); + settings.setValue("Main/UseStartDate", ui->cbUseStartDate->isChecked()); settings.setValue("Main/CSVAbsTime", ui->cbCSVAbsTime->isChecked()); settings.setValue("Playback/SendingBus", ui->comboSendingBus->currentIndex()); settings.setValue("Main/UseFiltered", ui->cbUseFiltered->isChecked()); settings.setValue("Main/UseOpenGL", ui->cbUseOpenGL->isChecked()); settings.setValue("Main/TimeFormat", ui->lineClockFormat->text()); + settings.setValue("Main/StartDate", ui->lineStartDate->text()); settings.setValue("Main/FontSize", ui->spinFontSize->value()); settings.setValue("Remote/Host", ui->lineRemoteHost->text()); settings.setValue("Remote/Port", ui->lineRemotePort->text()); diff --git a/mainwindow.cpp b/mainwindow.cpp index d92a045..9a03725 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -430,11 +430,19 @@ void MainWindow::readUpdateableSettings() tempBool = settings.value("Main/TimeSeconds", false).toBool(); if (tempBool) ts = TS_SECONDS; 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(); if (tempBool) ts = TS_MILLIS; 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(); model->setTimeFormat(settings.value("Main/TimeFormat", "MMM-dd HH:mm:ss.zzz").toString()); ignoreDBCColors = settings.value("Main/IgnoreDBCColors", false).toBool(); diff --git a/re/graphingwindow.cpp b/re/graphingwindow.cpp index beebda8..d7ffa4d 100644 --- a/re/graphingwindow.cpp +++ b/re/graphingwindow.cpp @@ -40,7 +40,7 @@ GraphingWindow::GraphingWindow(const QVector *frames, QWidget *parent) if (Utility::timeStyle == TS_SECONDS) ui->graphingView->xAxis->setNumberPrecision(6); else ui->graphingView->xAxis->setNumberPrecision(0); - if (Utility::timeStyle == TS_CLOCK) + if (Utility::timeStyle == TS_CLOCK || Utility::timeStyle == TS_START_DATE) { QSharedPointer timeTicker = QSharedPointer::create(); timeTicker->setTimeFormat("%h:%m:%s.%z"); @@ -291,7 +291,7 @@ void GraphingWindow::plottableDoubleClick(QCPAbstractPlottable* plottable, int d coord /= 1000000; else if (Utility::timeStyle == TS_MILLIS) 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; id = plottable->property("id").toInt(); @@ -330,7 +330,7 @@ void GraphingWindow::gotCenterTimeID(uint32_t ID, double timestamp) timestamp *= 1000000; else if (Utility::timeStyle == TS_MILLIS) 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 ui->graphingView->xAxis->setRange(timestamp - offset, timestamp + offset); ui->graphingView->replot(); @@ -349,7 +349,7 @@ void GraphingWindow::gotPlaybackTimestamp(double timestamp) timestamp *= 1000000; else if (Utility::timeStyle == TS_MILLIS) 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 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); 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 { 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); 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 { x = frameCache[k].timeStamp().microSeconds(); diff --git a/ui/mainsettingsdialog.ui b/ui/mainsettingsdialog.ui index 2475764..0972ae7 100644 --- a/ui/mainsettingsdialog.ui +++ b/ui/mainsettingsdialog.ui @@ -230,6 +230,27 @@ + + + + + + Start Date: + + + + + + + + + + + + Use start date + + + @@ -515,6 +536,7 @@ rbMicros rbSysClock lineClockFormat + lineStartDate spinFontSize cbFlowUseTimestamp cbFlowAutoRef diff --git a/utility.cpp b/utility.cpp index 996ece1..3371b20 100644 --- a/utility.cpp +++ b/utility.cpp @@ -2,5 +2,7 @@ bool Utility::decimalMode = false; 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; QString Utility::fullyQualifiedNameSeperator = "::"; diff --git a/utility.h b/utility.h index e92c39e..cff057c 100644 --- a/utility.h +++ b/utility.h @@ -20,7 +20,8 @@ enum TimeStyle TS_SECONDS, TS_MICROS, TS_MILLIS, - TS_CLOCK + TS_CLOCK, + TS_START_DATE, }; @@ -68,6 +69,8 @@ public: static bool decimalMode; static TimeStyle timeStyle; static QString timeFormat; + static QDateTime startDate; + static bool useStartDate; static QString fullyQualifiedNameSeperator; @@ -221,6 +224,9 @@ public: case TS_CLOCK: return QDateTime::fromMSecsSinceEpoch(timestamp / 1000); break; + case TS_START_DATE: + return startDate.addMSecs(timestamp / 1000); + break; case TS_MILLIS: return (double)timestamp / 1000.0; break;