124 lines
3.9 KiB
C++
124 lines
3.9 KiB
C++
// ctaitextedit.h
|
|
#ifndef CTAIHISTORYTEXTEDIT_H
|
|
#define CTAIHISTORYTEXTEDIT_H
|
|
|
|
// Qt核心组件
|
|
#include <QWidget>
|
|
#include <QString>
|
|
#include <QApplication>
|
|
#include <QClipboard>
|
|
// Qt布局相关
|
|
#include <QVBoxLayout>
|
|
#include <QHBoxLayout>
|
|
#include <QSpacerItem>
|
|
|
|
// Qt控件相关
|
|
#include <QPushButton>
|
|
#include <QTextEdit>
|
|
#include <QLineEdit>
|
|
#include <QFrame>
|
|
#include <QMenu>
|
|
#include <QAction>
|
|
#include <QAbstractTextDocumentLayout>
|
|
#include <QTimer>
|
|
#include <QLabel>
|
|
#include <QComboBox>
|
|
#include <QTextBlock>
|
|
#include <QChar>
|
|
#include <QDesktopServices>
|
|
// Qt对话框
|
|
#include <QFileDialog>
|
|
#include <QMessageBox>
|
|
// Qt WebEngine
|
|
|
|
// 系统相关
|
|
#include <mutex>
|
|
// 项目相关头文件
|
|
#include "ctai_base.h"
|
|
#include "ctaiMathConvert.h"
|
|
#include "ctaiHistoryTools.h"
|
|
#include "QCefWidget/CefWidget.h"
|
|
std::mutex m_mutex;
|
|
class ctaiHistoryTextEdit : public QWidget
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
ctaiHistoryTextEdit(QWidget *parent = nullptr);
|
|
~ctaiHistoryTextEdit();
|
|
void initLayout(msg_type msg_type_mode);
|
|
void initMsgHeaderLayout(msg_type msg_type_mode);
|
|
void initMsgHistoryLayout();
|
|
void initMsgLine();
|
|
void addUserMessage(const model_data &message);
|
|
void addSystemMessage(const model_data &message);
|
|
void updateTokensMessage(const model_data &message);
|
|
void addHeaderMessage(const model_data &message);
|
|
private slots:
|
|
void slotsOnDelete(); // 删除按钮
|
|
void slotsOnCopy(); // 复制按钮
|
|
void slotsOnFold(); // 折叠按钮
|
|
void slotsOnTokens(); // tokens按钮
|
|
void slotsOnDisplay(QString); // 显示模式改变
|
|
void slotsOnDisplayFontSize(); // 字体大小改变
|
|
void slotsOnSyncHeight();
|
|
void slotsOnSave(QString,int); // 保存文本
|
|
void slotsOnOptsMenu();
|
|
void slotsOnSendBrowser();
|
|
void slotsHisResToSend();
|
|
signals:
|
|
void signalsDeleteMsg(QString); // 请求删除此消息
|
|
void signalsRowHeightChanged(bool);
|
|
void signalsEditHisResToSend(QString,HISTORY_SEND_MODE);
|
|
private:
|
|
void connect_signals(msg_type msg_type_mode); // 连接信号和槽
|
|
void set_default_opts();
|
|
private:
|
|
CefWidget* m_cef_widget={};
|
|
ctaiMathConvert *m_math_convert;
|
|
QFrame *msg_line;
|
|
QSpacerItem *sparcer_item = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Fixed);
|
|
QVBoxLayout *main_layout = {};
|
|
QVBoxLayout *header_layout = {};
|
|
QHBoxLayout *header_info_layout = {};
|
|
QHBoxLayout *header_opts_layout = {};
|
|
QVBoxLayout *history_layout = {};
|
|
|
|
QPushButton *m_msg_system_header_ico = {};
|
|
QPushButton *m_msg_user_header_ico = {};
|
|
QLineEdit *m_msg_header = {};
|
|
QTextEdit *m_msg_history = {};
|
|
QPushButton *m_msg_fold = {};
|
|
QPushButton *m_msg_delete = {};
|
|
QPushButton *m_msg_tokens = {};
|
|
QPushButton *m_history_to_send = {};
|
|
QPushButton *m_restart_to_send = {};
|
|
// 信息功能区
|
|
ctaiHistoryTools *m_msg_tools = {};
|
|
// 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 = {};
|
|
//WebEngine
|
|
|
|
// 保存展开时的原始高度
|
|
int m_original_height = 0;
|
|
// 折叠状态
|
|
bool m_is_folded = false;
|
|
// 本次会话的tokens消耗信息
|
|
tokens_data m_tokens_data;
|
|
// 本次信息ID
|
|
QString m_msg_sned_id = {};
|
|
// 本次信息
|
|
QString m_current_content;
|
|
//粗体字
|
|
bool m_bold=false;
|
|
std::vector<QString> save_extend={".txt",".html",".md",".pdf"};
|
|
std::vector<QString> save_extend_str={"文本文件 (*.txt)","HTML 文件 (*.html)","Markdown 文件 (*.md)","PDF 文件 (*.pdf)"};
|
|
QSpacerItem *bottom_spacer = new QSpacerItem(0, 0, QSizePolicy::Fixed, QSizePolicy::Expanding);
|
|
};
|
|
|
|
#endif // ctai_history_textedit_H
|