#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include "serialworker.h" #include "rawview.h" #include "tableview.h" #include "tagwidget.h" #include "videowidget.h" #include "connectdialog.h" #include class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void onConnectClicked(); void onDisconnectClicked(); void onPortOpened(); void onPortClosed(); void onReconnecting(int attempt); void onClearScreen(); void onError(const QString &message); void onNewLine(const QString &line); void onTagDetected(const QString &tag, const QString &value); void showFormatReference(); void configureTagFilter(); void showAbout(); protected: void closeEvent(QCloseEvent *event) override; private: void setupUi(); void setupToolBar(); void setupStatusBar(); void clearAllViews(); void doShutdown(); void saveSettings(); void restoreSettings(); // Worker & thread QThread *m_thread = nullptr; SerialWorker *m_worker = nullptr; // Views RawView *m_rawView = nullptr; TableView *m_tableView = nullptr; TagWidget *m_tagWidget = nullptr; VideoWidget *m_videoWidget= nullptr; // Status bar widgets QLabel *m_portLabel = nullptr; QLabel *m_stateLabel = nullptr; QLabel *m_reconnectLabel = nullptr; // Toolbar widgets QCheckBox *m_autoReconnectCb = nullptr; QSpinBox *m_reconnectIntervalSb= nullptr; // Actions QAction *m_connectAction = nullptr; QAction *m_disconnectAction = nullptr; // Splitters (saved/restored via QSettings) QSplitter *m_mainSplitter = nullptr; QSplitter *m_rightSplitter = nullptr; SerialConfig m_lastConfig; QSet m_suppressedTags; // tags hidden from Raw view bool m_shutdownDone = false; };