Files
gxde-ai-see/src/chat/chatview.h
T
shenmo ca088fbaa6 feat(panel/chat): 显隐切换、暂存清空隐藏、菜单避让、待办联动、DTK 关于
- 传送门 desktop 入口,--show 再点一次回 daemon;右键菜单加隐藏
- 暂存区清空后整个面板隐藏
- 右键菜单弹到面板左侧,避免被自己遮挡
- 启动悬停 80ms
- 添加待办后立即打开待办窗口;待办独立图标
- 分词胶囊按浅/深色取色,修复透明不可见
- 关于改用 DAboutDialog
- 聊天消息下方常驻 复制/编辑/重试;助手消息可编辑、可从任意一条重试
2026-10-30 22:27:16 +08:00

56 lines
1.3 KiB
C++

// 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(int index);
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;
};