From 07de662532282be153fa404c19690561a81a349d Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Wed, 12 Aug 2015 20:18:33 -0400 Subject: [PATCH] Updated the entire program to work in either hex or decimal. Changing the mode in settings will change which is used in many places. You can always still enter values in decimal, hex, or binary regardless of the mode you are in. --- canframemodel.cpp | 12 +++++------- config.h | 2 +- dbcmaineditor.cpp | 8 ++++---- dbcmaineditor.h | 1 + dbcsignaleditor.cpp | 19 ++++++++++++++----- dbcsignaleditor.h | 1 + filecomparatorwindow.cpp | 2 +- flowviewwindow.cpp | 37 +++++++++++++++++++------------------ frameinfowindow.cpp | 18 +++++++++--------- frameplaybackwindow.cpp | 10 +++++----- mainwindow.cpp | 11 +++++------ newgraphdialog.cpp | 4 ++-- utility.cpp | 2 ++ utility.h | 26 +++++++++++++++++++++----- 14 files changed, 90 insertions(+), 63 deletions(-) diff --git a/canframemodel.cpp b/canframemodel.cpp index 94332ec..136630e 100644 --- a/canframemodel.cpp +++ b/canframemodel.cpp @@ -1,6 +1,7 @@ #include "canframemodel.h" #include +#include "utility.h" int CANFrameModel::rowCount(const QModelIndex &parent) const { @@ -37,6 +38,7 @@ void CANFrameModel::setHexMode(bool mode) { this->beginResetModel(); useHexMode = mode; + Utility::decimalMode = !useHexMode; this->endResetModel(); } } @@ -165,11 +167,8 @@ QVariant CANFrameModel::data(const QModelIndex &index, int role) const if (!timeSeconds) return QString::number(thisFrame.timestamp); else return QString::number(thisFrame.timestamp / 1000000.0f); break; - case 1: //id - if (useHexMode) - return QString::number(thisFrame.ID, 16).toUpper().rightJustified(2,'0'); - else - return QString::number(thisFrame.ID).rightJustified(3,'0'); + case 1: //id + return Utility::formatNumber(thisFrame.ID); break; case 2: //ext return QString::number(thisFrame.extended); @@ -183,8 +182,7 @@ QVariant CANFrameModel::data(const QModelIndex &index, int role) const case 5: //data for (int i = 0; i < thisFrame.len; i++) { - if (useHexMode) tempString.append(QString::number(thisFrame.data[i], 16).toUpper().rightJustified(2,'0')); - else tempString.append(QString::number(thisFrame.data[i]).rightJustified(3,'0')); + tempString.append(Utility::formatNumber(thisFrame.data[i])); tempString.append(" "); } //now, if we're supposed to interpret the data and the DBC handler is loaded then use it diff --git a/config.h b/config.h index d0ee917..ee13ebd 100644 --- a/config.h +++ b/config.h @@ -1,7 +1,7 @@ #ifndef CONFIG #define CONFIG -#define VERSION 130 +#define VERSION 131 //try to keep this in sync. //SavvyCAN will complain if you connect a GVRET board with a revision diff --git a/dbcmaineditor.cpp b/dbcmaineditor.cpp index 6bdea4d..bb2092e 100644 --- a/dbcmaineditor.cpp +++ b/dbcmaineditor.cpp @@ -221,7 +221,7 @@ void DBCMainEditor::onCellChangedMessage(int row,int col) //dbcHandler->findNodeByIdx(0); } - msgID = ui->MessagesTable->item(row, 0)->text().toInt(NULL, 16); + msgID = Utility::ParseStringToNum(ui->MessagesTable->item(row, 0)->text()); qDebug() << "Msg ID of edited: " << msgID; msg = dbcHandler->findMsgByID(msgID); @@ -257,7 +257,7 @@ void DBCMainEditor::onCellChangedMessage(int row,int col) if (msg != NULL) msg->ID = msgID; } inhibitCellChanged = true; - replacement = new QTableWidgetItem(QString::number(msgID, 16)); + replacement = new QTableWidgetItem(Utility::formatNumber(msgID)); ui->MessagesTable->setItem(row, col, replacement); replacement = new QTableWidgetItem(QString::number(newMsg.len)); ui->MessagesTable->setItem(row, 2, replacement); @@ -375,7 +375,7 @@ void DBCMainEditor::onCellClickedMessage(int row, int col) if (col == 3) //3 is the signals field. If clicked we go to the signals dialog { QString idString = ui->MessagesTable->item(row, 0)->text(); - DBC_MESSAGE *message = dbcHandler->findMsgByID(idString.toInt(NULL, 16)); + DBC_MESSAGE *message = dbcHandler->findMsgByID(Utility::ParseStringToNum(idString)); sigEditor->setMessageRef(message); sigEditor->exec(); //blocks this window from being active until we're done //now update the displayed # of signals @@ -433,7 +433,7 @@ void DBCMainEditor::refreshMessagesTable(const DBC_NODE *node) if (msg.sender == node) { //many of these are simplistic first versions just to test functionality. - QTableWidgetItem *msgID = new QTableWidgetItem(QString::number(msg.ID, 16)); + QTableWidgetItem *msgID = new QTableWidgetItem(Utility::formatNumber(msg.ID)); QTableWidgetItem *msgName = new QTableWidgetItem(msg.name); QTableWidgetItem *msgLen = new QTableWidgetItem(QString::number(msg.len)); QTableWidgetItem *msgSignals = new QTableWidgetItem(QString::number(msg.msgSignals.count())); diff --git a/dbcmaineditor.h b/dbcmaineditor.h index 36e8fd9..0225cc8 100644 --- a/dbcmaineditor.h +++ b/dbcmaineditor.h @@ -5,6 +5,7 @@ #include #include "dbchandler.h" #include "dbcsignaleditor.h" +#include "utility.h" namespace Ui { class DBCMainEditor; diff --git a/dbcsignaleditor.cpp b/dbcsignaleditor.cpp index 387850d..ab159b3 100644 --- a/dbcsignaleditor.cpp +++ b/dbcsignaleditor.cpp @@ -50,6 +50,7 @@ DBCSignalEditor::DBCSignalEditor(DBCHandler *handler, QWidget *parent) : connect(ui->cbIntelFormat, &QCheckBox::toggled, [=]() { + if (currentSignal == NULL) return; currentSignal->intelByteOrder = ui->cbIntelFormat->isChecked(); fillSignalForm(currentSignal); }); @@ -57,11 +58,13 @@ DBCSignalEditor::DBCSignalEditor(DBCHandler *handler, QWidget *parent) : connect(ui->comboReceiver, &QComboBox::currentTextChanged, [=]() { + if (currentSignal == NULL) return; currentSignal->receiver = dbcHandler->findNodeByName(ui->comboReceiver->currentText()); }); connect(ui->comboType, &QComboBox::currentTextChanged, [=]() { + if (currentSignal == NULL) return; switch (ui->comboType->currentIndex()) { case 0: @@ -84,6 +87,7 @@ DBCSignalEditor::DBCSignalEditor(DBCHandler *handler, QWidget *parent) : connect(ui->txtBias, &QLineEdit::editingFinished, [=]() { + if (currentSignal == NULL) return; double temp; bool result; temp = ui->txtBias->text().toDouble(&result); @@ -93,6 +97,7 @@ DBCSignalEditor::DBCSignalEditor(DBCHandler *handler, QWidget *parent) : connect(ui->txtMaxVal, &QLineEdit::editingFinished, [=]() { + if (currentSignal == NULL) return; double temp; bool result; temp = ui->txtMaxVal->text().toDouble(&result); @@ -102,6 +107,7 @@ DBCSignalEditor::DBCSignalEditor(DBCHandler *handler, QWidget *parent) : connect(ui->txtMinVal, &QLineEdit::editingFinished, [=]() { + if (currentSignal == NULL) return; double temp; bool result; temp = ui->txtMinVal->text().toDouble(&result); @@ -110,6 +116,7 @@ DBCSignalEditor::DBCSignalEditor(DBCHandler *handler, QWidget *parent) : connect(ui->txtScale, &QLineEdit::editingFinished, [=]() { + if (currentSignal == NULL) return; double temp; bool result; temp = ui->txtScale->text().toDouble(&result); @@ -118,19 +125,22 @@ DBCSignalEditor::DBCSignalEditor(DBCHandler *handler, QWidget *parent) : connect(ui->txtComment, &QLineEdit::editingFinished, [=]() { + if (currentSignal == NULL) return; currentSignal->comment = ui->txtComment->text(); }); connect(ui->txtUnitName, &QLineEdit::editingFinished, [=]() { + if (currentSignal == NULL) return; currentSignal->unitName = ui->txtUnitName->text(); }); connect(ui->txtBitLength, &QLineEdit::editingFinished, [=]() { + if (currentSignal == NULL) return; int temp; - temp = ui->txtBitLength->text().toInt(); + temp = Utility::ParseStringToNum(ui->txtBitLength->text()); if (temp < 0) return; if (temp > 63) return; currentSignal->signalSize = temp; @@ -139,12 +149,11 @@ DBCSignalEditor::DBCSignalEditor(DBCHandler *handler, QWidget *parent) : connect(ui->txtName, &QLineEdit::editingFinished, [=]() { + if (currentSignal == NULL) return; currentSignal->name = ui->txtName->text(); //need to update the list too. ui->signalsList->currentItem()->setText(currentSignal->name); }); - - } DBCSignalEditor::~DBCSignalEditor() @@ -220,7 +229,7 @@ void DBCSignalEditor::onValuesCellChanged(int row,int col) if (col == 0) { - currentSignal->valList[row].value = ui->valuesTable->item(row, col)->text().toInt(); + currentSignal->valList[row].value = Utility::ParseStringToNum(ui->valuesTable->item(row, col)->text()); } else if (col == 1) { @@ -409,7 +418,7 @@ void DBCSignalEditor::fillValueTable(DBC_SIGNAL *sig) for (int i = 0; i < sig->valList.count(); i++) { - QTableWidgetItem *val = new QTableWidgetItem(QString::number(sig->valList[i].value)); + QTableWidgetItem *val = new QTableWidgetItem(Utility::formatNumber(sig->valList[i].value)); QTableWidgetItem *desc = new QTableWidgetItem(sig->valList[i].descript); rowIdx = ui->valuesTable->rowCount(); ui->valuesTable->insertRow(rowIdx); diff --git a/dbcsignaleditor.h b/dbcsignaleditor.h index 7004da3..139b0d6 100644 --- a/dbcsignaleditor.h +++ b/dbcsignaleditor.h @@ -3,6 +3,7 @@ #include #include "dbchandler.h" +#include "utility.h" namespace Ui { class DBCSignalEditor; diff --git a/filecomparatorwindow.cpp b/filecomparatorwindow.cpp index 7f7863f..02a5f02 100644 --- a/filecomparatorwindow.cpp +++ b/filecomparatorwindow.cpp @@ -220,7 +220,7 @@ void FileComparatorWindow::calculateDetails() bitmapBaseReference->setText(0, "Bits set only in reference frames"); } sharedItem->addChild(bitmapBaseInterested); - sharedItem->addChild(bitmapBaseReference); + if (!uniqueInterested) sharedItem->addChild(bitmapBaseReference); uint64_t interestedBits = interested.bitmap; uint64_t referenceBits = reference.bitmap; diff --git a/flowviewwindow.cpp b/flowviewwindow.cpp index 92414c6..1617344 100644 --- a/flowviewwindow.cpp +++ b/flowviewwindow.cpp @@ -303,7 +303,7 @@ void FlowViewWindow::refreshIDList() if (!foundID.contains(id)) { foundID.append(id); - QListWidgetItem* item = new QListWidgetItem(QString::number(id, 16).toUpper().rightJustified(4,'0'), ui->listFrameID); + QListWidgetItem* item = new QListWidgetItem(Utility::formatNumber(id), ui->listFrameID); } } //default is to sort in ascending order @@ -318,7 +318,7 @@ void FlowViewWindow::updateFrameLabel() void FlowViewWindow::changeID(QString newID) { //parse the ID and then load up the frame cache with just messages with that ID. - int id = newID.toInt(NULL, 16); + int id = Utility::ParseStringToNum(newID); frameCache.clear(); if (modelFrames->count() == 0) return; @@ -440,23 +440,24 @@ void FlowViewWindow::timerTriggered() void FlowViewWindow::updateDataView() { - ui->txtCurr1->setText(QString::number(currBytes[0], 16).toUpper().rightJustified(2, '0')); - ui->txtCurr2->setText(QString::number(currBytes[1], 16).toUpper().rightJustified(2, '0')); - ui->txtCurr3->setText(QString::number(currBytes[2], 16).toUpper().rightJustified(2, '0')); - ui->txtCurr4->setText(QString::number(currBytes[3], 16).toUpper().rightJustified(2, '0')); - ui->txtCurr5->setText(QString::number(currBytes[4], 16).toUpper().rightJustified(2, '0')); - ui->txtCurr6->setText(QString::number(currBytes[5], 16).toUpper().rightJustified(2, '0')); - ui->txtCurr7->setText(QString::number(currBytes[6], 16).toUpper().rightJustified(2, '0')); - ui->txtCurr8->setText(QString::number(currBytes[7], 16).toUpper().rightJustified(2, '0')); - ui->txtRef1->setText(QString::number(refBytes[0], 16).toUpper().rightJustified(2, '0')); - ui->txtRef2->setText(QString::number(refBytes[1], 16).toUpper().rightJustified(2, '0')); - ui->txtRef3->setText(QString::number(refBytes[2], 16).toUpper().rightJustified(2, '0')); - ui->txtRef4->setText(QString::number(refBytes[3], 16).toUpper().rightJustified(2, '0')); - ui->txtRef5->setText(QString::number(refBytes[4], 16).toUpper().rightJustified(2, '0')); - ui->txtRef6->setText(QString::number(refBytes[5], 16).toUpper().rightJustified(2, '0')); - ui->txtRef7->setText(QString::number(refBytes[6], 16).toUpper().rightJustified(2, '0')); - ui->txtRef8->setText(QString::number(refBytes[7], 16).toUpper().rightJustified(2, '0')); + ui->txtCurr1->setText(Utility::formatNumber(currBytes[0])); + ui->txtCurr2->setText(Utility::formatNumber(currBytes[1])); + ui->txtCurr3->setText(Utility::formatNumber(currBytes[2])); + ui->txtCurr4->setText(Utility::formatNumber(currBytes[3])); + ui->txtCurr5->setText(Utility::formatNumber(currBytes[4])); + ui->txtCurr6->setText(Utility::formatNumber(currBytes[5])); + ui->txtCurr7->setText(Utility::formatNumber(currBytes[6])); + ui->txtCurr8->setText(Utility::formatNumber(currBytes[7])); + + ui->txtRef1->setText(Utility::formatNumber(refBytes[0])); + ui->txtRef2->setText(Utility::formatNumber(refBytes[1])); + ui->txtRef3->setText(Utility::formatNumber(refBytes[2])); + ui->txtRef4->setText(Utility::formatNumber(refBytes[3])); + ui->txtRef5->setText(Utility::formatNumber(refBytes[4])); + ui->txtRef6->setText(Utility::formatNumber(refBytes[5])); + ui->txtRef7->setText(Utility::formatNumber(refBytes[6])); + ui->txtRef8->setText(Utility::formatNumber(refBytes[7])); ui->flowView->setReference(refBytes, false); ui->flowView->updateData(currBytes, true); diff --git a/frameinfowindow.cpp b/frameinfowindow.cpp index 8040779..6f1390a 100644 --- a/frameinfowindow.cpp +++ b/frameinfowindow.cpp @@ -114,7 +114,7 @@ void FrameInfoWindow::updateDetailsWindow(QString newID) int bitfieldHistogram[64]; QTreeWidgetItem *baseNode, *dataBase, *histBase, *numBase, *tempItem; - targettedID = newID.toInt(NULL, 16); + targettedID = Utility::ParseStringToNum(newID); if (modelFrames->count() == 0) return; @@ -137,7 +137,7 @@ void FrameInfoWindow::updateDetailsWindow(QString newID) if (frameCache.count() == 0) return; baseNode = new QTreeWidgetItem(); - baseNode->setText(0, QString("ID: 0x") + newID ); + baseNode->setText(0, QString("ID: ") + newID ); if (frameCache[0].extended) //if these frames seem to be extended then try for J1939 decoding { @@ -160,23 +160,23 @@ void FrameInfoWindow::updateDetailsWindow(QString newID) { jid.dest = jid.ps; tempItem = new QTreeWidgetItem(); - tempItem->setText(0, tr("Destination ID: 0x") + QString::number(jid.dest,16)); + tempItem->setText(0, tr("Destination ID: ") + Utility::formatNumber(jid.dest)); baseNode->addChild(tempItem); } tempItem = new QTreeWidgetItem(); - tempItem->setText(0, tr("SRC: 0x") + QString::number(jid.src,16)); + tempItem->setText(0, tr("SRC: ") + Utility::formatNumber(jid.src)); baseNode->addChild(tempItem); tempItem = new QTreeWidgetItem(); - tempItem->setText(0, tr("PGN: ") + QString::number(jid.pgn,10)); + tempItem->setText(0, tr("PGN: ") + Utility::formatNumber(jid.pgn)); baseNode->addChild(tempItem); tempItem = new QTreeWidgetItem(); - tempItem->setText(0, tr("PF: 0x") + QString::number(jid.pf,16)); + tempItem->setText(0, tr("PF: ") + Utility::formatNumber(jid.pf)); baseNode->addChild(tempItem); tempItem = new QTreeWidgetItem(); - tempItem->setText(0, tr("PS: 0x") + QString::number(jid.ps,16)); + tempItem->setText(0, tr("PS: ") + Utility::formatNumber(jid.ps)); baseNode->addChild(tempItem); } @@ -242,7 +242,7 @@ void FrameInfoWindow::updateDetailsWindow(QString newID) dataBase->setText(0, tr("Data Byte ") + QString::number(c)); baseNode->addChild(dataBase); tempItem = new QTreeWidgetItem(); - tempItem->setText(0, tr("Range: ") + QString::number(minData[c]) + tr(" to ") + QString::number(maxData[c])); + tempItem->setText(0, tr("Range: ") + Utility::formatNumber(minData[c]) + tr(" to ") + Utility::formatNumber(maxData[c])); dataBase->addChild(tempItem); histBase->setText(0, tr("Histogram")); dataBase->addChild(histBase); @@ -292,7 +292,7 @@ void FrameInfoWindow::refreshIDList() if (!foundID.contains(id)) { foundID.append(id); - ui->listFrameID->addItem(QString::number(id, 16).toUpper().rightJustified(4,'0')); + ui->listFrameID->addItem(Utility::formatNumber(id)); } } //default is to sort in ascending order diff --git a/frameplaybackwindow.cpp b/frameplaybackwindow.cpp index 83bb46e..b60dcce 100644 --- a/frameplaybackwindow.cpp +++ b/frameplaybackwindow.cpp @@ -247,7 +247,7 @@ void FramePlaybackWindow::refreshIDList() QHash::Iterator filterIter; for (filterIter = currentSeqItem->idFilters.begin(); filterIter != currentSeqItem->idFilters.end(); ++filterIter) { - QListWidgetItem* listItem = new QListWidgetItem(Utility::formatHexNum(filterIter.key()), ui->listID); + QListWidgetItem* listItem = new QListWidgetItem(Utility::formatNumber(filterIter.key()), ui->listID); listItem->setFlags(listItem->flags() | Qt::ItemIsUserCheckable); // set checkable flag if (filterIter.value()) listItem->setCheckState(Qt::Checked); else listItem->setCheckState(Qt::Unchecked); @@ -292,7 +292,7 @@ void FramePlaybackWindow::seqTableCellChanged(int row,int col) { if (col == 1) //don't save any changes to the first column (0) { - seqItems[row].maxLoops = ui->tblSequence->item(row, col)->text().toInt(); + seqItems[row].maxLoops = Utility::ParseStringToNum(ui->tblSequence->item(row, col)->text()); if (seqItems[row].maxLoops < 1) seqItems[row].maxLoops = 1; } } @@ -496,7 +496,7 @@ void FramePlaybackWindow::changeSendingBus(int newIdx) void FramePlaybackWindow::changeIDFiltering(QListWidgetItem *item) { qDebug() << "Changed ID filter"; - int ID = item->text().toInt(NULL, 16); + int ID = Utility::ParseStringToNum(item->text()); currentSeqItem->idFilters[ID] = item->checkState(); } @@ -506,7 +506,7 @@ void FramePlaybackWindow::btnSelectAllClick() { QListWidgetItem *item = ui->listID->item(i); item->setCheckState(Qt::Checked); - currentSeqItem->idFilters[item->text().toInt(NULL, 16)] = true; + currentSeqItem->idFilters[Utility::ParseStringToNum(item->text())] = true; } } @@ -516,7 +516,7 @@ void FramePlaybackWindow::btnSelectNoneClick() { QListWidgetItem *item = ui->listID->item(i); item->setCheckState(Qt::Unchecked); - currentSeqItem->idFilters[item->text().toInt(NULL, 16)] = false; + currentSeqItem->idFilters[Utility::ParseStringToNum(item->text())] = false; } } diff --git a/mainwindow.cpp b/mainwindow.cpp index 06cd71b..e37baf9 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -270,6 +270,7 @@ void MainWindow::readUpdateableSettings() QSettings settings; useHex = settings.value("Main/UseHex", true).toBool(); model->setHexMode(useHex); + Utility::decimalMode = !useHex; model->setSecondsMode(settings.value("Main/TimeSeconds", false).toBool()); useFiltered = settings.value("Main/UseFiltered", false).toBool(); } @@ -322,8 +323,7 @@ void MainWindow::updateFilterList() for (filterIter = filters->begin(); filterIter != filters->end(); ++filterIter) { QListWidgetItem *thisItem = new QListWidgetItem(); - if (useHex) thisItem->setText(QString::number(filterIter.key(), 16).toUpper().rightJustified(4,'0')); - else thisItem->setText(QString::number(filterIter.key())); + thisItem->setText(Utility::formatNumber(filterIter.key())); thisItem->setFlags(thisItem->flags() | Qt::ItemIsUserCheckable); if (filterIter.value()) thisItem->setCheckState(Qt::Checked); else thisItem->setCheckState(Qt::Unchecked); @@ -337,8 +337,7 @@ void MainWindow::filterListItemChanged(QListWidgetItem *item) //qDebug() << item->text(); int ID; bool isSet = false; - if (useHex) ID = item->text().toInt(NULL, 16); - else ID = item->text().toInt(); + ID = Utility::ParseStringToNum(item->text()); if (item->checkState() == Qt::Checked) isSet = true; model->setFilterState(ID, isSet); @@ -717,7 +716,7 @@ Data Bytes: 88 10 00 13 BB 00 06 00 CANFrame thisFrame = frames->at(c); QString builderString; builderString += tr("Time: ") + QString::number((thisFrame.timestamp / 1000000.0), 'f', 6); - builderString += tr(" ID: 0x") + QString::number(thisFrame.ID, 16).toUpper().rightJustified(8, '0'); + builderString += tr(" ID: ") + Utility::formatNumber(thisFrame.ID); if (thisFrame.extended) builderString += tr(" Ext "); else builderString += tr(" Std "); builderString += tr("Bus: ") + QString::number(thisFrame.bus); @@ -727,7 +726,7 @@ Data Bytes: 88 10 00 13 BB 00 06 00 builderString = tr("Data Bytes: "); for (int temp = 0; temp < thisFrame.len; temp++) { - builderString += QString::number(thisFrame.data[temp], 16).toUpper().rightJustified(2, '0') + " "; + builderString += Utility::formatNumber(thisFrame.data[temp]) + " "; } builderString += "\n"; outFile->write(builderString.toUtf8()); diff --git a/newgraphdialog.cpp b/newgraphdialog.cpp index 7242187..aa53179 100644 --- a/newgraphdialog.cpp +++ b/newgraphdialog.cpp @@ -51,9 +51,9 @@ void NewGraphDialog::colorSwatchClick() void NewGraphDialog::setParams(GraphParams ¶ms) { - ui->txtID->setText("0x" + QString::number(params.ID, 16).toUpper()); + ui->txtID->setText(Utility::formatNumber(params.ID)); ui->txtBias->setText(QString::number(params.bias)); - ui->txtMask->setText("0x" + QString::number(params.mask, 16).toUpper().left(10)); + ui->txtMask->setText(Utility::formatNumber(params.mask)); ui->txtScale->setText(QString::number(params.scale)); ui->txtStride->setText(QString::number(params.stride)); ui->cbSigned->setChecked(params.isSigned); diff --git a/utility.cpp b/utility.cpp index bb84edf..a11db36 100644 --- a/utility.cpp +++ b/utility.cpp @@ -1,2 +1,4 @@ #include "utility.h" +bool Utility::decimalMode = false; + diff --git a/utility.h b/utility.h index 11e6dbe..4543ecf 100644 --- a/utility.h +++ b/utility.h @@ -1,6 +1,8 @@ #ifndef UTILITY_H #define UTILITY_H +#include +#include #include #include @@ -9,12 +11,15 @@ class Utility { public: + + static bool decimalMode; + static int ParseStringToNum(QByteArray input) { int temp = 0; input = input.toUpper(); - if (input.startsWith("0X")) //hex number + if (input.startsWith("0X") || input.startsWith("X")) //hex number { temp = input.right(input.size() - 2).toInt(NULL, 16); } @@ -47,14 +52,25 @@ public: //prints hex numbers in uppercase with 0's filling out the number depending //on the size needed. Promotes hex numbers to either 2, 4, or 8 digits - static QString formatHexNum(int input) + static QString formatHexNum(uint64_t input) { if (input < 256) - return QString::number(input, 16).toUpper().rightJustified(2,'0'); + return "0x" + QString::number(input, 16).toUpper().rightJustified(2,'0'); if (input < 65536) - return QString::number(input, 16).toUpper().rightJustified(4,'0'); + return "0x" + QString::number(input, 16).toUpper().rightJustified(4,'0'); + if (input < 4294967296) + return "0x" + QString::number(input, 16).toUpper().rightJustified(8,'0'); + return "0x" + QString::number(input, 16).toUpper().rightJustified(16,'0'); + } - return QString::number(input, 16).toUpper().rightJustified(8,'0'); + //uses decimalMode to see if it should show value as decimal or hex + static QString formatNumber(uint64_t value) + { + if (decimalMode) + { + return QString::number(value, 10); + } + else return formatHexNum(value); } };