#pragma once #include #include #include #include #include #include #include #include "tools/cabana/chart/chartswidget.h" #include "tools/cabana/dbc/dbcmanager.h" #include "tools/cabana/detailwidget.h" #include "tools/cabana/messageswidget.h" #include "tools/cabana/videowidget.h" #include "tools/cabana/tools/findsimilarbits.h" class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(); void dockCharts(bool dock); void showStatusMessage(const QString &msg, int timeout = 0) { statusBar()->showMessage(msg, timeout); } void loadFile(const QString &fn, SourceSet s = SOURCE_ALL); ChartsWidget *charts_widget = nullptr; public slots: void openStream(); void closeStream(); void changingStream(); void streamStarted(); void newFile(SourceSet s = SOURCE_ALL); void openFile(SourceSet s = SOURCE_ALL); void openRecentFile(); void loadDBCFromOpendbc(const QString &name); void save(); void saveAs(); void saveToClipboard(); signals: void showMessage(const QString &msg, int timeout); void updateProgressBar(uint64_t cur, uint64_t total, bool success); protected: void remindSaveChanges(); void closeFile(SourceSet s = SOURCE_ALL); void closeFile(DBCFile *dbc_file); void saveFile(DBCFile *dbc_file); void saveFileAs(DBCFile *dbc_file); void saveFileToClipboard(DBCFile *dbc_file); void loadFromClipboard(SourceSet s = SOURCE_ALL, bool close_all = true); void autoSave(); void cleanupAutoSaveFile(); void updateRecentFiles(const QString &fn); void updateRecentFileActions(); void createActions(); void createDockWindows(); void createStatusBar(); void createShortcuts(); void closeEvent(QCloseEvent *event) override; void DBCFileChanged(); void updateDownloadProgress(uint64_t cur, uint64_t total, bool success); void setOption(); void findSimilarBits(); void findSignal(); void undoStackCleanChanged(bool clean); void undoStackIndexChanged(int index); void onlineHelp(); void toggleFullScreen(); void updateStatus(); void updateLoadSaveMenus(); void createDockWidgets(); void eventsMerged(); VideoWidget *video_widget = nullptr; QDockWidget *video_dock; QDockWidget *messages_dock; MessagesWidget *messages_widget = nullptr; CenterWidget *center_widget; QWidget *floating_window = nullptr; QVBoxLayout *charts_layout; QProgressBar *progress_bar; QLabel *status_label; QJsonDocument fingerprint_to_dbc; QSplitter *video_splitter = nullptr; enum { MAX_RECENT_FILES = 15 }; QAction *recent_files_acts[MAX_RECENT_FILES] = {}; QMenu *open_recent_menu = nullptr; QMenu *manage_dbcs_menu = nullptr; QMenu *tools_menu = nullptr; QAction *close_stream_act = nullptr; QAction *save_dbc = nullptr; QAction *save_dbc_as = nullptr; QAction *copy_dbc_to_clipboard = nullptr; QString car_fingerprint; int prev_undostack_index = 0; int prev_undostack_count = 0; QByteArray default_state; friend class OnlineHelp; }; class HelpOverlay : public QWidget { Q_OBJECT public: HelpOverlay(MainWindow *parent); protected: void drawHelpForWidget(QPainter &painter, QWidget *w); void paintEvent(QPaintEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; bool eventFilter(QObject *obj, QEvent *event) override; };