#ifndef TREEVIEWMANAGER_H #define TREEVIEWMANAGER_H #include <QWidget> #include <QTreeView> #include <QJsonObject> #include <QStandardItemModel> #include <QMap> #include <QCheckBox> #include <QJsonDocument> #include <QJsonArray> #include <QFile> #include <QVBoxLayout> #include <QLabel> #include <QLineEdit> #include <QComboBox> #include <QRadioButton> #include <QButtonGroup> #include <QDebug> #include <QPushButton> #include <QStyleFactory> #include <QTimer> #include <QPainter> #include <QEvent> #include <QStringList> #include <QSettings> #include <QSet> #include <QVariant> #include <QMenu> #include <QAction> #include <QMessageBox> #include <QTimeEdit> #include <QHBoxLayout> #include <QCursor> #include <QScrollArea> #include <QToolButton> #include <QFileInfo> class OriginalWnd; // ǰ������ class TreeViewManager : public QWidget { Q_OBJECT public: /** * @brief ���캯�� * @param parent ������ * @param downView ����Ŀ¼������ͼ * @param widget2 �����������ȷ��������λ�� */ explicit TreeViewManager(OriginalWnd* originalWnd, QWidget *widget2, QWidget *parent = nullptr); virtual ~TreeViewManager(); void applyCustomStyles(); //Ŀ¼����ʽ void clearThirdLevelMenu(); //��������������Ŀ¼�˵����� void switchConfig(const QString &configKey); //�л������ļ� void loadJsonFromFile(const QString &filePath); //���� JSON ���� void updateNavigationBar(const QModelIndex &index); //���µ��������ݣ����ݵ����Ŀ¼�̬��ʾ void preloadAllConfigs(const QStringList &configPaths); // ���ض�������ļ����ڴ� QModelIndex findLastVisibleChild(const QModelIndex &parentIndex); // �ָ��� �ҵ����һ���ɼ����� void loadButtonConfigForThirdLevel(const QJsonObject &thirdLevelObj); //���ز���ʾ����Ŀ¼�İ�ť������Ϣ void drawSiblingLine(const QModelIndex &childIndex, QPainter &painter); //������ void paintAllBranches(const QModelIndex &parentIndex, QPainter &painter); //����ֱ�� void drawParentChildLine(const QModelIndex &childIndex, QPainter &painter); //L�ս��ߣ����������߶εij��� void loadJsonDoc(const QJsonDocument &doc, const QString &configFilePath); // ֱ�Ӵ��� QJsonDocument ���м��� private: QWidget *widget2; // �����������ȷ��������λ�� QTreeView *treeViewDown; // ����Ŀ¼�� OriginalWnd *m_originalWnd; // ����ָ�� OriginalWnd ��ָ�� QWidget *navigationWidget; // ��̬���������� QPushButton *buttonOpenFile; // ����һ���˵� QPushButton *buttonUp; // ������������ QPushButton *buttonDown; // ������������ QPushButton *buttonLeft; // ������һ��Ŀ¼ QPushButton *buttonRight; // ������һ��Ŀ¼ QList<QWidget*> m_fieldWidgets; // �洢�����˵��еĿɵ����ؼ� int m_currentFieldIndex = -1; // ��ǰ����ؼ������� QStandardItemModel *downModel; // ��״�ṹģ�� QVBoxLayout *navigationLayout; // ���������� bool m_blockItemChanged; // ��ֹ�ݹ鴥���ź� void updateChildItems(QStandardItem *parentItem, Qt::CheckState state); // ������������ĸ�ѡ��״̬ void updateParentItems(QStandardItem *parentItem); // �������и���ĸ�ѡ��״̬ QSet<QString> checkedPaths; // ��¼��ѡ�еĸ�ѡ��·�� QString currentConfigFilePath; // ��ǰ�����ļ�·�� QMap<QString, QJsonDocument> m_configCache; // ���ڻ������������ļ� JSON void clearAllSeparators(); // ���ز�ɾ�����зָ��� QString currentConfigKey(const QString &configFilePath); // ʹ���ļ�����ΪΨһ��ʶ�� QStandardItem* findFirstThirdLevelItemDFS(QStandardItem *parentItem); // ���ҷ�����Ŀ¼���������ӷָ��� void setCheckedPaths(const QStringList &checkedPaths); // ����·�����ø�ѡ��״̬ QStringList collectCheckedPaths(); // �ռ����б�ѡ�еĸ�ѡ��·�� void saveCheckedPaths(); //���渴ѡ��״̬ void loadCheckedPaths(); //���ظ�ѡ��״̬ QJsonDocument m_jsonDoc; // �洢�Ѽ��ص� JSON �ĵ� QSet<QString> visitedPaths; // ���ڴ洢ѡ��·�� QSet<QString> expandedPaths; // ���ڴ洢ѡ��չ��·�� bool restoring; // ��ʶ��ǰ�Ƿ��ڡ��ָ���״̬ QFrame* createUnifiedSeparator(QWidget *parent, int height = 1); //����������ʽ void updateSeparatorLine(); // Ŀ¼���ĺ��� QMap<QStandardItem*, QFrame*> firstLevelSeparators; // ������¼��һ��Ŀ¼ void saveVisitedPaths(); //���浱ǰѡ����չ��·���� QSettings void loadVisitedPaths(); //�� QSettings �м�����һ�ε�ѡ����չ��·�� void addVisitedPath(const QStringList &path); //��ij��ѡ��·�����ӵ� visitedPaths void removeVisitedPath(const QStringList &path); //��ij��ѡ��·���� visitedPaths ���Ƴ� void addExpandedPath(const QStringList &path); //��ij��չ��·�����ӵ� expandedPaths void removeExpandedPath(const QStringList &path); //��ij��չ��·���� expandedPaths ���Ƴ� QStringList buildItemPath(QStandardItem *item); //�������� QStandardItem ��·������ "һ��/����/����" QModelIndex findItemByPath(const QStringList &path); //����·�����Ҷ�Ӧ�� QModelIndex //QModelIndex getNextIndex(const QModelIndex ¤tIndex); //��ȡ��ǰ��������һ����Ч���� //QModelIndex getLastChildIndex(const QModelIndex &parentIndex); //��ȡ���һ���ӽڵ������ void setupButton(); // ��������ʼ����ť void buildTree(const QJsonObject &jsonObj, QStandardItem *parent); //����Ŀ¼�� void displayThirdLevelFields(const QJsonObject &fields); //��ʾ����Ŀ¼���ֶ����� //���ݷֶ�·���������²�ƥ�� QModelIndex findItemByPathRecursive(QStandardItem *parentItem,const QStringList &path,int depth); //�����ڵ������������������չ��·�� void storeExpandedItems(QStandardItem *parentItem,const QStringList ¤tPath,QStringList &expandedPaths); // �ռ����б�ѡ�еĸ�ѡ��·�� QStringList collectCheckedPathsRecursive(QStandardItem *item = nullptr, QStringList path = QStringList()); protected: bool eventFilter(QObject *watched, QEvent *event) override; //���� Paint �¼� private slots: void onItemChanged(QStandardItem *item); //������ѡ��״̬�ı仯 void onButtonOpenFileClicked(); // �ۺ���������һ���˵� void onButtonUpClicked(); // �ۺ����������������� void onButtonDownClicked(); // �ۺ����������������� void onButtonLeftClicked(); // �ۺ�����������һ��Ŀ¼ void onButtonRightClicked(); // �ۺ�����������һ��Ŀ¼ }; #endif // TREEVIEWMANAGER_H