#ifndef DBCMAINEDITOR_H #define DBCMAINEDITOR_H #include #include #include #include #include #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 *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 *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 searchItems; int searchItemPos; //bidirectional mapping of QTreeWidget items back and forth to DBC objects QMap nodeToItem; QMap messageToItem; QMap signalToItem; QMap itemToNode; QMap itemToMessage; QMap 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