#ifndef ORBITHUB_TERMINAL_VIEW_H #define ORBITHUB_TERMINAL_VIEW_H #include #include class QKeyEvent; class QFocusEvent; class QResizeEvent; class TerminalView : public QTextEdit { Q_OBJECT public: explicit TerminalView(QWidget* parent = nullptr); static QStringList themeNames(); void setThemeName(const QString& themeName); void appendTerminalData(const QString& data); signals: void inputGenerated(const QString& input); void terminalSizeChanged(int columns, int rows); protected: void keyPressEvent(QKeyEvent* event) override; void focusInEvent(QFocusEvent* event) override; void resizeEvent(QResizeEvent* event) override; private: struct ThemePalette { QString name; QColor background; QColor foreground; std::array normal; std::array bright; }; ThemePalette m_palette; QString m_pendingEscape; QString m_rawHistory; bool m_bold; bool m_hasFgColor; bool m_hasBgColor; QColor m_fgColor; QColor m_bgColor; QTextCharFormat m_currentFormat; static ThemePalette paletteByName(const QString& themeName); static QColor colorFrom256Index(int index); void applyThemePalette(const ThemePalette& palette); void applyCurrentFormat(); void resetSgrState(); void handleSgrSequence(const QString& params); void appendTextChunk(const QString& text); QColor paletteColor(bool background, int index, bool bright) const; void processData(const QString& data, bool storeInHistory); int terminalColumns() const; int terminalRows() const; void emitTerminalSize(); }; #endif