#pragma once #include #include #include #include #include class FileTreeWidget : public QTreeWidget { Q_OBJECT public: explicit FileTreeWidget(QWidget *parent = nullptr); ~FileTreeWidget(); void setRootPath(const QString &path); QString rootPath() const; void refreshTree(); signals: void fileSelected(const QString &filePath); void fileDoubleClicked(const QString &filePath); void directorySelected(const QString &dirPath); private slots: void onItemClicked(QTreeWidgetItem *item, int column); void onItemDoubleClicked(QTreeWidgetItem *item, int column); void onCustomContextMenu(const QPoint &point); void onDirectoryChanged(const QString &path); void newFile(); void newFolder(); void deleteItem(); void renameItem(); private: void populateTree(const QString &path, QTreeWidgetItem *parent = nullptr); void setupContextMenu(); QString getItemPath(QTreeWidgetItem *item) const; bool isDirectory(QTreeWidgetItem *item) const; QString m_rootPath; QFileSystemWatcher *m_fileWatcher; QMenu *m_contextMenu; QTreeWidgetItem *m_contextItem; };