// ctaitextedit.h #ifndef CTAI_TEXTEDIT_H #define CTAI_TEXTEDIT_H #include #include #include #include #include "ctai_base.h" struct MessageItem { QString messageId; QString messageFp; QString timestamp; QString content; QString prompts_tkoens; QString completion_tokens; QString total_tokens; QString cache_hit_tokens; QString cache_miss_tokens; bool isCollapsed; }; class ctai_textedit : public QTextBrowser { Q_OBJECT public: explicit ctai_textedit(QWidget *parent = nullptr); void appendMessage(const model_data& content); void startStreamingMessage(const model_data& messageId); void appendStreamContent(const model_data& content); void finishStreamingMessage(); public slots: void deleteMessage(const QString& messageId); void copyMessage(const QString& messageId); void saveMessage(const QString& messageId); void toggleCollapse(const QString& messageId); private: void createMessageControls(const QString& messageId); void messageDisplay(const QString& messageId); void streamMessageDisplay(const QString& messageId); void insertSeparatorLine(); private: QMap messages; QString currentStreamingId; QMap messageControls; }; #endif // CTAI_TEXTEDIT_H