ctai/src/ctai_textedit.h
2025-03-02 00:06:33 +08:00

87 lines
2.5 KiB
C++

// ctaitextedit.h
#ifndef CTAI_TEXTEDIT_H
#define CTAI_TEXTEDIT_H
#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QPushButton>
#include <QTextEdit>
#include <QLineEdit>
#include <QDateTime>
#include <QComboBox>
#include <QTextDocument>
#include <QApplication>
#include <QClipboard>
#include <QMenu>
#include <QFileDialog>
#include <QMessageBox>
#include <QTextBrowser>
#include "ctai_base.h"
#include "ctai_parsestring.h"
#define MD4QT_QT_SUPPORT
#include <3rdparty/md4qt/md4qt/parser.h>
#include <3rdparty/md4qt/md4qt/html.h>
typedef struct tokens_args{
QString prompt_tokens={};
QString completion_tokens={};
QString total_tokens={};
QString cache_hit_tokens={};
QString cache_miss_tokens={};
}tokens_data;
class ctai_textedit : public QWidget
{
Q_OBJECT
public:
ctai_textedit(msg_type msg_type_mode);
~ctai_textedit();
void add_message(const model_data &message);
int get_content_height() const;
private slots:
void on_delete_clicked(); // 删除按钮
void on_copy_clicked(); // 复制按钮
void on_save_clicked(); // 保存按钮
void on_menu_clicked(); // 菜单按钮
void on_fold_clicked(); // 折叠按钮
void on_tokens_clicked(); // tokens按钮
signals:
void delete_requested(); // 请求删除此消息
private:
void init_layout(msg_type msg_type_mode);
void connect_signals(msg_type msg_type_mode); // 连接信号和槽
private:
QSpacerItem *sparcer_item = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Fixed);
QVBoxLayout *mainLayout={};
QVBoxLayout *headerLayout={};
QHBoxLayout *header_info_Layout={};
QVBoxLayout *historyLayout={};
QHBoxLayout *header_opts_Layout={};
QPushButton *m_msg_header_ico={};
QLineEdit *m_msg_header={};
QTextEdit *m_msg_history={};
QPushButton *m_msg_del={};
QPushButton *m_msg_copy={};
QPushButton *m_msg_save={};
QPushButton *m_msg_menu={};
QPushButton *m_msg_fold={}; // 折叠按钮
QPushButton *m_msg_tokens={};
QMenu *m_msg_tokens_menu={};
QAction *m_menu_prompt_tokens={};
QAction *m_menu_completion_tokens={};
QAction *m_menu_total_tokens={};
QAction *m_menu_cache_hit_tokens={};
QAction *m_menu_cache_miss_tokens={};
bool m_is_folded = false; // 折叠状态
tokens_data m_tokens_data;
QSpacerItem *bottom_spacer = new QSpacerItem(0, 0, QSizePolicy::Fixed, QSizePolicy::Expanding);
};
#endif // CTAI_TEXTEDIT_H