feat(chat): 重做聊天窗口界面
- 消息改成气泡列表:头像、左右分栏、markdown 正文、hover 显示复制/编辑/分支/重试 - 会话列表:应用图标 + 名称、每项显示标题/最后一条预览/时间、hover 与选中态 - 输入区:圆角输入框内嵌发送按钮、快捷键提示 - 空会话欢迎页;消息区域支持拖放 - 头部显示当前会话标题与模型徽章 - 设置/更多按钮移到侧栏底部
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
// SPDX-FileCopyrightText: 2026 GXDE OS Team
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <QScrollArea>
|
||||
#include <QVector>
|
||||
|
||||
#include "chatclient.h"
|
||||
|
||||
class QLabel;
|
||||
class QMimeData;
|
||||
class QUrl;
|
||||
class QVBoxLayout;
|
||||
|
||||
/**
|
||||
* Scrollable message list with chat bubbles, avatars and inline actions.
|
||||
*/
|
||||
class ChatMessageList : public QScrollArea
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit ChatMessageList(QWidget *parent = nullptr);
|
||||
|
||||
void setMessages(const QVector<ChatMessage> &messages);
|
||||
void appendMessage(const ChatMessage &message);
|
||||
void updateMessage(int index, const QString &content);
|
||||
void appendNote(const QString &text);
|
||||
void clear();
|
||||
|
||||
void scrollToBottom();
|
||||
|
||||
signals:
|
||||
void dropped(const QMimeData *mime);
|
||||
void copyRequested(int index);
|
||||
void editRequested(int index);
|
||||
void forkRequested(int index);
|
||||
void retryRequested();
|
||||
void linkActivated(const QUrl &url);
|
||||
|
||||
protected:
|
||||
void dragEnterEvent(QDragEnterEvent *event) override;
|
||||
void dragMoveEvent(QDragMoveEvent *event) override;
|
||||
void dropEvent(QDropEvent *event) override;
|
||||
|
||||
private:
|
||||
void rebuild();
|
||||
|
||||
QWidget *m_container = nullptr;
|
||||
QVBoxLayout *m_layout = nullptr;
|
||||
QWidget *m_welcome = nullptr;
|
||||
QVector<class MessageRow *> m_rows;
|
||||
QVector<ChatMessage> m_messages;
|
||||
};
|
||||
Reference in New Issue
Block a user