rebase working but definitely needs clean up for all the whatifs

This commit is contained in:
Andy Huska
2022-09-21 18:04:11 -05:00
parent 74366d1c6b
commit 27b58552df
9 changed files with 325 additions and 1 deletions
+18
View File
@@ -177,6 +177,24 @@ DBC_MESSAGE* DBCMessageHandler::findMsgByPartialName(QString name)
return nullptr;
}
QList<DBC_MESSAGE*> DBCMessageHandler::findMsgsByNode(DBC_NODE* node)
{
QList<DBC_MESSAGE*> messagesForNode;
if (messages.count() == 0)
return messagesForNode;
for (int i = 0; i < messages.count(); i++)
{
if (messages[i].sender == node)
{
messagesForNode.append(&messages[i]);
}
}
return messagesForNode;
}
bool DBCMessageHandler::addMessage(DBC_MESSAGE &msg)
{
messages.append(msg);
+1
View File
@@ -43,6 +43,7 @@ public:
DBC_MESSAGE *findMsgByIdx(int idx);
DBC_MESSAGE *findMsgByName(QString name);
DBC_MESSAGE *findMsgByPartialName(QString name);
QList<DBC_MESSAGE*> findMsgsByNode(DBC_NODE *node);
bool addMessage(DBC_MESSAGE &msg);
bool removeMessage(DBC_MESSAGE *msg);
bool removeMessageByIndex(int idx);
+17 -1
View File
@@ -38,11 +38,13 @@ DBCMainEditor::DBCMainEditor( const QVector<CANFrame> *frames, QWidget *parent)
sigEditor = new DBCSignalEditor(this);
msgEditor = new DBCMessageEditor(this);
nodeEditor = new DBCNodeEditor(this);
nodeRebaseEditor = new DBCNodeRebaseEditor(this);
//all three might potentially change the data stored and force the tree to be updated
connect(sigEditor, &DBCSignalEditor::updatedTreeInfo, this, &DBCMainEditor::updatedSignal);
connect(msgEditor, &DBCMessageEditor::updatedTreeInfo, this, &DBCMainEditor::updatedMessage);
connect(nodeEditor, &DBCNodeEditor::updatedTreeInfo, this, &DBCMainEditor::updatedNode);
connect(nodeRebaseEditor, &DBCNodeRebaseEditor::updatedTreeInfo, this, &DBCMainEditor::updatedMessage);
nodeIcon = QIcon(":/icons/images/node.png");
messageIcon = QIcon(":/icons/images/message.png");
@@ -339,7 +341,21 @@ void DBCMainEditor::onTreeContextMenu(const QPoint & pos)
void DBCMainEditor::onRebaseMessages()
{
qDebug() << "rebase!!";
QTreeWidgetItem* firstCol = ui->treeDBC->currentItem();
bool ret = false;
DBC_MESSAGE *msg;
DBC_SIGNAL *sig;
DBC_NODE *node;
uint32_t msgID;
QString idString;
idString = firstCol->text(0).split(" ")[0];
node = dbcFile->findNodeByName(idString);
nodeRebaseEditor->setFileIdx(fileIdx);
nodeRebaseEditor->setNodeRef(node);
nodeRebaseEditor->refreshView();
nodeRebaseEditor->setModal(true);
nodeRebaseEditor->show();
}
void DBCMainEditor::onDuplicateNode()
+2
View File
@@ -10,6 +10,7 @@
#include "dbcsignaleditor.h"
#include "dbcmessageeditor.h"
#include "dbcnodeeditor.h"
#include "dbcnoderebaseeditor.h"
#include "utility.h"
namespace Ui {
@@ -55,6 +56,7 @@ private:
DBCSignalEditor *sigEditor;
DBCMessageEditor *msgEditor;
DBCNodeEditor *nodeEditor;
DBCNodeRebaseEditor *nodeRebaseEditor;
DBCFile *dbcFile;
int fileIdx;
QIcon nodeIcon;
+166
View File
@@ -0,0 +1,166 @@
#include "dbcnoderebaseeditor.h"
#include "ui_dbcnoderebaseeditor.h"
#include <QSettings>
#include <QKeyEvent>
#include <QColorDialog>
#include "helpwindow.h"
#include "utility.h"
DBCNodeRebaseEditor::DBCNodeRebaseEditor(QWidget *parent) :
QDialog(parent),
ui(new Ui::DBCNodeRebaseEditor)
{
ui->setupUi(this);
readSettings();
dbcHandler = DBCHandler::getReference();
dbcNode = nullptr;
connect(ui->btnDoRebase, &QPushButton::pressed,
[=]()
{
if (dbcNode == nullptr) return;
if (lowestMsgId > 0x1FFFFFFFul) return;
uint newBase = Utility::ParseStringToNum(ui->lineEdit->text());
if (newBase <= 0x1FFFFFFFul && newBase != lowestMsgId)
{
uint rebaseDiff = newBase - lowestMsgId;
QList<DBC_MESSAGE*> messagesForNode = dbcFile->messageHandler->findMsgsByNode(dbcNode);
if(messagesForNode.count() == 0)
{
return;
}
for (int i=0; i<messagesForNode.count(); i++)
{
messagesForNode[i]->ID += rebaseDiff;
emit updatedTreeInfo(messagesForNode[i]);
}
dbcFile->setDirtyFlag();
}
});
// connect(ui->lineOriginalBaseId, &QLineEdit::editingFinished,
// [=]()
// {
// if (dbcNode == nullptr) return;
// if (dbcNode->comment != ui->lineComment->text()) dbcFile->setDirtyFlag();
// dbcNode->comment = ui->lineComment->text();
// emit updatedTreeInfo(dbcNode);
// });
// connect(ui->lineMsgName, &QLineEdit::editingFinished,
// [=]()
// {
// if (dbcNode == nullptr) return;
// if (dbcNode->name != ui->lineMsgName->text()) dbcFile->setDirtyFlag();
// dbcNode->name = ui->lineMsgName->text();
// emit updatedTreeInfo(dbcNode);
// });
installEventFilter(this);
}
DBCNodeRebaseEditor::~DBCNodeRebaseEditor()
{
removeEventFilter(this);
delete ui;
}
void DBCNodeRebaseEditor::closeEvent(QCloseEvent *event)
{
Q_UNUSED(event);
writeSettings();
}
bool DBCNodeRebaseEditor::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::KeyRelease) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
switch (keyEvent->key())
{
case Qt::Key_F1:
HelpWindow::getRef()->showHelp("nodeeditor.md");
break;
}
return true;
} else {
// standard event processing
return QObject::eventFilter(obj, event);
}
return false;
}
void DBCNodeRebaseEditor::setFileIdx(int idx)
{
if (idx < 0 || idx > dbcHandler->getFileCount() - 1) return;
dbcFile = dbcHandler->getFileByIdx(idx);
}
void DBCNodeRebaseEditor::readSettings()
{
QSettings settings;
if (settings.value("Main/SaveRestorePositions", false).toBool())
{
resize(settings.value("DBCNodeRebaseEditor/WindowSize", QSize(312, 128)).toSize());
move(Utility::constrainedWindowPos(settings.value("DBCNodeRebaseEditor/WindowPos", QPoint(100, 100)).toPoint()));
}
}
void DBCNodeRebaseEditor::writeSettings()
{
QSettings settings;
if (settings.value("Main/SaveRestorePositions", false).toBool())
{
settings.setValue("DBCNodeRebaseEditor/WindowSize", size());
settings.setValue("DBCNodeRebaseEditor/WindowPos", pos());
}
}
void DBCNodeRebaseEditor::setNodeRef(DBC_NODE *node)
{
dbcNode = node;
}
void DBCNodeRebaseEditor::showEvent(QShowEvent* event)
{
QDialog::showEvent(event);
refreshView();
}
void DBCNodeRebaseEditor::refreshView()
{
if(dbcNode)
{
QList<DBC_MESSAGE*> messagesForNode = dbcFile->messageHandler->findMsgsByNode(dbcNode);
if(messagesForNode.count() == 0)
{
//??
}
lowestMsgId = 0xFFFFFFFF;
for (int i=0; i<messagesForNode.count(); i++)
{
if(messagesForNode[i]->ID < lowestMsgId)
lowestMsgId = messagesForNode[i]->ID;
}
ui->lineOriginalBaseId->setText(Utility::formatCANID(lowestMsgId & 0x1FFFFFFFul));
ui->lineMsgName->setText(dbcNode->name);
}
//generateSampleText();
}
+42
View File
@@ -0,0 +1,42 @@
#ifndef DBCNODEREBASEEDITOR_H
#define DBCNODEREBASEEDITOR_H
#include <QDialog>
#include "dbc_classes.h"
#include "dbchandler.h"
namespace Ui {
class DBCNodeRebaseEditor;
}
class DBCNodeRebaseEditor : public QDialog
{
Q_OBJECT
public:
explicit DBCNodeRebaseEditor(QWidget *parent = nullptr);
~DBCNodeRebaseEditor();
void showEvent(QShowEvent*);
void setNodeRef(DBC_NODE *node);
void setFileIdx(int idx);
void refreshView();
signals:
void updatedTreeInfo(DBC_MESSAGE *msg);
private:
Ui::DBCNodeRebaseEditor *ui;
DBCHandler *dbcHandler;
DBC_NODE *dbcNode;
DBCFile *dbcFile;
void closeEvent(QCloseEvent *event);
bool eventFilter(QObject *obj, QEvent *event);
void readSettings();
void writeSettings();
uint lowestMsgId;
};
#endif // DBCNODEREBASEEDITOR_H