feat(chat): 重做聊天窗口界面

- 消息改成气泡列表:头像、左右分栏、markdown 正文、hover 显示复制/编辑/分支/重试
- 会话列表:应用图标 + 名称、每项显示标题/最后一条预览/时间、hover 与选中态
- 输入区:圆角输入框内嵌发送按钮、快捷键提示
- 空会话欢迎页;消息区域支持拖放
- 头部显示当前会话标题与模型徽章
- 设置/更多按钮移到侧栏底部
This commit is contained in:
2026-10-30 20:40:45 +08:00
parent 5fbf7d7931
commit 798f5aa7ce
9 changed files with 883 additions and 265 deletions
+55
View File
@@ -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;
};