#ifndef TAGTREEDELEGATEEDITOR_H
#define TAGTREEDELEGATEEDITOR_H

#include <QWidget> // 包含QWidget类，所有UI对象的基类
#include <QStyleOptionViewItem> // 包含用于自定义绘图项的选项
#include <QModelIndex> // 包含用于操作模型索引的类
#include <QFont> // 包含用于操作字体的类
#include "editorsettingsoptions.h" // 包含自定义的编辑器设置选项

class QTreeView; // 前向声明QTreeView类，用于树形视图
class QLabel; // 前向声明QLabel类，用于显示文本
class PushButtonType; // 前向声明自定义按钮类型
class LabelEditType; // 前向声明自定义标签编辑类型
class QListView; // 前向声明QListView类，用于列表视图

class TagTreeDelegateEditor : public QWidget // 定义一个自定义代理编辑器类，继承自QWidget
{
    Q_OBJECT // 宏，用于声明元对象系统支持

            public :
        // 构造函数，接收树形视图、样式选项、模型索引、列表视图和父窗口指针
        explicit TagTreeDelegateEditor(QTreeView *view, const QStyleOptionViewItem &option,
                                       const QModelIndex &index, QListView *listView,
                                       QWidget *parent = nullptr);

    // 设置主题的函数
    void setTheme(Theme::Value theme);

private:
    QStyleOptionViewItem m_option; // 保存样式选项
    QModelIndex m_index; // 保存模型索引
    QString m_displayFont; // 保存显示字体
    QFont m_titleFont; // 保存标题字体
    QColor m_titleColor; // 保存标题颜色
    QColor m_titleSelectedColor; // 保存标题选中颜色
    QColor m_activeColor; // 保存活动颜色
    QColor m_hoverColor; // 保存悬停颜色
    QTreeView *m_view; // 保存树形视图指针
    QListView *m_listView; // 保存列表视图指针
    LabelEditType *m_label; // 保存标签编辑类型指针
    PushButtonType *m_contextButton; // 保存上下文按钮类型指针
    Theme::Value m_theme; // 保存当前主题

    // 更新代理的函数
    void updateDelegate();

    // QWidget接口重写
protected:
    // 重写绘制事件处理函数
    virtual void paintEvent(QPaintEvent *event) override;
    // 重写鼠标双击事件处理函数
    virtual void mouseDoubleClickEvent(QMouseEvent *event) override;
};

#endif // TAGTREEDELEGATEEDITOR_H
