#ifndef NODETREEDELEGATE_H
#define NODETREEDELEGATE_H

#include <QStyledItemDelegate>
#include "editorsettingsoptions.h"

class QTreeView;
class QListView;

class NodeTreeDelegate : public QStyledItemDelegate// NodeTreeDelegate 类继承自 QStyledItemDelegate
{
    Q_OBJECT// Qt 元对象宏，用于信号和槽机制
public:// 构造函数，初始化 NodeTreeDelegate
    explicit NodeTreeDelegate(QTreeView *view, QObject *parent = nullptr,
                              QListView *listView = nullptr);
    void setTheme(Theme::Value theme);// 设置主题
signals:
    void addFolderRequested();// 信号：请求添加文件夹
    void addTagRequested();// 信号：请求添加标签
    void themeChanged(Theme::Value theme);// 信号：主题变化

    // QAbstractItemDelegate interface
    // 实现 QAbstractItemDelegate 接口
public:
    virtual void paint(QPainter *painter, const QStyleOptionViewItem &option,// 绘制项
                       const QModelIndex &index) const override;
    virtual QSize sizeHint(const QStyleOptionViewItem &option,// 计算项的大小提示
                           const QModelIndex &index) const override;
    virtual QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
                                  const QModelIndex &index) const override;// 创建编辑器
    virtual void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option,
                                      const QModelIndex &index) const override;// 更新编辑器的几何形状

private:
    void paintBackgroundSelectable(QPainter *painter, const QStyleOptionViewItem &option,
                                   const QModelIndex &index) const;// 绘制可选择的背景

private:
    // 显示字体名称
    QString m_displayFont;
    // 标题字体
    QFont m_titleFont;
    // 选中标题字体
    QFont m_titleSelectedFont;
    // 日期字体
    QFont m_dateFont;
    // 分隔符字体
    QFont m_separatorFont;
    // 笔记数量字体
    QFont m_numberOfNotesFont;
    // 标题颜色
    QColor m_titleColor;
    // 选中标题颜色
    QColor m_titleSelectedColor;
    // 日期颜色
    QColor m_dateColor;
    // 活动颜色
    QColor m_ActiveColor;
    // 非活动颜色
    QColor m_notActiveColor;
    // 悬停颜色
    QColor m_hoverColor;
    // 应用程序非活动颜色
    QColor m_applicationInactiveColor;
    // 分隔符颜色
    QColor m_separatorColor;
    // 默认颜色
    QColor m_defaultColor;
    // 分隔符文本颜色
    QColor m_separatorTextColor;
    // 当前背景颜色
    QColor m_currentBackgroundColor;
    // 笔记数量颜色
    QColor m_numberOfNotesColor;
    // 选中笔记数量颜色
    QColor m_numberOfNotesSelectedColor;
    // 文件夹图标颜色
    QColor m_folderIconColor;
    // 树视图指针
    QTreeView *m_view;
    // 列表视图指针
    QListView *m_listView;
    // 主题值
    Theme::Value m_theme;
};

#endif // NODETREEDELEGATE_H
