120 lines
3.4 KiB
C++
120 lines
3.4 KiB
C++
#ifndef DBCMAINEDITOR_H
|
|
#define DBCMAINEDITOR_H
|
|
|
|
#include <QDialog>
|
|
#include <QDebug>
|
|
#include <QIcon>
|
|
#include <QTreeWidget>
|
|
#include <QRandomGenerator>
|
|
#include "dbchandler.h"
|
|
#include "dbcsignaleditor.h"
|
|
#include "dbcmessageeditor.h"
|
|
#include "dbcnodeeditor.h"
|
|
#include "dbcnoderebaseeditor.h"
|
|
#include "dbcnodeduplicateeditor.h"
|
|
#include "utility.h"
|
|
|
|
namespace Ui {
|
|
class DBCMainEditor;
|
|
}
|
|
|
|
class QTableWidget;
|
|
|
|
class QTreeWidgetSignalItem : public QTreeWidgetItem
|
|
{
|
|
public:
|
|
using QTreeWidgetItem::QTreeWidgetItem;
|
|
|
|
// DBCSignalHandler::getSignalsAsList returns a list sorted by start bit
|
|
// becuase C++ uses a stable sorting algorithm (also for sorting QTreeWidgetItems) the order is not changed if the comparison function always returns false
|
|
bool operator<(const QTreeWidgetItem &other) const override
|
|
{
|
|
Q_UNUSED(other);
|
|
return false;
|
|
}
|
|
};
|
|
|
|
enum DBCItemTypes
|
|
{
|
|
NODE = 1,
|
|
MESG = 2,
|
|
SIG = 3
|
|
};
|
|
|
|
class DBCMainEditor : public QDialog
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
explicit DBCMainEditor(const QVector<CANFrame> *frames, QWidget *parent = 0);
|
|
~DBCMainEditor();
|
|
void setFileIdx(int idx);
|
|
|
|
public slots:
|
|
void updatedNode(DBC_NODE *node);
|
|
void updatedMessage(DBC_MESSAGE *msg);
|
|
void updatedSignal(DBC_SIGNAL *sig);
|
|
|
|
private slots:
|
|
void onTreeDoubleClicked(const QModelIndex &index);
|
|
void onTreeContextMenu(const QPoint & pos);
|
|
void currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *prev);
|
|
void onCustomMenuTree(QPoint);
|
|
void deleteCurrentTreeItem();
|
|
void deleteNode(DBC_NODE *node);
|
|
void deleteMessage(DBC_MESSAGE *msg);
|
|
void deleteSignal(DBC_SIGNAL *sig);
|
|
void handleSearch();
|
|
void handleSearchForward();
|
|
void handleSearchBackward();
|
|
void newNode(QString nodeName);
|
|
void newNode();
|
|
void copyMessageToNode(DBC_NODE *node, DBC_MESSAGE *source, uint newMsgId);
|
|
void newMessage();
|
|
void newSignal();
|
|
void onRebaseMessages();
|
|
void onDuplicateNode();
|
|
void showUsedIDs();
|
|
|
|
private:
|
|
Ui::DBCMainEditor *ui;
|
|
DBCHandler *dbcHandler;
|
|
const QVector<CANFrame> *referenceFrames;
|
|
DBCSignalEditor *sigEditor;
|
|
DBCMessageEditor *msgEditor;
|
|
DBCNodeEditor *nodeEditor;
|
|
DBCNodeRebaseEditor *nodeRebaseEditor;
|
|
DBCNodeDuplicateEditor *nodeDuplicateEditor;
|
|
DBCFile *dbcFile;
|
|
int fileIdx;
|
|
QIcon nodeIcon;
|
|
QIcon messageIcon;
|
|
QIcon signalIcon;
|
|
QIcon multiplexorSignalIcon;
|
|
QIcon multiplexedSignalIcon;
|
|
QList<QTreeWidgetItem *> searchItems;
|
|
int searchItemPos;
|
|
//bidirectional mapping of QTreeWidget items back and forth to DBC objects
|
|
QMap<DBC_NODE*, QTreeWidgetItem *> nodeToItem;
|
|
QMap<DBC_MESSAGE*, QTreeWidgetItem *> messageToItem;
|
|
QMap<DBC_SIGNAL*, QTreeWidgetItem *> signalToItem;
|
|
QMap<QTreeWidgetItem*, DBC_NODE*> itemToNode;
|
|
QMap<QTreeWidgetItem*, DBC_MESSAGE*> itemToMessage;
|
|
QMap<QTreeWidgetItem*, DBC_SIGNAL*> itemToSignal;
|
|
QRandomGenerator randGen;
|
|
|
|
void showEvent(QShowEvent* event);
|
|
void closeEvent(QCloseEvent *event);
|
|
bool eventFilter(QObject *obj, QEvent *event);
|
|
void readSettings();
|
|
void writeSettings();
|
|
void refreshTree();
|
|
void processSignalToTree(QTreeWidgetItem *parent, DBC_SIGNAL *sig);
|
|
uint32_t getParentMessageID(QTreeWidgetItem *cell);
|
|
QString createSignalText(DBC_SIGNAL *sig);
|
|
void populateUsedIDsTable(QTableWidget *table, bool showUnused);
|
|
void jumpToMessage(uint32_t msgID);
|
|
};
|
|
|
|
#endif // DBCMAINEDITOR_H
|